{"version":3,"sources":["helpers/Helper.js","components/SkiArea/SkiAreaDetail/Listings/ListingListTable.js","components/SkiArea/SkiAreaDetail/Listings/AccommodationListTable.js","components/CustomHooks/useAuth.js","ScrollToTop.js","components/Common/Autocomplete.js","components/Common/Loader.js","components/Common/Home.js","components/Common/Login.js","components/Common/Register.js","components/Common/ConfirmEmail.js","components/Common/ForgotPassword.js","components/Common/ResetPassword.js","components/Common/Contact.js","components/Common/WayPointAutocomplete.js","components/Common/RouteFinder.js","components/Common/CommonPage.js","components/Common/GeneralSearch.js","static-contents/Snow_Japan_Color_Logo.svg","components/Common/Header.js","components/Common/MainNav.js","components/Common/SearchMemberBar.js","static-contents/sj-logo-round.png","components/Common/Footer.js","components/SkiArea/MapPath.js","components/SkiArea/JapanMap.js","components/SkiArea/Home.js","components/Common/PrefectureCheckList.js","components/Common/TownCheckList.js","components/Common/AreaCheckList.js","components/SkiArea/SearchResult.js","components/SkiArea/SkiAreaSearch.js","components/SkiArea/SkiAreaSearchContainer.js","components/CustomHooks/useSkiAreaPhotos.js","components/SkiArea/SkiAreaPhotoDetail.js","components/SkiArea/SkiAreaPhotos.js","components/CustomHooks/useSkiAreaReviews.js","components/SkiArea/SkiAreaReviewDetail.js","components/SkiArea/SkiAreaReviews.js","components/SkiArea/Areas.js","components/SkiArea/Prefectures.js","components/SkiArea/Towns.js","components/SkiArea/Listings.js","components/SkiArea/SkiAreaContainer.js","components/SkiArea/SkiAreaListMap.js","components/Common/SkiAreaMapContainer.js","components/SkiArea/SkiAreaList.js","components/SkiArea/SkiAreaDetail/SkiAreaDetailTabs.js","components/SkiArea/SkiAreaDetail/SkiAreaInfo.js","components/SkiArea/SkiAreaDetail/BasicInfo/CourseMap.js","components/SkiArea/SkiAreaDetail/BasicInfo/SkiMountain.js","components/SkiArea/SkiAreaDetail/BasicInfo/SkiSnowBoard.js","components/SkiArea/SkiAreaDetail/BasicInfo/Facilities.js","components/SkiArea/SkiAreaDetail/BasicInfo/SeasonOpeningTime.js","components/SkiArea/SkiAreaDetail/BasicInfo/LiftTicketCharges.js","components/SkiArea/SkiAreaDetail/BasicInfo/ContactInformation.js","components/SkiArea/SkiAreaDetail/BasicInfo/BasicInfoContainer.js","components/SkiArea/SkiAreaDetail/DailyReport/DailyReportContainer.js","components/SkiArea/SkiAreaDetail/History/HistoryContainer.js","components/SkiArea/SkiAreaDetail/Listings/ListingsContainer.js","components/SkiArea/SkiAreaDetail/Location/LocationContainer.js","components/SkiArea/SkiAreaDetail/Photos/PhotoDetail.js","components/SkiArea/SkiAreaDetail/Photos/PhotosContainer.js","components/SkiArea/SkiAreaDetail/Reviews/ReviewDetail.js","components/SkiArea/SkiAreaDetail/Reviews/ReviewsContainer.js","components/SkiArea/SkiAreaDetail/RouteFinder/RouteFinderContainer.js","components/Common/SnowChart.js","components/Common/SeasonSnowChart.js","components/SkiArea/SkiAreaDetail/SnowData/SnowTable.js","components/SkiArea/SkiAreaDetail/SnowData/SnowDataContainer.js","components/SkiArea/SkiAreaDetail/Weather/WeatherContainer.js","components/SkiArea/SkiAreaDetail/Spotlight/SpotlightContainer.js","components/SkiArea/SkiAreaDetail/SkiAreaDetailContainer.js","components/DailyReport/Home.js","components/DailyReport/AllReportCalendar.js","components/DailyReport/Calendar.js","components/DailyReport/OfficialSnowDepth.js","components/DailyReport/Webcams.js","components/DailyReport/DailyReportContainer.js","components/DailyReport/Detail/DetailTabs.js","components/DailyReport/Detail/Common/DailyReportInfo.js","components/DailyReport/Detail/Common/DailyObservedSnowfall.js","components/DailyReport/Detail/Common/RecentDailyReports.js","components/DailyReport/Detail/Common/SnowfallStatistics.js","components/DailyReport/Detail/Common/DetailDailyReport.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/DailySnowfall.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/MonthlySnowfall.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/MonthlySnowfallTable.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/SeasonSnowfall.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/DaylySnowfallTable.js","components/DailyReport/Detail/ObservedSnowfallAnalysis/ObservedSnowfallAnalysisContainer.js","components/DailyReport/Detail/SnowDepthAnalysis/SnowDepthAnalysisContainer.js","components/DailyReport/Detail/Weather/WeatherContainer.js","components/DailyReport/Detail/Season/SeasonSummary.js","components/DailyReport/Detail/Season/SeasonReportCalendar.js","components/DailyReport/Detail/Season/SeasonContainer.js","components/DailyReport/Detail/Archives/MonthlyReportsListing.js","components/DailyReport/Detail/Archives/MonthlyReportsListingContainer.js","components/DailyReport/Detail/Archives/ArchivesContainer.js","components/DailyReport/Detail/YearlyAnalysisTab.js","components/DailyReport/Detail/About/AboutDailyReport.js","components/DailyReport/Detail/DetailContainer.js","components/Common/NearbySkiAreaCheckList.js","components/Accommodation/SearchResult.js","components/Accommodation/Home.js","components/Accommodation/AccommodationContainer.js","components/Accommodation/AccommodationDetail/AccommodationDetailTabs.js","components/Accommodation/AccommodationDetail/AccommodationInfo.js","components/Accommodation/AccommodationDetail/BasicInfo/BasicInfoContainer.js","components/Accommodation/AccommodationDetail/Photographs/PhotographsContainer.js","components/Accommodation/AccommodationDetail/RouteFinder/RouteFinderContainer.js","components/Accommodation/AccommodationDetail/AccommodationDetailContainer.js","components/Listing/Home.js","components/Listing/ListingList.js","components/Listing/ListingListContainer.js","components/Listing/ListingDetail.js","components/Listing/ListingContainer.js","components/Guide/Home.js","components/Guide/GuideDetail.js","components/Guide/GuideContainer.js","components/Member/Home.js","components/Member/MemberReviewDetail.js","components/Member/MemberReviews.js","components/Member/ResortAutocomplete.js","components/Member/MemberSubmitReview.js","components/Member/MemberPhotoDetail.js","components/Member/MemberPhotos.js","components/Common/Uploader.js","components/Member/MemberUploadPhoto.js","components/Member/MemberContainer.js","App.js","reportWebVitals.js","index.js","components/SkiArea/SkiAreaListTable.js","components/Accommodation/AccommodationListTable.js","components/Listing/ListingListTable.js"],"names":["RenderBreak","text","alteredText","String","split","forEach","item","GetPCIconImageName","iconId","iconImageName","GetWindCIconImageName","GetWthConditionIconImageName","GetVConditionIconImageName","GetCurrentSeasonName","thisDate","Date","thisMonth","getMonth","thisYear","getFullYear","GetPreviousSeasonName","GetTotalMonthDays","monthName","todayDays","ListingListTable","tableData","headingColumns","dataMapping","breakOn","tableClass","data","map","row","index","rowData","i","key","undefined","objName","push","val","eval","UniqueName","SectionUniqueName","IntroductionText","ImageName","to","window","$baseListingUrl","src","alt","Name","className","data-heading","dangerouslySetInnerHTML","__html","col","AccommodationListTable","title","AccommodationUniqueName","PrefectureUniqueName","AccommodationPrefectureUniqueName","TownUniqueName","AccommodationTownUniqueName","TownTypeStr","AccommodationTownTypeStr","AreaUniqueName","AccommodationAreaUniqueName","TopIntroText","ListingImageName","$baseAccommodationUrl","AuthContext","createContext","auth","setAuth","user","setUser","useAuth","useContext","AuthProvider","children","useState","checkLogin","a","thisSessionUser","JSON","parse","sessionStorage","getItem","axios","method","url","$baseSJAPIUrl","FullName","Email","Token","then","loginStatusResult","loggedInUser","UserName","setItem","stringify","err","console","log","useEffect","Provider","value","ScrollToTop","props","location","useLocation","scrollTo","Autocomplete","suggestionsListComponent","skiAreaList","activeSuggestion","setActiveSuggestion","filteredSkiAreas","setFilteredSkiAreas","showSuggestions","setShowSuggestions","userInput","setUserInput","navigate","useNavigate","onClick","e","currentTarget","innerText","selectedSkiAreaNameParts","selectedSkiAreaList","filter","skiArea","trim","length","selectedSkiArea","path","$baseSkiAreaUrl","PrefectureName","type","onChange","thisFilteredSkiAreas","toLowerCase","indexOf","NameJapanese","TownName","TownNameJapanese","AreaName","AreaNameJapanese","onKeyDown","keyCode","Loader","Home","setSkiAreaList","slidingImageList","setSlidingImageList","dailyReportList","setDailyReportList","homeLinkList","setHomeLinkList","setWeatherImportResult","mainHomePageSeason","setMainHomePageSeason","fetchSkiAreaSlidingImagesDailyReportsAndHomeLinks","$baseAPIUrl","resSlidingImage","resDailyReportLatest","resSlidingLinks","dataResortList","resGeneralMessages","Title","resWeatherData","homeLink","LinkTimestamp","LinkType","pathname","URLLink","rel","HeadlineText","href","target","Carousel","controls","indicators","fade","pause","interval","slidingImage","Item","Image","$baseAppUrl","fluid","Id","$baseGuideUrl","$baseRouteFinderUrl","$baseDailyReportUrl","dailyReport","NowReportWeekDay","NowReportDayTh","NowReportMonthFull","NowReportYear","NowReportHourMinute","Login","errMsg","setErrMsg","formerrors","setFormErrors","Username","Password","values","setValues","handleChange","event","name","slice","validate","errors","Object","keys","handleSubmit","preventDefault","RememberMe","loginResult","loggedInUserResult","ResultType","$baseMemberUrl","Message","response","Helmet","content","Form","onSubmit","Row","Group","controlId","Label","Control","placeholder","Button","USER_NAME_REGEX","EMAIL_REGEX","PWD_REGEX","Register","success","setSuccess","isVisible","setIsVisible","ConfirmPassword","test","registrationResult","registeredUser","errRef","current","focus","aria-describedby","icon","faQuestionCircle","Collapse","in","id","aria-label","ConfirmEmail","useParams","statusCode","setStatusCode","nonSuccessMessage","useSearchParams","searchParams","token","get","thisToken","confirmEmailResult","StatusCode","HandleConfirmEmail","ForgotPassword","forgotPasswordResult","forgotPassword","ResetPassword","thisData","resetPasswordResult","invokeCollapse","Contact","successMessage","setSuccessMessage","txtName","txtEmail","txtConfirmEmail","txtContent","SendContactEmail","email","subject","optSubject","dataContact","Check","inline","label","as","rows","WayPointAutocomplete","onRoutePointSelect","initialValue","slNo","controlName","readOnly","coords","newRoutePoint","location_latitude","Location_Latitude","location_longitude","Location_Longitude","input","isValidCoordinate","containerStyle","width","height","center","lat","lng","RouteFinder","params","resort","setResort","generalMessageRouteFinder","setGeneralMessageRouteFinder","originPoint","setOriginPoint","destinationPoint","setDestinationPoint","wayPoints","setWayPoints","showMap","setShowMap","summaryPanel","document","getElementById","alphabetArray","isLoaded","useJsApiLoader","googleMapsApiKey","setMap","directionsResponse","setDirectionsResponse","onLoad","useCallback","onUnmount","fetchResortData","resortUniqueName","dataResort","destinationLocation","fetchData","directionsService","google","maps","DirectionsService","waypts","routeWayPoint","wayPointCoords","join","stopover","routeOriginPoint","originCoords","routeDestinationPoint","destinationCoords","route","origin","destination","waypoints","optimizeWaypoints","travelMode","TravelMode","DRIVING","results","clearRoute","newValue","currentLocation","navigator","geolocation","getCurrentPosition","position","latitude","longitude","alert","wayPoint","newWayPoints","setWayPoint","class","splice","removeWayPoint","disabled","variant","mapContainerStyle","zoom","options","zoomControl","streetViewControl","mapTypeControl","fullscreenControl","directions","panel","CommonPage","guide","setGuide","fetchGuides","guideUniqueName","resGuide","commonPageNmae","HtmlContent","GeneralSearch","accommodationList","setAccommodationList","listingsList","setListingsList","guideList","setGuideList","fetchSearchedSkiArea","keyword","areaIds","dataSkiAreaList","allAreaIds","Set","MainArea_Id","currentElement","dataAccommodationList","dataListingsList","dataGuidesList","SkiAreaListTable","SectionName","Header","textlogo","MainNav","nowList","setNowList","selectedClassNameResort","setSelectedClassNameResort","selectedClassNameNows","setSelectedClassNameNows","selectedClassNameGuide","setSelectedClassNameGuide","selectedClassNameListing","setSelectedClassNameListing","selectedClassNameAbout","setSelectedClassNameAbout","isSkiAreaShown","setIsSkiAreaShown","isDailyReportsShown","setIsDailyReportsShown","isGuideShown","setIsGuideShown","isListingShown","setIsListingShown","isAboutShown","setIsAboutShown","subPageURL","setSubPageURL","fetchNowList","resNowList","thisPathName","classNameResort","classNameNows","classNameGuide","classNameListing","classNameAbout","thisSubPageURL","includes","endsWith","hideSkiAreaSubMenu","hideDailyReportsSubMenu","hideGuideSubMenu","hideListingSubMenu","hideAboutSubMenu","Navbar","bg","expand","collapseOnSelect","Nav","NavDropdown","show","onMouseEnter","onMouseLeave","onSelect","Link","eventKey","now","Brand","Toggle","aria-controls","style","float","marginTop","SearchMemberBar","loggedinUser","setLoggedinUser","setKeyword","logout","logoutStatusResult","FormControl","size","onBlur","Footer","todayYear","setTodayYear","fetchTodayDate","resTodayDate","todayDateParts","roundlogo","MapPath","jpjsconfig","thisJPJSConfig","generalJPJSConfig","thisConfig","thisPathStyle","Stroke","borderColor","active","Fill","upColor","cursor","trigger","open","fill","stroke","vectorEffect","VectorEffect","d","Data","closeOnDocumentClick","keepTooltipInside","JapanMap","version","xmlns","viewBox","xmlSpace","points","strokeDasharray","x1","y1","x2","y2","SkiAreaHome","skiAreaHomePage","setSkiAreaHomePage","prefectureList","setPrefectureList","areaList","setAreaList","townList","setTownList","resPrefecture","resArea","resTown","DropdownButton","align","evtKey","evt","Dropdown","prefecture","TotalResorts","area","town","PrefectureCheckList","selectedPrefectures","prefectureData","setPrefectureData","checked","newData","uniqueName","toggle","CheckboxText","styled","span","Disabled","TownCheckList","selectedTowns","townData","setTownData","prefectures","allTowns","selTowns","selectedTownUniqueNames","obj","refreshTownOpetions","townType","townTypeStr","prefectureUniqueName","AreaCheckList","selectedAreas","areaData","setAreaData","allAreas","selAreas","selectedAreaUniqueNames","refreshAreaOpetions","SearchResult","allSkiAreaList","ClearSort","areas","towns","noFilter","searchedSkiAreaList","setSearchedSkiAreaList","buttonTitle","setButtonTitle","sortColumn","setSortColumn","sortOrder","setSortOrder","searchFilterPrefecture","setSearchFilterPrefecture","searchFilterArea","setSearchFilterArea","searchFilterTown","setSearchFilterTown","ClearSortValues","sort","PerpareSearchFilter","sortedResult","b","nameA","nameB","reverse","MaximumElevation","MinimumElevation","VerticalDifference","TotalSkiLifts","TotalSkiCourses","LongestCourse","SteepestSlope","SkiAreaSearch","setAllSkiAreaList","setPrefectures","setSelectedPrefectures","setAllAreas","setSelectedAreas","setAllTowns","setSelectedTowns","useRef","setShow","setNoFilter","getSearchResult","thisSkiAreaList","searchedSkiAreas","selectedPrefectureList","searchedSkiAreasPrefecture","searchedSkiAreasArea","searchedSkiAreasTown","prefectureUniqueNames","selectedAreaList","areaUniqueNames","selectedTownList","townUniqueNames","resultSkiAreaList","uniquePrefectures","Map","p","getAllSkiAreaPrefectures","allSkiAreas","uniqueAreas","getAllSkiAreaAreas","uniqueTowns","t","getAllSkiAreaTowns","selPrefectures","Offcanvas","onHide","closeButton","Body","SkiAreaSearchContainer","fetchSkiAreaList","useSkiAreaPhotos","queryPhoto","userName","pageNumberPhoto","loadingPhoto","setLoadingPhoto","errorPhoto","setErrorPhoto","photos","setPhotos","hasMorePhoto","setHasMorePhoto","resortid","username","cancelToken","CancelToken","c","cancelPhoto","resPhoto","prevPhotos","catch","isCancel","SkiAreaPhotoDetail","photo","Caption","ResortUniqueName","ResortName","CreatedByUserName","PhotoFileName","CreatedAtDayTh","CreatedAtMonthFull","CreatedAtYear","SkiAreaPhotos","setPaegNumberPhoto","observerPhoto","lastPhotoElementRef","nodePhoto","disconnect","IntersectionObserver","entriesPhoto","isIntersecting","prevPageNumberPhoto","observe","ref","useSkiAreaReviews","queryReview","pageNumberReview","loadingReview","setLoadingReview","errorReview","setErrorReview","reviews","setReviews","hasMoreReview","setHasMoreReview","cancelReview","resReview","prevReviews","SkiAreaReviewDetail","review","Headline","ReviewText","DateVisited","ThingsILiked","ThingsIDidnotLike","ReaderName","SubmittedDayTh","SubmittedMonthFull","SubmittedYear","SkiAreaReviews","setPaegNumberReview","observerReview","lastReviewElementRef","nodeReview","entriesReview","prevPageNumberReview","Areas","fetchAreas","Prefectures","fetchPrefectures","Towns","fetchTown","Listings","SkiAreaContainer","SkiAreaListMap","mapPath","setMapPath","thisPrefecture","thisArea","thisTown","MapImage","SkiAreaMapContainer","mapCenter","mapZoom","selected","setSelected","parseFloat","selectedItem","maximumElevation","minimumElevation","verticalDifference","totalSkiLifts","totalSkiCourses","longestCourse","steepestSlope","townUniqueName","clickable","onCloseClick","SkiAreaList","setPrefecture","setArea","setTown","setOpen","requestType","fetchPrefecture","fetchArea","areaUniqueName","mapZoomLevel","tableTitle","pageTitle","parseInt","Location_MapZoomLevel","aria-expanded","SkiAreaDetailTabs","skiAreaDailyReport","skiAreaLatestWeather","hasListings","baseUrlPath","subItemName","setSubItemName","thisButtonTitle","ResortSpotlightUrl","ReportId","NumberOfReviews","NumberOfPhotos","SkiAreaInfo","PrefectureNameJapanese","CourseMap","courseMapSmall","CourseMapSmall","replace","courseMapLarge","CourseMapLarge","SkiMountain","SkiSnowBoard","nearbySkiAreaList","nearbySkiAreas","setNearbySkiAreas","thisNearbySkiAreas","IsConnected","SkiersAllowed","SnowboardersAllowed","BeginnersCourses","IntermediateCourses","AdvancedCourses","RopeWays","Gondolas","QuadLifts","TripleLifts","PairLifts","SingleLifts","OtherLifts","SkiersPercent","SnowboardersPercent","nearbySkiArea","SkiAreaPrefectureName","SkiAreaTownUniqueName","SkiAreaUniqueName","SkiAreaName","Distance","Facilities","SnowParkFacilities","InformationOnChildren","SchoolInformation","EquipmentRentalInformation","SeasonOpeningTime","colSpan","Array","x","OpeningDate","ClosingDate","OpeningTimeComments","LiftTicketCharges","ticketChargeList","setTicketChargeList","fetchLiftTicket","dataTicket","ChildTicketLabel","OlderChildTicketLabel","SeniorTicketLabel","ticketCharge","NameOfTicket","AdultTicket","ChildTicket","OlderChildTicket","SeniorTicket","LiftTicketInformation","ContactInformation","Address","Telephone","BasicContainer","requestUrl","showSnowData","PlannedSeasonDates","SnowDepth","SnowDepthCompareToYesterday","WeatherDayTh","WeatherMonthFull","WeatherYear","IntroductoryText","RegionName","RegionUrl","DailyReportContainer","NowName","NowUniqueName","MainReport","LiftOperation","Photo1","Photo2","Photo3","HistoryContainer","ListingsContainer","nearbyAccommodations","areaSectionListings","areaSectionListing","sectionName","listings","LocationContainer","setLocation","fetchLocation","dataLocation","allowFullScreen","ShinkansenStation_Id","ShinkansenLine_Id","KMFromShinkansenStation","ShinkansenStationName","ShinkansenLineName","TrainStation1_Id","TrainLine1_Id","KMFromStation1","TrainStation1Name","TrainLine1Name","TrainStation2_Id","TrainLine2_Id","KMFromStation2","TrainStation2Name","TrainLine2Name","TravelInformation","ShuttleBusInformation","Interchange1_Id","Expressway1_Id","KMFromInterchange1","Interchange1Name","Expressway1Name","Interchange2_Id","Expressway2_Id","KMFromInterchange2","Interchange2Name","Expressway2Name","Interchange3_Id","Expressway3_Id","KMFromInterchange3","Interchange3Name","Expressway3Name","RouteNumber","KMFromRoute","OtherPrefecturalRoadNumber","Direction","Parking","StreetViewMap1","StreetViewMap2","aria-hidden","PhotoDetail","PhotosContainer","ReviewDetail","ReviewsContainer","RouteFinderContainer","SnowChart","resortName","snowData","getSnowDataValue","season","dailySnowData","dailyData","Season","CreatedAt","dataItem","valueCounter","WeatherMonth","UTC","Number","WeatherDay","resortWeatherSnowDataSeries","colors","chart","zoomType","backgroundColor","borderWidth","fontFamily","fontSize","fontWeight","subtitle","xAxis","dateTimeLabelFormats","month","year","legend","itemStyle","yAxis","min","labels","tooltip","headerFormat","pointFormat","exporting","enabled","plotOptions","spline","marker","series","credits","highcharts","Highcharts","SeasonSnowChart","chartOptions","setResortWeatherSnowDataSeries","thisSeason","thisResortWeatherSnowDataSeries","GetResortWeatherSnowDataSeries","thisOptions","SnowTable","getMonthlySeasonSnowDepthValue","monthlySeasonSnowfallData","snowSeason","dailySnowDepthData","dailySnowDepthDataList","totalDays","runCallback","cb","GetDailyData","monthlyData","day","elm","dailySnowDepth","GetDayTh","dayTh","currentSeason","overflowX","seasonData","seasonSnowData","seasonName","seasonDailySnowDepth","SnowDataContainer","setSnowData","fetchSnowData","resortId","dataSnowData","thisSnowData","symbol","radius","states","hover","lineWidth","threshold","seasons","WeatherContainer","openPrecipitationMap","setOpenPrecipitationMap","openAnimateForecasts","setOpenAnimateForecasts","HotelBookingLink1","HotelBookingLink2Text","HotelBookingLink1Text","WeatherFeedUrl","SpotlightContainer","listingDetail","setListingDetail","fetchListing","thisResort","dataListingDetail","SkiAreaDetailContainer","setShowSnowData","setSkiAreaDailyReport","setSkiAreaLatestWeather","setNearbyAccommodations","setAreaSectionListings","setHasListings","getAreaListingValue","sectionUniqueName","listingList","listingSectionData","getListingSectionName","dataResortLatestWeather","dataNearbySkiAreas","thisNearbySkiAreaList","nr","FromSkiAreaUniqueName","ToSkiAreaName","ToSkiAreaUniqueName","ToSkiAreaPrefectureName","SkiAreaPrefectureUniqueName","ToSkiAreaPrefectureUniqueName","SkiAreaTownName","ToSkiAreaTownName","ToSkiAreaTownUniqueName","SkiAreaTownTypeStr","ToSkiAreaTownTypeStr","SkiAreaAreaName","ToSkiAreaAreaName","SkiAreaAreaUniqueName","ToSkiAreaAreaUniqueName","FromSkiAreaName","FromSkiAreaPrefectureName","FromSkiAreaPrefectureUniqueName","FromSkiAreaTownName","FromSkiAreaTownUniqueName","FromSkiAreaTownTypeStr","FromSkiAreaAreaName","FromSkiAreaAreaUniqueName","dataSkiAreaDailyReport","dataNearbyAccommodations","dataAreaListings","listingDataSeries","generalMessageList","setSeneralMessageList","dailyReportMessage","setDailyReportMessage","dailyReportWeatherMapUrl","setDailyReportWeatherMapUrl","latestSkiAreaWeatherList","setLatestSkiAreaWeatherList","setSeasonTotalSnowList","singleSkiAreaWeatherReport","fetchGeneralMessagesAndDailyReports","thisSeasonName","generalMessageIds","resSeasonTotalSnow","filter_type","resSkiAreaWeather","maxCreated","latestSkiAreaWeather","overflow","NewSnowfallResortA","skiAreaWeather","AllReportCalendar","nowYear","nowMonth","dailySnowfallMonthlyList","MONTHS","date","setMonth","getStartDayOfMonth","startDay","setStartDay","startDate","getDay","getDayOrdinal","containerId","containerIdSelector","days","_","dayClassName","allDailyReports","calDay","dailySnowfallData","NowReportDay","getDailySnowfallReports","Calendar","years","setYears","dailySnowfallList","setDailySnowfallList","fetchDailyObservedSnowfall","resDailySnowfall","getDailySnowfallMonthlyList","NowReportMonth","OfficialSnowDepth","allSkiAreaWeatherList","setAllSkiAreaWeatherList","lastUpdateDate","setLastUpdateDate","nameSorted","setNameSorted","townSorted","setTownSorted","prefectureSorted","setPrefectureSorted","snowDepthSorted","setSnowDepthSorted","changeSorted","setChangeSorted","fetchSkiAreaWeatherList","thisMatch","latestReport","townNameA","townNameB","prefectureNameA","prefectureNameB","faAngleDoubleDown","faAngleDoubleUp","Webcams","generalMessageWebCam","setGeneralMessageWebCam","fetchGeneralMessage","Description","currentSeasonName","DetailTabs","nowUniqueName","DailyReportInfo","isArchive","reportType","TemperatureBottom","TemperatureTop","WeatherConditionIcon","WeatherCondition","PrecipitationConditionIcon","PrecipitationCondition","WindConditionIcon","WindCondition","VisibilityConditionIcon","VisibilityCondition","DailyObservedSnowfall","chartRef","accumulatedSnowData","dailyAccumulatedSnow","thisDailySnowfallDataSeries","dailySnowfallDataSeries","update","accumulatedSnowDataSeries","allowChartUpdate","RecentDailyReports","last7daysDailyReports","SnowfallStatistics","snowfallTotalList","setSnowfallTotalList","seasonDailyReportList","setSeasonDailyReportList","fetchSeasonDailyReportAndSnowfallTotal","nowId","resSnowfallTotal","resSeasonDailyReport","Now_Id","TotalSnow7Days","TotalSnow14Days","TotalSnowCurrentMonth","TotalSnowCurrentSeason","TotalSnow7DaysData","find","TotalType","TotalSnow14DaysData","TotalSnowCurrentMonthData","TotalSnowCurrentSeasonData","DetailDailyReport","thisReport","setThisReport","fetchDailyReport","reportUniqueName","resDailyReport","DailySnowfall","fetchDailySnowfall","getSnowfallValue","currentSesson","previousSeason","seriesVisible","minorTickInterval","MonthlySnowfall","monthlySnowfall","monthlySnowfallData","TotalSnow","monthlySnowfallDataSeries","categories","crosshair","footerFormat","shared","useHTML","shadow","column","pointPadding","candlestick","lineColor","background2","MonthlySnowfallTable","totalSeasonSnowfall","PrevMonthTotalSnow1","PrevMonthTotalSnow2","PrevMonthTotalSnow3","PrevMonthTotalSnow4","PrevMonthTotalSnow5","PrevMonthTotalSnow6","GetBlankCells","novemberData","blankCells","snowdata","newSnowfall","seasonSnowfall","SeasonSnowfall","seasonSnowfallList","setSeasonSnowfallList","fetchSeasonSnowfall","resSeasonSnowfall","seasonSnowfallData","seasonSnowfallDataSeries","DaylySnowfallTable","getMonthlySeasonSnowfallValue","dailySnowfallDataList","GetDailyDataCell","reportDate","dailySnowfall","seasonDailySnowfall","ObservedSnowfallAnalysisContainer","setMonthlySnowfall","fetchMonthlySnowfallWithPrevMonth","resMonthlySnowfallWithPrevMonth","SnowDepthAnalysisContainer","ResortAName","skiAreaName","setSkiAreaName","dailyReportSkiAreas","setDailyReportSkiAreas","showChart","setShowChart","fetchDailyReportSkiAreas","dailyReportId","dailyReportSkiAreaData","ResortAId","selectedSkiAreaId","Resort_Id","WeatherMapUrl","SeasonSummary","seasonNameParts","dailyReportSeasonSummary","setDailyReportSeasonSummary","fetchSeasonSummary","resSeasonSummary","TotalSnowfall","TotalSnowfallDays","MostDailySnowfall","MostDailySnowfallDate","NovemberSnowfall","NovemberSnowfallDays","DecemberSnowfall","DecemberSnowfallDays","JanuarySnowfall","JanuarySnowfallDays","FebruarySnowfall","FebruarySnowfallDays","MarchSnowfall","MarchSnowfallDays","AprilSnowfall","AprilSnowfallDays","SeasonReportCalendar","getDailySnowfall","snowfall","snowfallCSS","getReportCSS","archiveUrl","goToDetail","SeasonContainer","Frame","div","MonthlyReportsListing","dailyDataList","MonthlyReportsListingContainer","setSeasonName","ArchivesContainer","nowSeasons","YearlyAnalysisTab","AboutDailyReport","DetailContainer","setLatestReport","setNowSeasons","fetchLatestReportAndNowSeasons","resLatestReport","resNowSeasons","isActive","NearbySkiAreaCheckList","selectedSkiAreas","skiAreaData","setSkiAreaData","selSkiAreas","selecteSkidAreaUniqueNames","refreshSkiAreaOpetions","accommodationUniqueName","allAccommodationList","searchedAccommodationList","setSearchedAccommodationList","searchFilterNearbySkiArea","setSearchFilterNearbySkiArea","selectedNearbySkiAreas","AccommodationHome","uniqueSkiAreas","allNearbySkyAreaList","accommodationHomePage","setAccommodationHomePage","setAllAccommodationList","setSelectedSkiAreas","fetchAccommodationHomePage","thisAccommodationList","searchedAccommodation","searchedAccommodationPrefecture","searchedAccommodationArea","searchedAccommodationTown","searchedAccommodationSkiArea","skiAreaUniqueNames","accommodationUniqueNames","resultAccommodationList","getAccommodationPrefectures","allAccommodations","getAllAccommodationAreas","getAllAccommodationTowns","sa","AccommodationContainer","setAllNearbySkyAreaList","setuniqueSkiAreas","fetchAccommodationList","thisParam","dataNearbySkyAras","getAllAccommodationNearbySkiAreas","nearbySkyAreas","allUniqueSkiAreas","AccommodationDetailTabs","hotel","AccommodationInfo","accommodation","WebUrl","nearbySkyAraList","accommodationPhotos","sortedAccommodationPhotos","firstAccommodationPhoto","SortOrder","FileName","PageContent","nearbySkyAra","PhotographsContainer","currentImage","setCurrentImage","viewerIsOpen","setViewerIsOpen","photoList","setPhotoList","openLightbox","thisAccommodationPhotos","accommodationPhotoList","ImageWidth","ImageHeight","fetchAccommodationPhotos","onClose","currentIndex","views","srcset","srcSet","caption","AccommodationDetailContainer","setAccommodation","setAccommodationPhotos","nearbySkyAras","setNearbySkyAras","fetchAccommodationPhotosAndNearbySkyAras","hotelUniqueName","dataAccommodation","dataAccommodationPhotos","dataNearbySkyAreas","listingSectionList","listingIntroductionText","setListingIntroductionText","fetchListingMessage","drop","listingSection","SectionIcon","ListingList","setListings","ListingListContainer","ListingDetail","listingUniqueName","ListingContainer","section_name","listing_name","setListingList","setListingSectionList","fetchListingSectionsAndListings","resListingSections","resListings","GuideHome","guideHomePage","setGuideHomePage","fetchGuideHomePage","GuideDetail","guide_name","resGuides","guides","guideDetail","IsHomePage","GuideContainer","MemberHome","memberHomePage","setMemberHomePage","userFullName","setUserFullName","MemberReviewDetail","MemberReviews","ResortAutocomplete","onResortSelect","MemberSubmitReview","resortUniqueNameFromParam","setResortUniqueNameFromParam","setThisResort","setResortUniqueName","SnowConditionOnVisit","resort_unique","passedResort","inputData","ResortRanking","UserType","reviewSubmissionResult","reviewSubmission","MemberPhotoDetail","confirm","photoDeleteResult","photoDelete","handleDeletePhoto","MemberPhotos","Uploader","imageTypeRegex","MemberUploadPhoto","imageFiles","setImageFiles","images","setImages","uploadStarted","setUploadStarted","setValidSelectPhoto","fileReaders","file","fileReader","FileReader","onload","result","readAsDataURL","readyState","abort","formData","FormData","append","headers","photoUploadResult","accept","multiple","required","files","validImageFiles","hasErrorWithSelectedFiles","match","fileSizeKiloBytes","Photos","image","idx","MemberContainer","fetchSkiAreas","App","StrictMode","exact","element","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render"],"mappings":"yFAAO,SAASA,EAAYC,GACxB,IAAIC,EAAc,GAKlB,OAJAC,OAAOF,GAAMG,MAAM,YAAYC,SAAQ,SAAUC,GAC7CJ,EAAcA,EAAc,MAAQI,EAAO,UAGxCJ,EAIJ,SAASK,EAAmBC,GAC/B,IAAIC,EAAgB,GAEpB,OAAQD,GACJ,KAAK,EACDC,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,YAChB,MACJ,KAAK,EACDA,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,sBAMxB,OAAOA,EAIJ,SAASC,EAAsBF,GAClC,IAAIC,EAAgB,GAEpB,OAAQD,GACJ,KAAK,EACDC,EAAgB,aAChB,MACJ,KAAK,EACDA,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,iBAMxB,OAAOA,EAIJ,SAASE,EAA6BH,GACzC,IAAIC,EAAgB,GAEpB,OAAQD,GACJ,KAAK,EACDC,EAAgB,eAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,iBAChB,MACJ,KAAK,EACDA,EAAgB,YAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,EACDA,EAAgB,WAChB,MACJ,KAAK,EACDA,EAAgB,WAChB,MACJ,KAAK,EACDA,EAAgB,mBAChB,MACJ,KAAK,GACDA,EAAgB,WAMxB,OAAOA,EAIJ,SAASG,EAA2BJ,GACvC,IAAIC,EAAgB,GAEpB,OAAQD,GACJ,KAAK,EACDC,EAAgB,gBAChB,MACJ,KAAK,EACDA,EAAgB,eAChB,MACJ,KAAK,EACDA,EAAgB,iBAChB,MACJ,KAAK,EACDA,EAAgB,oBAChB,MACJ,KAAK,EACDA,EAAgB,WAChB,MACJ,KAAK,EACDA,EAAgB,eAMxB,OAAOA,EAGJ,SAASI,IACZ,IAEMC,EAAW,IAAIC,KACjBC,EAAYF,EAASG,WACrBC,EAAWJ,EAASK,cASxB,OAPIH,EAAY,GACEE,EAAW,EAAK,IAAMA,EAGvBA,EAAW,KAAOA,EAAW,GAM3C,SAASE,IACZ,IAEMN,EAAW,IAAIC,KACjBC,EAAYF,EAASG,WACrBC,EAAWJ,EAASK,cASxB,OAPIH,EAAY,GACEE,EAAW,EAAK,KAAOA,EAAW,GAGlCA,EAAW,EAAK,IAAMA,EAMrC,SAASG,EAAkBC,GAC9B,IAAIC,EAAY,EAEhB,OAAQD,GACJ,IAAK,WACL,IAAK,QACDC,EAAY,GACZ,MACJ,IAAK,WACL,IAAK,UACL,IAAK,QACDA,EAAY,GACZ,MACJ,IAAK,WACDA,EAAY,GAKpB,OAAOA,EAlMX,iR,gGCAA,iVAKMC,iBAAmB,SAAnBA,iBAAoB,MAAoE,IAAlEC,UAAiE,KAAjEA,UAAWC,eAAsD,KAAtDA,eAAgBC,YAAsC,KAAtCA,YAAsC,kBAAzBC,qBAAyB,iBAAf,SAAe,aACvFC,WAAa,yBAED,UAAZD,QACFC,YAAc,oCACO,WAAZD,QACTC,YAAc,oCACO,UAAZD,UACTC,YAAc,qCAGhB,IAAMC,KAAOL,UAAUM,KAAI,SAACC,IAAKC,OAC/B,IAAIC,QAAU,GACVC,EAAI,EAER,IAAK,IAAMC,OAAOJ,IAEhB,QAAuBK,IAAnBV,YAAYQ,GAAhB,CAIA,IAAIG,QAAU,OAASX,YAAYQ,GAEnCD,QAAQK,KAAK,CACXH,IAAKV,eAAeS,GACpBK,IAAKC,KAAKH,SACVI,WAAYV,IAAIU,WAChBC,kBAAmBX,IAAIW,kBACvBC,iBAAkBZ,IAAIY,iBACtBC,UAAWb,IAAIa,YAEjBV,IAGF,OAAO,0EACJD,QAAQH,KAAI,SAACD,EAAMG,GAClB,OAAc,IAAVA,EACK,0EACL,2DAAC,gDAAD,CAAMa,GAAE,UAAKC,OAAOC,gBAAZ,YAA+BlB,EAAKa,kBAApC,YAAyDb,EAAKY,YAAtE,SAAoF,kEAAKO,IAAG,gEAA2DnB,EAAKe,WAAaK,IAAG,UAAKpB,EAAKqB,WADxKlB,GAGG,IAAVA,EACF,kEAAgBmB,UAAU,kBAAkBC,eAAcvB,EAAKM,IAA/D,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOC,gBAAZ,YAA+BlB,EAAKa,kBAApC,YAAyDb,EAAKY,YAAtE,SAAoF,0EAAKZ,EAAKU,QAClE,OAA1BV,EAAKc,uBAAuDP,IAA1BP,EAAKc,kBAA4D,KAA1Bd,EAAKc,kBAC9E,kEAAKU,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKc,uBAH7CX,GAQT,iEAAgBoB,eAAcvB,EAAKM,IAAnC,SACJN,EAAKU,KADQP,OAfNA,UAwBlB,OACE,kEAAKmB,UAAU,kBAAf,SACE,qEAAOA,UAAS,+CAA0CvB,YAA1D,UACE,6EACE,0EACGH,eAAeK,KAAI,SAACyB,EAAKvB,GACxB,OAAO,0EAAiBuB,GAARvB,UAItB,6EACGH,aAcIN,wC,0ECxFf,iVAKMiC,uBAAyB,SAAzBA,uBAA0B,MAA2E,IAAzEhC,UAAwE,KAAxEA,UAAWC,eAA6D,KAA7DA,eAAgBC,YAA6C,KAA7CA,YAAa+B,MAAgC,KAAhCA,MAAgC,kBAAzB9B,qBAAyB,iBAAf,SAAe,aACpGC,WAAa,yBAED,UAAZD,QACFC,YAAc,oCACO,WAAZD,QACTC,YAAc,oCACO,UAAZD,UACTC,YAAc,qCAGhB,IAAMC,KAAOL,UAAUM,KAAI,SAACC,IAAKC,OAC/B,IAAIC,QAAU,GACVC,EAAI,EAER,IAAK,IAAMC,OAAOJ,IAEhB,QAAuBK,IAAnBV,YAAYQ,GAAhB,CAIA,IAAIG,QAAU,OAASX,YAAYQ,GAEnCD,QAAQK,KAAK,CACXH,IAAKV,eAAeS,GACpBK,IAAKC,KAAKH,SACVI,WAAYV,IAAI2B,wBAChBC,qBAAsB5B,IAAI6B,kCAC1BC,eAAgB9B,IAAI+B,4BACpBC,YAAahC,IAAIiC,yBACjBC,eAAgBlC,IAAImC,4BACpBC,aAAcpC,IAAIoC,aAClBC,iBAAkBrC,IAAIqC,mBAExBlC,IAGF,OAAO,0EACJD,QAAQH,KAAI,SAACD,EAAMG,GAClB,OAAc,IAAVA,EACK,0EAAgB,2DAAC,gDAAD,CAAMa,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqCxC,EAAK8B,qBAA1C,YAAkE9B,EAAKgC,eAAvE,YAAyFhC,EAAKY,YAAtG,SAAoH,kEAAKO,IAAG,gEAA2DnB,EAAKuC,kBAAoBnB,IAAG,UAAKpB,EAAKqB,WAApOlB,GACG,IAAVA,EACF,kEAAgBoB,eAAcvB,EAAKM,IAAnC,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqCxC,EAAK8B,qBAA1C,YAAkE9B,EAAKgC,eAAvE,YAAyFhC,EAAKY,YAAtG,SAAoH,0EAAKZ,EAAKU,QACtG,OAAtBV,EAAKsC,mBAA+C/B,IAAtBP,EAAKsC,cAAoD,KAAtBtC,EAAKsC,cACtE,kEAAKd,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKsC,mBAH7CnC,GAQT,iEAAgBoB,eAAcvB,EAAKM,IAAnC,SACJN,EAAKU,KADQP,OAbNA,UAsBlB,OACE,mEAAKmB,UAAU,kBAAf,UACE,kEAAKA,UAAU,eAAf,SACE,0EAAKM,UAEP,qEAAON,UAAS,+CAA0CvB,YAA1D,UACE,6EACE,0EACGH,eAAeK,KAAI,SAACyB,EAAKvB,GACxB,OAAO,0EAAiBuB,GAARvB,UAItB,6EACGH,cAcI2B,8C,qSCzFTc,EAAcC,wBAAc,CAC9BC,KAAM,KACNC,QAAS,aACTC,KAAM,KACNC,QAAS,eAIN,SAASC,IACZ,OAAOC,qBAAWP,GAIf,SAASQ,EAAT,GAAqC,IAAbC,EAAY,EAAZA,SAC3B,EAAwBC,mBAAS,MAAjC,mBAAOR,EAAP,KAAaC,EAAb,KACA,EAAwBO,mBAAS,MAAjC,mBAAON,EAAP,KAAaC,EAAb,KAEMM,EAAU,uCAAG,4BAAAC,EAAA,sDACf,IAAa,OAATV,IAAkBA,IAEM,QADlBW,EAAkBC,KAAKC,MAAMC,eAAeC,QAAQ,iBAEtD,IACIC,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,6BACH9D,KAAM,CACF+D,SAAUT,EAAgBS,SAC1BC,MAAOV,EAAgBU,MACvBC,MAAOX,EAAgBW,SAE5BC,MAAK,SAAAC,GACJ,IAAIC,EAAeD,EAAkBnE,KACP,OAA1BoE,EAAaC,UAA+C,KAA1BD,EAAaC,WAC/CZ,eAAea,QAAQ,cAAef,KAAKgB,UAAUH,IACrDxB,GAAQ,GACRE,EAAQsB,OAGlB,MAAOI,GACLC,QAAQC,IAAIF,GAtBT,2CAAH,qDAgChB,OAJAG,qBAAU,WACNvB,MACD,CAACT,EAAME,IAGN,cAACJ,EAAYmC,SAAb,CAAsBC,MAAO,CAAElC,OAAMC,UAASC,OAAMC,WAApD,SACKI,I,8BCzCE4B,EATK,SAACC,GACjB,IAAMC,EAAWC,cAKjB,OAJAN,qBAAU,WACN1D,OAAOiE,SAAS,EAAG,KACpB,CAACF,IAEG,mCAAGD,EAAM7B,Y,kBC0GLiC,EAjHM,SAAC,GAAqB,IA2EnCC,EA3EgBC,EAAkB,EAAlBA,YAEpB,EAAgDlC,mBAAS,GAAzD,mBAAOmC,EAAP,KAAyBC,EAAzB,KACA,EAAgDpC,mBAAS,IAAzD,mBAAOqC,EAAP,KAAyBC,EAAzB,KACA,EAA8CtC,oBAAS,GAAvD,mBAAOuC,EAAP,KAAwBC,EAAxB,KACA,EAAkCxC,mBAAS,IAA3C,mBAAOyC,EAAP,KAAkBC,EAAlB,KAGMC,EAAWC,cAkBXC,EAAU,SAAAC,GACZV,EAAoB,GACpBE,EAAoB,IACpBE,GAAmB,GACnBE,EAAaI,EAAEC,cAAcC,WAE7B,IAAIC,EAA2BH,EAAEC,cAAcC,UAAU7H,MAAM,KAEzD+H,EAAsBhB,EAAYiB,QACpC,SAAAC,GAAO,OAAKA,EAAQlF,OAAS+E,EAAyB,GAAGI,UAG7D,GAAIH,EAAoBI,OAAS,EAAG,CAEhC,IAAIC,EAAkBL,EAAoB,GAEtCM,EAAI,UAAM1F,OAAO2F,gBAAb,YAAgCF,EAAgB5E,qBAAhD,YAAwE4E,EAAgB1E,eAAxF,YAA0G0E,EAAgB9F,YAElIkF,EAASa,KA6DjB,OA5BIjB,GAAmBE,IAEfR,EADAI,EAAiBiB,OAEb,oBAAInF,UAAU,cAAd,SACKkE,EAAiBvF,KAAI,SAACsG,EAASpG,GAC5B,IAAImB,EAMJ,OAJInB,IAAUmF,IACVhE,EAAY,qBAIZ,qBAAIA,UAAWA,EAAuB0E,QAASA,EAA/C,UACKO,EAAQlF,KADb,KACqBkF,EAAQM,eAD7B,MAA+B1G,QAS3C,qBAAKmB,UAAU,iBAAf,SACI,sDAOZ,eAAC,WAAD,WACI,uBAAOA,UAAU,mBAAmBwF,KAAK,OAAOC,SAjGvC,SAACd,GACd,IAEML,EAFyBK,EAAEC,cAAcrB,MAAMvG,MAAM,KAEhB,GAAGkI,OAExCQ,EAAuB3B,EAAYiB,QAErC,SAAAC,GAAO,OAAKA,EAAQlF,KAAK4F,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQY,aAAaD,QAAQtB,IAAc,GAAKW,EAAQa,SAASH,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQc,iBAAiBH,QAAQtB,IAAc,GAA2B,OAArBW,EAAQe,eAA0C/G,IAArBgG,EAAQe,UAA0Bf,EAAQe,SAASL,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAoC,OAA7BV,EAAQgB,uBAA0DhH,IAA7BgG,EAAQgB,kBAAkChB,EAAQgB,iBAAiBL,QAAQtB,IAAc,KAGxgBL,EAAoB,GACpBE,EAAoBuB,GACpBrB,GAAmB,GACnBE,EAAaI,EAAEC,cAAcrB,QAoF2C2C,UA3D1D,SAACvB,GACf,GAAkB,KAAdA,EAAEwB,QAAgB,CAClBlC,EAAoB,GACpBI,GAAmB,GACnB,IAAIe,EAAkBlB,EAAiBF,GACvC,GAAwB,OAApBoB,QAAgDnG,IAApBmG,EAA+B,CAC3Db,EAAaa,EAAgBrF,MAC7B,IAAIsF,EAAI,UAAM1F,OAAO2F,gBAAb,YAAgCF,EAAgB5E,qBAAhD,YAAwE4E,EAAgB1E,eAAxF,YAA0G0E,EAAgB9F,YAElIkF,EAASa,SAGZ,GAAkB,KAAdV,EAAEwB,QAAgB,CACvB,GAAyB,IAArBnC,EACA,OAGJC,EAAoBD,EAAmB,QAEtC,GAAkB,KAAdW,EAAEwB,QAAgB,CACvB,GAAInC,EAAmB,IAAME,EAAiBiB,OAC1C,OAEJlB,EAAoBD,EAAmB,KAoCmDT,MAAOe,IAChGR,MC7FEsC,G,OAhBA,WACX,OACI,qBAAKpG,UAAU,YAAf,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,gBACf,qBAAKA,UAAU,wBCsVhBqG,EA3VF,WACT,MAAsCxE,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KACA,EAAgDzE,mBAAS,IAAzD,mBAAO0E,EAAP,KAAyBC,EAAzB,KACA,EAA8C3E,mBAAS,IAAvD,mBAAO4E,EAAP,KAAwBC,EAAxB,KACA,EAAwC7E,mBAAS,IAAjD,mBAAO8E,EAAP,KAAqBC,EAArB,KACA,EAAsD/E,mBAAS,IAA/D,mBAA4BgF,GAA5B,WACA,EAAoDhF,mBAAS,IAA7D,mBAAOiF,EAAP,KAA2BC,EAA3B,KAEMC,EAAiD,uCAAG,sBAAAjF,EAAA,sDACtDM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,0BACJrE,MAAK,SAAAsE,GAEJ,OADAV,EAAoBU,EAAgBxI,MAC7B2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAERrE,MAAK,SAAAuE,GAEJ,OADAT,EAAmBS,EAAqBzI,MACjC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,wBAERrE,MAAK,SAAAwE,GAEJ,OADAR,EAAgBQ,EAAgB1I,MACzB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,2BAERrE,MAAK,SAAAyE,GAEJ,OADAf,EAAee,EAAe3I,MACvB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uCAERrE,MAAK,SAAA0E,GAGJ,OAFAnE,QAAQC,IAAIkE,GACZP,EAAsBO,EAAmB5I,KAAK6I,OACvClF,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,qBAERI,MAAK,SAAA4E,GACJX,EAAuBW,EAAe9I,SApCY,2CAAH,qDA4CvD,OAJA2E,qBAAU,WACN2D,MACD,IAECT,EAAiBpB,QAAU,EAEvB,cAAC,EAAD,IAIA,sBAAKnF,UAAU,2BAAf,UACI,sBAAKA,UAAU,wCAAf,UACI,sBAAKA,UAAU,oCAAf,UACI,gCACI,sBAAKA,UAAU,wDAAf,sHAC6G,cAAC,IAAD,CAAMN,GAAG,mBAAT,6CAD7G,OAGA,qBAAKM,UAAU,SAAf,SACI,cAAC,IAAD,CAAMN,GAAG,4BAAT,uGAGR,8BACKiH,EAAahI,KAAI,SAAC8I,EAAU5I,GAAX,OACd,gCACI,sBAAKmB,UAAU,0EAAf,UACI,qBAAKA,UAAU,QAAf,SACI,6BAAKyH,EAASF,UAElB,qBAAKvH,UAAU,sBAAf,SACI,6BAAKyH,EAASC,qBAGtB,sBAAK1H,UAAU,qBAAf,UAC2B,aAAtByH,EAASE,UACN,cAAC,IAAD,CAAMjI,GAAI,CAAEkI,SAAS,GAAD,OAAKH,EAASI,UAAaC,IAAI,aAAnD,SAAiEL,EAASM,eAEvD,aAAtBN,EAASE,UACN,mBAAGK,KAAI,UAAKP,EAASI,SAAWI,OAAO,SAASH,IAAI,aAApD,SAAkEL,EAASM,oBAd7ElJ,WAqBtB,qBAAKmB,UAAU,uDAAf,SACI,cAACkI,EAAA,EAAD,CAAUC,UAAU,EAAOC,YAAY,EAAOC,MAAM,EAAMC,MAAM,QAAQC,SAAS,OAAjF,SACKhC,EAAiB5H,KAAI,SAAA6J,GAAY,OAC9B,cAACN,EAAA,EAASO,KAAV,UACI,cAACC,EAAA,EAAD,CAAO7I,IAAG,UAAKF,OAAOgJ,YAAZ,wCAAuDH,EAAazI,MAAQ6I,MAAM,OAAO9I,IAAG,kBAAa0I,EAAazI,MAAQC,UAAU,iCADlIwI,EAAaK,cAOjD,sBAAK7I,UAAU,SAAf,UACI,qBAAKA,UAAU,iEAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAO2F,gBAAjB,SAAkC,gEAEtC,sBAAKtF,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAO2F,gBAAjB,SACI,cAACoD,EAAA,EAAD,CAAO7I,IAAI,gFAAgF+I,MAAM,OAAO9I,IAAI,iBAGpH,sBAAKE,UAAU,+BAAf,UACI,2cAGA,qBAAKA,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAO2F,gBAAjB,SAAkC,qDAEtC,qBAAKtF,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,aAAR,SAAgD,sDAEpD,qBAAKtF,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmJ,cAAZ,wDAAR,SAAyF,6DAE7F,qBAAK9I,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOoJ,qBAApB,SAA2C,kDAE/C,sBAAK/I,UAAU,OAAf,UACI,qEACA,cAAC,EAAD,CAAc+D,YAAaA,gBAK3C,sBAAK/D,UAAU,SAAf,UACI,qBAAKA,UAAU,iEAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAOqJ,oBAAjB,SAAsC,8EAE1C,sBAAKhJ,UAAU,wCAAf,UACI,sBAAKA,UAAU,4CAAf,UACI,cAAC,IAAD,CAAMN,GAAIC,OAAOqJ,oBAAjB,SACI,cAACN,EAAA,EAAD,CAAO7I,IAAI,sFAAsF+I,MAAM,OAAO9I,IAAI,mBAEtH,uBACA,qBAAKE,UAAU,sDAAf,SACI,oBAAIA,UAAU,MAAd,SAAqB8G,SAG7B,sBAAK9G,UAAU,+BAAf,UACI,6QAGA,qBAAKA,UAAU,OAAf,SACI,uBAAOA,UAAU,uCAAjB,SACI,gCACKyG,EAAgB9H,KAAI,SAAAsK,GAAW,OAC5B,+BACI,6BACI,6BAAI,cAAC,IAAD,CAAMvJ,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,YAAvD,SAAsE2J,EAAYlJ,WAE1F,+BACKkJ,EAAYC,iBADjB,IACoCD,EAAYE,eADhD,IACiEF,EAAYG,mBAD7E,IACkGH,EAAYI,cAD9G,KAC+HJ,EAAYK,yBALtIL,EAAYJ,sBAejD,qBAAK7I,UAAU,SAAf,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAOmJ,cAAjB,SAAgC,4CAEpC,sBAAK9I,UAAU,wCAAf,UACI,qBAAKA,UAAU,2EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,0CAAT,SAAmD,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,kFAAkF+I,MAAM,OAAO9I,IAAI,wCAErK,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,0CAAT,SAAmD,qEAEvD,wOAMZ,qBAAKM,UAAU,0EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,sCAAT,SAA+C,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,mFAAmF+I,MAAM,OAAO9I,IAAI,iCAElK,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,sCAAT,SAA+C,iEAEnD,wOAOhB,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,2EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,wBAAT,SAAiC,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,gFAAgF+I,MAAM,OAAO9I,IAAI,sBAEjJ,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,wBAAT,SAAiC,mDAErC,4KAMZ,qBAAKM,UAAU,0EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,mCAAT,SAA4C,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,qFAAqF+I,MAAM,OAAO9I,IAAI,oCAEjK,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,mCAAT,SAA4C,iEAEhD,gOAOhB,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,2EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,iBAAT,SAA0B,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,oFAAoF+I,MAAM,OAAO9I,IAAI,qCAE9I,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,iBAAT,SAA0B,kEAE9B,uMAMZ,qBAAKM,UAAU,0EAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC,IAAD,CAAMN,GAAG,yCAAT,SAAkD,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,kCAE1K,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,yCAAT,SAAkD,iEAEtD,gNASxB,qBAAKM,UAAU,cAAf,SACI,sBAAKA,UAAU,cAAf,UACI,qBAAKA,UAAU,iEAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAOC,gBAAjB,SAAkC,8CAEtC,sBAAKI,UAAU,wCAAf,UACI,qBAAKA,UAAU,6CAAf,SACI,sBAAKA,UAAU,2BAAf,UACI,cAAC,IAAD,CAAMN,GAAIC,OAAOuB,sBAAjB,SAAwC,cAACwH,EAAA,EAAD,CAAO7I,IAAI,uFAAuF+I,MAAM,OAAO9I,IAAI,oBAC3J,qBAAKE,UAAU,uBAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAOuB,sBAAuBlB,UAAU,0DAAlD,SAA4G,wDAIxH,qBAAKA,UAAU,6CAAf,SACI,sBAAKA,UAAU,8BAAf,UACI,cAAC,IAAD,CAAMN,GAAG,8BAAT,SAAuC,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,gFAAgF+I,MAAM,OAAO9I,IAAI,gBACnJ,qBAAKE,UAAU,uBAAf,SACI,cAAC,IAAD,CAAMN,GAAG,8BAA8BM,UAAU,0DAAjD,SAA2G,oDAIvH,qBAAKA,UAAU,6CAAf,SACI,sBAAKA,UAAU,8BAAf,UACI,cAAC,IAAD,CAAMN,GAAG,oBAAT,SAA6B,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,oFAAoF+I,MAAM,OAAO9I,IAAI,kBAC7I,qBAAKE,UAAU,uBAAf,SACI,cAAC,IAAD,CAAMN,GAAG,oBAAoBM,UAAU,0DAAvC,SAAiG,sDAI7G,qBAAKA,UAAU,6CAAf,SACI,sBAAKA,UAAU,4BAAf,UACI,cAAC,IAAD,CAAMN,GAAG,yBAAT,SAAkC,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,uFAAuF+I,MAAM,OAAO9I,IAAI,qBACrJ,qBAAKE,UAAU,uBAAf,SACI,cAAC,IAAD,CAAMN,GAAG,yBAAyBM,UAAU,0DAA5C,SAAsG,iEAO9H,qBAAKA,UAAU,gBAAf,SACI,qBAAKA,UAAU,cAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,6CAAf,SACI,qBAAKA,UAAU,gCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,yCAAT,SAAkD,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,oFAAoF+I,MAAM,OAAO9I,IAAI,qBAG1K,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,mCAAf,SACI,mBAAGgI,KAAI,4BAA+BC,OAAO,SAASH,IAAI,aAA1D,SAAuE,cAACY,EAAA,EAAD,CAAO7I,IAAI,sFAAsF+I,MAAM,OAAO9I,IAAI,+BAGjM,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,mCAAf,SACI,mBAAGgI,KAAK,8BAA8BC,OAAO,SAASH,IAAI,aAA1D,SAAuE,cAACY,EAAA,EAAD,CAAO7I,IAAI,8EAA8E+I,MAAM,OAAO9I,IAAI,uBAGzL,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,gD,kDC1KhCuJ,EApKD,WAEV,MAA6B9H,IAArBH,EAAR,EAAQA,QAASE,EAAjB,EAAiBA,QACXgD,EAAWC,cACjB,EAA4B5C,mBAAS,IAArC,mBAAO2H,EAAP,KAAeC,EAAf,KACA,EAAoC5H,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KAEA,EAA4B9H,mBAAS,CACjC+H,SAAU,GACVC,SAAU,KAFd,mBAAOC,EAAP,KAAeC,EAAf,KAKMC,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,YAI7C6G,EAAW,WAEb,IAAIC,EAAS,GAYb,OAVKP,EAAOF,WACRS,EAAOT,SAAW,uCAGjBE,EAAOD,WACRQ,EAAOR,SAAW,uCAGtBF,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAOtBqF,EAAY,uCAAG,WAAO7F,GAAP,SAAA5C,EAAA,sDAGjB,GAFA4C,EAAE8F,iBAEEL,IAEA,IACI/H,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,0BACH9D,KAAM,CACFqE,SAAU+G,EAAOF,SACjBC,SAAUC,EAAOD,SACjBa,YAAY,KAEjB9H,MAAK,SAAA+H,GAEJ,IAAIC,EAAqBD,EAAYjM,KAEV,OAAvBkM,EAEsC,YAAlCA,EAAmBC,YACnBrJ,EAAQoJ,GACRtJ,GAAQ,GACRyI,EAAU,CACNH,SAAU,GACVC,SAAU,KAEd1H,eAAea,QAAQ,cAAef,KAAKgB,UAAU2H,IAErDpG,EAAS7E,OAAOmL,iBAEhBrB,EAAUmB,EAAmBG,SAGjCtB,EAAU,+DAGpB,MAAOvG,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBAvCL,2CAAH,sDA8ClB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,qEACA,sBAAMf,KAAK,cAAcgB,QAAQ,wCAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,qFAAqFC,IAAI,mBACjI,gCACI,uDACA,sBAAKE,UAAU,UAAf,+RACsR,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,uBAAR,8BADtR,UAIJ,gCACI,sBAAK3I,UAAU,YAAf,UACgB,KAAXwJ,GACG,gCACI,oBAAIxJ,UAAU,cAAd,oBACA,qBAAKA,UAAU,cAAf,SAA8BwJ,OAGtC,cAAC2B,EAAA,EAAD,CAAMC,SAAUZ,EAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,YAA9C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,6CACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,OAAOkG,YAAY,WAAWnI,MAAOuG,EAAOF,SAAUnE,SAAUuE,IACrGN,EAAWE,UACR,qBAAK5J,UAAU,cAAf,SAA8B0J,EAAWE,cAGjD,eAACuB,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,OAA9C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,6CACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,WAAWkG,YAAY,WAAWnI,MAAOuG,EAAOD,SAAUpE,SAAUuE,IACzGN,EAAWG,UACR,qBAAK7J,UAAU,cAAf,SAA8B0J,EAAWG,cAGjD,qBAAK7J,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,qBAEJ,qBAAKA,UAAU,iBAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,oBAA2C3I,UAAU,mDAA7D,SAAgH,oBAAIA,UAAU,YAAd,yCAKhI,8BACI,sBAAKA,UAAU,SAAf,UACI,+CACA,sBAAKA,UAAU,UAAf,UACI,sEAEA,gDAGA,kFACqD,uBADrD,0BAE2B,uBAF3B,eAGgB,0BAEhB,+NAIJ,qBAAKA,UAAU,+CAAf,SACI,qBAAKA,UAAU,oCAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,aAAoC3I,UAAU,8CAAtD,SAAoG,oBAAIA,UAAU,YAAd,gD,yBCxJlI4L,EAAkB,0BAClBC,EAAc,gDACdC,EAAY,0DA+OHC,EA7OE,WAEb,MAA8BlK,oBAAS,GAAvC,mBAAOmK,EAAP,KAAgBC,EAAhB,KACA,EAA4BpK,mBAAS,IAArC,mBAAO2H,EAAP,KAAeC,EAAf,KACA,EAAoC5H,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KACA,EAAkC9H,oBAAS,GAA3C,mBAAOqK,EAAP,KAAkBC,EAAlB,KAEA,EAA4BtK,mBAAS,CACjCY,SAAU,GACVC,MAAO,GACPkH,SAAU,GACVC,SAAU,GACVuC,gBAAiB,KALrB,mBAAOtC,EAAP,KAAeC,EAAf,KAYMC,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,YAI7C6G,EAAW,WACb,IAAIC,EAAS,GAiCb,OA/BKP,EAAOrH,WACR4H,EAAO5H,SAAW,wCAGjBqH,EAAOpH,MAEAmJ,EAAYQ,KAAKvC,EAAOpH,SAChC2H,EAAO3H,MAAQ,iCAFf2H,EAAO3H,MAAQ,mCAKdoH,EAAOF,SAEAgC,EAAgBS,KAAKvC,EAAOF,YACpCS,EAAOT,SAAW,8BAFlBS,EAAOT,SAAW,sCAKjBE,EAAOD,SAGFiC,EAAUO,KAAKvC,EAAOD,YAC5BQ,EAAOR,SAAW,oCAHlBQ,EAAOR,SAAW,sCAMjBC,EAAOsC,gBAEDtC,EAAOD,WAAaC,EAAOsC,kBAClC/B,EAAO+B,gBAAkB,yDAFzB/B,EAAO+B,gBAAkB,8CAK7BzC,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAOtBqF,EAAY,uCAAG,WAAO7F,GAAP,SAAA5C,EAAA,sDAGjB,GAFA4C,EAAE8F,iBAEEL,IACA,IACI/H,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,qBACH9D,KAAM,CACF+D,SAAUqH,EAAOrH,SACjBC,MAAOoH,EAAOpH,MACdK,SAAU+G,EAAOF,SACjBC,SAAUC,EAAOD,SACjBuC,gBAAiBtC,EAAOsC,mBAE7BxJ,MAAK,SAAA0J,GAEJnJ,QAAQC,IAAR,OAAYkJ,QAAZ,IAAYA,OAAZ,EAAYA,EAAoB5N,MAEhC,IAAI6N,EAAiBD,EAAmB5N,KAEjB,OAAnB6N,GACApJ,QAAQC,IAAImJ,GACsB,YAA9BA,EAAe1B,YACfd,EAAU,CACNtH,SAAU,GACVC,MAAO,GACPkH,SAAU,GACVC,SAAU,GACVuC,gBAAiB,KAErBH,GAAW,KAGXxC,EAAU8C,EAAexB,SACzByB,OAAOC,QAAQC,UAInBjD,EAAU,+DAIpB,MAAOvG,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBA7CL,2CAAH,sDAoDlB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,wEACA,sBAAMf,KAAK,cAAcgB,QAAQ,gFAErC,gCACI,qBAAKlL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,qFAAqFC,IAAI,mBACtI,gCACI,uDACA,sBAAKE,UAAU,UAAf,UACI,sJACA,4NACA,yEAA2C,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,uBAAR,8BAA3C,aAGR,sBAAK3I,UAAU,YAAf,UACKgM,EACG,oCACI,0CACA,4BACI,+IAIR,qCACgB,KAAXxC,GACG,gCACI,oBAAIxJ,UAAU,cAAd,oBACA,qBAAKA,UAAU,cAAf,SAA8BwJ,OAGtC,cAAC2B,EAAA,EAAD,CAAMC,SAAUZ,EAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,YAA9C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,uCADJ,8DAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,OAAOkG,YAAY,YAAYnI,MAAOuG,EAAOrH,SAAUgD,SAAUuE,IACtGN,EAAWjH,UACR,qBAAKzC,UAAU,cAAf,SAA8B0J,EAAWjH,cAGjD,eAAC0I,EAAA,EAAKG,MAAN,CAAYC,UAAU,WAAWvL,UAAU,OAA3C,UACI,eAACmL,EAAA,EAAKK,MAAN,WAAY,wCAAZ,uEAGA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,WAAW1E,KAAK,QAAQkG,YAAY,QAAQiB,mBAAiB,UAAUpJ,MAAOuG,EAAOpH,MAAO+C,SAAUuE,IACxHN,EAAWhH,OACR,qBAAK1C,UAAU,cAAf,SAA8B0J,EAAWhH,WAGjD,eAACyI,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,YAA9C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,2CADJ,yEAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,OAAOkG,YAAY,WAAWnI,MAAOuG,EAAOF,SAAUnE,SAAUuE,IACrGN,EAAWE,UACR,qBAAK5J,UAAU,cAAf,SAA8B0J,EAAWE,cAGjD,eAACuB,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,OAA9C,UACI,cAACmL,EAAA,EAAKK,MAAN,UACI,6CAEJ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,WAAWkG,YAAY,WAAWnI,MAAOuG,EAAOD,SAAUpE,SAAUuE,IACzGN,EAAWG,UACR,sBAAK7J,UAAU,cAAf,UAA8B0J,EAAWG,SACZ,qCAAxBH,EAAWG,UACR,qCACI,cAAC,IAAD,CAAiB+C,KAAMC,IAAkBnI,QAhLtE,WACnB,OAAOyH,GAAcD,MAgL2B,cAACY,EAAA,EAAD,CAAUC,GAAIb,EAAd,SACI,qBAAKc,GAAG,gBAAR,SACI,sDACuB,uBADvB,kFAEmF,uBAFnF,+BAGgC,sBAAMC,aAAW,mBAAjB,eAHhC,IAG6E,sBAAMA,aAAW,YAAjB,eAH7E,IAGmH,sBAAMA,aAAW,UAAjB,eAHnH,IAGuJ,sBAAMA,aAAW,cAAjB,eAHvJ,IAG+L,sBAAMA,aAAW,UAAjB,+BAS3N,eAAC9B,EAAA,EAAKG,MAAN,CAAYC,UAAU,qBAAqBvL,UAAU,OAArD,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,qDACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,qBAAqB1E,KAAK,WAAWkG,YAAY,mBAAmBnI,MAAOuG,EAAOsC,gBAAiB3G,SAAUuE,IAC/HN,EAAW0C,iBAER,qBAAKpM,UAAU,cAAf,SAA8B0J,EAAW0C,qBAGjD,qBAAKpM,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,gCAMpB,8BACI,sBAAKA,UAAU,mBAAf,UACI,qDACA,qBAAKA,UAAU,+CAAf,SACI,qBAAKA,UAAU,oCAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,UAAiC3I,UAAU,8CAAnD,SAAiG,oBAAIA,UAAU,YAAd,6CC5JtHkN,G,OA3EM,WAEFC,cAAf,IAEA,EAA4BtL,mBAAS,IAArC,mBAAO2H,EAAP,KAAeC,EAAf,KACA,EAAoC5H,mBAAS,IAA7C,mBAAOuL,EAAP,KAAmBC,EAAnB,KACA,EAA8BxL,oBAAS,GAAvC,mBAAOmK,EAAP,KAAgBC,EAAhB,KACA,EAAkDpK,mBAAS,2CAA3D,mBAAOyL,EAAP,KACA,GADA,KACwCC,eAAxC,mBAAOC,EAAP,KACMC,GADN,KACcD,EAAaE,IAAI,UAAY,IAiC3C,OAJArK,qBAAU,YA3BiB,SAACsK,GACxBxK,QAAQC,IAAIuK,GACZ,IACItL,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,yBACH9D,KAAM,CACFiE,MAAOgL,KAEZ/K,MAAK,SAAAgL,GACJzK,QAAQC,IAAIwK,GAC+B,YAAvCA,EAAmBlP,KAAKmM,YACxBoB,GAAW,GACXxC,EAAU,MAEVA,EAAUmE,EAAmBlP,KAAKqM,SAClCsC,EAAcO,EAAmBlP,KAAKmP,gBAGhD,MAAO3K,GACLC,QAAQC,IAAIF,IACR,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,uBAMlBqE,CAAmBL,KACpB,CAACA,IAGA,mCACKzB,EACG,oCACI,sGACA,4BACI,mBAAGhE,KAAK,SAAR,0BAIG,KAAXwB,EACI,qBAAKxJ,UAAU,uCAAf,SACoB,QAAfoN,EACG,qCACI,8BAAI5D,EAAJ,4CACA,4BAAG,mBAAGxB,KAAK,SAAR,0BAGP,mCACI,4BAAIwB,QAKhB,qBAAKxJ,UAAU,uCAAf,SACKsN,QClEnBzB,EAAc,gDAsJLkC,EApJQ,WAEnB,MAA8BlM,oBAAS,GAAvC,mBAAOmK,EAAP,KAAgBC,EAAhB,KACA,EAA4BpK,mBAAS,IAArC,mBAAO2H,EAAP,KAAeC,EAAf,KACA,EAAoC5H,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KAGA,EAA4B9H,mBAAS,CACjC+H,SAAU,GACVlH,MAAO,KAFX,mBAAOoH,EAAP,KAAeC,EAAf,KASMC,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,YAI7C6G,EAAW,WACb,IAAIC,EAAS,GAcb,OAZKP,EAAOF,WACRS,EAAOT,SAAW,uCAGjBE,EAAOpH,MAEAmJ,EAAYQ,KAAKvC,EAAOpH,SAChC2H,EAAO3H,MAAQ,iCAFf2H,EAAO3H,MAAQ,mCAKnBiH,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAOtBqF,EAAY,uCAAG,WAAO7F,GAAP,SAAA5C,EAAA,sDAGjB,GAFA4C,EAAE8F,iBAEEL,IACA,IACI/H,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,2BACH9D,KAAM,CACFqE,SAAU+G,EAAOF,SACjBlH,MAAOoH,EAAOpH,SAEnBE,MAAK,SAAAoL,GAEJ7K,QAAQC,IAAR,OAAY4K,QAAZ,IAAYA,OAAZ,EAAYA,EAAsBtP,MAElC,IAAIuP,EAAiBD,EAAqBtP,KAEnB,OAAnBuP,GACA9K,QAAQC,IAAI6K,GACsB,YAA9BA,EAAepD,YACfd,EAAU,CACNH,SAAU,GACVlH,MAAO,KAEXuJ,GAAW,KAEXxC,EAAU8C,eAAexB,SACzByB,OAAOC,QAAQC,UAGnBjD,EAAU,+DAGpB,MAAOvG,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBApCL,2CAAH,sDA0ClB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,+EACA,sBAAMf,KAAK,cAAcgB,QAAQ,gFAErC,gCACI,qBAAKlL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,qFAAqFC,IAAI,mBACtI,gCACI,uDACA,qBAAKE,UAAU,UAAf,SACI,yHAGR,qBAAKA,UAAU,YAAf,SACKgM,EACG,oCACI,0CACA,4EACA,0FAGJ,qCACgB,KAAXxC,GACG,gCACI,oBAAIxJ,UAAU,cAAd,oBACA,qBAAKA,UAAU,cAAf,SAA8BwJ,OAGtC,cAAC2B,EAAA,EAAD,CAAMC,SAAUZ,EAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,YAA9C,UACI,cAACmL,EAAA,EAAKK,MAAN,UACI,6CAEJ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,OAAOkG,YAAY,WAAWnI,MAAOuG,EAAOF,SAAUnE,SAAUuE,IACrGN,EAAWE,UACR,qBAAK5J,UAAU,cAAf,SAA8B0J,EAAWE,cAGjD,eAACuB,EAAA,EAAKG,MAAN,CAAYC,UAAU,WAAWvL,UAAU,OAA3C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,0CAEZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,WAAW1E,KAAK,QAAQkG,YAAY,QAAQiB,mBAAiB,UAAUpJ,MAAOuG,EAAOpH,MAAO+C,SAAUuE,IACxHN,EAAWhH,OACR,qBAAK1C,UAAU,cAAf,SAA8B0J,EAAWhH,WAGjD,qBAAK1C,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,uCCxIlC8L,EAAY,0DAmNHoC,EAjNO,WAEHf,cAAf,IAEA,EAA4BtL,mBAAS,IAArC,mBAAO2H,EAAP,KAAeC,EAAf,KACA,EAAoC5H,mBAAS,IAA7C,mBAAmBwL,GAAnB,WACA,EAA8BxL,oBAAS,GAAvC,mBAAOmK,EAAP,KAAgBC,EAAhB,KACA,EAAkDpK,mBAAS,2CAA3D,mBACA,GADA,UACwC0L,eAAxC,mBAAOC,EAAP,KACMC,GADN,KACcD,EAAaE,IAAI,UAAY,IAC3C,EAAoC7L,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KACA,EAAkC9H,oBAAS,GAA3C,mBAAOqK,EAAP,KAEA,GAFA,KAE4BrK,mBAAS,CACjCc,MAAO,GACPkH,SAAU,GACVuC,gBAAiB,MAHrB,mBAAOtC,EAAP,KAAeC,EAAf,KAMA1G,qBAAU,WAEN0G,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,IAEN,MAAS2D,SAEd,CAACA,IAEJ,IAAMzD,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,YAI7C6G,EAAW,WACb,IAAIC,EAAS,GAiBb,OAfKP,EAAOD,SAGFiC,EAAUO,KAAKvC,EAAOD,YAC5BQ,EAAOR,SAAW,oCAHlBQ,EAAOR,SAAW,sCAMjBC,EAAOsC,gBAEDtC,EAAOD,WAAaC,EAAOsC,kBAClC/B,EAAO+B,gBAAkB,yDAFzB/B,EAAO+B,gBAAkB,8CAK7BzC,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAoCtBqF,EAAY,uCAAG,WAAO7F,GAAP,eAAA5C,EAAA,sDAGjB,GAFA4C,EAAE8F,iBAEEL,IACA,IACQ+D,EAAW,CACXxL,MAAOmH,EAAOnH,MACdkH,SAAUC,EAAOD,SACjBuC,gBAAiBtC,EAAOsC,iBAG5BjJ,QAAQC,IAAI+K,GAEZ9L,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,0BACH9D,KAAMyP,IACPvL,MAAK,SAAAwL,GAEJjL,QAAQC,IAAR,OAAYgL,QAAZ,IAAYA,OAAZ,EAAYA,EAAqB1P,MAEW,YAAxC0P,EAAoB1P,KAAKmM,YACzBoB,GAAW,GACXxC,EAAU,MAEVA,EAAU2E,EAAoB1P,KAAKqM,SACnCsC,EAAce,EAAoB1P,KAAKmP,gBAGjD,MAAO3K,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBA/BL,2CAAH,sDAqClB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,8EACA,sBAAMf,KAAK,cAAcgB,QAAQ,gFAErC,gCACI,qBAAKlL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,qFAAqFC,IAAI,mBACtI,gCACI,uDACA,qBAAKE,UAAU,UAAf,SACI,0HAGR,qBAAKA,UAAU,YAAf,SACKgM,EACG,oCACI,0CACA,8BACI,uHACA,qBAAKhM,UAAU,mBAAf,SACI,qBAAKA,UAAU,+CAAf,SACI,qBAAKA,UAAU,oCAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,UAAiC3I,UAAU,8CAAnD,SAAiG,oBAAIA,UAAU,YAAd,sCAOrH,qCACgB,KAAXwJ,GACG,gCACI,oBAAIxJ,UAAU,cAAd,oBACA,qBAAKA,UAAU,cAAf,SAA8BwJ,OAGtC,cAAC2B,EAAA,EAAD,CAAMC,SAAUZ,EAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,cAAcvL,UAAU,OAA9C,UACI,cAACmL,EAAA,EAAKK,MAAN,UACI,6CAEJ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,WAAWkG,YAAY,WAAWnI,MAAOuG,EAAOD,SAAUpE,SAAUuE,IACzGN,EAAWG,UACR,sBAAK7J,UAAU,cAAf,UAA8B0J,EAAWG,SACZ,qCAAxBH,EAAWG,UACR,qCACI,cAAC,IAAD,CAAiB+C,KAAMC,IAAkBnI,QAAS2J,iBAClD,cAACvB,EAAA,EAAD,CAAUC,GAAIb,EAAd,SACI,qBAAKc,GAAG,gBAAR,SACI,sDACuB,uBADvB,kFAEmF,uBAFnF,+BAGgC,sBAAMC,aAAW,mBAAjB,eAHhC,IAG6E,sBAAMA,aAAW,YAAjB,eAH7E,IAGmH,sBAAMA,aAAW,UAAjB,eAHnH,IAGuJ,sBAAMA,aAAW,cAAjB,eAHvJ,IAG+L,sBAAMA,aAAW,UAAjB,+BAS3N,eAAC9B,EAAA,EAAKG,MAAN,CAAYC,UAAU,qBAAqBvL,UAAU,OAArD,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,qDACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,qBAAqB1E,KAAK,WAAWkG,YAAY,mBAAmBnI,MAAOuG,EAAOsC,gBAAiB3G,SAAUuE,IAC/HN,EAAW0C,iBAER,qBAAKpM,UAAU,cAAf,SAA8B0J,EAAW0C,qBAGjD,qBAAKpM,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,+CChCzBsO,EA5KC,WACZ,MAA4CzM,oBAAS,GAArD,mBAAO0M,EAAP,KAAuBC,EAAvB,KAEA,EAA4B3M,mBAAS,CACjC4M,QAAS,GACTC,SAAU,GACVC,gBAAiB,GACjBC,WAAY,KAJhB,mBAAO9E,EAAP,KAAeC,EAAf,KAOA,EAAoClI,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KAGMK,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAOD,EAAMhC,OAAO1E,YAiDpCsL,EAAgB,uCAAG,sBAAA9M,EAAA,sDACrBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iBACHvI,KAAM,CACFwL,KAAMJ,EAAO2E,QACbK,MAAOhF,EAAO4E,SACdK,QAASjF,EAAOkF,WAChB9D,QAASpB,EAAO8E,cAErBhM,MAAK,SAAAqM,GACqB,SAArBA,EAAYvQ,OACZqL,EAAU,CACN0E,QAAS,GACTC,SAAU,GACVC,gBAAiB,GACjBC,WAAY,KAGhBJ,GAAkB,OAnBL,2CAAH,qDAwBtB,OACI,sBAAKxO,UAAU,YAAf,UACI,cAACiL,EAAA,EAAD,UACI,wDAEJ,gCACI,qBAAKjL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,gFAAgFC,IAAI,8BACjI,gCACI,mDACA,qBAAKE,UAAU,UAAf,6DAGA,oBAAIA,UAAU,UAAd,wBAGA,qBAAKA,UAAU,UAAf,0GAGA,qBAAKA,UAAU,UAAf,qUAGA,qBAAKA,UAAU,UAAf,mLAGA,qBAAKA,UAAU,UAAf,8BAKPuO,GACG,qBAAKvO,UAAU,4DAAf,SACI,sEAGR,qBAAKA,UAAU,YAAf,SACI,cAACmL,EAAA,EAAD,CAAMC,SAlEG,SAACnB,GACdA,GAAOA,EAAMQ,iBArCJ,WACb,IAAIJ,EAAS,GA6Bb,OA1BKP,EAAO2E,UACRpE,EAAOoE,QAAU,oBAGhB3E,EAAO4E,SAEA,eAAerC,KAAKvC,EAAO4E,YACnCrE,EAAOqE,SAAW,4BAFlBrE,EAAOqE,SAAW,4BAKjB5E,EAAO6E,gBAEA,eAAetC,KAAKvC,EAAO6E,iBAE5B7E,EAAO4E,WAAa5E,EAAO6E,kBAClCtE,EAAOsE,gBAAkB,0DAFzBtE,EAAOsE,gBAAkB,mCAFzBtE,EAAOsE,gBAAkB,oCAOxB7E,EAAOkF,aACR3E,EAAO2E,WAAa,uBAGnBlF,EAAO8E,aACRvE,EAAOuE,WAAa,uBAExBjF,EAAcU,GACqB,IAA/BC,OAAOC,KAAKF,GAAQlF,OAQpBiF,IACAyE,KA+DI,SACI,eAACxD,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,UAAUvL,UAAU,YAA1C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,wCACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,UAAU1E,KAAK,OAAOkG,YAAY,OAAOnI,MAAOuG,EAAO2E,QAAShJ,SAAUuE,IAC5FN,EAAW+E,SACR,qBAAKzO,UAAU,cAAf,SAA8B0J,EAAW+E,aAGjD,eAACtD,EAAA,EAAKG,MAAN,CAAYC,UAAU,WAAWvL,UAAU,OAA3C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,yCACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,WAAW1E,KAAK,QAAQkG,YAAY,QAAQiB,mBAAiB,UAAUpJ,MAAOuG,EAAO4E,SAAUjJ,SAAUuE,IAC3HN,EAAWgF,UACR,qBAAK1O,UAAU,cAAf,SAA8B0J,EAAWgF,cAGjD,eAACvD,EAAA,EAAKG,MAAN,CAAYC,UAAU,kBAAkBvL,UAAU,OAAlD,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,iDACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,kBAAkB1E,KAAK,QAAQkG,YAAY,gBAAgBiB,mBAAiB,iBAAiBpJ,MAAOuG,EAAO6E,gBAAiBlJ,SAAUuE,IACxJN,EAAWiF,iBACR,qBAAK3O,UAAU,cAAf,SAA8B0J,EAAWiF,qBAGjD,eAACxD,EAAA,EAAKG,MAAN,CAAYtL,UAAU,OAAtB,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,2CAA6B,uBACzC,cAACL,EAAA,EAAK+D,MAAN,CAAYC,QAAM,EAACC,MAAM,kBAAkBlF,KAAK,aAAa8C,GAAG,oBAAoBxH,KAAK,QAAQjC,MAAM,kBAAkBkC,SAAUuE,IACnI,cAACmB,EAAA,EAAK+D,MAAN,CAAYC,QAAM,EAACC,MAAM,mCAAmClF,KAAK,aAAa8C,GAAG,qBAAqBxH,KAAK,QAAQjC,MAAM,mCAAmCkC,SAAUuE,IACrKN,EAAWsF,YACR,qBAAKhP,UAAU,cAAf,SAA8B0J,EAAWsF,gBAGjD,eAAC7D,EAAA,EAAKG,MAAN,CAAYC,UAAU,aAAavL,UAAU,OAA7C,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,2CACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,aAAamF,GAAG,WAAWC,KAAM,GAAI/L,MAAOuG,EAAO8E,WAAYnJ,SAAUuE,IAC3FN,EAAWkF,YACR,qBAAK5O,UAAU,cAAf,SAA8B0J,EAAWkF,gBAGjD,qBAAK5O,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,kCAAhC,+B,eCMbuP,EA5Kc,SAAC,GAAoF,IAsH1GzL,EAtHwBC,EAAiF,EAAjFA,YAAayL,EAAoE,EAApEA,mBAAoBC,EAAgD,EAAhDA,aAAcC,EAAkC,EAAlCA,KAAMC,EAA4B,EAA5BA,YAAaC,EAAe,EAAfA,SAE9F,EAAgD/N,mBAAS,GAAzD,mBAAOmC,EAAP,KAAyBC,EAAzB,KACA,EAAgDpC,mBAAS,IAAzD,mBAAOqC,EAAP,KAAyBC,EAAzB,KACA,EAA8CtC,oBAAS,GAAvD,mBAAOuC,EAAP,KAAwBC,EAAxB,KACA,EAAkCxC,mBAAS,IAA3C,mBAAOyC,EAAP,KAAkBC,EAAlB,KAkBMG,EAAU,SAAAC,GACZV,EAAoB,GACpBE,EAAoB,IACpBE,GAAmB,GACnBE,EAAaI,EAAEC,cAAcC,WAE7B,IAAIC,EAA2BH,EAAEC,cAAcC,UAAU7H,MAAM,KAEzD+H,EAAsBhB,EAAYiB,QACpC,SAAAC,GAAO,OAAKA,EAAQlF,OAAS+E,EAAyB,GAAGI,UAGzD2K,EAASlL,EAAEC,cAAcC,UAAU7H,MAAM,KAE7C,GAAI+H,EAAoBI,OAAS,EAAG,CAEhC,IAAIC,EAAkBL,EAAoB,GAEtC+K,EAAgB,CAChB5F,KAAM9E,EAAgBrF,KAAO,KAAOqF,EAAgBG,eAAiB,IACrEwK,kBAAmB3K,EAAgB4K,kBACnCC,mBAAoB7K,EAAgB8K,mBACpCrR,MAAO6Q,GAGXF,EAAmBM,QAElB,GAAsB,IAAlBD,EAAO1K,OAAc,CAC1B,IAAI2K,EAAgB,CAChB5F,KAAMvF,EAAEC,cAAcC,UACtBkL,kBAAmBF,EAAO,GAC1BI,mBAAoBJ,EAAO,GAC3BhR,MAAO6Q,GAGXF,EAAmBM,KA0G3B,OAlDAzM,qBAAU,WACNkB,EAAakL,KACd,CAACA,IAIArL,GAAmBE,IACfJ,EAAiBiB,OACjBrB,EACI,oBAAI9D,UAAU,cAAd,SACKkE,EAAiBvF,KAAI,SAACsG,EAASpG,GAC5B,IAAImB,EAMJ,OAJInB,IAAUmF,IACVhE,EAAY,qBAIZ,qBAAIA,UAAWA,EAAuB0E,QAASA,EAA/C,UACKO,EAAQlF,KADb,KACqBkF,EAAQM,eAD7B,MAA+B1G,QAiB3CiF,EApDc,IA0CEQ,EA3CLtH,MAAM,KACdmI,OAMW,SAACgL,GAEvB,IAAIN,EAASM,EAAMnT,MAAM,KACzB,OAAsB,IAAlB6S,EAAO1K,QACH0K,EAAO,GAAG3K,QAAU,QAAU2K,EAAO,GAAG3K,QAAU,mBAAqB2K,EAAO,GAAG3K,QAAU,mBAAqB2K,EAAO,GAAG3K,QAAU,SAiCpIkL,CAAkB9L,GACU,oBAAItE,UAAU,cAAd,SACxB,oBAAI0E,QAASA,EAAb,SACKJ,MAOL,qBAAKtE,UAAU,iBAAf,SACI,uEAMR,qBAAKA,UAAU,iBAAf,SACI,sDAOZ,eAAC,WAAD,WACI,cAACmL,EAAA,EAAKM,QAAN,CAAcvB,KAAMyF,EAAanK,KAAK,OAAOkG,YAAY,kCAAkCjG,SA/JlF,SAACd,GACd,IAEML,EAFyBK,EAAEC,cAAcrB,MAAMvG,MAAM,KAEhB,GAAGkI,OAExCQ,EAAuB3B,EAAYiB,QAErC,SAAAC,GAAO,OAAKA,EAAQlF,KAAK4F,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQY,aAAaD,QAAQtB,IAAc,GAAKW,EAAQa,SAASH,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQc,iBAAiBH,QAAQtB,IAAc,GAA2B,OAArBW,EAAQe,eAA0C/G,IAArBgG,EAAQe,UAA0Bf,EAAQe,SAASL,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAoC,OAA7BV,EAAQgB,uBAA0DhH,IAA7BgG,EAAQgB,kBAAkChB,EAAQgB,iBAAiBL,QAAQtB,IAAc,KAGxgBL,EAAoB,GACpBE,EAAoBuB,GACpBrB,GAAmB,GACnBE,EAAaI,EAAEC,cAAcrB,QAkJsF2C,UAxGrG,SAACvB,GACf,GAAkB,KAAdA,EAAEwB,QAAgB,CAClBlC,EAAoB,GACpBI,GAAmB,GACnB,IAAIe,EAAkBlB,EAAiBF,GACvC,GAAwB,OAApBoB,QAAgDnG,IAApBmG,EAA+B,CAC3Db,EAAaa,EAAgBrF,KAAO,KAAOqF,EAAgBG,eAAiB,KAC5E,IAAIuK,EAAgB,CAChB5F,KAAM9E,EAAgBrF,KAAO,KAAOqF,EAAgBG,eAAiB,IACrEwK,kBAAmB3K,EAAgB4K,kBACnCC,mBAAoB7K,EAAgB8K,mBACpCrR,MAAO6Q,GAGXF,EAAmBM,SAGtB,GAAkB,KAAdnL,EAAEwB,QAAgB,CACvB,GAAyB,IAArBnC,EACA,OAGJC,EAAoBD,EAAmB,QAEtC,GAAkB,KAAdW,EAAEwB,QAAgB,CACvB,GAAInC,EAAmB,IAAME,EAAiBiB,OAC1C,OAEJlB,EAAoBD,EAAmB,KA4E8FT,MAAOe,EAAWsL,SAAUA,IAChK9L,MClKPuM,GAAiB,CACnBC,MAAO,OACPC,OAAQ,SAGNC,GAAS,CACXC,IAAK,QACLC,IAAK,UAwYMC,GArYK,WAEhB,IAAMC,EAASzD,cAEf,EAAoCtL,mBAAS,IAA7C,mBAAO6H,EAAP,KACA,GADA,KAC4B7H,wBAAS5C,IAArC,mBAAO4R,EAAP,KAAeC,EAAf,KACA,EAAsCjP,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KACA,EAAkEzE,wBAAS5C,GAA3E,mBAAO8R,EAAP,KAAkCC,EAAlC,KACA,EAAsCnP,mBAAS,CAAEqI,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,KAAtG,mBAAOgB,EAAP,KAAoBC,EAApB,KACA,EAAgDrP,mBAAS,CAAEqI,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,KAAhH,mBAAOkB,EAAP,KAAyBC,EAAzB,KACA,EAAkCvP,mBAAS,IAA3C,mBAAOwP,EAAP,KAAkBC,EAAlB,KACA,EAA8BzP,oBAAS,GAAvC,mBAAO0P,EAAP,KAAgBC,EAAhB,KACMC,EAAeC,SAASC,eAAe,oBAEvCnN,EAAWC,cAEXmN,EAAgB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAEvIC,EAAaC,YAAe,CAChC9E,GAAI,oBACJ+E,iBAAkB,4CAFdF,SAKR,EAAsBhQ,mBAAsC,MAA5D,mBAAYmQ,GAAZ,WACA,EAAoDnQ,mBAAS,MAA7D,mBAAOoQ,EAAP,KAA2BC,GAA3B,KAEMC,GAASC,uBAAY,SAAkBzT,GACzCqT,EAAOrT,KACR,IAEG0T,GAAYD,uBAAY,SAAkBzT,GAC5CqT,EAAO,QACR,IAEGM,GAAe,uCAAG,WAAOC,GAAP,SAAAxQ,EAAA,sDAEpBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oBAAmCsL,KACvC3P,MAAK,SAAA4P,GAKJ,GAJIlI,OAAOC,KAAKiI,EAAW9T,MAAMyG,QAAU,IACvCxF,OAAO+D,SAASsE,KAAO,2CAGH/I,IAApBuT,EAAW9T,KAAoB,CAC/BoS,EAAU0B,EAAW9T,MAErB,IAEI+T,EAAsB,CAAEvI,KAFAsI,EAAW9T,KAAKqB,KAAO,KAAOyS,EAAW9T,KAAK6G,eAAiB,IAElCwK,kBAAmByC,EAAW9T,KAAKsR,kBAAmBC,mBAAoBuC,EAAW9T,KAAKwR,oBACnJkB,EAAoBqB,OAhBR,2CAAH,sDAqBfC,GAAS,uCAAG,sBAAA3Q,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCACJrE,MAAK,SAAAyE,GAEJ,OADAf,EAAee,EAAe3I,MACvB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oCAERrE,MAAK,SAAA0E,GACJ0J,EAA6B1J,EAAmB5I,SAXtC,2CAAH,qDAef2E,qBAAU,cAEP,CAAC4N,EAAY/G,KAAMiH,EAAiBjH,OAEvC7G,qBAAU,gBAEgBpE,IAAlB2R,EAAOC,QACPyB,GAAgB1B,EAAOC,QAG3B6B,OAED,CAAC9B,EAAOC,SAlFW,8CAgItB,8CAAA9O,EAAA,sDAQI,IAPAmQ,GAAsB,MACtBV,GAAW,GAELmB,EAAoB,IAAIhT,OAAOiT,OAAOC,KAAKC,kBAE3CC,EAAS,GAENhU,EAAI,EAAGA,EAAIsS,EAAUlM,OAAQpG,IAC9BiU,EAAgB,GAEM,KAAtB3B,EAAUtS,GAAGmL,OAE0B,KAAnCmH,EAAUtS,GAAGgR,mBAAgE,KAApCsB,EAAUtS,GAAGkR,oBAClDgD,EAAiB,CAAC5B,EAAUtS,GAAGgR,kBAAmBsB,EAAUtS,GAAGkR,oBACnE+C,EAAgBC,EAAeC,KAAK,MAEpCF,EAAgB3B,EAAUtS,GAAGmL,MAIrC6I,EAAO5T,KAAK,CACRuE,SAAUsP,EACVG,UAAU,IAvBtB,GA8BQC,EAAmB,GAEE,KAArBnC,EAAY/G,OAE0B,KAAlC+G,EAAYlB,mBAA+D,KAAnCkB,EAAYhB,oBAChDoD,EAAe,CAACpC,EAAYlB,kBAAmBkB,EAAYhB,oBAE/DmD,EAAmBC,EAAaH,KAAK,MAErCE,EAAmBnC,EAAY/G,MAInCoJ,EAAwB,GAEE,KAA1BnC,EAAiBjH,OAE0B,KAAvCiH,EAAiBpB,mBAAoE,KAAxCoB,EAAiBlB,oBAC1DsD,EAAoB,CAACpC,EAAiBpB,kBAAmBoB,EAAiBlB,oBAC9EqD,EAAwBC,EAAkBL,KAAK,MAE/CI,EAAwBnC,EAAiBjH,MAIxB,KAArB+G,EAAY/G,MAAyC,KAA1BiH,EAAiBjH,KAvDpD,kCAwD8ByI,EAAkBa,MAAM,CAC1CC,OAAQL,EACRM,YAAaJ,EACbK,UAAWZ,EACXa,mBAAmB,EACnBC,WAAYlU,OAAOiT,OAAOC,KAAKiB,WAAWC,UA7DtD,QAwDcC,EAxDd,OAgEQ9B,GAAsB8B,GACtBxC,GAAW,GAjEnB,6CAhIsB,sBAqMtB,IAAMyC,GAAa,WAEf/B,GAAsB,MACtBZ,EAAa,IACbJ,EAAe,CAAEhH,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,UAChDhR,IAAlB2R,EAAOC,QACPO,EAAoB,CAAElH,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,KAE/EuB,GAAW,IAcf,OAAOK,EACH,sBAAK7R,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,qCAAmBhM,IAAX4R,EAAuBA,EAAO9Q,KAAO,yCAA2C8Q,EAAO9Q,KAAO,KAAO8Q,EAAO/K,SAAW,KAAO+K,EAAOtL,eAAiB,gBAAkB,kFAChL,sBAAM2E,KAAK,cAAcgB,QAAQ,iGAErC,mDAA4BjM,IAAX4R,EAAuB,KAAOA,EAAO9Q,KAAO,MAC7D,sBAAKC,UAAU,UAAf,eACmCf,IAA9B8R,GAA+E,MAApCA,EAA0BxJ,OAClE,qCACI,4DADJ,2KACmN,+CADnN,kFAC4T,0DAD5T,sBACoX,oDADpX,8CAEgBtI,IAAX4R,GACG,mBAAGnM,QAvBO,WAC9BuP,KAEAnD,OAAU7R,GACVmS,EAAoB,CAAElH,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,KAC3E,IAAI5K,EAAI,UAAM1F,OAAOoJ,qBAGrB,OADAvE,EAASa,IACF,GAeoDrF,UAAU,cAAjD,wDAImBf,IAA9B8R,GAA+E,MAApCA,EAA0BxJ,OAClE,qCACI,sBAAKvH,UAAU,UAAf,UACI,4DADJ,wEAGA,qBAAKA,UAAU,sBAAf,0GAMmBf,IAA9B8R,GAA+E,MAApCA,EAA0BxJ,OAClE,qCACI,sBAAKvH,UAAU,UAAf,UACI,qBAAKA,UAAU,qBAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,eAAf,SACI,sDAEJ,sBAAKA,UAAU,+BAAf,UACI,cAAC,EAAD,CAAsB2P,YAAY,mBAAmB5L,YAAaA,EAAa0L,aAAcwB,EAAY/G,KAAM0F,UAAU,EAAOJ,mBAAoB,SAAA9Q,GA5J9J,IAACwV,EACG,sBADHA,EA6J2BxV,GA5JjCwL,MACTgH,EAAegD,MA6JUxK,EAAWyK,iBACR,qBAAKnU,UAAU,cAAf,SAA8B0J,EAAWyK,qBAGjD,qBAAKnU,UAAU,+BAAf,SACI,cAAC2L,EAAA,EAAD,CAAQ3L,UAAU,QAAQ0E,QAnL/B,WACvB0P,UAAUC,YAAYC,oBAAmB,SAAUC,GAC/C,GAAIA,EAAS1E,OAAO2E,UAAY,QAAUD,EAAS1E,OAAO2E,UAAY,mBAAqBD,EAAS1E,OAAO4E,WAAa,mBAAqBF,EAAS1E,OAAO4E,WAAa,SAAU,CAChL,IAAIN,EAAkB,CAAEjK,KAAM,mBAAoB6F,kBAAmBwE,EAAS1E,OAAO2E,SAAUvE,mBAAoBsE,EAAS1E,OAAO4E,WAE1G,qBAArBxD,EAAY/G,MACZgH,EAAeiD,QAInBO,MAAM,2DAyKc,SAAuD,oBAAI1U,UAAU,YAAd,2CAIlEqR,EAAU1S,KAAI,SAACgW,EAAU9V,GAAX,OACX,qBAAKmB,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,eAAf,SACI,4CAAe4R,EAAc/S,GAA7B,SAEJ,qBAAKmB,UAAU,+BAAf,SACI,cAAC,EAAD,CAAsB2P,YAAY,gBAAgB5L,YAAaA,EAAa2L,KAAM7Q,EAAO4Q,aAAa,GAAGG,UAAU,EAAOJ,mBAAoB,SAAA9Q,IAxJ9J,SAACwV,GACjB,IAAIU,EAAY,YAAOvD,GACvBuD,EAAaV,EAASrV,OAAS,CAAEqL,KAAMgK,EAAShK,KAAM6F,kBAAmBmE,EAASnE,kBAAmBE,mBAAoBiE,EAASjE,oBAClIqB,EAAasD,GAsJuBC,CAAYnW,QAGpB,qBAAKsB,UAAU,+BAAf,SACI,wBAAQwF,KAAK,SAASsP,MAAM,iBAAiB7H,aAAW,QAAQvI,QAAS,kBAnKtF,SAAC7F,GACpB,IAAI+V,EAAY,YAAOvD,GACvBuD,EAAaG,OAAOlW,EAAO,GAC3ByS,EAAasD,GAgKkGI,CAAenW,YAX7EA,MAgBjC,qBAAKmB,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,eAAf,SACI,qDAAwB4R,EAAcP,EAAUlM,QAAhD,SAEJ,qBAAKnF,UAAU,+BAAf,SACI,cAAC,EAAD,CAAsB2P,YAAY,sBAAsB5L,YAAaA,EAAa6L,cAA4B3Q,IAAlB2R,EAAOC,OAAsBpB,aAAc0B,EAAiBjH,KAAMsF,mBAAoB,SAAA9Q,GAzL9L,IAACwV,OACkBjV,KADlBiV,EA0L2BxV,GAzL/BqR,wBAAmE9Q,IAAhCiV,EAASjE,oBACrDmB,EAAoB8C,QA2LA,qBAAKlU,UAAU,kBAKvB,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,iBAGf,qBAAKA,UAAU,+BAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,wBAAwB0E,QAjTlE,4CAiT2FuQ,SAA+B,IAApBhE,EAAY/G,MAAuC,IAAzBiH,EAAiBjH,KAAvI,SAAmK,oBAAIlK,UAAU,YAAd,iCAEvK,qBAAKA,UAAU,kBAKvB,8BACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,iBAGf,qBAAKA,UAAU,oCAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,cAAC2L,EAAA,EAAD,CAAQjH,QAjN5B,WAChB,IAAIkQ,EAAY,sBAAOvD,GAAP,CAAkB,CAAEnH,KAAM,GAAI6F,kBAAmB,GAAIE,mBAAoB,MACzFqB,EAAasD,IA+MqD5U,UAAU,yBAAxC,SAAiE,oBAAIA,UAAU,YAAd,8BAErE,qBAAKA,UAAU,+BAAf,SACI,cAAC2L,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QAASuP,GAAYjU,UAAU,uCAAzD,SAAgG,oBAAIA,UAAU,YAAd,kCAI5G,qBAAKA,UAAU,qBAM1BuR,GACG,sBAAKvR,UAAU,gBAAf,UACI,cAAC,IAAD,CACImV,kBAAmB9E,GACnBG,OAAQA,GACR4E,KAAM,GACNjD,OAAQA,GACRE,UAAWA,GACXgD,QAAS,CACLC,aAAa,EACbC,mBAAmB,EACnBC,gBAAgB,EAChBC,mBAAmB,GAV3B,SAcKxD,GAAsB,cAAC,IAAD,CAAoByD,WAAYzD,EAAoB0D,MAAOlE,MAEtF,qBAAKzE,GAAG,2BAKxB,sBAAKhN,UAAU,cAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,sDAEJ,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,qFAAqFC,IAAI,mCAEtI,qBAAIE,UAAU,OAAd,UACI,qFAGA,qHAGA,0IAGA,4FAGA,uHAGA,oFAOhB,8B,SCtWO4V,GAxCI,WAEf,IAAMhF,EAASzD,cAEf,EAA0BtL,wBAAS5C,GAAnC,mBAAO4W,EAAP,KAAcC,EAAd,KAEMC,EAAW,uCAAG,WAAOC,GAAP,SAAAjU,EAAA,sDAChBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uCAAsD+O,KAC1DpT,MAAK,SAAAqT,GACJH,EAASG,EAASvX,SALN,2CAAH,sDAqBjB,OAZA2E,qBAAU,WACN,QAAepE,IAAX2R,QAAwC3R,IAAhB2R,EAAOpL,KAAoB,CACnD,IAAI0Q,EAAiBtF,EAAOpL,KAEL,oBAAnB0Q,GAA2D,6BAAnBA,GAAoE,wBAAnBA,GAA+D,kCAAnBA,GAAyE,uBAAnBA,EAC3LH,EAAYG,GAEZvW,OAAO+D,SAASsE,KAAO,wCAGhC,CAAC4I,EAAOpL,YAEGvG,IAAV4W,GAAiC,OAAVA,EAEnB,mCACI,qBAAK3V,wBAAyB,CAAEC,OAAQvD,aAAYiZ,EAAMM,kBAK9D,cAAC,EAAD,K,2BCuHGC,GAxJO,WAElB,IAAMxF,EAASzD,cAEf,EAAsCtL,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KACA,EAAkDzE,mBAAS,IAA3D,mBAAOwU,EAAP,KAA0BC,EAA1B,KACA,EAAwCzU,mBAAS,IAAjD,mBAAO0U,EAAP,KAAqBC,EAArB,KACA,EAAkC3U,mBAAS,IAA3C,mBAAO4U,EAAP,KAAkBC,EAAlB,KAEMC,EAAoB,uCAAG,WAAOC,GAAP,eAAA7U,EAAA,sDAErB8U,EAAU,GAEdxU,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,2BAA0C2P,KAC9ChU,MAAK,SAAAkU,GACJxQ,EAAewQ,EAAgBpY,MAC/B,IAAMqY,EAAU,YAAO,IAAIC,IAAIF,EAAgBpY,KAAKC,KAAI,SAAAzB,GAAI,OAAIA,EAAK+Z,iBAKrE,OAHAJ,EAAUE,EAAW/R,QAAO,SAAUkS,GAClC,OAAQA,KAEL7U,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iCAAgD2P,GACnDlY,KAAM,CAAEmY,QAASA,QAEtBjU,MAAK,SAAAuU,GAEJ,OADAb,EAAqBa,EAAsBzY,MACpC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gDAA+D2P,GAClElY,KAAM,CAAEmY,QAASA,QAEtBjU,MAAK,SAAAwU,GAEJ,OADAZ,EAAgBY,EAAiB1Y,MAC1B2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,8CAA6D2P,QAErEhU,MAAK,SAAAyU,GACJX,EAAaW,EAAe3Y,SAjCP,2CAAH,sDA2C1B,OANA2E,qBAAU,gBACiBpE,IAAnB2R,EAAOgG,SACPD,EAAqB/F,EAAOgG,WAEjC,CAAChG,EAAOgG,eAEY3X,IAAnB2R,EAAOgG,QACH7S,EAAYoB,QAAU,GAAKkR,EAAkBlR,QAAU,EAEnD,qCACI,8BACI,kDAEJ,8BACI,cAAC,EAAD,SAMR,qCACI,8BACI,kDAEHpB,EAAYoB,OAAS,GAClB,sBAAKnF,UAAU,OAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,6DAAgC4Q,EAAOgG,aAE3C,cAACU,GAAA,EAAD,CACIjZ,UAAW0F,EACXzF,eAAgB,CAAC,GAAI,MAAO,SAAU,WAAY,iBAAkB,aAAc,YAAa,UAAW,UAC1GC,YAAa,CAAC,OAAQ,mBAAoB,mBAAoB,qBAAsB,gBAAiB,kBAAmB,gBAAiB,kBAAmB,kBAC5J+B,MAAM,QAIjB+V,EAAkBlR,OAAS,GACxB,sBAAKnF,UAAU,OAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,kEAAqC4Q,EAAOgG,aAEhD,cAACvW,GAAA,EAAD,CACIhC,UAAWgY,EACX/X,eAAgB,CAAC,GAAI,GAAI,OAAQ,cACjCC,YAAa,CAAC,WAAY,OAAQ,WAAY,kBAC9C+B,MAAM,QAIjBiW,EAAapR,OAAS,GACnB,sBAAKnF,UAAU,OAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,4DAA+B4Q,EAAOgG,aAE1C,cAACxY,GAAA,EAAD,CACIC,UAAWkY,EACXjY,eAAgB,CAAC,GAAI,GAAI,OAAQ,cACjCC,YAAa,CAAC,IAAK,OAAQ,WAAY,kBACvC+B,MAAM,QAIjBmW,EAAUtR,OAAS,GAChB,sBAAKnF,UAAU,OAAf,UACI,wCACA,qBAAKA,UAAU,kBAAf,SACI,wBAAOA,UAAU,qDAAjB,UACI,gCACI,+BACI,sCACA,8CAGR,gCACKyW,EAAU9X,KAAI,SAAAkX,GAAK,OAChB,+BACI,6BACI,cAAC,IAAD,CAAMnW,GAAE,UAAKC,OAAOmJ,cAAZ,YAA6B+M,EAAMtW,kBAAnC,YAAwDsW,EAAMvW,YAAtE,SAAqFuW,EAAM9V,SAE/F,6BAAK8V,EAAM0B,gBAJN1B,EAAMhN,oBAkB/C,qCACI,8BACI,kDAEJ,8BACI,+DCzJL,OAA0B,kDCc1B2O,GAVA,WACb,OACE,qBAAKxX,UAAU,iBAAf,SACE,qBAAKA,UAAU,uCAAf,SACE,cAAC,IAAD,CAAMN,GAAG,IAAT,SAAa,cAACgJ,EAAA,EAAD,CAAO7I,IAAK4X,GAAU7O,OAAK,W,8BC8ZjC8O,GAhaC,WAEd,IAAMhU,EAAWC,cAKjB,EAA8B9B,mBAAS,IAAvC,mBAAO8V,EAAP,KAAgBC,EAAhB,KAEA,EAA8D/V,mBAAS,IAAvE,mBAAOgW,EAAP,KAAgCC,EAAhC,KACA,EAA0DjW,mBAAS,IAAnE,mBAAOkW,EAAP,KAA8BC,EAA9B,KACA,EAA4DnW,mBAAS,IAArE,mBAAOoW,EAAP,KAA+BC,EAA/B,KACA,EAAgErW,mBAAS,IAAzE,mBAAOsW,EAAP,KAAiCC,EAAjC,KACA,EAA4DvW,mBAAS,IAArE,mBAAOwW,EAAP,KAA+BC,EAA/B,KAEA,EAA4CzW,oBAAS,GAArD,mBAAO0W,EAAP,KAAuBC,EAAvB,KACA,EAAsD3W,oBAAS,GAA/D,mBAAO4W,EAAP,KAA4BC,EAA5B,KACA,EAAwC7W,oBAAS,GAAjD,mBAAO8W,EAAP,KAAqBC,EAArB,KACA,EAA4C/W,oBAAS,GAArD,mBAAOgX,EAAP,KAAuBC,EAAvB,KACA,EAAwCjX,oBAAS,GAAjD,mBAAOkX,EAAP,KAAqBC,EAArB,KACA,GAAoCnX,mBAAS,IAA7C,qBAAOoX,GAAP,MAAmBC,GAAnB,MAEMC,GAAY,uCAAG,sBAAApX,EAAA,sDACnBM,IAAM,CACJC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,2BACFrE,MAAK,SAAAwW,GACNxB,EAAWwB,EAAW1a,SALL,2CAAH,qDASlB2E,qBAAU,WACR8V,OACC,IAEH9V,qBAAU,WAER,IAAIgW,EAAe3V,EAASkE,SAASjC,cACjC2T,EAAkB,GAClBC,EAAgB,GAChBC,EAAiB,GACjBC,EAAmB,GACnBC,EAAiB,GACjBC,EAAiB,QAEA1a,IAAjBoa,IACEA,EAAaO,SAAS,uBAAyBP,EAAaO,SAAS,kBACvEN,EAAkB,8BACdD,EAAaO,SAAS,aACxBD,EAAiB,oBAEVN,EAAaO,SAAS,gCAAkCP,EAAaO,SAAS,kCAAoCP,EAAaO,SAAS,4BAA8BP,EAAaO,SAAS,2BACnMD,EAAiB,oBAEVN,EAAaO,SAAS,8BAC7BD,EAAiB,mBAEVN,EAAaO,SAAS,6BAC7BD,EAAiB,kBAEVN,EAAaO,SAAS,iBAC7BD,EAAiB,gBAEVN,EAAaQ,SAAS,uBAAyBR,EAAaQ,SAAS,0BAC5EF,EAAiB,kBAEVN,EAAaO,SAAS,gEAC/BN,EAAkB,8BAClBK,EAAiB,uBACRN,EAAaO,SAAS,sCAC/BL,EAAgB,4BACZF,EAAaO,SAAS,6CACxBD,EAAiB,uBAEVN,EAAaO,SAAS,yDAC7BD,EAAiB,0BAEVN,EAAaO,SAAS,8CAC7BD,EAAiB,wBAEVN,EAAaO,SAAS,oDAC7BD,EAAiB,iBAEVN,EAAaO,SAAS,gDAC7BD,EAAiB,aAEVN,EAAaO,SAAS,oDAC7BD,EAAiB,iBAEVN,EAAaO,SAAS,gDAC7BD,EAAiB,aAEVN,EAAaO,SAAS,gDAC7BD,EAAiB,aAEVN,EAAaO,SAAS,iDAC7BD,EAAiB,cAEVN,EAAaO,SAAS,+CAC7BD,EAAiB,YAEVN,EAAaO,SAAS,gDAC7BD,EAAiB,aAEVN,EAAaO,SAAS,sDAC7BD,EAAiB,mBAEVN,EAAaO,SAAS,qDAC7BD,EAAiB,kBAEVN,EAAaO,SAAS,gDAC7BD,EAAiB,aAEVN,EAAaO,SAAS,6CAC7BD,EAAiB,WAEVN,EAAaQ,SAAS,sCAAwCR,EAAaQ,SAAS,yCAC3FF,EAAiB,sBAEVN,EAAaO,SAAS,YAC/BJ,EAAiB,6BACbH,EAAaO,SAAS,2CACxBD,EAAiB,gCAEVN,EAAaO,SAAS,uCAC7BD,EAAiB,qCAEVN,EAAaO,SAAS,kBAC7BD,EAAiB,gBAEVN,EAAaO,SAAS,yBAC7BD,EAAiB,uBAEVN,EAAaO,SAAS,oCAC7BD,EAAiB,8BAEVN,EAAaO,SAAS,0CAC7BD,EAAiB,wBAEVN,EAAaQ,SAAS,YAAcR,EAAaQ,SAAS,eACjEF,EAAiB,gBAEVN,EAAaO,SAAS,cAAgBP,EAAaO,SAAS,0BACrEH,EAAmB,+BACfJ,EAAaO,SAAS,yBACxBD,EAAiB,yBAEVN,EAAaO,SAAS,+BAC7BD,EAAiB,6BAEVN,EAAaO,SAAS,qBAC7BD,EAAiB,mBAEVN,EAAaO,SAAS,oBAC7BD,EAAiB,kBAEVN,EAAaO,SAAS,0BAC7BD,EAAiB,yBAEVN,EAAaQ,SAAS,cAAgBR,EAAaQ,SAAS,iBACnEF,EAAiB,mBAEVN,EAAaO,SAAS,qBAAuBP,EAAaO,SAAS,8BAAgCP,EAAaO,SAAS,yBAA2BP,EAAaO,SAAS,mCAAqCP,EAAaO,SAAS,eAC9OF,EAAiB,6BACbL,EAAaO,SAAS,oBACxBD,EAAiB,kBAEVN,EAAaO,SAAS,6BAC7BD,EAAiB,2BAEVN,EAAaO,SAAS,wBAC7BD,EAAiB,sBAEVN,EAAaO,SAAS,kCAC7BD,EAAiB,gCAEVN,EAAaO,SAAS,uBAC7BD,EAAiB,qBAEVN,EAAaO,SAAS,cAC7BD,EAAiB,kBAGrBT,GAAcS,IAGhB7B,EAA2BwB,GAC3BtB,EAAyBuB,GACzBrB,EAA0BsB,GAC1BpB,EAA4BqB,GAC5BnB,EAA0BoB,KAEzB,CAAChW,IAGJ,IAKMoW,GAAqB,SAACnV,GACtB4T,GACFC,GAAkB,IAiBhBuB,GAA0B,SAACpV,GAC3B8T,GACFC,GAAuB,IAiBrBsB,GAAmB,SAACrV,GACpBgU,GACFC,GAAgB,IAiBdqB,GAAqB,SAACtV,GACtBkU,GACFC,GAAkB,IAiBhBoB,GAAmB,SAACvV,GACpBoU,GACFC,GAAgB,IAUpB,OACE,sBAAKhZ,UAAU,aAAf,UACE,qBAAKA,UAAU,oBAAf,SACE,cAACma,GAAA,EAAD,CAAQC,GAAG,OAAOlF,QAAQ,OAAOmF,OAAO,KAAKra,UAAU,oCAAoCsa,kBAAgB,EAA3G,SACE,qBAAKta,UAAU,cAAf,SACE,cAACma,GAAA,EAAOrN,SAAR,CAAiBE,GAAG,mBAAmBhN,UAAU,yBAAjD,SACE,eAACua,GAAA,EAAD,CAAKva,UAAU,iCAAf,UACE,eAACwa,GAAA,EAAD,CAAala,MAAM,YAAY0M,GAAG,gBAAgByN,KAAMlC,EAAgBmC,aApG3D,SAAC/V,GACrB4T,GACHC,GAAkB,IAkGkG9T,QAzF7F,SAACC,GACrB4T,GACHC,GAAkB,IAuF+HmC,aAAcb,GAAoBc,SAAUd,GAAoB9Z,UAAS,2CAAsC6X,GAAtP,UACE,cAAC2C,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,iBAAmBwV,SAAU,IAAK9a,UAAS,UAAoB,kBAAfiZ,GAAiC,SAAW,IAAtI,mBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,aAAwCwV,SAAU,IAAK9a,UAAS,UAAoB,sBAAfiZ,GAAqC,SAAW,IAAnJ,sBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,aAAwCwV,SAAU,IAAK9a,UAAS,UAAoB,sBAAfiZ,GAAqC,SAAW,IAAnJ,mBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,wDAAiFgS,SAAU,IAAK9a,UAAS,UAAoB,wBAAfiZ,GAAuC,SAAW,IAA9L,wBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,YAAuCwV,SAAU,IAAK9a,UAAS,UAAoB,qBAAfiZ,GAAoC,SAAW,IAAjJ,qBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,WAAsCwV,SAAU,IAAK9a,UAAS,UAAoB,oBAAfiZ,GAAmC,SAAW,IAA/I,oBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOoJ,qBAAuB+R,SAAU,IAAK9a,UAAS,UAAoB,iBAAfiZ,GAAgC,SAAW,IAAzI,6BAEF,sBAAMjZ,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,gBAAgB0M,GAAG,qBAAqByN,KAAMhC,EAAqBiC,aA5FpE,SAAC/V,GAC1B8T,GACHC,GAAuB,IA0FgHhU,QAhF3G,SAACC,GAC1B8T,GACHC,GAAuB,IA8EkJiC,aAAcZ,GAAyBa,SAAUb,GAAyB/Z,UAAS,yCAAoC+X,GAAtR,UACE,cAACyC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,qBAAuB8R,SAAU,IAAK9a,UAAS,UAAoB,sBAAfiZ,GAAqC,SAAW,IAA9I,mBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAA2C8R,SAAU,IAAK9a,UAAS,UAAoB,yBAAfiZ,GAAwC,SAAW,IAAzJ,qBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,wBAAuD8R,SAAU,IAAK9a,UAAS,UAAoB,4BAAfiZ,GAA2C,SAAW,IAAxK,+BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,aAA4C8R,SAAU,IAAK9a,UAAS,UAAoB,0BAAfiZ,GAAyC,SAAW,IAA3J,8BACCtB,EAAQhZ,KAAI,SAACoc,EAAKlc,GAAN,OACX,cAAC2b,GAAA,EAAY/R,KAAb,CAA+B4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmC+R,EAAIzb,YAAcwb,SAAUC,EAAIzb,WAAYU,UAAS,UAAKiZ,KAAe8B,EAAIzb,WAAa,SAAW,IAAnL,SAA0Lyb,EAAIhb,MAAvKgb,EAAIlS,UAG/B,sBAAM7I,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,SAAS0M,GAAG,cAAcyN,KAAM9B,EAAc+B,aAnFtD,SAAC/V,GACnBgU,GACHC,GAAgB,IAiF2FlU,QAvEtF,SAACC,GACnBgU,GACHC,GAAgB,IAqEsH+B,aAAcX,GAAkBY,SAAUZ,GAAkBha,UAAS,0CAAqCiY,GAAtO,UACE,cAACuC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,eAAiBgS,SAAU,IAAK9a,UAAS,UAAoB,gBAAfiZ,GAA+B,SAAW,IAAlI,mBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,oCAA6DgS,SAAU,IAAK9a,UAAS,UAAoB,kCAAfiZ,GAAiD,SAAW,IAApL,iDACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,gCAAyDgS,SAAU,IAAK9a,UAAS,UAAoB,uCAAfiZ,GAAsD,SAAW,IAArL,yCACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,WAAoCgS,SAAU,IAAK9a,UAAS,UAAoB,kBAAfiZ,GAAiC,SAAW,IAA3I,yCACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,kBAA2CgS,SAAU,IAAK9a,UAAS,UAAoB,yBAAfiZ,GAAwC,SAAW,IAAzJ,2BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,6BAAsDgS,SAAU,IAAK9a,UAAS,UAAoB,gCAAfiZ,GAA+C,SAAW,IAA3K,yCACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,mCAA4DgS,SAAU,IAAK9a,UAAS,UAAoB,yBAAfiZ,GAAwC,SAAW,IAA1K,gDAEF,sBAAMjZ,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,WAAW0M,GAAG,gBAAgByN,KAAM5B,EAAgB6B,aA1E1D,SAAC/V,GACrBkU,GACHC,GAAkB,IAwEiGpU,QA9D5F,SAACC,GACrBkU,GACHC,GAAkB,IA4D8H6B,aAAcV,GAAoBW,SAAUX,GAAoBja,UAAS,4CAAuCmY,GAAtP,UACE,cAACqC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,iBAAmBkb,SAAU,IAAK9a,UAAS,UAAoB,kBAAfiZ,GAAiC,SAAW,IAAtI,mBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOuB,uBAAyB4Z,SAAU,IAAK9a,UAAS,UAAoB,2BAAfiZ,GAA0C,SAAW,IAArJ,2BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,sBAAiDkb,SAAU,IAAK9a,UAAS,UAAoB,+BAAfiZ,GAA8C,SAAW,IAArK,+BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,YAAuCkb,SAAU,IAAK9a,UAAS,UAAoB,qBAAfiZ,GAAoC,SAAW,IAAjJ,qBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,WAAsCkb,SAAU,IAAK9a,UAAS,UAAoB,oBAAfiZ,GAAmC,SAAW,IAA/I,oBACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,iBAA4Ckb,SAAU,IAAK9a,UAAS,UAAoB,0BAAfiZ,GAAyC,SAAW,IAA3J,+BAEF,sBAAMjZ,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,QAAQ0M,GAAG,cAAcyN,KAAM1B,EAAc2B,aAhErD,SAAC/V,GACnBoU,GACHC,GAAgB,IA8D0FtU,QApDrF,SAACC,GACnBoU,GACHC,GAAgB,IAkDqH2B,aAAcT,GAAkBU,SAAUV,GAAkBla,UAAS,0CAAqCqY,GAArO,UACE,cAACmC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,mBAAmBob,SAAU,IAAK9a,UAAS,UAAoB,oBAAfiZ,GAAmC,SAAW,IAA7H,6BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,4BAA4Bob,SAAU,IAAK9a,UAAS,UAAoB,6BAAfiZ,GAA4C,SAAW,IAA/I,oEACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,uBAAuBob,SAAU,IAAK9a,UAAS,UAAoB,wBAAfiZ,GAAuC,SAAW,IAArI,iCACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,iCAAiCob,SAAU,IAAK9a,UAAS,UAAoB,kCAAfiZ,GAAiD,SAAW,IAAzJ,mCACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,sBAAsBob,SAAU,IAAK9a,UAAS,UAAoB,uBAAfiZ,GAAsC,SAAW,IAAnI,+BACA,cAACuB,GAAA,EAAY/R,KAAb,CAAkBT,KAAK,sCAAsC8S,SAAU,IAAvE,4BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,WAAWob,SAAU,IAAK9a,UAAS,UAAoB,kBAAfiZ,GAAiC,SAAW,IAAnH,sCAOZ,qBAAKjZ,UAAU,YAAf,SACE,eAACma,GAAA,EAAD,CAAQC,GAAG,OAAOlF,QAAQ,OAAOmF,OAAO,KAAKra,UAAU,oBAAoBsa,kBAAgB,EAA3F,UACE,sBAAKta,UAAU,mBAAf,UACE,cAACma,GAAA,EAAOa,MAAR,CAAchT,KAAK,IAAIhI,UAAU,YAAjC,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAK4X,GAAUzX,UAAU,qBAElC,cAACma,GAAA,EAAOc,OAAR,CAAeC,gBAAc,mBAAmBC,MAAO,CAAEC,MAAO,QAASC,UAAW,aAEtF,qBAAKrb,UAAU,cAAf,SACE,cAACma,GAAA,EAAOrN,SAAR,CAAiBE,GAAG,mBAAmBhN,UAAU,yBAAjD,SACE,eAACua,GAAA,EAAD,CAAKva,UAAU,iCAAf,UACE,eAACwa,GAAA,EAAD,CAAala,MAAM,YAAY0M,GAAG,gBAAgBhN,UAAS,2CAAsC6X,GAAjG,UACE,cAAC2C,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,iBAAmBwV,SAAU,IAAvE,mBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,aAAwCwV,SAAU,IAAhF,sBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,aAAwCwV,SAAU,IAAhF,mBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,wDAAiFgS,SAAU,IAAzH,wBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,YAAuCwV,SAAU,IAA/E,qBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAO2F,gBAAZ,WAAsCwV,SAAU,IAA9E,oBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOoJ,qBAAuB+R,SAAU,IAA3E,6BAEF,sBAAM9a,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,gBAAgB0M,GAAG,qBAAqBhN,UAAS,yCAAoC+X,GAAxG,UACE,cAACyC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,qBAAuB8R,SAAU,IAA3E,mBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAA2C8R,SAAU,IAAnF,qBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,wBAAuD8R,SAAU,IAA/F,+BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,aAA4C8R,SAAU,IAApF,8BACCnD,EAAQhZ,KAAI,SAACoc,EAAKlc,GAAN,OACX,cAAC2b,GAAA,EAAY/R,KAAb,CAA+B4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmC+R,EAAIzb,YAAcwb,SAAUC,EAAIzb,WAA9G,SAA2Hyb,EAAIhb,MAAxGgb,EAAIlS,UAG/B,sBAAM7I,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,SAAS0M,GAAG,cAAchN,UAAS,0CAAqCiY,GAA3F,UACE,cAACuC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,eAAiBgS,SAAU,IAArE,mBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,oCAA6DgS,SAAU,IAArG,iDACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,gCAAyDgS,SAAU,IAAjG,yCACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,WAAoCgS,SAAU,IAA5E,yCACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,kBAA2CgS,SAAU,IAAnF,2BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,6BAAsDgS,SAAU,IAA9F,yCACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOmJ,cAAZ,mCAA4DgS,SAAU,IAApG,gDAEF,sBAAM9a,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,WAAW0M,GAAG,gBAAgBhN,UAAS,4CAAuCmY,GAAjG,UACE,cAACqC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,iBAAmBkb,SAAU,IAAvE,mBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOuB,uBAAyB4Z,SAAU,IAA7E,2BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,sBAAiDkb,SAAU,IAAzF,+BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,YAAuCkb,SAAU,IAA/E,qBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,WAAsCkb,SAAU,IAA9E,oBACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,iBAA4Ckb,SAAU,IAApF,+BAEF,sBAAM9a,UAAU,gCAAhB,eACA,eAACwa,GAAA,EAAD,CAAala,MAAM,QAAQ0M,GAAG,cAAchN,UAAS,0CAAqCqY,GAA1F,UACE,cAACmC,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,mBAAmBob,SAAU,IAA5D,6BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,4BAA4Bob,SAAU,IAArE,oEACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,uBAAuBob,SAAU,IAAhE,iCACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,iCAAiCob,SAAU,IAA1E,mCACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,sBAAsBob,SAAU,IAA/D,+BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkBT,KAAK,sCAAsC8S,SAAU,IAAvE,4BACA,cAACN,GAAA,EAAY/R,KAAb,CAAkB4G,GAAIwL,IAAMnb,GAAG,WAAWob,SAAU,IAApD,2C,UCvVHQ,GA9DS,WAEtB,MAAyC7Z,IAAjCH,EAAR,EAAQA,QAASD,EAAjB,EAAiBA,KAAMG,EAAvB,EAAuBA,QAASD,EAAhC,EAAgCA,KAEhC,EAAwCM,mBAASN,GAAjD,mBAAOga,EAAP,KAAqBC,EAArB,KACMhX,EAAWC,cACjB,EAA8B5C,mBAAS,IAAvC,mBAAO+U,EAAP,KAAgB6E,EAAhB,KAYMC,EAAM,uCAAG,sBAAA3Z,EAAA,sDACb,IACEM,IAAM,CACJC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,qBACFI,MAAK,SAAA+Y,GAKcA,EAAmBjd,KACvCyD,eAAea,QAAQ,cAAe,MACtC1B,GAAQ,GACRE,EAAQ,MAERgD,EAAS,QAQX,MAAOtB,IAvBI,2CAAH,qDAgCZ,OAJAG,qBAAU,WACRmY,EAAgBja,KACf,CAACF,EAAME,IAGR,sBAAKvB,UAAU,8BAAf,UACE,eAACmL,EAAA,EAAD,CAAMnL,UAAU,gCAAhB,UACE,cAAC4b,GAAA,EAAD,CAAapW,KAAK,SAASqW,KAAK,KAAKnQ,YAAY,SAASyP,MAAO,CAAE7K,MAAO,KAAOtQ,UAAU,OAAOiN,aAAW,SAAS6O,OA7CvG,SAACnX,GACpB8W,EAAW9W,EAAEsD,OAAO1E,UA2ClB,IACiJ,cAACoI,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QAzCzJ,WACpB,IAAIW,EAAI,kBAAcuR,GAEtBpS,EAASa,IAsC0I,uBAE9H,OAAjBkW,GAAmD,OAA1BA,EAAaxY,UAA+C,KAA1BwY,EAAaxY,UACxE,sBAAK/C,UAAU,iBAAf,oBAAwCub,EAAa9Y,SAArD,KAAgE,cAAC,IAAD,CAAM/C,GAAE,UAAKC,OAAOmL,gBAAkB9K,UAAU,cAAhD,yBAAhE,KAAkJ,mBAAGA,UAAU,cAAc0E,QAASgX,EAApC,oBAAlJ,WC9DO,OAA0B,0CC0F1BK,GApFA,WAEb,MAAkCla,mBAAS,QAA3C,mBAAOma,EAAP,KAAkBC,EAAlB,KAEMC,EAAc,uCAAG,sBAAAna,EAAA,sDACrBM,IAAM,CACJC,OAAQ,MACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,qBACFrE,MAAK,SAAAuZ,GAEN,QAAoBld,GAAhBkd,QAAkDld,GAArBkd,EAAazd,KAAmB,CAG/DyE,QAAQC,IAAI,kBAAoB+Y,EAAazd,MAC7C,IACI0d,EADeD,EAAazd,KACE1B,MAAM,KACV,IAA1Bof,EAAejX,QACjB8W,EAAaG,EAAe,QAbb,2CAAH,qDAwBpB,OALA/Y,qBAAU,WACR6Y,MAEC,IAGD,qBAAKlc,UAAU,qCAAf,SACE,yBAAQA,UAAU,OAAlB,UACE,qBAAKA,UAAU,6BAAf,SACE,sBAAKA,UAAU,kCAAf,UACE,qBAAKA,UAAU,WAAf,SACE,oBAAIA,UAAU,kBAAd,SACE,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,IAAIM,UAAU,0BAAvB,wBAGlC,qBAAKA,UAAU,WAAf,SACE,qBAAIA,UAAU,kBAAd,UACE,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,iBAAmBtF,UAAU,0BAAjD,yBAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,qBAAuBhJ,UAAU,0BAArD,6BAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmJ,eAAiB9I,UAAU,0BAA/C,sBAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOC,iBAAmBI,UAAU,0BAAjD,6BAGlC,qBAAKA,UAAU,WAAf,SACE,qBAAIA,UAAU,kBAAd,UACE,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,mBAAmBM,UAAU,0BAAtC,+BAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,4BAA4BM,UAAU,0BAA/C,sEAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,uBAAuBM,UAAU,0BAA1C,mCAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,iCAAiCM,UAAU,0BAApD,0CAGlC,qBAAKA,UAAU,WAAf,SACE,qBAAIA,UAAU,kBAAd,UACE,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,sCAAsCM,UAAU,0BAAzD,8BAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,sBAAsBM,UAAU,0BAAzC,sCAGlC,qBAAKA,UAAU,WAAf,SACE,qBAAIA,UAAU,kBAAd,UACE,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,WAAWM,UAAU,0BAA9B,0BAC9B,oBAAIA,UAAU,gBAAd,SAA8B,cAAC,IAAD,CAAMN,GAAG,2BAA2BM,UAAU,0BAA9C,yCAKtC,qBAAKA,UAAU,uBAAf,SACE,sBAAKA,UAAU,2BAAf,UACE,sBAAKA,UAAU,uCAAf,UACE,+CADF,uDACgF,uBADhF,uBAEoBgc,EAFpB,0CAIA,qBAAKhc,UAAU,4CAAf,SACE,cAAC,IAAD,CAAMN,GAAG,IAAT,SAAa,cAACgJ,EAAA,EAAD,CAAO7I,IAAKwc,oB,sCC8TxBC,GA3YC,SAAC,GAAc,IAAZjX,EAAW,EAAXA,KAKTkX,EAAa,CACf,MAAS,CACL,KAAQ,WACR,MAAS,gBACT,IAAO,kEAAmE,OAAU,cACpF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,oBACR,MAAS,eACT,IAAO,gEAAiE,OAAU,cAClF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,mBACR,MAAS,eACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,oBACR,MAAS,eACT,IAAO,gEAAiE,OAAU,cAClF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,mBACR,MAAS,eACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,sBACR,MAAS,eACT,IAAO,kEAAmE,OAAU,cACpF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,uBACR,MAAS,eACT,IAAO,mEAAoE,OAAU,cACrF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,qBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,MAAS,CACL,KAAQ,qBACR,MAAS,cACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,eACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,wBACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,QACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,eACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,oBACR,MAAS,cACT,IAAO,gEAAiE,OAAU,cAClF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,cACT,IAAO,kEAAmE,OAAU,cACpF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,cACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,uBACR,MAAS,cACT,IAAO,mEAAoE,OAAU,cACrF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,oBACR,MAAS,eACT,IAAO,gEAAiE,OAAU,cAClF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,kBACR,MAAS,eACT,IAAO,8DAA+D,OAAU,cAChF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,cACT,IAAO,kEAAmE,OAAU,cACpF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,aACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,iBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,cACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,cACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,eACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,kBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,cACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,cACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,cACT,IAAO,iEAAkE,OAAU,cACnF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,uBACR,MAAS,eACT,IAAO,mEAAoE,OAAU,cACrF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,uBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,uBACR,MAAS,aACT,IAAO,mEAAoE,OAAU,cACrF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,oBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,cACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,mBACR,MAAS,aACT,IAAO,+DAAgE,OAAU,cACjF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,kBACR,MAAS,aACT,IAAO,8DAA+D,OAAU,cAChF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,kBACR,MAAS,aACT,IAAO,8DAA+D,OAAU,cAChF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,sBACR,MAAS,aACT,IAAO,kEAAmE,OAAU,cACpF,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,uBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,OAAU,CACN,KAAQ,qBACR,MAAS,eACT,QAAW,UAAW,UAAa,UAAW,UAAa,UAC3D,QAAU,GAEd,QAAW,CACP,YAAe,UACf,aAAgB,YA+BlBC,EAAiBD,EAAWlX,EAAKwD,IACjC4T,EAAoBF,EAAU,QAEhCG,EAAaF,EAEbG,EAAgB,CAAE,OAAU,WAC5B3c,EAAY,GAEhB0c,EAAWE,OAASH,EAAkBI,iBAEf5d,IAAnBud,IAA0D,IAA1BA,EAAeM,QAC/CJ,EAAWK,KAAOP,EAAeQ,QACjCL,EAAcM,OAAS,UACvBjd,EAAY,eAEZ0c,EAAWK,KAAO1X,EAAK0X,KACvBJ,EAAcM,OAAS,WAK3B,OAEI,eAAC,KAAD,CACIC,QAAS,SAAAC,GAAI,OACT,sBAAMnQ,GAAI3H,EAAKwD,GAAIuU,KAAMV,EAAWK,KAAMM,OAAQX,EAAWE,OAAQU,aAAcjY,EAAKkY,aAAcC,EAAGnY,EAAKoY,KAAMtC,MAAOwB,EAAe3c,UAAWA,KAEzJuU,SAAS,eACTmJ,qBAAqB,OACrBC,kBAVoB,cAIxB,UAQI,qBAAK3d,UAAU,uBAAf,SAAsC,6BAAKwc,EAAetS,SAC1D,qBAAKlK,UAAU,qBAAf,SACI,8BAEI,mBAAGgI,KAAMwU,EAAeja,IAAK0F,OAAO,SAASH,IAAI,aAAjD,gCCxSL8V,GA5FE,WAoDb,OACI,sBAAK5Q,GAAG,aAAR,UACI,qBAAKA,GAAG,aAAR,SACI,qBAAKA,GAAG,UAAR,SACI,sBAAK6Q,QAAQ,MAAMC,MAAM,6BAA6BC,QAAQ,cAAcC,SAAS,WAArF,UACI,4BAtDhB,CACI,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,osEACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,utBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,ykBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,qoBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,qoBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,2mBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,gwBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,+nBACvG,CAAE,GAAM,QAAS,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,gdACvG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,4kBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,gbACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,2fACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,+TACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,qcACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,0xCACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,ifACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,2oBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,4rBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,4YACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,w8BACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,4qBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,krBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,8eACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,8wBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,wbACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,gpBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,qXACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,u0BACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,+fACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,oiBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,wcACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,kzBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,8pBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,s6BACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,8nBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,qiBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,shBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,85BACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,yxBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,6hBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,0aACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,26CACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,y8BACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,ujBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,+lBACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,ovCACxG,CAAE,GAAM,SAAU,KAAQ,UAAW,OAAU,UAAW,aAAgB,qBAAsB,KAAQ,0sCAQ7Erf,KAAI,SAAA0G,GAAI,OACf,cAAC,GAAD,CAAuBA,KAAMA,GAAfA,EAAKwD,SAG3B,8BACI,0BAAUuU,KAAK,OAAOC,OAAO,UAAUY,OAAO,yCAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,SAASC,GAAG,SAASC,GAAG,UAAUC,GAAG,WACjG,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,iDAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,UAAUC,GAAG,SAASC,GAAG,UAAUC,GAAG,WAClG,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,+CAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,UAAUC,GAAG,QAAQC,GAAG,UAAUC,GAAG,UACjG,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,uCAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,MAAMC,GAAG,SAASC,GAAG,MAAMC,GAAG,WAC1F,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,4CAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,SAASC,GAAG,MAAMC,GAAG,UAAUC,GAAG,QAC9F,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,4CAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,UAAUC,GAAG,UAAUC,GAAG,UAClFC,GAAG,YACP,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,oDAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,UAAUC,GAAG,UAAUC,GAAG,SAClFC,GAAG,YACP,0BAAUlB,KAAK,OAAOC,OAAO,UAAUY,OAAO,oDAC9C,sBAAMb,KAAK,OAAOC,OAAO,UAAUa,gBAAgB,MAAMC,GAAG,UAAUC,GAAG,UAAUC,GAAG,UAClFC,GAAG,eAEX,mBAAGtR,GAAG,oBAIlB,qBAAKhN,UAAU,cC0NZue,GA3SK,WAEhB,IAAM7a,EAAWC,cAEjB,EAA8C9B,mBAAS,IAAvD,mBAAO2c,EAAP,KAAwBC,EAAxB,KAEA,EAAsC5c,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KACA,EAA4CzE,mBAAS,IAArD,mBAAO6c,EAAP,KAAuBC,EAAvB,KACA,EAAgC9c,mBAAS,IAAzC,mBAAO+c,EAAP,KAAiBC,EAAjB,KACA,EAAgChd,mBAAS,IAAzC,mBAAOid,EAAP,KAAiBC,EAAjB,KAGMva,EAAWC,cAEXiO,EAAS,uCAAG,sBAAA3Q,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,wBACJrE,MAAK,SAAAyE,GAEJ,OADAf,EAAee,EAAe3I,MACvB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,yBAERrE,MAAK,SAAAoc,GAEJ,OADAL,EAAkBK,EAActgB,MACzB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mBAERrE,MAAK,SAAAqc,GAEJ,OADAJ,EAAYI,EAAQvgB,MACb2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mBAERrE,MAAK,SAAAsc,GAEJ,OADAH,EAAYG,EAAQxgB,MACb2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAERrE,MAAK,SAAA0E,GACJmX,EAAmBnX,EAAmB5I,KAAKqM,YA7BjC,2CAAH,qDAiCf1H,qBAAU,WACNqP,MACD,CAAChP,EAASkE,WA+Bb,MAAwB,KAApB4W,EAEI,cAAC,EAAD,IAKA,sBAAKxe,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,0FACA,sBAAMf,KAAK,cAAcgB,QAAQ,yJAGrC,4DACA,qBAAKlL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,gFAAgFC,IAAI,sBACjI,qBAAKE,UAAU,UAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAY4hB,QAExD,sBAAKxe,UAAU,UAAf,UACI,qEACA,cAAC,EAAD,CAAc+D,YAAaA,OAE/B,qBAAK/D,UAAU,wEAAf,SACI,cAAC,IAAD,CAAMN,GAAG,8BAAT,SAAuC,4DAE3C,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAG,8BAAT,SACI,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,6EAA6E+I,MAAM,OAAO9I,IAAI,iBAGjH,qBAAKE,UAAU,WAAf,sVAIJ,qBAAKA,UAAU,kCAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,oCAAf,SACI,qBAAKA,UAAU,6BAAf,SACI,cAACmf,GAAA,EAAD,CAAgBC,MAAM,QAAQ9e,MAAM,mCAAmCsa,SApE5E,SAACyE,EAAQC,GAE5B,IAAIla,EAAkBrB,EAAYiB,QAAO,SAAUkS,GAC/C,OAAQA,EAAe5X,aAAe+f,KAGtCha,EAAO1F,OAAO2F,gBAAkB,IAAMF,EAAgB,GAAG5E,qBAAuB,IAAM4E,EAAgB,GAAG1E,eAAiB,IAAM0E,EAAgB,GAAG9F,WAEvJkF,EAASa,IA4DgH2H,GAAG,kBAAkBhN,UAAU,uBAAhI,SACK+D,EAAYpF,KAAI,SAAAsG,GAAO,OACpB,eAACsa,GAAA,EAAS9W,KAAV,CAAeqS,SAAU7V,EAAQ3F,WAAjC,UAAuE2F,EAAQlF,KAA/E,KAAuFkF,EAAQa,SAA/F,IAA0Gb,EAAQrE,YAAlH,KAAiIqE,EAAQM,eAAzI,MAAkDN,EAAQ3F,qBAK1E,qBAAKU,UAAU,oCAAf,SACI,qBAAKA,UAAU,8BAAf,SACI,cAACmf,GAAA,EAAD,CAAgBC,MAAM,QAAQ9e,MAAM,0BAA0Bsa,SAlE/D,SAACyE,EAAQC,GAChC,IAAIja,EAAO1F,OAAO2F,gBAAkB,eAAiB+Z,EAErD7a,EAASa,IA+D2G2H,GAAG,kBAAkBhN,UAAU,wBAA3H,SACK0e,EAAe/f,KAAI,SAAA6gB,GAAU,OAC1B,eAACD,GAAA,EAAS9W,KAAV,CAAeqS,SAAU0E,EAAWlgB,WAApC,UAA6EkgB,EAAWzf,KAAxF,KAAgGyf,EAAWC,aAA3G,MAAqDD,EAAWlgB,0BAOxF,qBAAKU,UAAU,kCAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,oCAAf,SACI,qBAAKA,UAAU,6BAAf,SACI,cAACmf,GAAA,EAAD,CAAgBC,MAAM,QAAQ9e,MAAM,4BAA4Bsa,SAzEvE,SAACyE,EAAQC,GAC1B,IAAIja,EAAO1F,OAAO2F,gBAAkB,SAAW+Z,EAE/C7a,EAASa,IAsEuG2H,GAAG,YAAYhN,UAAU,uBAAjH,SACK4e,EAASjgB,KAAI,SAAA+gB,GAAI,OACd,eAACH,GAAA,EAAS9W,KAAV,CAAeqS,SAAU4E,EAAKpgB,WAA9B,UAAiEogB,EAAK3f,KAAtE,KAA8E2f,EAAKD,aAAnF,MAA+CC,EAAKpgB,qBAKpE,qBAAKU,UAAU,oCAAf,SACI,qBAAKA,UAAU,8BAAf,SACI,cAACmf,GAAA,EAAD,CAAgBC,MAAM,QAAQ9e,MAAM,oBAAoBsa,SA5E/D,SAACyE,EAAQC,GAC1B,IAAIja,EAAO1F,OAAO2F,gBAAkB,SAAW+Z,EAE/C7a,EAASa,IAyE+F2H,GAAG,YAAYhN,UAAU,wBAAzG,SACK8e,EAASngB,KAAI,SAAAghB,GAAI,OACd,eAACJ,GAAA,EAAS9W,KAAV,CAAeqS,SAAU6E,EAAKrgB,WAA9B,UAAiEqgB,EAAK5f,KAAtE,IAA6E4f,EAAK/e,YAAlF,KAAiG+e,EAAKF,aAAtG,MAA+CE,EAAKrgB,0BAO5E,qBAAKU,UAAU,SAAf,SACI,cAAC,GAAD,MAEJ,sBAAKA,UAAU,UAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,cAAC,IAAD,CAAMN,GAAG,6BAAT,SAAsC,6CAE1C,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAG,6BAAT,SACI,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,gFAAgF+I,MAAM,OAAO9I,IAAI,gBAGpH,sBAAKE,UAAU,WAAf,UACI,qBAAKA,UAAU,OAAf,kKACA,8BACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,oDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAAuCtF,UAAU,8CAAzD,SAAuG,oBAAIA,UAAU,YAAd,8BAE3G,qBAAKA,UAAU,mDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,4DAA9D,SAA0H,oBAAIA,UAAU,YAAd,2DAOlJ,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,cAAC,IAAD,CAAMN,GAAG,4BAAT,SAAqC,4CAEzC,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAG,4BAAT,SACI,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,+EAA+E+I,MAAM,OAAO9I,IAAI,eAGnH,sBAAKE,UAAU,WAAf,UACI,qBAAKA,UAAU,OAAf,gKACA,8BACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,oDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,WAAsCtF,UAAU,8CAAxD,SAAsG,oBAAIA,UAAU,YAAd,6BAE1G,qBAAKA,UAAU,mDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,4DAA7D,SAAyH,oBAAIA,UAAU,YAAd,0DAOjJ,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOoJ,qBAApB,SAA2C,kDAE/C,sBAAK/I,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOoJ,qBAApB,SACI,cAACL,EAAA,EAAD,CAAO7I,IAAI,qFAAqFC,IAAI,+BAA+B8I,MAAM,aAGjJ,qBAAK5I,UAAU,WAAf,SACI,kLAIZ,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,cAAC,IAAD,CAAMN,GAAG,iBAAT,SAA0B,iEAE9B,sBAAKM,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,IAAD,CAAMN,GAAG,iBAAT,SACI,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,oFAAoF+I,MAAM,OAAO9I,IAAI,eAGxH,qBAAKE,UAAU,WAAf,SACI,oHAIZ,qBAAKA,UAAU,gBAAf,SACI,qBAAKA,UAAU,cAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,6CAAf,SACI,qBAAKA,UAAU,gCAAf,SACI,mBAAGgI,KAAK,qCAAqCC,OAAO,SAASH,IAAI,aAAjE,SAA8E,cAACY,EAAA,EAAD,CAAO7I,IAAI,qFAAqF+I,MAAM,OAAO9I,IAAI,8BAGvM,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,mCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,yCAAT,SAAkD,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,oFAAoF+I,MAAM,OAAO9I,IAAI,iCAG1K,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,mCAAf,SAEI,cAAC,IAAD,CAAMN,GAAG,sDAAT,SAA+D,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,yFAAyF+I,MAAM,OAAO9I,IAAI,kCAG5L,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,iCAAf,SAEI,mBAAGgI,KAAK,gCAAgCC,OAAO,SAASH,IAAI,aAA5D,SAAyE,cAACY,EAAA,EAAD,CAAO7I,IAAI,mFAAmF+I,MAAM,OAAO9I,IAAI,uC,UCzO7M8f,GAvCa,SAAC,GAAgD,IAA9CC,EAA6C,EAA7CA,oBAAqBxK,EAAwB,EAAxBA,QAAS5P,EAAe,EAAfA,SACzD,EAA4C5D,mBAASwT,GAArD,mBAAOyK,EAAP,KAAuBC,EAAvB,KAmBA,OANA1c,qBAAU,WACFwc,EAAoB1a,OAAS,GAC7B4a,EAAkBF,KAEvB,CAACA,IAGA,qCACI,6CACCC,EAAenhB,KAAI,SAACzB,EAAM2B,GAAP,OAChB,gCACI,kCACI,uBACI+Q,UAAQ,EACRpK,KAAK,WACLwa,QAAS9iB,EAAK8iB,UAAW,EACzBtb,QAAS,kBA3BlB,SAAA7F,GACX,IAAMohB,EAAO,YAAOH,GACpBG,EAAQlL,OAAOlW,EAAO,EAAG,CACrBqL,KAAM4V,EAAejhB,GAAOqL,KAC5BgW,WAAYJ,EAAejhB,GAAOqhB,WAClCF,SAAUF,EAAejhB,GAAOmhB,UAEpCD,EAAkBE,GAClBxa,EAASwa,GAmB0BE,CAAOthB,MAL9B,IAMQ3B,EAAKgN,QACL,yBARFhN,EAAKgjB,mB,kBCvBzBE,GAAeC,KAAOC,KAAV,oCACd,SAAA7c,GAAK,OAAIA,EAAM8c,UAAN,sCA+DEC,GA1DO,SAAC,GAA+D,IAA7DX,EAA4D,EAA5DA,oBAAqBY,EAAuC,EAAvCA,cAAepL,EAAwB,EAAxBA,QAAS5P,EAAe,EAAfA,SAClE,EAAgC5D,mBAASwT,GAAzC,mBAAOqL,EAAP,KAAiBC,EAAjB,KAqCA,OAJAtd,qBAAU,YAhBkB,SAACud,EAAaC,EAAUC,GAChD,IAIIC,EAJmBD,EAAS9b,QAAO,SAAUkS,GAC7C,OAAQA,EAAe8I,WAGoBrhB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAE/EW,EAAWA,EAASliB,KAAI,SAAAzB,GAGpB,OAFAA,EAAK+X,UAAW,EAChB/X,EAAK8iB,QAAUe,EAAwBnH,SAAS1c,EAAKgjB,YAC9ChjB,KAGXyjB,EAAYE,GAIZI,CAAoBpB,EAAqBxK,EAASoL,KACnD,CAACZ,EAAqBxK,EAASoL,IAG9B,qCACI,uCACCC,EAAS/hB,KAAI,SAACzB,EAAM2B,GAAP,OACV,gCACI,kCACI,uBACI+Q,UAAQ,EACRpK,KAAK,WACLwa,QAAS9iB,EAAK8iB,UAAW,EACzBtb,QAAS,kBA7ClB,SAAA7F,GACX,IAAMohB,EAAO,YAAOS,GACpBT,EAAQlL,OAAOlW,EAAO,EAAG,CACrBqL,KAAMwW,EAAS7hB,GAAOqL,KACtBgW,WAAYQ,EAAS7hB,GAAOqhB,WAC5BgB,SAAUR,EAAS7hB,GAAOqiB,SAC1BC,YAAaT,EAAS7hB,GAAOsiB,YAC7BC,qBAAsBV,EAAS7hB,GAAOuiB,qBACtCpB,SAAUU,EAAS7hB,GAAOmhB,QAC1B/K,SAAUyL,EAAS7hB,GAAOoW,WAE9B0L,EAAYV,GACZxa,EAASwa,GAiC0BE,CAAOthB,IACtBoW,SAAU/X,EAAK+X,WANvB,IAOO,eAACmL,GAAD,CAAcG,SAAUrjB,EAAK+X,SAA7B,UAAwC/X,EAAKgN,KAA7C,IAAoDhN,EAAKikB,kBACxD,yBATFjkB,EAAKgjB,mBChDzBE,GAAeC,KAAOC,KAAV,oCACd,SAAA7c,GAAK,OAAIA,EAAM8c,UAAN,sCA6DEc,GAxDO,SAAC,GAA+D,IAA7DxB,EAA4D,EAA5DA,oBAAqByB,EAAuC,EAAvCA,cAAejM,EAAwB,EAAxBA,QAAS5P,EAAe,EAAfA,SAClE,EAAgC5D,mBAASwT,GAAzC,mBAAOkM,EAAP,KAAiBC,EAAjB,KAmCA,OAJAne,qBAAU,YAhBkB,SAACud,EAAaa,EAAUC,GAChD,IAIIC,EAJmBD,EAAS1c,QAAO,SAAUkS,GAC7C,OAAQA,EAAe8I,WAGoBrhB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAE/EuB,EAAWA,EAAS9iB,KAAI,SAAAzB,GAGpB,OAFAA,EAAK+X,UAAW,EAChB/X,EAAK8iB,QAAU2B,EAAwB/H,SAAS1c,EAAKgjB,YAC9ChjB,KAGXskB,EAAYC,GAIZG,CAAoB/B,EAAqBxK,EAASiM,KACnD,CAACzB,EAAqBxK,EAASiM,IAG9B,qCACI,uCACCC,EAAS5iB,KAAI,SAACzB,EAAM2B,GAAP,OACV,gCACI,kCACI,uBACI+Q,UAAQ,EACRpK,KAAK,WACLwa,QAAS9iB,EAAK8iB,UAAW,EACzBtb,QAAS,kBA3ClB,SAAA7F,GACX,IAAMohB,EAAO,YAAOsB,GACpBtB,EAAQlL,OAAOlW,EAAO,EAAG,CACrBqL,KAAMqX,EAAS1iB,GAAOqL,KACtBgW,WAAYqB,EAAS1iB,GAAOqhB,WAC5BkB,qBAAsBG,EAAS1iB,GAAOuiB,qBACtCpB,SAAUuB,EAAS1iB,GAAOmhB,QAC1B/K,SAAUsM,EAAS1iB,GAAOoW,WAE9BuM,EAAYvB,GACZxa,EAASwa,GAiC0BE,CAAOthB,IACtBoW,SAAU/X,EAAK+X,WAAY,IANnC,IAOO,cAAC,GAAD,CAAcsL,SAAUrjB,EAAK+X,SAA7B,SAAwC/X,EAAKgN,UAC5C,yBATFhN,EAAKgjB,mBC4ThB2B,GAzWM,SAAC,GAAwE,IAAtEC,EAAqE,EAArEA,eAAgBC,EAAqD,EAArDA,UAAWnB,EAA0C,EAA1CA,YAAaoB,EAA6B,EAA7BA,MAAOC,EAAsB,EAAtBA,MAAOC,EAAe,EAAfA,SAE1E,EAAsDrgB,mBAASigB,GAA/D,mBAAOK,EAAP,KAA4BC,EAA5B,KAEA,EAAsCvgB,mBAAS,gCAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAoCzgB,mBAAS,QAA7C,mBAAO0gB,EAAP,KAAmBC,EAAnB,KACA,EAAkC3gB,mBAAS,IAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KACA,EAA4D7gB,mBAAS,IAArE,mBAAO8gB,EAAP,KAA+BC,EAA/B,KACA,EAAgD/gB,mBAAS,IAAzD,mBAAOghB,EAAP,KAAyBC,EAAzB,KACA,EAAgDjhB,mBAAS,IAAzD,mBAAOkhB,EAAP,KAAyBC,EAAzB,KAEMC,EAAkB,WACpBX,EAAe,gCACfE,EAAc,QACdE,EAAa,KA2CjBrf,qBAAU,YAxCkB,WACxB,GAAIud,EAAYzb,OAAS,EAAG,CAExB,IAAI0a,EAAsBe,EAAY5b,QAAO,SAAUkS,GACnD,OAAmC,IAA3BA,EAAe8I,WAGvBtB,EAAiB,YAAI,IAAI1H,IAAI6I,EAAoBlhB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAC1ExE,EAAevZ,OAAS,GACxByd,EAA0BlE,EAAexL,KAAK,OAItD,GAAI8O,EAAM7c,OAAS,EAAG,CAElB,IAAImc,EAAgBU,EAAMhd,QAAO,SAAUkS,GACvC,OAAmC,IAA3BA,EAAe8I,WAGvBpB,EAAW,YAAI,IAAI5H,IAAIsK,EAAc3iB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAE9DtE,EAASzZ,OAAS,GAClB2d,EAAoBlE,EAAS1L,KAAK,OAI1C,GAAI+O,EAAM9c,OAAS,EAAG,CAElB,IAAIsb,EAAgBwB,EAAMjd,QAAO,SAAUkS,GACvC,OAAmC,IAA3BA,EAAe8I,WAGvBlB,EAAW,YAAI,IAAI9H,IAAIyJ,EAAc9hB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAE9DpE,EAAS3Z,OAAS,GAClB6d,EAAoBlE,EAAS5L,KAAK,QAM1CiQ,GACAf,EAAuBN,GACvBmB,IACIf,IACAU,EAA0B,IAC1BE,EAAoB,IACpBE,EAAoB,OAEzB,CAAClB,EAAgBI,IAEpB7e,qBAAU,WACN0e,EAAUtV,QAAUwW,IACrB,CAAClB,IAwOJ,OAAII,EAAoBhd,OAAS,EAEzB,sBAAKnF,UAAU,OAAf,UACI,sBAAKA,UAAU,wCAAf,UACI,sBAAKA,UAAU,oCAAf,UACgC,KAA3B2iB,GACG,gCAAK,mDAA+BA,KAElB,KAArBE,GACG,gCAAK,6CAAyBA,KAEZ,KAArBE,GACG,gCAAK,6CAAyBA,KAEL,KAA3BJ,GAAsD,KAArBE,GAAgD,KAArBE,GAC1D,yDAGR,qBAAK/iB,UAAU,kDAAf,SACI,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAazH,SAzPjD,SAACyE,EAAQC,GAExB,IAAI8D,EAAe,GACfb,EAAa,GACbE,EAAY,GAED,MAAXpD,GAA6B,MAAXA,GAClB+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAEXd,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBF,EAAa,IAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE0hB,iBAAmBJ,EAAEI,iBAAyB,EAChD1hB,EAAE0hB,iBAAmBJ,EAAEI,kBAA0B,EAEjD1hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE0hB,iBAAmBJ,EAAEI,iBAAyB,EAChD1hB,EAAE0hB,iBAAmBJ,EAAEI,kBAA0B,EAEjD1hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,WAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE2hB,iBAAmBL,EAAEK,iBAAyB,EAChD3hB,EAAE2hB,iBAAmBL,EAAEK,kBAA0B,EAEjD3hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE2hB,iBAAmBL,EAAEK,iBAAyB,EAChD3hB,EAAE2hB,iBAAmBL,EAAEK,kBAA0B,EAEjD3hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,cAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE4hB,mBAAqBN,EAAEM,mBAA2B,EACpD5hB,EAAE4hB,mBAAqBN,EAAEM,oBAA4B,EAErD5hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE4hB,mBAAqBN,EAAEM,mBAA2B,EACpD5hB,EAAE4hB,mBAAqBN,EAAEM,oBAA4B,EAErD5hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,gBAEK,MAAXlD,GAA6B,OAAXA,GACV,MAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE6hB,cAAgBP,EAAEO,cAAsB,EAC1C7hB,EAAE6hB,cAAgBP,EAAEO,eAAuB,EAE3C7hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE6hB,cAAgBP,EAAEO,cAAsB,EAC1C7hB,EAAE6hB,cAAgBP,EAAEO,eAAuB,EAE3C7hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,SAEK,OAAXlD,GAA8B,OAAXA,GACX,OAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE8hB,gBAAkBR,EAAEQ,gBAAwB,EAC9C9hB,EAAE8hB,gBAAkBR,EAAEQ,iBAAyB,EAE/C9hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE8hB,gBAAkBR,EAAEQ,gBAAwB,EAC9C9hB,EAAE8hB,gBAAkBR,EAAEQ,iBAAyB,EAE/C9hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,WAEK,OAAXlD,GAA8B,OAAXA,GACX,OAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE+hB,cAAgBT,EAAES,cAAsB,EAC1C/hB,EAAE+hB,cAAgBT,EAAES,eAAuB,EAE3C/hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAE+hB,cAAgBT,EAAES,cAAsB,EAC1C/hB,EAAE+hB,cAAgBT,EAAES,eAAuB,EAE3C/hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,eAEK,OAAXlD,GAA8B,OAAXA,IACX,OAAXA,GACA+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAEgiB,cAAgBV,EAAEU,cAAsB,EAC1ChiB,EAAEgiB,cAAgBV,EAAEU,eAAuB,EAE3ChiB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAejB,EAAoBe,MAAK,SAAUnhB,EAAGshB,GACjD,OAAIthB,EAAEgiB,cAAgBV,EAAEU,cAAsB,EAC1ChiB,EAAEgiB,cAAgBV,EAAEU,eAAuB,EAE3ChiB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,mBAGjBH,EAAuBgB,GACvBd,EAAe,YAAchD,EAAIrX,OAAOpD,WACxC2d,EAAcD,GACdG,EAAaD,IAsByEzV,GAAG,0BAA0BhN,UAAU,uBAA7G,UACI,cAACuf,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,uCAAuD,IAAvD,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCAAsD,IAAtD,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,uCAAuD,IAAvD,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCAAsD,IAAtD,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,2BAA2C,IAA3C,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,4BAA4C,IAA5C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,wBAAwC,IAAxC,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,yBAA0C,IAA1C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,0BAA2C,IAA3C,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,2BAA4C,IAA5C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,6BAA8C,IAA9C,eACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,8BAA+C,IAA/C,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,+BAAgD,IAAhD,eACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,+BAAgD,IAAhD,uBAIZ,cAACxD,GAAA,EAAD,CACIjZ,UAAW8jB,EACXI,WAAYA,EACZE,UAAWA,EACXnkB,eAAgB,CAAC,GAAI,UAAW,aAAc,eAAgB,QAAS,UAAW,cAAe,mBAEjGC,YAAa,CAAC,OAAQ,mBAAoB,mBAAoB,qBAAsB,gBAAiB,kBAAmB,gBAAiB,iBACzI+B,MAAK,oBAAewhB,EAAe3c,OAA9B,4BAMb,mCACI,oDCvFD6e,GAvQO,SAAC,GAAqB,IAAnBjgB,EAAkB,EAAlBA,YAEf6M,EAASzD,cAEf,EAA4CtL,mBAAS,IAArD,mBAAOigB,EAAP,KAAuBmC,EAAvB,KAGA,EAAsCpiB,mBAAS,IAA/C,mBAAO+e,EAAP,KAAoBsD,EAApB,KACA,EAAsDriB,mBAAS,IAA/D,mBAAOge,EAAP,KAA4BsE,EAA5B,KAGA,EAAgCtiB,mBAAS,IAAzC,mBAAO4f,EAAP,KAAiB2C,EAAjB,KACA,EAA0CviB,mBAAS,IAAnD,mBAAOyf,EAAP,KAAsB+C,EAAtB,KAGA,EAAgCxiB,mBAAS,IAAzC,mBAAOgf,EAAP,KAAiByD,EAAjB,KACA,EAA0CziB,mBAAS,IAAnD,mBAAO4e,EAAP,KAAsB8D,EAAtB,KAEMxC,EAAYyC,iBAAO,MACzB,EAAwB3iB,oBAAS,GAAjC,mBAAO4Y,EAAP,KAAagK,EAAb,KAKA,EAAgC5iB,oBAAS,GAAzC,mBAAOqgB,EAAP,KAAiBwC,EAAjB,KAkFMC,EAAkB,SAACC,GACrB,IAAIC,EAAmBD,EAGnBE,EAAyBjF,EAAoB7a,QAAO,SAAUkS,GAC9D,OAAQA,EAAe8I,WAGvB+E,EAA6B,GAC7BC,EAAuB,GACvBC,EAAuB,GAE3B,GAAIH,EAAuB3f,OAAS,EAAG,CAEnC,IAAI+f,EAAwBJ,EAAuBnmB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEnF6E,EAA6BH,EAAgB5f,QAAO,gBAAGxE,EAAH,EAAGA,qBAAH,OAA8B0kB,EAAsBtL,SAASpZ,MAIrH,IAAI2kB,EAAmB7D,EAActc,QAAO,SAAUkS,GAClD,OAAQA,EAAe8I,WAG3B,GAAImF,EAAiBhgB,OAAS,EAAG,CAE7B,IAAIigB,EAAkBD,EAAiBxmB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEvE8E,EAAuBJ,EAAgB5f,QAAO,gBAAGlE,EAAH,EAAGA,eAAH,OAAwBskB,EAAgBxL,SAAS9Y,MAInG,IAAIukB,EAAmB5E,EAAczb,QAAO,SAAUkS,GAClD,OAAQA,EAAe8I,WAG3B,GAAIqF,EAAiBlgB,OAAS,EAAG,CAE7B,IAAImgB,EAAkBD,EAAiB1mB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEvE+E,EAAuBL,EAAgB5f,QAAO,gBAAGtE,EAAH,EAAGA,eAAH,OAAwB4kB,EAAgB1L,SAASlZ,OAG/FokB,EAAuB3f,OAAS,GAAKggB,EAAiBhgB,OAAS,GAAKkgB,EAAiBlgB,OAAS,KAC9F0f,EAAgB,YAAO,IAAI7N,IAAJ,sBAAY+N,GAAZ,YAA2CC,GAA3C,YAAoEC,MAE3FP,GAAY,IAGhBG,EAAmBA,EAAiB3B,MAAK,SAAUnhB,EAAGshB,GAClD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAGXU,EAAkBY,GA5IW,SAACU,GAC9B,GAAIA,EAAkBpgB,OAAS,EAAG,CAC9B,IAEMqgB,EAFW,YAAO,IAAIC,IAAIF,EAAkB5mB,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,qBAA0BA,OAAQ4M,UAE/DnL,KAAI,SAAA+mB,GAAC,MAAK,CAAExb,KAAMwb,EAAEngB,eAAgB2a,WAAYwF,EAAEllB,qBAAsBwf,SAAS,MAEvHwF,EAAkBtC,MAAK,SAAUnhB,EAAGshB,GAChC,IAAIC,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAIXW,EAAesB,IAyHnBG,CAAyBd,GArHF,SAACe,GAExB,GAAIA,EAAYzgB,OAAS,EAAG,CACxB,IAMM0gB,EANK,YAAO,IAAIJ,IAAIG,EAAYjnB,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,eAAoBA,OAAQ4M,UAEzD9E,QAAO,SAAUkS,GACvC,OAAyC,MAAjCA,EAAepW,kBAGOnC,KAAI,SAAAoD,GAAC,MAAK,CAAEmI,KAAMnI,EAAEiE,SAAUka,WAAYne,EAAEjB,eAAgBsgB,qBAAsBrf,EAAEvB,qBAAsBwf,SAAS,EAAO/K,UAAU,MAEtK4Q,EAAY3C,MAAK,SAAUnhB,EAAGshB,GAC1B,GAAe,OAAXthB,EAAEmI,MAA4B,OAAXmZ,EAAEnZ,KACrB,OAAO,EAEX,IAAIoZ,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAGXa,EAAYyB,IA2FhBC,CAAmB/hB,GAvFI,SAAC6hB,GACxB,GAAIA,EAAYzgB,OAAS,EAAG,CACxB,IAEM4gB,EAFK,YAAO,IAAIN,IAAIG,EAAYjnB,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,eAAoBA,OAAQ4M,UAEzDnL,KAAI,SAAAqnB,GAAC,MAAK,CAAE9b,KAAM8b,EAAElgB,SAAUoa,WAAY8F,EAAEtlB,eAAgBygB,YAAa6E,EAAEplB,YAAawgB,qBAAsB4E,EAAExlB,qBAAsBwf,SAAS,EAAO/K,UAAU,MAE1L8Q,EAAY7C,MAAK,SAAUnhB,EAAGshB,GAC1B,IAAIC,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAIXe,EAAYyB,IAoEhBE,CAAmBliB,IAGvBV,qBAAU,WACNshB,EAAgB5gB,KAEjB,CAAC6M,EAAQ7M,EAAa8b,EAAqBY,EAAea,IAyB7D,OAAIV,EAAYzb,QAAU,EAElB,cAAC,EAAD,IAIA,qCACI,cAACwG,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QA1LnB,kBAAM+f,GAAQ,IA0L0BzkB,UAAU,iCAAzD,SAA2F,qBAD/F,OAEI,cAAC2L,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QA/BlB,WAEhB,GAAImb,EAAoB1a,OAAS,EAAG,CAChC,IAAM+gB,EAAiBrG,EAAoBlhB,KAAI,SAAA+mB,GAAC,MAAK,CAAExb,KAAMwb,EAAExb,KAAMgW,WAAYwF,EAAExF,WAAYF,SAAS,MACxGmE,EAAuB+B,GAG3B,GAAI5E,EAAcnc,OAAS,EAAG,CAC1B,IAAMuc,EAAWJ,EAAc3iB,KAAI,SAAAoD,GAAC,MAAK,CAAEmI,KAAMnI,EAAEiE,SAAUka,WAAYne,EAAEjB,eAAgBsgB,qBAAsBrf,EAAEvB,qBAAsBwf,SAAS,EAAO/K,UAAU,MACnKoP,EAAiB3C,GAGrB,GAAIjB,EAActb,OAAS,EAAG,CAC1B,IAAM2b,EAAWL,EAAc9hB,KAAI,SAAAqnB,GAAC,MAAK,CAAE9b,KAAM8b,EAAElgB,SAAUoa,WAAY8F,EAAEtlB,eAAgB0gB,qBAAsB4E,EAAExlB,qBAAsBwf,SAAS,EAAO/K,UAAU,MACnKsP,EAAiBzD,GAGrB6D,EAAgB5gB,GAChB2gB,GAAY,GAEZ3C,EAAUtV,WAW8CzM,UAAU,uBAA1D,+BACA,eAACmmB,GAAA,EAAD,CAAW1L,KAAMA,EAAM2L,OA7Lf,kBAAM3B,GAAQ,IA6LtB,UACI,cAAC0B,GAAA,EAAU3O,OAAX,CAAkB6O,aAAW,EAA7B,SACI,cAACF,GAAA,EAAU5e,MAAX,UACI,sDAGR,eAAC4e,GAAA,EAAUG,KAAX,WACI,oHACA,qBAAKtmB,UAAU,mBAAf,SACI,qBAAKA,UAAU,wBAAf,SACI,cAAC,GAAD,CACIqV,QAASuL,EACTf,oBAAqBA,EACrBpa,SAAU,SAAA/G,GACNylB,EAAuBzlB,UAKvC,qBAAKsB,UAAU,mBAAf,SACI,qBAAKA,UAAU,wBAAf,SACI,cAAC,GAAD,CACIqV,QAASoM,EACT5B,oBAAqBA,EACrByB,cAAeA,EACf7b,SAAU,SAAA/G,GACN2lB,EAAiB3lB,UAKjC,qBAAKsB,UAAU,mBAAf,SACI,qBAAKA,UAAU,wBAAf,SACI,cAAC,GAAD,CACIqV,QAASwL,EACThB,oBAAqBA,EACrBY,cAAeA,EACfhb,SAAU,SAAA/G,GACN6lB,EAAiB7lB,gBAOzC,8BACI,cAAC,GAAD,CAAcojB,eAAgBA,EAAgBC,UAAWA,EAAWnB,YAAaf,EAAqBmC,MAAOV,EAAeW,MAAOxB,EAAeyB,SAAUA,UC7NjKqE,GArCgB,WAE3B,IAAM3V,EAASzD,cAEf,EAAsCtL,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KAEMkgB,EAAgB,uCAAG,sBAAAzkB,EAAA,sDACrBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uBACJrE,MAAK,SAAAyE,GACJf,EAAee,EAAe3I,SALb,2CAAH,qDAatB,OAJA2E,qBAAU,WACNmjB,MACD,CAAC5V,IAEA7M,EAAYoB,OAAS,EAEjB,sBAAKnF,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,gFACA,sBAAMf,KAAK,cAAcgB,QAAQ,mFAErC,iEACA,cAAC,GAAD,CAAe0F,OAAQA,EAAQ7M,YAAaA,OAKhD,cAAC,EAAD,KCgBG0iB,GApDU,SAACC,EAAYC,EAAUC,GAE5C,MAAwC/kB,oBAAS,GAAjD,mBAAOglB,EAAP,KAAqBC,EAArB,KACA,EAAoCjlB,oBAAS,GAA7C,mBAAOklB,EAAP,KAAmBC,EAAnB,KACA,EAA4BnlB,mBAAS,IAArC,mBAAOolB,EAAP,KAAeC,EAAf,KACA,EAAwCrlB,oBAAS,GAAjD,mBAAOslB,EAAP,KAAqBC,EAArB,KA4CA,OA1CA/jB,qBAAU,WACN6jB,EAAU,MACX,CAACR,EAAYC,IAEhBtjB,qBAAU,WACN,MAAmB,KAAfqjB,GAAkC,KAAbC,EACd,MAEXG,GAAgB,GAChBE,GAAc,GAGd3kB,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,2BAA0C2f,GAC7CloB,KAAM,CACF2oB,SAAUX,EACVY,SAAUX,GAEdY,YAAa,IAAIllB,IAAMmlB,aAAY,SAAAC,GAAC,OAAIC,EAAcD,OACvD7kB,MAAK,SAAA+kB,GACJ,GAAsB,kBAAlBA,EAASjpB,KAGT,OAFA0oB,GAAgB,GAChBN,GAAgB,GACT,kBAAMY,KAGjBR,GAAU,SAAAU,GACN,OAAO,YAAI,IAAI5Q,IAAJ,sBAAY4Q,GAAZ,YAA2BD,EAASjpB,KAAKC,KAAI,SAAA+mB,GAAC,OAAIA,YAEjE0B,EAAgBO,EAASjpB,KAAKyG,OAAS,GACvC2hB,GAAgB,MACjBe,OAAM,SAAAljB,GACDtC,IAAMylB,SAASnjB,IAEnBqiB,GAAc,MAGX,kBAAMU,MA3Bb,IAAIA,IA6BL,CAAChB,EAAYE,IAET,CAAEC,eAAcE,aAAYE,SAAQE,iBCoDhCY,GAnGY,SAAC,GAAe,IAAbC,EAAY,EAAZA,MAS1B,OACI,gCACI,qBAAKhoB,UAAU,qDAAf,SACI,6BAAKgoB,EAAMC,iBAEchpB,IAA3B+oB,EAAME,kBAA6D,OAA3BF,EAAME,kBAC5C,sBAAKloB,UAAU,2CAAf,UACI,8BACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B0iB,EAAMxnB,qBAArC,YAA6DwnB,EAAMtnB,eAAnE,YAAqFsnB,EAAME,kBAAnG,SAAuH,6BAAKF,EAAMG,iBAEtI,sBAAKnoB,UAAU,gBAAf,UACI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC0iB,EAAMtnB,gBAAlD,UAAqEsnB,EAAMliB,SAA3E,IAAsFkiB,EAAMpnB,eADhG,QAEI,cAAC,IAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C0iB,EAAMxnB,sBAAxD,SAAiFwnB,EAAMziB,uBAInG,qBAAKvF,UAAU,6CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,UAAKF,OAAOgJ,YAAZ,4BAA2Cqf,EAAMI,kBAAjD,YAAsEJ,EAAMK,eAAiBvoB,IAAG,gBAAWkoB,EAAMnf,IAAMD,MAAM,WAE3I,sBAAK5I,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,qBAAKA,UAAU,YAAf,SACKgoB,EAAMI,uBAGf,sBAAKpoB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,sBAAKA,UAAU,YAAf,UACKgoB,EAAMM,eADX,IAC4BN,EAAMO,mBADlC,IACuDP,EAAMQ,oBAGjE,oBAAIxoB,UAAU,aCsCXyoB,GAhFO,WAElB,IAEA,EAA8C5mB,mBAAS,GAAvD,mBAAO+kB,EAAP,KAAwB8B,EAAxB,KAEA,EAKIjC,GATe,EACF,GAQ0BG,GAJvCC,EADJ,EACIA,aACAE,EAFJ,EAEIA,WACAE,EAHJ,EAGIA,OACAE,EAJJ,EAIIA,aAGEwB,EAAgBnE,mBAChBoE,EAAsBxW,uBAAY,SAAAyW,GAChChC,IAEA8B,EAAclc,SACdkc,EAAclc,QAAQqc,aAC1BH,EAAclc,QAAU,IAAIsc,sBAAqB,SAAAC,GACzCA,EAAa,GAAGC,gBAAkB9B,GAClCuB,GAAmB,SAAAQ,GAAmB,OAAIA,EAAsB,QAIpEL,GACAF,EAAclc,QAAQ0c,QAAQN,MACnC,CAAChC,EAAcM,IAElB,OACI,sBAAKnnB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,mFACA,sBAAMf,KAAK,cAAcgB,QAAQ,6FAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,+EAA+EC,IAAI,sBAC3H,gCACI,0DACA,qBAAKE,UAAU,UAAf,uPAGA,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,2DAA7D,4CAE9B,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,2DAA9D,mDAItC,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,UAAf,SACI,iDAEHinB,EAAOtoB,KAAI,SAACqpB,EAAOnpB,GAChB,OAAIooB,EAAO9hB,SAAWtG,EAAQ,EAEtB,qBAAKuqB,IAAKR,EAAV,SACI,cAAC,GAAD,CAAoBZ,MAAOA,KADKA,EAAMnf,IAM1C,8BACI,cAAC,GAAD,CAAoBmf,MAAOA,KADrBA,EAAMnf,OAM5B,8BACKge,GACG,cAAC,EAAD,MAGR,8BAAME,GAAc,iBC3BrBsC,GAnDW,SAACC,EAAa3C,EAAU4C,GAE9C,MAA0C1nB,oBAAS,GAAnD,mBAAO2nB,EAAP,KAAsBC,EAAtB,KACA,EAAsC5nB,oBAAS,GAA/C,mBAAO6nB,EAAP,KAAoBC,EAApB,KACA,EAA8B9nB,mBAAS,IAAvC,mBAAO+nB,EAAP,KAAgBC,EAAhB,KACA,EAA0ChoB,oBAAS,GAAnD,mBAAOioB,EAAP,KAAsBC,EAAtB,KA2CA,OAzCA1mB,qBAAU,WACNwmB,EAAW,MACZ,CAACP,EAAa3C,IAEjBtjB,qBAAU,WACN,MAAoB,KAAhBimB,GAAmC,KAAb3C,EACf,MAEX8C,GAAiB,GACjBE,GAAe,GAGftnB,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,4BAA2CsiB,GAC9C7qB,KAAM,CACF2oB,SAAUiC,EACVhC,SAAUX,GAEdY,YAAa,IAAIllB,IAAMmlB,aAAY,SAAAC,GAAC,OAAIuC,EAAevC,OACxD7kB,MAAK,SAAAqnB,GACJ,GAAuB,kBAAnBA,EAAUvrB,KAGV,OAFAqrB,GAAiB,GACjBN,GAAiB,GACV,kBAAMO,KAEjBH,GAAW,SAAAK,GACP,OAAO,YAAI,IAAIlT,IAAJ,sBAAYkT,GAAZ,YAA4BD,EAAUvrB,KAAKC,KAAI,SAAA+mB,GAAC,OAAIA,YAEnEqE,EAAiBE,EAAUvrB,KAAKyG,OAAS,GACzCskB,GAAiB,MAClB5B,OAAM,SAAAljB,GACDtC,IAAMylB,SAASnjB,IAEnBglB,GAAe,MAGZ,kBAAMK,MA1Bb,IAAIA,IA4BL,CAACV,EAAaC,IAEV,CAAEC,gBAAeE,cAAaE,UAASE,kBCsBnCK,GArEa,SAAC,GAAgB,IAAdC,EAAa,EAAbA,OAC3B,OACI,sBAAKpqB,UAAU,SAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,6BAAKoqB,EAAOC,aAEhB,sBAAKrqB,UAAU,2CAAf,UACI,8BACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B8kB,EAAO5pB,qBAAtC,YAA8D4pB,EAAO1pB,eAArE,YAAuF0pB,EAAOlC,kBAAtG,SAA0H,6BAAKkC,EAAOjC,iBAE1I,sBAAKnoB,UAAU,gBAAf,UACI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC8kB,EAAO1pB,gBAAnD,UAAsE0pB,EAAOtkB,SAA7E,IAAwFskB,EAAOxpB,eADnG,QAEI,cAAC,IAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C8kB,EAAO5pB,sBAAzD,SAAkF4pB,EAAO7kB,uBAG1E,KAAtB6kB,EAAOE,YACJ,qBAAKtqB,UAAU,2CAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYwtB,EAAOE,iBAGnE,sBAAKtqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,qDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOG,iBAGhB,sBAAKvqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,uDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOI,kBAGhB,sBAAKxqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kEAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOK,uBAGhB,sBAAKzqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOM,gBAGhB,sBAAK1qB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,+CAEJ,sBAAKA,UAAU,YAAf,UACKoqB,EAAOO,eADZ,IAC6BP,EAAOQ,mBADpC,IACyDR,EAAOS,oBAGpE,oBAAI7qB,UAAU,aCsBX8qB,GA/EQ,WACnB,IAEA,EAAgDjpB,mBAAS,GAAzD,mBAAO0nB,EAAP,KAAyBwB,EAAzB,KAEA,EAKI1B,GATgB,EACH,GAQ4BE,GAJzCC,EADJ,EACIA,cACAE,EAFJ,EAEIA,YACAE,EAHJ,EAGIA,QACAE,EAJJ,EAIIA,cAGEkB,EAAiBxG,mBACjByG,EAAuB7Y,uBAAY,SAAA8Y,GACjC1B,IAEAwB,EAAeve,SACfue,EAAeve,QAAQqc,aAC3BkC,EAAeve,QAAU,IAAIsc,sBAAqB,SAAAoC,GAC1CA,EAAc,GAAGlC,gBAAkBa,GACnCiB,GAAoB,SAAAK,GAAoB,OAAIA,EAAuB,QAIvEF,GACAF,EAAeve,QAAQ0c,QAAQ+B,MACpC,CAAC1B,EAAeM,IAEnB,OACI,sBAAK9pB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kFACA,sBAAMf,KAAK,cAAcgB,QAAQ,4FAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,gFAAgFC,IAAI,aAC5H,gCACI,2DACA,qBAAKE,UAAU,UAAf,qTAGA,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,2DAA9D,6CAE9B,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,2DAA7D,kDAItC,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,UAAf,SACI,kDAEH4pB,EAAQjrB,KAAI,SAACyrB,EAAQvrB,GAClB,OAAI+qB,EAAQzkB,SAAWtG,EAAQ,EAEvB,qBAAKuqB,IAAK6B,EAAV,SACI,cAAC,GAAD,CAAqBb,OAAQA,KADIA,EAAOvhB,IAM5C,8BACI,cAAC,GAAD,CAAqBuhB,OAAQA,KADvBA,EAAOvhB,OAM7B,8BACK2gB,GACG,cAAC,EAAD,MAGR,8BAAME,GAAe,iBChDtB2B,GA5BD,WACV,MAAgCxpB,mBAAS,IAAzC,mBAAO+c,EAAP,KAAiBC,EAAjB,KAEMyM,EAAU,uCAAG,sBAAAvpB,EAAA,sDACfM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gBACJrE,MAAK,SAAAqc,GACJJ,EAAYI,EAAQvgB,SALT,2CAAH,qDAahB,OAJA2E,qBAAU,WACNioB,MACD,IAIC,qBAAKtrB,UAAU,0BAAf,SACI,oBAAIA,UAAU,qBAAd,SACK4e,EAASjgB,KAAI,SAAA+gB,GAAI,OACd,6BAAkB,eAAC,IAAD,CAAMhgB,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoCoa,EAAKpgB,YAAjD,UAAgEogB,EAAK3f,KAArE,KAA6E2f,EAAKD,aAAlF,QAATC,EAAK7W,YCMnB0iB,GA3BK,WAChB,MAA4C1pB,mBAAS,IAArD,mBAAO6c,EAAP,KAAuBC,EAAvB,KAEM6M,EAAgB,uCAAG,sBAAAzpB,EAAA,sDACrBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,sBACJrE,MAAK,SAAAoc,GACJL,EAAkBK,EAActgB,SALf,2CAAH,qDAatB,OAJA2E,qBAAU,WACNmoB,MACD,IAGC,qBAAKxrB,UAAU,0BAAf,SACI,oBAAIA,UAAU,qBAAd,SACK0e,EAAe/f,KAAI,SAAA6gB,GAAU,OAC1B,6BAAwB,eAAC,IAAD,CAAM9f,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0Cka,EAAWlgB,YAA7D,UAA4EkgB,EAAWzf,KAAvF,KAA+Fyf,EAAWC,aAA1G,QAAfD,EAAW3W,YCSzB4iB,GA7BD,WAGV,MAAgC5pB,mBAAS,IAAzC,mBAAOid,EAAP,KAAiBC,EAAjB,KAEM2M,EAAS,uCAAG,sBAAA3pB,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gBACJrE,MAAK,SAAAsc,GACJH,EAAYG,EAAQxgB,SALV,2CAAH,qDAaf,OAJA2E,qBAAU,WACNqoB,MACD,IAGC,qBAAK1rB,UAAU,0BAAf,SACI,oBAAIA,UAAU,qBAAd,SACK8e,EAASngB,KAAI,SAAAghB,GAAI,OACd,6BAAkB,eAAC,IAAD,CAAMjgB,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoCqa,EAAKrgB,YAAjD,UAAgEqgB,EAAK5f,KAArE,IAA4E4f,EAAK/e,YAAjF,KAAgG+e,EAAKF,aAArG,QAATE,EAAK9W,YC+CnB8iB,GApEE,WACb,OACI,sBAAK3rB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,mFACA,sBAAMf,KAAK,cAAcgB,QAAQ,oFAErC,0EACA,qBAAKlL,UAAU,UAAf,sWAGA,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,kEAAf,SACI,sBAAKA,UAAU,iBAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,+CAEJ,sBAAKA,UAAU,sBAAf,UACI,8BACI,qBACIH,IAAI,mEAAmEC,IAAI,iBAEnF,qBAAKE,UAAU,yBAAf,SACI,oEAEJ,cAAC,GAAD,YAIZ,qBAAKA,UAAU,mEAAf,SACI,sBAAKA,UAAU,iBAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,yCAEJ,sBAAKA,UAAU,sBAAf,UACI,8BACI,qBACIH,IAAI,mEAAmEC,IAAI,WAEnF,qBAAKE,UAAU,yBAAf,SACI,8DAEJ,cAAC,GAAD,YAIZ,qBAAKA,UAAU,iEAAf,SACI,sBAAKA,UAAU,iBAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,mDAEJ,sBAAKA,UAAU,sBAAf,UACI,8BACI,qBACIH,IAAI,mEAAmEC,IAAI,WAEnF,qBAAKE,UAAU,yBAAf,SACI,wEAEJ,cAAC,GAAD,mBCnCb4rB,GArBU,WAErB,IAAMhb,EAASzD,cAEf,OACI,cAAC,WAAD,UACI,mCAEQ,CACIlO,UAAW,cAAC,GAAD,IACX,SAAY,cAAC,GAAD,IACZ,QAAW,cAAC,GAAD,IACX,OAAU,cAAC,GAAD,IACV,SAAY,cAAC,GAAD,KACd2R,EAAOpL,WCYdqmB,GA/BQ,SAAC,GAA6C,IAA3C9nB,EAA0C,EAA1CA,YAAayb,EAA6B,EAA7BA,WAAYE,EAAiB,EAAjBA,KAAMC,EAAW,EAAXA,KAErD,EAA8B9d,mBAAS,IAAvC,mBAAOiqB,EAAP,KAAgBC,EAAhB,KAgBA,OAJA1oB,qBAAU,WAVS,IAAC2oB,EAAgBC,EAAUC,EAAVD,EAWTvM,EAXmBwM,EAWbvM,OAVN1gB,KADP+sB,EAWLxM,GATPuM,EAAW,kEAAoEC,EAAeG,eAC1EltB,IAAbgtB,EACPF,EAAW,4DAA8DE,EAASE,eAC9DltB,IAAbitB,GACPH,EAAW,4DAA8DG,EAASC,YAMvF,CAACpoB,EAAayb,EAAYE,EAAMC,IAG/B,mCACiB,KAAZmM,GACG,qBAAK9rB,UAAU,OAAf,SACI,qBAAKA,UAAU,yCAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAKisB,EAASljB,MAAM,OAAO9I,IAAI,wBCkD/CssB,GAxEa,SAAC,GAAyC,IAAvCC,EAAsC,EAAtCA,UAAWC,EAA2B,EAA3BA,QAASvoB,EAAkB,EAAlBA,YAE/C,EAAgClC,mBAAS,IAAzC,mBAAO0qB,EAAP,KAAiBC,EAAjB,KA6BA,OACI,cAAC,IAAD,CACIza,iBAAiB,0CADrB,SAEI,eAAC,IAAD,CACIoD,kBATM,CACd5E,OAAQ,QACRD,MAAO,QAQC8E,KAAMkX,EACN9b,OAAQ6b,EAHZ,UAMQtoB,EAAYpF,KAAI,SAAAzB,GACZ,OACI,cAAC,IAAD,CAA8BqX,SAAU,CAAE9D,IAAKgc,WAAWvvB,EAAK8S,mBAAoBU,IAAK+b,WAAWvvB,EAAKgT,qBAAuBxL,QAAS,kBAtC/I,SAACxH,GACd,IAAMwvB,EAAe,CACjBxiB,KAAMhN,EAAK6C,KACX2D,SAAU,CACN+M,IAAKgc,WAAWvvB,EAAK8S,mBACrBU,IAAK+b,WAAWvvB,EAAKgT,qBAEzByc,iBAAkBzvB,EAAKumB,iBACvBmJ,iBAAkB1vB,EAAKwmB,iBACvBmJ,mBAAoB3vB,EAAKymB,mBACzBmJ,cAAe5vB,EAAK0mB,cACpBmJ,gBAAiB7vB,EAAK2mB,gBACtBmJ,cAAe9vB,EAAK4mB,cACpBmJ,cAAe/vB,EAAK6mB,cACpB7D,WAAYhjB,EAAKoC,WACjB8hB,qBAAsBlkB,EAAKsD,qBAC3B0sB,eAAgBhwB,EAAKwD,gBAGzB8rB,EAAYE,GAmBsJ9R,CAAS1d,KAA1IA,EAAKoC,eAK1BitB,EAAS7oB,UAEL,cAAC,IAAD,CACI6Q,SAAUgY,EAAS7oB,SACnBypB,WAAW,EACXC,aAAc,kBAAMZ,EAAY,KAHpC,SAKI,qCACI,cAAC,IAAD,CAAM9sB,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+BinB,EAASnL,qBAAxC,YAAgEmL,EAASW,eAAzE,YAA2FX,EAASrM,YAA5G,SAA0H,6BAAKqM,EAASriB,SACxI,oBAAGlK,UAAU,gBAAb,UAA6B,0CAA7B,IAAoDusB,EAASI,iBAA7D,OACA,oBAAG3sB,UAAU,gBAAb,UAA6B,6CAA7B,IAAuDusB,EAASK,iBAAhE,OACA,oBAAG5sB,UAAU,gBAAb,UAA6B,+CAA7B,IAAyDusB,EAASM,mBAAlE,OACA,oBAAG7sB,UAAU,gBAAb,UAA6B,sDAA7B,IAAgEusB,EAASO,iBACzE,oBAAG9sB,UAAU,gBAAb,UAA6B,wDAA7B,IAAkEusB,EAASQ,mBAC3E,oBAAG/sB,UAAU,gBAAb,UAA6B,qDAA7B,IAA+DusB,EAASS,cAAxE,OACA,oBAAGhtB,UAAU,gBAAb,UAA6B,mDAA7B,IAA6DusB,EAASU,cAAtE,qBC6WjBI,GApaK,WAEhB,IAAMzc,EAASzD,cACTzJ,EAAWC,cAEjB,EAA4C9B,mBAAS,IAArD,mBAAOigB,EAAP,KAAuBmC,EAAvB,KACA,EAAoCpiB,wBAAS5C,GAA7C,mBAAOugB,EAAP,KAAmB8N,EAAnB,KACA,EAAwBzrB,wBAAS5C,GAAjC,mBAAOygB,EAAP,KAAa6N,EAAb,KACA,EAAwB1rB,wBAAS5C,GAAjC,mBAAO0gB,EAAP,KAAa6N,EAAb,KAGA,EAAsC3rB,mBAAS,gCAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAoCzgB,mBAAS,QAA7C,mBAAO0gB,EAAP,KAAmBC,EAAnB,KACA,EAAkC3gB,mBAAS,IAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KAEA,EAAwB7gB,oBAAS,GAAjC,mBAAOsb,EAAP,KAAasQ,EAAb,KAEIC,EAAc,GAEZC,EAAe,uCAAG,WAAOvM,GAAP,SAAArf,EAAA,sDACpBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uBAAsCma,KAC1Cxe,MAAK,SAAAoc,GACJsO,EAActO,EAActgB,SALZ,2CAAH,sDASfkvB,EAAS,uCAAG,WAAOC,GAAP,SAAA9rB,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iBAAgC4mB,KACpCjrB,MAAK,SAAAqc,GACJsO,EAAQtO,EAAQvgB,SALN,2CAAH,sDASTgtB,EAAS,uCAAG,WAAOwB,GAAP,SAAAnrB,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iBAAgCimB,KACpCtqB,MAAK,SAAAsc,GACJsO,EAAQtO,EAAQxgB,SALN,2CAAH,sDASXgF,EAASkE,SAASgS,SAAS,cAC3B8T,EAAc,aAEThqB,EAASkE,SAASgS,SAAS,QAChC8T,EAAc,OAEThqB,EAASkE,SAASgS,SAAS,UAChC8T,EAAc,QAGlB,IAAMlH,EAAgB,uCAAG,WAAOkH,EAAanb,GAApB,SAAAxQ,EAAA,sDACrBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,yBAAwCymB,EAAxC,YAAuDnb,KAC3D3P,MAAK,SAAAyE,GACJ4c,EAAkB5c,EAAe3I,SALhB,2CAAH,wDAStB2E,qBAAU,WACFK,EAASkE,SAASgS,SAAS,cAC3B+T,EAAgB/c,EAAO5R,KAElB0E,EAASkE,SAASgS,SAAS,QAChCgU,EAAUhd,EAAO5R,KAEZ0E,EAASkE,SAASgS,SAAS,SAChC8R,EAAU9a,EAAO5R,KAGrBwnB,EAAiBkH,EAAa9c,EAAO5R,OAEtC,CAAC0uB,EAAahqB,EAASkE,SAAUgJ,EAAO5R,MAwO3C,GAAI8iB,EAAe3c,OAAS,SAAqBlG,IAAfugB,QAAqCvgB,IAATygB,QAA+BzgB,IAAT0gB,GAAqB,CACrG,IAAI0M,EAAY,CACZ5b,IAAK,QAASC,IAAK,UAGnBod,EAAe,GAEfC,EAAa,GACbC,GAAY,GA+BhB,MA9BoB,eAAhBN,QAA+CzuB,IAAfugB,IAChCuO,EAAavO,EAAWzf,KAAO,cAC/BiuB,GAAY,gBAAkBxO,EAAWzf,KAAO,oDAChDssB,EAAY,CACR5b,IAAKgc,WAAWjN,EAAWxP,mBAAoBU,IAAK+b,WAAWjN,EAAWtP,qBAE9E4d,EAAeG,SAASzO,EAAW0O,wBAGnB,SAAhBR,QAAmCzuB,IAATygB,IAC1BqO,EAAa,QAAUrO,EAAK3f,KAC5BiuB,GAAY,oBAAsBtO,EAAK3f,KAAO,oDAE9CssB,EAAY,CACR5b,IAAKgc,WAAW/M,EAAK1P,mBAAoBU,IAAK+b,WAAW/M,EAAKxP,qBAElE4d,EAAeG,SAASvO,EAAKwO,wBAGb,SAAhBR,QAAmCzuB,IAAT0gB,IAE1BoO,EAAapO,EAAK5f,KAAO,IAAM4f,EAAK/e,YAAc,KAAO+e,EAAKpa,eAAiB,IAC/EyoB,GAAY,gBAAkBrO,EAAK5f,KAAO,IAAM4f,EAAK/e,YAAc,KAAO+e,EAAKpa,eAAiB,qDAEhG8mB,EAAY,CACR5b,IAAKgc,WAAW9M,EAAK3P,mBAAoBU,IAAK+b,WAAW9M,EAAKzP,qBAElE4d,EAAeG,SAAStO,EAAKuO,wBAI7B,sBAAKluB,UAAU,YAAf,UACI,cAACiL,EAAA,EAAD,UACI,gCAAQ+iB,OAEZ,+CAAkBD,KAClB,gCACI,sBAAK/tB,UAAU,YAAf,6BACqB8hB,EAAe3c,OADpC,iBAC0D4oB,EAD1D,OAGA,sBAAK/tB,UAAU,YAAf,2EACkE,cAAC,IAAD,CAAMN,GAAG,mCAAT,kBADlE,UAIJ,sBAAKM,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SACI,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAazH,SA7RjD,SAACyE,EAAQC,GAExB,IAAI8D,EAAe,GACfb,EAAa,GACbE,EAAY,GAED,MAAXpD,GAA6B,MAAXA,GAClB+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAEXd,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBF,EAAa,IAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE0hB,iBAAmBJ,EAAEI,iBAAyB,EAChD1hB,EAAE0hB,iBAAmBJ,EAAEI,kBAA0B,EAEjD1hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE0hB,iBAAmBJ,EAAEI,iBAAyB,EAChD1hB,EAAE0hB,iBAAmBJ,EAAEI,kBAA0B,EAEjD1hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,WAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE2hB,iBAAmBL,EAAEK,iBAAyB,EAChD3hB,EAAE2hB,iBAAmBL,EAAEK,kBAA0B,EAEjD3hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE2hB,iBAAmBL,EAAEK,iBAAyB,EAChD3hB,EAAE2hB,iBAAmBL,EAAEK,kBAA0B,EAEjD3hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,cAEK,MAAXlD,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE4hB,mBAAqBN,EAAEM,mBAA2B,EACpD5hB,EAAE4hB,mBAAqBN,EAAEM,oBAA4B,EAErD5hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE4hB,mBAAqBN,EAAEM,mBAA2B,EACpD5hB,EAAE4hB,mBAAqBN,EAAEM,oBAA4B,EAErD5hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,gBAEK,MAAXlD,GAA6B,OAAXA,GACV,MAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE6hB,cAAgBP,EAAEO,cAAsB,EAC1C7hB,EAAE6hB,cAAgBP,EAAEO,eAAuB,EAE3C7hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE6hB,cAAgBP,EAAEO,cAAsB,EAC1C7hB,EAAE6hB,cAAgBP,EAAEO,eAAuB,EAE3C7hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,SAEK,OAAXlD,GAA8B,OAAXA,GACX,OAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE8hB,gBAAkBR,EAAEQ,gBAAwB,EAC9C9hB,EAAE8hB,gBAAkBR,EAAEQ,iBAAyB,EAE/C9hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE8hB,gBAAkBR,EAAEQ,gBAAwB,EAC9C9hB,EAAE8hB,gBAAkBR,EAAEQ,iBAAyB,EAE/C9hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,WAEK,OAAXlD,GAA8B,OAAXA,GACX,OAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE+hB,cAAgBT,EAAES,cAAsB,EAC1C/hB,EAAE+hB,cAAgBT,EAAES,eAAuB,EAE3C/hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAE+hB,cAAgBT,EAAES,cAAsB,EAC1C/hB,EAAE+hB,cAAgBT,EAAES,eAAuB,EAE3C/hB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,eAEK,OAAXlD,GAA8B,OAAXA,IACX,OAAXA,GACA+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAEgiB,cAAgBV,EAAEU,cAAsB,EAC1ChiB,EAAEgiB,cAAgBV,EAAEU,eAAuB,EAE3ChiB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAetB,EAAeoB,MAAK,SAAUnhB,EAAGshB,GAC5C,OAAIthB,EAAEgiB,cAAgBV,EAAEU,cAAsB,EAC1ChiB,EAAEgiB,cAAgBV,EAAEU,eAAuB,EAE3ChiB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBF,EAAa,mBAGjB0B,EAAkBb,GAClBd,EAAe,YAAchD,EAAIrX,OAAOpD,WACxC2d,EAAcD,GACdG,EAAaD,IA0DyEzV,GAAG,0BAA0BhN,UAAU,uBAA7G,UACI,cAACuf,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,uCAAuD,IAAvD,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCAAsD,IAAtD,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,uCAAuD,IAAvD,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCAAsD,IAAtD,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,2BAA2C,IAA3C,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,4BAA4C,IAA5C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,wBAAwC,IAAxC,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,yBAA0C,IAA1C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,0BAA2C,IAA3C,YACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,2BAA4C,IAA5C,WACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,6BAA8C,IAA9C,eACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,8BAA+C,IAA/C,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,+BAAgD,IAAhD,eACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,+BAAgD,IAAhD,oBAGR,cAACxD,GAAA,EAAD,CACIjZ,UAAWyjB,EACXS,WAAYA,EACZE,UAAWA,EACXnkB,eAAgB,CAAC,GAAI,UAAW,aAAc,eAAgB,QAAS,UAAW,cAAe,mBACjGC,YAAa,CAAC,OAAQ,mBAAoB,mBAAoB,qBAAsB,gBAAiB,kBAAmB,gBAAiB,iBACzI+B,MAAM,QAGd,sBAAKN,UAAU,OAAf,UACI,cAAC2L,EAAA,EAAD,CACIjH,QAAS,kBAAM+oB,GAAStQ,IACxBgR,gBAAehR,EAAMnd,UAAU,aAFnC,SAEgD,oBAAIA,UAAU,OAAd,SAAsBmd,EAAO,sBAAwB,0BACrG,cAACrQ,EAAA,EAAD,CAAUC,GAAIoQ,EAAd,SACI,8BACMA,GACE,cAAC,GAAD,CAAqBkP,UAAWA,EAAWC,QAASwB,EAAc/pB,YAAa+d,WAK/F,cAAC,GAAD,CAAgB/d,YAAa+d,EAAgBtC,WAAYA,EAAYE,KAAMA,EAAMC,KAAMA,SACvE1gB,IAAfugB,GACG,qBAAKxf,UAAU,OAAf,SACI,cAAC,GAAD,SAMhB,OACI,cAAC,EAAD,KChSGouB,I,OArIW,SAAC,GAA+E,IAA7Exd,EAA4E,EAA5EA,OAAQC,EAAoE,EAApEA,OAAQwd,EAA4D,EAA5DA,mBAAoBC,EAAwC,EAAxCA,qBAAsBC,EAAkB,EAAlBA,YAErF,EAAsC1sB,mBAAS,UAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KAEMkM,EAAc7uB,OAAO2F,gBAAkB,IAAMsL,EAAO4O,WAAa,IAAM5O,EAAO+O,KAAO,IAAM/O,EAAOC,OAExG,EAAsChP,mBAAS,IAA/C,mBAAO4sB,EAAP,KAAoBC,EAApB,KA6CA,OA3CArrB,qBAAU,WAGR,IAAIsrB,EACJ,OAHAD,EAAe9d,EAAOpL,MAGdoL,EAAOpL,MACb,IAAK,eACHmpB,EAAkB,eAClB,MACF,IAAK,YACHA,EAAkB,YAClB,MACF,IAAK,WACHA,EAAkB,WAClB,MACF,IAAK,YACHA,EAAkB,YAClB,MACF,IAAK,UACHA,EAAkB,UAClB,MACF,IAAK,UACHA,EAAkB,UAClB,MACF,IAAK,UACHA,EAAkB,UAClB,MACF,IAAK,SACHA,EAAkB,SAClB,MACF,IAAK,eACHA,EAAkB,eAClB,MACF,IAAK,UACHA,EAAkB,WAClB,MACF,QACEA,EAAkB,SAGtBrM,EAAeqM,KAEd,CAAC/d,IAGF,gCACE,qBAAK5Q,UAAU,sCAAf,SACE,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAS,eAAqBf,IAAhBwvB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,GAAb,sBAE8B,KAA9B3d,EAAO+d,yBAA2D3vB,IAA9B4R,EAAO+d,oBAAkE,OAA9B/d,EAAO+d,oBACtF,oBAAI5uB,UAAS,UAAqB,cAAhByuB,EAA8B,UAAY,IAA5D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,cAAR,yBAGJ,oBAAIxuB,UAAS,UAAqB,aAAhByuB,EAA6B,UAAY,IAA3D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,aAAR,6BAEuBvvB,IAAvBovB,GAA2D,OAAvBA,GAA+BA,EAAmBQ,SAAW,GACjG,oBAAI7uB,UAAS,UAAqB,iBAAhByuB,EAAiC,UAAY,IAA/D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,iBAAR,iCAGuBvvB,IAAzBqvB,GAA+D,OAAzBA,GAAiChkB,OAAOC,KAAK+jB,GAAsBnpB,OAAS,GAClH,oBAAInF,UAAS,UAAqB,cAAhByuB,EAA8B,UAAY,IAA5D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,cAAR,yBAGJ,oBAAIxuB,UAAS,UAAqB,YAAhByuB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,YAAR,uBAKD3d,EAAOie,gBAAkB,GACxB,oBAAI9uB,UAAS,UAAqB,YAAhByuB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,YAAR,uBAGH3d,EAAOke,eAAiB,GACvB,oBAAI/uB,UAAS,UAAqB,WAAhByuB,EAA2B,UAAY,IAAzD,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,WAAR,sBAMHD,GACC,oBAAIvuB,UAAS,UAAqB,YAAhByuB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,YAAR,6BAKR,qBAAKxuB,UAAU,uBAAf,SACE,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAarV,GAAG,0BAA0BhN,UAAU,yCAAvF,UACE,cAACuf,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,GAAhC,oBACgC,KAA9B3d,EAAO+d,yBAA2D3vB,IAA9B4R,EAAO+d,oBAAkE,OAA9B/d,EAAO+d,oBACtF,cAACrP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,cAA3B,uBAEF,cAACjP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,aAA3B,2BACyBvvB,IAAvBovB,GAA2D,OAAvBA,GAA+BA,EAAmBQ,SAAW,GACjG,cAACtP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,iBAA3B,+BAEyBvvB,IAAzBqvB,GAA+D,OAAzBA,GAAiChkB,OAAOC,KAAK+jB,GAAsBnpB,OAAS,GAClH,cAACoa,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,cAA3B,uBAEF,cAACjP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,YAA3B,qBAEC3d,EAAOie,gBAAkB,GACxB,cAACvP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,YAA3B,qBAED3d,EAAOke,eAAiB,GACvB,cAACxP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,WAA3B,oBAGDD,GACC,cAAChP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,YAA3B,gCCpHGQ,GAZK,SAAC,GAAgB,IAAdne,EAAa,EAAbA,OAIrB,OACE,sBAAK7Q,UAAU,UAAf,UACE,+BAAI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoCuL,EAAOnQ,gBAAnD,UAAsEmQ,EAAO/K,SAA7E,IAAwF+K,EAAOjQ,eAAnG,KAAwH,cAAC,IAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0CuL,EAAOrQ,sBAAzD,SAAkFqQ,EAAOtL,oBACjN,sBAAKvF,UAAU,0BAAf,UAA0C6Q,EAAOoe,uBAAwBpe,EAAO9K,wBC4BvEmpB,GAnCG,SAAC,GAAgB,IAAdre,EAAa,EAAbA,OAEfse,EAAiB,GACS,KAA1Bte,EAAOue,qBAAmDnwB,IAA1B4R,EAAOue,iBACzCD,EAAiBpyB,OAAO8T,EAAOue,gBAAgBC,QAAQ,KAAM,MAG/D,IAAIC,EAAiB,GAKrB,MAJ8B,KAA1Bze,EAAO0e,qBAAmDtwB,IAA1B4R,EAAO0e,iBACzCD,EAAiBvyB,OAAO8T,EAAO0e,gBAAgBF,QAAQ,KAAM,MAI7D,sBAAKrvB,UAAU,YAAf,UACsB,KAAnBmvB,GACC,sBAAKnvB,UAAU,2BAAf,UACE,qBAAKA,UAAU,2CAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,oCAA+BsvB,GAAkBvmB,MAAM,OAAO9I,IAAG,UAAK+Q,EAAO9Q,KAAZ,qBAAqCC,UAAU,WAE5H,sBAAKA,UAAU,iBAAf,gGACsF6Q,EAAO9Q,KAD7F,UAKgB,KAAnBuvB,GACC,qBAAKtvB,UAAU,2BAAf,SACE,qBAAKA,UAAU,2CAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8ByvB,GAAkB1mB,MAAM,OAAO9I,IAAG,UAAK+Q,EAAO9Q,KAAZ,qBAAqCC,UAAU,iBC4CtHwvB,GAvEK,SAAC,GAAgB,IAAd3e,EAAa,EAAbA,OAErB,OACE,sBAAK7Q,UAAU,SAAf,UACE,qBAAKA,UAAU,uDAAf,SACE,gDAEF,sBAAKA,UAAU,cAAf,UACE,sBAAKA,UAAU,sBAAf,UACE,sBAAKA,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,kBAAkBnN,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,oBAE3I,sBAAKE,UAAU,iBAAf,UACE,+BAAK6Q,EAAO4S,iBAAZ,OACA,qDAGJ,sBAAKzjB,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,cAAcnN,IAAI,0FAA0F+I,MAAM,OAAO9I,IAAI,0BAEzI,sBAAKE,UAAU,iBAAf,UACE,+BAAK6Q,EAAO8S,mBAAZ,OACA,gDAGJ,sBAAK3jB,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,kBAAkBnN,IAAI,sFAAsF+I,MAAM,OAAO9I,IAAI,oBAEzI,sBAAKE,UAAU,iBAAf,UACE,+BAAK6Q,EAAO6S,iBAAZ,OACA,yDAIN,sBAAK1jB,UAAU,sBAAf,UACE,sBAAKA,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,qBAAqBnN,IAAI,mGAAmG+I,MAAM,OAAO9I,IAAI,wBAEzJ,sBAAKE,UAAU,iBAAf,UACE,6BAAK6Q,EAAOgT,kBACZ,yDAGJ,sBAAK7jB,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,mBAAmBnN,IAAI,gGAAgG+I,MAAM,OAAO9I,IAAI,qBAEpJ,sBAAKE,UAAU,iBAAf,UACE,+BAAK6Q,EAAOiT,cAAZ,OACA,sDAGJ,sBAAK9jB,UAAU,WAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAOsE,GAAG,mBAAmBnN,IAAI,iGAAiG+I,MAAM,OAAO9I,IAAI,qBAErJ,sBAAKE,UAAU,iBAAf,UACE,+BAAK6Q,EAAOkT,cAAZ,UACA,iECyIC0L,GArMM,SAAC,GAAmC,IAAjC5e,EAAgC,EAAhCA,OAAQ6e,EAAwB,EAAxBA,kBAE5B,EAA4C7tB,mBAAS6tB,GAArD,mBAAOC,EAAP,KAAuBC,EAAvB,KAkBA,OAhBAvsB,qBAAU,WAEN,IAAIwsB,EAAqB,GAErBH,EAAkBvqB,OAAS,IAC3B0qB,EAAqBH,EAAkB1qB,QAAO,SAAUkS,GACpD,OAAQA,EAAe4Y,gBAI/BF,EAAkBC,KACnB,CAAChf,EAAOvR,WAAYowB,IAEvBvsB,QAAQC,IAAI,KAAOyN,EAAOkf,eAC1B5sB,QAAQC,IAAI,KAAOyN,EAAOmf,qBAGtB,sBAAKhwB,UAAU,SAAf,UACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,sBAAKA,UAAU,uEAAf,UACI,+BAAK6Q,EAAOof,iBAAZ,OACA,+CAGR,qBAAKjwB,UAAU,wDAAf,SACI,sBAAKA,UAAU,qEAAf,UACI,+BAAK6Q,EAAOqf,oBAAZ,OACA,mDAGR,qBAAKlwB,UAAU,sDAAf,SACI,sBAAKA,UAAU,2EAAf,UACI,+BAAK6Q,EAAOsf,gBAAZ,OACA,kDAIZ,sBAAKnwB,UAAU,wCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,sBAAKA,UAAS,8BAAyB6Q,EAAO+S,cAAgB,EAAI,GAAK,aAAvE,UACI,oBAAI5jB,UAAU,OAAd,SAAsB6Q,EAAO+S,gBAC7B,gDAA4C,IAAzB/S,EAAO+S,cAAsB,GAAK,YAG7D,sBAAK5jB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAOuf,SAAW,EACb,cAAC1nB,EAAA,EAAD,CAAO7I,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,aACpH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,2FAA2F+I,MAAM,OAAO9I,IAAI,iBAGjI,sBAAKE,UAAS,yBAAoB6Q,EAAOuf,SAAW,EAAI,GAAK,aAA7D,UACI,6BAAKvf,EAAOuf,WACZ,yCAAgC,IAApBvf,EAAOuf,SAAiB,GAAK,aAGjD,sBAAKpwB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAOwf,SAAW,EACb,cAAC3nB,EAAA,EAAD,CAAO7I,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,aACpH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,2FAA2F+I,MAAM,OAAO9I,IAAI,iBAGjI,sBAAKE,UAAS,yBAAoB6Q,EAAOwf,SAAW,EAAI,GAAK,aAA7D,UACI,6BAAKxf,EAAOwf,WACZ,yCAAgC,IAApBxf,EAAOwf,SAAiB,GAAK,aAGjD,sBAAKrwB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAOyf,UAAY,EACd,cAAC5nB,EAAA,EAAD,CAAO7I,IAAI,qFAAqF+I,MAAM,OAAO9I,IAAI,eACjH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,mBAG9H,sBAAKE,UAAS,yBAAoB6Q,EAAOyf,UAAY,EAAI,GAAK,aAA9D,UACI,6BAAKzf,EAAOyf,YACZ,2CAAmC,IAArBzf,EAAOyf,UAAkB,GAAK,gBAIxD,sBAAKtwB,UAAU,wCAAf,UACI,sBAAKA,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAO0f,YAAc,EAChB,cAAC7nB,EAAA,EAAD,CAAO7I,IAAI,uFAAuF+I,MAAM,OAAO9I,IAAI,iBACnH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,0FAA0F+I,MAAM,OAAO9I,IAAI,qBAGhI,sBAAKE,UAAS,yBAAoB6Q,EAAO0f,YAAc,EAAI,GAAK,aAAhE,UACI,6BAAK1f,EAAO0f,cACZ,6CAAuC,IAAvB1f,EAAO0f,YAAoB,GAAK,aAGxD,sBAAKvwB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAO2f,UAAY,EACd,cAAC9nB,EAAA,EAAD,CAAO7I,IAAI,qFAAqF+I,MAAM,OAAO9I,IAAI,eACjH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,wFAAwF+I,MAAM,OAAO9I,IAAI,iBAG9H,sBAAKE,UAAS,yBAAoB6Q,EAAO2f,UAAY,EAAI,GAAK,aAA9D,UACI,6BAAK3f,EAAO2f,YACZ,2CAAmC,IAArB3f,EAAO2f,UAAkB,GAAK,aAGpD,sBAAKxwB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAO4f,YAAc,EAChB,cAAC/nB,EAAA,EAAD,CAAO7I,IAAI,uFAAuF+I,MAAM,OAAO9I,IAAI,iBACnH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,0FAA0F+I,MAAM,OAAO9I,IAAI,qBAGhI,sBAAKE,UAAS,yBAAoB6Q,EAAO4f,YAAc,EAAI,GAAK,aAAhE,UACI,6BAAK5f,EAAO4f,cACZ,6CAAuC,IAAvB5f,EAAO4f,YAAoB,GAAK,aAGxD,sBAAKzwB,UAAU,WAAf,UACI,qBAAKA,UAAU,iBAAf,SACK6Q,EAAO6f,WAAa,EACf,cAAChoB,EAAA,EAAD,CAAO7I,IAAI,sFAAsF+I,MAAM,OAAO9I,IAAI,gBAClH,cAAC4I,EAAA,EAAD,CAAO7I,IAAI,yFAAyF+I,MAAM,OAAO9I,IAAI,oBAG/H,sBAAKE,UAAS,yBAAoB6Q,EAAO6f,WAAa,EAAI,GAAK,aAA/D,UACI,6BAAK7f,EAAO6f,aACZ,4CAAqC,IAAtB7f,EAAO6f,WAAmB,GAAK,iBAIxD7f,EAAOkf,cAAgB,GAAKlf,EAAOmf,oBAAsB,IACvD,mCACI,sBAAKhwB,UAAU,+CAAf,UACI,qBAAKA,UAAU,oCAAf,SACI,sBAAKA,UAAU,4BAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,0CAEJ,qBAAKA,UAAU,+CAAf,SACI,+BAAK6Q,EAAO8f,cAAZ,cAIZ,qBAAK3wB,UAAU,oCAAf,SACI,sBAAKA,UAAU,6BAAf,UACI,qBAAKA,UAAU,uDAAf,SACI,gDAEJ,qBAAKA,UAAU,+CAAf,SACI,+BAAK6Q,EAAO+f,oBAAZ,cAIV/f,EAAOkf,cAAgB,GAAKlf,EAAOmf,oBAAsB,GACvD,sBAAKhwB,UAAU,6CAAf,UAC+B,IAAzB6Q,EAAOkf,eAAsD,IAA/Blf,EAAOmf,qBACnC,oFAA+Cnf,EAAO9Q,QAE/B,IAAzB8Q,EAAOkf,eAAsD,IAA/Blf,EAAOmf,qBACnC,qCAAGnf,EAAO9Q,KAAV,4DAEuB,IAAzB8Q,EAAOkf,eAAsD,IAA/Blf,EAAOmf,qBACnC,qCAAGnf,EAAO9Q,KAAV,4DAE6B,IAA/B8Q,EAAOmf,qBACL,oFAA+Cnf,EAAO9Q,QAE/B,IAAzB8Q,EAAOkf,eACL,8EAAyClf,EAAO9Q,gBAOvE4vB,EAAexqB,OAAS,GACrB,sBAAKnF,UAAU,wBAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,+BAAK6Q,EAAO9Q,KAAZ,+BAEJ,qBAAKC,UAAU,0CAAf,SACK2vB,EAAehxB,KAAI,SAAAkyB,GAAa,OAC7B,eAAC,IAAD,CAA4CnxB,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+BurB,EAAcC,sBAA7C,YAAsED,EAAcE,sBAApF,YAA6GF,EAAcG,mBAAzK,UAA+LH,EAAcI,YAA7M,KAA4NJ,EAAcK,SAA1O,QAAWL,EAAcG,+BC9GtCG,GAhFI,SAAC,GAAgB,IAAdtgB,EAAa,EAAbA,OAElB,OACI,sBAAK7Q,UAAU,YAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,+BAAK6Q,EAAO9Q,KAAZ,mBAG2B,KAA9B8Q,EAAOugB,oBACJ,qBAAKpxB,UAAU,SAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,qBAAKH,IAAI,6FAA6FC,IAAI,sBAE9G,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,sEAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOugB,iCAM7C,KAAjCvgB,EAAOwgB,uBACJ,qBAAKrxB,UAAU,OAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,qBAAKH,IAAI,4FAA4FC,IAAI,0BAE7G,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,uDAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOwgB,oCAMjD,KAA7BxgB,EAAOygB,mBACJ,qBAAKtxB,UAAU,OAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,qBAAKH,IAAI,2FAA2FC,IAAI,cAE5G,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,2CAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOygB,gCAMxC,KAAtCzgB,EAAO0gB,4BACJ,qBAAKvxB,UAAU,OAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,+BAAf,SACI,qBAAKH,IAAI,0FAA0FC,IAAI,aAE3G,sBAAKE,UAAU,wDAAf,UACI,qBAAKA,UAAU,wCAAf,SACI,6DAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAO0gB,6CCpB5EC,GAlDW,SAAC,GAAgB,IAAd3gB,EAAa,EAAbA,OAEzB,OACI,sBAAK7Q,UAAU,YAAf,UACI,qBAAKA,UAAU,iEAAf,SACI,+BAAK6Q,EAAO9Q,KAAZ,4BAEJ,sBAAKC,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,sFAAsFC,IAAI,mBAEvG,qBAAKE,UAAU,+BAAf,SACI,sBAAKA,UAAU,kBAAf,UACI,qBAAKA,UAAU,2EAAf,SACI,kDAEJ,8BACI,wBAAOA,UAAU,sCAAjB,UACI,gCACI,+BACI,oBAAIyxB,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,iBACA,oBAAIA,QAAQ,IAAZ,sBAGR,gCACI,6BACK,YAAIC,MAAM,KAAK/yB,KAAI,SAACgzB,EAAG5yB,GAAJ,OAChB,oBAAYiB,UAAWjB,EAAI8R,EAAO+gB,YAAc,GAAK7yB,EAAI8R,EAAOghB,YAAc,EAAvD,uBAAvB,iBAAS9yB,eAMK,KAAjC8R,EAAOwgB,uBACJ,qBAAKrxB,UAAU,OAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOihB,sCCyE5EC,GA9GW,SAAC,GAAgB,IAAdlhB,EAAa,EAAbA,OAE3B,EAAgDhP,mBAAS,IAAzD,mBAAOmwB,EAAP,KAAyBC,EAAzB,KAEMC,EAAe,uCAAG,WAAO3f,GAAP,SAAAxQ,EAAA,sDACtBM,IAAM,CACJC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+CsL,KACjD3P,MAAK,SAAAuvB,GACNF,EAAoBE,EAAWzzB,SALX,2CAAH,sDAarB,OAJA2E,qBAAU,WACR6uB,EAAgBrhB,EAAOvR,cACtB,CAACuR,EAAOvR,aAEP0yB,EAAiB7sB,QAAU,EAE3B,cAAC,EAAD,IAKA,sBAAKnF,UAAU,YAAf,UACE,qBAAKA,UAAU,iEAAf,SACE,+BAAK6Q,EAAO9Q,KAAZ,qBAEF,sBAAKC,UAAU,wCAAf,UACE,qBAAKA,UAAU,4CAAf,SACE,qBAAKH,IAAI,oFAAoFC,IAAI,YAEnG,sBAAKE,UAAU,+BAAf,UACE,qBAAKA,UAAU,kBAAf,SACE,wBAAOA,UAAU,mDAAjB,UACE,gCACE,+BACE,gDACA,wCACA,uCAEgC,KAA5B6Q,EAAOuhB,kBAAuD,OAA5BvhB,EAAOuhB,kBACzC,8BACGvhB,EAAOuhB,sBAIqB,KAAjCvhB,EAAOwhB,uBAAiE,OAAjCxhB,EAAOwhB,uBAC9C,6CACE,8BACGxhB,EAAOwhB,2BAId,wCAEiC,KAA7BxhB,EAAOyhB,mBAAyD,OAA7BzhB,EAAOyhB,mBAC1C,8BACGzhB,EAAOyhB,4BAMlB,gCACGN,EAAiBrzB,KAAI,SAAC4zB,EAAc1zB,GAAf,OACpB,+BACE,6BACG0zB,EAAaC,cACZ,8BAAMD,EAAaC,iBAEvB,6BACGD,EAAaE,aACZ,gCAAMF,EAAaE,YAAnB,YAGJ,6BACGF,EAAaG,aACZ,gCAAMH,EAAaG,YAAnB,YAG+B,KAAjC7hB,EAAOwhB,uBAAiE,OAAjCxhB,EAAOwhB,uBAC9C,6BACGE,EAAaI,kBACZ,gCAAMJ,EAAaI,iBAAnB,YAIN,6BACGJ,EAAaK,cACZ,gCAAML,EAAaK,aAAnB,cAxBG/zB,aAgCiB,KAAjCgS,EAAOwgB,uBACN,qBAAKrxB,UAAU,OAAf,SACE,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOgiB,sCC7D5DC,GA1CY,SAAC,GAAgB,IAAdjiB,EAAa,EAAbA,OAE1B,OACI,sBAAK7Q,UAAU,YAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,+BAAK6Q,EAAO9Q,KAAZ,sCAGgB,KAAnB8Q,EAAOkiB,SACJ,qBAAK/yB,UAAU,SAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,gFAAgFC,IAAI,cAEjG,qBAAKE,UAAU,+BAAf,SACI,gCACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOkiB,YAC1DliB,EAAOmiB,wBC0CzBC,GAjDQ,SAAC,GAAkF,EAAhFC,WAAiF,IAArEriB,EAAoE,EAApEA,OAAQ6e,EAA4D,EAA5DA,kBAAmBpB,EAAyC,EAAzCA,qBAAsB6E,EAAmB,EAAnBA,aAEnF,OACI,sBAAKnzB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQ4F,EAAO9Q,KAAf,kBAAoC8Q,EAAO/K,SAA3C,IAAsD+K,EAAOjQ,YAA7D,KAA4EiQ,EAAOtL,eAAnF,eAA+GsL,EAAOhL,aAAtH,kBACA,sBAAMqE,KAAK,cAAcgB,QAAO,sBAAiB2F,EAAO9Q,KAAxB,mCAAuD8Q,EAAO/K,SAA9D,YAA0E+K,EAAOjQ,YAAjF,aAAiGiQ,EAAOtL,eAAxG,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,cAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,qEAAgEgR,EAAOsb,UAAYrsB,IAAG,UAAK+Q,EAAO9Q,KAAZ,QAAwB6I,MAAM,WAElI,gCACI,cAAC,GAAD,CAAaiI,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UAGI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAOuiB,4BAChCn0B,IAAzBqvB,GAAsChkB,OAAOC,KAAK+jB,GAAsBnpB,OAAS,GAAwC,OAAnCmpB,EAAqB+E,gBAAuCp0B,IAAjBk0B,GAA+C,MAAjBA,GAC7J,sBAAKnzB,UAAU,oDAAf,UACI,sDACA,gCACKsuB,EAAqB+E,UAD1B,OACyC/E,EAAqBgF,4BAD9D,+BACsH,uBADtH,cAEgBhF,EAAqBiF,aAFrC,IAEoDjF,EAAqBkF,iBAFzE,IAE4FlF,EAAqBmF,qBAK7H,qBAAKvzB,wBAAyB,CAAEC,OAAQvD,aAAYiU,EAAO6iB,2BAGnE,qBAAK1zB,UAAU,UAAf,SAC4B,OAAtB6Q,EAAO8iB,YAA6C,KAAtB9iB,EAAO8iB,YAA0C,OAArB9iB,EAAO+iB,WAA2C,KAArB/iB,EAAO+iB,WAC5F,mBAAG5zB,UAAU,qDAAqDgI,KAAM6I,EAAO+iB,UAA/E,SAA2F/iB,EAAO8iB,eAG1G,cAAC,GAAD,CAAa9iB,OAAQA,IACrB,cAAC,GAAD,CAAcA,OAAQA,EAAQ6e,kBAAmBA,IACtB,KAA1B7e,EAAOue,gBACJ,cAAC,GAAD,CAAWve,OAAQA,IAEvB,cAAC,GAAD,CAAYA,OAAQA,IACpB,cAAC,GAAD,CAAmBA,OAAQA,IAC3B,cAAC,GAAD,CAAmBA,OAAQA,IAC3B,cAAC,GAAD,CAAoBA,OAAQA,QCuBzBgjB,GAxEc,SAAC,GAAoC,IAAlChjB,EAAiC,EAAjCA,OAAQwd,EAAyB,EAAzBA,mBAIpC,YAA2BpvB,IAAvBovB,EACQ,cAAC,EAAD,IAIJ,sBAAKruB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQojB,EAAmByF,QAA3B,oCAAqEjjB,EAAO9Q,KAA5E,yBACA,sBAAMmK,KAAK,cAAcgB,QAAO,sDAAiD2F,EAAO9Q,KAAxD,mCAAuF8Q,EAAO/K,SAA9F,YAA0G+K,EAAOjQ,YAAjH,aAAiIiQ,EAAOtL,eAAxI,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,sFAAsFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,qBACjI,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,SACI5R,IAAvBovB,GAAoC/jB,OAAOC,KAAK8jB,GAAoBlpB,OAAS,GAC3E,qCACI,sBAAKnF,UAAU,UAAf,UACI,qBAAIA,UAAU,OAAd,UAAsBquB,EAAmByF,QAAzC,oBACA,wCAAU,cAAC,IAAD,CAAMp0B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCqlB,EAAmB0F,eAA9D,SAAgF1F,EAAmByF,UAA7G,kDAEJ,qBAAK9zB,UAAU,UAAf,SACI,qBAAIA,UAAU,cAAd,gDAAgEquB,EAAmBnlB,iBAAnF,IAAsGmlB,EAAmBllB,eAAzH,IAA0IklB,EAAmBjlB,mBAA7J,IAAkLilB,EAAmBhlB,cAArM,IAAqNglB,EAAmB/kB,uCAMnOrK,IAAvBovB,GAAoC/jB,OAAOC,KAAK8jB,GAAoBlpB,OAAS,GAC3E,sBAAKnF,UAAU,SAAf,UACI,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYyxB,EAAmB2F,iBAE3E,qBAAKh0B,UAAU,UAAf,SACI,+DAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYyxB,EAAmB4F,oBAE3E,8BACI,eAAC,IAAD,CAAMv0B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCqlB,EAAmB0F,eAAiB/zB,UAAU,qDAAzF,UAA+IquB,EAAmByF,QAAlK,uBAEJ,sBAAK9zB,UAAU,YAAf,UACoC,OAA9BquB,EAAmB6F,aAAiDj1B,IAA9BovB,EAAmB6F,QACvD,qBAAKl0B,UAAU,sCAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BwuB,EAAmB6F,OAAO7E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,eAG/E,OAA9BuuB,EAAmB8F,aAAiDl1B,IAA9BovB,EAAmB8F,QACvD,qBAAKn0B,UAAU,sCAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BwuB,EAAmB8F,OAAO9E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,eAG/E,OAA9BuuB,EAAmB+F,aAAiDn1B,IAA9BovB,EAAmB+F,QACvD,qBAAKp0B,UAAU,sCAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BwuB,EAAmB+F,OAAO/E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,kBAInH,8BACI,eAAC,IAAD,CAAMJ,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCqlB,EAAmB0F,eAAiB/zB,UAAU,qDAAzF,UAA+IquB,EAAmByF,QAAlK,8BCjDbO,GAnBU,SAAC,GAAgB,IAAdxjB,EAAa,EAAbA,OACxB,OACI,qBAAK7Q,UAAU,YAAf,SACI,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,mFAAmFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,gBAC9H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,yCACA,qBAAKA,UAAU,UAAf,wC,oBC4DTs0B,GAhEW,SAAC,GAA2D,IAAzDzjB,EAAwD,EAAxDA,OAAQ0jB,EAAgD,EAAhDA,qBAAsBC,EAA0B,EAA1BA,oBAEvD,OAAID,EAAqBpvB,QAAU,GAAKqvB,EAAoBrvB,QAAU,EAE9D,cAAC,EAAD,IAIA,sBAAKnF,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,+DAAkC4F,EAAO9Q,KAAzC,KAAiD8Q,EAAO/K,SAAxD,IAAmE+K,EAAOjQ,YAA1E,KAAyFiQ,EAAOtL,eAAhG,0BACA,sBAAM2E,KAAK,cAAcgB,QAAO,oCAA+B2F,EAAO9Q,KAAtC,mCAAqE8Q,EAAO/K,SAA5E,YAAwF+K,EAAOjQ,YAA/F,aAA+GiQ,EAAOtL,eAAtH,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,iFAAiFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,gBAC5H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,0CACA,sBAAKA,UAAU,UAAf,8LACqL,cAAC,IAAD,CAAMN,GAAG,YAAT,qBADrL,4BAGA,sBAAKM,UAAU,UAAf,yRACgR,cAAC,IAAD,CAAMN,GAAG,WAAT,+BADhR,gBAMX60B,EAAqBpvB,OAAS,GAC3B,sBAAKnF,UAAU,SAAf,UACI,qBAAKA,UAAU,iEAAf,SACI,yDAEJ,cAAC,KAAD,CACI3B,UAAWk2B,EACXj2B,eAAgB,CAAC,GAAI,GAAI,OAAQ,cACjCC,YAAa,CAAC,IAAK,oBAAqB,wBAAyB,+BACjE+B,MAAK,QAKbk0B,EAAoBrvB,OAAS,GAC7B,mCACKqvB,EAAoB71B,KAAI,SAAC81B,EAAoB51B,GAArB,OACrB,sBAAiBmB,UAAU,OAA3B,UACI,qBAAKA,UAAU,iEAAf,SACI,6BAAKy0B,EAAmBC,gBAE5B,cAAC,KAAD,CACIr2B,UAAWo2B,EAAmBE,SAC9Br2B,eAAgB,CAAC,GAAI,GAAI,OAAQ,cACjCC,YAAa,CAAC,IAAK,OAAQ,WAAY,kBACvC+B,MAAM,OARJzB,YC8JvB+1B,GA3MW,SAAC,GAAmC,IAAjC/jB,EAAgC,EAAhCA,OAAQ6e,EAAwB,EAAxBA,kBACjC,EAAgC7tB,mBAAS,IAAzC,mBAAO6B,EAAP,KAAiBmxB,EAAjB,KACA,EAA4ChzB,mBAAS6tB,GAArD,mBAAOC,EAAP,KAAuBC,EAAvB,KAEMkF,EAAa,uCAAG,WAAOviB,GAAP,SAAAxQ,EAAA,sDAClBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,6BAA4CsL,KAChD3P,MAAK,SAAAmyB,GACJF,EAAYE,EAAar2B,SALX,2CAAH,sDAcnB,OALA2E,qBAAU,WACNyxB,EAAcjkB,EAAOvR,YACrBswB,EAAkBF,KACnB,CAAC7e,EAAOvR,WAAYowB,IAGnB,sBAAK1vB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,iDAAoB4F,EAAO9Q,KAA3B,kBAAgD8Q,EAAO/K,SAAvD,IAAkE+K,EAAOjQ,YAAzE,KAAwFiQ,EAAOtL,eAA/F,eAA2HsL,EAAOhL,aAAlI,kBACA,sBAAMqE,KAAK,cAAcgB,QAAO,+BAA0B2F,EAAO9Q,KAAjC,mCAAgE8Q,EAAO/K,SAAvE,YAAmF+K,EAAOjQ,YAA1F,aAA0GiQ,EAAOtL,eAAjH,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,iFAAiFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,iBAC5H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,mDACA,sBAAKA,UAAU,UAAf,UACK6Q,EAAO9Q,KADZ,6BAC4C8Q,EAAO/K,SADnD,IAC8D+K,EAAOjQ,YADrE,KACoFiQ,EAAOtL,eAD3F,OAGA,qBAAKvF,UAAU,UAAf,SACI,6BAAI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOoJ,oBAAZ,YAAmC8H,EAAOvR,YAAcU,UAAU,iDAA1E,8BAER,sBAAKA,UAAU,UAAf,gCACuB,kDADvB,mCACoF,iCAAS6Q,EAAO9Q,OADpG,0EAMZ,qBAAKC,UAAU,SAAf,SACI,qBAAKA,UAAU,mBAAf,SACI,wBAAQM,MAAM,eAAegQ,MAAM,MAAMC,OAAO,MAAM1Q,IAAG,uDAAkDgR,EAAOb,kBAAzD,YAA8Ea,EAAOX,mBAArF,6DAA4JW,EAAOqd,uBAAyB8G,iBAAe,QAG5Q,qBAAKh1B,UAAU,4DAAf,SACI,6CAAgB6Q,EAAO9Q,UAE3B,qBAAKC,UAAU,4DAAf,SACI,uDAEJ,sBAAKA,UAAU,SAAf,UACI,sBAAKA,UAAU,6CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,mFAAmFC,IAAI,YAEpG,qBAAKE,UAAU,+BAAf,SACI,gCACwC,OAAlC0D,EAASuxB,sBAAgE,OAA/BvxB,EAASwxB,mBACjD,gCACKxxB,EAASyxB,wBADd,WAC8C,iCAASzxB,EAAS0xB,wBADhE,WACuG,iCAAS1xB,EAAS2xB,wBAG7F,OAA9B3xB,EAAS4xB,kBAAwD,OAA3B5xB,EAAS6xB,eAC7C,gCACK7xB,EAAS8xB,eADd,WACqC,iCAAS9xB,EAAS+xB,oBADvD,WAC0F,iCAAS/xB,EAASgyB,oBAGhF,OAA9BhyB,EAASiyB,kBAAwD,OAA3BjyB,EAASkyB,eAC7C,gCACKlyB,EAASmyB,eADd,WACqC,iCAASnyB,EAASoyB,oBADvD,WAC0F,iCAASpyB,EAASqyB,oBAGhH,qBAAK/1B,UAAU,OAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAY8G,EAASsyB,gCAK7E,sBAAKh2B,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,4EAA4EC,IAAI,UAE7F,qBAAKE,UAAU,+BAAf,SACI,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAY8G,EAASuyB,oCAK7E,qBAAKj2B,UAAU,4DAAf,SACI,2CAEJ,sBAAKA,UAAU,SAAf,UACI,sBAAKA,UAAU,6CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,6EAA6EC,IAAI,UAE9F,qBAAKE,UAAU,+BAAf,SACI,gCACmC,OAA7B0D,EAASwyB,iBAAwD,OAA5BxyB,EAASyyB,gBAC5C,gCACKzyB,EAAS0yB,mBADd,eAC6C,iCAAS1yB,EAAS2yB,mBAD/D,WACiG,iCAAS3yB,EAAS4yB,qBAGxF,OAA7B5yB,EAAS6yB,iBAAwD,OAA5B7yB,EAAS8yB,gBAC5C,gCACK9yB,EAAS+yB,mBADd,eAC6C,iCAAS/yB,EAASgzB,mBAD/D,WACiG,iCAAShzB,EAASizB,qBAGxF,OAA7BjzB,EAASkzB,iBAAwD,OAA5BlzB,EAASmzB,gBAC5C,gCACKnzB,EAASozB,mBADd,eAC6C,iCAASpzB,EAASqzB,mBAD/D,WACiG,iCAASrzB,EAASszB,qBAG5F,OAAzBtzB,EAASuzB,aAAiD,KAAzBvzB,EAASuzB,aACxC,2DAC4B,4CAAevzB,EAASuzB,eADpD,KAC2E,mCAASvzB,EAASwzB,YAAlB,QAD3E,YAIsC,OAAxCxzB,EAASyzB,4BAA+E,KAAxCzzB,EAASyzB,4BACvD,4DAC6B,sDAAyBzzB,EAASyzB,iCAGnE,qBAAKn3B,UAAU,OAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAY8G,EAAS0zB,wBAK7E,sBAAKp3B,UAAU,6CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,gFAAgFC,IAAI,cAEjG,qBAAKE,UAAU,+BAAf,SACI,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAY8G,EAAS2zB,uBAM9C,KAA1BxmB,EAAOymB,gBAAmD,KAA1BzmB,EAAO0mB,iBACxC,sBAAKv3B,UAAU,SAAf,UACgC,OAA1B6Q,EAAOymB,gBAAqD,KAA1BzmB,EAAOymB,gBACvC,qBAAKt3B,UAAU,YAAf,SACI,qBAAKA,UAAU,mBAAf,SACI,wBAAQM,MAAM,gBAAgBgQ,MAAM,MAAMC,OAAO,MAAM1Q,IAAKgR,EAAOymB,eAAgBtC,iBAAe,EAACwC,cAAY,cAI/F,OAA1B3mB,EAAO0mB,gBAAqD,KAA1B1mB,EAAO0mB,gBACvC,qBAAKv3B,UAAU,YAAf,SACI,qBAAKA,UAAU,mBAAf,SACI,wBAAQM,MAAM,gBAAgBgQ,MAAM,MAAMC,OAAO,MAAM1Q,IAAKgR,EAAO0mB,eAAgBvC,iBAAe,EAACwC,cAAY,cAI3H,qBAAKx3B,UAAU,iBAAf,0LAMJ2vB,EAAexqB,OAAS,GACxB,sBAAKnF,UAAU,wBAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,0DAEJ,gCACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,QAAf,SACI,4CAEJ,qBAAKA,UAAU,QAAf,SACI,+CAGR,qBAAKA,UAAU,uBAAf,SACK2vB,EAAehxB,KAAI,SAAAkyB,GAAa,OAC7B,sBAAK7wB,UAAU,6CAAf,UACI,qBAAKA,UAAU,QAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+BurB,EAAcC,sBAA7C,YAAsED,EAAcE,sBAApF,YAA6GF,EAAcG,mBAAnI,SAAyJH,EAAcI,gBAE3K,sBAAKjxB,UAAU,QAAf,UACK6wB,EAAcK,SADnB,MAEKL,EAAcf,aACX,2EAPqDe,EAAchoB,mBC3GhG4uB,GA/EK,SAAC,GAAsB,EAApB5mB,OAAqB,IAAbmX,EAAY,EAAZA,MAS3B,OACI,gCACI,qBAAKhoB,UAAU,qDAAf,SACI,6BAAKgoB,EAAMC,YAEf,qBAAKjoB,UAAU,6CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,UAAKF,OAAOgJ,YAAZ,4BAA2Cqf,EAAMI,kBAAjD,YAAsEJ,EAAMK,eAAiBvoB,IAAG,gBAAWkoB,EAAMnf,IAAMD,MAAM,WAE3I,sBAAK5I,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,qBAAKA,UAAU,YAAf,SACKgoB,EAAMI,uBAGf,sBAAKpoB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,sBAAKA,UAAU,YAAf,UACKgoB,EAAMM,eADX,IAC4BN,EAAMO,mBADlC,IACuDP,EAAMQ,oBAGjE,oBAAIxoB,UAAU,aCmDX03B,GAhFS,SAAC,GAAgB,IAAd7mB,EAAa,EAAbA,OAEjB6V,EAAa7V,EAAOhI,GAE1B,EAA8ChH,mBAAS,GAAvD,mBAAO+kB,EAAP,KAAwB8B,EAAxB,KAEA,EAKIjC,GAAiBC,EARJ,GAQ0BE,GAJvCC,EADJ,EACIA,aACAE,EAFJ,EAEIA,WACAE,EAHJ,EAGIA,OACAE,EAJJ,EAIIA,aAGEwB,EAAgBnE,mBAChBoE,EAAsBxW,uBAAY,SAAAyW,GAChChC,IAEA8B,EAAclc,SACdkc,EAAclc,QAAQqc,aAC1BH,EAAclc,QAAU,IAAIsc,sBAAqB,SAAAC,GACzCA,EAAa,GAAGC,gBAAkB9B,GAClCuB,GAAmB,SAAAQ,GAAmB,OAAIA,EAAsB,QAIpEL,GACAF,EAAclc,QAAQ0c,QAAQN,MACnC,CAAChC,EAAcM,IAElB,OACI,sBAAKnnB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,+CAAkB4F,EAAO9Q,KAAzB,KAAiC8Q,EAAO/K,SAAxC,IAAmD+K,EAAOjQ,YAA1D,KAAyEiQ,EAAOtL,eAAhF,0BACA,sBAAM2E,KAAK,cAAcgB,QAAO,2BAAsB2F,EAAO9Q,KAA7B,mCAA4D8Q,EAAO/K,SAAnE,YAA+E+K,EAAOjQ,YAAtF,aAAsGiQ,EAAOtL,eAA7G,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,+EAA+EC,IAAG,UAAK+Q,EAAO9Q,UACtI,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,4CAAe6Q,EAAO9Q,QACtB,sBAAKC,UAAU,UAAf,uBACc,iCAAS6Q,EAAO9Q,OAD9B,kDAGA,qBAAKC,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,yBAA2C+F,EAAOvR,YAAcU,UAAU,2DAAlF,qDAK1C,gCACI,qBAAKA,UAAU,UAAf,SACI,iDAEHinB,EAAOtoB,KAAI,SAACqpB,EAAOnpB,GAChB,OAAIooB,EAAO9hB,SAAWtG,EAAQ,EAEtB,qBAAKuqB,IAAKR,EAAV,SACI,cAAC,GAAD,CAAa/X,OAAQA,EAAQmX,MAAOA,KADJA,EAAMnf,IAM1C,8BACI,cAAC,GAAD,CAAagI,OAAQA,EAAQmX,MAAOA,KAD9BA,EAAMnf,OAM5B,8BACKge,GACG,cAAC,EAAD,MAGR,8BAAME,GAAc,iBCnBrB4Q,GA5DM,SAAC,GAAuB,EAArB9mB,OAAsB,IAAduZ,EAAa,EAAbA,OAC5B,OACI,sBAAKpqB,UAAU,SAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,6BAAKoqB,EAAOC,aAEO,KAAtBD,EAAOE,YACJ,qBAAKtqB,UAAU,2CAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYwtB,EAAOE,iBAGnE,sBAAKtqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,qDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOG,iBAGhB,sBAAKvqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,uDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOI,kBAGhB,sBAAKxqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kEAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOK,uBAGhB,sBAAKzqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOM,gBAGhB,sBAAK1qB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,+CAEJ,sBAAKA,UAAU,YAAf,UACKoqB,EAAOO,eADZ,IAC6BP,EAAOQ,mBADpC,IACyDR,EAAOS,oBAGpE,oBAAI7qB,UAAU,aCiCX43B,GA/EU,SAAC,GAAgB,IAAd/mB,EAAa,EAAbA,OAClByY,EAAczY,EAAOhI,GAE3B,EAAgDhH,mBAAS,GAAzD,mBAAO0nB,EAAP,KAAyBwB,EAAzB,KAEA,EAKI1B,GAAkBC,EARL,GAQ4BC,GAJzCC,EADJ,EACIA,cACAE,EAFJ,EAEIA,YACAE,EAHJ,EAGIA,QACAE,EAJJ,EAIIA,cAGEkB,EAAiBxG,mBACjByG,EAAuB7Y,uBAAY,SAAA8Y,GACjC1B,IAEAwB,EAAeve,SACfue,EAAeve,QAAQqc,aAC3BkC,EAAeve,QAAU,IAAIsc,sBAAqB,SAAAoC,GAC1CA,EAAc,GAAGlC,gBAAkBa,GACnCiB,GAAoB,SAAAK,GAAoB,OAAIA,EAAuB,QAIvEF,GACAF,EAAeve,QAAQ0c,QAAQ+B,MACpC,CAAC1B,EAAeM,IAEnB,OACI,sBAAK9pB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,gDAAmB4F,EAAO9Q,KAA1B,KAAkC8Q,EAAO/K,SAAzC,IAAoD+K,EAAOjQ,YAA3D,KAA0EiQ,EAAOtL,eAAjF,0BACA,sBAAM2E,KAAK,cAAcgB,QAAO,4BAAuB2F,EAAO9Q,KAA9B,mCAA6D8Q,EAAO/K,SAApE,YAAgF+K,EAAOjQ,YAAvF,aAAuGiQ,EAAOtL,eAA9G,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,gFAAgFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,eAC3H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,oDAAuB6Q,EAAO9Q,QAC9B,sBAAKC,UAAU,UAAf,wBACe,iCAAS6Q,EAAO9Q,OAD/B,iHAGA,qBAAKC,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,0BAA4C+F,EAAOvR,YAAcU,UAAU,2DAAnF,sDAK1C,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,UAAf,SACI,kDAEH4pB,EAAQjrB,KAAI,SAACyrB,EAAQvrB,GAClB,OAAI+qB,EAAQzkB,SAAWtG,EAAQ,EAEvB,qBAAKuqB,IAAK6B,EAAV,SACI,cAAC,GAAD,CAAcpa,OAAQA,EAAQuZ,OAAQA,KADLA,EAAOvhB,IAM5C,8BACI,cAAC,GAAD,CAAcgI,OAAQA,EAAQuZ,OAAQA,KADhCA,EAAOvhB,OAM7B,8BACK2gB,GACG,cAAC,EAAD,MAGR,8BAAME,GAAe,iBC5DtBmO,GAnBc,SAAC,GAAgB,IAAdhnB,EAAa,EAAbA,OAC5B,OACI,qBAAK7Q,UAAU,YAAf,SACI,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,mFAAmFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,qBAC9H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,8CACA,qBAAKA,UAAU,UAAf,wC,wCC6HT83B,GArIG,SAAC,GAA8B,IAA5BC,EAA2B,EAA3BA,WAAYC,EAAe,EAAfA,SACzBC,EAAmB,SAACC,GAExB,IAAIC,EAAgB,GAEhBC,EAAYJ,EAAShzB,QAAO,SAAUkS,GACxC,OAAQA,EAAemhB,SAAWH,GAAuC,MAA7BhhB,EAAemc,aAkB7D,OAfA+E,EAAUlV,MAAK,SAAUnhB,EAAGshB,GAE1B,OADY,IAAI1lB,KAAKoE,EAAEu2B,WAAoB,IAAI36B,KAAK0lB,EAAEiV,cAIxDF,EAAUn7B,SAAQ,SAAUs7B,GAC1B,IAAIC,EAAe,EAEfD,EAASE,aAAe,IAC1BD,EAAe,GAGjBL,EAAch5B,KAAK,CAACxB,KAAK+6B,IAAI,KAAOF,EAAcG,OAAOJ,EAASE,cAAgB,EAAGF,EAASK,YAAaL,EAASlF,eAG/G8E,GAGLU,EAA8B,GAEpB,YAAI,IAAI7hB,IAAIghB,EAASr5B,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAE7DvmB,SAAQ,SAAUC,GACxB27B,EAA4B15B,KAAK,CAC/B,KAAQjC,EACR,KAAQ+6B,EAAiB/6B,QAI7B,IAAMmY,EAAU,CACdyjB,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAClIC,MAAO,CACLvzB,KAAM,SACNwzB,SAAU,IACVC,gBAAiB,UACjBC,YAAa,EACbrc,YAAa,UACb1B,MAAO,CACLge,WAAY,SAGhB74B,MAAO,CACLzD,KAAM,2BACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGhBG,SAAU,CACRz8B,KAAM,yCACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,SAGhBI,MAAO,CACL/zB,KAAM,WACNg0B,qBAAsB,CACpBC,MAAO,SAAUC,KAAM,MAEzBp5B,MAAO,CACLzD,KAAM,KAGV88B,OAAQ,CACNC,UAAW,CACTP,WAAY,OACZD,SAAU,SAGdS,MAAO,CACLv5B,MAAO,CACLzD,KAAM,2BACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGhBW,IAAK,EACLC,OAAQ,CACN5e,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIlBa,QAAS,CACPC,aAAc,2BACdC,YAAa,gCAEfC,UACA,CACEC,SAAS,GAEXC,YAAa,CACXC,OAAQ,CACNC,OAAQ,CACNH,SAAS,KAIfI,OAAQ3B,EACR4B,QACA,CACEL,SAAS,IAIb,OACE,gCACE,qBAAKp6B,UAAU,4DAAf,SACE,6BAAK+3B,MAEP,8BACE,cAAC,KAAD,CAAiB2C,WAAYC,KAAYtlB,QAASA,UCjE3CulB,GA7DS,SAAC,GAA2D,IAAzD7C,EAAwD,EAAxDA,WAAYC,EAA4C,EAA5CA,SAAUE,EAAkC,EAAlCA,OAAQ2C,EAA0B,EAA1BA,aAAch8B,EAAY,EAAZA,MAErE,EAAsEgD,mBAAS,IAA/E,mBAAOg3B,EAAP,KAAoCiC,EAApC,KAGM7C,EAAmB,SAAC8C,GAExB,IAAI5C,EAAgB,GAEhBC,EAAYJ,EAAShzB,QAAO,SAAUkS,GACxC,OAAQA,EAAemhB,SAAW0C,GAA2C,MAA7B7jB,EAAemc,aAkBjE,OAfA+E,EAAUlV,MAAK,SAAUnhB,EAAGshB,GAE1B,OADY,IAAI1lB,KAAKoE,EAAEu2B,WAAoB,IAAI36B,KAAK0lB,EAAEiV,cAIxDF,EAAUn7B,SAAQ,SAAUs7B,GAC1B,IAAIC,EAAe,EAEfD,EAASE,aAAe,IAC1BD,EAAe,GAGjBL,EAAch5B,KAAK,CAACxB,KAAK+6B,IAAI,KAAOF,EAAcG,OAAOJ,EAASE,cAAgB,EAAGF,EAASK,YAAaL,EAASlF,eAG/G8E,GAeT90B,qBAAU,YAZ6B,SAAC03B,GAEtC,IAAIC,EAAkC,GAEtCA,EAAgC77B,KAAK,CACnC,KAAQ47B,EACR,KAAQ9C,EAAiB8C,KAG3BD,EAA+BE,GAI/BC,CAA+B/C,KAC9B,CAACA,EAAQF,IAEZ,IAAMkD,EAAW,2BAAQL,GAAR,IAAsBL,OAAQ3B,EAA6BC,OAAQ,CA5ChE,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WA4C7Cj6B,MAEjG,OACE,gCACE,qBAAKmB,UAAU,4DAAf,SACE,+BAAKk4B,EAAL,4BAAsCH,EAAtC,SAEF,8BACE,cAAC,KAAD,CAAiB2C,WAAYC,KAAYtlB,QAAS6lB,UC8E3CC,GAtIG,SAAC,GAA6C,EAA3CtqB,OAA4C,IAApCmnB,EAAmC,EAAnCA,SAAU3J,EAAyB,EAAzBA,mBAE/B+M,EAAiC,SAAC3B,GAEtC,IAAI4B,EAA4B,GAmBhC,OAjBkB,YAAI,IAAIrkB,IAAIghB,EAASr5B,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAE7DvmB,SAAQ,SAAUq+B,GAE5B,IAAIC,EAAqB,GAELvD,EAAShzB,QAAO,SAAUkS,GAC5C,OAAQA,EAAesc,mBAAqBiG,GAASviB,EAAemhB,SAAWiD,KAGnEr+B,SAAQ,SAAUs7B,GAC9BgD,EAAmBp8B,KAAK,CAAE,IAAOo5B,EAASK,WAAY,eAAkBL,EAASlF,eAGnFgI,EAA0Bl8B,KAAK,CAAE,WAAcm8B,EAAY,qBAAwBC,OAG9EF,GAGLG,EAAyB,GAEhB,CAAC,WAAY,UAAW,WAAY,QAAS,SAEnDv+B,SAAQ,SAAUw8B,GACvB+B,EAAuBr8B,KAAK,CAC1B,KAAQs6B,EACR,WAAc2B,EAA+B3B,QAIjD,IAAIgC,EAAY,EAEVC,EAAc,SAACC,GACnB,OAAOA,KAGHC,EAAe,SAACC,EAAaC,GACjC,IAAI9D,EAAW6D,EAAY72B,QAAO,SAAU+2B,GAC1C,OAAQA,EAAID,MAAQA,KAGtB,OAAI9D,EAAS7yB,OAAS,GAAoC,MAA/B6yB,EAAS,GAAGgE,eAC9BhE,EAAS,GAAGgE,eAEZ,IAILC,EAAW,SAACH,GAChB,IAAII,EAAQ,GAEZ,OAAQJ,GACN,KAAK,EACL,KAAK,GACL,KAAK,GACHI,EAAQ,KACR,MACF,KAAK,EACL,KAAK,GACHA,EAAQ,KACR,MACF,KAAK,EACL,KAAK,GACHA,EAAQ,KACR,MACF,QACEA,EAAQ,KAGZ,OAAOJ,EAAMI,GAGTC,EAAgB1+B,eAEtB,OAAIu6B,EAAS7yB,QAAU,EACb,kDAIN,qBAAKnF,UAAU,YAAf,SAEIw7B,EAAuB78B,KAAI,SAACk9B,EAAah9B,GAAd,OACzB,sBAAiBmB,UAAU,YAAYmb,MAAO,CAAEihB,UAAW,QAA3D,UACE,qBAAKp8B,UAAU,4DAAf,SACE,6BAAK67B,EAAY3xB,SAEnB,qBAAKlK,UAAU,kBAAf,SACE,wBAAOA,UAAU,uCAAjB,UACE,gCACE,+BACE,wCACC07B,GAAY,WACXD,EAAYx9B,aAAkB49B,EAAY3xB,MAE1C,IADA,IAAMtL,EAAM,GACHG,EAAI,EAAGA,EAAK08B,EAAY,EAAI18B,IACnCH,EAAIO,KAAK,6BAAa88B,EAASl9B,IAAbA,IAEpB,OAAOH,UAIb,gCACGi9B,EAAYQ,WAAW19B,KAAI,SAAC29B,EAAgBt9B,GAAjB,OAC1B,+BACE,oBAAIgB,UAAS,0BAAqBs8B,EAAeC,aAAeJ,EAAgB,aAAe,IAA/F,SAAqG,cAAC,IAAD,CAAMz8B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCqlB,EAAmB0F,cAAtD,mBAA8EuI,EAAeC,YAArG,SAAoHD,EAAeC,eACvOb,GAAY,WAEX,IADA,IAAM98B,EAAM,GACHG,EAAI,EAAGA,EAAK08B,EAAY,EAAI18B,IACnCH,EAAIO,KAAK,oBAAYa,UAAS,UAAKs8B,EAAeC,aAAeJ,EAAgB,mBAAqB,IAA7F,SACPP,EAAaU,EAAeE,qBAAsBz9B,IADlCA,IAIpB,OAAOH,OATFI,eArBTH,SCoFP49B,GAvKW,SAAC,GAAoC,IAAlC5rB,EAAiC,EAAjCA,OAAQwd,EAAyB,EAAzBA,mBAEjClrB,QAAQC,IAAIirB,GAEZ,MAAgCxsB,mBAAS,IAAzC,mBAAOm2B,EAAP,KAAiB0E,EAAjB,KAEMC,EAAa,uCAAG,WAAOC,GAAP,SAAA76B,EAAA,sDAClBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,6BAA4C21B,KAChDh6B,MAAK,SAAAi6B,GACJ,GAAIA,EAAan+B,KAAKyG,OAAS,EAAG,CAE9B,IAEI23B,EAFkBD,EAAan+B,KAEAsG,QAAO,SAAUkS,GAChD,OAAqC,MAA7BA,EAAemc,WAA+C,MAA1Bnc,EAAemhB,UAG/DqE,EAAYI,OAbF,2CAAH,sDAkBnBz5B,qBAAU,WACNs5B,EAAc9rB,EAAOhI,MACtB,CAACgI,EAAOhI,KAEX,IAAMgyB,EAAe,CACjB9B,MAAO,CACHvzB,KAAM,OACNwzB,SAAU,IACVC,gBAAiB,UACjBC,YAAa,EACbrc,YAAa,UACb1B,MAAO,CACHge,WAAY,SAGpB74B,MAAO,CACHzD,KAAM,2BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBG,SAAU,CACNz8B,KAAM,yCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,SAGpBI,MAAO,CACH/zB,KAAM,WACNg0B,qBAAsB,CAClBC,MAAO,SAAUC,KAAM,MAE3Bp5B,MAAO,CACHzD,KAAM,GACNu9B,SAAS,IAGjBT,OAAQ,CACJC,UAAW,CACPP,WAAY,OACZD,SAAU,SAGlBS,MAAO,CACHv5B,MAAO,CACHzD,KAAM,2BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBW,IAAK,EACLC,OAAQ,CACJ5e,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIxBa,QAAS,CACLC,aAAc,2BACdC,YAAa,gCAEjBC,UACA,CACIC,SAAS,GAEbC,YAAa,CACT3a,KAAM,CACF6a,OAAQ,CACJH,SAAS,EACT2C,OAAQ,SACRC,OAAQ,EACRC,OAAQ,CACJC,MAAO,CACH9C,SAAS,KAIrB+C,UAAW,EACXF,OAAQ,CACJC,MAAO,CACHC,UAAW,IAGnBC,UAAW,OAGnB3C,QACA,CACIL,SAAS,IAIjB,GAAIpC,EAAS7yB,QAAU,EACnB,OACI,cAAC,EAAD,IAIJ,IAAIk4B,EAAU,YAAI,IAAIrmB,IAAIghB,EAASr5B,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAErE,OACI,sBAAKxjB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,yDAA4B4F,EAAO9Q,KAAnC,KAA2C8Q,EAAO/K,SAAlD,IAA6D+K,EAAOjQ,YAApE,KAAmFiQ,EAAOtL,eAA1F,0BACA,sBAAM2E,KAAK,cAAcgB,QAAO,6DAAwD2F,EAAO9Q,KAA/D,mCAA8F8Q,EAAO/K,SAArG,YAAiH+K,EAAOjQ,YAAxH,aAAwIiQ,EAAOtL,eAA/I,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,mFAAmFC,IAAG,UAAK+Q,EAAO9Q,KAAZ,kBAC9H,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,0DACA,qBAAKA,UAAU,UAAf,0RAGA,qBAAKA,UAAU,UAAf,+JAMZ,cAAC,GAAD,CAAW+3B,WAAYlnB,EAAO9Q,KAAMi4B,SAAUA,IAC7CqF,EAAQ1+B,KAAI,SAACu5B,EAAQr5B,GAAT,OACT,8BACI,cAAC,GAAD,CAAiBk5B,WAAYlnB,EAAO9Q,KAAMi4B,SAAUA,EAAUE,OAAQA,EAAQ2C,aAAcA,EAAch8B,MAAOA,KAD3GA,WAIUI,IAAvBovB,GACG,cAAC,GAAD,CAAWxd,OAAQA,EAAQmnB,SAAUA,EAAU3J,mBAAoBA,QCcxEiP,GAlLU,SAAC,GAAgB,IAAdzsB,EAAa,EAAbA,OAExB,EAAwDhP,oBAAS,GAAjE,mBAAO07B,EAAP,KAA6BC,EAA7B,KACA,EAAwD37B,oBAAS,GAAjE,mBAAO47B,EAAP,KAA6BC,EAA7B,KAEA,OACI,sBAAK19B,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kEAAqC4F,EAAO9Q,KAA5C,KAAoD8Q,EAAO/K,SAA3D,IAAsE+K,EAAOjQ,YAA7E,KAA4FiQ,EAAOtL,eAAnG,0BACA,sBAAM2E,KAAK,cAAcgB,QAAO,kDAA6C2F,EAAO9Q,KAApD,mCAAmF8Q,EAAO/K,SAA1F,YAAsG+K,EAAOjQ,YAA7G,aAA6HiQ,EAAOtL,eAApI,iBAEpC,sBAAKvF,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,0FAA0FC,IAAG,UAAK+Q,EAAO9Q,KAAZ,yBACrI,gCACI,cAAC,GAAD,CAAa8Q,OAAQA,IACrB,sBAAK7Q,UAAU,UAAf,UACI,mDACA,sBAAKA,UAAU,UAAf,iBACQ,uEADR,sIAC6L,iCAAS6Q,EAAO9Q,OAD7M,2GACmU,iCAAS8Q,EAAO9Q,OADnV,OAGA,qBAAKC,UAAU,sBAAf,6PAMZ,qBAAKA,UAAU,SAAf,SACI,gCACI,qBAAKA,UAAU,4DAAf,SACI,+BAAK6Q,EAAO9Q,KAAZ,eAEJ,sBAAKC,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,sDAGuB,OAA7B6Q,EAAO8sB,wBAA2D1+B,IAA7B4R,EAAO8sB,mBAAgE,KAA7B9sB,EAAO8sB,mBACpF,qBAAK39B,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAM6I,EAAO8sB,kBAAmB11B,OAAO,SAASH,IAAI,aAAvD,kCAImB,OAAjC+I,EAAO+sB,4BAAmE3+B,IAAjC4R,EAAO+sB,uBAAwE,KAAjC/sB,EAAO+sB,uBAC5F,qBAAK59B,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAM6I,EAAO+sB,sBAAuB31B,OAAO,SAASH,IAAI,aAA3D,gCAImB,OAAjC+I,EAAOgtB,4BAAmE5+B,IAAjC4R,EAAOgtB,uBAAwE,KAAjChtB,EAAOgtB,uBAC5F,qBAAK79B,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAM6I,EAAOgtB,sBAAuB51B,OAAO,SAASH,IAAI,aAA3D,uCAKpB,sBAAK9H,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,4DAGR,qBAAKA,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsD6I,EAAOb,kBAA7D,gBAAsFa,EAAOX,mBAA7F,sDAAqKjI,OAAO,SAASH,IAAI,aAAhM,uBAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,+DAA0D6I,EAAOb,kBAAjE,gBAA0Fa,EAAOX,mBAAjG,sDAAyKjI,OAAO,SAASH,IAAI,aAApM,2BAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsD6I,EAAOb,kBAA7D,gBAAsFa,EAAOX,mBAA7F,mCAAkJjI,OAAO,SAASH,IAAI,aAA7K,iCAIhB,sBAAK9H,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,8CAGR,qBAAKA,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsD6I,EAAOb,kBAA7D,gBAAsFa,EAAOX,mBAA7F,sCAAqJjI,OAAO,SAASH,IAAI,aAAhL,oCAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsD6I,EAAOb,kBAA7D,gBAAsFa,EAAOX,mBAA7F,sCAAqJjI,OAAO,SAASH,IAAI,aAAhL,oCAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsD6I,EAAOb,kBAA7D,gBAAsFa,EAAOX,mBAA7F,sCAAqJjI,OAAO,SAASH,IAAI,aAAhL,4CAMxB,qBAAK9H,UAAU,SAAf,kGAGA,sBAAKA,UAAU,SAAf,UACI,oBAAIA,UAAU,OAAd,qCADJ,mTAI2B,KAA1B6Q,EAAOitB,gBACJ,qCACI,qBAAK99B,UAAU,4DAAf,SACI,+CAEJ,sBAAKA,UAAU,SAAf,UACI,gEACA,qBAAKA,UAAU,OAAf,SACI,sBAAKA,UAAU,OAAf,UACI,cAAC2L,EAAA,EAAD,CACIjH,QAAS,kBAAM84B,GAAyBD,IACxCpP,gBAAeoP,EAAsBv9B,UAAU,aAFnD,SAEgE,oBAAIA,UAAU,OAAd,SAAsBu9B,EAAuB,sBAAwB,0BACrI,cAACzwB,EAAA,EAAD,CAAUC,GAAIwwB,EAAd,SACI,mCACMA,GACE,qCACI,qBAAKv9B,UAAU,mBAAf,SAEI,wBAAQM,MAAM,kCAAkCT,IAAG,kDAA6CgR,EAAOb,kBAApD,gBAA6Ea,EAAOX,mBAApF,sBAAoHW,EAAOb,kBAA3H,sBAA0Ja,EAAOX,mBAAjK,iBAA4LW,EAAOqd,sBAAnM,+LAAuZ8G,iBAAe,MAG7d,qBAAKh1B,UAAU,iBAAf,mFAU5B,sBAAKA,UAAU,SAAf,UACI,oDACA,qBAAKA,UAAU,OAAf,SACI,sBAAKA,UAAU,OAAf,UACI,cAAC2L,EAAA,EAAD,CACIjH,QAAS,kBAAMg5B,GAAyBD,IACxCtP,gBAAesP,EAAsBz9B,UAAU,aAFnD,SAEgE,oBAAIA,UAAU,OAAd,SAAsBy9B,EAAuB,sBAAwB,0BACrI,cAAC3wB,EAAA,EAAD,CAAUC,GAAI0wB,EAAd,SACI,mCACMA,GACE,qCACI,qBAAKz9B,UAAU,mBAAf,SACI,wBAAQM,MAAM,6BAA6BT,IAAG,kDAA6CgR,EAAOb,kBAApD,gBAA6Ea,EAAOX,mBAApF,sBAAoHW,EAAOb,kBAA3H,sBAA0Ja,EAAOX,mBAAjK,sCAAiNW,EAAOqd,sBAAxN,2LAAwa8G,iBAAe,MAEze,qBAAKh1B,UAAU,iBAAf,+FAYT,KAA1B6Q,EAAOitB,gBACJ,mCACI,kFAAqDjtB,EAAO9Q,cC/IjEg+B,GA5BY,SAAC,GAAgB,IAAdltB,EAAa,EAAbA,OAE1B,EAA0ChP,mBAAS,IAAnD,mBAAOm8B,EAAP,KAAsBC,EAAtB,KAEMC,EAAY,uCAAG,WAAOC,GAAP,SAAAp8B,EAAA,sDACjBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,yCAAwDk3B,EAAWvP,sBACvEhsB,MAAK,SAAAw7B,GACJH,EAAiBG,EAAkB1/B,SALtB,2CAAH,sDAalB,GAJA2E,qBAAU,WACN66B,EAAartB,KACd,CAACA,SAEkB5R,IAAlB++B,EAGA,OACI,8BACI,qBAAK99B,wBAAyB,CAAEC,OAAQvD,aAAYohC,EAAc7nB,mBC6KnEkoB,GAvLgB,WAE3B,IAAMztB,EAASzD,cAEf,EAAwCtL,mBAAS,IAAjD,mBAAOsxB,EAAP,KAAqBmL,EAArB,KAEA,EAA4Bz8B,mBAAS,IAArC,mBAAOgP,EAAP,KAAeC,EAAf,KACA,EAA4CjP,mBAAS,IAArD,mBAAO8tB,EAAP,KAAuBC,EAAvB,KACA,EAAoD/tB,wBAAS5C,GAA7D,mBAAOovB,EAAP,KAA2BkQ,EAA3B,KACA,EAAwD18B,wBAAS5C,GAAjE,mBAAOqvB,EAAP,KAA6BkQ,EAA7B,KAEA,EAAwD38B,mBAAS,IAAjE,mBAAO0yB,EAAP,KAA6BkK,EAA7B,KACA,EAAsD58B,mBAAS,IAA/D,mBAAO2yB,EAAP,KAA4BkK,EAA5B,KAEA,EAAsC78B,oBAAS,GAA/C,mBAAO0sB,EAAP,KAAoBoQ,EAApB,KAEMC,EAAsB,SAACC,EAAmBC,GAE5C,IAAIC,EAAqB,GAWzB,OATkBD,EAAY95B,QAAO,SAAUkS,GAC3C,OAAQA,EAAe3X,oBAAsBs/B,KAGrC5hC,SAAQ,SAAUs7B,GAE1BwG,EAAmB5/B,KAAKo5B,MAGrBwG,GAGLC,EAAwB,SAACH,EAAmBC,GAE9C,IAAIpK,EAAc,GAWlB,OATkBoK,EAAY95B,QAAO,SAAUkS,GAC3C,OAAQA,EAAe3X,oBAAsBs/B,KAGrC5hC,SAAQ,SAAUs7B,GAE1B7D,EAAc6D,EAAShhB,eAGpBmd,GAGLhiB,EAAS,uCAAG,WAAOH,GAAP,eAAAxQ,EAAA,sDAEV8rB,EAAiB,GAErBxrB,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oBAAmCsL,KACvC3P,MAAK,SAAA4P,GAUJ,OARIlI,OAAOC,KAAKiI,EAAW9T,MAAMyG,QAAU,IACvCxF,OAAO+D,SAASsE,KAAO,sCAG3B8I,EAAU0B,EAAW9T,MAErBmvB,EAAiBrb,EAAW9T,KAAKoC,eAE1BuB,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iCACHvI,KAAM,CACF2oB,SAAU7U,EAAW9T,KAAKmK,SAGnCjG,MAAK,SAAAq8B,GAGJ,OAFAT,EAAwBS,EAAwBvgC,MAEzC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mCAAkDsL,QAE1D3P,MAAK,SAAAs8B,GACJ,IAAIC,EAAwB,GAwB5B,OAtBID,EAAmBxgC,KAAKyG,OAAS,IACjC+5B,EAAmBxgC,KAAKzB,SAAQ,SAAAmiC,GACxBA,EAAGC,wBAA0B9sB,EAC7B4sB,EAAsBhgC,KAAK,CAAE0J,GAAIu2B,EAAGv2B,GAAIqoB,SAAUkO,EAAGlO,SAAUpB,YAAasP,EAAGtP,YAAamB,YAAamO,EAAGE,cAAetO,kBAAmBoO,EAAGG,oBAAqBzO,sBAAuBsO,EAAGI,wBAAyBC,4BAA6BL,EAAGM,8BAA+BC,gBAAiBP,EAAGQ,kBAAmB7O,sBAAuBqO,EAAGS,wBAAyBC,mBAAoBV,EAAGW,qBAAsBC,gBAAiBZ,EAAGa,kBAAmBC,sBAAuBd,EAAGe,0BACzdf,EAAGG,sBAAwBhtB,GAClC4sB,EAAsBhgC,KAAK,CAAE0J,GAAIu2B,EAAGv2B,GAAIqoB,SAAUkO,EAAGlO,SAAUpB,YAAasP,EAAGtP,YAAamB,YAAamO,EAAGgB,gBAAiBpP,kBAAmBoO,EAAGC,sBAAuBvO,sBAAuBsO,EAAGiB,0BAA2BZ,4BAA6BL,EAAGkB,gCAAiCX,gBAAiBP,EAAGmB,oBAAqBxP,sBAAuBqO,EAAGoB,0BAA2BV,mBAAoBV,EAAGqB,uBAAwBT,gBAAiBZ,EAAGsB,oBAAqBR,sBAAuBd,EAAGuB,+BAIxfxB,EAAwBA,EAAsBjc,MAAK,SAAUnhB,EAAGshB,GAC5D,OAAIthB,EAAEmvB,SAAW7N,EAAE6N,SAAiB,EAChCnvB,EAAEmvB,SAAW7N,EAAE6N,UAAkB,EAEjCnvB,EAAEkvB,YAAc5N,EAAE4N,YAAoB,EACtClvB,EAAEkvB,YAAc5N,EAAE4N,aAAqB,EAEpC,MAIfrB,EAAkBuP,GAEX98B,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mDAAkEsL,QAE1E3P,MAAK,SAAAg+B,GAEJ,OADArC,EAAsBqC,EAAuBliC,MACtC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,wCAAuDsL,QAE/D3P,MAAK,SAAAi+B,GAKJ,OAJApC,EAAwBoC,EAAyBniC,MAEjDigC,EAAekC,EAAyBniC,KAAKyG,OAAS,GAE/C9C,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,qCAERrE,MAAK,SAAA0E,GAEJ,OADAg3B,EAAgBh3B,EAAmB5I,KAAK6I,OACjClF,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mDAAkE4mB,QAE1EjrB,MAAK,SAAAk+B,GACJ,GAAIA,EAAiBpiC,KAAKyG,OAAS,EAAG,CAClC,IAAI47B,EAAoB,GACT,YAAI,IAAI/pB,IAAI8pB,EAAiBpiC,KAAKC,KAAI,SAAAzB,GAAI,OAAIA,EAAKqC,uBAAqB2jB,OAAOM,UAErFvmB,SAAQ,SAAUC,GACvB6jC,EAAkB5hC,KAAK,CACnB,YAAe6/B,EAAsB9hC,EAAM4jC,EAAiBpiC,MAC5D,kBAAqBxB,EACrB,SAAY0hC,EAAoB1hC,EAAM4jC,EAAiBpiC,WAI/DggC,EAAuBqC,GACvBpC,EAAemC,EAAiBpiC,KAAKyG,OAAS,OA/FxC,2CAAH,sDAwGf,OAJA9B,qBAAU,WACNqP,EAAU9B,EAAOC,UAClB,CAACD,EAAOC,SAEPvG,OAAOC,KAAKsG,GAAQ1L,QAAU,EACtB,cAAC,EAAD,IAIJ,eAAC,WAAD,WACI,6BAAK0L,EAAO9Q,OACZ,qBAAKC,UAAU,0BAAf,SAA0C6Q,EAAOhL,eACjD,cAAC,GAAD,CAAmB+K,OAAQA,EAAQC,OAAQA,EAAQwd,mBAAoBA,EAAoBC,qBAAsBA,EAAsBC,YAAaA,IACpJ,mCAEQ,CACItvB,UAAW,cAAC,GAAD,CAAgB4R,OAAQA,EAAQ6e,kBAAmBC,EAAgBrB,qBAAsBA,EAAsB6E,aAAcA,IACxI,eAAgB,cAAC,GAAD,CAAsBtiB,OAAQA,EAAQwd,mBAAoBA,IAC1E,UAAa,cAAC,GAAD,CAAoBxd,OAAQA,IACzC,SAAY,cAAC,GAAD,CAAmBA,OAAQA,EAAQ6e,kBAAmBC,IAClE,YAAa,cAAC,GAAD,CAAmB9e,OAAQA,EAAQwd,mBAAoBA,IACpE,QAAW,cAAC,GAAD,CAAkBxd,OAAQA,IACrC,QAAW,cAAC,GAAD,CAAkBA,OAAQA,IACrC,QAAW,cAAC,GAAD,CAAkBA,OAAQA,IACrC,OAAU,cAAC,GAAD,CAAiBA,OAAQA,IACnC,eAAgB,cAAC,GAAD,CAAsBA,OAAQA,IAC9C,QAAW,cAAC,GAAD,CAAmBA,OAAQA,EAAQ0jB,qBAAsBA,EAAsBC,oBAAqBA,KACjH5jB,EAAOpL,YCqKlBa,GA7VF,SAAC,GAAoB,IAAlBk2B,EAAiB,EAAjBA,WAEN3rB,EAASzD,cAEf,EAA8CtL,mBAAS,IAAvD,mBAAO4E,EAAP,KAAwBC,EAAxB,KACA,EAAoD7E,mBAAS,IAA7D,mBAAOm/B,EAAP,KAA2BC,EAA3B,KACA,EAAoDp/B,mBAAS,IAA7D,mBAAOq/B,EAAP,KAA2BC,EAA3B,KACA,EAAgEt/B,mBAAS,IAAzE,mBAAOu/B,EAAP,KAAiCC,EAAjC,KACA,EAAwCx/B,mBAAS,IAAjD,mBAAOsxB,EAAP,KAAqBmL,EAArB,KACA,EAAgEz8B,mBAAS,IAAzE,mBAAOy/B,EAAP,KAAiCC,EAAjC,KACA,EAAsD1/B,mBAAS,IAA/D,mBAA4B2/B,GAA5B,WACA,EAAwB3/B,oBAAS,GAAjC,mBAAOsb,EAAP,KAAasQ,EAAb,KAEIgU,OAA6BxiC,EAE3ByiC,EAAmC,uCAAG,WAAOC,GAAP,eAAA5/B,EAAA,sDAClC6/B,EAAoB,CAAC,OAAQ,gBAAiB,gBACpDv/B,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uBACHvI,KAAM,CAAEkjC,kBAAmBA,KAC5Bh/B,MAAK,SAAA0E,GAEJ,OADA25B,EAAsB35B,EAAmB5I,MAClC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAERrE,MAAK,SAAAuE,GAEJ,OADAT,EAAmBS,EAAqBzI,MACjC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gDAA+D06B,EAA/D,WAER/+B,MAAK,SAAAi/B,GAGJ,OAFAL,EAAuBK,EAAmBnjC,MAEnC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,+BACHvI,KAAM,CAAEojC,YAAa,kBAE1Bl/B,MAAK,SAAAm/B,GACJ,GAAIA,EAAkBrjC,KAAM,CACxB,IAAM4vB,EAAuByT,EAAkBrjC,KAE3CsjC,EAAa1T,EAAqBpL,MAAK,SAACnhB,EAAGshB,GAAJ,OAAUA,EAAEiV,UAAYv2B,EAAEu2B,aAAW,GAAGA,UAE7E2J,EAAuB3T,EAAqBtpB,QAAO,SAAUkS,GAC/D,OAAQA,EAAeohB,YAAc0J,KAGzCC,EAAqB/e,MAAK,SAAUnhB,EAAGshB,GACnC,OAAOthB,EAAEsxB,UAAYhQ,EAAEgQ,aAG3BkO,EAA4BU,EAAqBze,UAAUrZ,MAAM,EAAG,SAxCpC,2CAAH,sDA6CzC9G,qBAAU,WACNq+B,EAAoCnF,KACrC,CAAC3rB,EAAQ2rB,IAoCZ,OAlBAp5B,QAAQC,IAAI49B,GAERA,EAAmB77B,OAAS,SAA6BlG,IAAvBiiC,GAA2D,KAAvBA,IACtEC,EAAsBH,EAAmB,GAAGj2B,SAG5Ci2B,EAAmB77B,OAAS,SAAmClG,IAA7BmiC,GAAuE,KAA7BA,IAC5EC,EAA4BL,EAAmB,GAAGj2B,SAGlDi2B,EAAmB77B,OAAS,SAAuBlG,IAAjBk0B,GAA+C,KAAjBA,IAChEmL,EAAgB0C,EAAmB,GAAGz5B,OAGtC+5B,EAAyBn8B,OAAS,IAClCs8B,EAA6BH,EAAyB,IAGtDA,EAAyBn8B,QAAU,EAC3B,cAAC,EAAD,IAGJ,sBAAKnF,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,yHACA,sBAAMf,KAAK,cAAcgB,QAAQ,0JAErC,+CACA,qBAAKlL,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,0FAA0FC,IAAI,8BAC3I,8BACI,qBAAKE,UAAU,UAAf,SAAyB,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYskC,UAEjF,qBAAKlhC,UAAU,mEAAf,SACI,qDAEJ,qBAAKA,UAAU,wBAAwBmb,MAAO,CAAE+mB,SAAU,QAA1D,SACI,qBAAKliC,UAAU,wCAAf,SACKyG,EAAgB9H,KAAI,SAAAsK,GAAW,OAC5B,qBAA0BjJ,UAAU,gDAApC,SACI,qBAAKA,UAAU,8BAAf,SACI,qBAAKA,UAAU,oBAAf,SACI,qBAAKA,UAAU,yCAAf,SACI,uBAAOA,UAAU,kCAAjB,SACI,kCACI,6BACI,qBAAIyxB,QAAQ,IAAZ,UACI,6BAAI,cAAC,IAAD,CAAM/xB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,YAAvD,SAAsE2J,EAAYlJ,SACtF,sBAAKC,UAAU,cAAf,UAA8BiJ,EAAYE,eAA1C,IAA2DF,EAAYG,mBAAvE,IAA4FH,EAAYI,cAAxG,KAAyHJ,EAAYK,oBAArI,YAGR,+BACI,oBAAItJ,UAAU,WAAd,oBACA,qBAAIA,UAAU,WAAd,UAA0BiJ,EAAYk5B,mBAAtC,uBAdlBl5B,EAAYJ,WAyBlC,qBAAK7I,UAAU,4DAAf,SACI,2CAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAI,+EAA+EC,IAAI,uBAElG,sBAAKE,UAAU,wCAAf,UACI,qBAAKA,UAAU,sBAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAR,SAAmD,sIAEvD,sBAAKhJ,UAAU,wCAAf,UACI,qBAAKA,UAAU,mDAAf,SACI,sBAAKA,UAAU,2DAAf,UACI,6BAAI,cAAC,IAAD,CAAMN,GAAG,oCAAT,gCACJ,4DAA8B,uBAA9B,eAGR,qBAAKM,UAAU,mDAAf,SACI,sBAAKA,UAAU,2DAAf,UACI,6BAAI,cAAC,IAAD,CAAMN,GAAG,mCAAT,+BACJ,uEAGR,qBAAKM,UAAU,mDAAf,SACI,sBAAKA,UAAU,2DAAf,UACI,6BAAI,cAAC,IAAD,CAAMN,GAAG,mCAAT,+BACJ,0FAOxB,qBAAKM,UAAU,4DAAf,SACI,oDAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,iFAAiFC,IAAI,yBAElG,qBAAKE,UAAU,wCAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,aAAR,SAAoD,oIAIhE,qBAAKhJ,UAAU,4DAAf,SACI,oEAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,sFAAsFC,IAAI,yBAEvG,sBAAKE,UAAU,wCAAf,UACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,oCAAf,SACI,qBAAKA,UAAU,2DAAf,SACI,6BAAI,mBAAGgI,KAAK,8HAA8HC,OAAO,SAASH,IAAI,aAA1J,wCAGZ,qBAAK9H,UAAU,oCAAf,SACI,qBAAKA,UAAU,2DAAf,SACI,6BAAI,mBAAGgI,KAAK,iIAAiIC,OAAO,SAASH,IAAI,aAA7J,wCAGZ,qBAAK9H,UAAU,oCAAf,SACI,qBAAKA,UAAU,2DAAf,SACI,6BAAI,mBAAGgI,KAAK,iIAAiIC,OAAO,SAASH,IAAI,aAA7J,4CAIhB,sBAAK9H,UAAU,wCAAf,UACI,qBAAKA,UAAU,oCAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAK,+GAA+GC,OAAO,SAASH,IAAI,aAA3I,mCAGZ,qBAAK9H,UAAU,oCAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAK,+GAA+GC,OAAO,SAASH,IAAI,aAA3I,oCAGZ,qBAAK9H,UAAU,oCAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAK,+GAA+GC,OAAO,SAASH,IAAI,aAA3I,uCAIhB,qBAAK9H,UAAU,wCAAf,SACI,qBAAKA,UAAU,oCAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAK,4GAA4GC,OAAO,SAASH,IAAI,aAAxI,wCAO5B,qBAAK9H,UAAU,4DAAf,SACI,+CAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,0FAA0FC,IAAI,yBAE3G,sBAAKE,UAAU,wCAAf,UACI,cAAC2L,EAAA,EAAD,CACIjH,QAAS,kBAAM+oB,GAAStQ,IACxBgR,gBAAehR,EAAMnd,UAAU,aAFnC,SAEgD,oBAAIA,UAAU,OAAd,SAAsBmd,EAAO,sBAAwB,0BACrG,cAACrQ,EAAA,EAAD,CAAUC,GAAIoQ,EAAd,SACI,qBAAKnd,UAAU,mBAAf,SACMmd,GACE,wBAAQ7c,MAAM,6BAA6BT,IAAG,UAAKuhC,GAA4BpM,iBAAe,gBAOpG,KAAhB7B,GACE,qCACI,qBAAKnzB,UAAU,4DAAf,SACI,qEAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,4CAAf,SACI,qBAAKH,IAAI,mFAAmFC,IAAI,2BAEpG,sBAAKE,UAAU,wCAAf,UACI,8BACI,2CAAcyhC,EAA2BlO,aAAzC,IAAwDkO,EAA2BjO,iBAAnF,IAAsGiO,EAA2BhO,iBAErI,6IAGE6N,EAAyBn8B,OAAS,GAChC,sBAAKnF,UAAU,SAAf,UACI,qBAAKA,UAAU,kBAAf,SACI,wBAAOA,UAAU,qDAAjB,UACI,gCACI,+BACI,uBACA,4CACA,oDACA,6CAGR,gCACKshC,EAAyB3iC,KAAI,SAAAyjC,GAAc,OACxC,+BACI,6BACI,cAAC,IAAD,CAAM1iC,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B88B,EAAe5hC,qBAA9C,YAAsE4hC,EAAe1hC,eAArF,YAAuG0hC,EAAe9iC,YAA9H,SAA6I8iC,EAAeriC,SAEhK,6BACI,cAAC,IAAD,CAAML,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C88B,EAAe5hC,sBAAjE,SAA0F4hC,EAAe78B,mBAE7G,+BACK68B,EAAe/O,UADpB,SAGA,+BACK+O,EAAe9O,4BADpB,WAVK8O,EAAev5B,cAkBxC,qBAAK7I,UAAU,sBAAf,SACI,6BAAI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,wBAAuDhJ,UAAU,qDAAzE,kDASpC,qBAAKA,UAAU,kDAAf,uMAGA,qBAAKA,UAAU,gBAAf,SACI,qBAAKA,UAAU,cAAf,SACI,sBAAKA,UAAU,wCAAf,UACI,qBAAKA,UAAU,6CAAf,SACI,qBAAKA,UAAU,gCAAf,SACI,mBAAGgI,KAAK,4BAA4BC,OAAO,SAASH,IAAI,aAAxD,SAAqE,cAACY,EAAA,EAAD,CAAO7I,IAAI,sFAAsFC,IAAI,+BAGlL,qBAAKE,UAAU,6CAAf,SACI,qBAAKA,UAAU,mCAAf,SACI,cAAC,IAAD,CAAMN,GAAG,gDAAT,SAAyD,cAACgJ,EAAA,EAAD,CAAO7I,IAAI,mFAAmF+I,MAAM,OAAO9I,IAAI,4CC3M7LuiC,GA3IW,SAAC,GAAqD,IAAnDC,EAAkD,EAAlDA,QAASC,EAAyC,EAAzCA,SAAUC,EAA+B,EAA/BA,yBAKxCC,EAAS,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAG9H,EAAwB5gC,mBAAS,IAAIlE,KAAK2kC,EAASC,EAAU,IAA7D,mBAAOG,EAAP,KAEA,GAFA,KAE0B7gC,mBAAS6gC,EAAK7kC,aAAxC,mBAAO47B,EAAP,KAAckJ,EAAd,KAEA,EAAgC9gC,mBAAS+gC,EAAmBF,IAA5D,mBAAOG,EAAP,KAAiBC,EAAjB,KASA,SAASF,EAAmBF,GAC1B,IAAMK,EAAY,IAAIplC,KAAK+kC,EAAK3kC,cAAe2kC,EAAK7kC,WAAY,GAAGmlC,SACnE,OAAqB,IAAdD,EAAkB,EAAIA,EAT/B1/B,qBAAU,WAERs/B,EAASD,EAAK7kC,YAEdilC,EAAYF,EAAmBF,MAC9B,CAACJ,EAASC,EAAUG,IAWvB,IAJoBhJ,EAIduJ,EAAgB,SAACnH,GACrB,GAAIA,EAAM,GAAKA,EAAM,GAAI,MAAO,KAChC,OAAQA,EAAM,IACZ,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,QAAS,MAAO,OA0BdoH,EAAc,aAAeX,EAAWD,EACxCa,EAAsB,cAAgBZ,EAAWD,EAEjDc,GAvCc1J,EAuCIgJ,EAAK3kC,eAtCZ,IAAM,GAAK27B,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAxB9C,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IADlD,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAiE1D,OACE,sBAAK15B,UAAU,qBAAqBgN,GAAIk2B,EAAxC,UACE,qBAAKljC,UAAU,4BAAf,SACE,qBAAKA,UAAU,iBAAf,SACE,+BAAKyiC,EAAOhJ,GAAZ,IAAqB6I,SAGzB,sBAAKtiC,UAAU,0BAAf,UAtEqB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAuE5CrB,KAAI,SAAC6e,GAAD,OACpB,qBAAaxd,UAAU,0BAAvB,SACE,iCAASwd,KADDA,MAIXkU,MAAM0R,EAAK3J,IAAUoJ,EAAW,IAAIzlB,KAAK,MAAMze,KAAI,SAAC0kC,EAAGxkC,GAEtD,IAAM2e,EAAI3e,GAASgkC,EAAW,GAC1BS,EAAe,GAEfC,EAAkB,GAatB,OAXI/lB,GAAK,EACP8lB,EAAe,eAEfA,EAAe,cACfC,EAnDsB,SAACC,GAE/B,IAAIC,EAAoBjB,EAAyBx9B,QAAO,SAAUkS,GAChE,OAAQA,EAAewsB,eAAiBF,KAgB1C,OAbAC,EAAkBvgB,MAAK,SAACnhB,EAAGshB,GACzB,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cACjB4d,EAAQF,EAAEtjB,KAAK4F,cAEjB,OAAI2d,EAAQC,GACF,EAEND,EAAQC,EACH,EAEF,KAGFkgB,EAgCmBE,CAAwBnmB,IAEtBrY,OAAS,IAC3Bm+B,EAAe,2BAKjB,qCACGC,EAAgBp+B,QAAU,GACzB,qBAAKnF,UAAWsjC,EAAhB,SACG9lB,EAAI,EAAIA,EAAI,IADoB3e,GAKpC0kC,EAAgBp+B,OAAS,GACxB,eAAC,KAAD,CACE+X,QAAS,SAAAC,GAAI,OACX,qBAAKnd,UAAWsjC,EAAhB,SACG9lB,EAAI,EAAIA,EAAI,IADoB3e,IAIrC0V,SAAS,MACTmJ,qBAAqB,OACrBC,kBAAmBwlB,EARrB,UAUE,qBAAKnjC,UAAU,uBAAf,SAAsC,mDAAsByiC,EAAOhJ,GAA7B,IAAsCjc,EAAGylB,EAAczlB,GAAvD,KAA6D8kB,OACnG,qBAAKtiC,UAAU,qBAAf,SACIujC,EAAgBp+B,OAAS,GACzB,8BACGo+B,EAAgB5kC,KAAI,SAACy5B,EAAWv5B,GAAZ,OACnB,8BACE,cAAC,IAAD,CAAMa,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCovB,EAAU94B,WAA7C,qBAAoE84B,EAAUjvB,eAA9E,YAAgGivB,EAAUhvB,mBAA1G,YAAgIgvB,EAAU/uB,eAAlJ,SAAoK+uB,EAAUr4B,QADtKlB,0BCzDrB+kC,GAjEE,SAAC,GAAoB,IAAlBrH,EAAiB,EAAjBA,WAChB,EAA0B16B,mBAAS06B,EAAWv/B,MAAM,MAApD,mBAAO6mC,EAAP,KAAcC,EAAd,KACA,EAAkDjiC,mBAAS,IAA3D,mBAAOkiC,EAAP,KAA0BC,EAA1B,KAEMC,EAA0B,uCAAG,WAAOtC,GAAP,SAAA5/B,EAAA,sDAC/BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oCAAmD06B,KAEvD/+B,MAAK,SAAAshC,GACJF,EAAqBE,EAAiBxlC,SANX,2CAAH,sDAU1BylC,EAA8B,SAAC1K,GAKjC,OAJgBsK,EAAkB/+B,QAAO,SAAUkS,GAC/C,OAAQA,EAAektB,iBAAmB3K,MAWlD,OALAp2B,qBAAU,WACN4gC,EAA2B1H,GAC3BuH,EAASvH,EAAWv/B,MAAM,QAC3B,CAACu/B,IAGA,sBAAKv8B,UAAU,YAAf,UACI,gCACI,qBAAKA,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,iFAAiFC,IAAI,8BAClI,gCACI,yDACA,sBAAKE,UAAU,UAAf,UACI,qBAAIA,UAAU,gBAAd,UAA+Bu8B,EAA/B,aADJ,4LAMR,qBAAKv8B,UAAU,wBAAwBmb,MAAO,CAAE+mB,SAAU,QAA1D,SACI,sBAAKliC,UAAU,wCAAf,UACI,qBAAKA,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,GAAIC,yBAA0B2B,EAA4B,QAE9G,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,GAAIC,yBAA0B2B,EAA4B,QAE9G,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE7G,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE7G,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE7G,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAmBsiC,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,gBC2TlHE,GA/WW,WAEtB,IAAMzzB,EAASzD,cAEf,EAA0DtL,mBAAS,IAAnE,mBAAOyiC,EAAP,KAA8BC,EAA9B,KACA,EAA4C1iC,mBAAS,IAArD,mBAAO2iC,EAAP,KAAuBC,EAAvB,KACA,EAAwC5iC,mBAAS,IAAjD,mBAAOsxB,EAAP,KAAqBmL,EAArB,KAEA,EAAsCz8B,mBAAS,uCAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAoCzgB,mBAAS,IAA7C,mBAAO6iC,EAAP,KAAmBC,EAAnB,KACA,EAAoC9iC,mBAAS,IAA7C,mBAAO+iC,EAAP,KAAmBC,EAAnB,KACA,EAAgDhjC,mBAAS,IAAzD,mBAAOijC,EAAP,KAAyBC,EAAzB,KACA,EAA8CljC,mBAAS,iBAAvD,mBAAOmjC,EAAP,KAAwBC,EAAxB,KACA,EAAwCpjC,mBAAS,IAAjD,mBAAOqjC,EAAP,KAAqBC,EAArB,KACA,EAAkCtjC,mBAAS,OAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KAEM0iB,EAAuB,uCAAG,WAAOC,GAAP,SAAAtjC,EAAA,sDAC5BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,+BACHvI,KAAM,CAAEojC,YAAa,SACtBl/B,MAAK,SAAAm/B,GACJ,GAAIA,EAAkBrjC,KAAM,CACxB,IAAM4vB,EAAuByT,EAAkBrjC,KAE/C,GAAI4vB,EAAqBnpB,OAAS,EAAG,CACjC,IAAImgC,EAAehX,EAAqBpL,MAAK,SAACnhB,EAAGshB,GAAJ,OAAUA,EAAEiV,UAAYv2B,EAAEu2B,aAAW,GAElFmM,EAAkBa,EAAa/R,aAAe,IAAM+R,EAAa9R,iBAAmB,IAAM8R,EAAa7R,aAEvG,IAAIuO,EAAasD,EAAahN,UAExB2J,EAAuB3T,EAAqBtpB,QAAO,SAAUkS,GAC/D,OAAQA,EAAeohB,YAAc0J,KAGrCC,EAAqB98B,OAAS,IAC9B88B,EAAqB/e,MAAK,SAAUnhB,EAAGshB,GACnC,OAAOA,EAAEgQ,UAAYtxB,EAAEsxB,aAG3BkR,EAAyBtC,KAKrC,OAAO5/B,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,qCAERrE,MAAK,SAAA0E,GACJg3B,EAAgBh3B,EAAmB5I,KAAK6I,UAnChB,2CAAH,sDAuC7BlE,qBAAU,SAACuN,GACPw0B,MACD,CAACx0B,IAsKJ,OAAI0zB,EAAsBn/B,QAAU,EAE5B,cAAC,EAAD,IAIA,sBAAKnF,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,+FACA,sBAAMf,KAAK,cAAcgB,QAAQ,+FAErC,sBAAKlL,UAAU,OAAf,UACI,qBAAKA,UAAU,qBAAf,SAAoC,qBAAKH,IAAI,mFAAmFC,IAAI,wCACpI,gCACI,mEACA,sBAAKE,UAAU,UAAf,eACuBf,IAAjBk0B,GAA+C,MAAjBA,GAC5B,qBAAInzB,UAAU,gBAAd,4BAA8CwkC,UAE/BvlC,IAAjBk0B,GAA+C,MAAjBA,GAC5B,qSAEel0B,IAAjBk0B,GAA+C,MAAjBA,GAC5B,wJAKGl0B,IAAjBk0B,GAA+C,MAAjBA,GAC5B,sBAAKnzB,UAAU,YAAf,UACI,qBAAKA,UAAU,gBAAf,SACI,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAazH,SAnMrD,SAACyE,EAAQC,GAExB,IAAI8D,EAAe,GAEfX,EAAY,GAEhBkiB,EAAc,IACdE,EAAc,IACdE,EAAoB,IACpBE,EAAmB,IACnBE,EAAgB,IAED,MAAX9lB,GAA6B,MAAXA,GAClB+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EACrB,KAEXd,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBkiB,EAAc,kBAEI,MAAXtlB,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAC7C4/B,EAAYxjC,EAAE+D,SAASH,cAAe6/B,EAAYniB,EAAEvd,SAASH,cAEjE,OAAI4/B,EAAYC,GAAqB,EACjCD,EAAYC,EAAoB,EAEhCliB,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EAErB,KAEXd,EAAY,OACM,MAAXpD,IACP+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAC7C4/B,EAAYxjC,EAAE+D,SAASH,cAAe6/B,EAAYniB,EAAEvd,SAASH,cAEjE,OAAI4/B,EAAYC,EAAoB,EAChCD,EAAYC,GAEZliB,EAAQC,GAFyB,EAGjCD,EAAQC,EAAgB,EAErB,KAGXd,EAAY,QAGhBoiB,EAAc,kBAEI,MAAXxlB,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAC7C4/B,EAAYxjC,EAAE+D,SAASH,cAAe6/B,EAAYniB,EAAEvd,SAASH,cAC7D8/B,EAAkB1jC,EAAEwD,eAAeI,cAAe+/B,EAAkBriB,EAAE9d,eAAeI,cAEzF,OAAI8/B,EAAkBC,GAA2B,EAC7CD,EAAkBC,EAA0B,EAE5CH,EAAYC,GAAqB,EACjCD,EAAYC,EAAoB,EAEhCliB,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EAErB,KAEXd,EAAY,OACM,MAAXpD,IACP+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAC7C4/B,EAAYxjC,EAAE+D,SAASH,cAAe6/B,EAAYniB,EAAEvd,SAASH,cAC7D8/B,EAAkB1jC,EAAEwD,eAAeI,cAAe+/B,EAAkBriB,EAAE9d,eAAeI,cAEzF,OAAI8/B,EAAkBC,EAA0B,EAC5CD,EAAkBC,GAElBH,EAAYC,GAFiC,EAG7CD,EAAYC,EAAoB,EAEhCliB,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EAErB,KAEXd,EAAY,QAGhBsiB,EAAoB,kBAEF,MAAX1lB,GAA6B,MAAXA,GACV,MAAXA,GACA+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,OAAIthB,EAAEsxB,UAAYhQ,EAAEgQ,UAAkB,EAClCtxB,EAAEsxB,UAAYhQ,EAAEgQ,WAAmB,EAEnCtxB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,MAAXpD,IACP+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,OAAIthB,EAAEsxB,UAAYhQ,EAAEgQ,UAAkB,EAClCtxB,EAAEsxB,UAAYhQ,EAAEgQ,WAAmB,EAEnCtxB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhBwiB,EAAmB,kBACD,MAAX5lB,GAA6B,OAAXA,IACV,MAAXA,GACA+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,OAAIthB,EAAEuxB,4BAA8BjQ,EAAEiQ,4BAAoC,EACtEvxB,EAAEuxB,4BAA8BjQ,EAAEiQ,6BAAqC,EAEvEvxB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,OACM,OAAXpD,IACP+D,EAAekhB,EAAsBphB,MAAK,SAAUnhB,EAAGshB,GACnD,OAAIthB,EAAEuxB,4BAA8BjQ,EAAEiQ,4BAAoC,EACtEvxB,EAAEuxB,4BAA8BjQ,EAAEiQ,6BAAqC,EAEvEvxB,EAAEhC,KAAOsjB,EAAEtjB,KAAa,EACxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAGX0iB,EAAY,QAGhB0iB,EAAgB,kBAGpB7iB,EAAe,YAAchD,EAAIrX,OAAOpD,WACxC6d,EAAaD,IAkC6EzV,GAAG,0BAAzE,UACI,cAACuS,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,iCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,mCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,mCACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,wCAAwD,IAAxD,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,uCAAuD,IAAvD,cACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,4BAA4C,IAA5C,aACA,eAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,KAAxB,2BAA4C,IAA5C,mBAGR,qBAAK9a,UAAU,6BAAf,SACI,wBAAOA,UAAU,uCAAjB,UACI,gCACI,+BACI,oBAAIA,UAAS,UAAoB,KAAf0kC,EAAoB,uBAAyB,IAA/D,SACI,+BACqB,KAAfA,GAAmC,QAAdjiB,GACnB,cAAC,IAAD,CAAiB7V,KAAM+4B,MAEV,KAAfjB,GAAmC,SAAdjiB,GACnB,cAAC,IAAD,CAAiB7V,KAAMg5B,WAInC,oBAAI5lC,UAAS,UAAoB,KAAf4kC,EAAoB,uBAAyB,IAA/D,SACI,8CAEqB,KAAfA,GAAmC,QAAdniB,GACnB,cAAC,IAAD,CAAiB7V,KAAM+4B,MAEV,KAAff,GAAmC,SAAdniB,GACnB,cAAC,IAAD,CAAiB7V,KAAMg5B,WAInC,oBAAI5lC,UAAS,UAA0B,KAArB8kC,EAA0B,uBAAyB,IAArE,SACI,oDAE2B,KAArBA,GAAyC,QAAdriB,GACzB,cAAC,IAAD,CAAiB7V,KAAM+4B,MAEJ,KAArBb,GAAyC,SAAdriB,GACzB,cAAC,IAAD,CAAiB7V,KAAMg5B,WAInC,oBAAI5lC,UAAS,UAAyB,KAApBglC,EAAyB,uBAAyB,IAApE,SACI,4DAE0B,KAApBA,GAAwC,QAAdviB,GACxB,cAAC,IAAD,CAAiB7V,KAAM+4B,MAEL,KAApBX,GAAwC,SAAdviB,GACxB,cAAC,IAAD,CAAiB7V,KAAMg5B,WAInC,oBAAI5lC,UAAS,UAAsB,KAAjBklC,EAAsB,uBAAyB,IAAjE,SACI,gDAEuB,KAAjBA,GAAqC,QAAdziB,GACrB,cAAC,IAAD,CAAiB7V,KAAM+4B,MAER,KAAjBT,GAAqC,SAAdziB,GACrB,cAAC,IAAD,CAAiB7V,KAAMg5B,gBAM3C,gCACKtB,EAAsB3lC,KAAI,SAAAyjC,GAAc,OACrC,+BACI,oBAAIpiC,UAAW0kC,EAAf,SACI,cAAC,IAAD,CAAMhlC,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B88B,EAAe5hC,qBAA9C,YAAsE4hC,EAAe1hC,eAArF,YAAuG0hC,EAAe9iC,YAA9H,SAA6I8iC,EAAeriC,SAEhK,oBAAIC,UAAW4kC,EAAf,SACI,eAAC,IAAD,CAAMllC,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC88B,EAAe1hC,gBAA3D,UAA8E0hC,EAAet8B,SAA7F,IAAwGs8B,EAAexhC,iBAE3H,oBAAIZ,UAAW8kC,EAAf,SACI,cAAC,IAAD,CAAMplC,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C88B,EAAe5hC,sBAAjE,SAA0F4hC,EAAe78B,mBAE7G,qBAAIvF,UAAWglC,EAAf,UACkC,OAA7B5C,EAAe/O,WACZ,qCAAG+O,EAAe/O,UAAlB,SAE0B,OAA7B+O,EAAe/O,WACZ,6CAGR,qBAAIrzB,UAAWklC,EAAf,UACoD,OAA/C9C,EAAe9O,6BACZ,qCAAG8O,EAAe9O,4BAAlB,SAE4C,OAA/C8O,EAAe9O,6BACZ,+CAvBH8O,EAAev5B,qBC5QjDg9B,GA/DC,WAEZ,IAAMj1B,EAASzD,cAEf,EAAwDtL,wBAAS5C,GAAjE,mBAAO6mC,EAAP,KAA6BC,EAA7B,KACA,EAA0BlkC,wBAAS5C,GAAnC,mBAAO4W,EAAP,KAAcC,EAAd,KAEMkwB,EAAmB,uCAAG,sBAAAjkC,EAAA,sDACxBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,+BACJrE,MAAK,SAAA0E,GACJy+B,EAAwBz+B,EAAmB5I,SALvB,2CAAH,qDASnBqX,EAAW,uCAAG,WAAOC,GAAP,SAAAjU,EAAA,sDAChBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uCAAsD+O,KAC1DpT,MAAK,SAAAqT,GACJH,EAASG,EAASvX,SALN,2CAAH,sDAiBjB,OARA2E,qBAAU,gBACSpE,IAAX2R,QAAwC3R,IAAhB2R,EAAOpL,KAC/BuQ,EAAYnF,EAAOpL,MAEnBwgC,MAEL,CAACp1B,SAEyB3R,IAAzB6mC,QAAgD7mC,IAAV4W,EAElC,cAAC,EAAD,IAIA,sBAAK7V,UAAU,YAAf,eAC8Bf,IAAzB6mC,GACG,qCACI,eAAC76B,EAAA,EAAD,WACI,gCAAQ66B,EAAqBv+B,QAC7B,sBAAM2C,KAAK,cAAcgB,QAAO,UAAK46B,EAAqBG,kBAE9D,qBAAK/lC,wBAAyB,CAAEC,OAAQvD,aAAYkpC,EAAqB/6B,oBAGtE9L,IAAV4W,GACG,qCACI,eAAC5K,EAAA,EAAD,WACI,gCAAQ4K,EAAMtO,QACd,sBAAM2C,KAAK,cAAcgB,QAAO,UAAK2K,EAAMowB,kBAE/C,qBAAK/lC,wBAAyB,CAAEC,OAAQvD,aAAYiZ,EAAMM,uBCjBnE0d,GApCc,WAEzB,IAAMnwB,EAAWC,cAEjBR,QAAQC,IAAIM,GAEZ,IAAMwiC,EAAoBzoC,eAEtBiwB,OAAczuB,EAYlB,OAVIyE,EAASkE,SAASgS,SAAS,YAC3B8T,EAAc,WAEThqB,EAASkE,SAASgS,SAAS,uBAChC8T,EAAc,oBAEThqB,EAASkE,SAASgS,SAAS,aAChC8T,EAAc,WAId,cAAC,WAAD,UACI,mCAEQ,CACIzuB,UAAW,cAAC,GAAD,CAAMs9B,WAAY2J,IAC7B,SAAY,cAAC,GAAD,CAAU3J,WAAY2J,IAClC,kBAAqB,cAAC,GAAD,IACrB,QAAW,cAAC,GAAD,KACbxY,QC4CPyY,GA7EI,WAEjB,IAAMv1B,EAASzD,cAEf,EAAsCtL,mBAAS,IAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAsCzgB,mBAAS,IAA/C,mBAAO4sB,EAAP,KAAoBC,EAApB,KAEMyN,EAAgB1+B,eAEhB2oC,EAAgBx1B,EAAOmK,IA8B7B,OA5BA1X,qBAAU,WAGR,IAAIsrB,EACJ,OAHAD,EAAe9d,EAAOpL,MAGdoL,EAAOpL,MACb,IAAK,6BACHmpB,EAAkB,oBAClB,MACF,IAAK,SACHA,EAAkB,oBAClB,MACF,IAAK,sBACHA,EAAkB,kBAClB,MACF,IAAK,UACHA,EAAkB,UAClB,MACF,IAAK,sBACHA,EAAkB,QAClB,MACF,QACEA,EAAkB,gBAGtBrM,EAAeqM,KAEd,CAAC/d,IAGF,gCACE,qBAAK5Q,UAAU,oCAAf,SACE,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAS,UAAsB,KAAhByuB,QAAsCxvB,IAAhBwvB,EAA6B,UAAY,IAAlF,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,GAA3C,6BAEF,oBAAIpmC,UAAS,UAAqB,+BAAhByuB,EAA+C,UAAY,IAA7E,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,+BAAR,iCAEF,oBAAIpmC,UAAS,UAAqB,WAAhByuB,EAA2B,UAAY,IAAzD,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,mBAA2DjK,GAAnE,iCAEF,oBAAIn8B,UAAS,UAAqB,wBAAhByuB,EAAwC,UAAY,IAAtE,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,wBAAR,+BAEF,oBAAIpmC,UAAS,UAAqB,YAAhByuB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,YAAR,uBAEF,oBAAIpmC,UAAS,UAAqB,wBAAhByuB,EAAwC,UAAY,IAAtE,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,wBAAR,0BAIN,qBAAKpmC,UAAU,uBAAf,SACE,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAarV,GAAG,0BAA0BhN,UAAU,6CAAvF,UACE,cAACuf,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,GAA9D,2BACA,cAAC7mB,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,+BAA3B,+BACA,cAAC7mB,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,mBAA2DjK,GAAtF,+BACA,cAAC5c,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,wBAA3B,6BACA,cAAC7mB,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,YAA3B,qBACA,cAAC7mB,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,wBAA3B,4BCAKC,GAxES,SAAC,GAAgC,IAA9Bp9B,EAA6B,EAA7BA,YAAaq9B,EAAgB,EAAhBA,UAElCC,EAAa,kBAOjB,OANID,IACFC,EAAa,oBAMb,gCACE,qBAAIvmC,UAAS,oBAAesmC,EAAY,cAAgB,IAAxD,UAA+Dr9B,EAAYC,iBAA3E,IAA8FD,EAAYE,eAA1G,IAA2HF,EAAYG,mBAAvI,IAA4JH,EAAYI,cAAxK,IAAwLJ,EAAYK,oBAApM,IAA0Ni9B,KACzNt9B,EAAYovB,OAAS,aACpB,qCACE,sBAAKr4B,UAAU,mBAAf,UACE,sBAAKA,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,sEACxE,qBAAKA,UAAU,sBAAf,SACE,qBAAIA,UAAU,qBAAd,UAAoCiJ,EAAYk5B,mBAAhD,aAGJ,sBAAKniC,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,4DACxE,qBAAKA,UAAU,sBAAf,SACE,qBAAIA,UAAU,qBAAd,UAAoCiJ,EAAYu9B,kBAAhD,WAAwEv9B,EAAYw9B,eAApF,mBAIN,sBAAKzmC,UAAU,mBAAf,UACE,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,wEAAmEtC,aAA6B0L,EAAYy9B,uBAAyB99B,MAAM,OAAO9I,IAAI,wBAElK,sBAAKE,UAAU,iBAAf,UACE,4CACCiJ,EAAY09B,uBAGjB,sBAAK3mC,UAAU,qBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,wEAAmE1C,aAAmB8L,EAAY29B,6BAA+Bh+B,MAAM,OAAO9I,IAAI,8BAE9J,sBAAKE,UAAU,iBAAf,UACE,iDACCiJ,EAAY49B,6BAGjB,sBAAK7mC,UAAU,qBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,wEAAmEvC,aAAsB2L,EAAY69B,oBAAsBl+B,MAAM,OAAO9I,IAAI,qBAExJ,sBAAKE,UAAU,iBAAf,UACE,wCACCiJ,EAAY89B,oBAGjB,sBAAK/mC,UAAU,qBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,wEAAmErC,aAA2ByL,EAAY+9B,0BAA4Bp+B,MAAM,OAAO9I,IAAI,2BAEnK,sBAAKE,UAAU,iBAAf,UACE,8CACCiJ,EAAYg+B,oCCiJdC,GA7Me,SAAC,GAAmC,IAAjChP,EAAgC,EAAhCA,OAAQ6L,EAAwB,EAAxBA,kBAEjCoD,EAAW3iB,mBAEXyT,EAAmB,WAEvB,IAAIE,EAAgB,GAChBsL,EAAoB,GACpB2D,EAAsB,GACtBC,EAAuB,EA2B3B,OAzB8BtD,EAAkB7gB,MAAK,SAAUnhB,EAAGshB,GAChE,OAAIthB,EAAE8G,GAAKwa,EAAExa,IAAc,EACvB9G,EAAE8G,GAAKwa,EAAExa,GAAa,EAEnB,KAIe5L,SAAQ,SAAUs7B,GACxC,IAAIC,EAAe,EAEfD,EAAS6L,eAAiB,IAC5B5L,EAAe,GAGjBiL,EAAkBtkC,KAAK,CAACxB,KAAK+6B,IAAI,KAAOF,EAAcG,OAAOJ,EAAS6L,gBAAkB,EAAG7L,EAASmL,cAAenL,EAAS4J,qBAE5HkF,GAA8C9O,EAAS4J,mBAEvDiF,EAAoBjoC,KAAK,CAACxB,KAAK+6B,IAAI,KAAOF,EAAcG,OAAOJ,EAAS6L,gBAAkB,EAAG7L,EAASmL,cAAe2D,OAGvHlP,EAAa,2BAAQA,GAAR,IAAuB,kBAAqBsL,IACzDtL,EAAa,2BAAQA,GAAR,IAAuB,oBAAuBiP,KAKzDE,EAA8B,GAElCA,EAA4BnoC,KAAK,CAC/B,KAAQ+4B,EACR,KAAQD,IAAmBwL,oBAG7B,IAAMpuB,EAAU,CAEdyjB,OAAQ,CAAC,WACTC,MAAO,CACLvzB,KAAM,SACNwzB,SAAU,IACVC,gBAAiB,UACjBC,YAAa,EACbrc,YAAa,UACb1B,MAAO,CACLge,WAAY,SAGhB74B,MAAO,CACLzD,KAAM,kCACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGhBG,SAAU,CACRz8B,KAAM,yCACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,SAGhBI,MAAO,CACL/zB,KAAM,WACNg0B,qBAAsB,CACpBC,MAAO,SAAUC,KAAM,MAEzBp5B,MAAO,CACLzD,KAAM,GACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIlBQ,OAAQ,CACNC,UAAW,CACTP,WAAY,OACZD,SAAU,SAGdS,MAAO,CACLv5B,MAAO,CACLzD,KAAM,iCACNse,MAAO,CACLie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGhBW,IAAK,GAEPE,QAAS,CACPC,aAAc,2BACdC,YAAa,gCAEfC,UACA,CACEC,SAAS,GAEXC,YAAa,CACXC,OAAQ,CACNC,OAAQ,CACNH,SAAS,KAIfI,OAAQ8M,EACR7M,QACA,CACEL,SAAS,IAqDb,OAAI2J,EAAkB5+B,QAAU,EAE5B,cAAC,EAAD,IAKA,gCACE,qBAAKnF,UAAU,iEAAf,SACE,mEAEF,qBAAIA,UAAU,6BAAd,UAA4Ck4B,EAA5C,aACA,sBAAKl4B,UAAU,uDAAf,UACE,qBAAKA,UAAU,wDAAf,SACE,wBAAQA,UAAU,qDAAqD0E,QAvCvD,WACxB,QAA+BzF,IAA3BkoC,EAAS16B,QAAQssB,MAAqB,CAExC,IAAIwO,EAA0B,GAE9BA,EAAwBpoC,KAAK,CAC3B,KAAQ+4B,EACR,KAAQD,IAAmBwL,oBAG7B0D,EAAS16B,QAAQssB,MAAMyO,OAAO,CAC5BlnC,MAAO,CACLzD,KAAM,mCAERg9B,MAAO,CACLv5B,MAAO,CACLzD,KAAM,kCAERi9B,IAAK,GAEPU,OAAQ+M,MAmBJ,6BAEF,qBAAKvnC,UAAU,uDAAf,SACE,wBAAQA,UAAU,qDAAqD0E,QAlEtD,WACzB,QAA+BzF,IAA3BkoC,EAAS16B,QAAQssB,MAAqB,CACxC,IAAI0O,EAA4B,GAEhCA,EAA0BtoC,KAAK,CAC7B,KAAQ+4B,EACR,KAAQD,IAAmBmP,sBAG7BD,EAAS16B,QAAQssB,MAAMyO,OAAO,CAC5BlnC,MAAO,CACLzD,KAAM,iCAERg9B,MAAO,CACLv5B,MAAO,CACLzD,KAAM,sCAERi9B,IAAK,GAEPU,OAAQiN,MA+CJ,4CAGJ,qBAAKznC,UAAU,OAAf,SACE,cAAC,KAAD,CAAiB06B,WAAYC,KAAYtlB,QAASA,EAASqyB,kBAAkB,EAAMte,IAAK+d,UCtKnFQ,GAlCY,SAAC,GAA2B,IAS/CC,EAT8C,EAAxB7D,kBAEsB7gB,MAAK,SAAUnhB,EAAGshB,GAC9D,OAAIthB,EAAE8G,GAAKwa,EAAExa,GAAa,EACtB9G,EAAE8G,GAAKwa,EAAExa,IAAc,EAEpB,KAGyCsB,MAAM,EAAG,GAE7D,OAAIy9B,EAAsBziC,QAAU,EAE5B,cAAC,EAAD,IAKA,gCACI,qBAAKnF,UAAU,iEAAf,SACI,sDAEJ,qBAAKA,UAAU,OAAf,SACK4nC,EAAsBjpC,KAAI,SAAAsK,GAAW,OAClC,8BACI,6BAAI,eAAC,IAAD,CAAMvJ,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,qBAAsE2J,EAAYE,eAAlF,YAAoGF,EAAYG,mBAAhH,YAAsIH,EAAYI,eAA1J,UAA4KJ,EAAYC,iBAAxL,IAA2MD,EAAYE,eAAvN,IAAwOF,EAAYG,mBAApP,IAAyQH,EAAYI,cAArR,KAAsSJ,EAAYK,oBAAlT,KAAyUL,EAAYk5B,mBAArV,YADEl5B,EAAYJ,aCsF/Bg/B,GA3GY,SAAC,GAAgC,IAA9B5+B,EAA6B,EAA7BA,YAAaq9B,EAAgB,EAAhBA,UAEzC,EAAkDzkC,mBAAS,IAA3D,mBAAOimC,EAAP,KAA0BC,EAA1B,KACA,EAA0DlmC,mBAAS,IAAnE,mBAAOmmC,EAAP,KAA8BC,EAA9B,KAEMC,EAAsC,uCAAG,WAAOC,GAAP,SAAApmC,EAAA,sDAC7CM,IAAM,CACJC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,sCAAqDkhC,KACvDvlC,MAAK,SAAAwlC,GAEN,OADAL,EAAqBK,EAAiB1pC,MAC/B2D,IAAM,CACXC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+CgC,EAAY3J,WAA3D,YAAyE2J,EAAYovB,OAArF,YAA+FpvB,EAAYqvB,gBAE/G11B,MAAK,SAAAylC,GACNJ,EAAyBI,EAAqB3pC,MAC9CyE,QAAQC,IAAI4kC,MAZ+B,2CAAH,sDAgB5C3kC,qBAAU,WACR6kC,EAAuCj/B,EAAYq/B,UAClD,CAACr/B,EAAYq/B,SAEhB,IAAIC,EAAiB,IACjBC,EAAkB,IAClBC,EAAwB,MACxBC,EAAyB,MAE7B,QAA0BzpC,IAAtB6oC,EAAiC,CACnC,IAAIa,EAAqBb,EAAkBc,MAAK,SAAA1rC,GAAI,MAAuB,MAAnBA,EAAK2rC,kBAClC5pC,IAAvB0pC,IACFJ,EAAiBI,EAAkB,UAAgB,MAGrD,IAAIG,EAAsBhB,EAAkBc,MAAK,SAAA1rC,GAAI,MAAuB,OAAnBA,EAAK2rC,kBAClC5pC,IAAxB6pC,IACFN,EAAkBM,EAAmB,UAAgB,MAGvD,IAAIC,EAA4BjB,EAAkBc,MAAK,SAAA1rC,GAAI,MAAuB,iBAAnBA,EAAK2rC,kBAClC5pC,IAA9B8pC,IACFN,EAAwBM,EAAyB,UAAgB,MAGnE,IAAIC,EAA6BlB,EAAkBc,MAAK,SAAA1rC,GAAI,MAAuB,kBAAnBA,EAAK2rC,kBAClC5pC,IAA/B+pC,IACFN,EAAyBM,EAA0B,UAAgB,MAIvE,OACE,iCACK1C,GACD,qCACE,qBAAKtmC,UAAU,iEAAf,SACE,yEAEF,sBAAKA,UAAU,mBAAf,UACE,sBAAKA,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,qDACxE,qBAAKA,UAAU,sBAAf,SACE,oBAAIA,UAAU,qBAAd,SAAoCuoC,SAGxC,sBAAKvoC,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,sDACxE,qBAAKA,UAAU,sBAAf,SACE,oBAAIA,UAAU,qBAAd,SAAoCwoC,SAGxC,sBAAKxoC,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,iDACxE,qBAAKA,UAAU,sBAAf,SACE,oBAAIA,UAAU,qBAAd,SAAoCyoC,SAGxC,sBAAKzoC,UAAU,wBAAf,UACE,qBAAKA,UAAU,yDAAf,SAAwE,iDACxE,qBAAKA,UAAU,sBAAf,SACE,oBAAIA,UAAU,qBAAd,SAAoC0oC,eAM5CpC,GACA,qBAAKtmC,UAAU,sDAAf,SACE,iEAAoCiJ,EAAYC,iBAAhD,IAAmED,EAAYE,eAA/E,IAAgGF,EAAYG,mBAA5G,IAAiIH,EAAYI,mBAG/I2+B,EAAsB7iC,OAAS,GAC/B,8BACE,cAAC,GAAD,CAAoB4+B,kBAAmBiE,MAG3C,8BACE,cAAC,GAAD,CAAuB9P,OAAQjvB,EAAYovB,OAAQ0L,kBAAmBiE,MAExE,qBAAKhoC,UAAU,UAAf,SACE,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,+BAAwFU,UAAU,qDAA1G,sCCeOipC,GAhHW,SAAC,GAAwC,IAAtChgC,EAAqC,EAArCA,YAAa2H,EAAwB,EAAxBA,OAAQ01B,EAAgB,EAAhBA,UAE9C,EAAoCzkC,wBAAS5C,GAA7C,mBAAOiqC,EAAP,KAAmBC,EAAnB,KAEMC,EAAgB,uCAAG,WAAOC,EAAkB9M,GAAzB,SAAAx6B,EAAA,sDACrBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,yCAAwDoiC,EAAxD,YAA4E9M,KAChF35B,MAAK,SAAA0mC,GACJH,EAAcG,EAAe5qC,SALZ,2CAAH,wDAStB2E,qBAAU,gBACgBpE,IAAlB2R,EAAOsnB,OACPkR,EAAiBngC,EAAY3J,WAAYsR,EAAOsnB,QAEhDiR,EAAclgC,KAEnB,CAACA,EAAa2H,EAAOsnB,SA0BxB,YAAmBj5B,IAAfiqC,EAEI,cAAC,EAAD,IAIA,gCACI,eAACj+B,EAAA,EAAD,WACI,0CAAWi+B,EAAWnpC,KAAtB,cAAgCmpC,EAAW//B,eAA3C,YAA6D+/B,EAAW9/B,mBAAxE,YAA8F8/B,EAAW7/B,cAAzG,cAA4Hi9B,EAAY,UAAY,SAApJ,yCAA6L4C,EAAWljC,SAAxM,kBACA,sBAAMkE,KAAK,cAAcgB,QAAO,UAAKo7B,EAAY,UAAY,8BAA7B,8CAAgG4C,EAAWljC,SAA3G,sBAAiIsgC,EAAY,2DAA6D,uCAA1M,OAChC,sBAAMx+B,IAAI,YAAYE,KAAMrI,OAAO+D,SAASsE,UAEhD,cAAC,GAAD,CAAiBiB,YAAaigC,EAAY5C,UAAWA,IACnDA,GACE,qBAAKtmC,UAAU,sDAAf,SACI,iEAAoCkpC,EAAWhgC,iBAA/C,IAAkEggC,EAAW//B,eAA7E,IAA8F+/B,EAAW9/B,mBAAzG,IAA8H8/B,EAAW7/B,mBAGjJ,oBAAIrJ,UAAU,SACd,sBAAKA,UAAU,YAAf,UACI,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYssC,EAAWlV,iBAEnE,qBAAKh0B,UAAU,UAAf,SACI,+DAEJ,8BACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYssC,EAAWjV,uBAGtEiV,EAAW7Q,OAAS,aACjB,cAAC,GAAD,CAAoBpvB,YAAaigC,EAAY5C,UAAWA,IAE5D,sBAAKtmC,UAAU,YAAf,UAC2B,OAAtBkpC,EAAWhV,QACR,qBAAKl0B,UAAU,0CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BqpC,EAAWhV,OAAO7E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,eAGhF,OAAtBopC,EAAW/U,QACR,qBAAKn0B,UAAU,0CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BqpC,EAAW/U,OAAO9E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,eAGhF,OAAtBopC,EAAW9U,QACR,qBAAKp0B,UAAU,0CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,mCAA8BqpC,EAAW9U,OAAO/E,QAAQ,IAAK,KAAOzmB,MAAM,OAAO9I,IAAI,kBAKtGwmC,GACD,qBAAKtmC,UAAU,sDAAf,SACI,iEAAoCkpC,EAAWhgC,iBAA/C,IAAkEggC,EAAW//B,eAA7E,IAA8F+/B,EAAW9/B,mBAAzG,IAA8H8/B,EAAW7/B,mBAI5Ii9B,GACD,qBAAKtmC,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCkgC,EAAW5pC,YAAcU,UAAU,qDAA9E,iDC+DTupC,GA1KO,SAAC,GAAqB,IAAnBtgC,EAAkB,EAAlBA,YAErB,EAAkDpH,mBAAS,IAA3D,mBAAOkiC,EAAP,KAA0BC,EAA1B,KAEMwF,EAAkB,uCAAG,WAAOpD,GAAP,SAAArkC,EAAA,sDACvBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+Cm/B,EAA/C,UACJxjC,MAAK,SAAAshC,GACJF,EAAqBE,EAAiBxlC,SALnB,2CAAH,sDASxB2E,qBAAU,WACNmmC,EAAmBvgC,EAAY3J,cAChC,CAAC2J,EAAY3J,aAEhB,IAAMmqC,EAAmB,SAACvR,GAEtB,IAAIuL,EAAoB,GAEpBrL,EAAY2L,EAAkB/+B,QAAO,SAAUkS,GAC/C,OAAQA,EAAemhB,SAAWH,KAkBtC,OAfAE,EAAUlV,MAAK,SAAUnhB,EAAGshB,GAExB,OADY,IAAI1lB,KAAKoE,EAAE8G,IAAa,IAAIlL,KAAK0lB,EAAExa,OAInDuvB,EAAUn7B,SAAQ,SAAUs7B,GACxB,IAAIC,EAAe,EAEfD,EAAS6L,eAAiB,IAC1B5L,EAAe,GAGnBiL,EAAkBtkC,KAAK,CAACxB,KAAK+6B,IAAI,KAAOF,EAAcG,OAAOJ,EAAS6L,gBAAkB,EAAG7L,EAASmL,cAAenL,EAAS4J,wBAGzHsB,GAGP8D,EAA0B,GAC1BlK,EAAU,YAAI,IAAIrmB,IAAI+sB,EAAkBplC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAC1EkmB,EAAgBjsC,eAChBksC,EAAiB3rC,eAErBq/B,EAAQpgC,SAAQ,SAAUC,GAEtB,GAAIA,EAAO,YAAa,CAEpB,IAAI0sC,GAAgB,EAEhB1sC,IAASwsC,GAAiBxsC,IAASysC,IACnCC,GAAgB,GAGpBrC,EAAwBpoC,KAAK,CACzB,KAAQjC,EACR,KAAQusC,EAAiBvsC,GACzB,QAAW0sC,QAKvB,IAAMv0B,EAAU,CACZyjB,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAClIC,MAAO,CACHvzB,KAAM,SACNwzB,SAAU,IACVC,gBAAiB,UACjBC,YAAa,EACbrc,YAAa,UACb1B,MAAO,CACHge,WAAY,SAGpB74B,MAAO,CACHzD,KAAM,kCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBG,SAAU,CACNz8B,KAAM,yCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,SAGpBI,MAAO,CACH/zB,KAAM,WACNg0B,qBAAsB,CAClBC,MAAO,SAAUC,KAAM,MAE3Bp5B,MAAO,CACHzD,KAAM,GACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIxBQ,OAAQ,CACJC,UAAW,CACPP,WAAY,OACZD,SAAU,SAGlBS,MAAO,CACHC,IAAK,EACLx5B,MAAO,CACHzD,KAAM,+BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpB0Q,kBAAmB,OACnB9P,OAAQ,CACJ5e,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIxBa,QAAS,CACLC,aAAc,2BACdC,YAAa,gCAEjBC,UACA,CACIC,SAAS,GAEbC,YAAa,CACTC,OAAQ,CACJC,OAAQ,CACJH,SAAS,KAIrBI,OAAQ+M,EACR9M,QACA,CACIL,SAAS,IAIjB,OAAI2J,EAAkB5+B,QAAU,EACpB,cAAC,EAAD,IAIJ,sBAAKnF,UAAU,UAAf,UACI,cAAC,KAAD,CAAiB06B,WAAYC,KAAYtlB,QAASA,IAClD,qBAAKrV,UAAU,yCAAf,SACI,qGC1BL8pC,GA5IS,SAAC,GAAyB,IAAvBC,EAAsB,EAAtBA,gBAEjBN,EAAmB,SAACvR,GAEtB,IAAI8R,EAAsB,GAEtBnO,EAAckO,EAAgB/kC,QAAO,SAAUkS,GAC/C,OAAQA,EAAemhB,SAAWH,KAetC,OAZmB2D,EAAY72B,QAAO,SAAUkS,GAC5C,MAA8C,aAAtCA,EAAe9N,sBAGVjE,QAAU,GACvB6kC,EAAoB7qC,KAAK,MAG7B08B,EAAY5+B,SAAQ,SAAUs7B,GAC1ByR,EAAoB7qC,KAAKo5B,EAAS0R,cAG/BD,GAGPE,EAA4B,GAClB,YAAI,IAAIlzB,IAAI+yB,EAAgBprC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAEpEvmB,SAAQ,SAAUC,GAClBA,EAAO,aACPgtC,EAA0B/qC,KAAK,CAC3B,KAAQjC,EACR,KAAQusC,EAAiBvsC,GACzB,SAAW,OAKvB,IAAMmY,EAAU,CACZyjB,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAClIC,MAAO,CAEHvzB,KAAM,SACNyzB,gBAAiB,UACjB9d,MAAO,CACHge,WAAY,QAEhBD,YAAa,EACbrc,YAAa,WAEjBvc,MAAO,CACHzD,KAAM,oCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBQ,OAAQ,CACJC,UAAW,CACPP,WAAY,OACZD,SAAU,SAGlBG,MAAO,CACH4Q,WAAY,CACR,MACA,MACA,MACA,MACA,MACA,OAEJC,WAAW,GAEfvQ,MAAO,CACHC,IAAK,EACLx5B,MAAO,CACHzD,KAAM,+BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpB0Q,kBAAmB,OACnB9P,OAAQ,CACJ5e,MAAO,CACHie,SAAU,OACVC,WAAY,UAIxBW,QAAS,CACLC,aAAc,2EACdC,YAAa,2IAEbmQ,aAAc,WACdC,QAAQ,EACRC,SAAS,EACTtR,gBAAiB,wBACjBuR,QAAQ,GAEZnQ,YAAa,CACToQ,OAAQ,CACJC,aAAc,GACdxR,YAAa,GAEjByR,YAAa,CACTC,UAAW,YAInBC,YAAa,UACb1Q,UACA,CACIC,SAAS,GAEbI,OAAQ0P,EACRzP,QACA,CACIL,SAAS,IAIjB,OAAI2P,EAAgB5kC,QAAU,EAClB,cAAC,EAAD,IAIJ,sBAAKnF,UAAU,UAAf,UACI,cAAC,KAAD,CAAiB06B,WAAYC,KAAYtlB,QAASA,IAClD,qBAAKrV,UAAU,yCAAf,SACI,qGC1BL8qC,GA5Gc,SAAC,GAAwC,IAAtCf,EAAqC,EAArCA,gBAAiB3D,EAAoB,EAApBA,cAEvCqD,EAAmB,SAACvR,GACtB,IAAI8R,EAAsB,GAY1B,OAVkBD,EAAgB/kC,QAAO,SAAUkS,GAC/C,OAAQA,EAAemhB,SAAWH,KAG1Bj7B,SAAQ,SAAUs7B,GAC1B,IAAIwS,EAAsBxS,EAAS0R,UAAY1R,EAASyS,oBAAsBzS,EAAS0S,oBAAsB1S,EAAS2S,oBAAsB3S,EAAS4S,oBAAsB5S,EAAS6S,oBAAsB7S,EAAS8S,oBAEnNrB,EAAoB7qC,KAAK,CAAE,MAASo5B,EAASnvB,mBAAoB,YAAemvB,EAAS0R,UAAW,eAAkBc,OAGnHf,GAGPA,EAAsB,GACZ,YAAI,IAAIhzB,IAAI+yB,EAAgBprC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAEpEvmB,SAAQ,SAAUC,GAClBA,EAAO,aACP8sC,EAAoB7qC,KAAK,CACrB,KAAQjC,EACR,KAAQusC,EAAiBvsC,QAKrC,IAeMouC,EAAgB,SAACzP,GACnB,IAAI0P,EAAe1P,EAAY72B,QAAO,SAAUkS,GAC5C,MAAiC,aAAzBA,EAAeuiB,SAGvB+R,EAAa3P,EAAY12B,OAM7B,OAJIomC,EAAapmC,QAAU,IACvBqmC,GAA0B,GAI1B,mCACM,WAEE,IADA,IAAMl8B,EAAO,GACJvQ,EAAI,EAAGA,EAAK,EAAIysC,EAAazsC,IAClCuQ,EAAKnQ,KAAK,oBAAIa,UAAU,iBAAd,cAAoCjB,IAElD,OAAOuQ,EALT,MAWd,OAAIy6B,EAAgB5kC,QAAU,EAClB,cAAC,EAAD,IAIJ,qBAAKnF,UAAU,6BAAf,SACI,wBAAOA,UAAU,yDAAjB,UACI,gCACI,+BACI,oBAAIA,UAAU,iCAAd,oBACA,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,sBAAmD,sBAAMA,UAAU,YAAhB,oBACnF,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,sBAAmD,sBAAMA,UAAU,YAAhB,oBACnF,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,qBAAkD,sBAAMA,UAAU,YAAhB,oBAClF,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,sBAAmD,sBAAMA,UAAU,YAAhB,oBACnF,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,mBAAgD,sBAAMA,UAAU,YAAhB,oBAChF,qBAAIA,UAAU,kBAAd,UAAgC,sBAAMA,UAAU,oBAAhB,mBAAgD,sBAAMA,UAAU,YAAhB,yBAGxF,gCACKgqC,EAAoBrrC,KAAI,SAAAu5B,GAAM,OAC3B,+BACI,oBAAIl4B,UAAU,kBAAd,SAAgC,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,mBAA2DlO,EAAOhuB,MAA1E,SAAmFguB,EAAOhuB,UA5DvH2xB,EA6DoB3D,EAAOx5B,KA5DnCm9B,EAAY72B,QAAO,SAAUkS,GAC5C,MAAiC,aAAzBA,EAAeuiB,SAGVt0B,QAAU,EAEnB,oBAAInF,UAAU,iBAAd,eAII,8BAmDak4B,EAAOx5B,KAAKC,KAAI,SAAC8sC,EAAU5sC,GAAX,OACb,qBAAgBmB,UAAU,iBAA1B,UACI,sBAAKA,UAAU,sBAAf,UAAsCyrC,EAASC,YAA/C,QACA,sBAAK1rC,UAAU,qBAAf,cAAsCyrC,EAASE,eAA/C,WAFK9sC,MAKZysC,EAAcpT,EAAOx5B,QATjBw5B,EAAOhuB,MA3DV,IAAC2xB,aC0GpB+P,GArIQ,SAAC,GAAqB,IAAnB3iC,EAAkB,EAAlBA,YAEtB,EAAoDpH,mBAAS,IAA7D,mBAAOgqC,EAAP,KAA2BC,EAA3B,KAEMC,EAAmB,uCAAG,WAAO5D,GAAP,SAAApmC,EAAA,sDACxBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oDAAmEkhC,KACvEvlC,MAAK,SAAAopC,GACJF,EAAsBE,EAAkBttC,SALpB,2CAAH,sDASzB2E,qBAAU,WACN0oC,EAAoB9iC,EAAYq/B,UACjC,CAACr/B,EAAYq/B,SAEhB,IAAMmB,EAAmB,SAACvR,GAEtB,IAAI+T,EAAqB,GAWzB,OATiBJ,EAAmB7mC,QAAO,SAAUkS,GACjD,OAAQA,EAAemhB,SAAWH,KAG3Bj7B,SAAQ,SAAUs7B,GAEzB0T,EAAmB9sC,KAAKo5B,EAAS0R,cAG9BgC,GAGPC,EAA2B,GACjB,YAAI,IAAIl1B,IAAI60B,EAAmBltC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAEvEvmB,SAAQ,SAAUC,GAClBA,EAAO,aACPgvC,EAAyB/sC,KAAK,CAC1B,KAAQjC,EACR,KAAQusC,EAAiBvsC,GACzB,SAAW,OAKvB,IAAMmY,EAAU,CACZyjB,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAClIC,MAAO,CACHvzB,KAAM,SACNyzB,gBAAiB,UACjB9d,MAAO,CACHge,WAAY,QAEhBD,YAAa,EACbrc,YAAa,WAEjBvc,MAAO,CACHzD,KAAM,yCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBQ,OAAQ,CACJC,UAAW,CACPP,WAAY,OACZD,SAAU,SAGlBG,MAAO,CACH4Q,WAAY,CAAC,IAEbC,WAAW,GAEfvQ,MAAO,CACHC,IAAK,EACLx5B,MAAO,CACHzD,KAAM,sCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpB0Q,kBAAmB,OACnB9P,OAAQ,CACJ5e,MAAO,CACHie,SAAU,OACVC,WAAY,UAIxBW,QAAS,GAETK,YAAa,CACToQ,OAAQ,CACJC,aAAc,GACdxR,YAAa,GAEjByR,YAAa,CACTC,UAAW,YAInBC,YAAa,UACb1Q,UACA,CACIC,SAAS,GAEbI,OAAQ0R,EACRzR,QACA,CACIL,SAAS,IAIjB,OAAIyR,EAAmB1mC,QAAU,EACrB,cAAC,EAAD,IAIJ,sBAAKnF,UAAU,UAAf,UACI,cAAC,KAAD,CAAiB06B,WAAYC,KAAYtlB,QAASA,IAClD,qBAAKrV,UAAU,yCAAf,SACI,qGCqCLmsC,GAnKY,SAAC,GAAqB,IAAnBljC,EAAkB,EAAlBA,YAE1B,EAAkDpH,mBAAS,IAA3D,mBAAOkiC,EAAP,KAA0BC,EAA1B,KAEMwF,EAAkB,uCAAG,WAAOpD,GAAP,SAAArkC,EAAA,sDACvBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+Cm/B,EAA/C,UACJxjC,MAAK,SAAAshC,GACJF,EAAqBE,EAAiBxlC,SALnB,2CAAH,sDASxB2E,qBAAU,WACNmmC,EAAmBvgC,EAAY3J,cAChC,CAAC2J,EAAY3J,aAEhB,IAAM8sC,EAAgC,SAAC3S,GACnC,IAAI4B,EAA4B,GAoBhC,OAlBc,YAAI,IAAIrkB,IAAI+sB,EAAkBplC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAEtEvmB,SAAQ,SAAUi7B,GACtB,GAAIA,EAAS,YAAa,CACtB,IAAIuL,EAAoB,GAEFM,EAAkB/+B,QAAO,SAAUkS,GACrD,OAAQA,EAAe9N,qBAAuBqwB,GAASviB,EAAemhB,SAAWH,KAGrEj7B,SAAQ,SAAUs7B,GAC9BkL,EAAkBtkC,KAAK,CAAE,IAAOo5B,EAASmL,aAAc,cAAiBnL,EAAS4J,mBAAoB,WAAc5J,EAASpvB,eAAiB,IAAMovB,EAASnvB,mBAAqB,IAAMmvB,EAASlvB,mBAGpMgyB,EAA0Bl8B,KAAK,CAAE,WAAc+4B,EAAQ,oBAAuBuL,QAI/EpI,GAGPgR,EAAwB,GACf,CAAC,WAAY,WAAY,UAAW,WAAY,QAAS,SAE/DpvC,SAAQ,SAAUw8B,GACrB4S,EAAsBltC,KAAK,CACvB,KAAQs6B,EACR,WAAc2S,EAA8B3S,QAIpD,IAAIgC,EAAY,EAEVC,EAAc,SAACC,GACjB,OAAOA,KAeL2Q,EAAmB,SAACzQ,EAAaC,EAAKS,GACxC,IAAIvE,EAAW6D,EAAY72B,QAAO,SAAU+2B,GACxC,OAAQA,EAAID,MAAQA,KAGxB,OAAI9D,EAAS7yB,OAAS,EACV,oBAAcnF,UAAS,UAAKu8B,IAAeJ,EAAgB,mBAAqB,IAAhF,SAAsF,cAAC,IAAD,CAAMz8B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,qBAAsE04B,EAAS,GAAGuU,YAA1F,SAAyGvU,EAAS,GAAGwU,iBAAlM1Q,GAET,oBAAc97B,UAAS,UAAKu8B,IAAeJ,EAAgB,mBAAqB,KAAvEL,IAInBG,EAAW,SAACH,GACd,IAAII,EAAQ,GAEZ,OAAQJ,GACJ,KAAK,EACL,KAAK,GACL,KAAK,GACDI,EAAQ,KACR,MACJ,KAAK,EACL,KAAK,GACDA,EAAQ,KACR,MACJ,KAAK,EACL,KAAK,GACDA,EAAQ,KACR,MACJ,QACIA,EAAQ,KAGhB,OAAOJ,EAAMI,GAGXC,EAAgB1+B,eAEtB,OAAIsmC,EAAkB5+B,QAAU,EACpB,cAAC,EAAD,IAIJ,sBAAKnF,UAAU,YAAf,UACI,qBAAKA,UAAU,sBAAf,SACI,oGAEHqsC,EAAsB1tC,KAAI,SAACk9B,EAAah9B,GAAd,OACvB,sBAAiBmB,UAAU,YAAYmb,MAAO,CAAEihB,UAAW,QAA3D,UACI,8BACI,oBAAIp8B,UAAU,iBAAd,SAAgC67B,EAAY3xB,SAEhD,qBAAKlK,UAAU,kBAAf,SACI,wBAAOA,UAAU,uCAAjB,UACI,gCACI,+BACI,wCACC07B,GAAY,WACTD,EAAYx9B,aAAkB49B,EAAY3xB,MAE1C,IADA,IAAMtL,EAAM,GACHG,EAAI,EAAGA,EAAK08B,EAAY,EAAI18B,IACjCH,EAAIO,KAAK,6BAAa88B,EAASl9B,IAAbA,IAEtB,OAAOH,UAInB,gCACKi9B,EAAYQ,WAAW19B,KAAI,SAAC29B,EAAgBt9B,GAAjB,OACxB,+BACI,oBAAIgB,UAAS,0BAAqBs8B,EAAeC,aAAeJ,EAAgB,aAAe,IAA/F,SAAqG,cAAC,IAAD,CAAMz8B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,mBAAoEg9B,EAAeC,YAA3F,SAA0GD,EAAeC,eAC7Nb,GAAY,WAET,IADA,IAAM98B,EAAM,GACHG,EAAI,EAAGA,EAAK08B,EAAY,EAAI18B,IAIjCH,EAAIO,KAAKmtC,EAAiBhQ,EAAemQ,oBAAqB1tC,EAAGu9B,EAAeC,aAEpF,OAAO39B,OAVNI,eArBnBH,UC3Ef6tC,GArC2B,SAAC,GAAqB,IAAnBzjC,EAAkB,EAAlBA,YAEnCkzB,EAAgB1+B,eACtB,EAA8CoE,mBAAS,IAAvD,mBAAOkoC,EAAP,KAAwB4C,EAAxB,KAEMC,EAAiC,uCAAG,WAAOzE,GAAP,SAAApmC,EAAA,sDACtCM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iEAAgFkhC,KACpFvlC,MAAK,SAAAiqC,GACJF,EAAmBE,EAAgCnuC,SALjB,2CAAH,sDAavC,OAJA2E,qBAAU,WACNupC,EAAkC3jC,EAAYq/B,UAC/C,CAACr/B,EAAYq/B,SAGZ,gCACI,eAACr9B,EAAA,EAAD,WACI,kCAAQhC,EAAYlJ,KAApB,2CAAkEkJ,EAAYjD,SAA9E,kBACA,sBAAMkE,KAAK,cAAcgB,QAAO,yEAAoEjC,EAAYjD,SAAhF,yDAEpC,mDACA,sBAAKhG,UAAU,UAAf,+FACsF,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,wBAAR,kBADtF,yCAGA,cAAC,GAAD,CAAe2J,YAAaA,IAC5B,cAAC,GAAD,CAAiB8gC,gBAAiBA,IAClC,cAAC,GAAD,CAAsBA,gBAAiBA,EAAiB3D,cAAen9B,EAAY3J,aACnF,cAAC,GAAD,CAAgB2J,YAAaA,IAC7B,cAAC,GAAD,CAAoBA,YAAaA,EAAaivB,OAAQiE,QC4JnD2Q,GA/LoB,SAAC,GAAqB,IAAnB7jC,EAAkB,EAAlBA,YAClC,EAAgCpH,mBAAS,IAAzC,mBAAOm2B,EAAP,KAAiB0E,EAAjB,KACA,EAAsC76B,mBAASoH,EAAY8jC,aAA3D,mBAAOC,EAAP,KAAoBC,EAApB,KACA,EAAsDprC,mBAAS,IAA/D,mBAAOqrC,EAAP,KAA4BC,EAA5B,KACA,EAAkCtrC,oBAAS,GAA3C,mBAAOurC,EAAP,KAAkBC,EAAlB,KAEM1Q,EAAa,uCAAG,WAAOC,GAAP,SAAA76B,EAAA,sDAClBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,6BAA4C21B,KAChDh6B,MAAK,SAAAi6B,GAEJ,GAAIA,EAAan+B,KAAKyG,OAAS,EAAG,CAE9B,IAEI23B,EAFkBD,EAAan+B,KAEAsG,QAAO,SAAUkS,GAChD,OAAqC,MAA7BA,EAAemc,WAA+C,MAA1Bnc,EAAemhB,UAG/DqE,EAAYI,GACZuQ,GAAa,OAfH,2CAAH,sDAoBbC,EAAwB,uCAAG,WAAOC,GAAP,SAAAxrC,EAAA,sDAC7BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,4CAA2DsmC,KAC/D3qC,MAAK,SAAA4qC,GACJL,EAAuBK,EAAuB9uC,SALrB,2CAAH,sDAS9B2E,qBAAU,WACNs5B,EAAc1zB,EAAYwkC,WAC1BH,EAAyBrkC,EAAYq/B,UACtC,CAACr/B,IAEJ,IAcM4xB,EAAe,CACjB9B,MAAO,CACHvzB,KAAM,OACNwzB,SAAU,IACVC,gBAAiB,UACjBC,YAAa,EACbrc,YAAa,UACb1B,MAAO,CACHge,WAAY,SAGpB74B,MAAO,CACHzD,KAAM,2BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBG,SAAU,CACNz8B,KAAM,yCACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,SAGpBI,MAAO,CACH/zB,KAAM,WACNg0B,qBAAsB,CAClBC,MAAO,SAAUC,KAAM,MAE3Bp5B,MAAO,CACHzD,KAAM,GACNu9B,SAAS,IAGjBT,OAAQ,CACJC,UAAW,CACPP,WAAY,OACZD,SAAU,SAGlBS,MAAO,CACHv5B,MAAO,CACHzD,KAAM,2BACNse,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,eAGpBW,IAAK,EACLC,OAAQ,CACJ5e,MAAO,CACHie,SAAU,OACVC,WAAY,OACZF,WAAY,gBAIxBa,QAAS,CACLC,aAAc,2BACdC,YAAa,gCAEjBC,UACA,CACIC,SAAS,GAEbC,YAAa,CACT3a,KAAM,CACF6a,OAAQ,CACJH,SAAS,EACT2C,OAAQ,SACRC,OAAQ,EACRC,OAAQ,CACJC,MAAO,CACH9C,SAAS,KAIrB+C,UAAW,EACXF,OAAQ,CACJC,MAAO,CACHC,UAAW,IAGnBC,UAAW,OAGnB3C,QACA,CACIL,SAAS,IAIjB,GAAIpC,EAAS7yB,QAAU,EACnB,OAAQ,cAAC,EAAD,IAGR,IAAIk4B,EAAU,YAAI,IAAIrmB,IAAIghB,EAASr5B,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAErE,OACI,qCACI,eAACvY,EAAA,EAAD,WACI,kCAAQhC,EAAYlJ,KAApB,wDAA+EkJ,EAAYjD,SAA3F,kBACA,sBAAMkE,KAAK,cAAcgB,QAAO,wDAAmDjC,EAAYjD,SAA/D,yDAElConC,GACE,sBAAKptC,UAAU,YAAf,UACI,0DACA,mPAGA,qBAAKA,UAAU,YAAf,8FAGA,qBAAKA,UAAU,aAAf,SACI,cAACmf,GAAA,EAAD,CAAgBC,MAAM,QAAQ9e,MAAO0sC,EAAapyB,SApInD,SAACyE,EAAQC,GAE5B+tB,GAAa,GACb,IAAIK,EAAoBruB,EAEpBta,EAAsBmoC,EAAoBloC,QAAO,SAAUkS,GAC3D,OAAQA,EAAey2B,YAAc1f,SAASyf,MAGlDT,EAAeloC,EAAoB,GAAGojB,YAEtCwU,EAAc+Q,IAyHkF1gC,GAAG,oBAAoBhN,UAAU,uBAA7G,SACKktC,EAAoBvuC,KAAI,SAACzB,EAAM2B,GAAP,OACrB,cAAC0gB,GAAA,EAAS9W,KAAV,CAAeqS,SAAU5d,EAAKywC,UAA9B,SAAsDzwC,EAAKirB,YAAbtpB,UAI1D,cAAC,GAAD,CAAWk5B,WAAYiV,EAAahV,SAAUA,IAC7CqF,EAAQ1+B,KAAI,SAACu5B,EAAQr5B,GAAT,OACT,8BACI,cAAC,GAAD,CAAiBk5B,WAAYiV,EAAahV,SAAUA,EAAUE,OAAQA,EAAQ2C,aAAcA,EAAch8B,MAAOA,KAD3GA,aCxEvBy+B,GAhHU,SAAC,GAAqB,IAAnBr0B,EAAkB,EAAlBA,YACxB,EAAwBpH,oBAAS,GAAjC,mBAAOsb,EAAP,KAAasQ,EAAb,KAEA,OACI,gCACI,eAACxiB,EAAA,EAAD,WACI,qHAAwFhC,EAAYjD,SAApG,kBACA,sBAAMkE,KAAK,cAAcgB,QAAO,mFAA8EjC,EAAYjD,SAA1F,mBAEpC,yCACA,uCACQ,uEADR,2IACmMiD,EAAYlJ,KAD/M,gGAGA,qBAAKC,UAAU,sBAAf,oPAGA,qBAAKA,UAAU,SAAf,SACI,gCACI,qBAAKA,UAAU,4DAAf,SACI,+BAAKiJ,EAAYlJ,KAAjB,eAEJ,sBAAKC,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,sDAGR,qBAAKA,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,qCAA8JjI,OAAO,SAASH,IAAI,aAAzL,8BAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,UAAKiB,EAAY00B,mBAAqB11B,OAAO,SAASH,IAAI,aAAjE,uCAIhB,sBAAK9H,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,4DAGR,qBAAKA,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,sDAA+KjI,OAAO,SAASH,IAAI,aAA1M,uBAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,+DAA0DiB,EAAY+G,kBAAtE,gBAA+F/G,EAAYiH,mBAA3G,sDAAmLjI,OAAO,SAASH,IAAI,aAA9M,2BAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,mCAA4JjI,OAAO,SAASH,IAAI,aAAvL,iCAIhB,sBAAK9H,UAAU,wCAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,qBAAKA,UAAU,0DAAf,SACI,8CAGR,qBAAKA,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,sCAA+JjI,OAAO,SAASH,IAAI,aAA1L,oCAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,sCAA+JjI,OAAO,SAASH,IAAI,aAA1L,oCAGZ,qBAAK9H,UAAU,iDAAf,SACI,qBAAKA,UAAU,sDAAf,SACI,6BAAI,mBAAGgI,KAAI,2DAAsDiB,EAAY+G,kBAAlE,gBAA2F/G,EAAYiH,mBAAvG,sCAA+JjI,OAAO,SAASH,IAAI,aAA1L,4CAMxB,qBAAK9H,UAAU,SAAf,kGAGA,sBAAKA,UAAU,SAAf,UACI,oBAAIA,UAAU,OAAd,qCADJ,mTAIA,qBAAKA,UAAU,4DAAf,SACI,+CAEJ,qBAAKA,UAAU,SAAf,SACI,sBAAKA,UAAU,aAAf,UACI,cAAC2L,EAAA,EAAD,CACIjH,QAAS,kBAAM+oB,GAAStQ,IACxBgR,gBAAehR,EAAMnd,UAAU,aAFnC,SAEgD,oBAAIA,UAAU,OAAd,SAAsBmd,EAAO,sBAAwB,0BACrG,cAACrQ,EAAA,EAAD,CAAUC,GAAIoQ,EAAd,SACI,qBAAKnd,UAAU,mBAAf,SACMmd,GACE,wBAAQ7c,MAAM,6BAA6BT,IAAG,UAAKoJ,EAAY2kC,eAAiB5Y,iBAAe,iBCVhH6Y,GA5FO,SAAC,GAAiC,IAA/B5kC,EAA8B,EAA9BA,YAAaszB,EAAiB,EAAjBA,WAE5BuR,EAAkBvR,EAAWv/B,MAAM,KAEzC,EAAgE6E,mBAAS,IAAzE,mBAAOksC,EAAP,KAAiCC,EAAjC,KAEMC,EAAkB,uCAAG,WAAO9F,EAAOjQ,GAAd,SAAAn2B,EAAA,sDACvBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,wCAAuDkhC,EAAvD,YAAgEjQ,KACpEt1B,MAAK,SAAAsrC,GACJ/qC,QAAQC,IAAI8qC,EAAiBxvC,MAC7BsvC,EAA4BE,EAAiBxvC,SAN1B,2CAAH,wDAgBxB,OANA2E,qBAAU,WACFk5B,EAAa,aACb0R,EAAmBhlC,EAAYq/B,OAAQ/L,KAE5C,CAACtzB,EAAYq/B,OAAQ/L,IAEpBwR,EAAyB5oC,QAAU,EAC3B,cAAC,EAAD,IAIJ,sBAAKnF,UAAU,YAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,+DAAkCu8B,EAAlC,sBAEHwR,EAAyBI,cAAgB,GACtC,qBAAKnuC,UAAU,gDAAf,SACI,uBAAOA,UAAU,mCAAjB,SACI,kCACI,+BACI,gEACA,qBAAIyxB,QAAS,EAAb,UAAiBsc,EAAyBI,cAA1C,WAEJ,+BACI,0EACA,qBAAI1c,QAAS,EAAb,UAAiBsc,EAAyBK,kBAA1C,cAEJ,+BACI,iEACA,qBAAIpuC,UAAU,eAAd,UAA8B+tC,EAAyBM,kBAAvD,QACA,mCAAMN,EAAyBO,sBAA/B,UAEJ,+BACI,2CAAcR,EAAgB,GAA9B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBQ,iBAAvD,QACA,8CAAgB,iCAASR,EAAyBS,uBAAlD,qBAAmGV,EAAgB,SAEvH,+BACI,2CAAcA,EAAgB,GAA9B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBU,iBAAvD,QACA,8CAAgB,iCAASV,EAAyBW,uBAAlD,qBAAmGZ,EAAgB,SAEvH,+BACI,0CAAaA,EAAgB,GAA7B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBY,gBAAvD,QACA,8CAAgB,iCAASZ,EAAyBa,sBAAlD,oBAAiGd,EAAgB,SAErH,+BACI,2CAAcA,EAAgB,GAA9B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBc,iBAAvD,QACA,8CAAgB,iCAASd,EAAyBe,uBAAlD,qBAAmGhB,EAAgB,SAEvH,+BACI,wCAAWA,EAAgB,GAA3B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBgB,cAAvD,QACA,8CAAgB,iCAAShB,EAAyBiB,oBAAlD,kBAA6FlB,EAAgB,SAEjH,+BACI,wCAAWA,EAAgB,GAA3B,eACA,qBAAI9tC,UAAU,eAAd,UAA8B+tC,EAAyBkB,cAAvD,QACA,8CAAgB,iCAASlB,EAAyBmB,oBAAlD,kBAA6FpB,EAAgB,gBAMtF,GAA1CC,EAAyBI,eACtB,8BACI,oBAAInuC,UAAU,6BAAd,+BC+CTmvC,GApIc,SAAC,GAAkE,IAAhElmC,EAA+D,EAA/DA,YAAaq5B,EAAkD,EAAlDA,QAASC,EAAyC,EAAzCA,SAAUC,EAA+B,EAA/BA,yBAGxDh+B,EAAWC,cAKXg+B,EAAS,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAE9H,EAAwB5gC,mBAAS,IAAIlE,KAAK2kC,EAASC,EAAU,IAA7D,mBAAOG,EAAP,KACA,GADA,KAC0B7gC,mBAAS6gC,EAAK7kC,aAAxC,mBAAO47B,EAAP,KAAckJ,EAAd,KACA,EAAgC9gC,mBAAS+gC,EAAmBF,IAA5D,mBAAOG,EAAP,KAAiBC,EAAjB,KAOA,SAASF,EAAmBF,GAC1B,IAAMK,EAAY,IAAIplC,KAAK+kC,EAAK3kC,cAAe2kC,EAAK7kC,WAAY,GAAGmlC,SACnE,OAAqB,IAAdD,EAAkB,EAAIA,EAP/B1/B,qBAAU,WACRs/B,EAASD,EAAK7kC,YACdilC,EAAYF,EAAmBF,MAC9B,CAACJ,EAASC,EAAUG,IAWvB,IAJoBhJ,EAqDd0J,GArDc1J,EAqDIgJ,EAAK3kC,eApDZ,IAAM,GAAK27B,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAnB9C,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IADlD,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IA0E1D,OACE,sBAAK15B,UAAU,qBAAf,UACE,qBAAKA,UAAU,4BAAf,SACE,qBAAKA,UAAU,iBAAf,SACE,+BAAKyiC,EAAOhJ,GAAZ,IAAqB6I,SAGzB,sBAAKtiC,UAAU,0BAAf,UA/EqB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAgF5CrB,KAAI,SAAC6e,GAAD,OACpB,qBAAyCxd,UAAU,0BAAnD,SACE,iCAASwd,KADX,UAAaA,EAAb,YAAkB+kB,EAAlB,YAA8BD,OAI/B5Q,MAAM0R,EAAK3J,IAAUoJ,EAAW,IAAIzlB,KAAK,MAAMze,KAAI,SAAC0kC,EAAGxkC,GACtD,IAAM2e,EAAI3e,GAASgkC,EAAW,GAC1BS,EAAe,GACfkJ,EAAgB,GAapB,OAVIhvB,GAAK,EACP8lB,EAAe,eAEfA,EAAe,6BAEOrkC,KADtButC,EAhEe,SAAChJ,GAExB,IAAIgJ,OAAgBvtC,EAEhBwkC,EAAoBjB,EAAyBx9B,QAAO,SAAUkS,GAChE,OAAQA,EAAewsB,eAAiBF,KAO1C,YAJ6BvkC,IAAzBwkC,EAAkB,KACpB+I,EAAgB/I,EAAkB,GAAGtB,oBAGhCqK,EAoDiB4C,CAAiB5xB,MAE/B8lB,GAnDS,SAAC+L,GAEpB,IAAIC,EAAc,4BAYlB,OAVID,EAAW,GAAKA,EAAW,GAC7BC,EAAc,4BACLD,EAAW,GAAKA,EAAW,GACpCC,EAAc,6BACLD,EAAW,IAAMA,EAAW,GACrCC,EAAc,6BACLD,EAAW,KACpBC,EAAc,8BAGTA,EAqCiCC,CAAa/C,KAK7C,qCACGhvB,GAAK,GACJ,qBAAKxd,UAAWsjC,GAAmBzkC,GAEnC2e,EAAI,QAAuBve,IAAlButC,GACT,sBAAKxsC,UAAWsjC,EAA0B5+B,QAAS,kBA5C9C,SAAC8Y,GAClB,IAAMgyB,EAAU,UAAM7vC,OAAOqJ,oBAAb,YAAoCC,EAAY3J,WAAhD,qBAAuEke,GAAvE,OA3CI,SAACse,GACrB,GAAIA,EAAM,GAAKA,EAAM,GAAI,MAAO,KAChC,OAAQA,EAAM,IACZ,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,QAAS,MAAO,MAqCyEmH,CAAczlB,GAAzF,YAA+FilB,EAAOhJ,GAAtG,YAAgH6I,GAGhI99B,EAASgrC,GAwC4DC,CAAWjyB,IAApE,UACE,qBAAKxd,UAAU,0BAAf,SAA0Cwd,IAC1C,sBAAKxd,UAAU,0BAAf,UAA0CwsC,EAA1C,UAFiC3tC,GAKnC2e,EAAI,QAAuBve,IAAlButC,GACT,qBAAKxsC,UAAWsjC,EAAhB,SACG9lB,GADgC3e,gBCvCpC6wC,GA5ES,SAAC,GAAiC,IAA/BzmC,EAA8B,EAA9BA,YAAaszB,EAAiB,EAAjBA,WACpC,EAA0B16B,mBAAS06B,EAAWv/B,MAAM,MAApD,mBAAO6mC,EAAP,KAAcC,EAAd,KACA,EAAkDjiC,mBAAS,IAA3D,mBAAOkiC,EAAP,KAA0BC,EAA1B,KAEMC,EAA0B,uCAAG,WAAOmC,EAAe7J,GAAtB,SAAAx6B,EAAA,sDAC/BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+Cm/B,EAA/C,YAAgE7J,KACpE35B,MAAK,SAAAshC,GACJF,EAAqBE,EAAiBxlC,SALX,2CAAH,wDAS1BylC,EAA8B,SAAC1K,GAKjC,OAJgBsK,EAAkB/+B,QAAO,SAAUkS,GAC/C,OAAQA,EAAektB,iBAAmB3K,MAWlD,OALAp2B,qBAAU,WACN4gC,EAA2Bh7B,EAAY3J,WAAYi9B,GACnDuH,EAASvH,EAAWv/B,MAAM,QAC3B,CAACiM,EAAY3J,WAAYi9B,IAGxB,sBAAKv8B,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQhC,EAAYlJ,KAApB,MAA6Bw8B,EAA7B,qDAA2FtzB,EAAYjD,SAAvG,kBACA,sBAAMkE,KAAK,cAAcgB,QAAO,4FAAuFjC,EAAYjD,SAAnG,yDAEpC,+BAAKu2B,EAAL,mCACA,qHACsF,cAAC,IAAD,CAAM78B,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,wBAAR,kBADtF,yCAGCi9B,EAAa,aACV,cAAC,GAAD,CAAetzB,YAAaA,EAAaszB,WAAYA,IAExDA,EAAa,aACV,cAAC,GAAD,CAAuBtzB,YAAaA,EAAaivB,OAAQqE,EAAYwH,kBAAmBA,IAE5F,sBAAK/jC,UAAU,OAAf,UACI,qBAAKA,UAAU,4DAAf,SACI,+BAAKu8B,EAAL,wBAEJ,qBAAKv8B,UAAU,sBAAf,yEAIJ,qBAAKA,UAAU,wBAAwBmb,MAAO,CAAE+mB,SAAU,QAA1D,SACI,sBAAKliC,UAAU,wCAAf,UACI,qBAAKA,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,GAAIC,yBAA0B2B,EAA4B,QAE3I,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,GAAIC,yBAA0B2B,EAA4B,QAE3I,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE1I,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE1I,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,OAE1I,qBAAKnkC,UAAU,oBAAf,SACI,cAAC,GAAD,CAAsBiJ,YAAaA,EAAaq5B,QAASuB,EAAM,GAAItB,SAAU,EAAGC,yBAA0B2B,EAA4B,gBCzExJwL,GAAQtvB,KAAOuvB,IAAV,0IAQLp4B,GAAS6I,KAAOuvB,IAAV,8KASNtpB,GAAOjG,KAAOuvB,IAAV,2CAmCKC,GA/Be,SAAC,GAA4D,IAA1D5mC,EAAyD,EAAzDA,YAAa/K,EAA4C,EAA5CA,UAAWokC,EAAiC,EAAjCA,QAEjDwN,EAFkF,EAAxB/L,kBAExB/+B,QAAO,SAAUkS,GACnD,OAAQA,EAAe9N,qBAAuBlL,GAAagZ,EAAe7N,gBAAkB4kB,SAASqU,MAQzG,OALAwN,EAAc5sB,MAAK,SAAUnhB,EAAGshB,GAE5B,OADY,IAAI1lB,KAAKoE,EAAE8G,IAAa,IAAIlL,KAAK0lB,EAAExa,OAK/C,eAAC8mC,GAAD,WACI,cAAC,GAAD,UAEI,gCACKzxC,EADL,IACiBokC,OAIrB,cAAChc,GAAD,UACKwpB,EAAcnxC,KAAI,SAACy5B,EAAWv5B,GAAZ,OACf,8BACI,eAAC,IAAD,CAAMa,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCC,EAAY3J,WAA/C,qBAAsE84B,EAAUjvB,eAAhF,YAAkGivB,EAAUhvB,mBAA5G,YAAkIgvB,EAAU/uB,eAApJ,UAAsK+uB,EAAUjvB,eAAhL,IAAiMivB,EAAUhvB,mBAA3M,IAAgOgvB,EAAU/uB,kBADpOxK,YCWfkxC,GApDwB,SAAC,GAAqB,IAAnB9mC,EAAkB,EAAlBA,YAEtC,EAAkDpH,mBAAS,IAA3D,mBAAOkiC,EAAP,KAA0BC,EAA1B,KACA,EAAoCniC,mBAASpE,gBAA7C,mBAAO8+B,EAAP,KAAmByT,EAAnB,KACA,EAA0BnuC,mBAAS06B,EAAWv/B,MAAM,MAApD,mBAAO6mC,EAAP,KAAcC,EAAd,KAEM0F,EAAkB,uCAAG,WAAOpD,GAAP,SAAArkC,EAAA,sDACvBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCAA+Cm/B,EAA/C,UACJxjC,MAAK,SAAAshC,GACJF,EAAqBE,EAAiBxlC,SALnB,2CAAH,sDASxB2E,qBAAU,WACNmmC,EAAmBvgC,EAAY3J,YAC/BwkC,EAASvH,EAAWv/B,MAAM,QAC3B,CAACiM,EAAY3J,WAAYi9B,IAE5B,IAAIc,EAAU,YAAI,IAAIrmB,IAAI+sB,EAAkBplC,KAAI,SAAAzB,GAAI,OAAIA,EAAKm7B,YAAUnV,OAAOM,UAM9E,OACI,gCACI,uDACA,gCACI,8BACI,wBAAQ/d,SATH,SAACwE,GAClB+lC,EAAc/lC,EAAMhC,OAAO1E,QAQf,SACK85B,EAAQ1+B,KAAI,SAACzB,EAAM2B,GAAP,OACT,yBAAoB0E,MAAOrG,EAA3B,UACKA,EADL,YAAa2B,UAMzB,gCACI,cAAC,GAAD,CAAuBoK,YAAaA,EAAa/K,UAAU,QAAQokC,QAASuB,EAAM,GAAIE,kBAAmBA,IACzG,cAAC,GAAD,CAAuB96B,YAAaA,EAAa/K,UAAU,QAAQokC,QAASuB,EAAM,GAAIE,kBAAmBA,IACzG,cAAC,GAAD,CAAuB96B,YAAaA,EAAa/K,UAAU,WAAWokC,QAASuB,EAAM,GAAIE,kBAAmBA,IAC5G,cAAC,GAAD,CAAuB96B,YAAaA,EAAa/K,UAAU,UAAUokC,QAASuB,EAAM,GAAIE,kBAAmBA,IAC3G,cAAC,GAAD,CAAuB96B,YAAaA,EAAa/K,UAAU,WAAWokC,QAASuB,EAAM,GAAIE,kBAAmBA,IAC5G,cAAC,GAAD,CAAuB96B,YAAaA,EAAa/K,UAAU,WAAWokC,QAASuB,EAAM,GAAIE,kBAAmBA,cCpCjHkM,GAXW,SAAC,GAAyC,IAAvCr/B,EAAsC,EAAtCA,OAAQ3H,EAA8B,EAA9BA,YAAainC,EAAiB,EAAjBA,WAC9C,OACI,mCACuBjxC,IAAlB2R,EAAOsnB,OACF,cAAC,GAAD,CAAgCjvB,YAAaA,IAC7C,cAAC,GAAD,CAAmBA,YAAaA,EAAa2H,OAAQA,EAAQs/B,WAAYA,EAAY5J,WAAW,OCKnG6J,GAXW,SAAC,GAAmC,IAAjC/J,EAAgC,EAAhCA,cAAe8J,EAAiB,EAAjBA,WAE1C,OACE,qBAAKlwC,UAAU,2BAAf,SACGkwC,EAAWvxC,KAAI,SAACu5B,EAAQr5B,GAAT,OACd,qBAAiBmB,UAAU,0CAA3B,SAAqE,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOqJ,oBAAZ,YAAmCo9B,EAAnC,mBAA2DlO,EAAOG,QAA1E,SAAqFH,EAAOG,UAAvJx5B,SC4BHuxC,GA9BU,SAAC,GAAgB,IAAdx/B,EAAa,EAAbA,OAExB,EAA0B/O,wBAAS5C,GAAnC,mBAAO4W,EAAP,KAAcC,EAAd,KAEMC,EAAW,uCAAG,WAAOC,GAAP,SAAAjU,EAAA,sDAChBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uCAAsD+O,KAC1DpT,MAAK,SAAAqT,GACJH,EAASG,EAASvX,SALN,2CAAH,sDAajB,OAJA2E,qBAAU,WACN0S,EAAY,yBACb,CAACnF,SAEU3R,IAAV4W,GAAiC,OAAVA,EAEnB,mCACI,qBAAK3V,wBAAyB,CAAEC,OAAQvD,aAAYiZ,EAAMM,kBAK9D,cAAC,EAAD,KCwGGk6B,GAtHS,WAEpB,IAAMz/B,EAASzD,cAEf,EAAwCtL,mBAAS,IAAjD,mBAAOyjC,EAAP,KAAqBgL,EAArB,KACA,EAAoCzuC,mBAAS,IAA7C,mBAAOquC,EAAP,KAAmBK,EAAnB,KAEMC,EAA8B,uCAAG,WAAOpK,GAAP,SAAArkC,EAAA,sDACnCM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,uCAAsDm/B,KAC1DxjC,MAAK,SAAA6tC,GAQJ,OANInmC,OAAOC,KAAKkmC,EAAgB/xC,MAAMyG,QAAU,IAC5CxF,OAAO+D,SAASsE,KAAO,sCAG3BsoC,EAAgBG,EAAgB/xC,MAEzB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iDAAgEwpC,EAAgB/xC,KAAK4pC,aAE7F1lC,MAAK,SAAA8tC,GACJH,EAAcG,EAAchyC,SAjBG,2CAAH,sDAyBpC,OAJA2E,qBAAU,WACNmtC,EAA+B5/B,EAAOmK,OACvC,CAACnK,EAAOmK,MAEPzQ,OAAOC,KAAK+6B,GAAcngC,QAAU,EAEhC,cAAC,EAAD,IAKA,eAAC,WAAD,WACI,6BAAKmgC,EAAavlC,OAClB,sBAAKC,UAAU,oBAAf,2DACkD,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoCggC,EAAaxkC,gBAAzD,SAA4EwkC,EAAat/B,WAD3I,aAGA,cAAC,GAAD,IACA,8BAEQ,CACI/G,UAAW,cAAC,GAAD,CAAmBgK,YAAaq8B,EAAc10B,OAAQA,EAAQs/B,WAAYA,EAAYS,UAAU,IAC3G,6BAA8B,cAAC,GAAD,CAAmC1nC,YAAaq8B,IAC9E,sBAAuB,cAAC,GAAD,CAA4Br8B,YAAaq8B,IAChE,QAAW,cAAC,GAAD,CAAkBr8B,YAAaq8B,IAC1C,SAAY,cAAC,GAAD,CAAmB10B,OAAQA,EAAQ3H,YAAaq8B,EAAc4K,WAAYA,IACtF,OAAU,cAAC,GAAD,CAAiBjnC,YAAaq8B,EAAc/I,WAAY3rB,EAAOsnB,SACzE,sBAAuB,cAAC,GAAD,CAAkBtnB,OAAQA,KACnDA,EAAOpL,QAGjB,gCACI,qBAAKxF,UAAU,iEAAf,SACI,mDAEJ,cAAC,GAAD,CAAmBomC,cAAex1B,EAAOmK,IAAKm1B,WAAYA,OAe9C,eAAft/B,EAAOmK,KACJ,qBAAK/a,UAAU,gBAAf,SACI,qBAAKA,UAAU,cAAf,SACI,qBAAKA,UAAU,wCAAf,SACI,qBAAKA,UAAU,6CAAf,SACI,qBAAKA,UAAU,gCAAf,SACI,mBAAGgI,KAAK,qCAAqCC,OAAO,SAASH,IAAI,aAAjE,SAA8E,cAACY,EAAA,EAAD,CAAO7I,IAAI,qFAAqFC,IAAI,oCAiB1L,qBAAf8Q,EAAOmK,KACJ,qBAAK/a,UAAU,gBAAf,SACI,qBAAKA,UAAU,cAAf,SACI,qBAAKA,UAAU,wCAAf,SACI,qBAAKA,UAAU,6CAAf,SACI,qBAAKA,UAAU,gCAAf,SACI,mBAAGgI,KAAK,4BAA4BC,OAAO,SAASH,IAAI,aAAxD,SAAqE,cAACY,EAAA,EAAD,CAAO7I,IAAI,sFAAsFC,IAAI,yCCvH5MsgB,GAAeC,KAAOC,KAAV,oCACd,SAAA7c,GAAK,OAAIA,EAAM8c,UAAN,sCAoEEqwB,GA/DgB,SAAC,GAAkE,IAAhE/wB,EAA+D,EAA/DA,oBAAqBgxB,EAA0C,EAA1CA,iBAAkBx7B,EAAwB,EAAxBA,QAAS5P,EAAe,EAAfA,SAC9E,EAAsC5D,mBAASwT,GAA/C,mBAAOy7B,EAAP,KAAoBC,EAApB,KA0CA,OAJA1tC,qBAAU,YAvBqB,SAACud,EAAagF,EAAaorB,GAEtD,IAIIC,EAJsBD,EAAYhsC,QAAO,SAAUkS,GACnD,OAAQA,EAAe8I,WAG0BrhB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAExDU,EAAY5b,QAAO,SAAUkS,GACtD,OAAQA,EAAe8I,WAGwBrhB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEnF0F,EAAcA,EAAYjnB,KAAI,SAAAzB,GAG1B,OAFAA,EAAK+X,UAAW,EAChB/X,EAAK8iB,QAAUixB,EAA2Br3B,SAAS1c,EAAKgjB,YACjDhjB,KAGX6zC,EAAenrB,GAIfsrB,CAAuBrxB,EAAqBxK,EAASw7B,KACtD,CAAChxB,EAAqBxK,EAASw7B,IAG9B,qCACI,kDACCC,EAAYnyC,KAAI,SAACzB,EAAM2B,GAAP,OACb,gCACI,kCACI,uBACI+Q,UAAQ,EACRpK,KAAK,WACLwa,QAAS9iB,EAAK8iB,UAAW,EACzBtb,QAAS,kBAlDlB,SAAA7F,GACX,IAAMohB,EAAO,YAAO6wB,GACpB7wB,EAAQlL,OAAOlW,EAAO,EAAG,CACrBqL,KAAM4mC,EAAYjyC,GAAOqL,KACzBgW,WAAY4wB,EAAYjyC,GAAOqhB,WAC/BixB,wBAAyBL,EAAYjyC,GAAOsyC,wBAC5CnxB,SAAU8wB,EAAYjyC,GAAOmhB,QAC7B/K,SAAU67B,EAAYjyC,GAAOoW,WAEjC87B,EAAe9wB,GACfxa,EAASwa,GAwC0BE,CAAOthB,IACtBoW,SAAU/X,EAAK+X,WAAY,IANnC,IAOO,cAAC,GAAD,CAAcsL,SAAUrjB,EAAK+X,SAA7B,SAAwC/X,EAAKgN,UAC5C,yBATFhN,EAAKgjB,mBCoKhB2B,GAxNM,SAAC,GAA8F,IAA5FuvB,EAA2F,EAA3FA,qBAAsBrvB,EAAqE,EAArEA,UAAWnB,EAA0D,EAA1DA,YAAaoB,EAA6C,EAA7CA,MAAOC,EAAsC,EAAtCA,MAAO0N,EAA+B,EAA/BA,eAAgBzN,EAAe,EAAfA,SAEhG,EAAkErgB,mBAASuvC,GAA3E,mBAAOC,EAAP,KAAkCC,EAAlC,KAEA,EAAsCzvC,mBAAS,qCAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAoCzgB,mBAAS,IAA7C,mBAAO0gB,EAAP,KAAmBC,EAAnB,KACA,EAAkC3gB,mBAAS,IAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KACA,EAA4D7gB,mBAAS,IAArE,mBAAO8gB,EAAP,KAA+BC,EAA/B,KACA,EAAgD/gB,mBAAS,IAAzD,mBAAOghB,EAAP,KAAyBC,EAAzB,KACA,EAAgDjhB,mBAAS,IAAzD,mBAAOkhB,EAAP,KAAyBC,EAAzB,KACA,EAAkEnhB,mBAAS,IAA3E,mBAAO0vC,EAAP,KAAkCC,EAAlC,KAGMvuB,EAAkB,WACpBX,EAAe,qCACfE,EAAc,IACdE,EAAa,KAyDjBrf,qBAAU,YAtDkB,WACxB,GAAIud,EAAYzb,OAAS,EAAG,CAExB,IAAI0a,EAAsBe,EAAY5b,QAAO,SAAUkS,GACnD,OAAmC,IAA3BA,EAAe8I,WAGvBtB,EAAiB,YAAI,IAAI1H,IAAI6I,EAAoBlhB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAE1ExE,EAAevZ,OAAS,GACxByd,EAA0BlE,EAAexL,KAAK,OAItD,GAAI8O,EAAM7c,OAAS,EAAG,CAElB,IAAImc,EAAgBU,EAAMhd,QAAO,SAAUkS,GACvC,OAAmC,IAA3BA,EAAe8I,WAGvBpB,EAAW,YAAI,IAAI5H,IAAIsK,EAAc3iB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAE9DtE,EAASzZ,OAAS,GAClB2d,EAAoBlE,EAAS1L,KAAK,OAI1C,GAAI+O,EAAM9c,OAAS,EAAG,CAElB,IAAIsb,EAAgBwB,EAAMjd,QAAO,SAAUkS,GACvC,OAAmC,IAA3BA,EAAe8I,WAGvBlB,EAAW,YAAI,IAAI9H,IAAIyJ,EAAc9hB,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAE9DpE,EAAS3Z,OAAS,GAClB6d,EAAoBlE,EAAS5L,KAAK,OAI1C,GAAIyc,EAAexqB,OAAS,EAAG,CAE3B,IAAIssC,EAAyB9hB,EAAe3qB,QAAO,SAAUkS,GACzD,OAAmC,IAA3BA,EAAe8I,WAGvB0P,EAAoB,YAAI,IAAI1Y,IAAIy6B,EAAuB9yC,KAAI,SAAAzB,GAAI,OAAIA,EAAKgN,UAAQgZ,OAEhFwM,EAAkBvqB,OAAS,GAC3BqsC,EAA6B9hB,EAAkBxc,KAAK,QAM5DiQ,GACAmuB,EAA6BF,GAC7BnuB,IACIf,IACAU,EAA0B,IAC1BE,EAAoB,IACpBE,EAAoB,IACpBwuB,EAA6B,OAElC,CAACJ,EAAsBlvB,IAE1B7e,qBAAU,WACN0e,EAAUtV,QAAUwW,IACrB,CAAClB,IA4EJ,OAAIsvB,EAA0BlsC,OAAS,EAE/B,mCACI,sBAAKnF,UAAU,YAAf,UACI,sBAAKA,UAAU,wCAAf,UACI,sBAAKA,UAAU,oCAAf,UACgC,KAA3B2iB,GACG,gCAAK,mDAA+BA,KAElB,KAArBE,GACG,gCAAK,6CAAyBA,KAEZ,KAArBE,GACG,gCAAK,6CAAyBA,KAEH,KAA9BwuB,GACG,gCAAK,yDAAqCA,KAEjB,KAA3B5uB,GAAsD,KAArBE,GAAgD,KAArBE,GAAyD,KAA9BwuB,GACrF,yDAGR,qBAAKvxC,UAAU,kDAAf,SACI,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAazH,SAjGrD,SAACyE,EAAQC,GAExB,IAAI8D,EAAe,GACfb,EAAa,GACbE,EAAY,GAED,MAAXpD,GAA6B,MAAXA,GAClB+D,EAAeiuB,EAA0BnuB,MAAK,SAAUnhB,EAAGshB,GACvD,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EACrB,KAEXd,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBF,EAAa,sBAEK,MAAXlD,GAA6B,MAAXA,GACzB+D,EAAeiuB,EAA0BnuB,MAAK,SAAUnhB,EAAGshB,GACvD,IAAIC,EAAQvhB,EAAEiE,SAASL,cAAe4d,EAAQF,EAAErd,SAASL,cAEzD,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,GAERxhB,EAAEhC,KAAOsjB,EAAEtjB,KAFa,EAGxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBF,EAAa,QAEK,MAAXlD,GAA6B,MAAXA,IACzB+D,EAAeiuB,EAA0BnuB,MAAK,SAAUnhB,EAAGshB,GACvD,IAAIC,EAAQvhB,EAAEwD,eAAeI,cAAe4d,EAAQF,EAAE9d,eAAeI,cAErE,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,GAERxhB,EAAEhC,KAAOsjB,EAAEtjB,KAFa,EAGxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAEX0iB,EAAY,MAEG,MAAXpD,IACA+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGhBF,EAAa,cAIjB+uB,EAA6BluB,GAC7Bd,EAAe,YAAchD,EAAIrX,OAAOpD,WACxC2d,EAAcD,GACdG,EAAaD,IA2B6EzV,GAAG,0BAA0BhN,UAAU,uBAA7G,UACI,cAACuf,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,sCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,mCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,2CAIZ,cAACza,GAAA,EAAD,CACIhC,UAAWgzC,EACX9uB,WAAYA,EACZE,UAAWA,EACXnkB,eAAgB,CAAC,GAAI,qBAAsB,OAAQ,cACnDC,YAAa,CAAC,IAAK,OAAQ,WAAY,kBACvC+B,MAAK,iCAOjB,mCACI,oDC2HDoxC,GApUW,SAAC,GAAiE,IAA/Dr7B,EAA8D,EAA9DA,kBAAmBs7B,EAA2C,EAA3CA,eAAgBC,EAA2B,EAA3BA,qBAEtDhhC,EAASzD,cAEf,EAA0DtL,mBAAS,IAAnE,mBAAOgwC,EAAP,KAA8BC,EAA9B,KAEA,EAAwDjwC,mBAAS,IAAjE,mBAAOuvC,EAAP,KAA6BW,EAA7B,KAGA,EAAsClwC,mBAAS,IAA/C,mBAAO+e,EAAP,KAAoBsD,EAApB,KACA,EAAsDriB,mBAAS,IAA/D,mBAAOge,EAAP,KAA4BsE,EAA5B,KAGA,EAAgCtiB,mBAAS,IAAzC,mBAAO4f,EAAP,KAAiB2C,EAAjB,KACA,EAA0CviB,mBAAS,IAAnD,mBAAOyf,EAAP,KAAsB+C,EAAtB,KAGA,EAAgCxiB,mBAAS,IAAzC,mBAAOgf,EAAP,KAAiByD,EAAjB,KACA,EAA0CziB,mBAAS,IAAnD,mBAAO4e,EAAP,KAAsB8D,EAAtB,KAGA,EAAgD1iB,mBAAS,IAAzD,mBAAOgvC,EAAP,KAAyBmB,EAAzB,KAEMjwB,EAAYyC,iBAAO,MACzB,EAAwB3iB,oBAAS,GAAjC,oBAAO4Y,GAAP,MAAagK,GAAb,MAKA,GAAgC5iB,oBAAS,GAAzC,qBAAOqgB,GAAP,MAAiBwC,GAAjB,MAEMutB,GAA0B,uCAAG,sBAAAlwC,EAAA,sDAC/BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,mCACJrE,MAAK,SAAA0E,GACJwqC,EAAyBxqC,EAAmB5I,KAAKqM,YALtB,2CAAH,qDAqF1B4Z,GAAkB,SAACutB,GACrB,IAAIC,EAAwBD,EAExBE,EAAkC,GAClCC,EAA4B,GAC5BC,EAA4B,GAC5BC,EAA+B,GAG/BztB,EAAyBjF,EAAoB7a,QAAO,SAAUkS,GAC9D,OAAQA,EAAe8I,WAG3B,GAAI8E,EAAuB3f,OAAS,EAAG,CAEnC,IAAI+f,EAAwBJ,EAAuBnmB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEnFkyB,EAAkCF,EAAsBltC,QAAO,gBAAGxE,EAAH,EAAGA,qBAAH,OAA8B0kB,EAAsBtL,SAASpZ,MAIhI,IAAI2kB,EAAmB7D,EAActc,QAAO,SAAUkS,GAClD,OAAQA,EAAe8I,WAG3B,GAAImF,EAAiBhgB,OAAS,EAAG,CAE7B,IAAIigB,EAAkBD,EAAiBxmB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEvEmyB,EAA4BH,EAAsBltC,QAAO,gBAAGlE,EAAH,EAAGA,eAAH,OAAwBskB,EAAgBxL,SAAS9Y,MAI9G,IAAIukB,EAAmB5E,EAAczb,QAAO,SAAUkS,GAClD,OAAQA,EAAe8I,WAG3B,GAAIqF,EAAiBlgB,OAAS,EAAG,CAE7B,IAAImgB,EAAkBD,EAAiB1mB,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAEvEoyB,EAA4BJ,EAAsBltC,QAAO,gBAAGtE,EAAH,EAAGA,eAAH,OAAwB4kB,EAAgB1L,SAASlZ,MAI9G,IAAIqE,EAAsB8rC,EAAiB7rC,QAAO,SAAUkS,GACxD,OAAQA,EAAe8I,WAG3B,GAAIjb,EAAoBI,OAAS,EAAG,CAEhC,IAAIqtC,EAAqBztC,EAAoBpG,KAAI,SAAUqiB,GAAO,OAAOA,EAAId,cAIzEuyB,EAFyBb,EAAqB5sC,QAAO,gBAAGgsB,EAAH,EAAGA,kBAAH,OAA2BwhB,EAAmB54B,SAASoX,MAE1DryB,KAAI,SAAUqiB,GAAO,OAAOA,EAAIzgB,2BAEtFgyC,EAA+BL,EAAsBltC,QAAO,gBAAG1F,EAAH,EAAGA,WAAH,OAAoBmzC,EAAyB74B,SAASta,OAGlHwlB,EAAuB3f,OAAS,GAAKggB,EAAiBhgB,OAAS,GAAKkgB,EAAiBlgB,OAAS,GAAKJ,EAAoBI,OAAS,KAChIgtC,EAAqB,YAAO,IAAIn7B,IAAJ,sBAAYo7B,GAAZ,YAAgDE,GAAhD,YAA8ED,GAA9E,YAA4GE,MAExI7tB,IAAY,IAGhBytB,EAAwBA,EAAsBjvB,MAAK,SAAUnhB,EAAGshB,GAC5D,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAGXwuB,EAAwBI,GAzJQ,SAACO,GACjC,GAAIA,EAAwBvtC,OAAS,EAAG,CACpC,IAEMqgB,EAFW,YAAO,IAAIC,IAAIitB,EAAwB/zC,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,qBAA0BA,OAAQ4M,UAErEnL,KAAI,SAAA+mB,GAAC,MAAK,CAAExb,KAAMwb,EAAEngB,eAAgB2a,WAAYwF,EAAEllB,qBAAsBwf,SAAS,MAEvHwF,EAAkBtC,MAAK,SAAUnhB,EAAGshB,GAChC,IAAIC,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAIXW,EAAesB,IAsInBmtB,CAA4BR,GAlIC,SAACS,GAE9B,GAAIA,EAAkBztC,OAAS,EAAG,CAC9B,IAEM0gB,EAFK,YAAO,IAAIJ,IAAImtB,EAAkBj0C,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,eAAoBA,OAAQ4M,UAE/DnL,KAAI,SAAAoD,GAAC,MAAK,CAAEmI,KAAMnI,EAAEiE,SAAUka,WAAYne,EAAEjB,eAAgBsgB,qBAAsBrf,EAAEvB,qBAAsBwf,SAAS,EAAO/K,UAAU,MAE9J4Q,EAAY3C,MAAK,SAAUnhB,EAAGshB,GAC1B,GAAe,OAAXthB,EAAEmI,MAA4B,OAAXmZ,EAAEnZ,KACrB,OAAO,EAEX,IAAIoZ,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAGXa,EAAYyB,IA4GhBgtB,CAAyBx8B,GAxGI,SAACu8B,GAC9B,GAAIA,EAAkBztC,OAAS,EAAG,CAC9B,IAEM4gB,EAFK,YAAO,IAAIN,IAAImtB,EAAkBj0C,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,eAAoBA,OAAQ4M,UAE/DnL,KAAI,SAAAqnB,GAAC,MAAK,CAAE9b,KAAM8b,EAAElgB,SAAUoa,WAAY8F,EAAEtlB,eAAgB0gB,qBAAsB4E,EAAExlB,qBAAsBwf,SAAS,EAAO/K,UAAU,MAE9J8Q,EAAY7C,MAAK,SAAUnhB,EAAGshB,GAC1B,IAAIC,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAIXe,EAAYyB,IAqFhB+sB,CAAyBz8B,IAG7BhT,qBAAU,WACN4uC,OACD,CAACrhC,IAEJvN,qBAAU,WACNshB,GAAgBtO,KAEjB,CAACzF,EAAQyF,EAAmBs7B,EAAgB9xB,EAAqBY,EAAea,EAAeuvB,IA8BlG,OAAIjwB,EAAYzb,QAAU,EAElB,cAAC,EAAD,IAIA,sBAAKnF,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,sFACA,sBAAMf,KAAK,cAAcgB,QAAQ,gFAErC,+CACA,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,uFAAuFC,IAAI,sBACnI,8BACI,qBAAKE,UAAU,UAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYi1C,UAG5D,sBAAK7xC,UAAU,YAAf,UACI,cAAC2L,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QArOvB,kBAAM+f,IAAQ,IAqO8BzkB,UAAU,iCAAzD,SAA2F,qBAD/F,OAEI,cAAC2L,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QAhDtB,WAEhB,GAAImb,EAAoB1a,OAAS,EAAG,CAChC,IAAM+gB,EAAiBrG,EAAoBlhB,KAAI,SAAA+mB,GAAC,MAAK,CAAExb,KAAMwb,EAAExb,KAAMgW,WAAYwF,EAAExF,WAAYF,SAAS,MACxGmE,EAAuB+B,GAG3B,GAAI5E,EAAcnc,OAAS,EAAG,CAC1B,IAAMuc,EAAWJ,EAAc3iB,KAAI,SAAAoD,GAAC,MAAK,CAAEmI,KAAMnI,EAAEiE,SAAUka,WAAYne,EAAEjB,eAAgBsgB,qBAAsBrf,EAAEvB,qBAAsBwf,SAAS,EAAO/K,UAAU,MACnKoP,EAAiB3C,GAGrB,GAAIjB,EAActb,OAAS,EAAG,CAC1B,IAAM2b,EAAWL,EAAc9hB,KAAI,SAAAqnB,GAAC,MAAK,CAAE9b,KAAM8b,EAAElgB,SAAUoa,WAAY8F,EAAEtlB,eAAgB0gB,qBAAsB4E,EAAExlB,qBAAsBwf,SAAS,EAAO/K,UAAU,MACnKsP,EAAiBzD,GAGrB,GAAI+vB,EAAiB1rC,OAAS,EAAG,CAC7B,IAAM6rC,EAAcW,EAAehzC,KAAI,SAAAo0C,GAAE,MAAK,CAAE7oC,KAAM6oC,EAAG7oC,KAAMgW,WAAY6yB,EAAG7yB,WAAYkB,qBAAsB2xB,EAAG3xB,qBAAsB+vB,wBAAyB4B,EAAG5B,wBAAyBnxB,SAAS,EAAO/K,UAAU,MACxN+8B,EAAoBhB,GAGxBrsB,GAAgBtO,GAChBqO,IAAY,GAEZ3C,EAAUtV,WAuBkDzM,UAAU,uBAA1D,+BACA,eAACmmB,GAAA,EAAD,CAAW1L,KAAMA,GAAM2L,OAxOnB,kBAAM3B,IAAQ,IAwOlB,UACI,cAAC0B,GAAA,EAAU3O,OAAX,CAAkB6O,aAAW,EAA7B,SACI,cAACF,GAAA,EAAU5e,MAAX,UACI,sDAGR,eAAC4e,GAAA,EAAUG,KAAX,WACI,oHACA,qBAAKtmB,UAAU,mBAAf,SACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,GAAD,CACIqV,QAASuL,EACTf,oBAAqBA,EACrBpa,SAAU,SAAA/G,GACNylB,EAAuBzlB,UAKvC,qBAAKsB,UAAU,mBAAf,SACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,GAAD,CACIqV,QAASoM,EACT5B,oBAAqBA,EACrByB,cAAeA,EACf7b,SAAU,SAAA/G,GACN2lB,EAAiB3lB,UAKjC,qBAAKsB,UAAU,mBAAf,SACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,GAAD,CACIqV,QAASwL,EACThB,oBAAqBA,EACrBY,cAAeA,EACfhb,SAAU,SAAA/G,GACN6lB,EAAiB7lB,UAKjC,qBAAKsB,UAAU,mBAAf,SACI,qBAAKA,UAAU,4CAAf,SACI,cAAC,GAAD,CACIqV,QAASs8B,EACT9xB,oBAAqBA,EACrBgxB,iBAAkBA,EAClBprC,SAAU,SAAA/G,GACNszC,EAAoBtzC,gBAO5C,8BACI,cAAC,GAAD,CAAc0yC,qBAAsBA,EAAsBrvB,UAAWA,EAAWnB,YAAaf,EAAqBmC,MAAOV,EAAeW,MAAOxB,EAAekP,eAAgBkhB,EAAkB3uB,SAAUA,cCrQnN8wB,GA9DgB,WAC3B,IAAMpiC,EAASzD,cACf,EAAkDtL,mBAAS,IAA3D,mBAAOwU,EAAP,KAA0BC,EAA1B,KACA,EAAwDzU,mBAAS,IAAjE,mBAAO+vC,EAAP,KAA6BqB,EAA7B,KACA,EAA4CpxC,mBAAS,IAArD,mBAAO8vC,EAAP,KAAuBuB,EAAvB,KAEMC,EAAsB,uCAAG,WAAOC,GAAP,SAAArxC,EAAA,sDAC3BM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iCACJrE,MAAK,SAAAuU,GAEJ,OADAb,EAAqBa,EAAsBzY,MACpC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,+CAERrE,MAAK,SAAAywC,GACJJ,EAAwBI,EAAkB30C,MAC1C40C,EAAkCD,EAAkB30C,SAZ7B,2CAAH,sDAgBtB40C,EAAoC,SAACC,GAEvC,GAAIA,EAAepuC,OAAS,EAAG,CAC3B,IAEMquC,EAFc,YAAO,IAAI/tB,IAAI8tB,EAAe50C,KAAI,SAAAzB,GAAI,MAAI,CAACA,EAAI,kBAAuBA,OAAQ4M,UAEzDnL,KAAI,SAAAo0C,GAAE,MAAK,CAAE7oC,KAAM6oC,EAAG9hB,YAAa/Q,WAAY6yB,EAAG/hB,kBAAmB5P,qBAAsB2xB,EAAGtT,4BAA6B0R,wBAAyB4B,EAAGxyC,wBAAyByf,SAAS,EAAO/K,UAAU,MAEnPu+B,EAAkBtwB,MAAK,SAAUnhB,EAAGshB,GAChC,IAAIC,EAAQvhB,EAAEmI,KAAKvE,cACf4d,EAAQF,EAAEnZ,KAAKvE,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAIX2vB,EAAkBM,KAQ1B,OAJAnwC,qBAAU,WACN8vC,EAAuBviC,KACxB,CAACA,IAGA,qCACI,eAAC3F,EAAA,EAAD,WACI,wDACA,sBAAMf,KAAK,cAAcgB,QAAQ,0BAErC,cAAC,GAAD,CAAmBmL,kBAAmBA,EAAmBs7B,eAAgBA,EAAgBC,qBAAsBA,QCJ5G6B,GAtDiB,WAE9B,IAAM7iC,EAASzD,cAEf,EAAsCtL,mBAAS,gBAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAsCzgB,mBAAS,IAA/C,mBAAO4sB,EAAP,KAAoBC,EAApB,KACMF,EAAc7uB,OAAOuB,sBAAwB,IAAM0P,EAAO4O,WAAa,IAAM5O,EAAO+O,KAAO,IAAM/O,EAAO8iC,MAsB9G,OApBArwC,qBAAU,WAIR,IAAIsrB,EACJ,OAHAD,EAAe9d,EAAOpL,MAGdoL,EAAOpL,MACb,IAAK,cACHmpB,EAAkB,cAClB,MACF,IAAK,eACHA,EAAkB,eAClB,MACF,QACEA,EAAkB,eAGtBrM,EAAeqM,KAEd,CAAC/d,IAGF,gCACE,qBAAK5Q,UAAU,2CAAf,SACE,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAS,eAAqBf,IAAhBwvB,EAA4B,UAAY,IAA1D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,GAAb,4BAEF,oBAAIxuB,UAAS,UAAqB,gBAAhByuB,EAAgC,UAAY,IAA9D,SACE,cAAC,IAAD,CAAM/uB,GAAE,UAAK8uB,EAAL,gBAAR,gCAON,qBAAKxuB,UAAU,uBAAf,SACE,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAarV,GAAG,0BAA0BkI,QAAQ,SAASlV,UAAU,8CAAxG,UACE,cAACuf,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,GAAhC,0BACA,cAACjP,GAAA,EAAS9W,KAAV,CAAe4G,GAAIwL,IAAMnb,GAAE,UAAK8uB,EAAL,gBAA3B,kCCzBKmlB,GA1BW,SAAC,GAAuB,IAArBC,EAAoB,EAApBA,cAC3B,OACE,sBAAK5zC,UAAU,UAAf,UACE,sBAAKA,UAAU,gBAAf,UACE,qBAAIA,UAAU,uBAAd,UAAsC4zC,EAAc9tC,SAApD,IAA+D8tC,EAAchzC,YAA7E,KAA4FgzC,EAAcruC,kBACzGquC,EAAc3kB,uBAAwB2kB,EAAc7tC,oBAE5B,KAAzB6tC,EAAcC,aAA0C50C,IAAzB20C,EAAcC,QAAiD,OAAzBD,EAAcC,QACnF,8BACE,oBAAG7zC,UAAU,uCAAuCgI,KAAM4rC,EAAcC,OAAQ5rC,OAAO,SAASH,IAAI,aAApG,cAAkH,mDAAlH,aC8EKmrB,GAlFQ,SAAC,GAA8D,IAA5D2gB,EAA2D,EAA3DA,cAAeE,EAA4C,EAA5CA,iBAAkBC,EAA0B,EAA1BA,oBAEnDC,EAA4B,GAC5BC,OAA0Bh1C,EAgB9B,OAdI80C,EAAoB5uC,OAAS,KAC7B6uC,EAA4BD,EAAoB/uC,QAAO,SAAUkS,GAC7D,OAAqC,OAA7BA,EAAeg9B,cAGDhxB,MAAK,SAAUnhB,EAAGshB,GACxC,OAAOthB,EAAEmyC,UAAY7wB,EAAE6wB,aAGvBF,EAA0B7uC,OAAS,IACnC8uC,EAA0BD,EAA0B,KAKxD,sBAAKh0C,UAAU,YAAf,UACI,sBAAKA,UAAU,YAAf,eACiCf,IAA5Bg1C,GACG,qBAAKj0C,UAAU,0CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,qEAAgEo0C,EAAwBE,UAAYn0C,UAAU,YAAYF,IAAI,cAGhJ,gCACI,cAAC,GAAD,CAAmB8zC,cAAeA,EAAeK,wBAAyBA,IAC1E,qBAAKj0C,UAAU,UAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYg3C,EAAcQ,wBAI9E,8BACI,qBAAKp0C,UAAU,mBAAf,SACI,wBAAQM,MAAM,eAAegQ,MAAM,MAAMC,OAAO,MAAM1Q,IAAG,uDAAkD+zC,EAAc5jC,kBAAhE,YAAqF4jC,EAAc1jC,mBAAnG,6DAA0K0jC,EAAc1lB,uBAAyB8G,iBAAe,QAGjS,qBAAKh1B,UAAU,YAAf,SACI,sBAAKA,UAAU,wCAAf,UACKg0C,EAA0B7uC,OAAS,GAChC,qBAAKnF,UAAU,+BAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,qEAAgEm0C,EAA0B,GAAGG,UAAYvrC,MAAM,OAAO9I,IAAI,cAG3Ik0C,EAA0B7uC,OAAS,GAChC,qBAAKnF,UAAU,+BAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,qEAAgEm0C,EAA0B,GAAGG,UAAYvrC,MAAM,OAAO9I,IAAI,mBAKpJ,sBAAKE,UAAU,wBAAf,UACI,oBAAIA,UAAU,OAAd,8BACA,gCACI,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,QAAf,SACI,4CAEJ,qBAAKA,UAAU,QAAf,SACI,+CAGR,qBAAKA,UAAU,uBAAf,SACK8zC,EAAiBn1C,KAAI,SAAA01C,GAAY,OAC9B,sBAAKr0C,UAAU,6CAAf,UACI,qBAAKA,UAAU,QAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B+uC,EAAavjB,sBAA5C,YAAqEujB,EAAatjB,sBAAlF,YAA2GsjB,EAAarjB,mBAAhI,SAAsJqjB,EAAapjB,gBAEvK,sBAAKjxB,UAAU,QAAf,UACKq0C,EAAanjB,SADlB,UAJ6DmjB,EAAaxrC,mB,oBCN3FyrC,GA3Dc,SAAC,GAA4C,IAA1CV,EAAyC,EAAzCA,cAAeG,EAA0B,EAA1BA,oBAC3C,EAAwClyC,mBAAS,GAAjD,mBAAO0yC,EAAP,KAAqBC,EAArB,KACA,EAAwC3yC,oBAAS,GAAjD,mBAAO4yC,EAAP,KAAqBC,EAArB,KACA,EAAkC7yC,mBAAS,IAA3C,mBAAO8yC,EAAP,KAAkBC,EAAlB,KAEMC,EAAeziC,uBAAY,SAACnI,EAAD,GAA6B,EAAnB+d,MAAoB,IAAbnpB,EAAY,EAAZA,MAC9C21C,EAAgB31C,GAChB61C,GAAgB,KACjB,IAgBH,OAJArxC,qBAAU,YALuB,SAACyxC,GAC9B,IAAIC,EAAyBD,EAAwBn2C,KAAI,SAAA+mB,GAAC,MAAK,CAAE7lB,IAAK,8DAAgE6lB,EAAEyuB,SAAU7jC,MAAOoV,EAAEsvB,WAAYzkC,OAAQmV,EAAEuvB,gBACjLL,EAAaG,GAIbG,CAAyBnB,KAC1B,CAACA,IAEAY,EAAUxvC,QAAU,EAEhB,cAAC,EAAD,IAIA,sBAAKnF,UAAU,YAAf,UACI,qBAAKA,UAAU,YAAf,SACI,cAAC,GAAD,CAAmB4zC,cAAeA,MAEtC,qBAAK5zC,UAAU,YAAf,SACI,+CAEJ,sBAAKA,UAAU,YAAf,UACI,cAAC,KAAD,CAASinB,OAAQ0tB,EAAWjwC,QAASmwC,IACrC,cAAC,KAAD,UACKJ,EACG,cAAC,KAAD,CAAOU,QA/BT,WAClBX,EAAgB,GAChBE,GAAgB,IA6BI,SACI,cAAC,KAAD,CACIU,aAAcb,EACdc,MAAOV,EAAUh2C,KAAI,SAAAgzB,GAAC,kCACfA,GADe,IAElB2jB,OAAQ3jB,EAAE4jB,OACVC,QAAS7jB,EAAErxB,eAIvB,cC5Cbu3B,GAXc,SAAC,GAAuB,IAArB+b,EAAoB,EAApBA,cAC5B,OACI,gCACI,8CACA,cAAC,GAAD,CAAmBA,cAAeA,IAClC,4BCiEG6B,GA9DsB,WAEjC,IAAM7kC,EAASzD,cAEf,EAA0CtL,mBAAS,IAAnD,mBAAO+xC,EAAP,KAAsB8B,EAAtB,KACA,EAAsD7zC,mBAAS,IAA/D,mBAAOkyC,EAAP,KAA4B4B,EAA5B,KACA,EAA0C9zC,mBAAS,IAAnD,mBAAO+zC,EAAP,KAAsBC,EAAtB,KAEMC,EAAwC,uCAAG,WAAOC,GAAP,SAAAh0C,EAAA,sDAC7CM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,0BAAyC8uC,KAC7CnzC,MAAK,SAAAozC,GAEJ,OADAN,EAAiBM,EAAkBt3C,MAC5B2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iCAAgD8uC,QAExDnzC,MAAK,SAAAqzC,GAEJ,OADAN,EAAuBM,EAAwBv3C,MACxC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,iDAAgE8uC,QAExEnzC,MAAK,SAAAszC,GACJL,EAAiBK,EAAmBx3C,SAjBK,2CAAH,sDAyB9C,OAJA2E,qBAAU,WACNyyC,EAAyCllC,EAAO8iC,SACjD,CAAC9iC,EAAO8iC,QAEPE,EAAczuC,QAAU,EAEpB,cAAC,EAAD,IAKA,eAAC,WAAD,WACI,eAAC8F,EAAA,EAAD,WACI,kCAAQ2oC,EAAc7zC,KAAtB,sBAA+C6zC,EAAc9tC,SAA7D,IAAwE8tC,EAAchzC,YAAtF,KAAqGgzC,EAAcruC,eAAnH,eAA+IquC,EAAc/tC,aAA7J,kBACA,sBAAMqE,KAAK,cAAcgB,QAAO,sBAAiB0oC,EAAc7zC,KAA/B,4DAAuF6zC,EAAc9tC,SAArG,YAAiH8tC,EAAchzC,YAA/H,aAA+IgzC,EAAcruC,eAA7J,iBAEpC,6BAAKquC,EAAc7zC,OACnB,qBAAKC,UAAU,0BAAf,SAA0C4zC,EAAc/tC,eACxD,cAAC,GAAD,IACA,mCAEQ,CACI5G,UAAW,cAAC,GAAD,CAAgB20C,cAAeA,EAAeE,iBAAkB8B,EAAe7B,oBAAqBA,IAC/G,YAAe,cAAC,GAAD,CAAsBH,cAAeA,EAAeG,oBAAqBA,IACxF,eAAgB,cAAC,GAAD,CAAsBH,cAAeA,KACvDhjC,EAAOpL,YCkClBa,GA3FF,SAAC,GAA4D,IAA1D8vC,EAAyD,EAAzDA,mBAAoBrX,EAAqC,EAArCA,YAAazoB,EAAwB,EAAxBA,kBAEvC3S,EAAWC,cAEjB,EAA8D9B,mBAAS,IAAvE,mBAAOu0C,EAAP,KAAgCC,EAAhC,KAEMC,EAAmB,uCAAG,sBAAAv0C,EAAA,sDACxBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,6BACJrE,MAAK,SAAA0E,GACJ+uC,EAA2B/uC,EAAmB5I,KAAKqM,YAL/B,2CAAH,qDASzB1H,qBAAU,WACNizC,MACD,CAAC5yC,EAASkE,WAUb,OACI,sBAAK5H,UAAU,SAAf,UACI,eAACiL,EAAA,EAAD,WACI,0HACA,sBAAMf,KAAK,cAAcgB,QAAQ,oGAGJ,OAA5BkrC,QAAgEn3C,IAA5Bm3C,GAAqE,KAA5BA,GAC9E,qBAAKl2C,wBAAyB,CAAEC,OAAQvD,aAAYw5C,MAExD,sBAAKp2C,UAAU,uBAAf,eAC4Bf,IAAtBoX,GAAmCA,EAAkBlR,OAAS,GAC5D,qBAAKnF,UAAU,0BAAf,SACI,qBAAKA,UAAU,mBAAf,SACI,sBAAKA,UAAU,wBAAf,UACI,8BACI,iDAEJ,8BACI,cAACmf,GAAA,EAAD,CAAgBnS,GAAG,4BAA4B1M,MAAM,gBAAgBi2C,KAAK,OAA1E,SACKlgC,EAAkB1X,KAAI,SAACzB,EAAM2B,GAAP,OACnB,cAAC0gB,GAAA,EAAS9W,KAAV,CAA2B4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqChE,EAAKsD,qBAA1C,YAAkEtD,EAAKwD,eAAvE,YAAyFxD,EAAKoC,YAArI,SAAoJpC,EAAK6C,MAArIlB,UAIhC,qBAAKmB,UAAU,OAAf,SACI,cAAC,IAAD,CAAMN,GAAIC,OAAOuB,sBAAjB,2CAEJ,8BACI,cAAC,IAAD,CAAMxB,GAAIC,OAAOuB,sBAAjB,SAAwC,qBAAKrB,IAAG,yFAA4FC,IAAI,6BAMnKq2C,EAAmBx3C,KAAI,SAAA63C,GAAc,OAClC,qBAA6Bx2C,UAAU,0BAAvC,SACI,qBAAKA,UAAU,mBAAf,SACI,sBAAKA,UAAU,wBAAf,UACI,8BACI,6BAAKw2C,EAAez2C,SAExB,8BACI,cAACof,GAAA,EAAD,CAAgBnS,GAAIwpC,EAAel3C,WAAYgB,MAAM,gBAAgBi2C,KAAK,OAA1E,UAnDD1X,EAoD4B2X,EAAel3C,WAnDrDw/B,EAAY95B,QAAO,SAAUkS,GAC1C,OAAQA,EAAe3X,oBAAsBs/B,MAkDiClgC,KAAI,SAACzB,EAAM2B,GAAP,OAClD,cAAC0gB,GAAA,EAAS9W,KAAV,CAA2B4G,GAAIwL,IAAMnb,GAAE,UAAKC,OAAOC,gBAAZ,YAA+B42C,EAAel3C,WAA9C,YAA4DpC,EAAKoC,YAAxG,SAAuHpC,EAAK6C,MAAxGlB,UAIhC,qBAAKmB,UAAU,OAAf,SACI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOC,gBAAZ,YAA+B42C,EAAel3C,YAAtD,kBAA0Ek3C,EAAez2C,KAAzF,iBAEJ,8BACI,cAAC,IAAD,CAAML,GAAE,UAAKC,OAAOC,gBAAZ,YAA+B42C,EAAel3C,YAAtD,SAAoE,qBAAKO,IAAG,+DAA0D22C,EAAeC,aAAe32C,IAAG,UAAK02C,EAAez2C,kBAjBjMy2C,EAAe3tC,IA5CX,IAACg2B,YC4FpB6X,GAjHK,SAAC,GAAqB,IAAnB5X,EAAkB,EAAlBA,YAErB,EAAgCj9B,mBAAS,IAAzC,mBAAO8yB,EAAP,KAAiBgiB,EAAjB,KACA,EAAsC90C,mBAAS,+BAA/C,mBAAOwgB,EAAP,KAAoBC,EAApB,KACA,EAAoCzgB,mBAAS,IAA7C,mBAAO0gB,EAAP,KAAmBC,EAAnB,KACA,EAAkC3gB,mBAAS,IAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KAEArf,qBAAU,WACRszC,EAAY7X,KACX,CAACA,IA0EJ,OAAInK,EAASxvB,OAAS,EAElB,qCACE,qBAAKnF,UAAU,0BAAf,SACE,eAACmf,GAAA,EAAD,CAAgBC,MAAM,MAAM9e,MAAO+hB,EAAazH,SA5ErC,SAACyE,EAAQC,GAE1B,IAAI8D,EAAe,GACfb,EAAa,GACbE,EAAY,GAED,MAAXpD,GAA6B,MAAXA,GACpB+D,EAAeuR,EAASzR,MAAK,SAAUnhB,EAAGshB,GACxC,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cAAe4d,EAAQF,EAAEtjB,KAAK4F,cAEjD,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,EAAgB,EACrB,KAETd,EAAY,MAEG,MAAXpD,IACF+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGdF,EAAa,gBAEO,MAAXlD,GAA6B,MAAXA,GAC3B+D,EAAeuR,EAASzR,MAAK,SAAUnhB,EAAGshB,GACxC,IAAIC,EAAQvhB,EAAEiE,SAASL,cAAe4d,EAAQF,EAAErd,SAASL,cAEzD,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,GAERxhB,EAAEhC,KAAOsjB,EAAEtjB,KAFa,EAGxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAET0iB,EAAY,MAEG,MAAXpD,IACF+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGdF,EAAa,QAEO,MAAXlD,GAA6B,MAAXA,IAC3B+D,EAAeuR,EAASzR,MAAK,SAAUnhB,EAAGshB,GACxC,IAAIC,EAAQvhB,EAAEwD,eAAeI,cAAe4d,EAAQF,EAAE9d,eAAeI,cAErE,OAAI2d,EAAQC,GAAiB,EACzBD,EAAQC,GAERxhB,EAAEhC,KAAOsjB,EAAEtjB,KAFa,EAGxBgC,EAAEhC,KAAOsjB,EAAEtjB,MAAc,EAEtB,KAET0iB,EAAY,MAEG,MAAXpD,IACF+D,EAAeA,EAAaI,UAC5Bf,EAAY,QAGdF,EAAa,cAGfo0B,EAAYvzB,GACZd,EAAe,YAAchD,EAAIrX,OAAOpD,WACxC2d,EAAcD,GACdG,EAAaD,IAO+DzV,GAAG,0BAA0BhN,UAAU,uBAA7G,UACE,cAACuf,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,gCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,gCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,6BACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,mCACA,cAACyE,GAAA,EAAS9W,KAAV,CAAeqS,SAAS,IAAxB,wCAGJ,cAAC1c,GAAA,EAAD,CACEC,UAAWs2B,EACXpS,WAAYA,EACZE,UAAWA,EACXnkB,eAAgB,CAAC,GAAI,eAAgB,OAAQ,cAC7CC,YAAa,CAAC,IAAK,OAAQ,WAAY,kBACvC+B,MAAM,QAMV,cAAC,EAAD,KCvDSs2C,GArDc,SAAC,GAA4D,IAA1D/X,EAAyD,EAAzDA,kBAAmBsX,EAAsC,EAAtCA,mBAAoBrX,EAAkB,EAAlBA,YAK/D0X,EAAiBL,EAAmBnxC,QAAO,SAAUkS,GACzD,OAAQA,EAAe5X,aAAeu/B,KAGlClK,EAAWmK,EAAY95B,QAAO,SAAUkS,GAC5C,OAAQA,EAAe3X,oBAAsBs/B,KAG/C,OAAIsX,EAAmBhxC,OAAS,GAAK25B,EAAY35B,OAAS,EAEtD,mCAC0B,kBAAtB05B,GACA,sBAAK7+B,UAAU,YAAf,UACE,eAACiL,EAAA,EAAD,WACE,kCAAQurC,EAAe,GAAGz2C,KAA1B,0CACA,sBAAMmK,KAAK,cAAcgB,QAAO,UAAKsrC,EAAe,GAAGz2C,KAAvB,iDAElC,6BAAKy2C,EAAe,GAAGz2C,OACvB,sBAAKC,UAAU,gBAAf,UACoC,sBAAjCw2C,EAAe,GAAGl3C,YACjB,qBAAKO,IAAI,gFAAgFC,IAAK02C,EAAe,GAAGz2C,OAEhF,YAAjCy2C,EAAe,GAAGl3C,YACjB,qBAAKO,IAAI,2FAA2FC,IAAK02C,EAAe,GAAGz2C,OAE3F,iBAAjCy2C,EAAe,GAAGl3C,YACjB,qBAAKO,IAAI,uFAAuFC,IAAK02C,EAAe,GAAGz2C,UAG3H,8BACE,qBAAKC,UAAU,UAAf,SAC2C,OAAvCw2C,EAAe,GAAGh3C,uBAAoEP,IAAvCu3C,EAAe,GAAGh3C,kBAAyE,KAAvCg3C,EAAe,GAAGh3C,kBACrH,qBAAKU,wBAAyB,CAAEC,OAAQvD,aAAY45C,EAAe,GAAGh3C,yBAI5E,cAAC,GAAD,CAAas/B,YAAanK,SAOhC,cAAC,EAAD,KCtBSkiB,GA3BO,SAAC,GAAwC,IAAtCC,EAAqC,EAArCA,kBAMjB9Y,EANsD,EAAlBc,YAEb95B,QAAO,SAAUkS,GAC5C,OAAQA,EAAe5X,aAAew3C,KAGT,GAE/B,YAAsB73C,IAAlB++B,EAEA,qCACE,eAAC/yB,EAAA,EAAD,WACE,gCAAQ+yB,EAAcj+B,OACtB,sBAAMmK,KAAK,cAAcgB,QAAS8yB,EAAciI,iBAElD,qBAAK/lC,wBAAyB,CAAEC,OAAQvD,aAAYohC,EAAc7nB,mBAKpE,cAAC,EAAD,KCwDS4gC,GAzEU,WAErB,IAAMnmC,EAASzD,cAEXugB,OAAczuB,OAEUA,IAAxB2R,EAAOomC,cAAsD,KAAxBpmC,EAAOomC,cAAgD,KAAxBpmC,EAAOqmC,mBAA+Ch4C,IAAxB2R,EAAOqmC,kBAE1Eh4C,IAAxB2R,EAAOomC,cAAsD,KAAxBpmC,EAAOomC,mBAA+C/3C,IAAxB2R,EAAOqmC,cAAsD,KAAxBrmC,EAAOqmC,eACtHvpB,EAAc,kBAFdA,EAAc,kBAKlB,MAAsC7rB,mBAAS,IAA/C,mBAAOi9B,EAAP,KAAoBoY,EAApB,KACA,EAAoDr1C,mBAAS,IAA7D,mBAAOs0C,EAAP,KAA2BgB,EAA3B,KACA,EAAkDt1C,mBAAS,IAA3D,mBAAOwU,EAAP,KAA0BC,EAA1B,KAEM8gC,EAA+B,uCAAG,WAAO/R,GAAP,SAAAtjC,EAAA,sDACpCM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gDACJrE,MAAK,SAAAy0C,GAEJ,OADAF,EAAsBE,EAAmB34C,MAClC2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,+CAERrE,MAAK,SAAA00C,GAEJ,OADAJ,EAAeI,EAAY54C,MACpB2D,IAAM,CACTC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,oCAERrE,MAAK,SAAAuU,GAEJ,GAAIA,EAAsBzY,KAAKyG,OAAS,EAAG,CACvC,IAAI+sC,EAAwB/6B,EAAsBzY,KAClDwzC,EAAsBhvB,MAAK,SAAUnhB,EAAGshB,GACpC,IAAIC,EAAQvhB,EAAEhC,KAAK4F,cACf4d,EAAQF,EAAEtjB,KAAK4F,cAEnB,OAAI2d,EAAQC,GACA,EAERD,EAAQC,EACD,EAEJ,KAGXjN,EAAqB47B,OAjCO,2CAAH,sDA0CrC,OAJA7uC,qBAAU,WACN+zC,EAAgCxmC,KACjC,CAACA,IAGA,cAAC,WAAD,UACI,mCAEQ,CACI3R,UAAW,cAAC,GAAD,CAAMk3C,mBAAoBA,EAAoBrX,YAAaA,EAAazoB,kBAAmBA,IACtG,gBAAmB,cAAC,GAAD,CAAsBwoB,kBAAmBjuB,EAAOomC,aAAcb,mBAAoBA,EAAoBrX,YAAaA,IACtI,eAAkB,cAAC,GAAD,CAAegY,kBAAmBlmC,EAAOqmC,aAAcnY,YAAaA,KACxFpR,QC1CP6pB,GA1BG,WAEd,IAAM7zC,EAAWC,cAEjB,EAA0C9B,mBAAS,IAAnD,mBAAO21C,EAAP,KAAsBC,EAAtB,KAEMC,EAAkB,uCAAG,sBAAA31C,EAAA,sDACvBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,2BACJrE,MAAK,SAAA0E,GACJmwC,EAAiBnwC,EAAmB5I,KAAKqM,YALtB,2CAAH,qDAaxB,OAJA1H,qBAAU,WACNq0C,MACD,CAACh0C,EAAS2B,OAGT,mCACI,qBAAKnF,wBAAyB,CAAEC,OAAQvD,aAAY46C,SC2CjDG,GA/DK,SAAC,GAAgB,IAAd/mC,EAAa,EAAbA,OAEfoF,EAAkBpF,EAAOgnC,WAC/B,EAAkC/1C,mBAAS,IAA3C,mBAAO4U,EAAP,KAAkBC,EAAlB,KAEMX,EAAW,uCAAG,WAAO8oB,GAAP,SAAA98B,EAAA,sDAClBM,IAAM,CACJC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,4CAA2D43B,KAC7Dj8B,MAAK,SAAAi1C,GAUNnhC,EAAamhC,EAAUn5C,SAdP,2CAAH,sDAkBjB2E,qBAAU,WACR0S,EAAYnF,EAAOomC,gBAClB,CAACpmC,IAEJ,IAAIknC,EAAS,GAYTC,OAAc94C,EAMlB,OAfE64C,OADsB74C,IAApB+W,GAAqD,KAApBA,EAC1BS,EAAUzR,QAAO,SAAUkS,GAClC,OAAQA,EAAe5X,aAAe0W,KAG/BS,EAAUzR,QAAO,SAAUkS,GAClC,OAAQA,EAAe8gC,eAMhB7yC,OAAS,IAClB4yC,EAAcD,EAAO,SAGH74C,IAAhB84C,EAEA,qCACE,eAAC9sC,EAAA,EAAD,WACE,gCAAQ8sC,EAAYxwC,QACpB,sBAAM2C,KAAK,cAAcgB,QAAO,UAAK6sC,EAAY9R,eACjD,wBAAQpmC,IAAI,yDAEd,qBAAKK,wBAAyB,CAAEC,OAAQvD,aAAYm7C,EAAY5hC,mBAKlE,cAAC,EAAD,KCnCS8hC,GAxBQ,WAEnB,IAAMrnC,EAASzD,cAEXugB,OAAczuB,EAMlB,MAJ4B,KAAxB2R,EAAOomC,mBAA+C/3C,IAAxB2R,EAAOomC,eACrCtpB,EAAc,gBAId,cAAC,WAAD,UACI,mCAEQ,CACIzuB,UAAW,cAAC,GAAD,IACX,eAAgB,cAAC,GAAD,CAAa2R,OAAQA,KACvC8c,QCiEPwqB,GAjFI,SAAC,GAAc,IAAZ32C,EAAW,EAAXA,KAElB,EAA4CM,mBAAS,IAArD,mBAAOs2C,EAAP,KAAuBC,EAAvB,KACM10C,EAAWC,cACjB,EAAwC9B,mBAAS,IAAjD,mBAAOw2C,EAAP,KAAqBC,EAArB,KAEM5lC,EAAS,uCAAG,sBAAA3Q,EAAA,sDACdM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,gCACJrE,MAAK,SAAA0E,GACJ8wC,EAAkB9wC,EAAmB5I,KAAKqM,YALhC,2CAAH,qDAqBf,OAZA1H,qBAAU,WACNqP,MACD,CAAChP,EAASkE,WAEbvE,qBAAU,WAEFi1C,EADS,OAAT/2C,EACgB,GAEAA,EAAKkB,YAE1B,CAAClB,IAEmB,KAAnB42C,EAEI,cAAC,EAAD,IAKA,sBAAKn4C,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQotC,EAAR,qCACA,sBAAMnuC,KAAK,cAAcgB,QAAQ,+BAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,qFAAqFC,IAAI,mBACjI,gCACI,+BAAKu4C,EAAL,yBACA,sBAAKr4C,UAAU,UAAf,UACI,2IACA,4NACA,yEAA2C,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,uBAAR,8BAA3C,UAEJ,8BACI,sBAAK3I,UAAU,SAAf,UACI,sBAAKA,UAAU,UAAf,UACI,oDACA,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,oDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,4DAA7D,SAAyH,oBAAIA,UAAU,YAAd,4CAE7H,qBAAKA,UAAU,mDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,4DAA9D,SAA0H,oBAAIA,UAAU,YAAd,mDAItI,sBAAKA,UAAU,UAAf,UACI,uDACA,sBAAKA,UAAU,+CAAf,UACI,qBAAKA,UAAU,oDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,WAAqC9K,UAAU,8CAAvD,SAAqG,oBAAIA,UAAU,YAAd,2BAEzG,qBAAKA,UAAU,mDAAf,SACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,YAAsC9K,UAAU,8CAAxD,SAAsG,oBAAIA,UAAU,YAAd,iDCDnIu4C,GArEY,SAAC,GAAgB,IAAdnuB,EAAa,EAAbA,OAC1B,OACI,sBAAKpqB,UAAU,SAAf,UACI,qBAAKA,UAAU,qDAAf,SACI,6BAAKoqB,EAAOC,aAEhB,sBAAKrqB,UAAU,2CAAf,UACI,8BACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B8kB,EAAO5pB,qBAAtC,YAA8D4pB,EAAO1pB,eAArE,YAAuF0pB,EAAOlC,kBAAtG,SAA0H,6BAAKkC,EAAOjC,iBAE1I,sBAAKnoB,UAAU,gBAAf,UACI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC8kB,EAAO1pB,gBAAnD,UAAsE0pB,EAAOtkB,SAA7E,IAAwFskB,EAAOxpB,eADnG,QAEI,cAAC,IAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C8kB,EAAO5pB,sBAAzD,SAAkF4pB,EAAO7kB,uBAG1E,KAAtB6kB,EAAOE,YACJ,qBAAKtqB,UAAU,2CAAf,SACI,qBAAKE,wBAAyB,CAAEC,OAAQvD,aAAYwtB,EAAOE,iBAGnE,sBAAKtqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,qDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOG,iBAGhB,sBAAKvqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,uDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOI,kBAGhB,sBAAKxqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kEAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOK,uBAGhB,sBAAKzqB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,kDAEJ,qBAAKA,UAAU,YAAf,SACKoqB,EAAOM,gBAGhB,sBAAK1qB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,+CAEJ,sBAAKA,UAAU,YAAf,UACKoqB,EAAOO,eADZ,IAC6BP,EAAOQ,mBADpC,IACyDR,EAAOS,oBAGpE,oBAAI7qB,UAAU,aC6BXw4C,GAtFO,SAAC,GAAc,IAAZj3C,EAAW,EAAXA,KAGfolB,EAAWplB,EAAKwB,SACtB,EAAgDlB,mBAAS,GAAzD,mBAAO0nB,EAAP,KAAyBwB,EAAzB,KAEA,EAKI1B,GATgB,EASe1C,EAAU4C,GAJzCC,EADJ,EACIA,cACAE,EAFJ,EAEIA,YACAE,EAHJ,EAGIA,QACAE,EAJJ,EAIIA,cAGEkB,EAAiBxG,mBACjByG,EAAuB7Y,uBAAY,SAAA8Y,GACjC1B,IAEAwB,EAAeve,SACfue,EAAeve,QAAQqc,aAC3BkC,EAAeve,QAAU,IAAIsc,sBAAqB,SAAAoC,GAC1CA,EAAc,GAAGlC,gBAAkBa,GACnCiB,GAAoB,SAAAK,GAAoB,OAAIA,EAAuB,QAIvEF,GACAF,EAAeve,QAAQ0c,QAAQ+B,MACpC,CAAC1B,EAAeM,IAEnB,OACI,sBAAK9pB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQ1J,EAAKkB,SAAb,+CACA,sBAAMyH,KAAK,cAAcgB,QAAQ,gDAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,gFAAgFC,IAAI,aAC5H,gCACI,qDACA,qBAAKE,UAAU,UAAf,gNASA,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,2DAA9D,6CAE9B,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,2DAA7D,kDAItC,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,UAAf,SACI,kDAEH4pB,EAAQjrB,KAAI,SAACyrB,EAAQvrB,GAClB,OAAI+qB,EAAQzkB,SAAWtG,EAAQ,EAEvB,qBAAKuqB,IAAK6B,EAAV,SACI,cAAC,GAAD,CAAoBb,OAAQA,KADKA,EAAOvhB,IAM5C,8BACI,cAAC,GAAD,CAAoBuhB,OAAQA,KADtBA,EAAOvhB,OAM7B,8BACK2gB,GACG,cAAC,EAAD,MAGR,8BAAME,GAAe,iBCyCtB+uB,GA5HY,SAAC,GAAqC,IAgFzD30C,EAhFsBC,EAAkC,EAAlCA,YAAa20C,EAAqB,EAArBA,eAEvC,EAAgD72C,mBAAS,GAAzD,mBAAOmC,EAAP,KAAyBC,EAAzB,KACA,EAAgDpC,mBAAS,IAAzD,mBAAOqC,EAAP,KAAyBC,EAAzB,KACA,EAA8CtC,oBAAS,GAAvD,mBAAOuC,EAAP,KAAwBC,EAAxB,KACA,EAAkCxC,mBAAS,IAA3C,mBAAOyC,EAAP,KAAkBC,EAAlB,KAGMC,EAAWC,cAkBXC,EAAU,SAAAC,GACZV,EAAoB,GACpBE,EAAoB,IACpBE,GAAmB,GACnBE,EAAaI,EAAEC,cAAcC,WAE7B,IAAI0N,EAAmB,GACnBzN,EAA2BH,EAAEC,cAAcC,UAAU7H,MAAM,KAEzD+H,EAAsBhB,EAAYiB,QACpC,SAAAC,GAAO,OAAKA,EAAQlF,OAAS+E,EAAyB,GAAGI,UAGzDH,EAAoBI,OAAS,IAQ7BoN,EANsBxN,EAAoB,GAMPzF,YAGvCo5C,EAAenmC,IA4DnB,OA5BInO,GAAmBE,IAEfR,EADAI,EAAiBiB,OAEb,oBAAInF,UAAU,cAAd,SACKkE,EAAiBvF,KAAI,SAACsG,EAASpG,GAC5B,IAAImB,EAMJ,OAJInB,IAAUmF,IACVhE,EAAY,qBAIZ,qBAAIA,UAAWA,EAAuB0E,QAASA,EAA/C,UACKO,EAAQlF,KADb,KACqBkF,EAAQM,eAD7B,MAA+B1G,QAS3C,qBAAKmB,UAAU,iBAAf,SACI,sDAOZ,cAAC,WAAD,UACI,eAACmL,EAAA,EAAKG,MAAN,CAAYC,UAAU,YAAYvL,UAAU,YAA5C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,kDADJ,8DAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,YAAY1E,KAAK,OAAOC,SA3GtC,SAACd,GACd,IAEML,EAFyBK,EAAEC,cAAcrB,MAAMvG,MAAM,KAEhB,GAAGkI,OAExCQ,EAAuB3B,EAAYiB,QAErC,SAAAC,GAAO,OAAKA,EAAQlF,KAAK4F,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQY,aAAaD,QAAQtB,IAAc,GAAKW,EAAQa,SAASH,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAKV,EAAQc,iBAAiBH,QAAQtB,IAAc,GAA2B,OAArBW,EAAQe,eAA0C/G,IAArBgG,EAAQe,UAA0Bf,EAAQe,SAASL,cAAcC,QAAQtB,EAAUqB,gBAAkB,GAAoC,OAA7BV,EAAQgB,uBAA0DhH,IAA7BgG,EAAQgB,kBAAkChB,EAAQgB,iBAAiBL,QAAQtB,IAAc,KAGxgBL,EAAoB,GACpBE,EAAoBuB,GACpBrB,GAAmB,GACnBE,EAAaI,EAAEC,cAAcrB,QA8F0C2C,UAhEzD,SAACvB,GACf,GAAkB,KAAdA,EAAEwB,QAAgB,CAClBlC,EAAoB,GACpBI,GAAmB,GACnB,IAAIe,EAAkBlB,EAAiBF,GACvC,GAAwB,OAApBoB,QAAgDnG,IAApBmG,EAA+B,CAC3Db,EAAaa,EAAgBrF,MAC7B,IAAIsF,EAAI,UAAM1F,OAAO2F,gBAAb,YAAgCF,EAAgB5E,qBAAhD,YAAwE4E,EAAgB1E,eAAxF,YAA0G0E,EAAgB9F,YAElIkF,EAASa,SAGZ,GAAkB,KAAdV,EAAEwB,QAAgB,CACvB,GAAyB,IAArBnC,EACA,OAGJC,EAAoBD,EAAmB,QAEtC,GAAkB,KAAdW,EAAEwB,QAAgB,CACvB,GAAInC,EAAmB,IAAME,EAAiBiB,OAC1C,OAEJlB,EAAoBD,EAAmB,KAyCkDT,MAAOe,IAC3FR,QC4LF60C,GA9SY,SAAC,GAA2B,IAAzBp3C,EAAwB,EAAxBA,KAAMwC,EAAkB,EAAlBA,YAE1B6M,EAASzD,cACT3I,EAAWC,cAUjB,EAAkE5C,mBAAS,IAA3E,mBAAO+2C,EAAP,KAAkCC,EAAlC,KACA,EAAoCh3C,wBAAS5C,GAA7C,mBAAOk/B,EAAP,KAAmB2a,EAAnB,KACA,EAAgDj3C,mBAAS,IAAzD,mBAAO0Q,EAAP,KAAyBwmC,EAAzB,KA6BA,EAA4Bl3C,mBAAS,IAArC,mBAAe4H,GAAf,WACA,EAAoC5H,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KAEA,EAA4B9H,mBAAS,CACjCwoB,SAAU,GACV2uB,qBAAsB,GACtB1uB,WAAY,GACZE,aAAc,GACdC,kBAAmB,GACnBF,YAAa,KANjB,mBAAOzgB,EAAP,KAAeC,EAAf,KASA1G,qBAAU,gBACSpE,IAAX2R,QAAiD3R,IAAzB2R,EAAOqoC,gBAC/BJ,EAA6BjoC,EAAOqoC,eACpCF,EAAoBnoC,EAAOqoC,kBAEhC,CAACroC,EAAOqoC,gBAEX51C,qBAAU,WACN,IAAI61C,EAAen1C,EAAYiB,QAAO,SAAUkS,GAC5C,OAAQA,EAAe5X,aAAesR,EAAOqoC,sBAG5Bh6C,IAAjBi6C,QAAkDj6C,IAApBi6C,EAAa,IAC3CJ,EAAcI,EAAa,MAEhC,CAACn1C,EAAa6M,EAAOqoC,gBA0CxB,IAAMjvC,EAAe,SAACC,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,YAI7C6G,EAAW,WACb,IAAIC,EAAS,GA4Bb,OA1BKP,EAAOugB,WACRhgB,EAAOggB,SAAW,uCAGjBvgB,EAAOkvC,uBACR3uC,EAAO2uC,qBAAuB,sDAG7BlvC,EAAOwgB,aACRjgB,EAAOigB,WAAa,0CAGnBxgB,EAAO0gB,eACRngB,EAAOmgB,aAAe,uCAGrB1gB,EAAO2gB,oBACRpgB,EAAOogB,kBAAoB,6CAO/B9gB,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAOtBqF,EAAY,uCAAG,WAAO7F,GAAP,eAAA5C,EAAA,sDAEjB,GADA4C,EAAE8F,iBACEL,IACA,IACQ+uC,EAAY,CACZ9uB,SAAUvgB,EAAOugB,SACjB2uB,qBAAsBlvC,EAAOkvC,qBAC7B1uB,WAAYxgB,EAAOwgB,WACnBE,aAAc1gB,EAAO0gB,aACrBC,kBAAmB3gB,EAAO2gB,kBAC1B2uB,cAAe,EACfC,SAAU,YACVnxB,iBAAkB3V,EAClBgY,YAAazgB,EAAOygB,YACpB7nB,MAAOnB,EAAKmB,MACZC,MAAOpB,EAAKoB,OAEhBQ,QAAQC,IAAI+1C,GAEZ92C,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,0BACH9D,KAAMy6C,IACPv2C,MAAK,SAAA02C,GAEJn2C,QAAQC,IAAR,OAAYk2C,QAAZ,IAAYA,OAAZ,EAAYA,EAAwB56C,MAEpC,IAAI66C,EAAmBD,EAAuB56C,KAE9C,GAAyB,OAArB66C,EAA2B,CAC3Bp2C,QAAQC,IAAIm2C,GAEZ,IAAIl0C,EAAO1F,OAAOmL,eAAiB,WACnCtG,EAASa,QAEToE,EAAU,+DAGpB,MAAOvG,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBAxCL,2CAAH,sDA8ClB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,sFACA,sBAAMf,KAAK,cAAcgB,QAAQ,yDAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,gFAAgFC,IAAI,oBAC5H,gCACI,6DACA,sBAAKE,UAAU,UAAf,iOACwN,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,uBAAR,8BADxN,OAGA,qBAAK3I,UAAU,SAAf,SACI,cAACmL,EAAA,EAAD,CAAMC,SAAUZ,EAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACmC,KAA9B44C,GACG,cAAC,GAAD,CAAoB70C,YAAaA,EAAa20C,eAAgB,SAAAh6C,GAC1Dq6C,EAAoBr6C,MAGI,KAA9Bk6C,QAAmD35C,IAAfk/B,GAClC,eAAChzB,EAAA,EAAKG,MAAN,CAAYC,UAAU,qBAAqBvL,UAAU,YAArD,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,6CACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,qBAAqB1E,KAAK,OAAOkG,YAAY,UAAUnI,MAAO46B,EAAWp+B,KAAM6P,SAAS,YAGnH,eAACzE,EAAA,EAAKG,MAAN,CAAYC,UAAU,aAAavL,UAAU,YAA7C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,2CADJ,4DAE6D,uBAF7D,gCAKA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,cAAc1E,KAAK,OAAOkG,YAAY,WAAWnI,MAAOuG,EAAOugB,SAAU5kB,SAAUuE,IACrGN,EAAW2gB,UACR,qBAAKrqB,UAAU,cAAf,SAA8B0J,EAAW2gB,cAGjD,eAAClf,EAAA,EAAKG,MAAN,CAAYC,UAAU,iBAAiBvL,UAAU,YAAjD,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,gDADJ,2FAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,iBAAiB1E,KAAK,OAAOkG,YAAY,gBAAgBnI,MAAOuG,EAAOygB,YAAa9kB,SAAUuE,IAChHN,EAAW6gB,aACR,qBAAKvqB,UAAU,cAAf,SAA8B0J,EAAW6gB,iBAGjD,eAACpf,EAAA,EAAKG,MAAN,CAAYC,UAAU,0BAA0BvL,UAAU,YAA1D,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,kDADJ,kEAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,0BAA0BmF,GAAG,WAAWC,KAAM,EAAG5D,YAAY,kBAAkBnI,MAAOuG,EAAOkvC,qBAAsBvzC,SAAUuE,IAC/IN,EAAWsvC,sBACR,qBAAKh5C,UAAU,cAAf,SAA8B0J,EAAWsvC,0BAGjD,eAAC7tC,EAAA,EAAKG,MAAN,CAAYC,UAAU,gBAAgBvL,UAAU,YAAhD,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,yCADJ,kDAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,gBAAgBmF,GAAG,WAAWC,KAAM,GAAI5D,YAAY,SAASnI,MAAOuG,EAAOwgB,WAAY7kB,SAAUuE,IACnHN,EAAW4gB,YACR,qBAAKtqB,UAAU,cAAf,SAA8B0J,EAAW4gB,gBAGjD,eAACnf,EAAA,EAAKG,MAAN,CAAYC,UAAU,kBAAkBvL,UAAU,YAAlD,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,iDADJ,gEAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,kBAAkBmF,GAAG,WAAWC,KAAM,EAAG5D,YAAY,iBAAiBnI,MAAOuG,EAAO0gB,aAAc/kB,SAAUuE,IAC9HN,EAAW8gB,cACR,qBAAKxqB,UAAU,cAAf,SAA8B0J,EAAW8gB,kBAGjD,eAACrf,EAAA,EAAKG,MAAN,CAAYC,UAAU,uBAAuBvL,UAAU,YAAvD,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,4DADJ,uEAIA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,uBAAuBmF,GAAG,WAAWC,KAAM,EAAG5D,YAAY,4BAAuBnI,MAAOuG,EAAO2gB,kBAAmBhlB,SAAUuE,IAC9IN,EAAW+gB,mBACR,qBAAKzqB,UAAU,cAAf,SAA8B0J,EAAW+gB,uBAGjD,qBAAKzqB,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,8CC3IrBw5C,GA1JW,SAAC,GAAqB,IAAnBxxB,EAAkB,EAAlBA,MAAOzmB,EAAW,EAAXA,KAGhC,EAA4BM,mBAAS,IAArC,mBAAe4H,GAAf,WACMjF,EAAWC,cAkDjB,OACI,gCACI,qBAAKzE,UAAU,qDAAf,SACI,6BAAKgoB,EAAMC,iBAEchpB,IAA3B+oB,EAAME,kBAA6D,OAA3BF,EAAME,kBAC5C,sBAAKloB,UAAU,2CAAf,UACI,8BACI,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B0iB,EAAMxnB,qBAArC,YAA6DwnB,EAAMtnB,eAAnE,YAAqFsnB,EAAME,kBAAnG,SAAuH,6BAAKF,EAAMG,iBAEtI,sBAAKnoB,UAAU,gBAAf,UACI,eAAC,IAAD,CAAMN,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC0iB,EAAMtnB,gBAAlD,UAAqEsnB,EAAMliB,SAA3E,IAAsFkiB,EAAMpnB,eADhG,QAEI,cAAC,IAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C0iB,EAAMxnB,sBAAxD,SAAiFwnB,EAAMziB,uBAInG,qBAAKvF,UAAU,6CAAf,SACI,cAAC0I,EAAA,EAAD,CAAO7I,IAAG,UAAKF,OAAOgJ,YAAZ,4BAA2Cqf,EAAMI,kBAAjD,YAAsEJ,EAAMK,eAAiBvoB,IAAG,gBAAWkoB,EAAMnf,IAAMD,MAAM,WAE3I,sBAAK5I,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,qBAAKA,UAAU,YAAf,SACKgoB,EAAMI,uBAGf,sBAAKpoB,UAAU,kCAAf,UACI,qBAAKA,UAAU,WAAf,SACI,oDAEJ,sBAAKA,UAAU,YAAf,UACKgoB,EAAMM,eADX,IAC4BN,EAAMO,mBADlC,IACuDP,EAAMQ,oBAGjE,qBAAKxoB,UAAU,oCAAf,SACI,cAAC2L,EAAA,EAAD,CAAQuJ,QAAQ,UAAUxQ,QAAS,YAIZ,IAHA/E,OAAO85C,QACtB,6CA/EM,SAAC90C,GAGvB,GAAIA,EAAI,EACJ,IACI,IAAIw0C,EAAY,CACZtwC,GAAIlE,EACJsjB,QAAS,IACTC,iBAAkB,IAClBxlB,MAAOnB,EAAKmB,MACZC,MAAOpB,EAAKoB,OAEhBQ,QAAQC,IAAI+1C,GAEZ92C,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,yBACH9D,KAAMy6C,IACPv2C,MAAK,SAAA82C,GAEJv2C,QAAQC,IAAR,OAAYs2C,QAAZ,IAAYA,OAAZ,EAAYA,EAAmBh7C,MAE/B,IAAIi7C,EAAcD,EAAkBh7C,KAEpC,GAAoB,OAAhBi7C,EAAsB,CACtBx2C,QAAQC,IAAIu2C,GAEZ,IAAIt0C,EAAO1F,OAAOmL,eAClBtG,EAASa,QAEToE,EAAU,+DAGpB,MAAOvG,IACD,OAACA,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,uBA+CNmwC,CAAkB5xB,EAAMnf,KAE7B7I,UAAU,uCAPb,SAOqD,mBAEzD,oBAAIA,UAAU,aCbX65C,GArFM,SAAC,GAAc,IAAZt4C,EAAW,EAAXA,KAKdolB,EAAWplB,EAAKwB,SACtB,EAA8ClB,mBAAS,GAAvD,mBAAO+kB,EAAP,KAAwB8B,EAAxB,KAEA,EAKIjC,GAZe,EAYcE,EAAUC,GAJvCC,EADJ,EACIA,aACAE,EAFJ,EAEIA,WACAE,EAHJ,EAGIA,OACAE,EAJJ,EAIIA,aAGEwB,EAAgBnE,mBAChBoE,EAAsBxW,uBAAY,SAAAyW,GAChChC,IAEA8B,EAAclc,SACdkc,EAAclc,QAAQqc,aAC1BH,EAAclc,QAAU,IAAIsc,sBAAqB,SAAAC,GACzCA,EAAa,GAAGC,gBAAkB9B,GAClCuB,GAAmB,SAAAQ,GAAmB,OAAIA,EAAsB,QAIpEL,GACAF,EAAclc,QAAQ0c,QAAQN,MACnC,CAAChC,EAAcM,IAElB,OACI,sBAAKnnB,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,kCAAQ1J,EAAKkB,SAAb,8CACA,sBAAMyH,KAAK,cAAcgB,QAAQ,+CAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,+EAA+EC,IAAI,sBAC3H,gCACI,2CACA,qBAAKE,UAAU,UAAf,uMAMA,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,iBAA2C9K,UAAU,2DAA7D,4CAE9B,qBAAKA,UAAU,UAAf,SACI,oBAAIA,UAAU,YAAd,SAA0B,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOmL,eAAZ,kBAA4C9K,UAAU,2DAA9D,mDAItC,sBAAKA,UAAU,YAAf,UACI,qBAAKA,UAAU,UAAf,SACI,iDAEHinB,EAAOtoB,KAAI,SAACqpB,EAAOnpB,GAChB,OAAIooB,EAAO9hB,SAAWtG,EAAQ,EAEtB,qBAAKuqB,IAAKR,EAAV,SACI,cAAC,GAAD,CAAmBZ,MAAOA,EAAOzmB,KAAMA,KADPymB,EAAMnf,IAM1C,8BACI,cAAC,GAAD,CAAmBmf,MAAOA,EAAOzmB,KAAMA,KADjCymB,EAAMnf,OAM5B,8BACKge,GACG,cAAC,EAAD,MAGR,8BAAME,GAAc,iBCpErB+yB,I,OAhBE,WACb,OACI,qBAAK95C,UAAU,qBAAf,SACI,sBAAKA,UAAU,WAAf,UACI,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,kBACf,qBAAKA,UAAU,0BCHzB+5C,GAAiB,0BAkSRC,GA9RW,SAAC,GAA2B,IAAzBz4C,EAAwB,EAAxBA,KAAMwC,EAAkB,EAAlBA,YAEzB6M,EAASzD,cACT3I,EAAWC,cAEjB,EAAoC5C,mBAAS,IAA7C,mBAAOo4C,EAAP,KAAmBC,EAAnB,KACA,EAA4Br4C,mBAAS,IAArC,mBAAOs4C,EAAP,KAAeC,EAAf,KAKA,EAA8Bv4C,oBAAS,GAAvC,mBACA,GADA,UAC4BA,mBAAS,KAArC,mBAAe4H,GAAf,WACA,EAAoC5H,mBAAS,IAA7C,mBAAO6H,EAAP,KAAmBC,EAAnB,KACA,EAA0C9H,oBAAS,GAAnD,mBAAOw4C,EAAP,KAAsBC,EAAtB,KAEA,EAA4Bz4C,mBAAS,CACjComB,QAAS,KADb,mBAAOne,EAAP,KAAeC,EAAf,KAIA,EAAkElI,mBAAS,IAA3E,mBAAO+2C,EAAP,KAAkCC,EAAlC,KACA,EAAoCh3C,wBAAS5C,GAA7C,mBAAOk/B,EAAP,KAAmB2a,EAAnB,KACA,EAAgDj3C,mBAAS,IAAzD,mBAAO0Q,GAAP,KAAyBwmC,GAAzB,KAGA,GAAgDl3C,oBAAS,GAAzD,qBAAyB04C,IAAzB,aAOAl3C,qBAAU,gBACSpE,IAAX2R,QAAiD3R,IAAzB2R,EAAOqoC,gBAC/BJ,EAA6BjoC,EAAOqoC,eACpCF,GAAoBnoC,EAAOqoC,kBAEhC,CAACroC,EAAOqoC,gBAEX51C,qBAAU,WACN,IAAI61C,EAAen1C,EAAYiB,QAAO,SAAUkS,GAC5C,OAAQA,EAAe5X,aAAesR,EAAOqoC,sBAG5Bh6C,IAAjBi6C,QAAkDj6C,IAApBi6C,EAAa,IAC3CJ,EAAcI,EAAa,MAEhC,CAACn1C,EAAa6M,EAAOqoC,gBAcxB51C,qBAAU,WACN,IAAM82C,EAAS,GAAIK,EAAc,GAC7B1yB,GAAW,EAiBf,OAhBImyB,EAAW90C,QACX80C,EAAWh9C,SAAQ,SAACw9C,GAChB,IAAMC,EAAa,IAAIC,WACvBH,EAAYr7C,KAAKu7C,GACjBA,EAAWE,OAAS,SAACj2C,GACjB,IAAQk2C,EAAWl2C,EAAEsD,OAAb4yC,OACJA,GACAV,EAAOh7C,KAAK07C,GAEZV,EAAOh1C,SAAW80C,EAAW90C,QAAW2iB,GACxCsyB,EAAUD,IAGlBO,EAAWI,cAAcL,MAG1B,WACH3yB,GAAW,EACX0yB,EAAYv9C,SAAQ,SAAAy9C,GACc,IAA1BA,EAAWK,YACXL,EAAWM,cAIxB,CAACf,IAEJ,IAAM7vC,GAAW,WAEb,IAAIC,EAAS,GAQb,OANKP,EAAOme,UACR5d,EAAO4d,QAAU,0CAGrBte,EAAcU,GAEqB,IAA/BC,OAAOC,KAAKF,GAAQlF,QAmDtBqF,GAAY,uCAAG,WAAO7F,GAAP,iBAAA5C,EAAA,sDAGjB,GAFA4C,EAAE8F,iBAEEL,KACA,IAOI,IANAkwC,GAAiB,IACXW,EAAW,IAAIC,UACZC,OAAO,mBAAoB5oC,IACpC0oC,EAASE,OAAO,UAAWrxC,EAAOme,SAClCgzB,EAASE,OAAO,QAAS55C,EAAKmB,OAC9Bu4C,EAASE,OAAO,QAAS55C,EAAKoB,OACrB5D,EAAI,EAAGA,EAAIk7C,EAAW90C,OAAQpG,IACnCk8C,EAASE,OAAO,QAASlB,EAAWl7C,IAKxCsD,IAAM,CACF+4C,QAAS,CACL,eAAgB,sBAChB,kBAAmB,8BACnB,iBAAkB,0BAEtB94C,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAO6C,cAAZ,yBACH9D,KAAMu8C,IACPr4C,MAAK,SAAAy4C,GAKJ,GAAoB,OAFFA,EAAkB38C,KAEV,CAGtB,IAAI2G,EAAO1F,OAAOmL,eAAiB,UACnCtG,EAASa,QAETi1C,GAAiB,GACjB7wC,EAAU,+DAGpB,MAAOvG,GACLo3C,GAAiB,IAEb,OAACp3C,QAAD,IAACA,OAAD,EAACA,EAAK8H,WACNvB,EAAU,sBA7CL,2CAAH,sDAoDlB,OACI,sBAAKzJ,UAAU,YAAf,UACI,eAACiL,EAAA,EAAD,WACI,8EACA,sBAAMf,KAAK,cAAcgB,QAAQ,iDAErC,gCACI,qBAAKlL,UAAU,gBAAf,SAA+B,qBAAKH,IAAI,+EAA+EC,IAAI,mBAC3H,gCACI,qDACA,sBAAKE,UAAU,UAAf,iOACwN,cAAC,IAAD,CAAMN,GAAE,UAAKC,OAAOgJ,YAAZ,uBAAR,8BADxN,OAGA,qBAAK3I,UAAU,SAAf,SACI,cAACmL,EAAA,EAAD,CAAMC,SAAUZ,GAAhB,SACI,eAACa,EAAA,EAAD,CAAKrL,UAAU,oBAAf,UACKq6C,EACG,mCACI,cAAC,GAAD,MAGJ,gCACmC,KAA9BzB,GACG,cAAC,GAAD,CAAoB70C,YAAaA,EAAa20C,eAAgB,SAAAh6C,GAC1Dq6C,GAAoBr6C,MAGI,KAA9Bk6C,QAAmD35C,IAAfk/B,GAClC,eAAChzB,EAAA,EAAKG,MAAN,CAAYC,UAAU,qBAAqBvL,UAAU,YAArD,UACI,cAACmL,EAAA,EAAKK,MAAN,UAAY,6CACZ,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,qBAAqB1E,KAAK,OAAOkG,YAAY,UAAUnI,MAAO46B,EAAWp+B,KAAM6P,SAAS,YAGnH,eAACzE,EAAA,EAAKG,MAAN,CAAYC,UAAU,aAAavL,UAAU,YAA7C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,0CADJ,kDAEmD,uBAFnD,gCAKA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,aAAa1E,KAAK,OAAOkG,YAAY,UAAUnI,MAAOuG,EAAOme,QAASxiB,SAlG5G,SAACwE,GAClBF,GAAU,SAACD,GAAD,mBAAC,eACJA,GADG,kBAELG,EAAMhC,OAAOiC,KAAKC,MAAM,GAAKF,EAAMhC,OAAO1E,cAgGVmG,EAAWue,SACR,qBAAKjoB,UAAU,cAAf,SAA8B0J,EAAWue,aAGjD,eAAC9c,EAAA,EAAKG,MAAN,CAAYC,UAAU,aAAavL,UAAU,YAA7C,UACI,eAACmL,EAAA,EAAKK,MAAN,WACI,kDADJ,yBAE0B,uBAF1B,gEAKA,cAACL,EAAA,EAAKM,QAAN,CAAcvB,KAAK,aAAa1E,KAAK,OAAOkG,YAAY,UAAU4vC,OAAO,mCAAmCC,UAAQ,EAACC,UAAQ,EAAC/1C,SAlJhJ,SAACd,GAKnB,IAJA,IAAQ82C,EAAU92C,EAAEsD,OAAZwzC,MAEFC,EAAkB,GACpBC,GAA4B,EACvB58C,EAAI,EAAGA,EAAI08C,EAAMt2C,OAAQpG,IAAK,CACnC,IAAM07C,EAAOgB,EAAM18C,GAEnB,GAAI07C,EAAKj1C,KAAKo2C,MAAM7B,IAAiB,CAEjC,IAAI8B,EAAoBpB,EAAK5+B,KAAO,KAEhCggC,EAzHE,MAyHmCA,EA1HnC,IA2HFF,GAA4B,EAC5BpB,IAAoB,IAGpBmB,EAAgBv8C,KAAKs7C,QAIzBkB,GAA4B,EAC5BpB,IAAoB,GAIxBmB,EAAgBv2C,SAAWs2C,EAAMt2C,OAKjCw2C,IACAvB,EAAU,IACV1lC,MAAM,iEANNwlC,EAAcwB,MAwHmBhyC,EAAWoyC,QACR,qBAAK97C,UAAU,cAAf,SAA8B0J,EAAWoyC,eAOrD3B,EAAOh1C,OAAS,EACZ,qBAAKnF,UAAU,6CAAf,SAEQm6C,EAAOx7C,KAAI,SAACo9C,EAAOC,GACf,OAAO,sBAAKh8C,UAAU,6BAAf,cAAuD,qBAAKH,IAAKk8C,EAAOj8C,IAAI,GAAGE,UAAU,kBAAzF,MAAiDg8C,QAG3D,MAEf3B,GACE,qBAAKr6C,UAAU,iBAAf,SACI,cAAC2L,EAAA,EAAD,CAAQnG,KAAK,SAASxF,UAAU,4CAAhC,gDCvLzBi8C,GA7FS,WAEpB,IAAMrrC,EAASzD,cACf,EAAyC1L,IAAjCH,EAAR,EAAQA,QAASD,EAAjB,EAAiBA,KACXmD,GADN,EAAuBhD,QAAvB,EAAgCD,KACfkD,eAEZtC,eAAeC,QAAQ,gBAA4D,OAA1CD,eAAeC,QAAQ,gBAAqE,SAA1CD,eAAeC,QAAQ,iBACnHd,GAAQ,GACRkD,EAAS,UACTrB,QAAQC,IAAI,MAGhBD,QAAQC,IAAI/B,GAEC,OAATA,IACAmD,EAAS7E,OAAOgJ,aAChBxF,QAAQC,IAAI,KACZoB,EAAS,MAEb,IAAMxC,EAAkBC,KAAKC,MAAMC,eAAeC,QAAQ,gBAC1De,QAAQC,IAAIpB,GAEZ,MAAsCH,mBAAS,IAA/C,mBAAOkC,EAAP,KAAoBuC,EAApB,KAiCM41C,EAAa,uCAAG,sBAAAn6C,EAAA,sDAClBM,IAAM,CACFC,OAAQ,OACRC,IAAI,GAAD,OAAK5C,OAAOsH,YAAZ,wBACJrE,MAAK,SAAAyE,GACJf,EAAee,EAAe3I,SALhB,2CAAH,qDAqBnB,OAZA2E,qBAAU,WACN64C,MASD,IAGC,cAAC,WAAD,UACI,mCAEQ,CACIj9C,UAAW,cAAC,GAAD,CAAYsC,KAAMS,IAC7B,QAAW,cAAC,GAAD,CAAeT,KAAMS,IAChC,gBAAiB,cAAC,GAAD,CAAoBT,KAAMS,EAAiB+B,YAAaA,IACzE,OAAU,cAAC,GAAD,CAAcxC,KAAMS,IAC9B,eAAgB,cAAC,GAAD,CAAmBT,KAAMS,EAAiB+B,YAAaA,KACzE6M,EAAOpL,WCSd22C,GA5DH,WACV,OACE,cAAC,IAAD,UACE,sBAAKn8C,UAAU,MAAf,UAEE,cAAC,EAAD,IACA,cAAC,IAAMo8C,WAAP,UACE,eAACz6C,EAAD,WACE,cAAC,GAAD,IACA,cAAC,GAAD,IACA,cAAC,GAAD,IACA,qBAAK3B,UAAU,oBAAf,SACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOqF,KAAK,IAAIg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MAC/B,cAAC,IAAD,CAAOj3C,KAAK,YAAYg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MACvC,cAAC,IAAD,CAAOj3C,KAAK,iBAAiBg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MAC5C,cAAC,IAAD,CAAOj3C,KAAK,SAASg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MACpC,cAAC,IAAD,CAAOj3C,KAAK,mBAAmBg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MAC9C,cAAC,IAAD,CAAOj3C,KAAK,kBAAkBg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MAC7C,cAAC,IAAD,CAAOj3C,KAAK,WAAWg3C,OAAK,EAACC,QAAS,cAAC,EAAD,MACtC,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOoJ,oBAAZ,aAA4CuzC,QAAS,cAAC,GAAD,MAEhE,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAO2F,gBAAZ,oBAA+Cg3C,QAAS,cAAC,GAAD,MACnE,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAO2F,gBAAZ,cAAyCg3C,QAAS,cAAC,GAAD,MAC7D,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAO2F,gBAAZ,cAAyCg3C,QAAS,cAAC,GAAD,MAC7D,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAO2F,gBAAZ,qCAAgEg3C,QAAS,cAAC,GAAD,MACpF,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAO2F,gBAAZ,WAAsCg3C,QAAS,cAAC,GAAD,MAE1D,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOqJ,qBAAuBqzC,OAAK,EAACC,QAAS,cAAC,GAAD,MAC7D,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOqJ,oBAAZ,aAA4CqzC,OAAK,EAACC,QAAS,cAAC,GAAD,MACtE,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOqJ,oBAAZ,wBAAuDqzC,OAAK,EAACC,QAAS,cAAC,GAAD,MAEjF,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOqJ,oBAAZ,mBAAkDqzC,OAAK,EAACC,QAAS,cAAC,GAAD,MAC5E,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOqJ,oBAAZ,yBAAwDszC,QAAS,cAAC,GAAD,MAE5E,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOuB,sBAAZ,oCAAqEo7C,QAAS,cAAC,GAAD,MACzF,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOuB,uBAAyBo7C,QAAS,cAAC,GAAD,MAEzD,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOC,gBAAZ,gCAA2D08C,QAAS,cAAC,GAAD,MAC/E,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOC,gBAAZ,kBAA6C08C,QAAS,cAAC,GAAD,MACjE,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOC,gBAAZ,KAAgC08C,QAAS,cAAC,GAAD,MAEpD,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOmJ,cAAZ,KAA8BuzC,OAAK,EAACC,QAAS,cAAC,GAAD,MACxD,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOmJ,cAAZ,+BAAwDwzC,QAAS,cAAC,GAAD,MAE5E,cAAC,IAAD,CAAOj3C,KAAI,UAAK1F,OAAOmL,eAAZ,2BAAqDwxC,QAAS,cAAC,GAAD,MAEzE,cAAC,IAAD,CAAOj3C,KAAK,oBAAoBg3C,OAAK,EAACC,QAAS,cAAC,GAAD,MAE/C,cAAC,IAAD,CAAOj3C,KAAK,SAASi3C,QAAS,cAAC,GAAD,WAGlC,cAAC,GAAD,eCrFGC,GAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,8BAAqB75C,MAAK,YAAkD,IAA/C85C,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCMd78C,OAAOsH,YAAc,qCACrBtH,OAAO6C,cAAgB,gCACvB7C,OAAOgJ,YAAc,4BAOrBhJ,OAAO2F,gBAAkB,qBACzB3F,OAAOqJ,oBAAsB,oCAC7BrJ,OAAOuB,sBAAwB,wBAC/BvB,OAAOC,gBAAkB,YACzBD,OAAOmJ,cAAgB,UACvBnJ,OAAOoJ,oBAAsB,gBAC7BpJ,OAAOmL,eAAiB,WAExBiyC,IAASC,OACP,cAAC,IAAMZ,WAAP,UACE,cAAC,GAAD,MAEF1qC,SAASC,eAAe,SAM1B4qC,M,yECvCA,ubAIMjlC,iBAAmB,SAAnBA,iBAAoB,MAAkG,IAAhGjZ,UAA+F,KAA/FA,UAAWkkB,WAAoF,KAApFA,WAAYE,UAAwE,KAAxEA,UAAWnkB,eAA6D,KAA7DA,eAAgBC,YAA6C,KAA7CA,YAAa+B,MAAgC,KAAhCA,MAAgC,kBAAzB9B,qBAAyB,iBAAf,SAAe,aAErHC,WAAa,yBAED,UAAZD,QACFC,YAAc,oCACO,WAAZD,QACTC,YAAc,oCACO,UAAZD,UACTC,YAAc,qCAGhB,IAAMC,KAAOL,UAAUM,KAAI,SAACC,IAAKC,OAC/B,IAAIC,QAAU,GACVC,EAAI,EAER,IAAK,IAAMC,OAAOJ,IAEhB,QAAuBK,IAAnBV,YAAYQ,GAAhB,CAIA,IAAIG,QAAU,OAASX,YAAYQ,GAEnCD,QAAQK,KAAK,CACXH,IAAKV,eAAeS,GACpBK,IAAKC,KAAKH,SACVI,WAAYV,IAAIU,WAChBiG,eAAgB3G,IAAI2G,eACpB/E,qBAAsB5B,IAAI4B,qBAC1BsF,SAAUlH,IAAIkH,SACdpF,eAAgB9B,IAAI8B,eACpBE,YAAahC,IAAIgC,cAEnB7B,IAGF,OAAO,0EACJD,QAAQH,KAAI,SAACD,EAAMG,GAClB,OAAc,IAAVA,EACiB,kBAAf0jB,WACK,kEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B5G,EAAK8B,qBAApC,YAA4D9B,EAAKgC,eAAjE,YAAmFhC,EAAKY,YAAhG,SAA8G,0EAAKZ,EAAKU,QADnH,IAEJ,4DAAC,gDAAD,CAAMM,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC5G,EAAKgC,gBAAjD,UAAoEhC,EAAKoH,SAAzE,IAAoFpH,EAAKkC,eAFrF,QAGL,2DAAC,gDAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C5G,EAAK8B,sBAAvD,SAAgF9B,EAAK6G,iBAHhF,MAAS1G,GAMT,kEAAgBoB,eAAcvB,EAAKM,IAAnC,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAO2F,gBAAZ,YAA+B5G,EAAK8B,qBAApC,YAA4D9B,EAAKgC,eAAjE,YAAmFhC,EAAKY,YAAhG,SAA8G,0EAAKZ,EAAKU,QADnH,IAEJ,4DAAC,gDAAD,CAAMM,GAAE,UAAKC,OAAO2F,gBAAZ,iBAAoC5G,EAAKgC,gBAAjD,UAAoEhC,EAAKoH,SAAzE,IAAoFpH,EAAKkC,eAFrF,QAGL,2DAAC,gDAAD,CAAMlB,GAAE,UAAKC,OAAO2F,gBAAZ,uBAA0C5G,EAAK8B,sBAAvD,SAAgF9B,EAAK6G,iBAHhF,MAAS1G,GAQdH,EAAKM,MAAQujB,WACR,iEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,SAAmEN,EAAKU,KAA/DP,GAET,iEAAgBoB,eAAcvB,EAAKM,IAAnC,SAAyCN,EAAKU,KAArCP,OArBRA,UA6BlB,OACE,mEAAKmB,UAAU,kBAAf,UACE,kEAAKA,UAAU,eAAf,SACE,0EAAKM,UAEP,qEAAON,UAAS,wBAAmBvB,YAAnC,UACE,6EACE,0EACGH,eAAeK,KAAI,SAACyB,EAAKvB,GACxB,OAAIuB,IAAQmiB,WACQ,QAAdE,UACK,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAM+4B,qEAAhF9mC,GACO,SAAd4jB,UACF,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAMg5B,qEAAhF/mC,GAET,iEAAgBmB,UAAU,uBAA1B,SAAkDI,GAAzCvB,GAGX,0EAAiBuB,GAARvB,UAKxB,6EACGH,cAcI4Y,wC,yEC7Gf,4fAOMjX,uBAAyB,SAAzBA,uBAA0B,MAAkG,IAAhGhC,UAA+F,KAA/FA,UAAWkkB,WAAoF,KAApFA,WAAYE,UAAwE,KAAxEA,UAAWnkB,eAA6D,KAA7DA,eAAgBC,YAA6C,KAA7CA,YAAa+B,MAAgC,KAAhCA,MAAgC,kBAAzB9B,qBAAyB,iBAAf,SAAe,aAC3HC,WAAa,yBAED,UAAZD,QACFC,YAAc,oCACO,WAAZD,QACTC,YAAc,oCACO,UAAZD,UACTC,YAAc,qCAGhB,IAAMC,KAAOL,UAAUM,KAAI,SAACC,IAAKC,OAC/B,IAAIC,QAAU,GACVC,EAAI,EAER,IAAK,IAAMC,OAAOJ,IAGhB,QAAuBK,IAAnBV,YAAYQ,GAAhB,CAIA,IAAIG,QAAU,OAASX,YAAYQ,GAEnCD,QAAQK,KAAK,CACXH,IAAKV,eAAeS,GACpBK,IAAKC,KAAKH,SACVI,WAAYV,IAAIU,WAChBkB,qBAAsB5B,IAAI4B,qBAC1BE,eAAgB9B,IAAI8B,eACpBE,YAAahC,IAAIgC,YACjBE,eAAgBlC,IAAIkC,eACpBE,aAAcpC,IAAIoC,aAClBC,iBAAkBrC,IAAIqC,mBAExBlC,IAGF,OAAO,0EACJD,QAAQH,KAAI,SAACD,EAAMG,GAClB,OAAc,IAAVA,EACK,0EAAgB,2DAAC,gDAAD,CAAMa,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqCxC,EAAK8B,qBAA1C,YAAkE9B,EAAKgC,eAAvE,YAAyFhC,EAAKY,YAAtG,SAAoH,kEAAKO,IAAG,gEAA2DnB,EAAKuC,kBAAoBnB,IAAG,UAAKpB,EAAKqB,WAApOlB,GACG,IAAVA,EACU,uBAAf0jB,WACK,kEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqCxC,EAAK8B,qBAA1C,YAAkE9B,EAAKgC,eAAvE,YAAyFhC,EAAKY,YAAtG,SAAoH,0EAAKZ,EAAKU,QACtG,OAAtBV,EAAKsC,mBAA+C/B,IAAtBP,EAAKsC,cAAoD,KAAtBtC,EAAKsC,cACtE,kEAAKd,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKsC,mBAH7CnC,GAOT,kEAAgBoB,eAAcvB,EAAKM,IAAnC,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOuB,sBAAZ,YAAqCxC,EAAK8B,qBAA1C,YAAkE9B,EAAKgC,eAAvE,YAAyFhC,EAAKY,YAAtG,SAAoH,0EAAKZ,EAAKU,QACtG,OAAtBV,EAAKsC,mBAA+C/B,IAAtBP,EAAKsC,cAAoD,KAAtBtC,EAAKsC,cACtE,kEAAKd,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKsC,mBAH7CnC,GASdH,EAAKM,MAAQujB,WACR,iEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,SACJN,EAAKU,KADQP,GAIT,iEAAgBoB,eAAcvB,EAAKM,IAAnC,SACJN,EAAKU,KADQP,OA3BRA,UAqClB,OACE,mEAAKmB,UAAU,kBAAf,UACE,kEAAKA,UAAU,eAAf,SACE,0EAAKM,UAEP,qEAAON,UAAS,+CAA0CvB,YAA1D,UACE,6EACE,0EACGH,eAAeK,KAAI,SAACyB,EAAKvB,GACxB,MAAY,KAARuB,GAAcA,IAAQmiB,WACN,QAAdE,UACK,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAM+4B,qEAAhF9mC,GACO,SAAd4jB,UACF,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAMg5B,qEAAhF/mC,GAET,iEAAgBmB,UAAU,uBAA1B,SAAkDI,GAAzCvB,GAGX,0EAAiBuB,GAARvB,UAKxB,6EACGH,cAcI2B,8C,yECxHf,4fAOMjC,iBAAmB,SAAnBA,iBAAoB,MAAkG,IAAhGC,UAA+F,KAA/FA,UAAWkkB,WAAoF,KAApFA,WAAYE,UAAwE,KAAxEA,UAAWnkB,eAA6D,KAA7DA,eAAgBC,YAA6C,KAA7CA,YAAa+B,MAAgC,KAAhCA,MAAgC,kBAAzB9B,qBAAyB,iBAAf,SAAe,aACrHC,WAAa,yBAED,UAAZD,QACFC,YAAc,oCACO,WAAZD,QACTC,YAAc,oCACO,UAAZD,UACTC,YAAc,qCAGhB,IAAMC,KAAOL,UAAUM,KAAI,SAACC,IAAKC,OAC/B,IAAIC,QAAU,GACVC,EAAI,EAER,IAAK,IAAMC,OAAOJ,IAEhB,QAAuBK,IAAnBV,YAAYQ,GAAhB,CAIA,IAAIG,QAAU,OAASX,YAAYQ,GAEnCD,QAAQK,KAAK,CACXH,IAAKV,eAAeS,GACpBK,IAAKC,KAAKH,SACVI,WAAYV,IAAIU,WAChBC,kBAAmBX,IAAIW,kBACvBC,iBAAkBZ,IAAIY,iBACtBC,UAAWb,IAAIa,YAEjBV,IAGF,OAAO,0EACJD,QAAQH,KAAI,SAACD,EAAMG,GAClB,OAAc,IAAVA,EACK,0EACL,2DAAC,gDAAD,CAAMa,GAAE,UAAKC,OAAOC,gBAAZ,YAA+BlB,EAAKa,kBAApC,YAAyDb,EAAKY,YAAtE,SAAoF,kEAAKO,IAAG,gEAA2DnB,EAAKe,WAAaK,IAAG,UAAKpB,EAAKqB,WADxKlB,GAGG,IAAVA,EACU,iBAAf0jB,WACK,kEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOC,gBAAZ,YAA+BlB,EAAKa,kBAApC,YAAyDb,EAAKY,YAAtE,SAAoF,0EAAKZ,EAAKU,QAClE,OAA1BV,EAAKc,uBAAuDP,IAA1BP,EAAKc,kBAA4D,KAA1Bd,EAAKc,kBAC9E,kEAAKU,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKc,uBAH7CX,GAOT,kEAAgBoB,eAAcvB,EAAKM,IAAnC,UACL,2DAAC,gDAAD,CAAMU,GAAE,UAAKC,OAAOC,gBAAZ,YAA+BlB,EAAKa,kBAApC,YAAyDb,EAAKY,YAAtE,SAAoF,0EAAKZ,EAAKU,QAClE,OAA1BV,EAAKc,uBAAuDP,IAA1BP,EAAKc,kBAA4D,KAA1Bd,EAAKc,kBAC9E,kEAAKU,wBAAyB,CAAEC,OAAQvD,uDAAY8B,EAAKc,uBAH7CX,GASdH,EAAKM,MAAQujB,WACR,iEAAgBviB,UAAU,gBAAgBC,eAAcvB,EAAKM,IAA7D,SACJN,EAAKU,KADQP,GAIT,iEAAgBoB,eAAcvB,EAAKM,IAAnC,SACJN,EAAKU,KADQP,OA7BRA,UAuClB,OACE,kEAAKmB,UAAU,kBAAf,SACE,qEAAOA,UAAS,+CAA0CvB,YAA1D,UACE,6EACE,0EACGH,eAAeK,KAAI,SAACyB,EAAKvB,GACxB,MAAY,KAARuB,GAAcA,IAAQmiB,WACN,QAAdE,UACK,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAM+4B,qEAAhF9mC,GACO,SAAd4jB,UACF,kEAAgBziB,UAAU,uBAA1B,UAAkDI,EAAlD,WAAkE,2DAAC,8DAAD,CAAiBwM,KAAMg5B,qEAAhF/mC,GAET,iEAAgBmB,UAAU,uBAA1B,SAAkDI,GAAzCvB,GAGX,0EAAiBuB,GAARvB,UAKxB,6EACGH,aAcIN,yC","file":"static/js/main.ba5659d0.chunk.js","sourcesContent":["export function RenderBreak(text) {\r\n let alteredText = ''\r\n String(text).split('\\r\\n\\r\\n').forEach(function (item) {\r\n alteredText = alteredText + '<p>' + item + '</p>'\r\n })\r\n\r\n return alteredText;\r\n}\r\n\r\n// Get Precipitation Condition Icon Name\r\nexport function GetPCIconImageName(iconId) {\r\n let iconImageName = ''\r\n\r\n switch (iconId) {\r\n case 1:\r\n iconImageName = 'LightSnow.svg'\r\n break;\r\n case 2:\r\n iconImageName = 'ModerateSnow.svg'\r\n break;\r\n case 3:\r\n iconImageName = 'HeavySnow.svg'\r\n break;\r\n case 4:\r\n iconImageName = 'Sleet.svg'\r\n break;\r\n case 5:\r\n iconImageName = 'LightRain.svg'\r\n break;\r\n case 6:\r\n iconImageName = 'ModerateRain.svg'\r\n break;\r\n case 7:\r\n iconImageName = 'HeavyRain.svg'\r\n break;\r\n case 8:\r\n iconImageName = 'NoPrecipitation.svg'\r\n break;\r\n default:\r\n // code block\r\n }\r\n\r\n return iconImageName;\r\n}\r\n\r\n// Get Wind Condition Icon Name\r\nexport function GetWindCIconImageName(iconId) {\r\n let iconImageName = ''\r\n\r\n switch (iconId) {\r\n case 1:\r\n iconImageName = 'NoWind.svg'\r\n break;\r\n case 2:\r\n iconImageName = 'LightWind.svg'\r\n break;\r\n case 3:\r\n iconImageName = 'ModerateWind.svg'\r\n break;\r\n case 4:\r\n iconImageName = 'StrongWind.svg'\r\n break;\r\n default:\r\n // code block\r\n }\r\n\r\n return iconImageName;\r\n}\r\n\r\n// Get Weather Condition Icon Name\r\nexport function GetWthConditionIconImageName(iconId) {\r\n let iconImageName = ''\r\n\r\n switch (iconId) {\r\n case 1:\r\n iconImageName = 'Bluebird.svg'\r\n break;\r\n case 2:\r\n iconImageName = 'PartlyCloudy.svg'\r\n break;\r\n case 3:\r\n iconImageName = 'MostlyCloudy.svg'\r\n break;\r\n case 4:\r\n iconImageName = 'CloudCover.svg'\r\n break;\r\n case 5:\r\n iconImageName = 'Foggy.svg'\r\n break;\r\n case 6:\r\n iconImageName = 'Thunderstorm.svg'\r\n break;\r\n case 7:\r\n iconImageName = 'Hazy.svg'\r\n break;\r\n case 8:\r\n iconImageName = 'Rain.svg'\r\n break;\r\n case 9:\r\n iconImageName = 'WeatherSleet.svg'\r\n break;\r\n case 10:\r\n iconImageName = 'Snow.svg'\r\n break;\r\n default:\r\n // code block\r\n }\r\n\r\n return iconImageName;\r\n}\r\n\r\n// Get Visibility Condition Icon Name\r\nexport function GetVConditionIconImageName(iconId) {\r\n let iconImageName = ''\r\n\r\n switch (iconId) {\r\n case 1:\r\n iconImageName = 'Excellent.svg'\r\n break;\r\n case 2:\r\n iconImageName = 'VeryGood.svg'\r\n break;\r\n case 3:\r\n iconImageName = 'FairDecent.svg'\r\n break;\r\n case 4:\r\n iconImageName = 'VariedLimited.svg'\r\n break;\r\n case 5:\r\n iconImageName = 'Poor.svg'\r\n break;\r\n case 6:\r\n iconImageName = 'VeryPoor.svg'\r\n break;\r\n default:\r\n // code block\r\n }\r\n\r\n return iconImageName;\r\n}\r\n\r\nexport function GetCurrentSeasonName() {\r\n let seasonName = ''\r\n\r\n const thisDate = new Date();\r\n let thisMonth = thisDate.getMonth();\r\n let thisYear = thisDate.getFullYear();\r\n\r\n if (thisMonth < 10) {\r\n seasonName = (thisYear - 1) + '-' + thisYear\r\n }\r\n else {\r\n seasonName = thisYear + '-' + (thisYear + 1)\r\n }\r\n\r\n return seasonName;\r\n}\r\n\r\nexport function GetPreviousSeasonName() {\r\n let seasonName = ''\r\n\r\n const thisDate = new Date();\r\n let thisMonth = thisDate.getMonth();\r\n let thisYear = thisDate.getFullYear();\r\n\r\n if (thisMonth < 10) {\r\n seasonName = (thisYear - 2) + '-' + (thisYear - 1)\r\n }\r\n else {\r\n seasonName = (thisYear - 1) + '-' + thisYear\r\n }\r\n\r\n return seasonName;\r\n}\r\n\r\nexport function GetTotalMonthDays(monthName) {\r\n let todayDays = 0\r\n\r\n switch (monthName) {\r\n case 'November':\r\n case 'April':\r\n todayDays = 30\r\n break;\r\n case 'December':\r\n case 'January':\r\n case 'March':\r\n todayDays = 31\r\n break;\r\n case 'February':\r\n todayDays = 29\r\n break;\r\n default:\r\n }\r\n\r\n return todayDays;\r\n}","/* eslint no-eval: 0 */\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom'\nimport { RenderBreak } from '../../../../helpers/Helper'\n\nconst ListingListTable = ({ tableData, headingColumns, dataMapping, breakOn = 'medium' }) => {\n let tableClass = 'table-container__table';\n\n if (breakOn === 'small') {\n tableClass += ' table-container__table--break-sm';\n } else if (breakOn === 'medium') {\n tableClass += ' table-container__table--break-md';\n } else if (breakOn === 'large') {\n tableClass += ' table-container__table--break-lg';\n }\n\n const data = tableData.map((row, index) => {\n let rowData = [];\n let i = 0;\n\n for (const key in row) {\n\n if (dataMapping[i] === undefined) {\n continue;\n }\n\n var objName = 'row.' + dataMapping[i]\n\n rowData.push({\n key: headingColumns[i],\n val: eval(objName),\n UniqueName: row.UniqueName,\n SectionUniqueName: row.SectionUniqueName,\n IntroductionText: row.IntroductionText,\n ImageName: row.ImageName\n });\n i++;\n }\n\n return <tr key={index}>\n {rowData.map((data, index) => {\n if (index === 0) {\n return <td key={index}>\n <Link to={`${window.$baseListingUrl}/${data.SectionUniqueName}/${data.UniqueName}`}><img src={`https://www.snowjapan.com/UploadedFiles/ListingImages/${data.ImageName}`} alt={`${data.Name}`} /></Link>\n </td>\n } else if (index === 1) {\n return <td key={index} className='sj-first-column' data-heading={data.key}>\n <Link to={`${window.$baseListingUrl}/${data.SectionUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.IntroductionText !== null && data.IntroductionText !== undefined && data.IntroductionText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.IntroductionText) }} />\n }\n </td>\n }\n else {\n return <td key={index} data-heading={data.key}>\n {data.val}\n </td>\n }\n }\n )}\n </tr>\n });\n\n return (\n <div className=\"table-container\">\n <table className={`sj-list-table sj-accommodation-table ${tableClass}`}>\n <thead>\n <tr>\n {headingColumns.map((col, index) => {\n return <th key={index}>{col}</th>\n })}\n </tr>\n </thead>\n <tbody>\n {data}\n </tbody>\n </table>\n </div>\n );\n}\n\nListingListTable.propTypes = {\n tableData: PropTypes.arrayOf(PropTypes.object).isRequired,\n headingColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n title: PropTypes.string.isRequired,\n breakOn: PropTypes.oneOf(['small', 'medium', 'large'])\n}\n\nexport default ListingListTable;","/* eslint no-eval: 0 */\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom'\nimport { RenderBreak } from '../../../../helpers/Helper'\n\nconst AccommodationListTable = ({ tableData, headingColumns, dataMapping, title, breakOn = 'medium' }) => {\n let tableClass = 'table-container__table';\n\n if (breakOn === 'small') {\n tableClass += ' table-container__table--break-sm';\n } else if (breakOn === 'medium') {\n tableClass += ' table-container__table--break-md';\n } else if (breakOn === 'large') {\n tableClass += ' table-container__table--break-lg';\n }\n\n const data = tableData.map((row, index) => {\n let rowData = [];\n let i = 0;\n\n for (const key in row) {\n\n if (dataMapping[i] === undefined) {\n continue;\n }\n\n var objName = 'row.' + dataMapping[i]\n\n rowData.push({\n key: headingColumns[i],\n val: eval(objName),\n UniqueName: row.AccommodationUniqueName,\n PrefectureUniqueName: row.AccommodationPrefectureUniqueName,\n TownUniqueName: row.AccommodationTownUniqueName,\n TownTypeStr: row.AccommodationTownTypeStr,\n AreaUniqueName: row.AccommodationAreaUniqueName,\n TopIntroText: row.TopIntroText,\n ListingImageName: row.ListingImageName\n });\n i++;\n }\n\n return <tr key={index}>\n {rowData.map((data, index) => {\n if (index === 0) {\n return <td key={index}><Link to={`${window.$baseAccommodationUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><img src={`https://www.snowjapan.com/UploadedFiles/ListingImages/${data.ListingImageName}`} alt={`${data.Name}`} /></Link></td>\n } else if (index === 1) {\n return <td key={index} data-heading={data.key}>\n <Link to={`${window.$baseAccommodationUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.TopIntroText !== null && data.TopIntroText !== undefined && data.TopIntroText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.TopIntroText) }} />\n }\n </td>\n }\n else {\n return <td key={index} data-heading={data.key}>\n {data.val}\n </td>\n }\n }\n )}\n </tr>\n });\n\n return (\n <div className=\"table-container\">\n <div className=\"left-aligned\">\n <h4>{title}</h4>\n </div>\n <table className={`sj-list-table sj-accommodation-table ${tableClass}`}>\n <thead>\n <tr>\n {headingColumns.map((col, index) => {\n return <th key={index}>{col}</th>\n })}\n </tr>\n </thead>\n <tbody>\n {data}\n </tbody>\n </table>\n </div>\n );\n}\n\nAccommodationListTable.propTypes = {\n tableData: PropTypes.arrayOf(PropTypes.object).isRequired,\n headingColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n title: PropTypes.string.isRequired,\n breakOn: PropTypes.oneOf(['small', 'medium', 'large'])\n}\n\nexport default AccommodationListTable;","import { createContext, useContext, useEffect, useState } from 'react';\r\nimport axios from 'axios'\r\n\r\nconst AuthContext = createContext({\r\n auth: null,\r\n setAuth: () => { },\r\n user: null,\r\n setUser: () => { }\r\n});\r\n\r\n\r\nexport function useAuth() {\r\n return useContext(AuthContext);\r\n}\r\n\r\n//const AuthProvider = (children) => {\r\nexport function AuthProvider({ children }) {\r\n const [auth, setAuth] = useState(null);\r\n const [user, setUser] = useState(null);\r\n\r\n const checkLogin = async () => {\r\n if (auth === null || !auth) {\r\n const thisSessionUser = JSON.parse(sessionStorage.getItem('sessionUser'))\r\n if (thisSessionUser !== null) {\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/CheckLoginStatus`,\r\n data: {\r\n FullName: thisSessionUser.FullName,\r\n Email: thisSessionUser.Email,\r\n Token: thisSessionUser.Token\r\n }\r\n }).then(loginStatusResult => {\r\n let loggedInUser = loginStatusResult.data\r\n if (loggedInUser.UserName !== null && loggedInUser.UserName !== '') {\r\n sessionStorage.setItem('sessionUser', JSON.stringify(loggedInUser))\r\n setAuth(true)\r\n setUser(loggedInUser)\r\n }\r\n })\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n checkLogin()\r\n }, [auth, user]);\r\n\r\n return (\r\n <AuthContext.Provider value={{ auth, setAuth, user, setUser }}>\r\n {children}\r\n </AuthContext.Provider>\r\n );\r\n};\r\n\r\n//export default AuthProvider;","// ScrollToTop.jsx\r\nimport { useEffect } from \"react\";\r\nimport { useLocation } from \"react-router\";\r\n\r\nconst ScrollToTop = (props) => {\r\n const location = useLocation();\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, [location]);\r\n\r\n return <>{props.children}</>\r\n};\r\n\r\nexport default ScrollToTop;","import { useState, Fragment } from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nconst Autocomplete = ({ skiAreaList }) => {\r\n\r\n const [activeSuggestion, setActiveSuggestion] = useState(0)\r\n const [filteredSkiAreas, setFilteredSkiAreas] = useState([])\r\n const [showSuggestions, setShowSuggestions] = useState(false)\r\n const [userInput, setUserInput] = useState('')\r\n\r\n //const history = useHistory()\r\n const navigate = useNavigate();\r\n\r\n const onChange = (e) => {\r\n let selectedSkiAreaNameParts = e.currentTarget.value.split('(')\r\n\r\n const userInput = selectedSkiAreaNameParts[0].trim();\r\n\r\n const thisFilteredSkiAreas = skiAreaList.filter(\r\n //skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.NameJapanese.indexOf(userInput) === 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.TownNameJapanese.indexOf(userInput) === 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) === 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) === 0))\r\n skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.NameJapanese.indexOf(userInput) >= 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.TownNameJapanese.indexOf(userInput) >= 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) >= 0))\r\n );\r\n\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas(thisFilteredSkiAreas)\r\n setShowSuggestions(true)\r\n setUserInput(e.currentTarget.value)\r\n };\r\n\r\n const onClick = e => {\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas([])\r\n setShowSuggestions(false)\r\n setUserInput(e.currentTarget.innerText)\r\n\r\n let selectedSkiAreaNameParts = e.currentTarget.innerText.split('(')\r\n\r\n const selectedSkiAreaList = skiAreaList.filter(\r\n skiArea => (skiArea.Name === selectedSkiAreaNameParts[0].trim())\r\n );\r\n\r\n if (selectedSkiAreaList.length > 0) {\r\n\r\n let selectedSkiArea = selectedSkiAreaList[0];\r\n\r\n let path = `${window.$baseSkiAreaUrl}/${selectedSkiArea.PrefectureUniqueName}/${selectedSkiArea.TownUniqueName}/${selectedSkiArea.UniqueName}`;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n };\r\n\r\n const onKeyDown = (e) => {\r\n if (e.keyCode === 13) {\r\n setActiveSuggestion(0)\r\n setShowSuggestions(false)\r\n let selectedSkiArea = filteredSkiAreas[activeSuggestion]\r\n if (selectedSkiArea !== null && selectedSkiArea !== undefined) {\r\n setUserInput(selectedSkiArea.Name)\r\n let path = `${window.$baseSkiAreaUrl}/${selectedSkiArea.PrefectureUniqueName}/${selectedSkiArea.TownUniqueName}/${selectedSkiArea.UniqueName}`;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n }\r\n else if (e.keyCode === 38) {\r\n if (activeSuggestion === 0) {\r\n return;\r\n }\r\n\r\n setActiveSuggestion(activeSuggestion - 1)\r\n }\r\n else if (e.keyCode === 40) {\r\n if (activeSuggestion - 1 === filteredSkiAreas.length) {\r\n return;\r\n }\r\n setActiveSuggestion(activeSuggestion + 1)\r\n }\r\n };\r\n\r\n let suggestionsListComponent;\r\n\r\n if (showSuggestions && userInput) {\r\n if (filteredSkiAreas.length) {\r\n suggestionsListComponent = (\r\n <ul className=\"suggestions\">\r\n {filteredSkiAreas.map((skiArea, index) => {\r\n let className;\r\n\r\n if (index === activeSuggestion) {\r\n className = \"suggestion-active\";\r\n }\r\n\r\n return (\r\n <li className={className} key={index} onClick={onClick}>\r\n {skiArea.Name} ({skiArea.PrefectureName})\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n } else {\r\n suggestionsListComponent = (\r\n <div className=\"no-suggestions\">\r\n <em>No ski area found</em>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <input className=\"search-input-box\" type=\"text\" onChange={onChange} onKeyDown={onKeyDown} value={userInput} />\r\n {suggestionsListComponent}\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default Autocomplete;","import '../../Loader.scss'\r\n\r\nconst Loader = () => {\r\n return (\r\n <div className=\"container\">\r\n <div className=\"loader\">\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--dot\"></div>\r\n <div className=\"loader--text\"></div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Loader;","import { Carousel, Image } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport Autocomplete from \"./Autocomplete\";\r\nimport Loader from \"./Loader\"\r\n\r\nconst Home = () => {\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n const [slidingImageList, setSlidingImageList] = useState([]);\r\n const [dailyReportList, setDailyReportList] = useState([]);\r\n const [homeLinkList, setHomeLinkList] = useState([]);\r\n const [weatherImportResult, setWeatherImportResult] = useState('');\r\n const [mainHomePageSeason, setMainHomePageSeason] = useState('');\r\n\r\n const fetchSkiAreaSlidingImagesDailyReportsAndHomeLinks = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/home/sliding-images`\r\n }).then(resSlidingImage => {\r\n setSlidingImageList(resSlidingImage.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/latest/all`\r\n })\r\n }).then(resDailyReportLatest => {\r\n setDailyReportList(resDailyReportLatest.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/home/home-inks`\r\n })\r\n }).then(resSlidingLinks => {\r\n setHomeLinkList(resSlidingLinks.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/home/list`\r\n })\r\n }).then(dataResortList => {\r\n setSkiAreaList(dataResortList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/HomePageSeason`\r\n })\r\n }).then(resGeneralMessages => {\r\n console.log(resGeneralMessages)\r\n setMainHomePageSeason(resGeneralMessages.data.Title)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/weatherdata`\r\n })\r\n }).then(resWeatherData => {\r\n setWeatherImportResult(resWeatherData.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSkiAreaSlidingImagesDailyReportsAndHomeLinks()\r\n }, []);\r\n\r\n if (slidingImageList.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className=\"sj-row-no-margin-padding\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding\">\r\n <div>\r\n <div className='sj-box sj-box-dark-blue sj-round-full Montserrat-font'>\r\n Let SnowJapan introduce you to the wonderful world of skiing and snowboarding in Japan. Before starting, <Link to='/about-snowjapan'>learn more about SnowJapan here</Link>.\r\n </div>\r\n <div className='sj-row'>\r\n <Link to='/about-snowjapan-japanese'>日本語ã«ã‚ˆã‚‹ç´¹ä»‹ã¯ã“ã¡ã‚‰ã‹ã‚‰</Link>\r\n </div>\r\n </div>\r\n <div>\r\n {homeLinkList.map((homeLink, index) => (\r\n <div key={index}>\r\n <div className=\"row sj-row sj-box sj-box-gray sj-round-half sj-row-small-margin-padding\">\r\n <div className=\"col-6\">\r\n <h5>{homeLink.Title}</h5>\r\n </div>\r\n <div className=\"col-6 right-aligned\">\r\n <h5>{homeLink.LinkTimestamp}</h5>\r\n </div>\r\n </div>\r\n <div className='sj-padding-left-15'>\r\n {homeLink.LinkType === 'Internal' &&\r\n <Link to={{ pathname: `${homeLink.URLLink}` }} rel='noreferrer'>{homeLink.HeadlineText}</Link>\r\n }\r\n {homeLink.LinkType === 'External' &&\r\n <a href={`${homeLink.URLLink}`} target='_blank' rel='noreferrer'>{homeLink.HeadlineText}</a>\r\n }\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding sj-padding-left-10\">\r\n <Carousel controls={false} indicators={false} fade={true} pause='hover' interval='3000'>\r\n {slidingImageList.map(slidingImage => (\r\n <Carousel.Item key={slidingImage.Id}>\r\n <Image src={`${window.$baseAppUrl}/UploadedFiles/SlidingImages/${slidingImage.Name}`} fluid='true' alt={`sliding ${slidingImage.Name}`} className=\"sj-round-full d-block w-100\" />\r\n </Carousel.Item>\r\n ))}\r\n </Carousel>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2 mb-3\">\r\n <Link to={window.$baseSkiAreaUrl}><h4>Discover Japan's ski areas</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to={window.$baseSkiAreaUrl}>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiArea.svg' fluid='true' alt='Ski Area' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n There are over 450 operating ski areas in Japan. They can be found across the country's mountainous regions, from Hokkaido in the north to Kyushu in the south. About half are located in three prefectures - Hokkaido, Nagano and Niigata. Japan's ski areas range from huge interconnected resorts with modern facilities to very small local ski hills. SnowJapan introduces them in detail and offers various ways to discover them.\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={window.$baseSkiAreaUrl}><h5>Ski Areas index</h5></Link>\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={`${window.$baseSkiAreaUrl}/discover`}><h5>Discovery search</h5></Link>\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={`${window.$baseGuideUrl}/the-japan-skiing-experience/the-ski-season-in-japan`}><h5>The Japanese ski season</h5></Link>\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={`${window.$baseRouteFinderUrl}`}><h5>Route Finder</h5></Link>\r\n </div>\r\n <div className=\"mt-3\">\r\n <h5>Quick search (ski area, town, area)</h5>\r\n <Autocomplete skiAreaList={skiAreaList} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-3\">\r\n <Link to={window.$baseDailyReportUrl}><h4>Exclusive daily weather and snow reports</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to={window.$baseDailyReportUrl}>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Daily-Reports.svg' fluid='true' alt='Daily Report' />\r\n </Link>\r\n <br />\r\n <div className=\"sj-box sj-box-red sj-round-full mt-2 center-aligned\">\r\n <h5 className='p-1'>{mainHomePageSeason}</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n SnowJapan publishes exclusive daily snow and weather reports from popular snow regions of Japan in the winter season. Our reports are 100% independent and hype-free. Each section includes detailed data, snowfall analysis and archives.\r\n </div>\r\n <div className='mt-4'>\r\n <table className='table-container__table sj-table-home'>\r\n <tbody>\r\n {dailyReportList.map(dailyReport => (\r\n <tr key={dailyReport.Id}>\r\n <td>\r\n <h6><Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}`}>{dailyReport.Name}</Link></h6>\r\n </td>\r\n <td>\r\n {dailyReport.NowReportWeekDay} {dailyReport.NowReportDayTh} {dailyReport.NowReportMonthFull} {dailyReport.NowReportYear}, {dailyReport.NowReportHourMinute}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"sj-row\">\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <Link to={window.$baseGuideUrl}><h4>Guides</h4></Link>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-right-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/introduction-to-skiing-in-japan'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SnowWalls.svg' fluid='true' alt='Introduction to skiing in Japan' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/introduction-to-skiing-in-japan'><h5>Introduction to skiing in Japan</h5></Link>\r\n </div>\r\n <div>\r\n This guide looks back at how skiing was introduced to Japan, ski resort development over the years, various boom periods, the introduction of snowboarding and the growth of inbound tourism.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-left-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/the-japan-skiing-experience'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-GuidedTour.svg' fluid='true' alt='The Japan ski experience' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/the-japan-skiing-experience'><h5>The Japan skiing experience</h5></Link>\r\n </div>\r\n <div>\r\n Some parts of Japan's ski experience are somewhat different from the experience in other countries. This guide introduces aspects of what to expect when skiing and snowboarding in Japan.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-right-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/travel-guides'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Inbound.svg' fluid='true' alt='Travel guides' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/travel-guides'><h5>Travel guides</h5></Link>\r\n </div>\r\n <div>\r\n An introduction to getting around Japan by public transport and car, as well as various region-specific travel guide information.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-left-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/the-prefectures-of-japan'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLocations.svg' fluid='true' alt='Introducing the prefectures' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/the-prefectures-of-japan'><h5>Introducing the prefectures</h5></Link>\r\n </div>\r\n <div>\r\n There are ski areas in 31 of the 47 prefectures of Japan. This section looks at each prefecture, including introductions to the popular skiing regions, basic statistics and data.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-right-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/graphs'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Graphs-Data.svg' fluid='true' alt='Japanese ski areas by graphs' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/graphs'><h5>Japanese ski areas by graphs</h5></Link>\r\n </div>\r\n <div>\r\n In this section, we offer a visual way to discover the ski areas of Japan through interactive graphs covering the whole of Japan and individual prefectures.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding home-guide-section sj-padding-left-15\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-list-icon-holder\">\r\n <Link to='/guides/old-ski-areas-from-japans-past'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiArea-History.svg' fluid='true' alt='Ski areas from Japan past' /></Link>\r\n </div>\r\n <div className=\"col-md-8 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <Link to='/guides/old-ski-areas-from-japans-past'><h5>Ski areas from Japan's past</h5></Link>\r\n </div>\r\n <div>\r\n Over the decades, there have been over 800 individual ski areas in Japan. Many old ski areas are no longer with us, but we believe they should be remembered.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row mb-5\">\r\n <div className=\"sj-row mb-5\">\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-4\">\r\n <Link to={window.$baseListingUrl}><h4>Listings</h4></Link>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left'>\r\n <Link to={window.$baseAccommodationUrl}><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Accommodations.svg' fluid='true' alt='Accommodation' /></Link>\r\n <div className='mt-1 margin-bottom-5'>\r\n <Link to={window.$baseAccommodationUrl} className='btn btn-primary sj-large-button-blue sj-full-width pt-3'><h5>Accommodation</h5></Link>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1'>\r\n <Link to='/listings/resort-spotlights'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiArea.svg' fluid='true' alt='Ski Areas' /></Link>\r\n <div className='mt-1 margin-bottom-5'>\r\n <Link to='/listings/resort-spotlights' className='btn btn-primary sj-large-button-blue sj-full-width pt-3'><h5>Ski Areas</h5></Link>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center2'>\r\n <Link to='/listings/lessons'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Ski-Lessons.svg' fluid='true' alt='Ski lessons' /></Link>\r\n <div className='mt-1 margin-bottom-5'>\r\n <Link to='/listings/lessons' className='btn btn-primary sj-large-button-blue sj-full-width pt-3'><h5>Ski lessons</h5></Link>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-right'>\r\n <Link to='/listings/job-listings'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Jobs-Available.svg' fluid='true' alt='Jobs available' /></Link>\r\n <div className='mt-1 margin-bottom-5'>\r\n <Link to='/listings/job-listings' className='btn btn-primary sj-large-button-blue sj-full-width pt-3'><h5>Jobs available</h5></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <Link to='/listings/resort-spotlights/geto-kogen'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-geto-kogen.jpg' fluid='true' alt='geto-kogen' /></Link>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1 mt-3'>\r\n <a href={`https://en.nozawaski.com/`} target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-nozawa-onsen.jpg' fluid='true' alt='listing-nozawa-onsen' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center2 mt-3'>\r\n <a href='https://www.appi-japan.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-appi.jpg' fluid='true' alt='appi-listing' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-right mt-3'>\r\n {/*<a href='https://www.snowjapan.com/listings/travel/yuzawa-minamiuonuma-eleven-plus' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-eleven-plus.jpg' alt='listing-naspa' /></a>*/}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n };\r\n}\r\n\r\nexport default Home;","import { useRef, useState } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { useAuth } from '../CustomHooks/useAuth'\r\nimport { Form, Button, Row } from 'react-bootstrap'\r\n\r\nconst Login = () => {\r\n\r\n const { setAuth, setUser } = useAuth()\r\n const navigate = useNavigate();\r\n const [errMsg, setErrMsg] = useState('')\r\n const [formerrors, setFormErrors] = useState({})\r\n\r\n const [values, setValues] = useState({\r\n Username: \"\",\r\n Password: \"\"\r\n })\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const validate = () => {\r\n\r\n let errors = {};\r\n\r\n if (!values.Username) {\r\n errors.Username = \"The username field cannot be blank.\"\r\n }\r\n\r\n if (!values.Password) {\r\n errors.Password = \"The password field cannot be blank.\"\r\n }\r\n\r\n setFormErrors(errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (validate(values)) {\r\n //console.log(values)\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/InternalLogin`,\r\n data: {\r\n UserName: values.Username,\r\n Password: values.Password,\r\n RememberMe: false\r\n }\r\n }).then(loginResult => {\r\n\r\n let loggedInUserResult = loginResult.data\r\n\r\n if (loggedInUserResult !== null) {\r\n //console.log(loggedInUserResult)\r\n if (loggedInUserResult.ResultType === 'SUCCESS') {\r\n setUser(loggedInUserResult)\r\n setAuth(true)\r\n setValues({\r\n Username: \"\",\r\n Password: \"\"\r\n })\r\n sessionStorage.setItem('sessionUser', JSON.stringify(loggedInUserResult))\r\n //let path = window.$baseMemberUrl;\r\n navigate(window.$baseMemberUrl)\r\n } else {\r\n setErrMsg(loggedInUserResult.Message)\r\n }\r\n } else {\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No Server Response');\r\n }\r\n //errRef.current.focus()\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Login | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Login | Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Icons-Member.svg\" alt='member-login' /></div>\r\n <div>\r\n <h3>SnowJapan member area</h3>\r\n <div className=\"sj-para\">\r\n Your reviews and photographs of Japanese ski areas can be submitted and shared with other people using the SnowJapan member area. All content you submit will be publicly displayed within the relevant sections of SnowJapan and your member page. Before using our member area, <Link to={`${window.$baseAppUrl}/about-members-area`}>please read this</Link>.\r\n </div>\r\n </div>\r\n <div>\r\n <div className='empty-row'>\r\n {errMsg !== '' &&\r\n <div>\r\n <h4 className=\"text-danger\">Error!</h4>\r\n <div className=\"text-danger\">{errMsg}</div>\r\n </div>\r\n }\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n <Form.Group controlId=\"txtUsername\" className=\"mt-2 mb-4\">\r\n <Form.Label><h5>Username:</h5></Form.Label>\r\n <Form.Control name=\"txtUsername\" type=\"text\" placeholder=\"Username\" value={values.Username} onChange={handleChange} />\r\n {formerrors.Username && (\r\n <div className=\"text-danger\">{formerrors.Username}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtPassword\" className=\"mb-4\">\r\n <Form.Label><h5>Password:</h5></Form.Label>\r\n <Form.Control name=\"txtPassword\" type=\"password\" placeholder=\"Password\" value={values.Password} onChange={handleChange} />\r\n {formerrors.Password && (\r\n <div className=\"text-danger\">{formerrors.Password}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Login</Button>\r\n </div>\r\n <div className='center-aligned'>\r\n <Link to={`${window.$baseAppUrl}/forgot-password`} className='btn btn-primary w-100 sj-box-dark-blue mt-2 mb-3'><h6 className='mt-1 mb-1'>Forgot password</h6></Link>\r\n </div>\r\n </Row>\r\n </Form>\r\n </div>\r\n <div>\r\n <div className='sj-row'>\r\n <h3>Want to join?</h3>\r\n <div className=\"sj-para\">\r\n <p>Registration is free and very simple.\r\n </p>\r\n <p>\r\n What is needed:\r\n </p>\r\n <p>\r\n - a username (does not need to be your real name)<br />\r\n - a valid email address<br />\r\n - a password<br />\r\n </p>\r\n <p>\r\n Your email address is not shared with anyone or added to any mailing list, and you will not receive any emails from us. Be assured that it is strictly only used for registration purposes.\r\n </p>\r\n </div>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <Link to={`${window.$baseAppUrl}/register`} className='btn btn-primary w-100 sj-box-dark-blue mt-2'><h6 className='mt-1 mb-1'>Register here</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Login;","/* eslint-disable */\r\nimport { useRef, useState } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Form, Button, Row, Collapse } from 'react-bootstrap'\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst USER_NAME_REGEX = /^[A-z][A-z0-9-_]{3,23}$/\r\nconst EMAIL_REGEX = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/\r\nconst PWD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%]).{8,24}$/\r\n\r\nconst Register = () => {\r\n //const errRef = useRef()\r\n const [success, setSuccess] = useState(false)\r\n const [errMsg, setErrMsg] = useState('')\r\n const [formerrors, setFormErrors] = useState({})\r\n const [isVisible, setIsVisible] = useState(false)\r\n\r\n const [values, setValues] = useState({\r\n FullName: \"\",\r\n Email: \"\",\r\n Username: \"\",\r\n Password: \"\",\r\n ConfirmPassword: \"\"\r\n })\r\n\r\n const invokeCollapse = () => {\r\n return setIsVisible(!isVisible)\r\n }\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const validate = () => {\r\n let errors = {}\r\n\r\n if (!values.FullName) {\r\n errors.FullName = \"The full name field cannot be blank.\"\r\n }\r\n\r\n if (!values.Email) {\r\n errors.Email = \"The email field cannot be blank.\"\r\n } else if (!EMAIL_REGEX.test(values.Email)) {\r\n errors.Email = \"The email address is invalid.\"\r\n }\r\n\r\n if (!values.Username) {\r\n errors.Username = \"The username field cannot be blank.\"\r\n } else if (!USER_NAME_REGEX.test(values.Username)) {\r\n errors.Username = \"The username is not valid.\"\r\n }\r\n\r\n if (!values.Password) {\r\n errors.Password = \"The password field cannot be blank.\"\r\n }\r\n else if (!PWD_REGEX.test(values.Password)) {\r\n errors.Password = \"The password field is not valid.\"\r\n }\r\n\r\n if (!values.ConfirmPassword) {\r\n errors.ConfirmPassword = \"The confirm password field cannot be blank.\"\r\n } else if (values.Password !== values.ConfirmPassword) {\r\n errors.ConfirmPassword = \"The confirm password did not match with the password.\"\r\n }\r\n\r\n setFormErrors(errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (validate(values)) {\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/Register`,\r\n data: {\r\n FullName: values.FullName,\r\n Email: values.Email,\r\n UserName: values.Username,\r\n Password: values.Password,\r\n ConfirmPassword: values.ConfirmPassword\r\n }\r\n }).then(registrationResult => {\r\n\r\n console.log(registrationResult?.data);\r\n\r\n let registeredUser = registrationResult.data\r\n\r\n if (registeredUser !== null) {\r\n console.log(registeredUser)\r\n if (registeredUser.ResultType === 'SUCCESS') {\r\n setValues({\r\n FullName: \"\",\r\n Email: \"\",\r\n Username: \"\",\r\n Password: \"\",\r\n ConfirmPassword: \"\"\r\n })\r\n setSuccess(true)\r\n } else {\r\n //setSuccess(false)\r\n setErrMsg(registeredUser.Message)\r\n errRef.current.focus()\r\n }\r\n } else {\r\n //setSuccess(false)\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n //errRef.current.focus()\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No Server Response')\r\n }\r\n //errRef.current.focus()\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Register | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Register a new account to upload photos and submit reviews on SnowJapan.\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Icons-Member.svg\" alt='member-login' /></div>\r\n <div>\r\n <h3>SnowJapan member area</h3>\r\n <div className=\"sj-para\">\r\n <p>Thank you in advance for sharing your thoughts and/or photographs of Japanese ski areas with other SnowJapan readers.</p>\r\n <p>Be assured that your email address is strictly only used for registration purposes. It is not shared with anyone or added to any mailing list, and you will not receive any emails from us.</p>\r\n <p>Before submitting content to SnowJapan, <Link to={`${window.$baseAppUrl}/about-members-area`}>please read this</Link>.</p>\r\n </div>\r\n </div>\r\n <div className=\"empty-row\">\r\n {success ? (\r\n <section>\r\n <h1>Success!</h1>\r\n <p>\r\n <div>A confirmation email has been sent to you. Please click the link on the email to activate your account.</div>\r\n </p>\r\n </section>\r\n ) : (\r\n <>\r\n {errMsg !== '' &&\r\n <div>\r\n <h1 className=\"text-danger\">Error!</h1>\r\n <div className=\"text-danger\">{errMsg}</div>\r\n </div>\r\n }\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n <Form.Group controlId=\"txtFullName\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Name:</h5>\r\n Your name will never be displayed on the site or shared.\r\n </Form.Label>\r\n <Form.Control name=\"txtFullName\" type=\"text\" placeholder=\"Full name\" value={values.FullName} onChange={handleChange} />\r\n {formerrors.FullName && (\r\n <div className=\"text-danger\">{formerrors.FullName}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtEmail\" className=\"mb-4\">\r\n <Form.Label><h5>Email:</h5>\r\n Your email address will never be displayed on the site or shared.\r\n </Form.Label>\r\n <Form.Control name=\"txtEmail\" type=\"email\" placeholder=\"Email\" aria-describedby=\"igEmail\" value={values.Email} onChange={handleChange} />\r\n {formerrors.Email && (\r\n <div className=\"text-danger\">{formerrors.Email}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtUsername\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Username:</h5>\r\n Your username will be displayed on the site alongside your content.\r\n </Form.Label>\r\n <Form.Control name=\"txtUsername\" type=\"text\" placeholder=\"Username\" value={values.Username} onChange={handleChange} />\r\n {formerrors.Username && (\r\n <div className=\"text-danger\">{formerrors.Username}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtPassword\" className=\"mb-4\">\r\n <Form.Label>\r\n <h5>Password:</h5>\r\n </Form.Label>\r\n <Form.Control name=\"txtPassword\" type=\"password\" placeholder=\"Password\" value={values.Password} onChange={handleChange} />\r\n {formerrors.Password && (\r\n <div className=\"text-danger\">{formerrors.Password}\r\n {formerrors.Password === 'The password field is not valid.' &&\r\n <>\r\n <FontAwesomeIcon icon={faQuestionCircle} onClick={invokeCollapse} />\r\n <Collapse in={isVisible}>\r\n <div id=\"collapsePanel\">\r\n <div>\r\n 8 to 24 characters.<br />\r\n Must include uppercase and lowercase letters, a number and a special character.<br />\r\n Allowed special characters: <span aria-label=\"exclamation mark\">!</span> <span aria-label=\"at symbol\">@</span> <span aria-label=\"hashtag\">#</span> <span aria-label=\"dollar sign\">$</span> <span aria-label=\"percent\">%</span>\r\n </div>\r\n </div>\r\n </Collapse>\r\n </>\r\n }\r\n </div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtConfirmPassword\" className=\"mb-4\">\r\n <Form.Label><h5>Confirm password:</h5></Form.Label>\r\n <Form.Control name=\"txtConfirmPassword\" type=\"password\" placeholder=\"Confirm password\" value={values.ConfirmPassword} onChange={handleChange} />\r\n {formerrors.ConfirmPassword && (\r\n\r\n <div className=\"text-danger\">{formerrors.ConfirmPassword}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Register</Button>\r\n </div>\r\n </Row>\r\n </Form>\r\n </>\r\n )}\r\n <div>\r\n <div className='sj-row mt-3 pt-3'>\r\n <h3>Already registered?</h3>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <Link to={`${window.$baseAppUrl}/login`} className='btn btn-primary w-100 sj-box-dark-blue mt-2'><h6 className='mt-1 mb-1'>Login here</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default Register","/* eslint-disable */\r\nimport './../../AuthenticationForm.css'\r\nimport { useState, useEffect } from \"react\"\r\nimport { useSearchParams, useParams } from 'react-router-dom'\r\nimport axios from 'axios'\r\n\r\n//`${window.$baseSJAPIUrl}/api/Account/Register`\r\n\r\nconst ConfirmEmail = () => {\r\n\r\n const params = useParams()\r\n\r\n const [errMsg, setErrMsg] = useState('')\r\n const [statusCode, setStatusCode] = useState('')\r\n const [success, setSuccess] = useState(false)\r\n const [nonSuccessMessage, setNonSuccessMessage] = useState('Please wait while we verify your email.')\r\n const [searchParams, setSearchParams] = useSearchParams()\r\n const token = searchParams.get('token') || ''\r\n\r\n const HandleConfirmEmail = (thisToken) => {\r\n console.log(thisToken)\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/ConfirmEmail`,\r\n data: {\r\n Token: thisToken\r\n }\r\n }).then(confirmEmailResult => {\r\n console.log(confirmEmailResult);\r\n if (confirmEmailResult.data.ResultType === 'SUCCESS') {\r\n setSuccess(true)\r\n setErrMsg('')\r\n } else {\r\n setErrMsg(confirmEmailResult.data.Message)\r\n setStatusCode(confirmEmailResult.data.StatusCode)\r\n }\r\n })\r\n } catch (err) {\r\n console.log(err)\r\n if (!err?.response) {\r\n setErrMsg('No server response');\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n HandleConfirmEmail(token);\r\n }, [token])\r\n\r\n return (\r\n <>\r\n {success ? (\r\n <section>\r\n <p>Email conifirmation successful. Please use the link below to sign-in.</p>\r\n <p>\r\n <a href=\"/login\">Sign In</a>\r\n </p>\r\n </section>\r\n ) : (\r\n errMsg !== '' ? (\r\n <div className='className=\"sj-row-no-margin-padding\"'>\r\n {statusCode === '409' ? (\r\n <>\r\n <p>{errMsg} Please use the link below to sign-in.</p>\r\n <p><a href=\"/login\">Sign In</a></p>\r\n </>\r\n ) : (\r\n <>\r\n <p>{errMsg}</p>\r\n </>\r\n )}\r\n </div>\r\n ) : (\r\n <div className='className=\"sj-row-no-margin-padding\"'>\r\n {nonSuccessMessage}\r\n </div>\r\n )\r\n )}\r\n </>\r\n )\r\n}\r\n\r\nexport default ConfirmEmail","/* eslint-disable */\r\nimport { useRef, useState } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Form, Button, Row, Collapse } from 'react-bootstrap'\r\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\"\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\r\n\r\nconst EMAIL_REGEX = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/\r\n\r\nconst ForgotPassword = () => {\r\n //const errRef = useRef()\r\n const [success, setSuccess] = useState(false)\r\n const [errMsg, setErrMsg] = useState('')\r\n const [formerrors, setFormErrors] = useState({})\r\n //const [isVisible, setIsVisible] = useState(false)\r\n\r\n const [values, setValues] = useState({\r\n Username: \"\",\r\n Email: \"\"\r\n })\r\n\r\n /*const invokeCollapse = () => {\r\n return setIsVisible(!isVisible)\r\n }*/\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const validate = () => {\r\n let errors = {}\r\n\r\n if (!values.Username) {\r\n errors.Username = \"The username field cannot be blank.\"\r\n }\r\n\r\n if (!values.Email) {\r\n errors.Email = \"The email field cannot be blank.\"\r\n } else if (!EMAIL_REGEX.test(values.Email)) {\r\n errors.Email = \"The email address is invalid.\"\r\n }\r\n\r\n setFormErrors(errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (validate(values)) {\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/ForgotPassword`,\r\n data: {\r\n UserName: values.Username,\r\n Email: values.Email\r\n }\r\n }).then(forgotPasswordResult => {\r\n\r\n console.log(forgotPasswordResult?.data);\r\n\r\n let forgotPassword = forgotPasswordResult.data\r\n\r\n if (forgotPassword !== null) {\r\n console.log(forgotPassword)\r\n if (forgotPassword.ResultType === 'SUCCESS') {\r\n setValues({\r\n Username: \"\",\r\n Email: \"\"\r\n })\r\n setSuccess(true)\r\n } else {\r\n setErrMsg(registeredUser.Message)\r\n errRef.current.focus()\r\n }\r\n } else {\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No server response')\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Forgot password | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Register a new account to upload photos and submit reviews on SnowJapan.\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Icons-Member.svg\" alt='member-login' /></div>\r\n <div>\r\n <h3>SnowJapan member area</h3>\r\n <div className=\"sj-para\">\r\n <p>Please enter your username and email below and click Submit to reset your password.</p>\r\n </div>\r\n </div>\r\n <div className=\"empty-row\">\r\n {success ? (\r\n <section>\r\n <h3>Success!</h3>\r\n <p>Please check your registered email address.</p>\r\n <p>Click on the link in the email to reset your password.</p>\r\n </section>\r\n ) : (\r\n <>\r\n {errMsg !== '' &&\r\n <div>\r\n <h1 className=\"text-danger\">Error!</h1>\r\n <div className=\"text-danger\">{errMsg}</div>\r\n </div>\r\n }\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n <Form.Group controlId=\"txtUsername\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Username:</h5>\r\n </Form.Label>\r\n <Form.Control name=\"txtUsername\" type=\"text\" placeholder=\"Username\" value={values.Username} onChange={handleChange} />\r\n {formerrors.Username && (\r\n <div className=\"text-danger\">{formerrors.Username}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtEmail\" className=\"mb-4\">\r\n <Form.Label><h5>Email:</h5>\r\n </Form.Label>\r\n <Form.Control name=\"txtEmail\" type=\"email\" placeholder=\"Email\" aria-describedby=\"igEmail\" value={values.Email} onChange={handleChange} />\r\n {formerrors.Email && (\r\n <div className=\"text-danger\">{formerrors.Email}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Submit</Button>\r\n </div>\r\n </Row>\r\n </Form>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default ForgotPassword","/* eslint-disable */\r\nimport { useState, useEffect } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link, useSearchParams, useParams } from 'react-router-dom'\r\nimport { Form, Button, Row, Collapse } from 'react-bootstrap'\r\nimport axios from 'axios'\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport './../../AuthenticationForm.css'\r\n\r\n//`${window.$baseSJAPIUrl}/api/Account/Register`\r\nconst PWD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%]).{8,24}$/\r\n\r\nconst ResetPassword = () => {\r\n\r\n const params = useParams()\r\n\r\n const [errMsg, setErrMsg] = useState('')\r\n const [statusCode, setStatusCode] = useState('')\r\n const [success, setSuccess] = useState(false)\r\n const [nonSuccessMessage, setNonSuccessMessage] = useState('Please wait while we verify your email.')\r\n const [searchParams, setSearchParams] = useSearchParams()\r\n const token = searchParams.get('token') || ''\r\n const [formerrors, setFormErrors] = useState({})\r\n const [isVisible, setIsVisible] = useState(false)\r\n\r\n const [values, setValues] = useState({\r\n Token: \"\",\r\n Password: \"\",\r\n ConfirmPassword: \"\"\r\n })\r\n\r\n useEffect(() => {\r\n //HandleConfirmEmail(token);\r\n setValues((values) => ({\r\n ...values,\r\n \"Token\": token,\r\n }))\r\n }, [token])\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const validate = () => {\r\n let errors = {}\r\n\r\n if (!values.Password) {\r\n errors.Password = \"The password field cannot be blank.\"\r\n }\r\n else if (!PWD_REGEX.test(values.Password)) {\r\n errors.Password = \"The password field is not valid.\"\r\n }\r\n\r\n if (!values.ConfirmPassword) {\r\n errors.ConfirmPassword = \"The confirm password field cannot be blank.\"\r\n } else if (values.Password !== values.ConfirmPassword) {\r\n errors.ConfirmPassword = \"The confirm password did not match with the password.\"\r\n }\r\n\r\n setFormErrors(errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n /*const HandleResetPassword = (thisToken) => {\r\n console.log(thisToken)\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/ResetPassword`,\r\n data: {\r\n Token: thisToken,\r\n Password: ,\r\n ConfirmPassword: \r\n }\r\n }).then(resetPasswordResult => {\r\n console.log(resetPasswordResult);\r\n if (resetPasswordResult.data.ResultType === 'SUCCESS') {\r\n setSuccess(true)\r\n setErrMsg('')\r\n } else {\r\n setErrMsg(resetPasswordResult.data.Message)\r\n setStatusCode(resetPasswordResult.data.StatusCode)\r\n }\r\n })\r\n } catch (err) {\r\n console.log(err)\r\n if (!err?.response) {\r\n setErrMsg('No server response');\r\n }\r\n }\r\n }*/\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (validate(values)) {\r\n try {\r\n var thisData = {\r\n Token: values.Token,\r\n Password: values.Password,\r\n ConfirmPassword: values.ConfirmPassword\r\n }\r\n\r\n console.log(thisData)\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/ResetPassword`,\r\n data: thisData\r\n }).then(resetPasswordResult => {\r\n\r\n console.log(resetPasswordResult?.data);\r\n\r\n if (resetPasswordResult.data.ResultType === 'SUCCESS') {\r\n setSuccess(true)\r\n setErrMsg('')\r\n } else {\r\n setErrMsg(resetPasswordResult.data.Message)\r\n setStatusCode(resetPasswordResult.data.StatusCode)\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No Server Response')\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Reset password | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Register a new account to upload photos and submit reviews on SnowJapan.\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Icons-Member.svg\" alt='member-login' /></div>\r\n <div>\r\n <h3>SnowJapan member area</h3>\r\n <div className=\"sj-para\">\r\n <p>Please enter a new password below and click Reset password to assign a new password.</p>\r\n </div>\r\n </div>\r\n <div className=\"empty-row\">\r\n {success ? (\r\n <section>\r\n <h1>Success!</h1>\r\n <p>\r\n <div>Your password has been changed successfully. Please click the button below to login.</div>\r\n <div className='sj-row mt-3 pt-3'>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <Link to={`${window.$baseAppUrl}/login`} className='btn btn-primary w-100 sj-box-dark-blue mt-2'><h6 className='mt-1 mb-1'>Login here</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </p>\r\n </section>\r\n ) : (\r\n <>\r\n {errMsg !== '' &&\r\n <div>\r\n <h1 className=\"text-danger\">Error!</h1>\r\n <div className=\"text-danger\">{errMsg}</div>\r\n </div>\r\n }\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n <Form.Group controlId=\"txtPassword\" className=\"mb-4\">\r\n <Form.Label>\r\n <h5>Password:</h5>\r\n </Form.Label>\r\n <Form.Control name=\"txtPassword\" type=\"password\" placeholder=\"Password\" value={values.Password} onChange={handleChange} />\r\n {formerrors.Password && (\r\n <div className=\"text-danger\">{formerrors.Password}\r\n {formerrors.Password === 'The password field is not valid.' &&\r\n <>\r\n <FontAwesomeIcon icon={faQuestionCircle} onClick={invokeCollapse} />\r\n <Collapse in={isVisible}>\r\n <div id=\"collapsePanel\">\r\n <div>\r\n 8 to 24 characters.<br />\r\n Must include uppercase and lowercase letters, a number and a special character.<br />\r\n Allowed special characters: <span aria-label=\"exclamation mark\">!</span> <span aria-label=\"at symbol\">@</span> <span aria-label=\"hashtag\">#</span> <span aria-label=\"dollar sign\">$</span> <span aria-label=\"percent\">%</span>\r\n </div>\r\n </div>\r\n </Collapse>\r\n </>\r\n }\r\n </div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtConfirmPassword\" className=\"mb-4\">\r\n <Form.Label><h5>Confirm password:</h5></Form.Label>\r\n <Form.Control name=\"txtConfirmPassword\" type=\"password\" placeholder=\"Confirm password\" value={values.ConfirmPassword} onChange={handleChange} />\r\n {formerrors.ConfirmPassword && (\r\n\r\n <div className=\"text-danger\">{formerrors.ConfirmPassword}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Reset password</Button>\r\n </div>\r\n </Row>\r\n </Form>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default ResetPassword","import { useState } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Form, Button, Row } from 'react-bootstrap'\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst Contact = () => {\r\n const [successMessage, setSuccessMessage] = useState(false)\r\n\r\n const [values, setValues] = useState({\r\n txtName: \"\",\r\n txtEmail: \"\",\r\n txtConfirmEmail: \"\",\r\n txtContent: \"\"\r\n });\r\n\r\n const [formerrors, setFormErrors] = useState({});\r\n //this method handles the each form field changing and updates the relevant\r\n //state value for that input\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name]: event.target.value,\r\n }));\r\n };\r\n\r\n //this method will check each field in your form. You define\r\n //the rules for each field\r\n const validate = () => {\r\n let errors = {};\r\n\r\n //name field\r\n if (!values.txtName) {\r\n errors.txtName = \"Name is required\";\r\n }\r\n //email field\r\n if (!values.txtEmail) {\r\n errors.txtEmail = \"Email address is required\";\r\n } else if (!/\\S+@\\S+\\.\\S+/.test(values.txtEmail)) {\r\n errors.txtEmail = \"Email address is invalid\";\r\n }\r\n //confirm email field\r\n if (!values.txtConfirmEmail) {\r\n errors.txtConfirmEmail = \"Confirm email address is required\";\r\n } else if (!/\\S+@\\S+\\.\\S+/.test(values.txtConfirmEmail)) {\r\n errors.txtConfirmEmail = \"Confirm email address is invalid\";\r\n } else if (values.txtEmail !== values.txtConfirmEmail) {\r\n errors.txtConfirmEmail = \"Confirm email address did not match with email address\";\r\n }\r\n //subject field\r\n if (!values.optSubject) {\r\n errors.optSubject = \"Subject is required\";\r\n }\r\n //content field\r\n if (!values.txtContent) {\r\n errors.txtContent = \"Content is required\";\r\n }\r\n setFormErrors(errors);\r\n if (Object.keys(errors).length === 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n const handleSubmit = (event) => {\r\n if (event) event.preventDefault();\r\n if (validate(values)) {\r\n SendContactEmail()\r\n }\r\n };\r\n\r\n const SendContactEmail = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/home/contact`,\r\n data: {\r\n name: values.txtName,\r\n email: values.txtEmail,\r\n subject: values.optSubject,\r\n content: values.txtContent\r\n }\r\n }).then(dataContact => {\r\n if (dataContact.data === 'Sent') {\r\n setValues({\r\n txtName: \"\",\r\n txtEmail: \"\",\r\n txtConfirmEmail: \"\",\r\n txtContent: \"\"\r\n })\r\n\r\n setSuccessMessage(true)\r\n }\r\n })\r\n };\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Contact SnowJapan</title>\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Contact.svg\" alt=\"Japan as 'Snow Country'\" /></div>\r\n <div>\r\n <h3>Contact SnowJapan</h3>\r\n <div className=\"sj-para\">\r\n Please use the below form to contact SnowJapan.\r\n </div>\r\n <h5 className=\"sj-para\">\r\n Important:\r\n </h5>\r\n <div className=\"sj-para\">\r\n We believe our time is best spent improving SnowJapan’s content for everyone's benefit.\r\n </div>\r\n <div className=\"sj-para\">\r\n Sorry, but we cannot answer specific questions about ski areas, hotels, schools, or other services and businesses. We are also not able to make recommendations or assist with travel arrangements. As much as we would like to help, do not expect to receive a reply if you use the below form to send such requests.\r\n </div>\r\n <div className=\"sj-para\">\r\n If you use the contact form, we promise that the email address you submit will never be added to any list or shared. We will only use it if we reply to your enquiry.\r\n </div>\r\n <div className=\"sj-para\">\r\n Thank you.\r\n </div>\r\n </div>\r\n </div>\r\n {successMessage &&\r\n <div className='empty-row sj-box sj-box-blue sj-round-full center-aligned'>\r\n <h4>Thank you for contacting SnowJapan</h4>\r\n </div>\r\n }\r\n <div className=\"empty-row\">\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n <Form.Group controlId=\"txtName\" className=\"mt-2 mb-4\">\r\n <Form.Label><h5>Name</h5></Form.Label>\r\n <Form.Control name=\"txtName\" type=\"text\" placeholder=\"Name\" value={values.txtName} onChange={handleChange} />\r\n {formerrors.txtName && (\r\n <div className=\"text-danger\">{formerrors.txtName}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtEmail\" className=\"mb-4\">\r\n <Form.Label><h5>Email</h5></Form.Label>\r\n <Form.Control name=\"txtEmail\" type=\"email\" placeholder=\"Email\" aria-describedby=\"igEmail\" value={values.txtEmail} onChange={handleChange} />\r\n {formerrors.txtEmail && (\r\n <div className=\"text-danger\">{formerrors.txtEmail}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtConfirmEmail\" className=\"mb-4\">\r\n <Form.Label><h5>Confirm email</h5></Form.Label>\r\n <Form.Control name=\"txtConfirmEmail\" type=\"email\" placeholder=\"Confirm email\" aria-describedby=\"igConfirmEmail\" value={values.txtConfirmEmail} onChange={handleChange} />\r\n {formerrors.txtConfirmEmail && (\r\n <div className=\"text-danger\">{formerrors.txtConfirmEmail}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group className=\"mb-4\">\r\n <Form.Label><h5>Subject</h5></Form.Label><br />\r\n <Form.Check inline label=\"General enquiry\" name=\"optSubject\" id=\"optSubjectGeneral\" type=\"radio\" value=\"General enquiry\" onChange={handleChange} />\r\n <Form.Check inline label=\"Business and advertising enquiry\" name=\"optSubject\" id=\"optSubjectBusiness\" type=\"radio\" value=\"Business and advertising enquiry\" onChange={handleChange} />\r\n {formerrors.optSubject && (\r\n <div className=\"text-danger\">{formerrors.optSubject}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtContent\" className=\"mb-4\">\r\n <Form.Label><h5>Content</h5></Form.Label>\r\n <Form.Control name=\"txtContent\" as=\"textarea\" rows={10} value={values.txtContent} onChange={handleChange} />\r\n {formerrors.txtContent && (\r\n <div className=\"text-danger\">{formerrors.txtContent}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-row-100'>Send</Button>\r\n </div>\r\n </Row>\r\n </Form>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Contact;","import { useState, useEffect, Fragment } from 'react'\r\nimport { Form } from 'react-bootstrap'\r\n\r\nconst WayPointAutocomplete = ({ skiAreaList, onRoutePointSelect, initialValue, slNo, controlName, readOnly }) => {\r\n\r\n const [activeSuggestion, setActiveSuggestion] = useState(0)\r\n const [filteredSkiAreas, setFilteredSkiAreas] = useState([])\r\n const [showSuggestions, setShowSuggestions] = useState(false)\r\n const [userInput, setUserInput] = useState('')\r\n\r\n const onChange = (e) => {\r\n let selectedSkiAreaNameParts = e.currentTarget.value.split('(')\r\n\r\n const userInput = selectedSkiAreaNameParts[0].trim();\r\n\r\n const thisFilteredSkiAreas = skiAreaList.filter(\r\n //skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.NameJapanese.indexOf(userInput) === 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.TownNameJapanese.indexOf(userInput) === 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) === 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) === 0))\r\n skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.NameJapanese.indexOf(userInput) >= 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.TownNameJapanese.indexOf(userInput) >= 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) >= 0))\r\n );\r\n\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas(thisFilteredSkiAreas)\r\n setShowSuggestions(true)\r\n setUserInput(e.currentTarget.value)\r\n };\r\n\r\n const onClick = e => {\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas([])\r\n setShowSuggestions(false)\r\n setUserInput(e.currentTarget.innerText)\r\n\r\n let selectedSkiAreaNameParts = e.currentTarget.innerText.split('(')\r\n\r\n const selectedSkiAreaList = skiAreaList.filter(\r\n skiArea => (skiArea.Name === selectedSkiAreaNameParts[0].trim())\r\n );\r\n\r\n let coords = e.currentTarget.innerText.split(',')\r\n\r\n if (selectedSkiAreaList.length > 0) {\r\n\r\n let selectedSkiArea = selectedSkiAreaList[0];\r\n\r\n let newRoutePoint = {\r\n name: selectedSkiArea.Name + ' (' + selectedSkiArea.PrefectureName + ')',\r\n location_latitude: selectedSkiArea.Location_Latitude,\r\n location_longitude: selectedSkiArea.Location_Longitude,\r\n index: slNo\r\n };\r\n\r\n onRoutePointSelect(newRoutePoint)\r\n }\r\n else if (coords.length === 2) {\r\n let newRoutePoint = {\r\n name: e.currentTarget.innerText,\r\n location_latitude: coords[0],\r\n location_longitude: coords[1],\r\n index: slNo\r\n };\r\n\r\n onRoutePointSelect(newRoutePoint)\r\n }\r\n };\r\n\r\n const onKeyDown = (e) => {\r\n if (e.keyCode === 13) {\r\n setActiveSuggestion(0)\r\n setShowSuggestions(false)\r\n let selectedSkiArea = filteredSkiAreas[activeSuggestion]\r\n if (selectedSkiArea !== null && selectedSkiArea !== undefined) {\r\n setUserInput(selectedSkiArea.Name + ' (' + selectedSkiArea.PrefectureName + ')')\r\n let newRoutePoint = {\r\n name: selectedSkiArea.Name + ' (' + selectedSkiArea.PrefectureName + ')',\r\n location_latitude: selectedSkiArea.Location_Latitude,\r\n location_longitude: selectedSkiArea.Location_Longitude,\r\n index: slNo\r\n };\r\n\r\n onRoutePointSelect(newRoutePoint)\r\n }\r\n }\r\n else if (e.keyCode === 38) {\r\n if (activeSuggestion === 0) {\r\n return;\r\n }\r\n\r\n setActiveSuggestion(activeSuggestion - 1)\r\n }\r\n else if (e.keyCode === 40) {\r\n if (activeSuggestion - 1 === filteredSkiAreas.length) {\r\n return;\r\n }\r\n setActiveSuggestion(activeSuggestion + 1)\r\n }\r\n };\r\n\r\n const isCoordinate = (input) => {\r\n\r\n let coords = input.split(',')\r\n if (coords.length === 2) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n const isValidCoordinate = (input) => {\r\n\r\n let coords = input.split(',')\r\n if (coords.length === 2) {\r\n if (coords[0].trim() >= 26.075 && coords[0].trim() <= 45.52722222222222 && coords[1].trim() >= 127.6363888888889 && coords[1].trim() <= 145.8175) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n useEffect(() => {\r\n setUserInput(initialValue)\r\n }, [initialValue]);\r\n\r\n let suggestionsListComponent;\r\n\r\n if (showSuggestions && userInput) {\r\n if (filteredSkiAreas.length) {\r\n suggestionsListComponent = (\r\n <ul className=\"suggestions\">\r\n {filteredSkiAreas.map((skiArea, index) => {\r\n let className;\r\n\r\n if (index === activeSuggestion) {\r\n className = \"suggestion-active\";\r\n }\r\n\r\n return (\r\n <li className={className} key={index} onClick={onClick}>\r\n {skiArea.Name} ({skiArea.PrefectureName})\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n } else if (isCoordinate(userInput)) {\r\n if (isValidCoordinate(userInput)) {\r\n suggestionsListComponent = (<ul className=\"suggestions\">\r\n <li onClick={onClick}>\r\n {userInput}\r\n </li>\r\n </ul>\r\n );\r\n }\r\n else {\r\n suggestionsListComponent = (\r\n <div className=\"no-suggestions\">\r\n <em>Only coordinates in Japan are valid</em>\r\n </div>\r\n );\r\n }\r\n } else {\r\n suggestionsListComponent = (\r\n <div className=\"no-suggestions\">\r\n <em>No ski area found</em>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Form.Control name={controlName} type=\"text\" placeholder=\"Type ski area or town name here\" onChange={onChange} onKeyDown={onKeyDown} value={userInput} readOnly={readOnly} />\r\n {suggestionsListComponent}\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default WayPointAutocomplete;","import { GoogleMap, useJsApiLoader, DirectionsRenderer } from '@react-google-maps/api'\r\nimport { useState, useCallback, useEffect } from 'react'\r\nimport { Button } from 'react-bootstrap'\r\nimport { useNavigate, useParams } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport WayPointAutocomplete from \"./WayPointAutocomplete\"\r\nimport { Helmet } from \"react-helmet\"\r\n\r\nconst containerStyle = {\r\n width: '100%',\r\n height: '100vh'\r\n}\r\n\r\nconst center = {\r\n lat: 36.2048,\r\n lng: 138.2529\r\n}\r\n\r\nconst RouteFinder = () => {\r\n\r\n const params = useParams()\r\n\r\n const [formerrors, setFormErrors] = useState({})\r\n const [resort, setResort] = useState(undefined)\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n const [generalMessageRouteFinder, setGeneralMessageRouteFinder] = useState(undefined);\r\n const [originPoint, setOriginPoint] = useState({ name: '', location_latitude: '', location_longitude: '' })\r\n const [destinationPoint, setDestinationPoint] = useState({ name: '', location_latitude: '', location_longitude: '' })\r\n const [wayPoints, setWayPoints] = useState([])\r\n const [showMap, setShowMap] = useState(false)\r\n const summaryPanel = document.getElementById(\"directions-panel\")\r\n //const history = useHistory()\r\n const navigate = useNavigate()\r\n\r\n const alphabetArray = ['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']\r\n\r\n const { isLoaded } = useJsApiLoader({\r\n id: 'google-map-script',\r\n googleMapsApiKey: 'AIzaSyAmyWUwcoNW504tXuRlQ_mZssrKEEhGn20'\r\n })\r\n\r\n const [map, setMap] = useState(/** @type google.maps.Map */(null))\r\n const [directionsResponse, setDirectionsResponse] = useState(null)\r\n\r\n const onLoad = useCallback(function callback(map) {\r\n setMap(map)\r\n }, [])\r\n\r\n const onUnmount = useCallback(function callback(map) {\r\n setMap(null)\r\n }, [])\r\n\r\n const fetchResortData = async (resortUniqueName) => {\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/${resortUniqueName}`\r\n }).then(dataResort => {\r\n if (Object.keys(dataResort.data).length <= 0) {\r\n window.location.href = \"https://www.snowjapan.com/404.html\"\r\n }\r\n\r\n if (dataResort.data !== undefined) {\r\n setResort(dataResort.data)\r\n\r\n let destinationResortName = dataResort.data.Name + ' (' + dataResort.data.PrefectureName + ')'\r\n\r\n let destinationLocation = { name: destinationResortName, location_latitude: dataResort.data.Location_Latitude, location_longitude: dataResort.data.Location_Longitude }\r\n setDestinationPoint(destinationLocation)\r\n }\r\n })\r\n };\r\n\r\n const fetchData = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/route-finder/list`\r\n }).then(dataResortList => {\r\n setSkiAreaList(dataResortList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/RouteFinder`\r\n })\r\n }).then(resGeneralMessages => {\r\n setGeneralMessageRouteFinder(resGeneralMessages.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n // setTimeout(() => myRef.current.scrollIntoView({ behavior: 'smooth' }), 1000);\r\n }, [originPoint.name, destinationPoint.name]);\r\n\r\n useEffect(() => {\r\n\r\n if (params.resort !== undefined) {\r\n fetchResortData(params.resort)\r\n }\r\n\r\n fetchData();\r\n\r\n }, [params.resort]);\r\n\r\n const useCurrentLocation = () => {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n if (position.coords.latitude >= 26.075 && position.coords.latitude <= 45.52722222222222 && position.coords.longitude >= 127.6363888888889 && position.coords.longitude <= 145.8175) {\r\n let currentLocation = { name: 'Current Location', location_latitude: position.coords.latitude, location_longitude: position.coords.longitude }\r\n\r\n if (originPoint.name !== 'Current Location') {\r\n setOriginPoint(currentLocation)\r\n }\r\n }\r\n else {\r\n alert('You need to be within Japan to use current location')\r\n }\r\n })\r\n }\r\n\r\n const setStartPoint = (newValue) => {\r\n if (newValue.name !== 'Current Location') {\r\n setOriginPoint(newValue)\r\n }\r\n }\r\n\r\n const setEndPoint = (newValue) => {\r\n if (newValue.location_latitude !== undefined && newValue.location_longitude !== undefined) {\r\n setDestinationPoint(newValue)\r\n }\r\n }\r\n\r\n const addWayPoint = () => {\r\n let newWayPoints = [...wayPoints, { name: '', location_latitude: '', location_longitude: '' }]\r\n setWayPoints(newWayPoints)\r\n }\r\n\r\n const removeWayPoint = (index) => {\r\n let newWayPoints = [...wayPoints]\r\n newWayPoints.splice(index, 1)\r\n setWayPoints(newWayPoints)\r\n }\r\n\r\n const setWayPoint = (newValue) => {\r\n let newWayPoints = [...wayPoints]\r\n newWayPoints[newValue.index] = { name: newValue.name, location_latitude: newValue.location_latitude, location_longitude: newValue.location_longitude }\r\n setWayPoints(newWayPoints)\r\n }\r\n\r\n async function calculateRoute() {\r\n setDirectionsResponse(null)\r\n setShowMap(false)\r\n\r\n const directionsService = new window.google.maps.DirectionsService()\r\n\r\n const waypts = [];\r\n\r\n for (let i = 0; i < wayPoints.length; i++) {\r\n let routeWayPoint = ''\r\n\r\n if (wayPoints[i].name !== '') {\r\n\r\n if (wayPoints[i].location_latitude !== '' && wayPoints[i].location_longitude !== '') {\r\n let wayPointCoords = [wayPoints[i].location_latitude, wayPoints[i].location_longitude]\r\n routeWayPoint = wayPointCoords.join(',')\r\n } else {\r\n routeWayPoint = wayPoints[i].name\r\n }\r\n }\r\n\r\n waypts.push({\r\n location: routeWayPoint,\r\n stopover: true,\r\n });\r\n }\r\n\r\n // console.log(originPoint)\r\n // console.log(destinationPoint)\r\n\r\n let routeOriginPoint = ''\r\n\r\n if (originPoint.name !== '') {\r\n\r\n if (originPoint.location_latitude !== '' && originPoint.location_longitude !== '') {\r\n let originCoords = [originPoint.location_latitude, originPoint.location_longitude]\r\n // let currentLocation = { name: 'Current Location', location: coords.join(',') }\r\n routeOriginPoint = originCoords.join(',')\r\n } else {\r\n routeOriginPoint = originPoint.name\r\n }\r\n }\r\n\r\n let routeDestinationPoint = ''\r\n\r\n if (destinationPoint.name !== '') {\r\n\r\n if (destinationPoint.location_latitude !== '' && destinationPoint.location_longitude !== '') {\r\n let destinationCoords = [destinationPoint.location_latitude, destinationPoint.location_longitude]\r\n routeDestinationPoint = destinationCoords.join(',')\r\n } else {\r\n routeDestinationPoint = destinationPoint.name\r\n }\r\n }\r\n\r\n if (originPoint.name !== '' && destinationPoint.name !== '') {\r\n const results = await directionsService.route({\r\n origin: routeOriginPoint,\r\n destination: routeDestinationPoint,\r\n waypoints: waypts,\r\n optimizeWaypoints: true,\r\n travelMode: window.google.maps.TravelMode.DRIVING\r\n })\r\n\r\n setDirectionsResponse(results)\r\n setShowMap(true)\r\n }\r\n }\r\n\r\n const clearRoute = () => {\r\n\r\n setDirectionsResponse(null)\r\n setWayPoints([])\r\n setOriginPoint({ name: '', location_latitude: '', location_longitude: '' })\r\n if (params.resort === undefined) {\r\n setDestinationPoint({ name: '', location_latitude: '', location_longitude: '' })\r\n }\r\n setShowMap(false)\r\n }\r\n\r\n const handleGoToMainRouteFinder = () => {\r\n clearRoute()\r\n\r\n setResort(undefined)\r\n setDestinationPoint({ name: '', location_latitude: '', location_longitude: '' })\r\n let path = `${window.$baseRouteFinderUrl}`;\r\n //history.push(path);\r\n navigate(path);\r\n return false\r\n }\r\n\r\n return isLoaded ? (\r\n <div className=\"empty-row\">\r\n <Helmet>\r\n <title>{resort !== undefined ? resort.Name + ' Route Finder | Discover the route to ' + resort.Name + ' (' + resort.TownName + ', ' + resort.PrefectureName + ') | SnowJapan' : 'Route Finder | Discover routes between ski areas throughout Japan | SnowJapan'}</title>\r\n <meta name=\"description\" content='SnowJapan Route Finder allows you to find road routes between ski areas throughout Japan.' />\r\n </Helmet>\r\n <h3>Route Finder{resort !== undefined ? ': ' + resort.Name : ''}</h3>\r\n <div className=\"sj-para\">\r\n {generalMessageRouteFinder !== undefined && generalMessageRouteFinder.Title === 'Y' &&\r\n <>\r\n <strong>SnowJapan Route Finder</strong> allows you to discover routes between ski areas throughout Japan. Type ski area names, town or popular area names, and then select ski areas to choose your route. Add <strong>Waypoints</strong> if required. If you are in Japan and have location settings enabled, click on <strong>Use current location</strong> to use it as your <strong>Starting point</strong>. Learn more about Route Finder below.\r\n {resort !== undefined &&\r\n <a onClick={handleGoToMainRouteFinder} className='normal-link'> Click here for main Route Finder.</a>\r\n }\r\n </>\r\n }\r\n {generalMessageRouteFinder !== undefined && generalMessageRouteFinder.Title !== 'Y' &&\r\n <>\r\n <div className=\"sj-para\">\r\n <strong>SnowJapan Route Finder</strong> allows you to discover routes between ski areas throughout Japan.\r\n </div>\r\n <div className=\"sj-para sj-red-text\">\r\n Sorry, Route Finder is currently temporarily unavailable. Please try again later.\r\n </div>\r\n </>\r\n }\r\n </div>\r\n {generalMessageRouteFinder !== undefined && generalMessageRouteFinder.Title === 'Y' &&\r\n <>\r\n <div className=\"sj-para\">\r\n <div className=\"sj-row padding-top\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 p-0\">\r\n <h5>Starting point [A]</h5>\r\n </div>\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <WayPointAutocomplete controlName='txtStartingPoint' skiAreaList={skiAreaList} initialValue={originPoint.name} readOnly={false} onRoutePointSelect={data => {\r\n setStartPoint(data);\r\n }} />\r\n {formerrors.currentLocation && (\r\n <div className=\"text-danger\">{formerrors.currentLocation}</div>\r\n )}\r\n </div>\r\n <div className=\"col-md-3 sj-list-text-holder\">\r\n <Button className='w-100' onClick={useCurrentLocation}><h6 className='mt-1 mb-1'>Use current location</h6></Button>\r\n </div>\r\n </div>\r\n </div>\r\n {wayPoints.map((wayPoint, index) => (\r\n <div className=\"sj-row\" key={index}>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 p-0\">\r\n <h5>Waypoint [{alphabetArray[index]}]</h5>\r\n </div>\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <WayPointAutocomplete controlName='txtRoutePoint' skiAreaList={skiAreaList} slNo={index} initialValue='' readOnly={false} onRoutePointSelect={data => {\r\n setWayPoint(data);\r\n }} />\r\n </div>\r\n <div className=\"col-md-3 sj-list-text-holder\">\r\n <button type=\"button\" class=\"btn-close mt-1\" aria-label=\"Close\" onClick={() => removeWayPoint(index)}></button>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 p-0\">\r\n <h5>Destination point [{alphabetArray[wayPoints.length]}]</h5>\r\n </div>\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <WayPointAutocomplete controlName='txtDestinationPoint' skiAreaList={skiAreaList} readOnly={params.resort !== undefined} initialValue={destinationPoint.name} onRoutePointSelect={data => {\r\n setEndPoint(data);\r\n }} />\r\n </div>\r\n <div className=\"col-md-3\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 p-0\">\r\n\r\n </div>\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <Button type=\"button\" className='w-100 calculate-route' onClick={calculateRoute} disabled={(originPoint.name != '' && destinationPoint.name != '') ? false : true}><h6 className='mt-1 mb-1'>Calculate route</h6></Button>\r\n </div>\r\n <div className=\"col-md-3\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 p-0\">\r\n\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <Button onClick={addWayPoint} className='w-100 sj-box-dark-blue'><h6 className='mt-1 mb-1'>Add waypoint</h6></Button>\r\n </div>\r\n <div className=\"col-md-6 sj-list-text-holder\">\r\n <Button variant=\"primary\" onClick={clearRoute} className='sj-large-font-button sj-red-bg w-100'><h6 className='mt-1 mb-1'>Clear route</h6></Button>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {showMap &&\r\n <div className='map-container'>\r\n <GoogleMap\r\n mapContainerStyle={containerStyle}\r\n center={center}\r\n zoom={12}\r\n onLoad={onLoad}\r\n onUnmount={onUnmount}\r\n options={{\r\n zoomControl: false,\r\n streetViewControl: false,\r\n mapTypeControl: false,\r\n fullscreenControl: false\r\n }}\r\n >\r\n\r\n {directionsResponse && <DirectionsRenderer directions={directionsResponse} panel={summaryPanel} />}\r\n </GoogleMap>\r\n <div id='directions-panel'></div>\r\n </div>\r\n }\r\n </>\r\n }\r\n <div className='sj-row pt-4'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned\">\r\n <h4>About Route Finder</h4>\r\n </div>\r\n <div className='sj-row'>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Route-finder.svg\" alt=\"Japan Ski Areas Route Finder\" /></div>\r\n\r\n <ul className='mt-2'>\r\n <li>\r\n SnowJapan Route Finder uses Google Maps technology.\r\n </li>\r\n <li>\r\n SnowJapan does not control the maps, routes and information displayed on this page.\r\n </li>\r\n <li>\r\n This functionality and resulting maps and data are provided for general planning and reference purposes.\r\n </li>\r\n <li>\r\n Please research further if you intend to make a road trip.\r\n </li>\r\n <li>\r\n In times of heavy usage, Route Finder functionality might be temporarily unavailable.\r\n </li>\r\n <li>\r\n In such cases, please try again later.\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n ) : <></>\r\n}\r\n\r\nexport default RouteFinder;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\nimport Loader from '../Common/Loader'\r\n\r\nconst CommonPage = () => {\r\n\r\n const params = useParams()\r\n\r\n const [guide, setGuide] = useState(undefined);\r\n\r\n const fetchGuides = async (guideUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/guides/${guideUniqueName}`\r\n }).then(resGuide => {\r\n setGuide(resGuide.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n if (params !== undefined && params.type !== undefined) {\r\n let commonPageNmae = params.type\r\n\r\n if (commonPageNmae === 'about-snowjapan' || commonPageNmae === 'about-snowjapan-japanese' || commonPageNmae === 'about-daily-reports' || commonPageNmae === 'about-information-and-updates' || commonPageNmae === 'about-members-area') {\r\n fetchGuides(commonPageNmae)\r\n } else {\r\n window.location.href = \"https://www.snowjapan.com/404.html\";\r\n }\r\n }\r\n }, [params.type]);\r\n\r\n if (guide !== undefined && guide !== null) {\r\n return (\r\n <>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(guide.HtmlContent) }} />\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n}\r\n\r\nexport default CommonPage","import { Link, useParams } from 'react-router-dom'\r\nimport { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport SkiAreaListTable from '../SkiArea/SkiAreaListTable'\r\nimport AccommodationListTable from '../Accommodation/AccommodationListTable'\r\nimport ListingListTable from '../Listing/ListingListTable'\r\nimport Loader from \"../Common/Loader\"\r\n\r\nconst GeneralSearch = () => {\r\n\r\n const params = useParams()\r\n\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n const [accommodationList, setAccommodationList] = useState([])\r\n const [listingsList, setListingsList] = useState([])\r\n const [guideList, setGuideList] = useState([])\r\n\r\n const fetchSearchedSkiArea = async (keyword) => {\r\n\r\n let areaIds = []\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/search/${keyword}`\r\n }).then(dataSkiAreaList => {\r\n setSkiAreaList(dataSkiAreaList.data)\r\n const allAreaIds = [...new Set(dataSkiAreaList.data.map(item => item.MainArea_Id))]\r\n\r\n areaIds = allAreaIds.filter(function (currentElement) {\r\n return (currentElement);\r\n })\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/search/${keyword}`,\r\n data: { areaIds: areaIds }\r\n })\r\n }).then(dataAccommodationList => {\r\n setAccommodationList(dataAccommodationList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/listings/search/${keyword}`,\r\n data: { areaIds: areaIds }\r\n })\r\n }).then(dataListingsList => {\r\n setListingsList(dataListingsList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/guides/search/${keyword}`\r\n })\r\n }).then(dataGuidesList => {\r\n setGuideList(dataGuidesList.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n if (params.keyword !== undefined) {\r\n fetchSearchedSkiArea(params.keyword)\r\n }\r\n }, [params.keyword]);\r\n\r\n if (params.keyword !== undefined) {\r\n if (skiAreaList.length <= 0 && accommodationList.length <= 0) {\r\n return (\r\n <>\r\n <div>\r\n <h3>General Search</h3>\r\n </div>\r\n <div>\r\n <Loader />\r\n </div>\r\n </>\r\n )\r\n } else {\r\n return (\r\n <>\r\n <div>\r\n <h3>General Search</h3>\r\n </div>\r\n {skiAreaList.length > 0 &&\r\n <div className='mt-5'>\r\n <div className=\"sj-box sj-box-blue sj-round-full center-aligned mt-3\">\r\n <h4>Ski Area Search Result for {params.keyword}</h4>\r\n </div>\r\n <SkiAreaListTable\r\n tableData={skiAreaList}\r\n headingColumns={['', 'Top', 'Bottom', 'Vertical', 'Steepest Slope', 'Ski Course', 'Ski Lifts', 'Reviews', 'Photos']}\r\n dataMapping={['Name', 'MaximumElevation', 'MinimumElevation', 'VerticalDifference', 'SteepestSlope', 'TotalSkiCourses', 'TotalSkiLifts', 'NumberOfReviews', 'NumberOfPhotos']}\r\n title=''\r\n />\r\n </div>\r\n }\r\n {accommodationList.length > 0 &&\r\n <div className='mt-5'>\r\n <div className=\"sj-box sj-box-blue sj-round-full center-aligned mt-3\">\r\n <h4>Accommodation Search Result for {params.keyword}</h4>\r\n </div>\r\n <AccommodationListTable\r\n tableData={accommodationList}\r\n headingColumns={['', '', 'Town', 'Prefecture']}\r\n dataMapping={['AreaName', 'Name', 'TownName', 'PrefectureName']}\r\n title=''\r\n />\r\n </div>\r\n }\r\n {listingsList.length > 0 &&\r\n <div className='mt-5'>\r\n <div className=\"sj-box sj-box-blue sj-round-full center-aligned mt-3\">\r\n <h4>Listing Search Result for {params.keyword}</h4>\r\n </div>\r\n <ListingListTable\r\n tableData={listingsList}\r\n headingColumns={['', '', 'Area', 'Prefecture']}\r\n dataMapping={['a', 'Name', 'AreaName', 'PrefectureName']}\r\n title=''\r\n />\r\n </div>\r\n }\r\n {guideList.length > 0 &&\r\n <div className='mt-5'>\r\n <h3>Guides</h3>\r\n <div className='table-container'>\r\n <table className='table-container__table sj-list-table sj-snow-table'>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Section</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {guideList.map(guide => (\r\n <tr key={guide.Id}>\r\n <td>\r\n <Link to={`${window.$baseGuideUrl}/${guide.SectionUniqueName}/${guide.UniqueName}`}>{guide.Name}</Link>\r\n </td>\r\n <td>{guide.SectionName}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n </>\r\n )\r\n }\r\n }\r\n else {\r\n return (\r\n <>\r\n <div>\r\n <h1>General Search</h1>\r\n </div>\r\n <div>\r\n <h1>Keyword cannot be blank</h1>\r\n </div>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default GeneralSearch","export default __webpack_public_path__ + \"static/media/Snow_Japan_Color_Logo.4b1b796e.svg\";","import { Link } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\nimport textlogo from '../../static-contents/Snow_Japan_Color_Logo.svg'\r\n\r\nconst Header = () => {\r\n return (\r\n <div className=\"center-aligned\">\r\n <div className=\"d-none d-lg-block sj-top-logo-holder\">\r\n <Link to='/'><Image src={textlogo} fluid /></Link>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Header;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link, useLocation } from 'react-router-dom'\r\nimport { Navbar, Nav, Image, NavDropdown } from 'react-bootstrap'\r\nimport textlogo from '../../static-contents/Snow_Japan_Color_Logo.svg'\r\n\r\nconst MainNav = () => {\r\n\r\n const location = useLocation();\r\n //const history = useHistory()\r\n\r\n //const [showSnowData, setShowSnowData] = useState('');\r\n\r\n const [nowList, setNowList] = useState([]);\r\n\r\n const [selectedClassNameResort, setSelectedClassNameResort] = useState('')\r\n const [selectedClassNameNows, setSelectedClassNameNows] = useState('')\r\n const [selectedClassNameGuide, setSelectedClassNameGuide] = useState('')\r\n const [selectedClassNameListing, setSelectedClassNameListing] = useState('')\r\n const [selectedClassNameAbout, setSelectedClassNameAbout] = useState('')\r\n\r\n const [isSkiAreaShown, setIsSkiAreaShown] = useState(false);\r\n const [isDailyReportsShown, setIsDailyReportsShown] = useState(false);\r\n const [isGuideShown, setIsGuideShown] = useState(false);\r\n const [isListingShown, setIsListingShown] = useState(false);\r\n const [isAboutShown, setIsAboutShown] = useState(false);\r\n const [subPageURL, setSubPageURL] = useState('');\r\n\r\n const fetchNowList = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/nows/all`\r\n }).then(resNowList => {\r\n setNowList(resNowList.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchNowList()\r\n }, []);\r\n\r\n useEffect(() => {\r\n\r\n let thisPathName = location.pathname.toLowerCase()\r\n let classNameResort = ''\r\n let classNameNows = ''\r\n let classNameGuide = ''\r\n let classNameListing = ''\r\n let classNameAbout = ''\r\n let thisSubPageURL = ''\r\n\r\n if (thisPathName !== undefined) {\r\n if (thisPathName.includes('/japan-ski-resorts') || thisPathName.includes('/route-finder')) {\r\n classNameResort = 'sj-menu-link-Resort-section'\r\n if (thisPathName.includes('/discover')) {\r\n thisSubPageURL = 'ski-area-discover'\r\n }\r\n else if (thisPathName.includes('/japan-ski-resorts/listings') || thisPathName.includes('/japan-ski-resorts/prefecture') || thisPathName.includes('/japan-ski-resorts/town') || thisPathName.includes('/japan-ski-resorts/area')) {\r\n thisSubPageURL = 'ski-area-listings'\r\n }\r\n else if (thisPathName.includes('/japan-ski-resorts/reviews')) {\r\n thisSubPageURL = 'ski-area-reviews'\r\n }\r\n else if (thisPathName.includes('/japan-ski-resorts/photos')) {\r\n thisSubPageURL = 'ski-area-photos'\r\n }\r\n else if (thisPathName.includes('/route-finder')) {\r\n thisSubPageURL = 'route-finder'\r\n }\r\n else if (thisPathName.endsWith('/japan-ski-resorts') || thisPathName.endsWith('/japan-ski-resorts/')) {\r\n thisSubPageURL = 'ski-area-home'\r\n }\r\n } else if (thisPathName.includes('/guides/the-japan-skiing-experience/the-ski-season-in-japan')) {\r\n classNameResort = 'sj-menu-link-Resort-section'\r\n thisSubPageURL = 'ski-area-the-season'\r\n } else if (thisPathName.includes('/japan-daily-snow-weather-reports')) {\r\n classNameNows = 'sj-menu-link-Nows-section'\r\n if (thisPathName.includes('/japan-daily-snow-weather-reports/webcams')) {\r\n thisSubPageURL = 'daily-report-webcams'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/official-snow-depth')) {\r\n thisSubPageURL = 'daily-report-snow-depth'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/calendar')) {\r\n thisSubPageURL = 'daily-report-calendar'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/appi-kogen-Now')) {\r\n thisSubPageURL = 'appi-kogen-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/furano-Now')) {\r\n thisSubPageURL = 'furano-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/geto-kogen-Now')) {\r\n thisSubPageURL = 'geto-kogen-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/hakuba-now')) {\r\n thisSubPageURL = 'hakuba-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/kiroro-now')) {\r\n thisSubPageURL = 'kiroro-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/madarao-now')) {\r\n thisSubPageURL = 'madarao-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/myoko-now')) {\r\n thisSubPageURL = 'myoko-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/niseko-now')) {\r\n thisSubPageURL = 'niseko-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/nozawa-onsen-now')) {\r\n thisSubPageURL = 'nozawa-onsen-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/shiga-kogen-now')) {\r\n thisSubPageURL = 'shiga-kogen-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/yuzawa-now')) {\r\n thisSubPageURL = 'yuzawa-now'\r\n }\r\n else if (thisPathName.includes('/japan-daily-snow-weather-reports/zao-now')) {\r\n thisSubPageURL = 'zao-now'\r\n }\r\n else if (thisPathName.endsWith('/japan-daily-snow-weather-reports') || thisPathName.endsWith('/japan-daily-snow-weather-reports/')) {\r\n thisSubPageURL = 'daily-report-home'\r\n }\r\n } else if (thisPathName.includes('/guides')) {\r\n classNameGuide = 'sj-menu-link-Guide-section'\r\n if (thisPathName.includes('/guides/introduction-to-skiing-in-japan')) {\r\n thisSubPageURL = 'guides-introduction-to-skiing'\r\n }\r\n else if (thisPathName.includes('/guides/the-japan-skiing-experience')) {\r\n thisSubPageURL = 'guides-the-japan-skiing-experience'\r\n }\r\n else if (thisPathName.includes('/guides/graphs')) {\r\n thisSubPageURL = 'guides-graphs'\r\n }\r\n else if (thisPathName.includes('/guides/travel-guides')) {\r\n thisSubPageURL = 'guides-travel-guides'\r\n }\r\n else if (thisPathName.includes('/guides/the-prefectures-of-japan')) {\r\n thisSubPageURL = 'guides-prefectures-of-japan'\r\n }\r\n else if (thisPathName.includes('/guides/old-ski-areas-from-japans-past')) {\r\n thisSubPageURL = 'guides-old-ski-areas'\r\n }\r\n else if (thisPathName.endsWith('/guides') || thisPathName.endsWith('/guides/')) {\r\n thisSubPageURL = 'guides-home'\r\n }\r\n } else if (thisPathName.includes('/listings') || thisPathName.includes('/japan-places-to-stay')) {\r\n classNameListing = 'sj-menu-link-Listing-section'\r\n if (thisPathName.includes('/japan-places-to-stay')) {\r\n thisSubPageURL = 'listings-accommodation'\r\n }\r\n else if (thisPathName.includes('/listings/resort-spotlights')) {\r\n thisSubPageURL = 'listings-resort-spotlights'\r\n }\r\n else if (thisPathName.includes('/listings/lessons')) {\r\n thisSubPageURL = 'listings-lessons'\r\n }\r\n else if (thisPathName.includes('/listings/travel')) {\r\n thisSubPageURL = 'listings-travel'\r\n }\r\n else if (thisPathName.includes('/listings/job-listings')) {\r\n thisSubPageURL = 'listings-job-listings'\r\n }\r\n else if (thisPathName.endsWith('/listings') || thisPathName.endsWith('/listings/')) {\r\n thisSubPageURL = 'listings-home'\r\n }\r\n } else if (thisPathName.includes('/about-snowjapan') || thisPathName.includes('/about-snowjapan-japanese') || thisPathName.includes('/about-daily-reports') || thisPathName.includes('/about-information-and-updates') || thisPathName.includes('/contact')) {\r\n classNameAbout = 'sj-menu-link-About-section'\r\n if (thisPathName.includes('/about-snowjapan')) {\r\n thisSubPageURL = 'about-snowjapan'\r\n }\r\n else if (thisPathName.includes('/about-snowjapan-japanese')) {\r\n thisSubPageURL = 'about-snowjapan-japanese'\r\n }\r\n else if (thisPathName.includes('/about-daily-reports')) {\r\n thisSubPageURL = 'about-daily-reports'\r\n }\r\n else if (thisPathName.includes('/about-information-and-updates')) {\r\n thisSubPageURL = 'about-information-and-updates'\r\n }\r\n else if (thisPathName.includes('/about-members-area')) {\r\n thisSubPageURL = 'about-members-area'\r\n }\r\n else if (thisPathName.includes('/contact')) {\r\n thisSubPageURL = 'about-contact'\r\n }\r\n }\r\n setSubPageURL(thisSubPageURL)\r\n }\r\n\r\n setSelectedClassNameResort(classNameResort)\r\n setSelectedClassNameNows(classNameNows)\r\n setSelectedClassNameGuide(classNameGuide)\r\n setSelectedClassNameListing(classNameListing)\r\n setSelectedClassNameAbout(classNameAbout)\r\n\r\n }, [location]);\r\n\r\n // Ski Area Sub Menu\r\n const showSkiAreaSubMenu = (e) => {\r\n if (!isSkiAreaShown) {\r\n setIsSkiAreaShown(true);\r\n }\r\n }\r\n const hideSkiAreaSubMenu = (e) => {\r\n if (isSkiAreaShown) {\r\n setIsSkiAreaShown(false);\r\n }\r\n }\r\n\r\n const skiAreaMenuClicked = (e) => {\r\n if (!isSkiAreaShown) {\r\n setIsSkiAreaShown(true);\r\n }\r\n }\r\n\r\n // Daily Reports Sub Menu\r\n const showDailyReportsSubMenu = (e) => {\r\n if (!isDailyReportsShown) {\r\n setIsDailyReportsShown(true);\r\n }\r\n }\r\n\r\n const hideDailyReportsSubMenu = (e) => {\r\n if (isDailyReportsShown) {\r\n setIsDailyReportsShown(false);\r\n }\r\n }\r\n\r\n const dailyReportsMenuClicked = (e) => {\r\n if (!isDailyReportsShown) {\r\n setIsDailyReportsShown(true);\r\n }\r\n }\r\n\r\n // Guide Reports Sub Menu\r\n const showGuideSubMenu = (e) => {\r\n if (!isGuideShown) {\r\n setIsGuideShown(true);\r\n }\r\n }\r\n\r\n const hideGuideSubMenu = (e) => {\r\n if (isGuideShown) {\r\n setIsGuideShown(false);\r\n }\r\n }\r\n\r\n const guideMenuClicked = (e) => {\r\n if (!isGuideShown) {\r\n setIsGuideShown(true);\r\n }\r\n }\r\n\r\n // Listing Reports Sub Menu\r\n const showListingSubMenu = (e) => {\r\n if (!isListingShown) {\r\n setIsListingShown(true);\r\n }\r\n }\r\n\r\n const hideListingSubMenu = (e) => {\r\n if (isListingShown) {\r\n setIsListingShown(false);\r\n }\r\n }\r\n\r\n const listingMenuClicked = (e) => {\r\n if (!isListingShown) {\r\n setIsListingShown(true);\r\n }\r\n }\r\n\r\n // About Reports Sub Menu\r\n const showAboutSubMenu = (e) => {\r\n if (!isAboutShown) {\r\n setIsAboutShown(true);\r\n }\r\n }\r\n\r\n const hideAboutSubMenu = (e) => {\r\n if (isAboutShown) {\r\n setIsAboutShown(false);\r\n }\r\n }\r\n\r\n const aboutMenuClicked = (e) => {\r\n if (!isAboutShown) {\r\n setIsAboutShown(true);\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"sticky-top\">\r\n <div className=\"d-none d-lg-block\">\r\n <Navbar bg=\"dark\" variant=\"dark\" expand=\"lg\" className=\"justify-content-center sj-nav-bar\" collapseOnSelect>\r\n <div className='sj-top-menu'>\r\n <Navbar.Collapse id=\"basic-navbar-nav\" className=\"justify-content-center\">\r\n <Nav className=\"mr-auto justify-content-center\">\r\n <NavDropdown title=\"Ski Areas\" id=\"navbarSkiArea\" show={isSkiAreaShown} onMouseEnter={showSkiAreaSubMenu} onClick={skiAreaMenuClicked} onMouseLeave={hideSkiAreaSubMenu} onSelect={hideSkiAreaSubMenu} className={`sj-menu-link sj-menu-link-Resort ${selectedClassNameResort}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}`} eventKey={1.1} className={`${subPageURL === 'ski-area-home' ? \"active\" : \"\"}`}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/discover`} eventKey={1.2} className={`${subPageURL === 'ski-area-discover' ? \"active\" : \"\"}`}>Discover</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/listings`} eventKey={1.3} className={`${subPageURL === 'ski-area-listings' ? \"active\" : \"\"}`}>Lists</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-japan-skiing-experience/the-ski-season-in-japan`} eventKey={1.4} className={`${subPageURL === 'ski-area-the-season' ? \"active\" : \"\"}`}>The season</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/reviews`} eventKey={1.5} className={`${subPageURL === 'ski-area-reviews' ? \"active\" : \"\"}`}>Reviews</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/photos`} eventKey={1.6} className={`${subPageURL === 'ski-area-photos' ? \"active\" : \"\"}`}>Photos</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseRouteFinderUrl}`} eventKey={1.7} className={`${subPageURL === 'route-finder' ? \"active\" : \"\"}`}>Route Finder</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Daily Reports\" id=\"navbarDailyReports\" show={isDailyReportsShown} onMouseEnter={showDailyReportsSubMenu} onClick={dailyReportsMenuClicked} onMouseLeave={hideDailyReportsSubMenu} onSelect={hideDailyReportsSubMenu} className={`sj-menu-link sj-menu-link-Nows ${selectedClassNameNows}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}`} eventKey={2.1} className={`${subPageURL === 'daily-report-home' ? \"active\" : \"\"}`}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/webcams`} eventKey={2.2} className={`${subPageURL === 'daily-report-webcams' ? \"active\" : \"\"}`}>Webcams</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/official-snow-depth`} eventKey={2.3} className={`${subPageURL === 'daily-report-snow-depth' ? \"active\" : \"\"}`}>Snow depth tables</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/calendar`} eventKey={2.4} className={`${subPageURL === 'daily-report-calendar' ? \"active\" : \"\"}`}>Reports calendar</NavDropdown.Item>\r\n {nowList.map((now, index) => (\r\n <NavDropdown.Item key={now.Id} as={Link} to={`${window.$baseDailyReportUrl}/${now.UniqueName}`} eventKey={now.UniqueName} className={`${subPageURL === now.UniqueName ? \"active\" : \"\"}`}>{now.Name}</NavDropdown.Item>\r\n ))}\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Guides\" id=\"navbarGuide\" show={isGuideShown} onMouseEnter={showGuideSubMenu} onClick={guideMenuClicked} onMouseLeave={hideGuideSubMenu} onSelect={hideGuideSubMenu} className={`sj-menu-link sj-menu-link-Guide ${selectedClassNameGuide}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}`} eventKey={3.1} className={`${subPageURL === 'guides-home' ? \"active\" : \"\"}`}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/introduction-to-skiing-in-japan`} eventKey={3.2} className={`${subPageURL === 'guides-introduction-to-skiing' ? \"active\" : \"\"}`}>Our introduction to skiing in Japan</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-japan-skiing-experience`} eventKey={3.3} className={`${subPageURL === 'guides-the-japan-skiing-experience' ? \"active\" : \"\"}`}>The Japan skiing experience</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/graphs`} eventKey={3.4} className={`${subPageURL === 'guides-graphs' ? \"active\" : \"\"}`}>Japan's ski areas in graphs</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/travel-guides`} eventKey={3.5} className={`${subPageURL === 'guides-travel-guides' ? \"active\" : \"\"}`}>Travel guides</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-prefectures-of-japan`} eventKey={3.6} className={`${subPageURL === 'guides-prefectures-of-japan' ? \"active\" : \"\"}`}>Introducing the prefectures</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/old-ski-areas-from-japans-past`} eventKey={3.7} className={`${subPageURL === 'guides-old-ski-areas' ? \"active\" : \"\"}`}>Old ski areas from Japan's past</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Listings\" id=\"navbarListing\" show={isListingShown} onMouseEnter={showListingSubMenu} onClick={listingMenuClicked} onMouseLeave={hideListingSubMenu} onSelect={hideListingSubMenu} className={`sj-menu-link sj-menu-link-Listing ${selectedClassNameListing}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}`} eventKey={4.1} className={`${subPageURL === 'listings-home' ? \"active\" : \"\"}`}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseAccommodationUrl}`} eventKey={4.2} className={`${subPageURL === 'listings-accommodation' ? \"active\" : \"\"}`}>Accommodation</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/resort-spotlights`} eventKey={4.3} className={`${subPageURL === 'listings-resort-spotlights' ? \"active\" : \"\"}`}>Resort Spotlights</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/lessons`} eventKey={4.4} className={`${subPageURL === 'listings-lessons' ? \"active\" : \"\"}`}>Lessons</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/travel`} eventKey={4.5} className={`${subPageURL === 'listings-travel' ? \"active\" : \"\"}`}>Travel</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/job-listings`} eventKey={4.6} className={`${subPageURL === 'listings-job-listings' ? \"active\" : \"\"}`}>Jobs Available</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"About\" id=\"navbarAbout\" show={isAboutShown} onMouseEnter={showAboutSubMenu} onClick={aboutMenuClicked} onMouseLeave={hideAboutSubMenu} onSelect={hideAboutSubMenu} className={`sj-menu-link sj-menu-link-About ${selectedClassNameAbout}`}>\r\n <NavDropdown.Item as={Link} to='/about-snowjapan' eventKey={5.1} className={`${subPageURL === 'about-snowjapan' ? \"active\" : \"\"}`}>About SnowJapan</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-snowjapan-japanese' eventKey={5.2} className={`${subPageURL === 'about-snowjapan-japanese' ? \"active\" : \"\"}`}>ã“ã®ã‚µã‚¤ãƒˆã«ã¤ã„ã¦</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-daily-reports' eventKey={5.3} className={`${subPageURL === 'about-daily-reports' ? \"active\" : \"\"}`}>About daily reports</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-information-and-updates' eventKey={5.4} className={`${subPageURL === 'about-information-and-updates' ? \"active\" : \"\"}`}>About our information</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-members-area' eventKey={5.5} className={`${subPageURL === 'about-members-area' ? \"active\" : \"\"}`}>About member area</NavDropdown.Item>\r\n <NavDropdown.Item href='https://www.snowjapan.com/community' eventKey={5.6}>News & updates</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/contact' eventKey={5.7} className={`${subPageURL === 'about-contact' ? \"active\" : \"\"}`}>Contact us</NavDropdown.Item>\r\n </NavDropdown>\r\n </Nav>\r\n </Navbar.Collapse>\r\n </div>\r\n </Navbar>\r\n </div>\r\n <div className=\"d-lg-none\">\r\n <Navbar bg=\"dark\" variant=\"dark\" expand=\"lg\" className=\"sj-nav-bar-mobile\" collapseOnSelect>\r\n <div className='sj-mobile-header'>\r\n <Navbar.Brand href=\"/\" className=\"d-lg-none\">\r\n <Image src={textlogo} className='sj-mobile-logo' />\r\n </Navbar.Brand>\r\n <Navbar.Toggle aria-controls=\"basic-navbar-nav\" style={{ float: 'right', marginTop: '10px' }} />\r\n </div>\r\n <div className='sj-top-menu'>\r\n <Navbar.Collapse id=\"basic-navbar-nav\" className=\"justify-content-center\">\r\n <Nav className=\"mr-auto justify-content-center\">\r\n <NavDropdown title=\"Ski Areas\" id=\"navbarSkiArea\" className={`sj-menu-link sj-menu-link-Resort ${selectedClassNameResort}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}`} eventKey={1.1}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/discover`} eventKey={1.2}>Discover</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/listings`} eventKey={1.3}>Lists</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-japan-skiing-experience/the-ski-season-in-japan`} eventKey={1.4}>The season</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/reviews`} eventKey={1.5}>Reviews</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseSkiAreaUrl}/photos`} eventKey={1.6}>Photos</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseRouteFinderUrl}`} eventKey={1.7}>Route Finder</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Daily Reports\" id=\"navbarDailyReports\" className={`sj-menu-link sj-menu-link-Nows ${selectedClassNameNows}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}`} eventKey={2.1}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/webcams`} eventKey={2.2}>Webcams</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/official-snow-depth`} eventKey={2.3}>Snow depth tables</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/calendar`} eventKey={2.4}>Reports calendar</NavDropdown.Item>\r\n {nowList.map((now, index) => (\r\n <NavDropdown.Item key={now.Id} as={Link} to={`${window.$baseDailyReportUrl}/${now.UniqueName}`} eventKey={now.UniqueName}>{now.Name}</NavDropdown.Item>\r\n ))}\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Guides\" id=\"navbarGuide\" className={`sj-menu-link sj-menu-link-Guide ${selectedClassNameGuide}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}`} eventKey={3.1}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/introduction-to-skiing-in-japan`} eventKey={3.2}>Our introduction to skiing in Japan</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-japan-skiing-experience`} eventKey={3.3}>The Japan skiing experience</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/graphs`} eventKey={3.4}>Japan's ski areas in graphs</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/travel-guides`} eventKey={3.5}>Travel guides</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/the-prefectures-of-japan`} eventKey={3.6}>Introducing the prefectures</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseGuideUrl}/old-ski-areas-from-japans-past`} eventKey={3.7}>Old ski areas from Japan's past</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"Listings\" id=\"navbarListing\" className={`sj-menu-link sj-menu-link-Listing ${selectedClassNameListing}`}>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}`} eventKey={4.1}>Index</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseAccommodationUrl}`} eventKey={4.2}>Accommodation</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/resort-spotlights`} eventKey={4.3}>Resort Spotlights</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/lessons`} eventKey={4.4}>Lessons</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/travel`} eventKey={4.5}>Travel</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to={`${window.$baseListingUrl}/job-listings`} eventKey={4.6}>Jobs Available</NavDropdown.Item>\r\n </NavDropdown>\r\n <span className=\"d-none d-lg-block nav-divider\">|</span>\r\n <NavDropdown title=\"About\" id=\"navbarAbout\" className={`sj-menu-link sj-menu-link-About ${selectedClassNameAbout}`}>\r\n <NavDropdown.Item as={Link} to='/about-snowjapan' eventKey={5.1}>About SnowJapan</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-snowjapan-japanese' eventKey={5.2}>ã“ã®ã‚µã‚¤ãƒˆã«ã¤ã„ã¦</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-daily-reports' eventKey={5.3}>About daily reports</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-information-and-updates' eventKey={5.4}>About our information</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/about-members-area' eventKey={5.5}>About member area</NavDropdown.Item>\r\n <NavDropdown.Item href='https://www.snowjapan.com/community' eventKey={5.6}>News & updates</NavDropdown.Item>\r\n <NavDropdown.Item as={Link} to='/contact' eventKey={5.7}>Contact us</NavDropdown.Item>\r\n </NavDropdown>\r\n </Nav>\r\n </Navbar.Collapse>\r\n </div>\r\n </Navbar >\r\n </div >\r\n </div>\r\n );\r\n}\r\n\r\nexport default MainNav;","import { Link, useNavigate } from 'react-router-dom'\r\nimport { Form, FormControl, Button } from 'react-bootstrap'\r\nimport { useState, useEffect } from 'react'\r\nimport { useAuth } from '../CustomHooks/useAuth'\r\nimport axios from 'axios'\r\n\r\nconst SearchMemberBar = () => {\r\n\r\n const { setAuth, auth, setUser, user } = useAuth()\r\n\r\n const [loggedinUser, setLoggedinUser] = useState(user)\r\n const navigate = useNavigate();\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleChange = (e) => {\r\n setKeyword(e.target.value)\r\n }\r\n\r\n const searchClicked = () => {\r\n let path = `/search/${keyword}`;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n\r\n const logout = async () => {\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/Logout`\r\n }).then(logoutStatusResult => {\r\n\r\n //console.log('logged out')\r\n //console.log(logoutStatusResult?.data);\r\n\r\n let loggedoutUser = logoutStatusResult.data\r\n sessionStorage.setItem('sessionUser', null)\r\n setAuth(false)\r\n setUser(null)\r\n //history.push('/');;\r\n navigate('/')\r\n })\r\n\r\n //clear state and controlled inputs\r\n //need value attrib on inputs for this\r\n\r\n //setUserName('')\r\n //setPwd('')\r\n } catch (err) {\r\n //console.log(err)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setLoggedinUser(user)\r\n }, [auth, user])\r\n\r\n return (\r\n <div className='sj-box-light-gray pt-2 pb-2'>\r\n <Form className=\"d-flex justify-content-center\">\r\n <FormControl type=\"search\" size=\"sm\" placeholder=\"Search\" style={{ width: 250 }} className=\"me-2\" aria-label=\"Search\" onBlur={handleChange} /> <Button variant=\"primary\" onClick={searchClicked}>Search</Button>\r\n </Form>\r\n {(loggedinUser !== null && loggedinUser.UserName !== null && loggedinUser.UserName !== '') &&\r\n <div className='center-aligned'>Hello, {loggedinUser.FullName}: <Link to={`${window.$baseMemberUrl}`} className='normal-link'>member page</Link> [<a className='normal-link' onClick={logout}>Logout</a>]</div>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default SearchMemberBar;","export default __webpack_public_path__ + \"static/media/sj-logo-round.111cfa57.png\";","import { Link } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\nimport axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport roundlogo from '../../static-contents/sj-logo-round.png'\r\n\r\nconst Footer = () => {\r\n\r\n const [todayYear, setTodayYear] = useState('2023')\r\n\r\n const fetchTodayDate = async () => {\r\n axios({\r\n method: 'GET',\r\n url: `${window.$baseAPIUrl}/home/todaydate`\r\n }).then(resTodayDate => {\r\n\r\n if (resTodayDate != undefined && resTodayDate.data != undefined) {\r\n //setTodayDateStr(resTodayDate.data)\r\n\r\n console.log(\"today date is: \" + resTodayDate.data)\r\n let strTodayDate = resTodayDate.data\r\n let todayDateParts = strTodayDate.split('-')\r\n if (todayDateParts.length === 3) {\r\n setTodayYear(todayDateParts[0])\r\n }\r\n }\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchTodayDate()\r\n //console.log(todayYear)\r\n }, []);\r\n\r\n return (\r\n <div className=\"sj-row-no-margin-padding sj-footer\">\r\n <footer className=\"py-5\">\r\n <div className=\"sj-box-dark-gray pt-2 pb-1\">\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-md-2\">\r\n <ul className=\"nav flex-column\">\r\n <li className=\"nav-item mb-2\"><Link to='/' className='nav-link p-0 text-muted'>Home</Link></li>\r\n </ul>\r\n </div>\r\n <div className=\"col-md-2\">\r\n <ul className=\"nav flex-column\">\r\n <li className=\"nav-item mb-2\"><Link to={`${window.$baseSkiAreaUrl}`} className='nav-link p-0 text-muted'>Ski Areas</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to={`${window.$baseDailyReportUrl}`} className='nav-link p-0 text-muted'>Daily Reports</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to={`${window.$baseGuideUrl}`} className='nav-link p-0 text-muted'>Guides</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to={`${window.$baseListingUrl}`} className='nav-link p-0 text-muted'>Listings</Link></li>\r\n </ul>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <ul className=\"nav flex-column\">\r\n <li className=\"nav-item mb-2\"><Link to='/about-snowjapan' className='nav-link p-0 text-muted'>About SnowJapan</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to='/about-snowjapan-japanese' className='nav-link p-0 text-muted'>ã“ã®ã‚µã‚¤ãƒˆã«ã¤ã„ã¦</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to='/about-daily-reports' className='nav-link p-0 text-muted'>About daily reports</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to='/about-information-and-updates' className='nav-link p-0 text-muted'>About our information</Link></li>\r\n </ul>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <ul className=\"nav flex-column\">\r\n <li className=\"nav-item mb-2\"><Link to='https://www.snowjapan.com/community' className='nav-link p-0 text-muted'>News & updates</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to='/about-members-area' className='nav-link p-0 text-muted'>About member area</Link></li>\r\n </ul>\r\n </div>\r\n <div className=\"col-md-2\">\r\n <ul className=\"nav flex-column\">\r\n <li className=\"nav-item mb-2\"><Link to='/contact' className='nav-link p-0 text-muted'>Contact us</Link></li>\r\n <li className=\"nav-item mb-2\"><Link to='/about-links-and-privacy' className='nav-link p-0 text-muted'>Links & privacy</Link></li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"py-2 my-2 border-top\">\r\n <div className='sj-row-no-margin-padding'>\r\n <div className='sj-footer-text-holder center-aligned'>\r\n <strong>SnowJapan</strong> is the independent guide to winter sports in Japan.<br />\r\n © Copyright 1999-{todayYear} SnowJapan.com. All rights reserved.\r\n </div>\r\n <div className='sj-footer-logo-holder center-aligned mt-2'>\r\n <Link to='/'><Image src={roundlogo} /></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </footer>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Footer;","//import { Popover, OverlayTrigger } from 'react-bootstrap'\r\n//import { useHistory, Link } from 'react-router-dom'\r\nimport Popup from \"reactjs-popup\";\r\n\r\nconst MapPath = ({ path }) => {\r\n\r\n //const [mapConfig, setMapConfig] = useState({});\r\n //const [pathStyle, setPathStyle] = useState({});\r\n\r\n const jpjsconfig = {\r\n \"jpjs1\": {\r\n \"name\": \"HOKKAIDO\",\r\n \"intro\": \"103 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/hokkaido\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099FF\",\r\n \"active\": true\r\n },\r\n \"jpjs2\": {\r\n \"name\": \"AOMORI PREFECTURE\",\r\n \"intro\": \"12 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/aomori\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099FF\",\r\n \"active\": true\r\n },\r\n \"jpjs3\": {\r\n \"name\": \"IWATE PREFECTURE\",\r\n \"intro\": \"19 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/iwate\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs4\": {\r\n \"name\": \"MIYAGI PREFECTURE\",\r\n \"intro\": \"10 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/miyagi\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs5\": {\r\n \"name\": \"AKITA PREFECTURE\",\r\n \"intro\": \"18 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/akita\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs6\": {\r\n \"name\": \"YAMAGATA PREFECTURE\",\r\n \"intro\": \"20 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/yamagata\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs7\": {\r\n \"name\": \"FUKUSHIMA PREFECTURE\",\r\n \"intro\": \"23 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/fukushima\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs8\": {\r\n \"name\": \"IBARAKI PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs9\": {\r\n \"name\": \"TOCHIGI PREFECTURE\",\r\n \"intro\": \"5 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/tochigi\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs10\": {\r\n \"name\": \"GUNMA PREFECTURE\",\r\n \"intro\": \"21 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/gunma\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs11\": {\r\n \"name\": \"SAITAMA PREFECTURE\",\r\n \"intro\": \"1 ski area (sort of!)\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/saitama\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs12\": {\r\n \"name\": \"CHIBA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs13\": {\r\n \"name\": \"TOKYO\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs14\": {\r\n \"name\": \"KANAGAWA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs15\": {\r\n \"name\": \"NIIGATA PREFECTURE\",\r\n \"intro\": \"51 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/niigata\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs16\": {\r\n \"name\": \"TOYAMA PREFECTURE\",\r\n \"intro\": \"8 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/toyama\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs17\": {\r\n \"name\": \"ISHIKAWA PREFECTURE\",\r\n \"intro\": \"6 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/ishikawa\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs18\": {\r\n \"name\": \"FUKUI PREFECTURE\",\r\n \"intro\": \"6 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/fukui\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs19\": {\r\n \"name\": \"YAMANASHI PREFECTURE\",\r\n \"intro\": \"3 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/yamanashi\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs20\": {\r\n \"name\": \"NAGANO PREFECTURE\",\r\n \"intro\": \"78 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/nagano\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs21\": {\r\n \"name\": \"GIFU PREFECTURE\",\r\n \"intro\": \"19 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/gifu\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs22\": {\r\n \"name\": \"SHIZUOKA PREFECTURE\",\r\n \"intro\": \"2 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/shizuoka\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs23\": {\r\n \"name\": \"AICHI PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/aichi\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs24\": {\r\n \"name\": \"MIE PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs25\": {\r\n \"name\": \"SHIGA PREFECTURE\",\r\n \"intro\": \"7 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/shiga\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs26\": {\r\n \"name\": \"KYOTO PREFECTURE\",\r\n \"intro\": \"2 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/kyoto\", \"target\": \"same_window\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs27\": {\r\n \"name\": \"OSAKA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs28\": {\r\n \"name\": \"HYOGO PREFECTURE\",\r\n \"intro\": \"16 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/hyogo\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs29\": {\r\n \"name\": \"NARA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs30\": {\r\n \"name\": \"WAKAYAMA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs31\": {\r\n \"name\": \"TOTTORI PREFECTURE\",\r\n \"intro\": \"6 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/tottori\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs32\": {\r\n \"name\": \"SHIMANE PREFECTURE\",\r\n \"intro\": \"4 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/shimane\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs33\": {\r\n \"name\": \"OKAYAMA PREFECTURE\",\r\n \"intro\": \"7 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/okayama\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs34\": {\r\n \"name\": \"HIROSHIMA PREFECTURE\",\r\n \"intro\": \"11 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/hiroshima\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs35\": {\r\n \"name\": \"YAMAGUCHI PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs36\": {\r\n \"name\": \"TOKUSHIMA PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/tokushima\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs37\": {\r\n \"name\": \"KAGAWA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs38\": {\r\n \"name\": \"EHIME PREFECTURE\",\r\n \"intro\": \"3 ski areas\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/ehime\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs39\": {\r\n \"name\": \"KOCHI PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/kochi\", \"target\": \"same_window\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs40\": {\r\n \"name\": \"FUKUOKA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs41\": {\r\n \"name\": \"SAGA PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/saga\", \"target\": \"same_window\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs42\": {\r\n \"name\": \"NAGASAKI PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs43\": {\r\n \"name\": \"KUMAMOTO PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs44\": {\r\n \"name\": \"OITA PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/oita\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs45\": {\r\n \"name\": \"MIYAZAKI PREFECTURE\",\r\n \"intro\": \"1 ski area\",\r\n \"url\": \"https://www.snowjapan.com/japan-ski-resorts/prefecture/miyazaki\", \"target\": \"same_window\",\r\n \"upColor\": \"#0000CC\", \"overColor\": \"#CC0000\", \"downColor\": \"#0099ff\",\r\n \"active\": true\r\n },\r\n \"jpjs46\": {\r\n \"name\": \"KAGOSHIMA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"jpjs47\": {\r\n \"name\": \"OKINAWA PREFECTURE\",\r\n \"intro\": \"No ski areas\",\r\n \"upColor\": \"#C0C0C0\", \"overColor\": \"#C0C0C0\", \"downColor\": \"#0099ff\",\r\n \"active\": false\r\n },\r\n \"general\": {\r\n \"borderColor\": \"#9CA8B6\",\r\n \"visibleNames\": \"#666666\",\r\n }\r\n };\r\n\r\n /*const GetMapConfiguration = (thisPath) => {\r\n\r\n const thisJPJSConfig = jpjsconfig[thisPath.Id]\r\n const generalJPJSConfig = jpjsconfig[\"general\"]\r\n\r\n var thisConfig = thisJPJSConfig\r\n\r\n let thisPathStyle = { \"cursor\": \"default\" }\r\n\r\n thisConfig.Stroke = generalJPJSConfig.borderColor\r\n\r\n if (thisJPJSConfig !== undefined && thisJPJSConfig.active === true) {\r\n thisConfig.Fill = thisJPJSConfig.upColor\r\n thisPathStyle.cursor = \"pointer\"\r\n } else {\r\n thisConfig.Fill = thisPath.Fill\r\n thisPathStyle.cursor = \"default\"\r\n }\r\n\r\n setMapConfig(thisConfig)\r\n setPathStyle(thisPathStyle)\r\n }\r\n\r\n useEffect(() => {\r\n GetMapConfiguration(path)\r\n }, [path]);*/\r\n\r\n const thisJPJSConfig = jpjsconfig[path.Id]\r\n const generalJPJSConfig = jpjsconfig[\"general\"]\r\n\r\n var thisConfig = thisJPJSConfig\r\n\r\n var thisPathStyle = { \"cursor\": \"default\" }\r\n var className = ''\r\n\r\n thisConfig.Stroke = generalJPJSConfig.borderColor\r\n\r\n if (thisJPJSConfig !== undefined && thisJPJSConfig.active === true) {\r\n thisConfig.Fill = thisJPJSConfig.upColor\r\n thisPathStyle.cursor = \"pointer\"\r\n className = \"map-active\"\r\n } else {\r\n thisConfig.Fill = path.Fill\r\n thisPathStyle.cursor = \"default\"\r\n }\r\n\r\n const containerIdSelector = \"#keepinside\";\r\n\r\n return (\r\n\r\n <Popup\r\n trigger={open => (\r\n <path id={path.Id} fill={thisConfig.Fill} stroke={thisConfig.Stroke} vectorEffect={path.VectorEffect} d={path.Data} style={thisPathStyle} className={className} />\r\n )}\r\n position=\"right center\"\r\n closeOnDocumentClick=\"true\"\r\n keepTooltipInside={containerIdSelector}\r\n >\r\n <div className='popup-content-header'><h5>{thisJPJSConfig.name}</h5></div>\r\n <div className='popup-content-body'>\r\n <div>\r\n {/*{thisJPJSConfig.intro}<br />*/}\r\n <a href={thisJPJSConfig.url} target='_blank' rel=\"noreferrer\">Click Here</a>\r\n </div>\r\n </div>\r\n </Popup>\r\n )\r\n}\r\n\r\nexport default MapPath;","import '../../map-style.css';\r\n\r\nimport MapPath from './MapPath'\r\n\r\nconst JapanMap = () => {\r\n\r\n const map_paths =\r\n [\r\n { \"Id\": \"jpjs1\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M559,108.333c0,3-7.666,0.89-8.333,4.612s-14.333,1.722-14,5.722s-4.999,8-6.333,5.667s-4.001,4-8.334,3.667s-6.999-1.333-10.666-3.667S477.666,147,479,156.667s-2.333,7.667-2.666,10c-0.334,2.333-1.667,5.333-5,0C468,161.333,446,157,444.334,151c-1.667-6-6.668-1.666-10.334-6.333s-9.666-6.334-15.666-1.667S404.666,155.667,402,153.333s-5.666-5.667-6.333-8.667S387,140.333,383,149s-2.333,10.334,1.334,10.667c3.666,0.333,3.666,5,7,4.333c3.333-0.667,9.666,9.667,15,9.333c5.333-0.333,2.333,2.333-0.667,5s-4.667,2.333-8,0s-5.333,2.087-8.333,1.877s-1.667,8.457-5.667,9.457s-2.667,8-10.667,0s0-10.667,2-14.333s-0.972-11.333-5.485-13c-4.515-1.667-7.515-9-3.515-13s-1.333-12,6.334-12.333c7.666-0.333,3.999-4.667,8.332-5c4.334-0.333,0.334-8.333,5.334-8s-10.334-10.211-4-13.939S395.666,118,400,115s6.334,6,12.334,0.667s0.665-9.667,3.332-14c2.668-4.333-6.539-9.757,0.668-13c13.333-6,3.332-22.334,10.666-25.667s0.334-26-2.333-32.333s-3.001-8.667-0.667-11s3.334-7,5.334-4.333s2.332-8.667,5.666-3s8.881,8.971,13,14.333c6.892,8.973,6,16,19,27.667S491,69,491.667,72s8.333-2,11,4s5-3.333,7,1.333s15.667,10,18.667,4s10.333-8,11.333-11.333s5.001-4.333,3.667,1.667s-11.001,15-8.334,19.667s7.001,12,6.334,16.333s2.666,7,5.666,4S559,105.333,559,108.333z M572.334,57.333c-2.666-4-6,2.333-6,6.667S556,72.667,555,77.333s-11.859,8.463-9.333,12c1.667,2.333,0,4.667,3,5s3.667-10,7.333-10.333s4.667-9.667,7.438-11.302S567,68,569.667,68s4.667,0,10-3.667S575,61.333,572.334,57.333z M592.334,85.333C590.334,82,582,86,584,90.333S594.334,88.667,592.334,85.333z M567.667,103.667c2,1.333,5.667-1.667,3.667-3.333S565.667,102.333,567.667,103.667z M554.078,40.327c2.525,1.813,2.916,0.182,3.277-1.416s4.533-0.578,5.076-3.116s5.074-4.713,5.074-6.163c0-1.45,1.088-3.082,1.994-1.632c0.908,1.451,3.445-0.725,5.439-2.538s7.613-5.982,10.15-6.526c2.537-0.543,3.625,0.544,4.352-2.175c0.725-2.719,0.182-3.082-3.445-2.506c-3.625,0.575-3.807,5.95-8.52,6.131c-4.713,0.182-2.719-4.351-4.713-4.169c-1.994,0.181,0.363,4.713-1.813,5.075s-0.361,3.988-3.625,3.807c-3.264-0.181-3.807,5.62-6.346,6.526c-2.537,0.906-1.631,2.9-2.9,3.988C556.813,36.702,552.496,39.191,554.078,40.327z M354.125,165.375c2.742-0.374,0.625-4.125,2.25-6.125s-0.125-2.125-1.125-1s-3.125-0.375-3.125,2.375S351.375,165.75,354.125,165.375z\" },\r\n { \"Id\": \"jpjs2\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M374.375,234.75c1.875,1.125,9.625-2.05,12.125-0.212s5.125,0.462,6.25,1.462s2.125-1.789,5.75-0.707s6.125,1.582,4.75,3.332s0.375,4.25-1.25,5.375c2.5,1.375,5.25,0,5.375-1.625s5.25-4.875,7-3.625s3.75-1.06,5.625-0.28s2.791-4.553,6.333-4.137c-1.334-3.667-7.667-5.333-9.508-10.333s-1.159-21.333-0.159-26.333s-2.667,1.667-12.762-7.333c-5.786-5.159-3.571,3-6.905,10.662c-3.333,7.662,5.667,0.338,12,0.005s2.335,17.833-5.333,12.333c-6.46-4.635-4.999-0.667-4.499,2s-2,3.833-5.167,1.667s-2.333-9.667-2.5-14.167s-5.166,0.5-7.166-2s-0.834,2-2.834,3.833s0.334,3.167,1.667,4.833s-3,3.5-2,5.667s-3.667,8.5-7.001,6.667C370.833,220,369.5,226.5,368,226.667s-1.834,1.167,0.5,3.167s-0.666,4,1.666,6.667C372.5,237.375,372.5,233.625,374.375,234.75z\" },\r\n { \"Id\": \"jpjs3\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M435.5,259.167c0.833-4-7-10.5-5.333-13.333s-2.501-7.833-3.834-11.5c-3.542-0.417-4.458,4.917-6.333,4.137s-3.875,1.53-5.625,0.28s-6.875,2-7,3.625s-2.875,3-5.375,1.625c-1.625,1.125-4.125,6.75-2.875,10.5s-2.875,3.875-1.125,5.875s-2.25,2.5-0.125,6s-3.5,5.5-2.625,7.25s-2.625,3.25-1.5,7.125s3.875,4.25,3,6.625s1.5,8.125-0.25,10.125c4.875-0.875,5.375,3.588,8.75,3.294s1.75,1.581,3.75,3.706s3.25-2.25,5.75-1s4.375-0.625,4.25-3.375s-1.541-7.458,6.667-2.792c3.167-2.833,4.5-6.833,6.333-9.833s0.5-7.333,3.563-8.167c3.062-0.833,1.938-8.5,0-10.333C433.624,267.167,434.667,263.167,435.5,259.167z\" },\r\n { \"Id\": \"jpjs4\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M419,300.125c0.125,2.75-1.75,4.625-4.25,3.375s-3.75,3.125-5.75,1s-0.375-4-3.75-3.706s-3.875-4.169-8.75-3.294c-1.75,2-4.25,3.875-7.375,3.125c0.125,2.5,3.625,3.5,2.5,5s-0.125,2.25-0.625,4s-2.125-0.5-1.875,2.75s2.446,3.875,1.348,6.125c-1.098,2.25-4.598,6.25-4.098,8.375s-2,4.25-2,5.625s-4.625,0.625-4.625,5.5c3.375,2.625,6.125-1.875,7,1.375s6.125-0.625,6.625,3.125s6.125,3.5,6,1.125s0.792-3.166,1.959-2.958c-1.667-6.667,2.166-12.667,4.832-15.35c2.667-2.683-1.5-2.484,0.5-4.484s4,1.167,4.668-1.333c0.666-2.5,2.332,1.5,7.832,5s2-5.167,0.334-8.5s1.666-5.667,2.334-10c0.666-4.333,0.666-5.833,3.833-8.667C417.459,292.667,418.875,297.375,419,300.125z\" },\r\n { \"Id\": \"jpjs5\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M373.75,291.75c0.5,1.875,3.75,2.875,6.375,2.25s2.875,1.5,4.875,2.5s1,3.375,4.125,4.125s5.625-1.125,7.375-3.125s-0.625-7.75,0.25-10.125s-1.875-2.75-3-6.625s2.375-5.375,1.5-7.125s4.75-3.75,2.625-7.25s1.875-4,0.125-6s2.375-2.125,1.125-5.875s1.25-9.375,2.875-10.5s-0.125-3.625,1.25-5.375s-1.125-2.25-4.75-3.332S393.875,237,392.75,236s-3.75,0.375-6.25-1.462s-10.25,1.337-12.125,0.212s-1.875,2.625-4.209,1.75c2.333,2.667,1.5,8.333,1,11.833s-4.999,8-7.666,6.5s-1,0.167-0.833,3.167s2,1.5,3.833,0.667s5.5,1.167,5.167,3.5s5,1.667,2.167,5.833c-2.834,4.167-2.667,14.333-4.5,15.333c-1.834,1-2,4.833-1.834,7.667C369.25,291.75,373.25,289.875,373.75,291.75z\" },\r\n { \"Id\": \"jpjs6\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M362.875,321.5c2,2,4.875,1.5,5.625,2.734c0.75,1.233-2.5,4.641-4.75,4.516s-3.125,0.75-2.75,2.25s0.625,4.25-1.5,7.5s1.125,5,3.125,5.125s3.5,1.25,5.25,0.75s2.5,2.5,3.625,1.875s2.875,2.625,3.875,1.25s2.75,0.5,4.375-1.875s0-2.75,0-7.625s4.625-4.125,4.625-5.5s2.5-3.5,2-5.625s3-6.125,4.098-8.375c1.099-2.25-1.098-2.875-1.348-6.125s1.375-1,1.875-2.75s-0.5-2.5,0.625-4s-2.375-2.5-2.5-5C386,299.875,387,297.5,385,296.5s-2.25-3.125-4.875-2.5s-5.875-0.375-6.375-2.25s-4.5,0-6.25-0.75c0.166,2.833-0.333,3.833-2.333,6.167s-2.5,8.167-5.167,9.667s-1.833,4.5-4.333,7c2.542,0.583,3.208,1.792,5.333,2.667S360.875,319.5,362.875,321.5z\" },\r\n { \"Id\": \"jpjs7\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M399.375,343.625c0.125,2.375-5.5,2.625-6-1.125s-5.75,0.125-6.625-3.125s-3.625,1.25-7-1.375c0,4.875,1.625,5.25,0,7.625s-3.375,0.5-4.375,1.875s-2.75-1.875-3.875-1.25s-1.875-2.375-3.625-1.875s-3.25-0.625-5.25-0.75c-1.625,4.375-5.375,6-5.625,8.5s1.834,6.75-1.333,5.5s-3.292,2.875-6.292,2.25s-0.875,4.375-3.125,6s0.625,4.75,0,6.5s2.5,5,1.125,7c0.875,0.75,3.75,0.625,4.625,1.5c2-2.75,4.25-2.5,6.625-4.25s6.375-1.875,6.625-3.875s3.375-1.5,7.75-0.625s2.75,3.125,4.75,3.625s1.5,2.375,1.942,4.125c2.308,0.625,0.933,2,2.683,2.25s1.125,2,2.5,2.375s2.75,0.5,4.125-0.75s-1.125-3.375,0.5-3.625s2,2.508,3.25,2.191s2.834,0.851,4.417,1.518c1.333-2.334,0.5-4.167,4-4.667s2.833-8,2.333-9.665s2.834-10.002,1.5-13.002s-2-9.166-3.666-15.833C400.167,340.459,399.25,341.25,399.375,343.625z\" },\r\n { \"Id\": \"jpjs8\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M392.75,382.316c-1.25,0.316-1.625-2.441-3.25-2.191s0.875,2.375-0.5,3.625s-2.75,1.125-4.125,0.75s-0.75-2.125-2.5-2.375s-0.375-1.625-2.683-2.25c0.442,1.75-0.442,4.25-0.196,5.698c0.247,1.447,0.504,3.802-0.871,4.302s0,5,0.75,6.625s-2.125,6-4.5,4.75s-2.125,1.5-4.5,1.5s-4.625,3.25-5.625,5.125s0,3.625-0.625,6.375s2.625,6.125,3.25,7.5c2.791,1.084,2.792-0.584,4.959,0c2.166,0.584,4.333,2.666,6.25,1.666c1.916-1,9.082-4.582,10.582-2.666s1.917,2.952,3.25,2.934c1.334-0.018,3.25,4.566,6.584,5.316c1-1-4.334-7.166-5.166-9c-0.834-1.834-2.667-9.5-4-12.166c-1.334-2.667,2.833-5,1.833-7.5s4.167-14.167,5.5-16.5C395.584,383.167,394,382,392.75,382.316z\" },\r\n { \"Id\": \"jpjs9\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M351.5,385.573c-1,1.552-4.625,6.552-0.25,7.427s3.25,2.5,2.375,3.875s-4.875,5.75-2.375,6.75s1.75,2.875,3.875,2.875s6,1,5.375,2.75c1.125,0.625,3.25-2.25,4.25-1.375c1-1.875,3.25-5.125,5.625-5.125s2.125-2.75,4.5-1.5s5.25-3.125,4.5-4.75s-2.125-6.125-0.75-6.625s1.118-2.854,0.871-4.302c-0.246-1.448,0.639-3.948,0.196-5.698s0.058-3.625-1.942-4.125s-0.375-2.75-4.75-3.625s-7.5-1.375-7.75,0.625s-4.25,2.125-6.625,3.875s-4.625,1.5-6.625,4.25S352.5,384.021,351.5,385.573z\" },\r\n { \"Id\": \"jpjs10\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M341.75,376.5c-1.125,3.125-4.125,0.65-3.875,3.2s-4.375,3.175-4.375,5.175s-1.75,2.125-4.25,2.875s-6,0.625-5.875,2.625s-3.5,1.875-3.125,4.375s-5.18,2.75-0.027,6.25s7.027-1.625,7.277,1.875s-2.625,5-0.875,6.75s1.875,7.5,2.875,8.5c1.25-2.125,4.358-2.558,6.5-3.875c1.717-1.057,1.375-1.5,3.5-1.875s1.5-3.25,2.5-5.5s5,0.75,6.919,0.75c1.92,0,5.706,2.75,7.456,1.875s3.5,1.5,4.125-0.25s-3.25-2.75-5.375-2.75s-1.375-1.875-3.875-2.875s1.5-5.375,2.375-6.75s2-3-2.375-3.875s-0.75-5.875,0.25-7.427c1-1.553-1.5-1.948,0.5-4.698c-0.875-0.875-3.75-0.75-4.625-1.5C346,381.375,342.875,373.375,341.75,376.5z\" },\r\n { \"Id\": \"jpjs11\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M360.5,409.25c-0.625,1.75-2.375-0.625-4.125,0.25s-5.536-1.875-7.456-1.875c-1.919,0-5.919-3-6.919-0.75s-0.375,5.125-2.5,5.5s-1.783,0.818-3.5,1.875c-2.142,1.317-5.25,1.75-6.5,3.875c1,1,0,2,0.875,3.125s5.625,4,6.875,2.25s5.125-1.5,6.25-0.125s5.375-0.125,6.75,2.25s6.125-0.125,7.25,1.5s3.125-2.375,4.25-1s3.625-1.125,5.625-0.125s0.625-2.875,0-4.25s-3.875-4.75-3.25-7.5s-0.375-4.5,0.625-6.375C363.75,407,361.625,409.875,360.5,409.25z\" },\r\n { \"Id\": \"jpjs12\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M392.416,423.684c-1.333,0.019-1.75-1.018-3.25-2.934s-8.666,1.666-10.582,2.666c-1.917,1-4.084-1.082-6.25-1.666c-2.167-0.584-2.168,1.084-4.959,0c0.625,1.375,2,5.25,0,4.25c0.625,1.625,1.5,3.375-0.375,6c2.334,0.834,2.834-2,6,0.166c3.166,2.167,0.166,5.668-3.334,6.834s-3.832,7.166-3.666,10s-2.166,10.666,0,11.834c2.166,1.166,6.5-5.168,7.834-6.834c1.333-1.666,7-2.334,9.632-3.666c2.633-1.334,0.534-6.334,0.034-9c-0.5-2.667,4.666-6.668,7.166-9.668S398,430,399,429C395.666,428.25,393.75,423.666,392.416,423.684z\" },\r\n { \"Id\": \"jpjs13\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M367.375,426c-2-1-4.5,1.5-5.625,0.125s-3.125,2.625-4.25,1s-5.875,0.875-7.25-1.5s-5.625-0.875-6.75-2.25s-5-1.625-6.25,0.125c2.75,3,0.625,6.5,5.75,6.75s4.214,3.125,5.919,2.875c1.706-0.25,3.081,3.625,5.081,3s0.5-6,3.25-4.125s4.042,4.875,6.584,3.5c-1-2.166,0.832-4.334,3.166-3.5C368.875,429.375,368,427.625,367.375,426z\" },\r\n { \"Id\": \"jpjs14\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M357.25,432c-2.75-1.875-1.25,3.5-3.25,4.125s-3.375-3.25-5.081-3c-1.705,0.25-0.794-2.625-5.919-2.875c0.375,3.625,0.5,6.75-1.25,6.75s-4.625,2.5-5.25,4.375c3.625,0.5,3.875,2.375,2.25,4.375s1.166,2.625,0.958,3.875s1.834,0.667,3.626,2.209c0.666-2,1.832-5.668,6.666-6.5c4.834-0.834,8.666,1,8.5,4.832c-0.166,3.833,1.334,3.168,3.834,0.168S362,446.666,361,446.166s-1.834-5-1.334-6.832c0.5-1.834,5.168-1.668,4.168-3.834C361.292,436.875,360,433.875,357.25,432z\" },\r\n { \"Id\": \"jpjs15\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M298.75,386.75c-2-2.25-0.25-6-3.625-9.125c2.125,0.125,4.5-2.125,7.5-2.5s2.125-1.875,4.75-2.125s1.001-2.324,7.5-2.5c4.625-0.125,5-7.25,9.25-8.25s2.375-6.875,4.375-7.25s3-13.75,13.125-15.75s11.542-9.75,11.542-12.916c0-3.167,0-10,2.5-12.5c2.542,0.583,3.208,1.792,5.333,2.667s-0.125,3,1.875,5s4.875,1.5,5.625,2.734c0.75,1.233-2.5,4.641-4.75,4.516s-3.125,0.75-2.75,2.25s0.625,4.25-1.5,7.5s1.125,5,3.125,5.125c-1.625,4.375-5.375,6-5.625,8.5s1.834,6.75-1.333,5.5s-3.292,2.875-6.292,2.25s-0.875,4.375-3.125,6s0.625,4.75,0,6.5s2.5,5,1.125,7s-4.5-6-5.625-2.875s-4.125,0.65-3.875,3.2s-4.375,3.175-4.375,5.175s-1.75,2.125-4.25,2.875c1.084-6.916-3.25-2.992-4.162-9.17c-0.576-3.9-6.088-1.58-7.067,0.795s-1.687,0.791-1.555,2.941c0.132,2.149-2.632,0.518-3.367,1.469c-0.734,0.953-2.265-0.451-3.265,0.973S306,385.334,307.666,383c1.667-2.334-0.832-1.666-3.666-2.125s-0.666,2.125-2.5,2.959C299.667,384.667,301,386,298.75,386.75z M317,344.084c1.084,0.75,3.334-2.918,4.584-2.918s0.666-3.332,2-3.916c1.332-0.584,2.583-4.334,0-3.75c-2.584,0.584-3.335,1.499-3.168-0.584c0.168-2.082,3.834-4.917,2.084-9.75c-0.658-1.817-1,3.5-3.5,4.417c-2.5,0.916-3.001,3.083-4.584,5.25c-1.582,2.166-0.082,6,0.668,4.75s3.415,0.332,2.082,1.332c-1.332,1-1.833,1.751-1.5,2.668c0.334,0.916-3.083,1.75-2.5,3C313.75,345.834,315.916,343.334,317,344.084z\" },\r\n { \"Id\": \"jpjs16\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M269.443,386.5c0.443,2.334-2.776,5.666-1.443,8.666s-2.667,5.668-0.333,9.5c1.667-3.999,5.167-1.5,5.333,0c0.167,1.501,1.5,2.167,2.5,0c1-2.166,3.833-6.031,5.333-4.932s2.833-1.434,3.833,0c1,1.433,3-0.901,4.333,1.266s4.083-0.001,6.125,3.166c-0.708-4.5,2.542-7,2.875-9.332c0.333-2.334,2.75-5.834,0.75-8.084s-0.25-6-3.625-9.125c-2.125-0.125-2.625,2.25-5.625,1.75s-2.75,7.25-4.5,7.25s-4.125,0-5.625,0.375s-3.042-2-5.208-3.334c-2.167-1.333,3.167-3.5,2.167-4.832C270.5,377.167,269,384.166,269.443,386.5z\" },\r\n { \"Id\": \"jpjs17\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M254.5,412.166c3.333,1.668,3-0.667,4.667,0c1.667,0.668,5.167,3,7.167,2.334c2-4.334,3.666-6.001,1.333-9.834c-2.333-3.832,1.667-6.5,0.333-9.5s1.886-6.332,1.443-8.666s1.058-9.333,6.891-7.666c-1-1.334-0.5-0.668-0.5-3.5c0-2.834-2.167-1.334-4.5-1.834s0.833-2.334-0.167-3.998s1.167-1.336,2.5,0s3-0.168,4.333-2.336c1.333-2.167,2.167,1,4.167-1.666s-0.333-2.834-0.333-4.666c0-1.834,3.667-0.334,3.833-2.334s-2.167-2.5-3.5-1.5s-6,0.834-6.833,3s-5.667-0.334-6.333,1.666s-3.5,3-3.667,5s-2,4.168-0.667,5C266,372.499,266,375,267,379.5s-3.833,7.834-4,11.5s-9.333,10.166-9.667,11.666c-0.178,0.8-2.058,1.978-3.802,3.131C253.333,407.166,251.167,410.499,254.5,412.166z\" },\r\n { \"Id\": \"jpjs18\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M226.375,440.625c-0.375,1.375,1.5,2.25,3.625,2s1.625,1.875,5,0c0.333-2.041,3.333-2.125,4.5-4.291c1.167-2.167,4.333-0.168,4.667-2.141c0.333-1.974,3.833-0.693,3-4.193s1.833-1.666,4-0.632c0.5-1.368-0.5-5.868,2.833-5.368s4.833,2,7.5,0s6,1.361,7.667-1.402s-4.833-5.764-2.833-10.098c-2,0.666-5.5-1.666-7.167-2.334c-1.667-0.667-1.333,1.668-4.667,0c-3.333-1.667-1.167-5-4.968-6.369c-1.529,1.01-2.954,2.002-3.032,2.703c-0.167,1.5-3.667,2.834-3.333,5s-3.333,1.666-2.167,4s0.833,5.5,2.167,6.334c1.333,0.833,3,6.166,0.833,6.666s0.167-3.166-2.333-2.5s-0.5,4.666-2.167,4.166s-2.167,2.834-4.667,2c-2.5-0.833-1.5,3.834-4.333,3.334c-3.127-0.552-4.367-0.938-4.807-1.305C224.25,438.25,226.75,439.25,226.375,440.625z\" },\r\n { \"Id\": \"jpjs19\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M330.375,421.25c-3.125,2.625-5.75-1.25-7-0.125s-1.875-0.625-3-0.93s-2.5,0.18-3.909,2.055s-1.216-1.25-3.341,2.348s1.25,2.152-0.5,4.402s0.25,3.375,1.75,6.125s1.75,4.625-1,7.5c2.75,1,1.125,3.25,3.5,2.25s1.375,6.875,5,5.625s0.5-4.125,1.75-7s7.625-0.875,8.5-1.375s3.75,1.125,4.375-0.75S340,437,341.75,437s1.625-3.125,1.25-6.75c-5.125-0.25-3-3.75-5.75-6.75C336,425.25,331.25,422.375,330.375,421.25z\" },\r\n { \"Id\": \"jpjs20\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M314.375,435.125c-1.5-2.75-3.5-3.875-1.75-6.125s-1.625-0.805,0.5-4.402s1.932-0.473,3.341-2.348s2.784-2.359,3.909-2.055s1.75,2.055,3,0.93s3.875,2.75,7,0.125c-0.875-1.125,0.125-2.125-0.875-3.125s-1.125-6.75-2.875-8.5s1.125-3.25,0.875-6.75s-2.125,1.625-7.277-1.875s0.402-3.75,0.027-6.25s3.25-2.375,3.125-4.375s3.375-1.875,5.875-2.625c1.084-6.916-3.25-2.992-4.162-9.17c-0.576-3.9-6.088-1.58-7.067,0.795s-1.687,0.791-1.555,2.941c0.132,2.149-2.632,0.518-3.367,1.469c-0.734,0.953-2.265-0.451-3.265,0.973S306,385.334,307.666,383c1.667-2.334-0.832-1.666-3.666-2.125s-0.666,2.125-2.5,2.959c-1.833,0.833-0.5,2.166-2.75,2.916c2,2.25-0.417,5.75-0.75,8.084c-0.333,2.332-3.583,4.832-2.875,9.332s-4.292,3.667-2.792,8c1.5,4.334-1.333,11.001-3.833,9.668c-2.5-1.334-4,3-1.5,4.166s4.5,3.666,4.667,6s4,4.667,3.333,8.334c-0.667,3.666-0.25,4.541-2.375,6.271c0.708,3.729,5.292-0.938,8.5,2.896c2.875-4.25,5.625-4.125,6.5-5s3-2.875,5.75-1.875C316.125,439.75,315.875,437.875,314.375,435.125z\" },\r\n { \"Id\": \"jpjs21\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M295,440.334c0.667-3.667-3.167-6-3.333-8.334s-2.167-4.834-4.667-6s-1-5.5,1.5-4.166c2.5,1.333,5.333-5.334,3.833-9.668c-1.5-4.333,3.5-3.5,2.792-8c-2.042-3.167-4.792-0.999-6.125-3.166s-3.333,0.167-4.333-1.266c-1-1.434-2.333,1.1-3.833,0s-4.333,2.766-5.333,4.932c-1,2.167-2.333,1.501-2.5,0c-0.167-1.5-3.667-3.999-5.333,0c2.333,3.833,0.667,5.5-1.333,9.834s4.5,7.334,2.833,10.098s-5-0.598-7.667,1.402s-4.167,0.5-7.5,0s-2.333,4-2.833,5.368S252,433.334,252,435s3.333,2,3.667,5.334c0.333,3.333-2.333,7-0.833,7.666s1.833,0,3.167,0s3.5,3.666,6.167,3.834c-0.667-1.5,1.5-6,1.833-8s2.833,0.5,6-1.209s3.833,0.875,6.833,3.979s5.167-1.438,6.882,0.896s4.785,0.834,6.91-0.896S294.333,444,295,440.334z\" },\r\n { \"Id\": \"jpjs22\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M339.708,449.625c0.208-1.25-2.583-1.875-0.958-3.875s1.375-3.875-2.25-4.375c-0.625,1.875-3.5,0.25-4.375,0.75s-7.25-1.5-8.5,1.375s1.875,5.75-1.75,7s-2.625-6.625-5-5.625s-0.75-1.25-3.5-2.25s-4.875,1-5.75,1.875s-3.625,0.75-6.5,5s0.125,3.25-2.75,6.125s-1.625,3.125-3,4.625s-5.125,1.875-5.25,5.625s-0.917,2.792,0.042,4.959c4.333-1.334,11.833,1,12.5,0.166c0.667-0.834,5.5-0.333,7.5,0.834c2,1.166,3.5,3.166,4.168-1.667c0.666-4.833,3.332-3.5,3.332-6.833c0-3.334,5.5-3.167,5.668-6.5c0.166-3.334,7.5-6.334,9.5-2.834s-1.668,6.834-1,9c0.666,2.166-1,8,1.166,10s6-5,8.166-6.334c2.167-1.333,0-4.5,2.668-5c2.666-0.5,1-4.666-0.5-4.832c-1.5-0.167-0.668-3,0-5C341.542,450.292,339.5,450.875,339.708,449.625z\" },\r\n { \"Id\": \"jpjs23\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M290.125,465.875c0.125-3.75,3.875-4.125,5.25-5.625s0.125-1.75,3-4.625s-0.125-1.875,2.75-6.125c-3.208-3.834-7.792,0.834-8.5-2.896c-2.125,1.729-5.194,3.229-6.91,0.896s-3.882,2.209-6.882-0.896s-3.667-5.688-6.833-3.979s-5.667-0.791-6,1.209s-2.5,6.5-1.833,8s0.5,2.833,1.833,4c3.333-1.667,4.5,1.333,2.5,3.833s-0.167,5.667,0.833,8.333s3.167,0.834,2.5-2.833s3-1,4.167,0.833s3.333-0.166,5-1.166s5.333-2,4.5,2.166s-9.5,2.5-9.5,5.667s9.833-0.5,14.167-1.833C289.208,468.667,290,469.625,290.125,465.875z\" },\r\n { \"Id\": \"jpjs24\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M258,448c-1.333,0-1.667,0.666-3.167,0c-1.833,1.834,2,5.834,1.333,6.666c-0.667,0.833-1.167,4.5-2.333,6s-3.167,3-6.333,1.668c-3.167-1.334-1.833,3-4.429,3c-0.405,1-0.071,2.166,0.929,3.166s-3.167,4.167,0,5.334c3.167,1.166,6.397,1.833,5.532,4c-0.865,2.166-5.532,0.833-5.532,2.5c0,1.666,2.667,3.833,1.833,4.5c-0.833,0.666,0.833,8.832-1.333,9.832s-1.667,4.5-3.5,4.5s-2.167,1-3,2.167s1.833,2.667,1.5,4.167s1.333,1.001,3.167,1.667c2.833-2.667,3.167-6.667,6-8.333c2.833-1.667,0.667-5.5,2.833-6.667s-0.5-4,1.833-3.5s4.5-3,7.833-2.325c3.333,0.676,4.333-2.675,5.833-0.675s4.333-1,3.167-1.833C269,483,270,481.334,271.333,481s0.667-4-1.667-3.166c-2.333,0.833-3.667-4.167-7.833-5c-4.167-0.834-4-5.5-0.667-8.334s1.5-7,4.833-8.666c-1.333-1.167-1.167-2.5-1.833-4C261.5,451.666,259.333,448,258,448z\" },\r\n { \"Id\": \"jpjs25\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M255.667,440.334C255.333,437,252,436.666,252,435s-1.333-2.264-0.833-3.632c-2.167-1.034-4.833-2.868-4,0.632s-2.667,2.22-3,4.193c-0.333,1.973-3.5-0.026-4.667,2.141c-1.167,2.166-4.167,2.25-4.5,4.291s3,3.479,2.333,5.427c-0.667,1.948,1.166,4.282,0.333,7.782s5.81,8.5,5.405,9.5c2.595,0,1.262-4.334,4.429-3c3.167,1.332,5.167-0.168,6.333-1.668s1.666-5.167,2.333-6c0.667-0.832-3.166-4.832-1.333-6.666C253.333,447.334,256,443.667,255.667,440.334z\" },\r\n { \"Id\": \"jpjs26\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M206.5,436.193c1.667,1.973,4.333-3.307,4.333,0s1.333,4.223,0,5.182s-3.833-1.959-3.833,1.25s1.833,2.918,3.833,3.979s4.5-1,4.833,1.447c0.333,2.448,3.853,1.782,5.426,3.782s-1.926,3.999,0.407,5.332c1.833-0.333,3.333,0.168,4.167,2.168s3.667,1,5.833,3.166s-0.667,2.834,0.871,4.834c4.463-0.5,3.963,2.622,5.629,1.227c1.667-1.395,3.833,1.273,6-0.061c-1-1-1.333-2.166-0.929-3.166s-6.238-6-5.405-9.5s-1-5.834-0.333-7.782c0.667-1.947-2.667-3.386-2.333-5.427c-3.375,1.875-2.875-0.25-5,0s-4-0.625-3.625-2s-2.125-2.375-0.682-4.43c-0.704-0.585,0.634-1.118-0.443-2.195c-1.75-1.75-5,2.5-8.5,1.5s4.75-6.75,0.75-8.75s-7.5,6.5-11,5C204.333,434,204.833,434.22,206.5,436.193z\" },\r\n { \"Id\": \"jpjs27\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M220.167,484.166c2.333,0.668,4.833-3,5.833-1.666s3.667-1.602,4.833-0.884c0.5-1.616,2.5-3.157,0.667-6.804s2.408-5.479,0.871-7.479s1.296-2.668-0.871-4.834s-5-1.166-5.833-3.166s-2.333-2.501-4.167-2.168c-1.833,0.334,3.167,3.333,2.333,4.5C223,462.834,226,466.5,223.5,469.334c2.333,1.833,0.167,5-1,9.333s-8.333,3.5-9.833,6.167C215.667,486.334,217.833,483.499,220.167,484.166z\" },\r\n { \"Id\": \"jpjs28\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M223.833,461.666c0.833-1.167-4.167-4.166-2.333-4.5c-2.333-1.333,1.167-3.332-0.407-5.332s-5.093-1.334-5.426-3.782c-0.333-2.447-2.833-0.386-4.833-1.447S207,445.834,207,442.625s2.5-0.291,3.833-1.25s0-1.875,0-5.182s-2.667,1.973-4.333,0c-1.667-1.974-2.167-2.193,0-4.443c-3.5-1.5-8.5,0.5-11-0.5s-5.25,1-6,2c2.333,2.417,0.667,4.019,2.5,6.551c1.833,2.533,2.333,6.408,1,6.804s-3.667,0.729-3.5,2.896s1.483,1.334-0.008,3.667s-4.325,4.167-2.992,6.167s-1.5,3.832,2.167,8.832c1.083,0.167,6.583-1.832,8.917-2.25c2.333-0.417,4.5,0.834,5.833,2.334s4.667,2.334,6.333,3.084s0.25,1.416-0.083,1.416s-1.417,1.916-2.583,2.5s-1.75,2.917-3.25,2.917s-2.333,5.333-4.333,6.167c-2,0.833-0.333,1.166,1.167,3.5c1.5,2.333,4.167-0.667,6.5-1.167s-0.167-2.333-0.667-5s4-7.167,4.774-8.667s2.392-2.333,4.226-1.333s5.667-4.167,8-2.333C226,466.5,223,462.834,223.833,461.666z\" },\r\n { \"Id\": \"jpjs29\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M238,468.561c-1.667,1.396-1.167-1.727-5.629-1.227c1.537,2-2.704,3.832-0.871,7.479s-0.167,5.188-0.667,6.804s-0.333,3.05,1.537,3.55S232.167,488,230.5,488s0.667,2.834-2.5,3.834s0.5,3.666,1.667,5c1.167,1.333-1.333,2.666,0,4.354s2.333-0.354,3.833,0.145s2.333-0.499,4.5,0c0.833-1.167,1.167-2.167,3-2.167s1.333-3.5,3.5-4.5s0.5-9.166,1.333-9.832c0.833-0.667-1.833-2.834-1.833-4.5c0-1.667,4.667-0.334,5.532-2.5c0.865-2.167-2.365-2.834-5.532-4c-3.167-1.167,1-4.334,0-5.334C241.833,469.834,239.667,467.166,238,468.561z\" },\r\n { \"Id\": \"jpjs30\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M239.5,505.5c0.333-1.5-2.333-3-1.5-4.167c-2.167-0.499-3,0.499-4.5,0s-2.5,1.544-3.833-0.145s1.167-3.021,0-4.354c-1.167-1.334-4.833-4-1.667-5s0.833-3.834,2.5-3.834s3.741-2.334,1.871-2.834s-2.037-1.934-1.537-3.55c-1.167-0.718-3.833,2.218-4.833,0.884s-3.5,2.334-5.833,1.666c-2.333-0.667-4.5,2.168-7.5,0.668c-1.5,2.666,2.167,3.833,2.667,5.333s-2-0.667-3,1.5s2.333,2.333,2.333,3.833s-2.833-0.5-3.333,3s2.333,0.667,2.333,2.334c0,1.666,8,6,7.167,8.5s0.833,3.166,5.5,5.5S234.5,518,237.833,516s2-6.166,4.833-8.833C240.833,506.501,239.167,507,239.5,505.5z\" },\r\n { \"Id\": \"jpjs31\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M154.137,444.458c3.049,4.376-4.294,2.375-3.049,4.542s-2.465,3.666-1.443,5c2.811,0.833,3.022,0.334,5.189,0.5c0.5-1.834,4.833-0.666,4.833-3.792s4.5-0.874,3.667-4.104s5.667-1.771,8,1.396s6-5,9.167-2.666c3.167,2.333-0.167,5.333,2.667,5.374s3.333-2.374,6.333-1.208c-0.167-2.167,2.167-2.5,3.5-2.896s0.833-4.271-1-6.804c-1.833-2.532-0.167-4.134-2.5-6.551c-0.75,1-7.25,4.5-10,4s-13.25,0.75-17-0.5s-4.5,3-7.25,2.5C156.333,442.834,152.53,442.152,154.137,444.458z\" },\r\n { \"Id\": \"jpjs32\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M103.5,470.334c5.167-0.5,10.833-7.668,11.667-9.168S126.75,447.5,131.5,447.25s-0.75-6,4.25-8.25s10.75-5.25,14-4.5s5.5-1.25,5.5,0.5s-2.75,3.75,0,4.25c1.083,3.584-2.72,2.902-1.113,5.208c3.049,4.376-4.294,2.375-3.049,4.542s-2.465,3.666-1.443,5c-2.811-0.833-4.811,1.5-7.145,0.25s-4,4.584-5.5,4.584s-4.333,2.454-2.333,3.144s0.5,2.856-1.833,2.356s-3.5,2-5.167,1s-2,0.81-4.333,0.238c-2.333-0.572-6.5,2.095-6.167,4.262c0.333,2.166-1.771,3.124-1.219,4.979s-1.281,1.688-1.114,3.188c-2.333-1.167-0.089,8.334-4.5,5.39c-1.439-0.96-1.333,1.277-4,0.777s0.833-3.833-2.833-5.001C99.833,477.999,105,473.5,103.5,470.334z M154.375,411c3.625-0.5,3.198-4.381,1.75-5.875c-0.642-0.662-3.5-1.875-4.5,0.625S150.75,411.5,154.375,411z M149.125,415.125c1.375-1.75-0.087-3.473-3.125-3c-2.02,0.314-3.125,1.5-1.75,4S147.75,416.875,149.125,415.125z\" },\r\n { \"Id\": \"jpjs33\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M186.5,459.334c-1.333-2,1.5-3.834,2.992-6.167s0.175-1.5,0.008-3.667c-3-1.166-3.5,1.249-6.333,1.208s0.5-3.041-2.667-5.374c-3.167-2.334-6.833,5.832-9.167,2.666s-8.833-4.625-8-1.396s-3.667,0.978-3.667,4.104s-4.333,1.958-4.833,3.792s2,3.666,1,6s3.603,4.224,2.385,6.778c-1.218,2.556,1.948,6.388,1.282,11.888c1.917,0.25,4.5-0.582,4.833-1.5c0.333-0.917,3.25-2.332,3.417-1c0.167,1.333,0.833,0.75,1.667,1.75s2.5-0.832,3.5,0.084s2.25-0.166,3.464,0.416c1.214,0.583,1.369-1.25,0.286-1.832c-1.083-0.584,1.25-1.918,1.417-2.5c0.167-0.584,0.667-1.668,1.417-1.168s4.5-1.25,4.083-2.416s0.667-0.834,1.083-1.666c0.417-0.834,2.917-1.334,4-1.168C185,463.166,187.833,461.334,186.5,459.334z\" },\r\n { \"Id\": \"jpjs34\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M158.218,467.278c1.218-2.555-3.385-4.444-2.385-6.778s-1.5-4.166-1-6c-2.167-0.166-2.378,0.333-5.189-0.5s-4.811,1.5-7.145,0.25s-4,4.584-5.5,4.584s-4.333,2.454-2.333,3.144s0.5,2.856-1.833,2.356s-3.5,2-5.167,1s-2,0.81-4.333,0.238c-2.333-0.572-6.5,2.095-6.167,4.262c0.333,2.166-1.771,3.124-1.219,4.979s-1.281,1.688-1.114,3.188s-0.771,5.612,1.114,5.39s0.719,5.109,4.469,5.526c0-1.25,1-1.832,2.25-1.832s1.25-1.334,1.25-2.834s3.333-1.75,4.5-0.834c1.167,0.917,0.583,2.334-0.167,2c-0.75-0.333-1.833,1-2.333,1.084s-1.083,2.25,0,3s1.333,1.166,0.917,2.416S127.75,493,130,493.084c2.25,0.083,0.583-2.334,0.75-3.418c0.167-1.083,1.5-0.916,3.25-0.25c1.75,0.667,1.583-1.832,3.583-2.082s1.167-3.5,2.667-2.584s2.25-1.416,3.333-1.25s3.667-0.584,3.917,0.834c0.25,1.416,1.417,1.916,2.167,2.5c0.75,0.583,2.917-2.168,2.917-3.5c0-1.334,0.583-1.584,2-0.918c1.417,0.667,2.75-0.666,2.75-1.166s0.25-2.334,2.167-2.084C160.167,473.666,157,469.834,158.218,467.278z\" },\r\n { \"Id\": \"jpjs35\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M115.948,483.39c-1.886,0.223-0.948-3.89-1.114-5.39c-2.333-1.167-0.089,8.334-4.5,5.39c-1.439-0.96-1.333,1.277-4,0.777s0.833-3.833-2.833-5.001c-3.667-1.167,1.5-5.666,0-8.832c-5.167,0.5-5.833,1.666-6,3.832c-0.167,2.167-3.167,2.168-2.667,3.834s-8.167,6.334-10.333,2.5s-5,1.834-7.667,2.666c-2.667,0.833,1.333,8.168-0.333,8.668s2,6.832,0.667,7.332C78.5,499.5,79.333,497,80.5,497.75c0-2.125,3.125-0.5,5.375,1s5.125-1.625,6.5-1s3-3.375,4.875-2.125s4.125,0,5.875-0.5s3-1.125,4.5,1.125s4.5,3.125,7.875,5s1.5-1.5,3.998,0s3.918-1.834,1.752-2.5s-0.667-1.166-1.5-2.834c-0.833-1.667,0.667-5.75,0.667-7C116.667,488.499,117.833,483.167,115.948,483.39z\" },\r\n { \"Id\": \"jpjs36\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M197.5,496.334c0.333-1.75-1.083-3.668,0.333-5.334s0.083-1.834,0.583-3.916c0.5-2.084-3.25,0.582-5.167,0.582c-0.625,2.292-4.25,3.834-7.097,2.084s-2.528,3.75-4.661,2.48s-4.867,2.02-5.825,0.52S173,493.5,171,493.25s-1.5,2.875-3.75,3.25c0.75,1.5-0.25,2.875,0,4.5s3.994,0.682,4.883,2.125c2.492,4.042,3.441-0.766,5.242,0c4.117,1.75,0.375,5.375,3,5.375s3.5,0.625,2.375,2.25s-0.208,3.916,4.833,2.833c1.333-2.334,4.417-5.083,6.083-5.166s3.833-3.334,4.917-3.667s2.833-1.417,1.167-1.667s-0.417-2.083,0.583-3.167C201.333,498.833,197.167,498.084,197.5,496.334z\" },\r\n { \"Id\": \"jpjs37\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M181.563,478.625c-0.438-1.063,1.25-3.063,2.563-2.625c1.326,0.441,0.813-1.313,2.125-1.063s2.688-0.945,2.75,1.09s-0.688,4.473-1.438,3.16s-2.25,0.625-2.688-0.5S182,479.688,181.563,478.625z M167.25,496.5c2.25-0.375,1.75-3.5,3.75-3.25s3.709-2,4.667-0.5s3.691-1.789,5.825-0.52s1.814-4.23,4.661-2.48s6.472,0.208,7.097-2.084c-1.917,0-7.25-1.5-7.333-3.5s-2.316-1.065-3.333-2.082c-1.167-1.166-4.833,0.249-7.25,0c-2.417-0.25-2.333,1.832-4.583,2.832s-3.5,3.083-5.417,2.333s-0.75,1,0.25,2s0,2.584-1.833,5.834C165,495.75,166.5,495,167.25,496.5z\" },\r\n { \"Id\": \"jpjs38\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M133.25,530c-1-1.5,0.5-1.625,1.539-0.375s2.836-0.875,2.836-2.75s0.25-2,3-2.625s1.375-1.75-0.375-4.75s-0.125-3.25,4-2.25s1.875-7.125,3.625-7s3.375-5.625,4.625-5.776s0.875-1.599,2.267-0.724S157.25,503,160.5,503s2.125-2.125,6.75-2c-0.25-1.625,0.75-3,0-4.5s-2.25-0.75-3.5-1.417c-1.833,3.25-4.75,1.166-5.532,2.083c-0.782,0.918-4.302,0.167-4.468,1.25c-0.167,1.084-2.5,1.083-5,0.583s-1.5-3.666-3-4.666s-0.75-2.75-2.75-2.75s0.167,2.583-1.083,2.416s-1.5,1.334-2.333,1.417c-0.833,0.084-2.167,1-1.75,1.917c0.417,0.916-1.167,3.166-2,2.916s-1.75,0.584-0.583,1.834s-0.583,1.583-0.917,4.583s-6.917,5.334-7.25,6.667s-6,3.75-7.667,4.25s-3.833,1.083-3.417,2.583s1.417,0.917,2,0.084s5.333-3.334,6.167-3.25s2.667,0.833,1.5,1.416s-1.25,1.25-0.583,4.167s4.917-1.333,3.75,1.917c-0.418,1.166,0.917,1.583,0.75,3.083s-0.75-0.25-2.071,0.917S129,530,128,531.083s-0.417,2.167,1.333,5.167s2.167,1.166,4.75,2.166C135.792,536.332,134.25,531.5,133.25,530z\" },\r\n { \"Id\": \"jpjs39\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M182.75,510.75c1.125-1.625,0.25-2.25-2.375-2.25s1.117-3.625-3-5.375c-1.801-0.766-2.75,4.042-5.242,0c-0.89-1.443-4.633-0.5-4.883-2.125c-4.625-0.125-3.5,2-6.75,2s-4.342,1.625-5.733,0.75s-1.017,0.572-2.267,0.724s-2.875,5.901-4.625,5.776s0.5,8-3.625,7s-5.75-0.75-4,2.25s3.125,4.125,0.375,4.75s-3,0.75-3,2.625s-1.797,4-2.836,2.75S132.25,528.5,133.25,530s2.542,6.332,0.833,8.416c2.583,1-1.583,3.25-0.917,4.834s1.917-0.917,3.667,1.083s2-0.667,4.167-0.917s1.25,0.417,3.167,2s1.833-2.166,0-3s1.5-3.416,1-4.499s1-3.833,2.167-3.417s0.917-1.5,1.583-2.083s0.917-2.333,2.417-3.667s1.833-4.666,1.333-5.5s2.25-2.666,4.583-3.416s4.417-3.25,8.583-5s6.083,0.999,7.667,1.083s2.333,2.833,4,3.333s1.917,2.083,4.333,4.75s2.083,0.75,1.833-2.583s2.583-5.5,3.917-7.834C182.542,514.666,181.625,512.375,182.75,510.75z\" },\r\n { \"Id\": \"jpjs40\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M77.167,499.166c-1.333,0.5-3.833,2.334-5,0.834s-0.167,1.667-4.833,1s-5,6.667-6,9.333s-5-1.666-7.333,0s-2.333,4.667-4,7c3.5,2.042,5-2.042,7.375,0s4.625,4.327,5.5,2.372s2.625-2.295,3,0s-2.625,2.92-3.125,4.42s-3.5,2.002-3.25,5.376c2,1.167,2.333,4.666,0.667,7c6.667-0.749,3.083-3.251,5.208-4.822s3.625,0.196,4.25-2.178s3.75,2.624,5.625,2.146s1.625-3.396-0.104-4.771s1.729-0.625,0.354-3.753s1.75-2.122,1.125-4.497s3.375-4,6.25-3.125s3.5,0,3.375-3.375c-4.625-0.125-5.125-6.25-6.5-7.875s0.75-4.375,0.75-6.5C79.333,497,78.5,499.5,77.167,499.166z\" },\r\n { \"Id\": \"jpjs41\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M62.75,524.125c0.5-1.5,3.5-2.125,3.125-4.42s-2.125-1.955-3,0s-3.125-0.33-5.5-2.372s-3.875,2.042-7.375,0c-1.667,2.333-3.667-2.999-6-2.666s-1.833,3.167-0.667,4.334S43,523.834,41.5,522.834c-1,1.916,1.5,2.416,0.75,3.791s6,2.125,4.5,3.5s0.037,2.452,1.04,3.5c4.585,4.791,7.502,2.293,8.544,2.709c0.167-3-1.833-1.333-3.167-2.833s-1.167-2,0.167-2.667s1.167-2.667,2-3.5s2.167,1,4.167,2.167C59.25,526.127,62.25,525.625,62.75,524.125z\" },\r\n { \"Id\": \"jpjs42\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M56.333,536.334c-0.167,3-4,1.833-3.167,3.5s4.167-0.667,5.5,1.333s2.167,4.166,0.667,6.5s-5.667,3.333-6.833,1.5s3.167-3.833,1.333-5.333s-2.5,1-4,0.5s-1.834,1.333-3.667,1.833s-3.5,6.834-5.167,6.167s2.333-2.499,1.167-5.833s-2.667-4.333-4-6.5s-4.833-0.168-2.5-4.334s3.167-3.667,3.833-1s2.5,0.5,2.5,3s2.167,2.334,4.167,2.667s2-3.334,0.833-4.667s-6-2.999-6.333-4.666s-6.065-3.167-5.783-6.167s2.117-5,2.95-3s2.167,0,3.667,1c-1,1.916,1.5,2.416,0.75,3.791s6,2.125,4.5,3.5s0.037,2.452,1.04,3.5C52.375,538.416,55.292,535.918,56.333,536.334z M23.125,492.75c2.125-0.75,2.5-4.125,5.125-8s-0.375-6.25,0.5-7s3.5-8.875,1.625-8.875s-1.358,3.6-3.25,2.375c-2.125-1.375-1,4.125-2.375,6.25s1.5,3.25,0.75,5.625s-2.375-1.375-3.25,1.375S21,493.5,23.125,492.75z M40.167,507c1.5-1.5,0.259-4.966-1.167-4.917c-2.417,0.083-3.083,2.834-2.167,4.417S38.667,508.5,40.167,507z M29.25,523.5c-0.167,1.584-2.75,3.75-2.417,4.75s1.667,0.083,4.083-1.5s-0.25-2.667,1.25-3.5s1.048-1.63-0.75-2C30.335,521.027,29.417,521.916,29.25,523.5z M19.417,535.666c-1.167,0.583,0.619-4.372-0.5-4c-1.25,0.416-1.917,5.167-2.417,6.834s-2.833,1-4.333,0.666s-2.583,1.084-1.75,2.084s-0.75,1.916,0.333,2.583s2.25-0.667,2.583-1.5s2.833-2.417,3.583-1.583s1.833,0,2-0.75s0.417-1.584,1.833-2.834S20.583,535.083,19.417,535.666z M10.127,544.916c-0.373-2.084-1.985,0.732-3.127,0c-3.25-2.084-2.5,1-2.083,2.914s-2.833,1.336-1.25,3.086s3.167-0.416,4.167,0.5s1.583-0.333,1-1.75s1.167-0.5,2.833-0.5S10.5,547,10.127,544.916z\" },\r\n { \"Id\": \"jpjs43\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M58.833,568.834c1.667-1.667,2.5-6.667,4.833-8.167s0.834-6.332,3.167-7.666s1.833-3,0.167-3s-4.833,0.166-2.5-1.667s4.333-4.001,2.667-5.167s-3-1.666-3-3.666s-5.667-0.666-4-3c6.667-0.749,3.083-3.251,5.208-4.822s3.625,0.196,4.25-2.178s3.75,2.624,5.625,2.146c2.625,2.854,4.25,3.354,5.625,1.479s-2.875-3.875,0-5.125s4.125,1.736,4.375,3.118s3.75,3.259,3.5,5.383s-1,2.749,2.125,4.999c-2.75,0-2,4.104-3.375,4.302s0.529,1.823-1.235,2.073s-0.765,4.125-2.89,4s-4.625,2.5-1.5,5.375s3.25,4.375,1.5,5.125s1.75,2.375,0.5,4.625s-2.445-2-3.473,0s-3.027,1.125-3.777,2s-3.375,1.375-5.375,0.75s-3-3.75-3.875-2.875S62.417,571.793,58.833,568.834z M60.417,553.5c-0.417-0.833-3.917,1.583-4.917,2.583s-0.623-0.973-1.083-2.583c-0.5-1.75-3.083,0.583-4.583,1.25s-2.5,6.667-1.833,7.333s-0.75,3.334,0.583,3.917s3.75-2.333,4.333-4.083s1.833-0.167,2.417-0.584S54.917,558.667,55,557.5s4.583,1.417,5.583,1.417s1.833-4,2.583-4.667s1.083-2.75,0-3.25s-1.917-0.167-1.583,1.417S60.833,554.333,60.417,553.5z\" },\r\n { \"Id\": \"jpjs44\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M82.875,515.5c-2.875-0.875-6.875,0.75-6.25,3.125s-2.5,1.369-1.125,4.497s-2.082,2.378-0.354,3.753s1.979,4.293,0.104,4.771c2.625,2.854,4.25,3.354,5.625,1.479s-2.875-3.875,0-5.125s4.125,1.736,4.375,3.118s3.75,3.259,3.5,5.383s-1,2.749,2.125,4.999s4.625-1.75,5.875,0.625s2.5,1.5,4,1.875s4.5-5,8.875-0.5c1.125-0.75,2.75-0.875,3-3.5s-2.75-2.5-2.125-5.75s-4.375-4.75-2.75-5.875s-1.25-3.5-3.125-2.615s-2.125-0.26-6-0.01s-2.5-4.625-0.75-3.875s5.125-1.875,6.5-3.375s-0.25-5.875-2.625-8.75s-5.25-1.125-6.375,1.75s-4.5,0.75-9.125,0.625C86.375,515.5,85.75,516.375,82.875,515.5z\" },\r\n { \"Id\": \"jpjs45\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M100.75,544c-1.5-0.375-2.75,0.5-4-1.875S94,543.75,90.875,541.5c-2.75,0-2,4.104-3.375,4.302s0.529,1.823-1.235,2.073s-0.765,4.125-2.89,4s-4.625,2.5-1.5,5.375s3.25,4.375,1.5,5.125s1.75,2.375,0.5,4.625s-2.445-2-3.473,0s-3.027,1.125-3.777,2s-3.375,1.375-5.375,0.75c-1.125,2.375,2,2.5,2.125,4s2.875,1.625,3.5,3.25s-1.75,3.375,0.875,4.25s3.25,1.125,3.25,3.375s5.75,1.125,6,4.375s-1.583,3.084-1.167,5.167c3.667,1,2.833,3.166,4.5,3.166S92.75,592,92.5,590s3.75-6.75,2.25-9.5s2.25-6,1.5-8.5s2.25-3.125,2.5-5s2.875-4.25,2-7.5s2.875-4.5,1.625-7s3-3.375,3-4.5s3.125-3.75,4.25-4.5C105.25,539,102.25,544.375,100.75,544z\" },\r\n { \"Id\": \"jpjs46\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M85.833,594.167c-3.667-1-1.667,0.5-3.333,1.5s3,3,1.5,4s1.833,1-0.167,2.833s-3.333,0-3.333,1.5s-2.833,4.167-4.833,4.167s-5.5,3.832-5.833,2.166s2.833-2.5,2.833-5.333s2.5-1.499,1.333-5.833s-0.875-3.917-2.25-4.542s-1.125-1.625-1.125-2.5S71.5,590,72.375,590s0.5-2.875,1.375-2.875s-0.25-2.5-1.375-2.375s-1.132-1.375-2.566-0.875s-2.184,2.875-1.059,3.375s2.75,0.5,2.375,1.5s0.125,2.5-1.25,2.125s-3.125-2-3.5-0.75S64.25,593.25,64.75,595s1.5,6.125,3.375,6.125s1.875,0.375,0.75,2.25s-4.179,3.125-4.214,1.25S62.125,601.5,57.875,602s-3.625-1.125-3.25-2.875s-2.75-2.5-2.125-3.5s3.25,1.375,4.5,0s2.625-8.625,1.125-9.875s-6.25-2.5-4-6.125s0.042-6.292-0.458-8.458s-3.5-2.666-3-4.166s3.334-1.666,3.667-1s2.833,4.5,4.5,2.833c3.583,2.959,7.667-1.084,8.542-1.959s1.875,2.25,3.875,2.875c-1.125,2.375,2,2.5,2.125,4s2.875,1.625,3.5,3.25s-1.75,3.375,0.875,4.25s3.25,1.125,3.25,3.375s5.75,1.125,6,4.375S85.417,592.084,85.833,594.167z M80.833,620.416c0.417,1.5-2.641,3.492-2.083,5.5c0.417,1.5,0.25,2.334-1.5,3.917s-1,2.75-1.667,4.833s0.333,2,2.25,0.75s2.25-1.666,1.583-2.666s1.5-4.834,2.417-6s1.333-5.25,1.333-7.917S80.417,618.916,80.833,620.416z M65.75,632.417c-3.299-1.441-2.917,1.833-4.833,1.916s0.25,3.417,0.833,5.084s2,1.083,3.583,1.083s3.25-1.75,4.25-4.196S67.473,633.17,65.75,632.417z\" },\r\n { \"Id\": \"jpjs47\", \"Fill\": \"#EBECED\", \"Stroke\": \"#FFFFFF\", \"VectorEffect\": \"non-scaling-stroke\", \"Data\": \"M491.334,533.418c0.666,2,1.166,2.917-0.334,3.5s-4.25,4.584-5.833,4.5s-2.583,2.083-1.75,2.583s-1.917,2.166-2.833,3.833c-0.917,1.667-2.834,4.084-4.584,3.084s1-1-0.75-3.167s-1-2.833,0-2.583s1.5-0.75-0.333-1.75s-1-3,0.75-2.917s11.677-5.155,12.583-6.167C489.197,533.277,490.667,531.418,491.334,533.418z M498.667,541.251c2.667,1.5,3.917-2.583,3.5-3S496.51,540.038,498.667,541.251z M466.334,555.751c-2.084,0-0.334,3.333-0.834,4.5s-1.416,1.75,0.667,3.583s3.74-3.735,2.917-4.25C467.75,558.751,468.417,555.751,466.334,555.751z M455.75,573.668c-1.334,0.084-3.669,0.548-2.166,1.75c1.25,1,2.582,1.416,3.916-0.875S457.084,573.584,455.75,573.668z M450.416,585.667c-1.5-0.25-1.832,1.25-0.416,2.25S451.402,585.831,450.416,585.667z M440.834,598.583c-0.417,1.083-2.167,2.5-3.667,2.417s-0.579-1.244-2.5-2.417c-1.436-0.877-2,0.167-2.083,2c-0.084,1.833,2.166,1.917,2.416,2.917s-4.416,4.916-7.083,5.333s2.25,5.667-1.833,6.417c-1.894,0.348,0,3.083-0.584,5.75s2.5-0.917,4.334-0.917c1.833,0,1.833-2.583,0.333-2.583s-0.583-2.667,1.435-3.25s1.398-3.167,0.482-3.917c-0.917-0.75-0.584-2.333,1.5-1.417c2.083,0.916,1.083-2.5,2.5-2.333c1.416,0.167,2-2,3.583-1.5s1.833-3.167,3.083-2.917s1.834-0.083,3.084-2.416s1-3.25,0-5.917S441.25,597.5,440.834,598.583z\" },\r\n ]\r\n return (\r\n <div id=\"keepinside\">\r\n <div id=\"mapwrapper\">\r\n <div id=\"mapbase\">\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 600 650\" xmlSpace=\"preserve\">\r\n <g>\r\n {map_paths.map(path => (\r\n <MapPath key={path.Id} path={path} />\r\n ))}\r\n </g>\r\n <g>\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"596,46.021 596,47.225 593.217,47.225\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"589.24\" y1=\"47.225\" x2=\"544.707\" y2=\"47.225\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"542.321,47.225 540.333,47.225 540.333,46.021\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"540.333\" y1=\"43.134\" x2=\"540.333\" y2=\"11.372\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"540.333,10.409 540.333,8.725 542.321,8.725\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"547.093\" y1=\"8.725\" x2=\"591.626\" y2=\"8.725\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"593.217,8.725 596,8.725 596,10.409\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"596\" y1=\"12.815\" x2=\"596\" y2=\"44.578\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"507.159,624.774 507.159,628 501.758,628\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"494.04\" y1=\"628\" x2=\"407.613\" y2=\"628\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"402.983,628 399.124,628 399.124,624.774\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"399.124\" y1=\"617.031\" x2=\"399.124\"\r\n y2=\"531.864\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"399.124,529.285 399.124,524.769 402.983,524.769\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"412.243\" y1=\"524.769\" x2=\"498.67\"\r\n y2=\"524.769\" />\r\n <polyline fill=\"none\" stroke=\"#9CA8B6\" points=\"501.758,524.769 507.159,524.769 507.159,529.285\" />\r\n <line fill=\"none\" stroke=\"#9CA8B6\" strokeDasharray=\"6,6\" x1=\"507.159\" y1=\"535.737\" x2=\"507.159\"\r\n y2=\"620.904\" />\r\n </g>\r\n <g id=\"jpjspins\"></g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div className=\"clear\"></div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default JapanMap;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link, useNavigate, useLocation } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Image, DropdownButton, Dropdown, Button } from 'react-bootstrap'\r\nimport Loader from '../Common/Loader'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\nimport Autocomplete from '../Common/Autocomplete'\r\nimport JapanMap from '../SkiArea/JapanMap'\r\n\r\nconst SkiAreaHome = () => {\r\n\r\n const location = useLocation()\r\n\r\n const [skiAreaHomePage, setSkiAreaHomePage] = useState('')\r\n\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n const [prefectureList, setPrefectureList] = useState([])\r\n const [areaList, setAreaList] = useState([])\r\n const [townList, setTownList] = useState([])\r\n\r\n //const history = useHistory()\r\n const navigate = useNavigate()\r\n\r\n const fetchData = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/home/list`\r\n }).then(dataResortList => {\r\n setSkiAreaList(dataResortList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/prefecture/list`\r\n })\r\n }).then(resPrefecture => {\r\n setPrefectureList(resPrefecture.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/area/list`\r\n })\r\n }).then(resArea => {\r\n setAreaList(resArea.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/town/list`\r\n })\r\n }).then(resTown => {\r\n setTownList(resTown.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/SkiArea`\r\n })\r\n }).then(resGeneralMessages => {\r\n setSkiAreaHomePage(resGeneralMessages.data.Message)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchData()\r\n }, [location.pathname]);\r\n\r\n const ResortSelected = (evtKey, evt) => {\r\n\r\n let selectedSkiArea = skiAreaList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === evtKey);\r\n });\r\n\r\n let path = window.$baseSkiAreaUrl + '/' + selectedSkiArea[0].PrefectureUniqueName + '/' + selectedSkiArea[0].TownUniqueName + '/' + selectedSkiArea[0].UniqueName;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n\r\n const PrefectureSelected = (evtKey, evt) => {\r\n let path = window.$baseSkiAreaUrl + '/prefecture/' + evtKey;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n\r\n const AreaSelected = (evtKey, evt) => {\r\n let path = window.$baseSkiAreaUrl + '/area/' + evtKey;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n\r\n const TownSelected = (evtKey, evt) => {\r\n let path = window.$baseSkiAreaUrl + '/town/' + evtKey;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n\r\n if (skiAreaHomePage === '') {\r\n return (\r\n <Loader />\r\n )\r\n\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>An introduction to the ski areas of Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"There are over 450 ski areas in Japan, from huge resorts with modern facilities to tiny local ski hills. SnowJapan introduces them all in detail.\" />\r\n </Helmet>\r\n\r\n <h3>Discover Japan's ski areas</h3>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiArea.svg\" alt=\"Japan Ski Areas\" /></div>\r\n <div className=\"sj-para\">\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(skiAreaHomePage) }} />\r\n </div>\r\n <div className=\"sj-para\">\r\n <h5>Quick search (ski area, town, area)</h5>\r\n <Autocomplete skiAreaList={skiAreaList} />\r\n </div>\r\n <div className='sj-row sj-box sj-box-dark-gray sj-round-half mb-3 center-aligned mt-5'>\r\n <Link to='/japan-ski-resorts/discover'><h4>Search, sort & compare</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to='/japan-ski-resorts/discover'>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/guide-ski-boom.svg' fluid='true' alt='Ski Area' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9\">\r\n This new tool lets you compare ski areas throughout Japan. You can filter and sort the list of ski areas by prefecture, town, area, or any combination of those. Results can then be sorted by ski area name, max elevation, min elevation, vertical, number of ski lifts, number of ski courses, longest course and steepest course.\r\n </div>\r\n </div>\r\n <div className=\"sj-row sj-row-no-margin-padding\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding\">\r\n <div className='sj-row-100 sj-row-100-left'>\r\n <DropdownButton align=\"start\" title=\"Choose individual ski area (A-Z)\" onSelect={ResortSelected} id=\"resort-list-a-z\" className='sj-large-font-button'>\r\n {skiAreaList.map(skiArea => (\r\n <Dropdown.Item eventKey={skiArea.UniqueName} key={skiArea.UniqueName}>{skiArea.Name} ({skiArea.TownName} {skiArea.TownTypeStr}, {skiArea.PrefectureName})</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding\">\r\n <div className='sj-row-100 sj-row-100-right'>\r\n <DropdownButton align=\"start\" title=\"Ski areas by prefecture\" onSelect={PrefectureSelected} id=\"prefecture-list\" className='sj-large-font-button '>\r\n {prefectureList.map(prefecture => (\r\n <Dropdown.Item eventKey={prefecture.UniqueName} key={prefecture.UniqueName}>{prefecture.Name} ({prefecture.TotalResorts})</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row sj-row-no-margin-padding\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-6 sj-row-no-margin-padding\">\r\n <div className='sj-row-100 sj-row-100-left'>\r\n <DropdownButton align=\"start\" title=\"Ski areas by popular area\" onSelect={AreaSelected} id=\"area-list\" className='sj-large-font-button'>\r\n {areaList.map(area => (\r\n <Dropdown.Item eventKey={area.UniqueName} key={area.UniqueName}>{area.Name} ({area.TotalResorts})</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-6 sj-row-no-margin-padding\">\r\n <div className='sj-row-100 sj-row-100-right'>\r\n <DropdownButton align=\"start\" title=\"Ski areas by town\" onSelect={TownSelected} id=\"town-list\" className='sj-large-font-button '>\r\n {townList.map(town => (\r\n <Dropdown.Item eventKey={town.UniqueName} key={town.UniqueName}>{town.Name} {town.TownTypeStr} ({town.TotalResorts})</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='sj-row'>\r\n <JapanMap />\r\n </div>\r\n <div className=\"sj-para\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half mb-3 center-aligned'>\r\n <Link to='/japan-ski-resorts/reviews'><h4>Reviews</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to='/japan-ski-resorts/reviews'>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Reviews.svg' fluid='true' alt='Reviews' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9\">\r\n <div className='mb-2'>Reviews of ski areas from around Japan submitted by SnowJapan readers. Reviews of specific ski areas are available in the relevant ski area section.</div>\r\n <div>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-right-5\">\r\n <Link to={`${window.$baseSkiAreaUrl}/reviews`} className='btn btn-primary w-100 sj-box-dark-blue mt-2'><h6 className='mt-1 mb-1'>Read reviews</h6></Link>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-left-5\">\r\n <Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-2'><h6 className='mt-1 mb-1'>Write a new ski area review</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-para mt-5\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half mb-3 center-aligned'>\r\n <Link to='/japan-ski-resorts/photos'><h4>Photos</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to='/japan-ski-resorts/photos'>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Photos.svg' fluid='true' alt='Photos' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9\">\r\n <div className='mb-2'>Photos of ski areas from around Japan submitted by SnowJapan readers. Photos of specific ski areas are available in the relevant ski area section.</div>\r\n <div>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-right-5\">\r\n <Link to={`${window.$baseSkiAreaUrl}/photos`} className='btn btn-primary w-100 sj-box-dark-blue mt-2'><h6 className='mt-1 mb-1'>View photos</h6></Link>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-left-5\">\r\n <Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-2'><h6 className='mt-1 mb-1'>Upload new ski area photos</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-para mt-5\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half mb-3 center-aligned'>\r\n <Link to={`${window.$baseRouteFinderUrl}`}><h4>Route Finder</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to={`${window.$baseRouteFinderUrl}`}>\r\n <Image src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Route-finder.svg\" alt=\"Japan Ski Areas Route Finder\" fluid='true' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9\">\r\n <div>Discover the route and direction to any ski area in Japan from your current location or plan a trip between various Japanese ski areas.</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-para mt-5\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half mb-3 center-aligned'>\r\n <Link to='/guides/graphs'><h4>Japan's ski areas in graphs</h4></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <Link to='/guides/graphs'>\r\n <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Graphs-Data.svg' fluid='true' alt='Graphs' />\r\n </Link>\r\n </div>\r\n <div className=\"col-md-9\">\r\n <div>Compare various ski area and ski lift data for Japan and each prefecture.</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://gala.co.jp/winter/english/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-gala-yuzawa.jpg' fluid='true' alt='listing-gala-yuzawa' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1 mt-3'>\r\n <Link to='/listings/resort-spotlights/geto-kogen'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-geto-kogen.jpg' fluid='true' alt='listing-geto-kogen.jpg' /></Link>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center2 mt-3'>\r\n {/*<a href='https://wheelshokkaido.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-wheels-transfers-hokkaido.png' fluid='true' alt='wheels-transfers-hokkaido' /></a>*/}\r\n <Link to='/listings/resort-spotlights/white-world-oze-iwakura'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-white-world-oze-iwakura.jpg' fluid='true' alt='white-world-oze-iwakura' /></Link>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-right mt-3'>\r\n {/*<Link to='/listings/resort-spotlights/white-world-oze-iwakura'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-white-world-oze-iwakura.jpg' fluid='true' alt='white-world-oze-iwakura' /></Link>*/}\r\n <a href='https://ishiuchi.or.jp/winter' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-ishiuchi-maruyama.jpg' fluid='true' alt='ishiuchi-maruyama' /></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {/*<div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://www.hakunori.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-hakuba-norikura.jpg' fluid='true' alt='hakuba-norikura' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1 mt-3'>\r\n <a href='https://ishiuchi.or.jp/en/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-ishiuchi-maruyama.jpg' fluid='true' alt='ishiuchi-maruyama' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center2 mt-3'>\r\n <a href='https://www.snowjapan.com/listings/travel/yuzawa-minamiuonuma-eleven-plus' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-eleven-plus.jpg' alt='listing-naspa' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-right mt-3'>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>*/}\r\n </div>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default SkiAreaHome;","import { useState, useEffect } from 'react'\r\n\r\nconst PrefectureCheckList = ({ selectedPrefectures, options, onChange }) => {\r\n const [prefectureData, setPrefectureData] = useState(options);\r\n\r\n const toggle = index => {\r\n const newData = [...prefectureData];\r\n newData.splice(index, 1, {\r\n name: prefectureData[index].name,\r\n uniqueName: prefectureData[index].uniqueName,\r\n checked: !prefectureData[index].checked\r\n });\r\n setPrefectureData(newData);\r\n onChange(newData);\r\n };\r\n\r\n useEffect(() => {\r\n if (selectedPrefectures.length > 0) {\r\n setPrefectureData(selectedPrefectures)\r\n }\r\n }, [selectedPrefectures]);\r\n\r\n return (\r\n <>\r\n <h3>Prefectures</h3>\r\n {prefectureData.map((item, index) => (\r\n <div key={item.uniqueName}>\r\n <label>\r\n <input\r\n readOnly\r\n type=\"checkbox\"\r\n checked={item.checked || false}\r\n onClick={() => toggle(index)}\r\n /> {item.name}\r\n </label><br />\r\n </div>\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default PrefectureCheckList;","import { useState, useEffect } from 'react'\r\nimport styled from 'styled-components';\r\n\r\nconst CheckboxText = styled.span`\r\n ${props => props.Disabled && `\r\n color: #b7b7b7;\r\n `}\r\n`;\r\n\r\nconst TownCheckList = ({ selectedPrefectures, selectedTowns, options, onChange }) => {\r\n const [townData, setTownData] = useState(options);\r\n\r\n const toggle = index => {\r\n const newData = [...townData];\r\n newData.splice(index, 1, {\r\n name: townData[index].name,\r\n uniqueName: townData[index].uniqueName,\r\n townType: townData[index].townType,\r\n townTypeStr: townData[index].townTypeStr,\r\n prefectureUniqueName: townData[index].prefectureUniqueName,\r\n checked: !townData[index].checked,\r\n disabled: townData[index].disabled\r\n });\r\n setTownData(newData);\r\n onChange(newData);\r\n };\r\n\r\n const refreshTownOpetions = (prefectures, allTowns, selTowns) => {\r\n let selectedTownList = selTowns.filter(function (currentElement) {\r\n return (currentElement.checked);\r\n });\r\n\r\n var selectedTownUniqueNames = selectedTownList.map(function (obj) { return obj.uniqueName; });\r\n\r\n allTowns = allTowns.map(item => {\r\n item.disabled = false;\r\n item.checked = selectedTownUniqueNames.includes(item.uniqueName);\r\n return item;\r\n })\r\n\r\n setTownData(allTowns);\r\n }\r\n\r\n useEffect(() => {\r\n refreshTownOpetions(selectedPrefectures, options, selectedTowns);\r\n }, [selectedPrefectures, options, selectedTowns]);\r\n\r\n return (\r\n <>\r\n <h3>Towns</h3>\r\n {townData.map((item, index) => (\r\n <div key={item.uniqueName}>\r\n <label>\r\n <input\r\n readOnly\r\n type=\"checkbox\"\r\n checked={item.checked || false}\r\n onClick={() => toggle(index)}\r\n disabled={item.disabled}\r\n /> <CheckboxText Disabled={item.disabled}>{item.name} {item.townTypeStr}</CheckboxText>\r\n </label><br />\r\n </div>\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default TownCheckList;","import { useState, useEffect } from 'react'\r\nimport styled from 'styled-components';\r\n\r\nconst CheckboxText = styled.span`\r\n ${props => props.Disabled && `\r\n color: #b7b7b7;\r\n `}\r\n`;\r\n\r\nconst AreaCheckList = ({ selectedPrefectures, selectedAreas, options, onChange }) => {\r\n const [areaData, setAreaData] = useState(options);\r\n\r\n const toggle = index => {\r\n const newData = [...areaData];\r\n newData.splice(index, 1, {\r\n name: areaData[index].name,\r\n uniqueName: areaData[index].uniqueName,\r\n prefectureUniqueName: areaData[index].prefectureUniqueName,\r\n checked: !areaData[index].checked,\r\n disabled: areaData[index].disabled\r\n });\r\n setAreaData(newData);\r\n onChange(newData);\r\n };\r\n\r\n const refreshAreaOpetions = (prefectures, allAreas, selAreas) => {\r\n let selectedAreaList = selAreas.filter(function (currentElement) {\r\n return (currentElement.checked);\r\n });\r\n\r\n var selectedAreaUniqueNames = selectedAreaList.map(function (obj) { return obj.uniqueName; });\r\n\r\n allAreas = allAreas.map(item => {\r\n item.disabled = false;\r\n item.checked = selectedAreaUniqueNames.includes(item.uniqueName);\r\n return item;\r\n })\r\n\r\n setAreaData(allAreas);\r\n }\r\n\r\n useEffect(() => {\r\n refreshAreaOpetions(selectedPrefectures, options, selectedAreas);\r\n }, [selectedPrefectures, options, selectedAreas]);\r\n\r\n return (\r\n <>\r\n <h3>Areas</h3>\r\n {areaData.map((item, index) => (\r\n <div key={item.uniqueName}>\r\n <label>\r\n <input\r\n readOnly\r\n type=\"checkbox\"\r\n checked={item.checked || false}\r\n onClick={() => toggle(index)}\r\n disabled={item.disabled || false}\r\n /> <CheckboxText Disabled={item.disabled}>{item.name}</CheckboxText>\r\n </label><br />\r\n </div>\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default AreaCheckList;","import { useState, useEffect } from 'react'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport SkiAreaListTable from './SkiAreaListTable';\r\n\r\nconst SearchResult = ({ allSkiAreaList, ClearSort, prefectures, areas, towns, noFilter }) => {\r\n\r\n const [searchedSkiAreaList, setSearchedSkiAreaList] = useState(allSkiAreaList)\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Sort By: Ski area name [A-Z]')\r\n const [sortColumn, setSortColumn] = useState('Name')\r\n const [sortOrder, setSortOrder] = useState('')\r\n const [searchFilterPrefecture, setSearchFilterPrefecture] = useState('')\r\n const [searchFilterArea, setSearchFilterArea] = useState('')\r\n const [searchFilterTown, setSearchFilterTown] = useState('')\r\n\r\n const ClearSortValues = () => {\r\n setButtonTitle('Sort By: Ski area name [A-Z]')\r\n setSortColumn('Name')\r\n setSortOrder('')\r\n }\r\n\r\n const PerpareSearchFilter = () => {\r\n if (prefectures.length > 0) {\r\n\r\n let selectedPrefectures = prefectures.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let prefectureList = [...new Set(selectedPrefectures.map(item => item.name))].sort();\r\n if (prefectureList.length > 0) {\r\n setSearchFilterPrefecture(prefectureList.join(', '))\r\n }\r\n }\r\n\r\n if (areas.length > 0) {\r\n\r\n let selectedAreas = areas.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let areaList = [...new Set(selectedAreas.map(item => item.name))].sort();\r\n\r\n if (areaList.length > 0) {\r\n setSearchFilterArea(areaList.join(', '))\r\n }\r\n }\r\n\r\n if (towns.length > 0) {\r\n\r\n let selectedTowns = towns.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let townList = [...new Set(selectedTowns.map(item => item.name))].sort();\r\n\r\n if (townList.length > 0) {\r\n setSearchFilterTown(townList.join(', '))\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n PerpareSearchFilter()\r\n setSearchedSkiAreaList(allSkiAreaList)\r\n ClearSortValues()\r\n if (noFilter) {\r\n setSearchFilterPrefecture('')\r\n setSearchFilterArea('')\r\n setSearchFilterTown('')\r\n }\r\n }, [allSkiAreaList, noFilter])\r\n\r\n useEffect(() => {\r\n ClearSort.current = ClearSortValues\r\n }, [ClearSort])\r\n\r\n const SortResult = (evtKey, evt) => {\r\n\r\n var sortedResult = []\r\n var sortColumn = ''\r\n var sortOrder = ''\r\n\r\n if (evtKey === '1' || evtKey === '2') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '2') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"\"\r\n\r\n } else if (evtKey === '3' || evtKey === '4') {\r\n if (evtKey === '3') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.MaximumElevation < b.MaximumElevation) return 1;\r\n if (a.MaximumElevation > b.MaximumElevation) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '4') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.MaximumElevation > b.MaximumElevation) return 1;\r\n if (a.MaximumElevation < b.MaximumElevation) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Top (m)\"\r\n\r\n } else if (evtKey === '5' || evtKey === '6') {\r\n if (evtKey === '5') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.MinimumElevation < b.MinimumElevation) return 1;\r\n if (a.MinimumElevation > b.MinimumElevation) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '6') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.MinimumElevation > b.MinimumElevation) return 1;\r\n if (a.MinimumElevation < b.MinimumElevation) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Bottom (m)\"\r\n\r\n } else if (evtKey === '7' || evtKey === '8') {\r\n if (evtKey === '7') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.VerticalDifference < b.VerticalDifference) return 1;\r\n if (a.VerticalDifference > b.VerticalDifference) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '8') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.VerticalDifference > b.VerticalDifference) return 1;\r\n if (a.VerticalDifference < b.VerticalDifference) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Vertical (m)\"\r\n\r\n } else if (evtKey === '9' || evtKey === '10') {\r\n if (evtKey === '9') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiLifts < b.TotalSkiLifts) return 1;\r\n if (a.TotalSkiLifts > b.TotalSkiLifts) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '10') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiLifts > b.TotalSkiLifts) return 1;\r\n if (a.TotalSkiLifts < b.TotalSkiLifts) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Lifts\"\r\n\r\n } else if (evtKey === '11' || evtKey === '12') {\r\n if (evtKey === '11') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiCourses < b.TotalSkiCourses) return 1;\r\n if (a.TotalSkiCourses > b.TotalSkiCourses) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '12') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiCourses > b.TotalSkiCourses) return 1;\r\n if (a.TotalSkiCourses < b.TotalSkiCourses) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Courses\"\r\n\r\n } else if (evtKey === '13' || evtKey === '14') {\r\n if (evtKey === '13') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.LongestCourse < b.LongestCourse) return 1;\r\n if (a.LongestCourse > b.LongestCourse) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '14') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.LongestCourse > b.LongestCourse) return 1;\r\n if (a.LongestCourse < b.LongestCourse) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Longest (m)\"\r\n\r\n } else if (evtKey === '15' || evtKey === '16') {\r\n if (evtKey === '15') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.SteepestSlope < b.SteepestSlope) return 1;\r\n if (a.SteepestSlope > b.SteepestSlope) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '16') {\r\n sortedResult = searchedSkiAreaList.sort(function (a, b) {\r\n if (a.SteepestSlope > b.SteepestSlope) return 1;\r\n if (a.SteepestSlope < b.SteepestSlope) return -1;\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Steepest (º)\"\r\n }\r\n\r\n setSearchedSkiAreaList(sortedResult)\r\n setButtonTitle('Sort by: ' + evt.target.innerText)\r\n setSortColumn(sortColumn)\r\n setSortOrder(sortOrder)\r\n }\r\n\r\n if (searchedSkiAreaList.length > 0) {\r\n return (\r\n <div className='mt-4'>\r\n <div className='row sj-no-bg sj-row-no-margin-padding'>\r\n <div className='col-md-6 sj-row-no-margin-padding'>\r\n {searchFilterPrefecture !== '' &&\r\n <div><strong>[Prefecture] </strong>{searchFilterPrefecture}</div>\r\n }\r\n {searchFilterArea !== '' &&\r\n <div><strong>[Area] </strong>{searchFilterArea}</div>\r\n }\r\n {searchFilterTown !== '' &&\r\n <div><strong>[Town] </strong>{searchFilterTown}</div>\r\n }\r\n {(searchFilterPrefecture === '' && searchFilterArea === '' && searchFilterTown === '') &&\r\n <div>No filters selected</div>\r\n }\r\n </div>\r\n <div className='col-md-6 right-aligned sj-row-no-margin-padding'>\r\n <DropdownButton align=\"end\" title={buttonTitle} onSelect={SortResult} id=\"dropdown-menu-align-end\" className='sj-large-font-button'>\r\n <Dropdown.Item eventKey=\"1\">Ski area name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"2\">Ski area name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"3\">Maximum elevation [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"4\">Maximum elevation [lowest{'>'}highest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"5\">Minimum elevation [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"6\">Minimum elevation [lowest{'>'}highest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"7\">Vertical [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"8\">Vertical [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"9\">Lifts [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"10\">Lifts [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"11\">Courses [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"12\">Courses [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"13\">Longest [longest{'>'}shortest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"14\">Longest [shortest{'>'}longest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"15\">Steepest [steepest{'>'}gentlest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"16\">Steepest [gentlest{'>'}steepest]</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n <SkiAreaListTable\r\n tableData={searchedSkiAreaList}\r\n sortColumn={sortColumn}\r\n sortOrder={sortOrder}\r\n headingColumns={['', 'Top (m)', 'Bottom (m)', 'Vertical (m)', 'Lifts', 'Courses', 'Longest (m)', 'Steepest (º)']}\r\n //headingColumns={['Name', 'Town', 'Top', 'Bottom', 'Vertical', 'Ski Lifts', 'Ski Courses', 'Longest Course', 'Steepest Run']}\r\n dataMapping={['Name', 'MaximumElevation', 'MinimumElevation', 'VerticalDifference', 'TotalSkiLifts', 'TotalSkiCourses', 'LongestCourse', 'SteepestSlope']}\r\n title={`Currently ${allSkiAreaList.length} ski areas selected`}\r\n />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <>\r\n <h3>No Result Found</h3>\r\n </>\r\n )\r\n }\r\n};\r\n\r\nexport default SearchResult;","import { useState, useEffect, useRef } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport { Button, Offcanvas } from 'react-bootstrap'\r\nimport Loader from '../Common/Loader'\r\nimport PrefectureCheckList from '../Common/PrefectureCheckList'\r\nimport TownCheckList from '../Common/TownCheckList'\r\nimport AreaCheckList from '../Common/AreaCheckList'\r\nimport SearchResult from './SearchResult'\r\n\r\nconst SkiAreaSearch = ({ skiAreaList }) => {\r\n\r\n const params = useParams()\r\n\r\n const [allSkiAreaList, setAllSkiAreaList] = useState([])\r\n\r\n // Prefectures\r\n const [prefectures, setPrefectures] = useState([])\r\n const [selectedPrefectures, setSelectedPrefectures] = useState([])\r\n\r\n // Areas\r\n const [allAreas, setAllAreas] = useState([])\r\n const [selectedAreas, setSelectedAreas] = useState([])\r\n\r\n // Towns\r\n const [allTowns, setAllTowns] = useState([])\r\n const [selectedTowns, setSelectedTowns] = useState([])\r\n\r\n const ClearSort = useRef(null)\r\n const [show, setShow] = useState(false)\r\n\r\n const handleClose = () => setShow(false)\r\n const handleShow = () => setShow(true)\r\n\r\n const [noFilter, setNoFilter] = useState(true)\r\n\r\n // Pre-Searched Prefecture, Area and Town List\r\n const getAllSkiAreaPrefectures = (resultSkiAreaList) => {\r\n if (resultSkiAreaList.length > 0) {\r\n const prefectures = [...new Map(resultSkiAreaList.map(item => [item['PrefectureUniqueName'], item])).values()]\r\n\r\n const uniquePrefectures = prefectures.map(p => ({ name: p.PrefectureName, uniqueName: p.PrefectureUniqueName, checked: false }))\r\n\r\n uniquePrefectures.sort(function (a, b) {\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n\r\n })\r\n\r\n setPrefectures(uniquePrefectures)\r\n }\r\n }\r\n\r\n const getAllSkiAreaAreas = (allSkiAreas) => {\r\n\r\n if (allSkiAreas.length > 0) {\r\n const areas = [...new Map(allSkiAreas.map(item => [item['AreaUniqueName'], item])).values()]\r\n\r\n let filteredAreas = areas.filter(function (currentElement) {\r\n return (currentElement.AreaUniqueName != null)\r\n })\r\n\r\n const uniqueAreas = filteredAreas.map(a => ({ name: a.AreaName, uniqueName: a.AreaUniqueName, prefectureUniqueName: a.PrefectureUniqueName, checked: false, disabled: false }));\r\n\r\n uniqueAreas.sort(function (a, b) {\r\n if (a.name === null || b.name === null) {\r\n return 0\r\n }\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n setAllAreas(uniqueAreas)\r\n }\r\n }\r\n\r\n const getAllSkiAreaTowns = (allSkiAreas) => {\r\n if (allSkiAreas.length > 0) {\r\n const towns = [...new Map(allSkiAreas.map(item => [item['TownUniqueName'], item])).values()];\r\n\r\n const uniqueTowns = towns.map(t => ({ name: t.TownName, uniqueName: t.TownUniqueName, townTypeStr: t.TownTypeStr, prefectureUniqueName: t.PrefectureUniqueName, checked: false, disabled: false }));\r\n\r\n uniqueTowns.sort(function (a, b) {\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n\r\n })\r\n\r\n setAllTowns(uniqueTowns)\r\n }\r\n }\r\n\r\n const getSearchResult = (thisSkiAreaList) => {\r\n let searchedSkiAreas = thisSkiAreaList\r\n\r\n // Prefecture Search\r\n let selectedPrefectureList = selectedPrefectures.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n });\r\n\r\n var searchedSkiAreasPrefecture = []\r\n var searchedSkiAreasArea = []\r\n var searchedSkiAreasTown = []\r\n\r\n if (selectedPrefectureList.length > 0) {\r\n\r\n var prefectureUniqueNames = selectedPrefectureList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedSkiAreasPrefecture = thisSkiAreaList.filter(({ PrefectureUniqueName }) => prefectureUniqueNames.includes(PrefectureUniqueName))\r\n }\r\n\r\n // Area Search\r\n let selectedAreaList = selectedAreas.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n });\r\n\r\n if (selectedAreaList.length > 0) {\r\n\r\n var areaUniqueNames = selectedAreaList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedSkiAreasArea = thisSkiAreaList.filter(({ AreaUniqueName }) => areaUniqueNames.includes(AreaUniqueName))\r\n }\r\n\r\n // Town Search\r\n let selectedTownList = selectedTowns.filter(function (currentElement) {\r\n return (currentElement.checked);\r\n });\r\n\r\n if (selectedTownList.length > 0) {\r\n\r\n var townUniqueNames = selectedTownList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedSkiAreasTown = thisSkiAreaList.filter(({ TownUniqueName }) => townUniqueNames.includes(TownUniqueName))\r\n }\r\n\r\n if (selectedPrefectureList.length > 0 || selectedAreaList.length > 0 || selectedTownList.length > 0) {\r\n searchedSkiAreas = [...new Set([...searchedSkiAreasPrefecture, ...searchedSkiAreasArea, ...searchedSkiAreasTown])]\r\n\r\n setNoFilter(false)\r\n }\r\n\r\n searchedSkiAreas = searchedSkiAreas.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase()\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n setAllSkiAreaList(searchedSkiAreas)\r\n getAllSkiAreaPrefectures(searchedSkiAreas)\r\n getAllSkiAreaAreas(skiAreaList)\r\n getAllSkiAreaTowns(skiAreaList)\r\n }\r\n\r\n useEffect(() => {\r\n getSearchResult(skiAreaList)\r\n\r\n }, [params, skiAreaList, selectedPrefectures, selectedTowns, selectedAreas])\r\n\r\n const ClearSearch = () => {\r\n\r\n if (selectedPrefectures.length > 0) {\r\n const selPrefectures = selectedPrefectures.map(p => ({ name: p.name, uniqueName: p.uniqueName, checked: false }));\r\n setSelectedPrefectures(selPrefectures)\r\n }\r\n\r\n if (selectedAreas.length > 0) {\r\n const selAreas = selectedAreas.map(a => ({ name: a.AreaName, uniqueName: a.AreaUniqueName, prefectureUniqueName: a.PrefectureUniqueName, checked: false, disabled: false }));\r\n setSelectedAreas(selAreas)\r\n }\r\n\r\n if (selectedTowns.length > 0) {\r\n const selTowns = selectedTowns.map(t => ({ name: t.TownName, uniqueName: t.TownUniqueName, prefectureUniqueName: t.PrefectureUniqueName, checked: false, disabled: false }));\r\n setSelectedTowns(selTowns)\r\n }\r\n\r\n getSearchResult(skiAreaList)\r\n setNoFilter(true)\r\n\r\n ClearSort.current()\r\n }\r\n\r\n if (prefectures.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <>\r\n <Button variant=\"primary\" onClick={handleShow} className='sj-large-font-button sj-red-bg'>{'< Select filters'}</Button> \r\n <Button variant=\"primary\" onClick={ClearSearch} className='sj-large-font-button'>Clear all filters</Button>\r\n <Offcanvas show={show} onHide={handleClose}>\r\n <Offcanvas.Header closeButton>\r\n <Offcanvas.Title>\r\n <h3>Choose filter(s)</h3>\r\n </Offcanvas.Title>\r\n </Offcanvas.Header>\r\n <Offcanvas.Body>\r\n <div>Choose any combination of filters from this list of Prefectures, Areas and Towns.</div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body'>\r\n <PrefectureCheckList\r\n options={prefectures}\r\n selectedPrefectures={selectedPrefectures}\r\n onChange={data => {\r\n setSelectedPrefectures(data);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body'>\r\n <AreaCheckList\r\n options={allAreas}\r\n selectedPrefectures={selectedPrefectures}\r\n selectedAreas={selectedAreas}\r\n onChange={data => {\r\n setSelectedAreas(data);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body'>\r\n <TownCheckList\r\n options={allTowns}\r\n selectedPrefectures={selectedPrefectures}\r\n selectedTowns={selectedTowns}\r\n onChange={data => {\r\n setSelectedTowns(data);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Offcanvas.Body>\r\n </Offcanvas>\r\n <div>\r\n <SearchResult allSkiAreaList={allSkiAreaList} ClearSort={ClearSort} prefectures={selectedPrefectures} areas={selectedAreas} towns={selectedTowns} noFilter={noFilter} />\r\n </div>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default SkiAreaSearch","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from '../Common/Loader'\r\nimport SkiAreaSearch from './SkiAreaSearch'\r\n\r\nconst SkiAreaSearchContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n\r\n const fetchSkiAreaList = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/list/All`\r\n }).then(dataResortList => {\r\n setSkiAreaList(dataResortList.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSkiAreaList()\r\n }, [params])\r\n\r\n if (skiAreaList.length > 0) {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Discover the ski areas of Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Discover the ski areas of Japan using various filters and sorting criteria.\" />\r\n </Helmet>\r\n <h3>Discover Japan’s ski areas</h3>\r\n <SkiAreaSearch params={params} skiAreaList={skiAreaList} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n}\r\n\r\nexport default SkiAreaSearchContainer","import axios from 'axios'\r\nimport { useEffect, useState } from 'react'\r\n\r\nconst useSkiAreaPhotos = (queryPhoto, userName, pageNumberPhoto) => {\r\n\r\n const [loadingPhoto, setLoadingPhoto] = useState(false)\r\n const [errorPhoto, setErrorPhoto] = useState(false)\r\n const [photos, setPhotos] = useState([])\r\n const [hasMorePhoto, setHasMorePhoto] = useState(false)\r\n\r\n useEffect(() => {\r\n setPhotos([])\r\n }, [queryPhoto, userName])\r\n\r\n useEffect(() => {\r\n if (queryPhoto === '' && userName === '')\r\n return null\r\n\r\n setLoadingPhoto(true)\r\n setErrorPhoto(false)\r\n\r\n let cancelPhoto\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/photos/${pageNumberPhoto}`,\r\n data: {\r\n resortid: queryPhoto,\r\n username: userName\r\n },\r\n cancelToken: new axios.CancelToken(c => cancelPhoto = c)\r\n }).then(resPhoto => {\r\n if (resPhoto.data === 'No Data Found') {\r\n setHasMorePhoto(false)\r\n setLoadingPhoto(false)\r\n return () => cancelPhoto()\r\n }\r\n\r\n setPhotos(prevPhotos => {\r\n return [...new Set([...prevPhotos, ...resPhoto.data.map(p => p)])]\r\n })\r\n setHasMorePhoto(resPhoto.data.length > 0)\r\n setLoadingPhoto(false)\r\n }).catch(e => {\r\n if (axios.isCancel(e))\r\n return\r\n setErrorPhoto(true)\r\n })\r\n\r\n return () => cancelPhoto()\r\n\r\n }, [queryPhoto, pageNumberPhoto])\r\n\r\n return { loadingPhoto, errorPhoto, photos, hasMorePhoto }\r\n};\r\n\r\nexport default useSkiAreaPhotos;","import PropTypes from 'prop-types'\r\nimport { Button, Modal, Image } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\nimport { useState } from 'react'\r\n\r\nconst SkiAreaPhotoDetail = ({ photo }) => {\r\n /*const [show, setShow] = useState(false)\r\n\r\n const handleClose = () => {\r\n setShow(false)\r\n }\r\n const showModal = () => {\r\n setShow(true)\r\n }*/\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{photo.Caption}</h4>\r\n </div>\r\n {(photo.ResortUniqueName !== undefined && photo.ResortUniqueName !== null) &&\r\n <div className=\"row sj-row-small-margin-padding sj-no-bg\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${photo.PrefectureUniqueName}/${photo.TownUniqueName}/${photo.ResortUniqueName}`}><h4>{photo.ResortName}</h4></Link>\r\n </div>\r\n <div className='sj-large-font'>\r\n <Link to={`${window.$baseSkiAreaUrl}/town/${photo.TownUniqueName}`}>{photo.TownName} {photo.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${photo.PrefectureUniqueName}`}>{photo.PrefectureName}</Link>\r\n </div>\r\n </div>\r\n }\r\n <div className='sj-row-small-margin-padding center-aligned'>\r\n <Image src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`thumb-${photo.Id}`} fluid='true' />\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n <hr className='mt-5' />\r\n {/*<Modal\r\n show={show}\r\n size=\"lg\"\r\n onHide={handleClose}\r\n backdrop=\"static\"\r\n keyboard={false}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>{photo.Caption}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className='center-aligned'>\r\n <img src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`full-${photo.Id}`} />\r\n </div>\r\n {(photo.ResortUniqueName !== undefined && photo.ResortUniqueName !== null) &&\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${photo.PrefectureUniqueName}/${photo.TownUniqueName}/${photo.ResortUniqueName}`}><h5>{photo.ResortName}</h5></Link>\r\n (<Link to={`${window.$baseSkiAreaUrl}/town/${photo.TownUniqueName}`}>{photo.TownName} {photo.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${photo.PrefectureUniqueName}`}>{photo.PrefectureName}</Link>)\r\n </div>\r\n </div>\r\n }\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>*/}\r\n </div>\r\n )\r\n};\r\n\r\nSkiAreaPhotoDetail.propTypes = {\r\n photo: PropTypes.object.isRequired\r\n}\r\n\r\nexport default SkiAreaPhotoDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport Loader from '../Common/Loader'\r\nimport useSkiAreaPhotos from '../CustomHooks/useSkiAreaPhotos'\r\nimport SkiAreaPhotoDetail from './SkiAreaPhotoDetail'\r\n\r\nconst SkiAreaPhotos = () => {\r\n\r\n const queryPhoto = 0\r\n const userName = ''\r\n const [pageNumberPhoto, setPaegNumberPhoto] = useState(1)\r\n\r\n const {\r\n loadingPhoto,\r\n errorPhoto,\r\n photos,\r\n hasMorePhoto\r\n } = useSkiAreaPhotos(queryPhoto, userName, pageNumberPhoto)\r\n\r\n const observerPhoto = useRef()\r\n const lastPhotoElementRef = useCallback(nodePhoto => {\r\n if (loadingPhoto)\r\n return\r\n if (observerPhoto.current)\r\n observerPhoto.current.disconnect()\r\n observerPhoto.current = new IntersectionObserver(entriesPhoto => {\r\n if (entriesPhoto[0].isIntersecting && hasMorePhoto) {\r\n setPaegNumberPhoto(prevPageNumberPhoto => prevPageNumberPhoto + 1)\r\n }\r\n })\r\n\r\n if (nodePhoto)\r\n observerPhoto.current.observe(nodePhoto)\r\n }, [loadingPhoto, hasMorePhoto])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Photos from ski areas around Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Photos from ski and snowboard areas throughout Japan, submitted by SnowJapan readers.\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Photos.svg\" alt='snowjapan-photo' /></div>\r\n <div>\r\n <h3>Japanese ski area photos</h3>\r\n <div className=\"sj-para\">\r\n Photos taken at ski areas throughout Japan, as posted by SnowJapan members. Photos for each ski area also appear within the relevant section on SnowJapan. If you are looking for photos of a specific ski area, you can find them there.\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Write a new ski area review</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className=\"sj-para\">\r\n <h3>Recent photos</h3>\r\n </div>\r\n {photos.map((photo, index) => {\r\n if (photos.length === index + 1) {\r\n return (\r\n <div ref={lastPhotoElementRef} key={photo.Id}>\r\n <SkiAreaPhotoDetail photo={photo} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={photo.Id}>\r\n <SkiAreaPhotoDetail photo={photo} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingPhoto &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorPhoto && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default SkiAreaPhotos;","import axios from 'axios'\r\nimport { useEffect, useState } from 'react'\r\n\r\nconst useSkiAreaReviews = (queryReview, userName, pageNumberReview) => {\r\n\r\n const [loadingReview, setLoadingReview] = useState(false)\r\n const [errorReview, setErrorReview] = useState(false)\r\n const [reviews, setReviews] = useState([])\r\n const [hasMoreReview, setHasMoreReview] = useState(false)\r\n\r\n useEffect(() => {\r\n setReviews([])\r\n }, [queryReview, userName])\r\n\r\n useEffect(() => {\r\n if (queryReview === '' && userName === '')\r\n return null\r\n\r\n setLoadingReview(true)\r\n setErrorReview(false)\r\n\r\n let cancelReview\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/reviews/${pageNumberReview}`,\r\n data: {\r\n resortid: queryReview,\r\n username: userName\r\n },\r\n cancelToken: new axios.CancelToken(c => cancelReview = c)\r\n }).then(resReview => {\r\n if (resReview.data === 'No Data Found') {\r\n setHasMoreReview(false)\r\n setLoadingReview(false)\r\n return () => cancelReview()\r\n }\r\n setReviews(prevReviews => {\r\n return [...new Set([...prevReviews, ...resReview.data.map(p => p)])]\r\n })\r\n setHasMoreReview(resReview.data.length > 0)\r\n setLoadingReview(false)\r\n }).catch(e => {\r\n if (axios.isCancel(e))\r\n return\r\n setErrorReview(true)\r\n })\r\n\r\n return () => cancelReview()\r\n\r\n }, [queryReview, pageNumberReview])\r\n\r\n return { loadingReview, errorReview, reviews, hasMoreReview }\r\n};\r\n\r\nexport default useSkiAreaReviews;","import { Link } from 'react-router-dom'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst SkiAreaReviewDetail = ({ review }) => {\r\n return (\r\n <div className='sj-row'>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{review.Headline}</h4>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding sj-no-bg\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${review.PrefectureUniqueName}/${review.TownUniqueName}/${review.ResortUniqueName}`}><h4>{review.ResortName}</h4></Link>\r\n </div>\r\n <div className='sj-large-font'>\r\n <Link to={`${window.$baseSkiAreaUrl}/town/${review.TownUniqueName}`}>{review.TownName} {review.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${review.PrefectureUniqueName}`}>{review.PrefectureName}</Link>\r\n </div>\r\n </div>\r\n {review.ReviewText !== '' &&\r\n <div className='row sj-row-small-margin-padding sj-no-bg'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(review.ReviewText) }} />\r\n </div>\r\n }\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Date visited:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.DateVisited}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I liked:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsILiked}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I didn’t like:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsIDidnotLike}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Review by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ReaderName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Posted:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.SubmittedDayTh} {review.SubmittedMonthFull} {review.SubmittedYear}\r\n </div>\r\n </div>\r\n <hr className='mt-5' />\r\n </div>\r\n )\r\n};\r\n\r\nSkiAreaReviewDetail.propTypes = {\r\n review: PropTypes.object.isRequired\r\n}\r\n\r\nexport default SkiAreaReviewDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport Loader from '../Common/Loader'\r\nimport useSkiAreaReviews from '../CustomHooks/useSkiAreaReviews'\r\nimport SkiAreaReviewDetail from './SkiAreaReviewDetail'\r\n\r\nconst SkiAreaReviews = () => {\r\n const queryReview = 0\r\n const userName = ''\r\n const [pageNumberReview, setPaegNumberReview] = useState(1)\r\n\r\n const {\r\n loadingReview,\r\n errorReview,\r\n reviews,\r\n hasMoreReview\r\n } = useSkiAreaReviews(queryReview, userName, pageNumberReview)\r\n\r\n const observerReview = useRef()\r\n const lastReviewElementRef = useCallback(nodeReview => {\r\n if (loadingReview)\r\n return\r\n if (observerReview.current)\r\n observerReview.current.disconnect()\r\n observerReview.current = new IntersectionObserver(entriesReview => {\r\n if (entriesReview[0].isIntersecting && hasMoreReview) {\r\n setPaegNumberReview(prevPageNumberReview => prevPageNumberReview + 1)\r\n }\r\n })\r\n\r\n if (nodeReview)\r\n observerReview.current.observe(nodeReview)\r\n }, [loadingReview, hasMoreReview])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Reviews of ski areas around Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Reviews of ski and snowboard areas throughout Japan, submitted by SnowJapan readers.\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Reviews.svg\" alt='review' /></div>\r\n <div>\r\n <h3>Japanese ski area reviews</h3>\r\n <div className=\"sj-para\">\r\n Reviews of ski areas throughout Japan, as posted by SnowJapan members. The views expressed in these reviews are not those of SnowJapan. Reviews for each ski area also appear within the relevant section on SnowJapan. If you are looking for reviews of a specific ski area, you can find them there.\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Write a new ski area review</Link></h6>\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className=\"sj-para\">\r\n <h3>Recent reviews</h3>\r\n </div>\r\n {reviews.map((review, index) => {\r\n if (reviews.length === index + 1) {\r\n return (\r\n <div ref={lastReviewElementRef} key={review.Id}>\r\n <SkiAreaReviewDetail review={review} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={review.Id}>\r\n <SkiAreaReviewDetail review={review} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingReview &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorReview && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default SkiAreaReviews;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst Areas = () => {\r\n const [areaList, setAreaList] = useState([]);\r\n\r\n const fetchAreas = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/area/list`\r\n }).then(resArea => {\r\n setAreaList(resArea.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchAreas();\r\n }, []);\r\n\r\n return (\r\n\r\n <div className='ski-area-listing-holder'>\r\n <ul className=\"sj-no-bullets-thin\">\r\n {areaList.map(area => (\r\n <li key={area.Id}><Link to={`${window.$baseSkiAreaUrl}/area/${area.UniqueName}`}>{area.Name} ({area.TotalResorts})</Link></li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n};\r\n\r\nexport default Areas;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst Prefectures = () => {\r\n const [prefectureList, setPrefectureList] = useState([]);\r\n\r\n const fetchPrefectures = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/prefecture/list`\r\n }).then(resPrefecture => {\r\n setPrefectureList(resPrefecture.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchPrefectures()\r\n }, []);\r\n\r\n return (\r\n <div className='ski-area-listing-holder'>\r\n <ul className=\"sj-no-bullets-thin\">\r\n {prefectureList.map(prefecture => (\r\n <li key={prefecture.Id}><Link to={`${window.$baseSkiAreaUrl}/prefecture/${prefecture.UniqueName}`}>{prefecture.Name} ({prefecture.TotalResorts})</Link></li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n};\r\n\r\nexport default Prefectures;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst Towns = () => {\r\n\r\n\r\n const [townList, setTownList] = useState([]);\r\n\r\n const fetchTown = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/town/list`\r\n }).then(resTown => {\r\n setTownList(resTown.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchTown();\r\n }, []);\r\n\r\n return (\r\n <div className='ski-area-listing-holder'>\r\n <ul className=\"sj-no-bullets-thin\">\r\n {townList.map(town => (\r\n <li key={town.Id}><Link to={`${window.$baseSkiAreaUrl}/town/${town.UniqueName}`}>{town.Name} {town.TownTypeStr} ({town.TotalResorts})</Link></li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n};\r\n\r\nexport default Towns;","import { Helmet } from \"react-helmet\";\r\nimport Areas from './Areas'\r\nimport Prefectures from './Prefectures'\r\nimport Towns from './Towns'\r\n\r\nconst Listings = () => {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Listings of ski areas around Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Listings of all the ski areas in Japan by popular area, town and prefecture.\" />\r\n </Helmet>\r\n <h3>Ski areas by prefecture, town and region</h3>\r\n <div className='sj-para'>\r\n Discover all of the ski areas of Japan by prefecture, town and region. The number in brackets is the number of ski areas in each list. SnowJapan has assigned the regions lists as an additional way to discover well-known ski areas. It is not an official or geographical classification. We may add to or adjust those lists as we feel appropriate.\r\n </div>\r\n <div className='row sj-no-bg sj-row-no-margin-padding'>\r\n <div className='col-lg-4 col-sm-6 sj-row-no-margin-padding sj-guide-frame-first'>\r\n <div className='sj-guide-frame'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned\">\r\n <h4>Prefectures</h4>\r\n </div>\r\n <div className='sj-guide-frame-body'>\r\n <div>\r\n <img\r\n src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/pref.svg\" alt='prefecture' />\r\n </div>\r\n <div className='left-aligned mt-3 mb-2'>\r\n <h5>Discover ski areas by prefecture</h5>\r\n </div>\r\n <Prefectures />\r\n </div>\r\n </div>\r\n </div>\r\n <div className='col-lg-4 col-sm-6 sj-row-no-margin-padding sj-guide-frame-middle'>\r\n <div className='sj-guide-frame'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned\">\r\n <h4>Towns</h4>\r\n </div>\r\n <div className='sj-guide-frame-body'>\r\n <div>\r\n <img\r\n src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/town.svg\" alt='town' />\r\n </div>\r\n <div className='left-aligned mt-3 mb-2'>\r\n <h5>Discover ski areas by town</h5>\r\n </div>\r\n <Towns />\r\n </div>\r\n </div>\r\n </div>\r\n <div className='col-lg-4 col-sm-6 sj-row-no-margin-padding sj-guide-frame-last'>\r\n <div className='sj-guide-frame'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned\">\r\n <h4>Popular regions</h4>\r\n </div>\r\n <div className='sj-guide-frame-body'>\r\n <div>\r\n <img\r\n src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/area.svg\" alt='area' />\r\n </div>\r\n <div className='left-aligned mt-3 mb-2'>\r\n <h5>Discover ski areas by popular region</h5>\r\n </div>\r\n <Areas />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default Listings;","import { Fragment } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport SkiAreaHome from './Home'\r\nimport SkiAreaSearchContainer from './SkiAreaSearchContainer'\r\nimport SkiAreaPhotos from './SkiAreaPhotos'\r\nimport SkiAreaReviews from './SkiAreaReviews'\r\nimport SkiAreaListings from './Listings'\r\n\r\nconst SkiAreaContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n return (\r\n <Fragment>\r\n <>\r\n {\r\n {\r\n undefined: <SkiAreaHome />,\r\n 'discover': <SkiAreaSearchContainer />,\r\n 'reviews': <SkiAreaReviews />,\r\n 'photos': <SkiAreaPhotos />,\r\n 'listings': <SkiAreaListings />\r\n }[params.type]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default SkiAreaContainer","import { useState, useEffect } from 'react'\r\nimport { Image } from 'react-bootstrap'\r\n\r\nconst SkiAreaListMap = ({ skiAreaList, prefecture, area, town }) => {\r\n\r\n const [mapPath, setMapPath] = useState('');\r\n\r\n const getMapPath = (thisPrefecture, thisArea, thisTown) => {\r\n if (thisPrefecture !== undefined) {\r\n setMapPath('https://www.snowjapan.com//UploadedFiles/MapImages/Prefectures/' + thisPrefecture.MapImage)\r\n } else if (thisArea !== undefined) {\r\n setMapPath('https://www.snowjapan.com//UploadedFiles/MapImages/Areas/' + thisArea.MapImage)\r\n } else if (thisTown !== undefined) {\r\n setMapPath('https://www.snowjapan.com//UploadedFiles/MapImages/Towns/' + thisTown.MapImage)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getMapPath(prefecture, area, town);\r\n }, [skiAreaList, prefecture, area, town]);\r\n\r\n return (\r\n <>\r\n {mapPath !== '' &&\r\n <div className='mt-5'>\r\n <div className='empty-row center-aligned sj-map-andrew'>\r\n <Image src={mapPath} fluid='true' alt='ski area map' />\r\n </div>\r\n </div>\r\n }\r\n </>\r\n )\r\n};\r\n\r\nexport default SkiAreaListMap;","import { useState } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { GoogleMap, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';\r\n\r\nconst SkiAreaMapContainer = ({ mapCenter, mapZoom, skiAreaList }) => {\r\n\r\n const [selected, setSelected] = useState({});\r\n\r\n const onSelect = (item) => {\r\n const selectedItem = {\r\n name: item.Name,\r\n location: {\r\n lat: parseFloat(item.Location_Latitude),\r\n lng: parseFloat(item.Location_Longitude)\r\n },\r\n maximumElevation: item.MaximumElevation,\r\n minimumElevation: item.MinimumElevation,\r\n verticalDifference: item.VerticalDifference,\r\n totalSkiLifts: item.TotalSkiLifts,\r\n totalSkiCourses: item.TotalSkiCourses,\r\n longestCourse: item.LongestCourse,\r\n steepestSlope: item.SteepestSlope,\r\n uniqueName: item.UniqueName,\r\n prefectureUniqueName: item.PrefectureUniqueName,\r\n townUniqueName: item.TownUniqueName\r\n }\r\n\r\n setSelected(selectedItem);\r\n }\r\n\r\n const mapStyles = {\r\n height: \"100vh\",\r\n width: \"100%\"\r\n };\r\n\r\n return (\r\n <LoadScript\r\n googleMapsApiKey='AIzaSyAmyWUwcoNW504tXuRlQ_mZssrKEEhGn20'>\r\n <GoogleMap\r\n mapContainerStyle={mapStyles}\r\n zoom={mapZoom}\r\n center={mapCenter}\r\n >\r\n {\r\n skiAreaList.map(item => {\r\n return (\r\n <Marker key={item.UniqueName} position={{ lat: parseFloat(item.Location_Latitude), lng: parseFloat(item.Location_Longitude) }} onClick={() => onSelect(item)} />\r\n )\r\n })\r\n }\r\n {\r\n selected.location &&\r\n (\r\n <InfoWindow\r\n position={selected.location}\r\n clickable={true}\r\n onCloseClick={() => setSelected({})}\r\n >\r\n <>\r\n <Link to={`${window.$baseSkiAreaUrl}/${selected.prefectureUniqueName}/${selected.townUniqueName}/${selected.uniqueName}`}><h5>{selected.name}</h5></Link>\r\n <p className='info-box-text'><strong>Top:</strong> {selected.maximumElevation}m</p>\r\n <p className='info-box-text'><strong>Bottom:</strong> {selected.minimumElevation}m</p>\r\n <p className='info-box-text'><strong>Vertical:</strong> {selected.verticalDifference}m</p>\r\n <p className='info-box-text'><strong>Number of lifts:</strong> {selected.totalSkiLifts}</p>\r\n <p className='info-box-text'><strong>Number of courses:</strong> {selected.totalSkiCourses}</p>\r\n <p className='info-box-text'><strong>Longest course:</strong> {selected.longestCourse}m</p>\r\n <p className='info-box-text'><strong>Steepest run:</strong> {selected.steepestSlope}º</p>\r\n </>\r\n </InfoWindow>\r\n )\r\n }\r\n </GoogleMap>\r\n </LoadScript>\r\n )\r\n}\r\n\r\nexport default SkiAreaMapContainer;","import { useState, useEffect } from 'react'\r\nimport { Link, useParams, useLocation } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport { DropdownButton, Dropdown, Button, Collapse } from 'react-bootstrap'\r\nimport axios from 'axios'\r\nimport Loader from '../Common/Loader'\r\nimport SkiAreaListTable from './SkiAreaListTable'\r\nimport SkiAreaListMap from './SkiAreaListMap'\r\nimport SkiAreaMapContainer from '../Common/SkiAreaMapContainer'\r\nimport JapanMap from '../SkiArea/JapanMap'\r\n\r\nconst SkiAreaList = () => {\r\n\r\n const params = useParams()\r\n const location = useLocation()\r\n\r\n const [allSkiAreaList, setAllSkiAreaList] = useState([])\r\n const [prefecture, setPrefecture] = useState(undefined)\r\n const [area, setArea] = useState(undefined)\r\n const [town, setTown] = useState(undefined)\r\n //const [tableTitleName, setTableTitleName] = useState('');\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Sort By: Ski area name [A-Z]')\r\n const [sortColumn, setSortColumn] = useState('Name')\r\n const [sortOrder, setSortOrder] = useState('')\r\n\r\n const [open, setOpen] = useState(false)\r\n\r\n let requestType = ''\r\n\r\n const fetchPrefecture = async (prefectureUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/prefecture/${prefectureUniqueName}`\r\n }).then(resPrefecture => {\r\n setPrefecture(resPrefecture.data)\r\n })\r\n };\r\n\r\n const fetchArea = async (areaUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/area/${areaUniqueName}`\r\n }).then(resArea => {\r\n setArea(resArea.data)\r\n })\r\n };\r\n\r\n const fetchTown = async (townUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/town/${townUniqueName}`\r\n }).then(resTown => {\r\n setTown(resTown.data)\r\n })\r\n };\r\n\r\n if (location.pathname.includes('prefecture')) {\r\n requestType = 'prefecture'\r\n }\r\n else if (location.pathname.includes('area')) {\r\n requestType = 'area'\r\n }\r\n else if (location.pathname.includes('town')) {\r\n requestType = 'town'\r\n }\r\n\r\n const fetchSkiAreaList = async (requestType, resortUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/list/${requestType}/${resortUniqueName}`\r\n }).then(dataResortList => {\r\n setAllSkiAreaList(dataResortList.data)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n if (location.pathname.includes('prefecture')) {\r\n fetchPrefecture(params.key)\r\n }\r\n else if (location.pathname.includes('area')) {\r\n fetchArea(params.key)\r\n }\r\n else if (location.pathname.includes('town')) {\r\n fetchTown(params.key)\r\n }\r\n\r\n fetchSkiAreaList(requestType, params.key)\r\n\r\n }, [requestType, location.pathname, params.key])\r\n\r\n const SortResult = (evtKey, evt) => {\r\n\r\n var sortedResult = []\r\n var sortColumn = ''\r\n var sortOrder = ''\r\n\r\n if (evtKey === '1' || evtKey === '2') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '2') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"\"\r\n\r\n } else if (evtKey === '3' || evtKey === '4') {\r\n if (evtKey === '3') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.MaximumElevation < b.MaximumElevation) return 1\r\n if (a.MaximumElevation > b.MaximumElevation) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '4') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.MaximumElevation > b.MaximumElevation) return 1\r\n if (a.MaximumElevation < b.MaximumElevation) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Top (m)\"\r\n\r\n } else if (evtKey === '5' || evtKey === '6') {\r\n if (evtKey === '5') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.MinimumElevation < b.MinimumElevation) return 1\r\n if (a.MinimumElevation > b.MinimumElevation) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '6') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.MinimumElevation > b.MinimumElevation) return 1\r\n if (a.MinimumElevation < b.MinimumElevation) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Bottom (m)\"\r\n\r\n } else if (evtKey === '7' || evtKey === '8') {\r\n if (evtKey === '7') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.VerticalDifference < b.VerticalDifference) return 1\r\n if (a.VerticalDifference > b.VerticalDifference) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '8') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.VerticalDifference > b.VerticalDifference) return 1\r\n if (a.VerticalDifference < b.VerticalDifference) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Vertical (m)\"\r\n\r\n } else if (evtKey === '9' || evtKey === '10') {\r\n if (evtKey === '9') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiLifts < b.TotalSkiLifts) return 1\r\n if (a.TotalSkiLifts > b.TotalSkiLifts) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '10') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiLifts > b.TotalSkiLifts) return 1\r\n if (a.TotalSkiLifts < b.TotalSkiLifts) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Lifts\"\r\n\r\n } else if (evtKey === '11' || evtKey === '12') {\r\n if (evtKey === '11') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiCourses < b.TotalSkiCourses) return 1\r\n if (a.TotalSkiCourses > b.TotalSkiCourses) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '12') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.TotalSkiCourses > b.TotalSkiCourses) return 1\r\n if (a.TotalSkiCourses < b.TotalSkiCourses) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Courses\"\r\n\r\n } else if (evtKey === '13' || evtKey === '14') {\r\n if (evtKey === '13') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.LongestCourse < b.LongestCourse) return 1\r\n if (a.LongestCourse > b.LongestCourse) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '14') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.LongestCourse > b.LongestCourse) return 1\r\n if (a.LongestCourse < b.LongestCourse) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Longest (m)\"\r\n\r\n } else if (evtKey === '15' || evtKey === '16') {\r\n if (evtKey === '15') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.SteepestSlope < b.SteepestSlope) return 1\r\n if (a.SteepestSlope > b.SteepestSlope) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '16') {\r\n sortedResult = allSkiAreaList.sort(function (a, b) {\r\n if (a.SteepestSlope > b.SteepestSlope) return 1\r\n if (a.SteepestSlope < b.SteepestSlope) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Steepest (º)\"\r\n }\r\n\r\n setAllSkiAreaList(sortedResult)\r\n setButtonTitle('Sort by: ' + evt.target.innerText)\r\n setSortColumn(sortColumn)\r\n setSortOrder(sortOrder)\r\n }\r\n\r\n if (allSkiAreaList.length > 0 && (prefecture !== undefined || area !== undefined || town !== undefined)) {\r\n let mapCenter = {\r\n lat: 36.2048, lng: 138.2529\r\n }\r\n\r\n let mapZoomLevel = 13\r\n\r\n let tableTitle = ''\r\n let pageTitle = ''\r\n if (requestType === 'prefecture' && prefecture !== undefined) {\r\n tableTitle = prefecture.Name + ' prefecture'\r\n pageTitle = 'Ski areas in ' + prefecture.Name + ' | Introducing the ski areas of Japan | SnowJapan'\r\n mapCenter = {\r\n lat: parseFloat(prefecture.Location_Latitude), lng: parseFloat(prefecture.Location_Longitude)\r\n }\r\n mapZoomLevel = parseInt(prefecture.Location_MapZoomLevel)\r\n }\r\n\r\n if (requestType === 'area' && area !== undefined) {\r\n tableTitle = ' the ' + area.Name\r\n pageTitle = 'Ski areas in the ' + area.Name + ' | Introducing the ski areas of Japan | SnowJapan'\r\n\r\n mapCenter = {\r\n lat: parseFloat(area.Location_Latitude), lng: parseFloat(area.Location_Longitude)\r\n }\r\n mapZoomLevel = parseInt(area.Location_MapZoomLevel)\r\n }\r\n\r\n if (requestType === 'town' && town !== undefined) {\r\n\r\n tableTitle = town.Name + ' ' + town.TownTypeStr + ' (' + town.PrefectureName + ')'\r\n pageTitle = 'Ski areas in ' + town.Name + ' ' + town.TownTypeStr + ' (' + town.PrefectureName + ') | Introducing the ski areas of Japan | SnowJapan'\r\n\r\n mapCenter = {\r\n lat: parseFloat(town.Location_Latitude), lng: parseFloat(town.Location_Longitude)\r\n }\r\n mapZoomLevel = parseInt(town.Location_MapZoomLevel)\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{pageTitle}</title>\r\n </Helmet>\r\n <h3>Ski areas in {tableTitle}</h3>\r\n <div>\r\n <div className=\"empty-row\">\r\n Introducing the {allSkiAreaList.length} ski areas in {tableTitle}.\r\n </div>\r\n <div className=\"empty-row\">\r\n Read our introduction to the each of the prefectures of Japan <Link to='/guides/the-prefectures-of-japan'>here</Link>.\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className='right-aligned'>\r\n <DropdownButton align=\"end\" title={buttonTitle} onSelect={SortResult} id=\"dropdown-menu-align-end\" className='sj-large-font-button'>\r\n <Dropdown.Item eventKey=\"1\">Ski area name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"2\">Ski area name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"3\">Maximum elevation [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"4\">Maximum elevation [lowest{'>'}highest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"5\">Minimum elevation [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"6\">Minimum elevation [lowest{'>'}highest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"7\">Vertical [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"8\">Vertical [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"9\">Lifts [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"10\">Lifts [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"11\">Courses [most{'>'}least]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"12\">Courses [least{'>'}most]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"13\">Longest [longest{'>'}shortest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"14\">Longest [shortest{'>'}longest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"15\">Steepest [steepest{'>'}gentlest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"16\">Steepest [gentlest{'>'}steepest]</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n <SkiAreaListTable\r\n tableData={allSkiAreaList}\r\n sortColumn={sortColumn}\r\n sortOrder={sortOrder}\r\n headingColumns={['', 'Top (m)', 'Bottom (m)', 'Vertical (m)', 'Lifts', 'Courses', 'Longest (m)', 'Steepest (º)']}\r\n dataMapping={['Name', 'MaximumElevation', 'MinimumElevation', 'VerticalDifference', 'TotalSkiLifts', 'TotalSkiCourses', 'LongestCourse', 'SteepestSlope']}\r\n title=''\r\n />\r\n </div>\r\n <div className='mt-5'>\r\n <Button\r\n onClick={() => setOpen(!open)}\r\n aria-expanded={open} className='w-100 mb-1'><h5 className='mt-1'>{open ? 'Click to hide map -' : 'Click to view map +'}</h5></Button>\r\n <Collapse in={open}>\r\n <div>\r\n {(open) &&\r\n <SkiAreaMapContainer mapCenter={mapCenter} mapZoom={mapZoomLevel} skiAreaList={allSkiAreaList} />\r\n }\r\n </div>\r\n </Collapse>\r\n </div>\r\n <SkiAreaListMap skiAreaList={allSkiAreaList} prefecture={prefecture} area={area} town={town} />\r\n {prefecture !== undefined &&\r\n <div className='mt-5'>\r\n <JapanMap />\r\n </div>\r\n }\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n}\r\n\r\nexport default SkiAreaList","import { useState, useEffect } from 'react'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\nimport '../../../tabs.scss';\r\n\r\nconst SkiAreaDetailTabs = ({ params, resort, skiAreaDailyReport, skiAreaLatestWeather, hasListings }) => {\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Basics')\r\n\r\n const baseUrlPath = window.$baseSkiAreaUrl + '/' + params.prefecture + '/' + params.town + '/' + params.resort\r\n\r\n const [subItemName, setSubItemName] = useState('')\r\n\r\n useEffect(() => {\r\n setSubItemName(params.type)\r\n\r\n let thisButtonTitle\r\n switch (params.type) {\r\n case 'daily-report':\r\n thisButtonTitle = 'Daily Report'\r\n break\r\n case 'spotlight':\r\n thisButtonTitle = 'Spotlight'\r\n break\r\n case 'location':\r\n thisButtonTitle = 'Location'\r\n break\r\n case 'snow-data':\r\n thisButtonTitle = 'Snow Data'\r\n break\r\n case 'weather':\r\n thisButtonTitle = 'Weather'\r\n break\r\n case 'history':\r\n thisButtonTitle = 'History'\r\n break\r\n case 'reviews':\r\n thisButtonTitle = 'Reviews'\r\n break\r\n case 'photos':\r\n thisButtonTitle = 'Photos'\r\n break\r\n case 'route-finder':\r\n thisButtonTitle = 'Route Finder'\r\n break\r\n case 'listing':\r\n thisButtonTitle = 'Listings'\r\n break\r\n default:\r\n thisButtonTitle = \"Basics\"\r\n }\r\n\r\n setButtonTitle(thisButtonTitle)\r\n\r\n }, [params]);\r\n\r\n return (\r\n <div>\r\n <div className=\"d-none d-lg-block bg-color-ski-area\">\r\n <ul className=\"tabs\">\r\n <li className={`${subItemName === undefined ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}`}>Basics</Link>\r\n </li>\r\n {(resort.ResortSpotlightUrl !== '' && resort.ResortSpotlightUrl !== undefined && resort.ResortSpotlightUrl !== null) &&\r\n <li className={`${subItemName === 'spotlight' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/spotlight`}>Spotlight</Link>\r\n </li>\r\n }\r\n <li className={`${subItemName === 'location' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/location`}>Location</Link>\r\n </li>\r\n {(skiAreaDailyReport !== undefined && skiAreaDailyReport !== null && skiAreaDailyReport.ReportId > 0) &&\r\n <li className={`${subItemName === 'daily-report' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/daily-report`}>Daily report</Link>\r\n </li>\r\n }\r\n {(skiAreaLatestWeather !== undefined && skiAreaLatestWeather !== null && Object.keys(skiAreaLatestWeather).length > 0) &&\r\n <li className={`${subItemName === 'snow-data' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/snow-data`}>Snow data</Link>\r\n </li>\r\n }\r\n <li className={`${subItemName === 'weather' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/weather`}>Weather</Link>\r\n </li>\r\n {/*<li className={`${subItemName === 'history' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/history`}>History</Link>\r\n </li>*/}\r\n {resort.NumberOfReviews > 0 &&\r\n <li className={`${subItemName === 'reviews' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/reviews`}>Reviews</Link>\r\n </li>\r\n }\r\n {resort.NumberOfPhotos > 0 &&\r\n <li className={`${subItemName === 'photos' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/photos`}>Photos</Link>\r\n </li>\r\n }\r\n {/*<li className={`${subItemName === 'route-finder' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/route-finder`}>Route Finder</Link>\r\n </li>*/}\r\n {hasListings &&\r\n <li className={`${subItemName === 'listing' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/listing`}>Listings</Link>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div className=\"d-lg-none sj-row-100\">\r\n <DropdownButton align=\"end\" title={buttonTitle} id=\"dropdown-menu-align-end\" className='sj-large-font-button ski-area-sub-menu'>\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}`}>Basics</Dropdown.Item>\r\n {(resort.ResortSpotlightUrl !== '' && resort.ResortSpotlightUrl !== undefined && resort.ResortSpotlightUrl !== null) &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/spotlight`}>Spotlight</Dropdown.Item>\r\n }\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/location`}>Location</Dropdown.Item>\r\n {(skiAreaDailyReport !== undefined && skiAreaDailyReport !== null && skiAreaDailyReport.ReportId > 0) &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/daily-report`}>Daily report</Dropdown.Item>\r\n }\r\n {(skiAreaLatestWeather !== undefined && skiAreaLatestWeather !== null && Object.keys(skiAreaLatestWeather).length > 0) &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/snow-data`}>Snow data</Dropdown.Item>\r\n }\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/weather`}>Weather</Dropdown.Item>\r\n {/*<Dropdown.Item as={Link} to={`${baseUrlPath}/history`}>History</Dropdown.Item>*/}\r\n {resort.NumberOfReviews > 0 &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/reviews`}>Reviews</Dropdown.Item>\r\n }\r\n {resort.NumberOfPhotos > 0 &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/photos`}>Photos</Dropdown.Item>\r\n }\r\n {/*<Dropdown.Item as={Link} to={`${baseUrlPath}/route-finder`}>Route Finder</Dropdown.Item>*/}\r\n {hasListings &&\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/listing`}>Listings</Dropdown.Item>\r\n }\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SkiAreaDetailTabs","import { Link } from 'react-router-dom'\r\n\r\nconst SkiAreaInfo = ({ resort }) => {\r\n\r\n //const baseUrlPath = \"/japan-ski-areas\"\r\n\r\n return (\r\n <div className='sj-para'>\r\n <h3><Link to={`${window.$baseSkiAreaUrl}/town/${resort.TownUniqueName}`}>{resort.TownName} {resort.TownTypeStr}</Link>, <Link to={`${window.$baseSkiAreaUrl}/prefecture/${resort.PrefectureUniqueName}`}>{resort.PrefectureName}</Link></h3>\r\n <div className='sj-para-large mt-1 mb-3'>{resort.PrefectureNameJapanese}{resort.TownNameJapanese}</div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SkiAreaInfo;","import { Image } from 'react-bootstrap'\r\n\r\nconst CourseMap = ({ resort }) => {\r\n\r\n let courseMapSmall = ''\r\n if (resort.CourseMapSmall !== '' && resort.CourseMapSmall !== undefined) {\r\n courseMapSmall = String(resort.CourseMapSmall).replace('~/', '/')\r\n }\r\n\r\n let courseMapLarge = ''\r\n if (resort.CourseMapLarge !== '' && resort.CourseMapLarge !== undefined) {\r\n courseMapLarge = String(resort.CourseMapLarge).replace('~/', '/')\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n {courseMapSmall !== '' &&\r\n <div className='empty-row center-aligned'>\r\n <div className='sj-image-holder sj-row-no-margin-padding'>\r\n <Image src={`https://www.snowjapan.com/${courseMapSmall}`} fluid='true' alt={`${resort.Name} course map small`} className=\"mt-5\" />\r\n </div>\r\n <div className='center-aligned'>\r\n The above image has been created by SnowJapan to show the position of ski lifts at {resort.Name}.\r\n </div>\r\n </div>\r\n }\r\n {courseMapLarge !== '' &&\r\n <div className='empty-row center-aligned'>\r\n <div className='sj-image-holder sj-row-no-margin-padding'>\r\n <Image src={`https://www.snowjapan.com${courseMapLarge}`} fluid='true' alt={`${resort.Name} course map large`} className=\"mt-5\" />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default CourseMap;","import { Image } from 'react-bootstrap'\r\n\r\nconst SkiMountain = ({ resort }) => {\r\n\r\n return (\r\n <div className='sj-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned\">\r\n <h4>The Mountain</h4>\r\n </div>\r\n <div className=\"sj-mountain\">\r\n <div className=\"row sj-row sj-no-bg\">\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgMaxElevation' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Summit.svg' fluid='true' alt='Max Elevation' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.MaximumElevation}m</h2>\r\n <h4>Top elevation</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgVertical' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Vertical.svg' fluid='true' alt='Vertical Difference' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.VerticalDifference}m</h2>\r\n <h4>Vertical</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgMinElevation' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Base.svg' fluid='true' alt='Min Elevation' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.MinimumElevation}m</h2>\r\n <h4>Base elevation</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row sj-no-bg\">\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgTotalSkiCourses' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Number-of-Courses.svg' fluid='true' alt='Total Ski Courses' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.TotalSkiCourses}</h2>\r\n <h4>Number of courses</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgLongestCourse' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Longest-Course.svg' fluid='true' alt='Longest Course' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.LongestCourse}m</h2>\r\n <h4>Longest course</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className='center-aligned'>\r\n <Image id='imgSteepestSlope' src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Mountain-Steepest-Course.svg' fluid='true' alt='Steepest Slope' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h2>{resort.SteepestSlope}°</h2>\r\n <h4>Steepest course</h4>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SkiMountain;","import { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\n\r\nconst SkiSnowBoard = ({ resort, nearbySkiAreaList }) => {\r\n\r\n const [nearbySkiAreas, setNearbySkiAreas] = useState(nearbySkiAreaList);\r\n\r\n useEffect(() => {\r\n\r\n let thisNearbySkiAreas = []\r\n\r\n if (nearbySkiAreaList.length > 0) {\r\n thisNearbySkiAreas = nearbySkiAreaList.filter(function (currentElement) {\r\n return (currentElement.IsConnected);\r\n });\r\n }\r\n\r\n setNearbySkiAreas(thisNearbySkiAreas)\r\n }, [resort.UniqueName, nearbySkiAreaList]);\r\n\r\n console.log(\"a \" + resort.SkiersAllowed)\r\n console.log(\"b \" + resort.SnowboardersAllowed)\r\n\r\n return (\r\n <div className='sj-row'>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-4 sj-row-no-margin-padding sj-bia-frame-first\">\r\n <div className='center-aligned sj-box sj-box-green sj-round-full pt-4 pb-4 mt-4 mb-4'>\r\n <h4>{resort.BeginnersCourses}%</h4>\r\n <h5>Beginner</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4 sj-row-no-margin-padding sj-bia-frame-middle\">\r\n <div className='center-aligned sj-box sj-box-red sj-round-full pt-4 pb-4 mt-4 mb-4'>\r\n <h4>{resort.IntermediateCourses}%</h4>\r\n <h5>Intermediate</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-md-4 sj-row-no-margin-padding sj-bia-frame-last\">\r\n <div className='center-aligned sj-box sj-box-dark-blue sj-round-full pt-4 pb-4 mt-4 mb-4'>\r\n <h4>{resort.AdvancedCourses}%</h4>\r\n <h5>Advanced</h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row sj-no-bg skier-snowboarder\">\r\n <div className=\"col-md-3\">\r\n <div className={`center-aligned pt-5 ${resort.TotalSkiLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h1 className='pt-5'>{resort.TotalSkiLifts}</h1>\r\n <h3>Total ski lift{resort.TotalSkiLifts === 1 ? \"\" : \"s\"}</h3>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.RopeWays > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Ropeway.svg' fluid='true' alt='ropeways' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Ropeway-bw.svg' fluid='true' alt='ropeways 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.RopeWays > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.RopeWays}</h2>\r\n <h4>Ropeway{resort.RopeWays === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.Gondolas > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Gondola.svg' fluid='true' alt='gondolas' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Gondola-bw.svg' fluid='true' alt='gondolas 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.Gondolas > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.Gondolas}</h2>\r\n <h4>Gondola{resort.Gondolas === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.QuadLifts > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Quad.svg' fluid='true' alt='quad lifts' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Quad-bw.svg' fluid='true' alt='quad lifts 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.QuadLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.QuadLifts}</h2>\r\n <h4>Quad lift{resort.QuadLifts === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row sj-no-bg skier-snowboarder\">\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.TripleLifts > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Triple.svg' fluid='true' alt='triple lifts' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Triple-bw.svg' fluid='true' alt='triple lifts 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.TripleLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.TripleLifts}</h2>\r\n <h4>Triple lift{resort.TripleLifts === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.PairLifts > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Pair.svg' fluid='true' alt='pair lifts' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Pair-bw.svg' fluid='true' alt='pair lifts' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.PairLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.PairLifts}</h2>\r\n <h4>Pair lift{resort.PairLifts === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.SingleLifts > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Single.svg' fluid='true' alt='single lifts' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Single-bw.svg' fluid='true' alt='single lifts 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.SingleLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.SingleLifts}</h2>\r\n <h4>Single lift{resort.SingleLifts === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className='center-aligned'>\r\n {resort.OtherLifts > 0\r\n ? <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Other.svg' fluid='true' alt='other lifts' />\r\n : <Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiLift-Other-bw.svg' fluid='true' alt='other lifts 0' />\r\n }\r\n </div>\r\n <div className={`center-aligned ${resort.OtherLifts > 0 ? \"\" : \"gray-font\"}`}>\r\n <h2>{resort.OtherLifts}</h2>\r\n <h4>Other lift{resort.OtherLifts === 1 ? \"\" : \"s\"}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n {(resort.SkiersAllowed > 0 || resort.SnowboardersAllowed > 0) &&\r\n <>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <div className='sj-skier-snowboarder-left'>\r\n <div className='center-aligned sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Skiers</h4>\r\n </div>\r\n <div className='center-aligned sj-box-lighter-gray pt-2 pb-2'>\r\n <h4>{resort.SkiersPercent}%</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding\">\r\n <div className='sj-skier-snowboarder-right'>\r\n <div className='center-aligned sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Snowboarders</h4>\r\n </div>\r\n <div className='center-aligned sj-box-lighter-gray pt-2 pb-2'>\r\n <h4>{resort.SnowboardersPercent}%</h4>\r\n </div>\r\n </div>\r\n </div>\r\n {(resort.SkiersAllowed > 0 && resort.SnowboardersAllowed > 0) &&\r\n <div className='sj-row-small-margin-padding center-aligned'>\r\n {(resort.SkiersAllowed === 1 && resort.SnowboardersAllowed === 1) &&\r\n <>Skiing and snowboarding are both allowed at {resort.Name}</>\r\n }\r\n {(resort.SkiersAllowed === 1 && resort.SnowboardersAllowed === 2) &&\r\n <>{resort.Name} is a skiing-only resort (snowboarding is not allowed)</>\r\n }\r\n {(resort.SkiersAllowed === 2 && resort.SnowboardersAllowed === 1) &&\r\n <>{resort.Name} is a snowboarding-only resort (skiing is not allowed)</>\r\n }\r\n {(resort.SnowboardersAllowed === 3) &&\r\n <>There are some snowboarding restrictions at {resort.Name}</>\r\n }\r\n {(resort.SkiersAllowed === 3) &&\r\n <>There are some skiing restrictions at {resort.Name}</>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </>\r\n }\r\n {nearbySkiAreas.length > 0 &&\r\n <div className='sj-row center-aligned'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>{resort.Name} is lift-connected with</h4>\r\n </div>\r\n <div className='sj-link-button-container center-aligned'>\r\n {nearbySkiAreas.map(nearbySkiArea => (\r\n <Link key={nearbySkiArea.SkiAreaUniqueName} to={`${window.$baseSkiAreaUrl}/${nearbySkiArea.SkiAreaPrefectureName}/${nearbySkiArea.SkiAreaTownUniqueName}/${nearbySkiArea.SkiAreaUniqueName}`}>{nearbySkiArea.SkiAreaName} ({nearbySkiArea.Distance}km)</Link>\r\n ))}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default SkiSnowBoard;","import { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst Facilities = ({ resort }) => {\r\n\r\n return (\r\n <div className='empty-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>{resort.Name} facilities</h4>\r\n </div>\r\n\r\n {resort.SnowParkFacilities !== '' &&\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Facilities-Snow-Park.svg\" alt='park facilities' />\r\n </div>\r\n <div className=\"col-md-9 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Park, off-piste & other activities</h4>\r\n </div>\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.SnowParkFacilities) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {resort.InformationOnChildren !== '' &&\r\n <div className=\"mt-5\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Facilities-Children.svg\" alt='children facilities' />\r\n </div>\r\n <div className=\"col-md-9 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Families & children</h4>\r\n </div>\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.InformationOnChildren) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {resort.SchoolInformation !== '' &&\r\n <div className=\"mt-5\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Facilities-Lessons.svg\" alt='Lessons' />\r\n </div>\r\n <div className=\"col-md-9 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Lessons</h4>\r\n </div>\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.SchoolInformation) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {resort.EquipmentRentalInformation !== '' &&\r\n <div className=\"mt-5\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Facilities-Rental.svg\" alt='Rental' />\r\n </div>\r\n <div className=\"col-md-9 sj-row-no-margin-padding sj-list-text-holder\">\r\n <div className='sj-box sj-box-dark-gray sj-round-half'>\r\n <h4>Rental & other facilities</h4>\r\n </div>\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.EquipmentRentalInformation) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div >\r\n );\r\n}\r\n\r\nexport default Facilities;","import { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst SeasonOpeningTime = ({ resort }) => {\r\n\r\n return (\r\n <div className='empty-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-3\">\r\n <h4>{resort.Name} opening information</h4>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Opening-Times.svg\" alt='Opening time' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div className='table-container'>\r\n <div className='center-aligned sj-box sj-box-dark-gray sj-round-half pt-2 pb-2 mt-0 mb-0'>\r\n <h4>Typical season</h4>\r\n </div>\r\n <div>\r\n <table className='table-container__table opening-time'>\r\n <thead>\r\n <tr>\r\n <th colSpan='3'>NOV</th>\r\n <th colSpan='3'>DEC</th>\r\n <th colSpan='3'>JAN</th>\r\n <th colSpan='3'>FEB</th>\r\n <th colSpan='3'>MAR</th>\r\n <th colSpan='3'>APR</th>\r\n <th colSpan='3'>MAY</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr>\r\n {[...Array(21)].map((x, i) =>\r\n <td key={i} className={i > resort.OpeningDate - 3 && i < resort.ClosingDate + 8 ? `resort-open` : `normal`}> </td>\r\n )}\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n {resort.InformationOnChildren !== '' &&\r\n <div className='pt-4'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.OpeningTimeComments) }} />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div >\r\n );\r\n}\r\n\r\nexport default SeasonOpeningTime;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst LiftTicketCharges = ({ resort }) => {\r\n\r\n const [ticketChargeList, setTicketChargeList] = useState([]);\r\n\r\n const fetchLiftTicket = async (resortUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/ticket/list/${resortUniqueName}`\r\n }).then(dataTicket => {\r\n setTicketChargeList(dataTicket.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchLiftTicket(resort.UniqueName);\r\n }, [resort.UniqueName]);\r\n\r\n if (ticketChargeList.length <= 0) {\r\n return (\r\n <Loader />\r\n );\r\n }\r\n else {\r\n return (\r\n <div className='empty-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-3\">\r\n <h4>{resort.Name} lift tickets</h4>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Lift-Ticket.svg\" alt='Train' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div className='table-container'>\r\n <table className='table-container__table sj-list-table ticket-info'>\r\n <thead>\r\n <tr>\r\n <th>Type of ticket</th>\r\n <th>Adults</th>\r\n <th>\r\n Child\r\n {(resort.ChildTicketLabel !== '' && resort.ChildTicketLabel !== null) &&\r\n <div>\r\n {resort.ChildTicketLabel}\r\n </div>\r\n }\r\n </th>\r\n {(resort.OlderChildTicketLabel !== '' && resort.OlderChildTicketLabel !== null) &&\r\n <th>Older Child\r\n <div>\r\n {resort.OlderChildTicketLabel}\r\n </div>\r\n </th>\r\n }\r\n <th>\r\n Senior\r\n {(resort.SeniorTicketLabel !== '' && resort.SeniorTicketLabel !== null) &&\r\n <div>\r\n {resort.SeniorTicketLabel}\r\n </div>\r\n }\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {ticketChargeList.map((ticketCharge, index) => (\r\n <tr key={index}>\r\n <td>\r\n {ticketCharge.NameOfTicket &&\r\n <div>{ticketCharge.NameOfTicket}</div>\r\n }</td>\r\n <td>\r\n {ticketCharge.AdultTicket &&\r\n <div>{ticketCharge.AdultTicket} yen</div>\r\n }\r\n </td>\r\n <td>\r\n {ticketCharge.ChildTicket &&\r\n <div>{ticketCharge.ChildTicket} yen</div>\r\n }\r\n </td>\r\n {(resort.OlderChildTicketLabel !== '' && resort.OlderChildTicketLabel !== null) &&\r\n <td>\r\n {ticketCharge.OlderChildTicket &&\r\n <div>{ticketCharge.OlderChildTicket} yen</div>\r\n }\r\n </td>\r\n }\r\n <td>\r\n {ticketCharge.SeniorTicket &&\r\n <div>{ticketCharge.SeniorTicket} yen</div>\r\n }\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n {resort.InformationOnChildren !== '' &&\r\n <div className='pt-4'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.LiftTicketInformation) }} />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default LiftTicketCharges;","import { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst ContactInformation = ({ resort }) => {\r\n\r\n return (\r\n <div className='empty-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>{resort.Name} address & further information</h4>\r\n </div>\r\n\r\n {resort.Address !== '' &&\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Address.svg\" alt='address' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.Address) }} />\r\n {resort.Telephone}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {/*resort.WebUrl !== '' &&\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Website.svg\" alt='website' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n <h5><a href={resort.WebUrl} className='btn btn-primary sj-large-button-blue sj-full-width' target='_blank' rel='noreferrer' >Website</a></h5>\r\n The above link, where available, opens in a new window. All linked content is outside the control of SnowJapan and may change without notice. Links are checked at least once a year.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n */}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ContactInformation;","import { Image } from 'react-bootstrap'\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport { Helmet } from 'react-helmet'\r\nimport CourseMap from './CourseMap'\r\nimport SkiMountain from './SkiMountain'\r\nimport SkiSnowBoard from './SkiSnowBoard'\r\nimport Facilities from './Facilities'\r\nimport SeasonOpeningTime from './SeasonOpeningTime'\r\nimport LiftTicketCharges from './LiftTicketCharges'\r\nimport ContactInformation from './ContactInformation'\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst BasicContainer = ({ requestUrl, resort, nearbySkiAreaList, skiAreaLatestWeather, showSnowData }) => {\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{resort.Name} | Ski area in {resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan | {resort.NameJapanese} | SnowJapan</title>\r\n <meta name=\"description\" content={`Introducing ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-map\">\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/MapImages/Ski-Area/${resort.MapImage}`} alt={`${resort.Name} map`} fluid='true' />\r\n </div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n {/*<h4>Planned season</h4>\r\n <h5>{resort.PlannedSeasonDates}</h5>*/}\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.PlannedSeasonDates) }} />\r\n {(skiAreaLatestWeather !== undefined && Object.keys(skiAreaLatestWeather).length > 0 && skiAreaLatestWeather.SnowDepth !== null && showSnowData !== undefined && showSnowData === \"Y\") &&\r\n <div className='sj-para sj-box sj-box-red sj-round-full sj-50-box'>\r\n <h5>Official snow depth:</h5>\r\n <div>\r\n {skiAreaLatestWeather.SnowDepth}cm ({skiAreaLatestWeather.SnowDepthCompareToYesterday}cm change since last update)<br />\r\n Updated on {skiAreaLatestWeather.WeatherDayTh} {skiAreaLatestWeather.WeatherMonthFull} {skiAreaLatestWeather.WeatherYear}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(resort.IntroductoryText) }} />\r\n </div>\r\n </div>\r\n <div className=\"sj-para\">\r\n {(resort.RegionName !== null && resort.RegionName !== '' && resort.RegionUrl !== null && resort.RegionUrl !== '') &&\r\n <a className='btn btn-primary sj-large-button-blue sj-full-width' href={resort.RegionUrl}>{resort.RegionName}</a>\r\n }\r\n </div>\r\n <SkiMountain resort={resort} />\r\n <SkiSnowBoard resort={resort} nearbySkiAreaList={nearbySkiAreaList} />\r\n {resort.CourseMapSmall !== '' &&\r\n <CourseMap resort={resort} />\r\n }\r\n <Facilities resort={resort} />\r\n <LiftTicketCharges resort={resort} />\r\n <SeasonOpeningTime resort={resort} />\r\n <ContactInformation resort={resort} />\r\n </div>\r\n )\r\n};\r\n\r\nexport default BasicContainer;","import { Image } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst DailyReportContainer = ({ resort, skiAreaDailyReport }) => {\r\n\r\n //console.log(skiAreaDailyReport)\r\n\r\n if (skiAreaDailyReport === undefined) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{skiAreaDailyReport.NowName} daily snow & weather report for {resort.Name} region | SnowJapan</title>\r\n <meta name=\"description\" content={`Daily snow and weather report from close to ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Daily-Reports.svg\" alt={`${resort.Name} daily report`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n {(skiAreaDailyReport !== undefined && Object.keys(skiAreaDailyReport).length > 0) &&\r\n <>\r\n <div className=\"sj-para\">\r\n <h3 className='mb-4'>{skiAreaDailyReport.NowName} latest report</h3>\r\n <h4>Visit <Link to={`${window.$baseDailyReportUrl}/${skiAreaDailyReport.NowUniqueName}`}>{skiAreaDailyReport.NowName}</Link> for detailed daily reports from the area</h4>\r\n </div>\r\n <div className=\"sj-para\">\r\n <h5 className='sj-red-text'>The following report was posted on {skiAreaDailyReport.NowReportWeekDay} {skiAreaDailyReport.NowReportDayTh} {skiAreaDailyReport.NowReportMonthFull} {skiAreaDailyReport.NowReportYear} {skiAreaDailyReport.NowReportHourMinute}</h5>\r\n </div>\r\n </>\r\n }\r\n </div>\r\n </div>\r\n {(skiAreaDailyReport !== undefined && Object.keys(skiAreaDailyReport).length > 0) &&\r\n <div className=\"sj-row\">\r\n <pre>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(skiAreaDailyReport.MainReport) }} />\r\n </pre>\r\n <div className='sj-para'>\r\n <h4>Opening, lift & other notes</h4>\r\n </div>\r\n <pre>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(skiAreaDailyReport.LiftOperation) }} />\r\n </pre>\r\n <div>\r\n <Link to={`${window.$baseDailyReportUrl}/${skiAreaDailyReport.NowUniqueName}`} className='btn btn-primary sj-large-button-blue sj-full-width'>{skiAreaDailyReport.NowName} report section</Link>\r\n </div>\r\n <div className='empty-row'>\r\n {(skiAreaDailyReport.Photo1 !== null && skiAreaDailyReport.Photo1 !== undefined) &&\r\n <div className='sj-image-holder center-aligned mt-4'>\r\n <Image src={`https://www.snowjapan.com${skiAreaDailyReport.Photo1.replace('~', '')}`} fluid='true' alt='Report 1' />\r\n </div>\r\n }\r\n {(skiAreaDailyReport.Photo2 !== null && skiAreaDailyReport.Photo2 !== undefined) &&\r\n <div className='sj-image-holder center-aligned mt-4'>\r\n <Image src={`https://www.snowjapan.com${skiAreaDailyReport.Photo2.replace('~', '')}`} fluid='true' alt='Report 2' />\r\n </div>\r\n }\r\n {(skiAreaDailyReport.Photo3 !== null && skiAreaDailyReport.Photo3 !== undefined) &&\r\n <div className='sj-image-holder center-aligned mt-4'>\r\n <Image src={`https://www.snowjapan.com${skiAreaDailyReport.Photo3.replace('~', '')}`} fluid='true' alt='Report 3' />\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <Link to={`${window.$baseDailyReportUrl}/${skiAreaDailyReport.NowUniqueName}`} className='btn btn-primary sj-large-button-blue sj-full-width'>{skiAreaDailyReport.NowName} report section</Link>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n )\r\n };\r\n}\r\n\r\nexport default DailyReportContainer;","import SkiAreaInfo from '../SkiAreaInfo'\r\n\r\nconst HistoryContainer = ({ resort }) => {\r\n return (\r\n <div className='empty-row'>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Depth.svg\" alt={`${resort.Name} history`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h2>History</h2>\r\n <div className=\"sj-para\">\r\n Text Goes here\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default HistoryContainer;","import { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport ListingListTable from './ListingListTable'\r\nimport AccommodationListTable from './AccommodationListTable'\r\n\r\nconst ListingsContainer = ({ resort, nearbyAccommodations, areaSectionListings }) => {\r\n\r\n if (nearbyAccommodations.length <= 0 && areaSectionListings.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Listings of services near {resort.Name} ({resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan) | SnowJapan</title>\r\n <meta name=\"description\" content={`Listings of services near ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Listings.svg\" alt={`${resort.Name} listing`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Listings</h3>\r\n <div className=\"sj-para\">\r\n Introducing various services and organizations close to NASPA Ski Garden that are keen to be known by English-speaking visitors. All listings are also displayed within the main <Link to='/listings'>Listing</Link> section of SnowJapan.\r\n </div>\r\n <div className=\"sj-para\">\r\n SnowJapan does not own or operate any of the services or organizations introduced in this section. We do not take any reservations, and we cannot answer any specific queries about individual services. If you own a business or service and would like to be listed here, <Link to='/contact'>please contact us</Link>.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {nearbyAccommodations.length > 0 &&\r\n <div className='sj-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2 mb-2\">\r\n <h4>Nearby Accommodations</h4>\r\n </div>\r\n <AccommodationListTable\r\n tableData={nearbyAccommodations}\r\n headingColumns={['', '', 'Area', 'Prefecture']}\r\n dataMapping={['a', 'AccommodationName', 'AccommodationAreaName', 'AccommodationPrefectureName']}\r\n title={``}\r\n />\r\n </div>\r\n }\r\n {\r\n areaSectionListings.length > 0 &&\r\n <>\r\n {areaSectionListings.map((areaSectionListing, index) => (\r\n <div key={index} className='mt-5'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2 mb-2\">\r\n <h4>{areaSectionListing.sectionName}</h4>\r\n </div>\r\n <ListingListTable\r\n tableData={areaSectionListing.listings}\r\n headingColumns={['', '', 'Area', 'Prefecture']}\r\n dataMapping={['a', 'Name', 'AreaName', 'PrefectureName']}\r\n title=''\r\n />\r\n </div>\r\n ))}\r\n </>\r\n }\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default ListingsContainer;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport { Link } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst LocationContainer = ({ resort, nearbySkiAreaList }) => {\r\n const [location, setLocation] = useState([]);\r\n const [nearbySkiAreas, setNearbySkiAreas] = useState(nearbySkiAreaList);\r\n\r\n const fetchLocation = async (resortUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/location/${resortUniqueName}`\r\n }).then(dataLocation => {\r\n setLocation(dataLocation.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchLocation(resort.UniqueName);\r\n setNearbySkiAreas(nearbySkiAreaList)\r\n }, [resort.UniqueName, nearbySkiAreaList]);\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Location of {resort.Name} | Ski area in {resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan | {resort.NameJapanese} | SnowJapan</title>\r\n <meta name=\"description\" content={`Location and maps of ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Location.svg\" alt={`${resort.Name} location`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Location & access</h3>\r\n <div className=\"sj-para\">\r\n {resort.Name} is a ski area located in {resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}.\r\n </div>\r\n <div className=\"sj-para\">\r\n <h5><Link to={`${window.$baseRouteFinderUrl}/${resort.UniqueName}`} className='btn btn-primary sj-large-button-blue sj-50-box'>Route Finder</Link></h5>\r\n </div>\r\n <div className='sj-para'>\r\n Click on the above <strong>Route Finder</strong> link to discover how to get to <strong>{resort.Name}</strong> from your current location or any other ski area in Japan.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className='ratio ratio-16x9'>\r\n <iframe title='Location Map' width='930' height='600' src={`https://www.google.com/maps/embed/v1/place?q=${resort.Location_Latitude},${resort.Location_Longitude}&key=AIzaSyAmyWUwcoNW504tXuRlQ_mZssrKEEhGn20&zoom=${resort.Location_MapZoomLevel}`} allowFullScreen></iframe>\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-blue sj-round-full center-aligned mt-5\">\r\n <h3>Getting to {resort.Name}</h3>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2\">\r\n <h4>By public transport</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding mb-3\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Shinkansen.svg\" alt='Train' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n {(location.ShinkansenStation_Id !== null && location.ShinkansenLine_Id !== null) &&\r\n <div>\r\n {location.KMFromShinkansenStation}km from <strong>{location.ShinkansenStationName}</strong> on the <strong>{location.ShinkansenLineName}</strong>\r\n </div>\r\n }\r\n {(location.TrainStation1_Id !== null && location.TrainLine1_Id !== null) &&\r\n <div>\r\n {location.KMFromStation1}km from <strong>{location.TrainStation1Name}</strong> on the <strong>{location.TrainLine1Name}</strong>\r\n </div>\r\n }\r\n {(location.TrainStation2_Id !== null && location.TrainLine2_Id !== null) &&\r\n <div>\r\n {location.KMFromStation2}km from <strong>{location.TrainStation2Name}</strong> on the <strong>{location.TrainLine2Name}</strong>\r\n </div>\r\n }\r\n <div className='mt-3'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(location.TravelInformation) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Bus.svg\" alt='Bus' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(location.ShuttleBusInformation) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-4\">\r\n <h4>By road</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding mb-3\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Cars.svg\" alt='Car' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n {(location.Interchange1_Id !== null && location.Expressway1_Id !== null) &&\r\n <div>\r\n {location.KMFromInterchange1}km from the <strong>{location.Interchange1Name}</strong> on the <strong>{location.Expressway1Name}</strong>\r\n </div>\r\n }\r\n {(location.Interchange2_Id !== null && location.Expressway2_Id !== null) &&\r\n <div>\r\n {location.KMFromInterchange2}km from the <strong>{location.Interchange2Name}</strong> on the <strong>{location.Expressway2Name}</strong>\r\n </div>\r\n }\r\n {(location.Interchange3_Id !== null && location.Expressway3_Id !== null) &&\r\n <div>\r\n {location.KMFromInterchange3}km from the <strong>{location.Interchange3Name}</strong> on the <strong>{location.Expressway3Name}</strong>\r\n </div>\r\n }\r\n {(location.RouteNumber !== null && location.RouteNumber !== '') &&\r\n <div>\r\n Nearest national route: <strong>Route {location.RouteNumber}</strong> (<strong>{location.KMFromRoute}km</strong> away)\r\n </div>\r\n }\r\n {(location.OtherPrefecturalRoadNumber !== null && location.OtherPrefecturalRoadNumber !== '') &&\r\n <div>\r\n Nearest prefecture road: <strong>Prefecture Road {location.OtherPrefecturalRoadNumber}</strong>\r\n </div>\r\n }\r\n <div className='mt-3'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(location.Direction) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding mb-3\">\r\n <div className=\"col-md-3 m-0 mt-2 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Parking.svg\" alt='Parking' />\r\n </div>\r\n <div className=\"col-md-9 sj-list-text-holder\">\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(location.Parking) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {\r\n (resort.StreetViewMap1 !== '' || resort.StreetViewMap2 !== '') &&\r\n <div className=\"sj-row\">\r\n {(resort.StreetViewMap1 !== null && resort.StreetViewMap1 !== '') &&\r\n <div className='mb-2 mt-5'>\r\n <div className='ratio ratio-16x9'>\r\n <iframe title='Street View 1' width='930' height='600' src={resort.StreetViewMap1} allowFullScreen aria-hidden='false'></iframe>\r\n </div>\r\n </div>\r\n }\r\n {(resort.StreetViewMap2 !== null && resort.StreetViewMap2 !== '') &&\r\n <div className='mb-2 mt-5'>\r\n <div className='ratio ratio-16x9'>\r\n <iframe title='Street View 2' width='930' height='600' src={resort.StreetViewMap2} allowFullScreen aria-hidden='false'></iframe>\r\n </div>\r\n </div>\r\n }\r\n <div className='center-aligned'>\r\n The above image has been manually selected to try and provide the most suitable views and location information. Settings will be manually checked and updated every year.\r\n </div>\r\n </div>\r\n }\r\n {\r\n nearbySkiAreas.length > 0 &&\r\n <div className='empty-row padding-top'>\r\n <div className=\"sj-box sj-box-dark-blue sj-round-full center-aligned mb-4\">\r\n <h3>Other ski areas nearby</h3>\r\n </div>\r\n <div>\r\n <div className='row sj-frame-header sj-row-no-margin-padding'>\r\n <div className=\"col-7\">\r\n <h5>Ski Area</h5>\r\n </div>\r\n <div className=\"col-5\">\r\n <h5>Distance</h5>\r\n </div>\r\n </div>\r\n <div className='sj-data-table-holder'>\r\n {nearbySkiAreas.map(nearbySkiArea => (\r\n <div className='row sj-frame-body sj-row-no-margin-padding' key={nearbySkiArea.Id}>\r\n <div className=\"col-7\">\r\n <Link to={`${window.$baseSkiAreaUrl}/${nearbySkiArea.SkiAreaPrefectureName}/${nearbySkiArea.SkiAreaTownUniqueName}/${nearbySkiArea.SkiAreaUniqueName}`}>{nearbySkiArea.SkiAreaName}</Link>\r\n </div>\r\n <div className=\"col-5\">\r\n {nearbySkiArea.Distance} km\r\n {nearbySkiArea.IsConnected &&\r\n <> (Physically Connected)</>\r\n }\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div >\r\n )\r\n};\r\n\r\nexport default LocationContainer;","import PropTypes from 'prop-types'\r\nimport { Button, Modal, Image } from 'react-bootstrap';\r\nimport { useState } from 'react'\r\n\r\nconst PhotoDetail = ({ resort, photo }) => {\r\n /*const [show, setShow] = useState(false)\r\n\r\n const handleClose = () => {\r\n setShow(false)\r\n }\r\n const showModal = () => {\r\n setShow(true)\r\n }*/\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{photo.Caption}</h4>\r\n </div>\r\n <div className='sj-row-small-margin-padding center-aligned'>\r\n <Image src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`thumb-${photo.Id}`} fluid='true' />\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n <hr className='mt-5' />\r\n {/*<Modal\r\n show={show}\r\n size=\"lg\"\r\n onHide={handleClose}\r\n backdrop=\"static\"\r\n keyboard={false}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>{photo.Caption}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className='center-aligned'>\r\n <img src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`full-${photo.Id}`} />\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>*/}\r\n </div>\r\n )\r\n};\r\n\r\nPhotoDetail.propTypes = {\r\n photo: PropTypes.object.isRequired\r\n}\r\n\r\nexport default PhotoDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport useSkiAreaPhotos from '../../../CustomHooks/useSkiAreaPhotos'\r\nimport PhotoDetail from './PhotoDetail'\r\n\r\nconst PhotosContainer = ({ resort }) => {\r\n\r\n const queryPhoto = resort.Id\r\n const userName = ''\r\n const [pageNumberPhoto, setPaegNumberPhoto] = useState(1)\r\n\r\n const {\r\n loadingPhoto,\r\n errorPhoto,\r\n photos,\r\n hasMorePhoto\r\n } = useSkiAreaPhotos(queryPhoto, userName, pageNumberPhoto)\r\n\r\n const observerPhoto = useRef()\r\n const lastPhotoElementRef = useCallback(nodePhoto => {\r\n if (loadingPhoto)\r\n return\r\n if (observerPhoto.current)\r\n observerPhoto.current.disconnect()\r\n observerPhoto.current = new IntersectionObserver(entriesPhoto => {\r\n if (entriesPhoto[0].isIntersecting && hasMorePhoto) {\r\n setPaegNumberPhoto(prevPageNumberPhoto => prevPageNumberPhoto + 1)\r\n }\r\n })\r\n\r\n if (nodePhoto)\r\n observerPhoto.current.observe(nodePhoto)\r\n }, [loadingPhoto, hasMorePhoto])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Photos of {resort.Name} ({resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan) | SnowJapan</title>\r\n <meta name=\"description\" content={`Reader photos of ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Photos.svg\" alt={`${resort.Name}`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Photos of {resort.Name}</h3>\r\n <div className=\"sj-para\">\r\n Photos of <strong>{resort.Name}</strong> that have been posted by SnowJapan members.\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo/${resort.UniqueName}`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div className=\"sj-para\">\r\n <h3>Recent photos</h3>\r\n </div>\r\n {photos.map((photo, index) => {\r\n if (photos.length === index + 1) {\r\n return (\r\n <div ref={lastPhotoElementRef} key={photo.Id}>\r\n <PhotoDetail resort={resort} photo={photo} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={photo.Id}>\r\n <PhotoDetail resort={resort} photo={photo} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingPhoto &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorPhoto && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default PhotosContainer;","import { RenderBreak } from '../../../../helpers/Helper'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst ReviewDetail = ({ resort, review }) => {\r\n return (\r\n <div className='sj-row'>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{review.Headline}</h4>\r\n </div>\r\n {review.ReviewText !== '' &&\r\n <div className='row sj-row-small-margin-padding sj-no-bg'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(review.ReviewText) }} />\r\n </div>\r\n }\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Date visited:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.DateVisited}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I liked:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsILiked}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I didn’t like:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsIDidnotLike}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Review by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ReaderName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Posted:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.SubmittedDayTh} {review.SubmittedMonthFull} {review.SubmittedYear}\r\n </div>\r\n </div>\r\n <hr className='mt-5' />\r\n </div>\r\n )\r\n};\r\n\r\nReviewDetail.propTypes = {\r\n review: PropTypes.object.isRequired\r\n}\r\n\r\nexport default ReviewDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport useSkiAreaReviews from '../../../CustomHooks/useSkiAreaReviews'\r\nimport ReviewDetail from './ReviewDetail'\r\n\r\nconst ReviewsContainer = ({ resort }) => {\r\n const queryReview = resort.Id\r\n const userName = ''\r\n const [pageNumberReview, setPaegNumberReview] = useState(1)\r\n\r\n const {\r\n loadingReview,\r\n errorReview,\r\n reviews,\r\n hasMoreReview\r\n } = useSkiAreaReviews(queryReview, userName, pageNumberReview)\r\n\r\n const observerReview = useRef()\r\n const lastReviewElementRef = useCallback(nodeReview => {\r\n if (loadingReview)\r\n return\r\n if (observerReview.current)\r\n observerReview.current.disconnect()\r\n observerReview.current = new IntersectionObserver(entriesReview => {\r\n if (entriesReview[0].isIntersecting && hasMoreReview) {\r\n setPaegNumberReview(prevPageNumberReview => prevPageNumberReview + 1)\r\n }\r\n })\r\n\r\n if (nodeReview)\r\n observerReview.current.observe(nodeReview)\r\n }, [loadingReview, hasMoreReview])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Reviews of {resort.Name} ({resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan) | SnowJapan</title>\r\n <meta name=\"description\" content={`Reader reviews of ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Reviews.svg\" alt={`${resort.Name} review`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Reader reviews of {resort.Name}</h3>\r\n <div className=\"sj-para\">\r\n Reviews of <strong>{resort.Name}</strong> that have been posted by SnowJapan members. The views expressed in the reviews are not those of SnowJapan.\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/submit-review/${resort.UniqueName}`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Write a new ski area review</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className=\"sj-para\">\r\n <h3>Recent reviews</h3>\r\n </div>\r\n {reviews.map((review, index) => {\r\n if (reviews.length === index + 1) {\r\n return (\r\n <div ref={lastReviewElementRef} key={review.Id}>\r\n <ReviewDetail resort={resort} review={review} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={review.Id}>\r\n <ReviewDetail resort={resort} review={review} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingReview &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorReview && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default ReviewsContainer;","import SkiAreaInfo from '../SkiAreaInfo'\r\n\r\nconst RouteFinderContainer = ({ resort }) => {\r\n return (\r\n <div className='empty-row'>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Depth.svg\" alt={`${resort.Name} route finder`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h2>Route Finder</h2>\r\n <div className=\"sj-para\">\r\n Text Goes here\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default RouteFinderContainer;","import Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\n\r\nconst SnowChart = ({ resortName, snowData }) => {\r\n const getSnowDataValue = (season) => {\r\n\r\n let dailySnowData = [];\r\n\r\n let dailyData = snowData.filter(function (currentElement) {\r\n return (currentElement.Season === season && currentElement.SnowDepth !== 999);\r\n });\r\n\r\n dailyData.sort(function (a, b) {\r\n var dateA = new Date(a.CreatedAt), dateB = new Date(b.CreatedAt)\r\n return dateA - dateB\r\n })\r\n\r\n dailyData.forEach(function (dataItem) {\r\n let valueCounter = 0;\r\n\r\n if (dataItem.WeatherMonth < 6) {\r\n valueCounter = 1\r\n }\r\n\r\n dailySnowData.push([Date.UTC(1969 + valueCounter, Number(dataItem.WeatherMonth) - 1, dataItem.WeatherDay), dataItem.SnowDepth])\r\n })\r\n\r\n return dailySnowData\r\n }\r\n\r\n let resortWeatherSnowDataSeries = [];\r\n\r\n let seasons = [...new Set(snowData.map(item => item.Season))].sort().reverse();\r\n\r\n seasons.forEach(function (item) {\r\n resortWeatherSnowDataSeries.push({\r\n 'name': item,\r\n 'data': getSnowDataValue(item)\r\n })\r\n })\r\n\r\n const options = {\r\n colors: [\"#0000CC\", \"#0033CC\", \"#3366CC\", \"#3399FF\", \"#000066\", \"#990000\", \"#CC0000\", \"#FF0066\", \"#660033\", \"#8904B1\", \"#FE9A2E\", \"#DF7401\"],\r\n chart: {\r\n type: 'spline',\r\n zoomType: 'x',\r\n backgroundColor: \"#efefef\",\r\n borderWidth: 1,\r\n borderColor: \"#dedede\",\r\n style: {\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n title: {\r\n text: 'Official snow depth data',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n subtitle: {\r\n text: 'Drag a section of the graph to zoom in',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: { // don't display the dummy year\r\n month: '%b %e ', year: '%b'\r\n },\r\n title: {\r\n text: ''\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Official snow depth (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n min: 0,\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '<b>{series.name}</b><br>',\r\n pointFormat: '{point.x:%b %e}: {point.y}cm'\r\n },\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n spline: {\r\n marker: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n series: resortWeatherSnowDataSeries,\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-dark-blue sj-round-half center-aligned mt-5\">\r\n <h3>{resortName}</h3>\r\n </div>\r\n <div>\r\n <HighchartsReact highcharts={Highcharts} options={options} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SnowChart;","import { useState, useEffect } from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\n\r\nconst SeasonSnowChart = ({ resortName, snowData, season, chartOptions, index }) => {\r\n\r\n const [resortWeatherSnowDataSeries, setResortWeatherSnowDataSeries] = useState([])\r\n const chartColors = [\"#0000CC\", \"#0033CC\", \"#3366CC\", \"#3399FF\", \"#000066\", \"#990000\", \"#CC0000\", \"#FF0066\", \"#660033\", \"#8904B1\", \"#FE9A2E\", \"#DF7401\"]\r\n\r\n const getSnowDataValue = (thisSeason) => {\r\n\r\n let dailySnowData = [];\r\n\r\n let dailyData = snowData.filter(function (currentElement) {\r\n return (currentElement.Season === thisSeason && currentElement.SnowDepth !== 999);\r\n });\r\n\r\n dailyData.sort(function (a, b) {\r\n var dateA = new Date(a.CreatedAt), dateB = new Date(b.CreatedAt)\r\n return dateA - dateB\r\n })\r\n\r\n dailyData.forEach(function (dataItem) {\r\n let valueCounter = 0;\r\n\r\n if (dataItem.WeatherMonth < 6) {\r\n valueCounter = 1\r\n }\r\n\r\n dailySnowData.push([Date.UTC(1969 + valueCounter, Number(dataItem.WeatherMonth) - 1, dataItem.WeatherDay), dataItem.SnowDepth])\r\n })\r\n\r\n return dailySnowData\r\n }\r\n\r\n const GetResortWeatherSnowDataSeries = (thisSeason) => {\r\n\r\n let thisResortWeatherSnowDataSeries = [];\r\n\r\n thisResortWeatherSnowDataSeries.push({\r\n 'name': thisSeason,\r\n 'data': getSnowDataValue(thisSeason)\r\n })\r\n\r\n setResortWeatherSnowDataSeries(thisResortWeatherSnowDataSeries)\r\n }\r\n\r\n useEffect(() => {\r\n GetResortWeatherSnowDataSeries(season)\r\n }, [season, snowData]);\r\n\r\n const thisOptions = { ...chartOptions, series: resortWeatherSnowDataSeries, colors: [chartColors[index]] };\r\n\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned mt-5\">\r\n <h4>{season} Season snow depth data ({resortName})</h4>\r\n </div>\r\n <div>\r\n <HighchartsReact highcharts={Highcharts} options={thisOptions} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SeasonSnowChart;","import { Link } from 'react-router-dom'\r\nimport { GetTotalMonthDays, GetCurrentSeasonName } from '../../../../helpers/Helper'\r\n\r\nconst SnowTable = ({ resort, snowData, skiAreaDailyReport }) => {\r\n\r\n const getMonthlySeasonSnowDepthValue = (month) => {\r\n\r\n let monthlySeasonSnowfallData = []\r\n\r\n let snowSeasons = [...new Set(snowData.map(item => item.Season))].sort().reverse();\r\n\r\n snowSeasons.forEach(function (snowSeason) {\r\n\r\n let dailySnowDepthData = []\r\n\r\n let dailySnowData = snowData.filter(function (currentElement) {\r\n return (currentElement.WeatherMonthFull === month && currentElement.Season === snowSeason);\r\n });\r\n\r\n dailySnowData.forEach(function (dataItem) {\r\n dailySnowDepthData.push({ 'day': dataItem.WeatherDay, 'dailySnowDepth': dataItem.SnowDepth })\r\n })\r\n\r\n monthlySeasonSnowfallData.push({ 'seasonName': snowSeason, 'seasonDailySnowDepth': dailySnowDepthData })\r\n })\r\n\r\n return monthlySeasonSnowfallData;\r\n }\r\n\r\n let dailySnowDepthDataList = [];\r\n //let months = ['November', 'December', 'January', 'February', 'March', 'April'];\r\n let months = ['December', 'January', 'February', 'March', 'April'];\r\n\r\n months.forEach(function (month) {\r\n dailySnowDepthDataList.push({\r\n 'name': month,\r\n 'seasonData': getMonthlySeasonSnowDepthValue(month)\r\n })\r\n })\r\n\r\n let totalDays = 0\r\n\r\n const runCallback = (cb) => {\r\n return cb();\r\n };\r\n\r\n const GetDailyData = (monthlyData, day) => {\r\n let snowData = monthlyData.filter(function (elm) {\r\n return (elm.day === day);\r\n });\r\n\r\n if (snowData.length > 0 && snowData[0].dailySnowDepth !== 999) {\r\n return snowData[0].dailySnowDepth;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const GetDayTh = (day) => {\r\n let dayTh = ''\r\n\r\n switch (day) {\r\n case 1:\r\n case 21:\r\n case 31:\r\n dayTh = 'st'\r\n break;\r\n case 2:\r\n case 22:\r\n dayTh = 'nd'\r\n break;\r\n case 3:\r\n case 23:\r\n dayTh = 'rd'\r\n break;\r\n default:\r\n dayTh = 'th'\r\n }\r\n\r\n return day + dayTh\r\n };\r\n\r\n const currentSeason = GetCurrentSeasonName()\r\n\r\n if (snowData.length <= 0) {\r\n return (<>Loading...</>)\r\n }\r\n else {\r\n return (\r\n <div className='empty-row'>\r\n {\r\n dailySnowDepthDataList.map((monthlyData, index) => (\r\n <div key={index} className='empty-row' style={{ overflowX: 'auto' }}>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned mt-5\">\r\n <h4>{monthlyData.name}</h4>\r\n </div>\r\n <div className='table-container'>\r\n <table className='table-container__table sj-data-table'>\r\n <thead>\r\n <tr>\r\n <th>Season</th>\r\n {runCallback(() => {\r\n totalDays = GetTotalMonthDays(monthlyData.name)\r\n const row = [];\r\n for (var i = 1; i < (totalDays + 1); i++) {\r\n row.push(<th key={i}>{GetDayTh(i)}</th>);\r\n }\r\n return row;\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {monthlyData.seasonData.map((seasonSnowData, key) => (\r\n <tr key={key}>\r\n <td className={`td-first-column ${seasonSnowData.seasonName === currentSeason ? \"sj-box-red\" : \"\"}`}><Link to={`${window.$baseDailyReportUrl}/${skiAreaDailyReport.NowUniqueName}/season/${seasonSnowData.seasonName}`}>{seasonSnowData.seasonName}</Link></td>\r\n {runCallback(() => {\r\n const row = [];\r\n for (var i = 1; i < (totalDays + 1); i++) {\r\n row.push(<td key={i} className={`${seasonSnowData.seasonName === currentSeason ? \"sj-box-light-red\" : \"\"}`}>{\r\n GetDailyData(seasonSnowData.seasonDailySnowDepth, i)\r\n }</td>);\r\n }\r\n return row;\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n ))\r\n }\r\n </div >\r\n )\r\n }\r\n}\r\n\r\nexport default SnowTable;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\nimport SnowChart from '../../../Common/SnowChart'\r\nimport SeasonSnowChart from '../../../Common/SeasonSnowChart'\r\nimport SnowTable from './SnowTable'\r\n\r\nconst SnowDataContainer = ({ resort, skiAreaDailyReport }) => {\r\n\r\n console.log(skiAreaDailyReport)\r\n\r\n const [snowData, setSnowData] = useState([]);\r\n\r\n const fetchSnowData = async (resortId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/snowfall/${resortId}`\r\n }).then(dataSnowData => {\r\n if (dataSnowData.data.length > 0) {\r\n\r\n let thisAllSnowData = dataSnowData.data\r\n\r\n let thisSnowData = thisAllSnowData.filter(function (currentElement) {\r\n return (currentElement.SnowDepth !== 999 && currentElement.Season !== '-');\r\n });\r\n\r\n setSnowData(thisSnowData)\r\n }\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSnowData(resort.Id);\r\n }, [resort.Id]);\r\n\r\n const chartOptions = {\r\n chart: {\r\n type: 'area',\r\n zoomType: 'x',\r\n backgroundColor: \"#efefef\",\r\n borderWidth: 1,\r\n borderColor: \"#dedede\",\r\n style: {\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n title: {\r\n text: 'Official snow depth data',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n subtitle: {\r\n text: 'Drag a section of the graph to zoom in',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: { // don't display the dummy year\r\n month: '%b %e ', year: '%b'\r\n },\r\n title: {\r\n text: '',\r\n enabled: false\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Official snow depth (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n min: 0,\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '<b>{series.name}</b><br>',\r\n pointFormat: '{point.x:%b %e}: {point.y}cm'\r\n },\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n marker: {\r\n enabled: false,\r\n symbol: 'circle',\r\n radius: 3,\r\n states: {\r\n hover: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 3\r\n }\r\n },\r\n threshold: null\r\n }\r\n },\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n if (snowData.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n else {\r\n let seasons = [...new Set(snowData.map(item => item.Season))].sort().reverse();\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Snow depth data for {resort.Name} ({resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan) | SnowJapan</title>\r\n <meta name=\"description\" content={`Official snow depth data (current and archive) for ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Depth.svg\" alt={`${resort.Name} snow data`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Official snow depth data</h3>\r\n <div className=\"sj-para\">\r\n The data published on this page is official snow depth data - as originally reported by the ski area. It is updated daily during the main winter season. Please note that each ski area has its own method of measuring snow depth, and SnowJapan does not control the data.\r\n </div>\r\n <div className=\"sj-para\">\r\n Click on each season's name to toggle on/off and compare the seasons on the top graph. Data is presented in the tables below the graphs.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <SnowChart resortName={resort.Name} snowData={snowData} />\r\n {seasons.map((season, index) => (\r\n <div key={index}>\r\n <SeasonSnowChart resortName={resort.Name} snowData={snowData} season={season} chartOptions={chartOptions} index={index} />\r\n </div>\r\n ))}\r\n {skiAreaDailyReport !== undefined &&\r\n <SnowTable resort={resort} snowData={snowData} skiAreaDailyReport={skiAreaDailyReport} />\r\n }\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default SnowDataContainer;","import { useState } from 'react'\r\nimport { Button, Collapse } from 'react-bootstrap'\r\nimport { Helmet } from 'react-helmet'\r\nimport SkiAreaInfo from '../SkiAreaInfo'\r\n\r\nconst WeatherContainer = ({ resort }) => {\r\n\r\n const [openPrecipitationMap, setOpenPrecipitationMap] = useState(false);\r\n const [openAnimateForecasts, setOpenAnimateForecasts] = useState(false);\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Weather & snow forecasts for {resort.Name} ({resort.TownName} {resort.TownTypeStr}, {resort.PrefectureName}, Japan) | SnowJapan</title>\r\n <meta name=\"description\" content={`Weather and snow forecast resources for ${resort.Name}, a ski area located in ${resort.TownName} ${resort.TownTypeStr}, ${resort.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <div className='empty-row'>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Weather-HeavySnow.svg\" alt={`${resort.Name} weather forecast`} /></div>\r\n <div>\r\n <SkiAreaInfo resort={resort} />\r\n <div className=\"sj-para\">\r\n <h3>Weather resources</h3>\r\n <div className='sj-para'>\r\n The <strong>Japan Meteorological Agency (JMA)</strong> publishes various real-time snowfall, weather and forecast related resources. We introduce various resources for the region where <strong>{resort.Name}</strong> is located on this page. All links open in a new window. All maps are centred on the exact location of <strong>{resort.Name}</strong>.\r\n </div>\r\n <div className='sj-para sj-red-text'>\r\n Important: The below information is provided to give a general insight into the weather and snowfall conditions in the region. It is not ski area specific. Actual snowfall is often more than shown, especially at higher elevations.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2\">\r\n <h4>{resort.Name} region</h4>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Town information</h5>\r\n </div>\r\n </div>\r\n {(resort.HotelBookingLink1 !== null && resort.HotelBookingLink1 !== undefined && resort.HotelBookingLink1 !== '') &&\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={resort.HotelBookingLink1} target='_blank' rel='noreferrer'>Local forecast</a></h5>\r\n </div>\r\n </div>\r\n }\r\n {(resort.HotelBookingLink2Text !== null && resort.HotelBookingLink2Text !== undefined && resort.HotelBookingLink2Text !== '') &&\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={resort.HotelBookingLink2Text} target='_blank' rel='noreferrer'>Observations</a></h5>\r\n </div>\r\n </div>\r\n }\r\n {(resort.HotelBookingLink1Text !== null && resort.HotelBookingLink1Text !== undefined && resort.HotelBookingLink1Text !== '') &&\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={resort.HotelBookingLink1Text} target='_blank' rel='noreferrer'>Weather Advisory</a></h5>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Precipitation analysis</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_nowc/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:deep/elements:hrpns&slmcs&amds_rain10m`} target='_blank' rel='noreferrer'>Now</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_kaikotan/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:normal/#zoom:6/elements:slmcs&rasrf24h`} target='_blank' rel='noreferrer'>24-hour</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:deep/elements:snowd`} target='_blank' rel='noreferrer'>Snow depth</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Snowfall</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:deep/elements:snowf24h`} target='_blank' rel='noreferrer'>24-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:deep/elements:snowf48h`} target='_blank' rel='noreferrer'>48-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${resort.Location_Latitude}/lon:${resort.Location_Longitude}/colordepth:deep/elements:snowf72h`} target='_blank' rel='noreferrer'>72-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n The JMA is an agency of the Ministry of Land, Infrastructure, Transport and Tourism.\r\n </div>\r\n <div className=\"sj-row\">\r\n <h3 className='mt-5'>About weather forecasts</h3>\r\n We do not specifically recommend any detailed weather forecasting service for all regions of Japan. However, many forecasts, both in Japanese and English, are free to use and widely available. Such services offer varying accuracy, with some seemingly more accurate for some areas of Japan than others.\r\n </div>\r\n {resort.WeatherFeedUrl !== '' &&\r\n <>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Weather map</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <h4>Precipitation & 9-day forecast</h4>\r\n <div className=\"mt-2\">\r\n <div className=\"mt-2\">\r\n <Button\r\n onClick={() => setOpenPrecipitationMap(!openPrecipitationMap)}\r\n aria-expanded={openPrecipitationMap} className='w-100 mb-1'><h5 className='mt-1'>{openPrecipitationMap ? 'Click to hide map -' : 'Click to view map +'}</h5></Button>\r\n <Collapse in={openPrecipitationMap}>\r\n <>\r\n {(openPrecipitationMap) &&\r\n <>\r\n <div className='ratio ratio-16x9'>\r\n\r\n <iframe title='Precipitation & 9 Days Forecast' src={`https://embed.windy.com/embed2.html?lat=${resort.Location_Latitude}&lon=${resort.Location_Longitude}&detailLat=${resort.Location_Latitude}&detailLon=${resort.Location_Longitude}&zoom=${resort.Location_MapZoomLevel}&level=surface&overlay=rain&product=ecmwf&menu=&message=true&marker=true&calendar=now&pressure=&type=map&location=coordinates&detail=true&metricWind=m%2Fs&metricTemp=%C2%B0C&radarRange=-1`} allowFullScreen></iframe>\r\n\r\n </div>\r\n <div className='center-aligned'>\r\n Use the bar above the forecast to advance the timeline\r\n </div>\r\n </>\r\n }\r\n </>\r\n </Collapse>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n <h4>Animated forecasts</h4>\r\n <div className=\"mt-2\">\r\n <div className=\"mt-2\">\r\n <Button\r\n onClick={() => setOpenAnimateForecasts(!openAnimateForecasts)}\r\n aria-expanded={openAnimateForecasts} className='w-100 mb-1'><h5 className='mt-1'>{openAnimateForecasts ? 'Click to hide map -' : 'Click to view map +'}</h5></Button>\r\n <Collapse in={openAnimateForecasts}>\r\n <>\r\n {(openAnimateForecasts) &&\r\n <>\r\n <div className='ratio ratio-16x9'>\r\n <iframe title='Various animated forecasts' src={`https://embed.windy.com/embed2.html?lat=${resort.Location_Latitude}&lon=${resort.Location_Longitude}&detailLat=${resort.Location_Latitude}&detailLon=${resort.Location_Longitude}&width=920&height=750&zoom=${resort.Location_MapZoomLevel}&level=surface&overlay=temp&product=ecmwf&menu=&message=true&marker=&calendar=now&pressure=true&type=map&location=coordinates&detail=&metricWind=m%2Fs&metricTemp=%C2%B0C&radarRange=-1`} allowFullScreen></iframe>\r\n </div>\r\n <div className='center-aligned'>\r\n Use the play button (bottom left) to start a forecast animation\r\n </div>\r\n </>\r\n }\r\n </>\r\n </Collapse>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n }\r\n {resort.WeatherFeedUrl === '' &&\r\n <>\r\n <h4>Currently there is no weather map available for {resort.Name}</h4>\r\n </>\r\n }\r\n </div>\r\n )\r\n};\r\n\r\nexport default WeatherContainer;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst SpotlightContainer = ({ resort }) => {\r\n\r\n const [listingDetail, setListingDetail] = useState({});\r\n\r\n const fetchListing = async (thisResort) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/listings/${thisResort.ResortSpotlightUrl}`\r\n }).then(dataListingDetail => {\r\n setListingDetail(dataListingDetail.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchListing(resort);\r\n }, [resort]);\r\n\r\n if (listingDetail === undefined) {\r\n <Loader />\r\n } else {\r\n return (\r\n <div>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(listingDetail.HtmlContent) }} />\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default SpotlightContainer;","import { useState, useEffect, Fragment } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport Loader from '../../Common/Loader'\r\nimport SkiAreaDetailTabs from './SkiAreaDetailTabs'\r\nimport BasicContainer from './BasicInfo/BasicInfoContainer'\r\nimport DailyReportContainer from './DailyReport/DailyReportContainer'\r\nimport HistoryContainer from './History/HistoryContainer'\r\nimport ListingsContainer from './Listings/ListingsContainer'\r\nimport LocationContainer from './Location/LocationContainer'\r\nimport PhotosContainer from './Photos/PhotosContainer'\r\nimport ReviewsContainer from './Reviews/ReviewsContainer'\r\nimport RouteFinderContainer from './RouteFinder/RouteFinderContainer'\r\nimport SnowDataContainer from './SnowData/SnowDataContainer'\r\nimport WeatherContainer from './Weather/WeatherContainer'\r\nimport SpotlightContainer from './Spotlight/SpotlightContainer'\r\n\r\nconst SkiAreaDetailContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n const [showSnowData, setShowSnowData] = useState('')\r\n\r\n const [resort, setResort] = useState([])\r\n const [nearbySkiAreas, setNearbySkiAreas] = useState([])\r\n const [skiAreaDailyReport, setSkiAreaDailyReport] = useState(undefined)\r\n const [skiAreaLatestWeather, setSkiAreaLatestWeather] = useState(undefined)\r\n\r\n const [nearbyAccommodations, setNearbyAccommodations] = useState([])\r\n const [areaSectionListings, setAreaSectionListings] = useState([])\r\n\r\n const [hasListings, setHasListings] = useState(false)\r\n\r\n const getAreaListingValue = (sectionUniqueName, listingList) => {\r\n\r\n let listingSectionData = []\r\n\r\n let listingData = listingList.filter(function (currentElement) {\r\n return (currentElement.SectionUniqueName === sectionUniqueName)\r\n })\r\n\r\n listingData.forEach(function (dataItem) {\r\n\r\n listingSectionData.push(dataItem)\r\n })\r\n\r\n return listingSectionData;\r\n }\r\n\r\n const getListingSectionName = (sectionUniqueName, listingList) => {\r\n\r\n let sectionName = ''\r\n\r\n let listingData = listingList.filter(function (currentElement) {\r\n return (currentElement.SectionUniqueName === sectionUniqueName)\r\n })\r\n\r\n listingData.forEach(function (dataItem) {\r\n\r\n sectionName = dataItem.SectionName\r\n })\r\n\r\n return sectionName\r\n }\r\n\r\n const fetchData = async (resortUniqueName) => {\r\n\r\n let areaUniqueName = ''\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/${resortUniqueName}`\r\n }).then(dataResort => {\r\n\r\n if (Object.keys(dataResort.data).length <= 0) {\r\n window.location.href = \"https://www.snowjapan.com/404.html\"\r\n }\r\n\r\n setResort(dataResort.data)\r\n\r\n areaUniqueName = dataResort.data.AreaUniqueName\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/latestweather/latest`,\r\n data: {\r\n resortid: dataResort.data.Id\r\n }\r\n })\r\n }).then(dataResortLatestWeather => {\r\n setSkiAreaLatestWeather(dataResortLatestWeather.data)\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/nearby-resorts/${resortUniqueName}`\r\n })\r\n }).then(dataNearbySkiAreas => {\r\n let thisNearbySkiAreaList = []\r\n\r\n if (dataNearbySkiAreas.data.length > 0) {\r\n dataNearbySkiAreas.data.forEach(nr => {\r\n if (nr.FromSkiAreaUniqueName === resortUniqueName) {\r\n thisNearbySkiAreaList.push({ Id: nr.Id, Distance: nr.Distance, IsConnected: nr.IsConnected, SkiAreaName: nr.ToSkiAreaName, SkiAreaUniqueName: nr.ToSkiAreaUniqueName, SkiAreaPrefectureName: nr.ToSkiAreaPrefectureName, SkiAreaPrefectureUniqueName: nr.ToSkiAreaPrefectureUniqueName, SkiAreaTownName: nr.ToSkiAreaTownName, SkiAreaTownUniqueName: nr.ToSkiAreaTownUniqueName, SkiAreaTownTypeStr: nr.ToSkiAreaTownTypeStr, SkiAreaAreaName: nr.ToSkiAreaAreaName, SkiAreaAreaUniqueName: nr.ToSkiAreaAreaUniqueName })\r\n } else if (nr.ToSkiAreaUniqueName === resortUniqueName) {\r\n thisNearbySkiAreaList.push({ Id: nr.Id, Distance: nr.Distance, IsConnected: nr.IsConnected, SkiAreaName: nr.FromSkiAreaName, SkiAreaUniqueName: nr.FromSkiAreaUniqueName, SkiAreaPrefectureName: nr.FromSkiAreaPrefectureName, SkiAreaPrefectureUniqueName: nr.FromSkiAreaPrefectureUniqueName, SkiAreaTownName: nr.FromSkiAreaTownName, SkiAreaTownUniqueName: nr.FromSkiAreaTownUniqueName, SkiAreaTownTypeStr: nr.FromSkiAreaTownTypeStr, SkiAreaAreaName: nr.FromSkiAreaAreaName, SkiAreaAreaUniqueName: nr.FromSkiAreaAreaUniqueName })\r\n }\r\n })\r\n\r\n thisNearbySkiAreaList = thisNearbySkiAreaList.sort(function (a, b) {\r\n if (a.Distance > b.Distance) return 1;\r\n if (a.Distance < b.Distance) return -1;\r\n\r\n if (a.SkiAreaName > b.SkiAreaName) return 1;\r\n if (a.SkiAreaName < b.SkiAreaName) return -1;\r\n\r\n return 0;\r\n })\r\n }\r\n\r\n setNearbySkiAreas(thisNearbySkiAreaList)\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/dailyreportskiareas/resort/${resortUniqueName}`\r\n })\r\n }).then(dataSkiAreaDailyReport => {\r\n setSkiAreaDailyReport(dataSkiAreaDailyReport.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/nearby-hotels/${resortUniqueName}`\r\n })\r\n }).then(dataNearbyAccommodations => {\r\n setNearbyAccommodations(dataNearbyAccommodations.data)\r\n\r\n setHasListings(dataNearbyAccommodations.data.length > 0)\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/ShowSnowData`\r\n })\r\n }).then(resGeneralMessages => {\r\n setShowSnowData(resGeneralMessages.data.Title)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/listings/list/area/${areaUniqueName}`\r\n })\r\n }).then(dataAreaListings => {\r\n if (dataAreaListings.data.length > 0) {\r\n let listingDataSeries = [];\r\n let sections = [...new Set(dataAreaListings.data.map(item => item.SectionUniqueName))].sort().reverse();\r\n\r\n sections.forEach(function (item) {\r\n listingDataSeries.push({\r\n 'sectionName': getListingSectionName(item, dataAreaListings.data),\r\n 'sectionUniqueName': item,\r\n 'listings': getAreaListingValue(item, dataAreaListings.data)\r\n })\r\n })\r\n\r\n setAreaSectionListings(listingDataSeries)\r\n setHasListings(dataAreaListings.data.length > 0)\r\n }\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchData(params.resort)\r\n }, [params.resort]);\r\n\r\n if (Object.keys(resort).length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <Fragment>\r\n <h2>{resort.Name}</h2>\r\n <div className='sj-para-large mt-1 mb-3'>{resort.NameJapanese}</div>\r\n <SkiAreaDetailTabs params={params} resort={resort} skiAreaDailyReport={skiAreaDailyReport} skiAreaLatestWeather={skiAreaLatestWeather} hasListings={hasListings} />\r\n <>\r\n {\r\n {\r\n undefined: <BasicContainer resort={resort} nearbySkiAreaList={nearbySkiAreas} skiAreaLatestWeather={skiAreaLatestWeather} showSnowData={showSnowData} />,\r\n 'daily-report': <DailyReportContainer resort={resort} skiAreaDailyReport={skiAreaDailyReport} />,\r\n 'spotlight': <SpotlightContainer resort={resort} />,\r\n 'location': <LocationContainer resort={resort} nearbySkiAreaList={nearbySkiAreas} />,\r\n 'snow-data': <SnowDataContainer resort={resort} skiAreaDailyReport={skiAreaDailyReport} />,\r\n 'weather': <WeatherContainer resort={resort} />,\r\n 'history': <HistoryContainer resort={resort} />,\r\n 'reviews': <ReviewsContainer resort={resort} />,\r\n 'photos': <PhotosContainer resort={resort} />,\r\n 'route-finder': <RouteFinderContainer resort={resort} />,\r\n 'listing': <ListingsContainer resort={resort} nearbyAccommodations={nearbyAccommodations} areaSectionListings={areaSectionListings} />\r\n }[params.type]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n }\r\n}\r\n\r\nexport default SkiAreaDetailContainer","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link, useParams } from 'react-router-dom'\r\nimport { Button, Collapse, Image } from 'react-bootstrap'\r\nimport Loader from '../Common/Loader'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst Home = ({ seasonName }) => {\r\n\r\n const params = useParams()\r\n\r\n const [dailyReportList, setDailyReportList] = useState([])\r\n const [generalMessageList, setSeneralMessageList] = useState([])\r\n const [dailyReportMessage, setDailyReportMessage] = useState('')\r\n const [dailyReportWeatherMapUrl, setDailyReportWeatherMapUrl] = useState('')\r\n const [showSnowData, setShowSnowData] = useState('')\r\n const [latestSkiAreaWeatherList, setLatestSkiAreaWeatherList] = useState([])\r\n const [seasonTotalSnowList, setSeasonTotalSnowList] = useState([])\r\n const [open, setOpen] = useState(false)\r\n\r\n let singleSkiAreaWeatherReport = undefined\r\n\r\n const fetchGeneralMessagesAndDailyReports = async (thisSeasonName) => {\r\n const generalMessageIds = ['Nows', 'NowWeatherUrl', 'ShowSnowData']\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/all`,\r\n data: { generalMessageIds: generalMessageIds }\r\n }).then(resGeneralMessages => {\r\n setSeneralMessageList(resGeneralMessages.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/latest/all`\r\n })\r\n }).then(resDailyReportLatest => {\r\n setDailyReportList(resDailyReportLatest.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/season-snowfall/${thisSeasonName}/0`\r\n })\r\n }).then(resSeasonTotalSnow => {\r\n setSeasonTotalSnowList(resSeasonTotalSnow.data)\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/latestweather/list`,\r\n data: { filter_type: 'with-snow' }\r\n })\r\n }).then(resSkiAreaWeather => {\r\n if (resSkiAreaWeather.data) {\r\n const skiAreaLatestWeather = resSkiAreaWeather.data\r\n\r\n var maxCreated = skiAreaLatestWeather.sort((a, b) => b.CreatedAt - a.CreatedAt)[0].CreatedAt;\r\n\r\n const latestSkiAreaWeather = skiAreaLatestWeather.filter(function (currentElement) {\r\n return (currentElement.CreatedAt === maxCreated);\r\n })\r\n\r\n latestSkiAreaWeather.sort(function (a, b) {\r\n return a.SnowDepth - b.SnowDepth\r\n })\r\n\r\n setLatestSkiAreaWeatherList(latestSkiAreaWeather.reverse().slice(0, 25))\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n fetchGeneralMessagesAndDailyReports(seasonName)\r\n }, [params, seasonName])\r\n\r\n const GetSeasonTotal = (nowId) => {\r\n\r\n\r\n let seasonTotalSnow = seasonTotalSnowList.filter(function (currentElement) {\r\n return (currentElement.Now_Id === nowId);\r\n });\r\n\r\n let seasonSnowfall = '--'\r\n\r\n if (seasonTotalSnow.length > 0) {\r\n seasonSnowfall = seasonTotalSnow[0].TotalSnow + 'cm'\r\n }\r\n\r\n return seasonSnowfall\r\n }\r\n\r\n console.log(generalMessageList)\r\n\r\n if (generalMessageList.length > 0 && (dailyReportMessage === undefined || dailyReportMessage === '')) {\r\n setDailyReportMessage(generalMessageList[0].Message)\r\n }\r\n\r\n if (generalMessageList.length > 1 && (dailyReportWeatherMapUrl === undefined || dailyReportWeatherMapUrl === '')) {\r\n setDailyReportWeatherMapUrl(generalMessageList[1].Message)\r\n }\r\n\r\n if (generalMessageList.length > 2 && (showSnowData === undefined || showSnowData === '')) {\r\n setShowSnowData(generalMessageList[2].Title)\r\n }\r\n\r\n if (latestSkiAreaWeatherList.length > 0) {\r\n singleSkiAreaWeatherReport = latestSkiAreaWeatherList[0];\r\n }\r\n\r\n if (latestSkiAreaWeatherList.length <= 0) {\r\n return (<Loader />)\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Independent daily snow and weather reporting from Japan’s ski areas | SnowJapan</title>\r\n <meta name=\"description\" content=\"SnowJapan publishes exclusive daily snow and weather reports from popular ski area regions of Japan, including detailed analysis and archive data.\" />\r\n </Helmet>\r\n <h3>Daily Reports</h3>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Weather-HeavySnow.svg\" alt=\"Japan as 'Snow Country'\" /></div>\r\n <div>\r\n <div className=\"sj-para\"><div dangerouslySetInnerHTML={{ __html: RenderBreak(dailyReportMessage) }} /></div>\r\n </div>\r\n <div className=\"sj-row sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Now daily reports</h4>\r\n </div>\r\n <div className='center-aligned sj-row' style={{ overflow: 'none' }}>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n {dailyReportList.map(dailyReport => (\r\n <div key={dailyReport.Id} className=\"col-lg-4 col-md-6 sj-row-small-margin-padding\">\r\n <div className='daily-report-tile-container'>\r\n <div className='daily-report-tile'>\r\n <div className='daily-report-tile-body table-container'>\r\n <table className='table-container__table sj-table'>\r\n <tbody>\r\n <tr>\r\n <td colSpan='2'>\r\n <h4><Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}`}>{dailyReport.Name}</Link></h4>\r\n <div className='sj-red-text'>{dailyReport.NowReportDayTh} {dailyReport.NowReportMonthFull} {dailyReport.NowReportYear} ({dailyReport.NowReportHourMinute})</div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td className='sj-td-50'>Latest</td>\r\n <td className='sj-td-50'>{dailyReport.NewSnowfallResortA}cm</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Webcams</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-3 col-md-5 p-0 sj-list-icon-holder\">\r\n <Image src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Webcam.svg\" alt='snowjapan webcam' />\r\n </div>\r\n <div className=\"col-lg-9 col-md-7 sj-list-text-holder\">\r\n <div className=\"center-aligned mb-4\">\r\n <Link to={`${window.$baseDailyReportUrl}/webcams`}><h5>Webcam images and live video feeds from ski areas (and related places of interest) around Japan.</h5></Link>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-4 center-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><Link to='guides/ski-webcams/northern-japan'>Northern regions</Link></h5>\r\n <h6>including Hokkaido, Tohoku<br /> </h6>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 center-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><Link to='guides/ski-webcams/central-japan'>Central regions</Link></h5>\r\n <h6>including Niigata, Nagano, Gunma</h6>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 center-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><Link to='guides/ski-webcams/western-japan'>Western regions</Link></h5>\r\n <h6>including Gifu, Kansai and Western Japan</h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Reports calendar</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-3 col-md-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Calendar.svg\" alt='snowjapan calendar' />\r\n </div>\r\n <div className=\"col-lg-9 col-md-7 sj-list-text-holder\">\r\n <Link to={`${window.$baseDailyReportUrl}/calendar`}><h5>View the current season calendar with links to all the daily reports posted on SnowJapan.</h5></Link>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Real-time snowfall (new window) </h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-3 col-md-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Forecast.svg\" alt='snowjapan forecast' />\r\n </div>\r\n <div className=\"col-lg-9 col-md-7 sj-list-text-holder\">\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_kaikotan/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/#zoom:6/elements:slmcs&rasrf' target='_blank' rel='noreferrer'>1-hour precipitation</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_kaikotan/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/#zoom:6/elements:slmcs&rasrf03h' target='_blank' rel='noreferrer'>3-hour precipitation</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 mt-0 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_kaikotan/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/#zoom:6/elements:slmcs&rasrf24h' target='_blank' rel='noreferrer'>24-hour precipitation</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_snow/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/elements:snowf03h' target='_blank' rel='noreferrer'>3-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_snow/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/elements:snowf24h' target='_blank' rel='noreferrer'>24-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_snow/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/elements:snowf48h' target='_blank' rel='noreferrer'>48-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-4 sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href='https://www.jma.go.jp/bosai/en_snow/#zoom:6/lat:38.916682/lon:138.823242/colordepth:normal/elements:snowd' target='_blank' rel='noreferrer'>Snow depth</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Weather map</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-3 col-md-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Weather-HeavySnow.svg\" alt='snowjapan snowfall' />\r\n </div>\r\n <div className=\"col-lg-9 col-md-7 sj-list-text-holder\">\r\n <Button\r\n onClick={() => setOpen(!open)}\r\n aria-expanded={open} className='w-100 mb-1'><h5 className='mt-1'>{open ? 'Click to hide map -' : 'Click to view map +'}</h5></Button>\r\n <Collapse in={open}>\r\n <div className='ratio ratio-16x9'>\r\n {(open) &&\r\n <iframe title='Various animated forecasts' src={`${dailyReportWeatherMapUrl}`} allowFullScreen></iframe>\r\n }\r\n </div>\r\n </Collapse>\r\n </div>\r\n </div>\r\n </div>\r\n {(showSnowData == \"Y\") &&\r\n <>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Official ski area snow depth data</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-lg-3 col-md-5 p-0 sj-list-icon-holder\">\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Depth.svg\" alt='snowjapan snow depth' />\r\n </div>\r\n <div className=\"col-lg-9 col-md-7 sj-list-text-holder\">\r\n <div>\r\n <h5>Updated: {singleSkiAreaWeatherReport.WeatherDayTh} {singleSkiAreaWeatherReport.WeatherMonthFull} {singleSkiAreaWeatherReport.WeatherYear}</h5>\r\n </div>\r\n <div>\r\n The data in the below table originates from ski areas and is updated once a day in the main winter season.\r\n </div>\r\n {(latestSkiAreaWeatherList.length > 0) &&\r\n <div className='sj-row'>\r\n <div className='table-container'>\r\n <table className='table-container__table sj-list-table sj-snow-table'>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>Prefecture</th>\r\n <th>Current snow depth</th>\r\n <th>Change</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {latestSkiAreaWeatherList.map(skiAreaWeather => (\r\n <tr key={skiAreaWeather.Id}>\r\n <td>\r\n <Link to={`${window.$baseSkiAreaUrl}/${skiAreaWeather.PrefectureUniqueName}/${skiAreaWeather.TownUniqueName}/${skiAreaWeather.UniqueName}`}>{skiAreaWeather.Name}</Link>\r\n </td>\r\n <td>\r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${skiAreaWeather.PrefectureUniqueName}`}>{skiAreaWeather.PrefectureName}</Link>\r\n </td>\r\n <td>\r\n {skiAreaWeather.SnowDepth} cm\r\n </td>\r\n <td>\r\n {skiAreaWeather.SnowDepthCompareToYesterday} cm\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n <div className='center-aligned mt-4'>\r\n <h6><Link to={`${window.$baseDailyReportUrl}/official-snow-depth`} className=\"btn btn-primary sj-large-button-blue sj-full-width\">View the full list</Link></h6>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n }\r\n <div className='sj-row sj-box sj-box-red sj-round-full m-0 mt-2'>\r\n Weather maps, real-time snowfall data and weather information can be found within the individual Now daily report sections and on individual ski area information pages within SnowJapan.\r\n </div>\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://en.nozawaski.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-nozawa-onsen.jpg' alt='listing-nozawa-onsen' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1 mt-3'>\r\n <Link to='/listings/resort-spotlights/maiko-snow-resort'><Image src='https://www.snowjapan.com/UploadedFiles/ListingImages/link-maiko-snow-resort.jpg' fluid='true' alt='listing-geto-kogen.jpg' /></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default Home","import { useState, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom'\r\nimport Popup from \"reactjs-popup\";\r\n\r\nconst AllReportCalendar = ({ nowYear, nowMonth, dailySnowfallMonthlyList }) => {\r\n\r\n const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n const DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n const DAYS_OF_THE_WEEK = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'];\r\n const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\r\n //const today = new Date();\r\n const [date, setDate] = useState(new Date(nowYear, nowMonth, 1));\r\n //const [day, setDay] = useState(date.getDate());\r\n const [month, setMonth] = useState(date.getMonth());\r\n //const [year, setYear] = useState(date.getFullYear());\r\n const [startDay, setStartDay] = useState(getStartDayOfMonth(date));\r\n\r\n useEffect(() => {\r\n //setDay(date.getDate());\r\n setMonth(date.getMonth());\r\n //setYear(date.getFullYear());\r\n setStartDay(getStartDayOfMonth(date));\r\n }, [nowYear, nowMonth, date]);\r\n\r\n function getStartDayOfMonth(date) {\r\n const startDate = new Date(date.getFullYear(), date.getMonth(), 1).getDay();\r\n return startDate === 0 ? 7 : startDate;\r\n }\r\n\r\n function isLeapYear(year) {\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n }\r\n\r\n const getDayOrdinal = (day) => {\r\n if (day > 3 && day < 21) return 'th';\r\n switch (day % 10) {\r\n case 1: return \"st\";\r\n case 2: return \"nd\";\r\n case 3: return \"rd\";\r\n default: return \"th\";\r\n }\r\n }\r\n\r\n const getDailySnowfallReports = (calDay) => {\r\n\r\n let dailySnowfallData = dailySnowfallMonthlyList.filter(function (currentElement) {\r\n return (currentElement.NowReportDay === calDay);\r\n });\r\n\r\n dailySnowfallData.sort((a, b) => {\r\n let nameA = a.Name.toLowerCase(),\r\n nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n return dailySnowfallData\r\n }\r\n\r\n const containerId = \"keepinside\" + nowMonth + nowYear;\r\n const containerIdSelector = \"#keepinside\" + nowMonth + nowYear;\r\n\r\n const days = isLeapYear(date.getFullYear()) ? DAYS_LEAP : DAYS;\r\n\r\n return (\r\n <div className='now-calendar-frame' id={containerId}>\r\n <div className='now-calendar-frame-header'>\r\n <div className='center-aligned'>\r\n <h4>{MONTHS[month]} {nowYear}</h4>\r\n </div>\r\n </div>\r\n <div className='now-calendar-frame-body'>\r\n {DAYS_OF_THE_WEEK.map((d) => (\r\n <div key={d} className='now-calendar-day-header'>\r\n <strong>{d}</strong>\r\n </div>\r\n ))}\r\n {Array(days[month] + (startDay - 1)).fill(null).map((_, index) => {\r\n\r\n const d = index - (startDay - 2);\r\n var dayClassName = ''\r\n\r\n var allDailyReports = []\r\n\r\n if (d <= 0) {\r\n dayClassName = ' empty-date'\r\n } else {\r\n dayClassName = ' with-date'\r\n allDailyReports = getDailySnowfallReports(d)\r\n\r\n if (allDailyReports.length > 0) {\r\n dayClassName = ' with-date with-report'\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {allDailyReports.length <= 0 &&\r\n <div className={dayClassName} key={index}>\r\n {d > 0 ? d : ''}\r\n </div>\r\n }\r\n\r\n {allDailyReports.length > 0 &&\r\n <Popup\r\n trigger={open => (\r\n <div className={dayClassName} key={index}>\r\n {d > 0 ? d : ''}\r\n </div>\r\n )}\r\n position=\"top\"\r\n closeOnDocumentClick=\"true\"\r\n keepTooltipInside={containerIdSelector}\r\n >\r\n <div className='popup-content-header'><h5>Daily Reports on {MONTHS[month]} {d}{getDayOrdinal(d)}, {nowYear}</h5></div>\r\n <div className='popup-content-body'>\r\n {(allDailyReports.length > 0) &&\r\n <div>\r\n {allDailyReports.map((dailyData, index) => (\r\n <div key={index}>\r\n <Link to={`${window.$baseDailyReportUrl}/${dailyData.UniqueName}/archives/${dailyData.NowReportDayTh}-${dailyData.NowReportMonthFull}-${dailyData.NowReportYear}`}>{dailyData.Name}</Link>\r\n </div>\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </Popup>\r\n }\r\n </>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AllReportCalendar;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport AllReportCalendar from './AllReportCalendar';\r\n\r\nconst Calendar = ({ seasonName }) => {\r\n const [years, setYears] = useState(seasonName.split('-'));\r\n const [dailySnowfallList, setDailySnowfallList] = useState([]);\r\n\r\n const fetchDailyObservedSnowfall = async (thisSeasonName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/All/${thisSeasonName}`\r\n //url: `${window.$baseAPIUrl}/dailyreport/reports/All/2020-2021`\r\n }).then(resDailySnowfall => {\r\n setDailySnowfallList(resDailySnowfall.data)\r\n })\r\n };\r\n\r\n const getDailySnowfallMonthlyList = (month) => {\r\n let dailyData = dailySnowfallList.filter(function (currentElement) {\r\n return (currentElement.NowReportMonth === month);\r\n });\r\n\r\n return dailyData\r\n }\r\n\r\n useEffect(() => {\r\n fetchDailyObservedSnowfall(seasonName)\r\n setYears(seasonName.split('-'))\r\n }, [seasonName]);\r\n\r\n return (\r\n <div className='empty-row'>\r\n <div>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Calendar.svg\" alt=\"Japan as 'Snow Country'\" /></div>\r\n <div>\r\n <h3>Daily snowfall calendar</h3>\r\n <div className=\"sj-para\">\r\n <h3 className='sj-red-header'>{seasonName} season</h3>\r\n View any of our Now daily reports from across the Japan using the links on the calendar below. Detailed snowfall analysis and archives are available within each report section.\r\n </div>\r\n </div>\r\n </div>\r\n <div className='center-aligned sj-row' style={{ overflow: 'none' }}>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[0]} nowMonth={10} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(11)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[0]} nowMonth={11} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(12)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[1]} nowMonth={0} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(1)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[1]} nowMonth={1} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(2)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[1]} nowMonth={2} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(3)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <AllReportCalendar nowYear={years[1]} nowMonth={3} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(4)} />\r\n </div>\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n};\r\n\r\nexport default Calendar;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link, useParams } from 'react-router-dom'\r\nimport Loader from \"../Common/Loader\"\r\nimport { Helmet } from 'react-helmet'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faAngleDoubleDown, faAngleDoubleUp } from '@fortawesome/free-solid-svg-icons'\r\n\r\nconst OfficialSnowDepth = () => {\r\n\r\n const params = useParams()\r\n\r\n const [allSkiAreaWeatherList, setAllSkiAreaWeatherList] = useState([])\r\n const [lastUpdateDate, setLastUpdateDate] = useState('')\r\n const [showSnowData, setShowSnowData] = useState('')\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Current Snow Depth [highest>lowest]')\r\n const [nameSorted, setNameSorted] = useState('')\r\n const [townSorted, setTownSorted] = useState('')\r\n const [prefectureSorted, setPrefectureSorted] = useState('')\r\n const [snowDepthSorted, setSnowDepthSorted] = useState('sorted-column')\r\n const [changeSorted, setChangeSorted] = useState('')\r\n const [sortOrder, setSortOrder] = useState('ASC')\r\n\r\n const fetchSkiAreaWeatherList = async (thisMatch) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/latestweather/list`,\r\n data: { filter_type: 'all' }\r\n }).then(resSkiAreaWeather => {\r\n if (resSkiAreaWeather.data) {\r\n const skiAreaLatestWeather = resSkiAreaWeather.data\r\n\r\n if (skiAreaLatestWeather.length > 0) {\r\n var latestReport = skiAreaLatestWeather.sort((a, b) => b.CreatedAt - a.CreatedAt)[0]\r\n\r\n setLastUpdateDate(latestReport.WeatherDayTh + ' ' + latestReport.WeatherMonthFull + ' ' + latestReport.WeatherYear)\r\n\r\n var maxCreated = latestReport.CreatedAt;\r\n\r\n const latestSkiAreaWeather = skiAreaLatestWeather.filter(function (currentElement) {\r\n return (currentElement.CreatedAt === maxCreated);\r\n });\r\n\r\n if (latestSkiAreaWeather.length > 0) {\r\n latestSkiAreaWeather.sort(function (a, b) {\r\n return b.SnowDepth - a.SnowDepth\r\n })\r\n\r\n setAllSkiAreaWeatherList(latestSkiAreaWeather)\r\n }\r\n }\r\n }\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/ShowSnowData`\r\n })\r\n }).then(resGeneralMessages => {\r\n setShowSnowData(resGeneralMessages.data.Title)\r\n })\r\n };\r\n\r\n useEffect((params) => {\r\n fetchSkiAreaWeatherList()\r\n }, [params]);\r\n\r\n const SortResult = (evtKey, evt) => {\r\n\r\n var sortedResult = []\r\n\r\n var sortOrder = ''\r\n\r\n setNameSorted('')\r\n setTownSorted('')\r\n setPrefectureSorted('')\r\n setSnowDepthSorted('')\r\n setChangeSorted('')\r\n\r\n if (evtKey === '1' || evtKey === '2') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase()\r\n\r\n if (nameA < nameB) { return -1 }\r\n if (nameA > nameB) { return 1 }\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '2') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n setNameSorted('sorted-column')\r\n\r\n } else if (evtKey === '3' || evtKey === '4') {\r\n if (evtKey === '3') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n let townNameA = a.TownName.toLowerCase(), townNameB = b.TownName.toLowerCase();\r\n\r\n if (townNameA < townNameB) { return -1 }\r\n if (townNameA > townNameB) { return 1 }\r\n\r\n if (nameA < nameB) { return -1 }\r\n if (nameA > nameB) { return 1 }\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '4') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n let townNameA = a.TownName.toLowerCase(), townNameB = b.TownName.toLowerCase();\r\n\r\n if (townNameA < townNameB) { return 1 }\r\n if (townNameA > townNameB) { return -1 }\r\n\r\n if (nameA < nameB) { return -1 }\r\n if (nameA > nameB) { return 1 }\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n setTownSorted('sorted-column')\r\n\r\n } else if (evtKey === '5' || evtKey === '6') {\r\n if (evtKey === '5') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase()\r\n let townNameA = a.TownName.toLowerCase(), townNameB = b.TownName.toLowerCase()\r\n let prefectureNameA = a.PrefectureName.toLowerCase(), prefectureNameB = b.PrefectureName.toLowerCase()\r\n\r\n if (prefectureNameA < prefectureNameB) { return -1 }\r\n if (prefectureNameA > prefectureNameB) { return 1 }\r\n\r\n if (townNameA < townNameB) { return -1 }\r\n if (townNameA > townNameB) { return 1 }\r\n\r\n if (nameA < nameB) { return -1 }\r\n if (nameA > nameB) { return 1 }\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '6') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase()\r\n let townNameA = a.TownName.toLowerCase(), townNameB = b.TownName.toLowerCase()\r\n let prefectureNameA = a.PrefectureName.toLowerCase(), prefectureNameB = b.PrefectureName.toLowerCase()\r\n\r\n if (prefectureNameA < prefectureNameB) { return 1 }\r\n if (prefectureNameA > prefectureNameB) { return -1 }\r\n\r\n if (townNameA < townNameB) { return -1 }\r\n if (townNameA > townNameB) { return 1 }\r\n\r\n if (nameA < nameB) { return -1 }\r\n if (nameA > nameB) { return 1 }\r\n\r\n return 0\r\n })\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n setPrefectureSorted('sorted-column')\r\n\r\n } else if (evtKey === '7' || evtKey === '8') {\r\n if (evtKey === '7') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n if (a.SnowDepth < b.SnowDepth) return 1\r\n if (a.SnowDepth > b.SnowDepth) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '8') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n if (a.SnowDepth > b.SnowDepth) return 1\r\n if (a.SnowDepth < b.SnowDepth) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0;\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n setSnowDepthSorted('sorted-column')\r\n } else if (evtKey === '9' || evtKey === '10') {\r\n if (evtKey === '9') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n if (a.SnowDepthCompareToYesterday < b.SnowDepthCompareToYesterday) return 1\r\n if (a.SnowDepthCompareToYesterday > b.SnowDepthCompareToYesterday) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n sortOrder = \"ASC\"\r\n } else if (evtKey === '10') {\r\n sortedResult = allSkiAreaWeatherList.sort(function (a, b) {\r\n if (a.SnowDepthCompareToYesterday > b.SnowDepthCompareToYesterday) return 1\r\n if (a.SnowDepthCompareToYesterday < b.SnowDepthCompareToYesterday) return -1\r\n\r\n if (a.Name > b.Name) return 1\r\n if (a.Name < b.Name) return -1\r\n\r\n return 0\r\n })\r\n\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n setChangeSorted('sorted-column')\r\n }\r\n\r\n setButtonTitle('Sort by: ' + evt.target.innerText)\r\n setSortOrder(sortOrder)\r\n }\r\n\r\n if (allSkiAreaWeatherList.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Official snow depth data of ski areas in Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Official snow depth data chart for ski areas throughout Japan. Updated daily in winter.\" />\r\n </Helmet>\r\n <div className='mb-4'>\r\n <div className=\"sj-para-image mb-4\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Snow-Depth.svg\" alt=\"Official ski area snow depth data\" /></div>\r\n <div>\r\n <h3>Official ski area snow depth data</h3>\r\n <div className=\"sj-para\">\r\n {(showSnowData !== undefined && showSnowData === \"Y\") &&\r\n <h3 className='sj-red-header'>Latest update: {lastUpdateDate}</h3>\r\n }\r\n {(showSnowData !== undefined && showSnowData === \"Y\") &&\r\n <>The information presented in this table is official snow depth data originating from ski areas and is updated once a day through the main winter season. Please keep in mind that every ski area has its own policy and methods of measuring snow depth.</>\r\n }\r\n {(showSnowData !== undefined && showSnowData === \"N\") &&\r\n <>Official snow depth data for ski areas throughout Japan is displayed here during the winter season</>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n {(showSnowData !== undefined && showSnowData === \"Y\") &&\r\n <div className='empty-row'>\r\n <div className='right-aligned'>\r\n <DropdownButton align=\"end\" title={buttonTitle} onSelect={SortResult} id=\"dropdown-menu-align-end\">\r\n <Dropdown.Item eventKey=\"1\">Ski area name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"2\">Ski area name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"3\">Town name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"4\">Town name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"5\">Prefecture name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"6\">Prefecture name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"7\">Current Snow Depth [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"8\">Current Snow Depth [lowest{'>'}highest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"9\">Change [highest{'>'}lowest]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"10\">Change [lowest{'>'}highest]</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n <div className='table-container overflow-x'>\r\n <table className='table-container__table sj-list-table'>\r\n <thead>\r\n <tr>\r\n <th className={`${nameSorted !== '' ? \"sorted-column-header\" : \"\"}`}>\r\n <h5>\r\n {(nameSorted !== '' && sortOrder === 'ASC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleDown} />\r\n }\r\n {(nameSorted !== '' && sortOrder === 'DESC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleUp} />\r\n }\r\n </h5>\r\n </th>\r\n <th className={`${townSorted !== '' ? \"sorted-column-header\" : \"\"}`}>\r\n <h5>\r\n Town \r\n {(townSorted !== '' && sortOrder === 'ASC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleDown} />\r\n }\r\n {(townSorted !== '' && sortOrder === 'DESC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleUp} />\r\n }\r\n </h5>\r\n </th>\r\n <th className={`${prefectureSorted !== '' ? \"sorted-column-header\" : \"\"}`}>\r\n <h5>\r\n Prefecture \r\n {(prefectureSorted !== '' && sortOrder === 'ASC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleDown} />\r\n }\r\n {(prefectureSorted !== '' && sortOrder === 'DESC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleUp} />\r\n }\r\n </h5>\r\n </th>\r\n <th className={`${snowDepthSorted !== '' ? \"sorted-column-header\" : \"\"}`}>\r\n <h5>\r\n Current Snow Depth \r\n {(snowDepthSorted !== '' && sortOrder === 'ASC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleDown} />\r\n }\r\n {(snowDepthSorted !== '' && sortOrder === 'DESC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleUp} />\r\n }\r\n </h5>\r\n </th>\r\n <th className={`${changeSorted !== '' ? \"sorted-column-header\" : \"\"}`}>\r\n <h5>\r\n Change \r\n {(changeSorted !== '' && sortOrder === 'ASC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleDown} />\r\n }\r\n {(changeSorted !== '' && sortOrder === 'DESC') &&\r\n <FontAwesomeIcon icon={faAngleDoubleUp} />\r\n }\r\n </h5>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {allSkiAreaWeatherList.map(skiAreaWeather => (\r\n <tr key={skiAreaWeather.Id}>\r\n <td className={nameSorted}>\r\n <Link to={`${window.$baseSkiAreaUrl}/${skiAreaWeather.PrefectureUniqueName}/${skiAreaWeather.TownUniqueName}/${skiAreaWeather.UniqueName}`}>{skiAreaWeather.Name}</Link>\r\n </td>\r\n <td className={townSorted}>\r\n <Link to={`${window.$baseSkiAreaUrl}/town/${skiAreaWeather.TownUniqueName}`}>{skiAreaWeather.TownName} {skiAreaWeather.TownTypeStr}</Link>\r\n </td>\r\n <td className={prefectureSorted}>\r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${skiAreaWeather.PrefectureUniqueName}`}>{skiAreaWeather.PrefectureName}</Link>\r\n </td>\r\n <td className={snowDepthSorted}>\r\n {skiAreaWeather.SnowDepth !== null &&\r\n <>{skiAreaWeather.SnowDepth} cm</>\r\n }\r\n {skiAreaWeather.SnowDepth === null &&\r\n <>--</>\r\n }\r\n </td>\r\n <td className={changeSorted}>\r\n {skiAreaWeather.SnowDepthCompareToYesterday !== null &&\r\n <>{skiAreaWeather.SnowDepthCompareToYesterday} cm</>\r\n }\r\n {skiAreaWeather.SnowDepthCompareToYesterday === null &&\r\n <>--</>\r\n }\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default OfficialSnowDepth","import axios from 'axios'\r\nimport { Helmet } from 'react-helmet'\r\nimport { useState, useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport Loader from '../Common/Loader'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst Webcams = () => {\r\n\r\n const params = useParams()\r\n\r\n const [generalMessageWebCam, setGeneralMessageWebCam] = useState(undefined)\r\n const [guide, setGuide] = useState(undefined)\r\n\r\n const fetchGeneralMessage = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/NowWebCam`\r\n }).then(resGeneralMessages => {\r\n setGeneralMessageWebCam(resGeneralMessages.data)\r\n })\r\n }\r\n\r\n const fetchGuides = async (guideUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/guides/${guideUniqueName}`\r\n }).then(resGuide => {\r\n setGuide(resGuide.data)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n if (params !== undefined && params.type !== undefined) {\r\n fetchGuides(params.type)\r\n } else {\r\n fetchGeneralMessage()\r\n }\r\n }, [params])\r\n\r\n if (generalMessageWebCam === undefined && guide === undefined) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n {generalMessageWebCam !== undefined &&\r\n <>\r\n <Helmet>\r\n <title>{generalMessageWebCam.Title}</title>\r\n <meta name=\"description\" content={`${generalMessageWebCam.Description}`} />\r\n </Helmet>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(generalMessageWebCam.Message) }} />\r\n </>\r\n }\r\n {guide !== undefined &&\r\n <>\r\n <Helmet>\r\n <title>{guide.Title}</title>\r\n <meta name=\"description\" content={`${guide.Description}`} />\r\n </Helmet>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(guide.HtmlContent) }} />\r\n </>\r\n }\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default Webcams","import { Fragment } from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\nimport Home from './Home'\r\nimport Calendar from './Calendar'\r\nimport OfficialSnowDepth from './OfficialSnowDepth'\r\nimport Webcams from './Webcams'\r\nimport { GetCurrentSeasonName } from '../../helpers/Helper'\r\n\r\n\r\nconst DailyReportContainer = () => {\r\n\r\n const location = useLocation()\r\n\r\n console.log(location)\r\n\r\n const currentSeasonName = GetCurrentSeasonName();\r\n\r\n let requestType = undefined\r\n\r\n if (location.pathname.includes('calendar')) {\r\n requestType = 'calendar'\r\n }\r\n else if (location.pathname.includes('official-snow-depth')) {\r\n requestType = 'officialsnowdepth'\r\n }\r\n else if (location.pathname.includes('webcams')) {\r\n requestType = 'webcams'\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <>\r\n {\r\n {\r\n undefined: <Home seasonName={currentSeasonName} />,\r\n 'calendar': <Calendar seasonName={currentSeasonName} />,\r\n 'officialsnowdepth': <OfficialSnowDepth />,\r\n 'webcams': <Webcams />\r\n }[requestType]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default DailyReportContainer","import { useState, useEffect } from 'react'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport { Link, useParams } from 'react-router-dom'\r\nimport { GetCurrentSeasonName } from '../../../helpers/Helper'\r\n\r\nconst DetailTabs = () => {\r\n\r\n const params = useParams()\r\n\r\n const [buttonTitle, setButtonTitle] = useState('')\r\n const [subItemName, setSubItemName] = useState('')\r\n\r\n const currentSeason = GetCurrentSeasonName()\r\n\r\n const nowUniqueName = params.now\r\n\r\n useEffect(() => {\r\n setSubItemName(params.type)\r\n\r\n let thisButtonTitle\r\n switch (params.type) {\r\n case 'observed-snowfall-analysis':\r\n thisButtonTitle = 'Snowfall analysis'\r\n break\r\n case 'season':\r\n thisButtonTitle = 'Seasonal archives'\r\n break\r\n case 'snow-depth-analysis':\r\n thisButtonTitle = 'Snow depth data'\r\n break\r\n case 'weather':\r\n thisButtonTitle = 'Weather'\r\n break\r\n case 'about-daily-reports':\r\n thisButtonTitle = 'About'\r\n break\r\n default:\r\n thisButtonTitle = \"Latest report\"\r\n }\r\n\r\n setButtonTitle(thisButtonTitle)\r\n\r\n }, [params]);\r\n\r\n return (\r\n <div>\r\n <div className=\"d-none d-lg-block bg-color-report\">\r\n <ul className=\"tabs\">\r\n <li className={`${(subItemName === '' || subItemName === undefined) ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}`}>Latest report</Link>\r\n </li>\r\n <li className={`${subItemName === 'observed-snowfall-analysis' ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/observed-snowfall-analysis`}>Snowfall analysis</Link>\r\n </li>\r\n <li className={`${subItemName === 'season' ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/season/${currentSeason}`}>Seasonal archives</Link>\r\n </li>\r\n <li className={`${subItemName === 'snow-depth-analysis' ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/snow-depth-analysis`}>Snow depth data</Link>\r\n </li>\r\n <li className={`${subItemName === 'weather' ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/weather`}>Weather</Link>\r\n </li>\r\n <li className={`${subItemName === 'about-daily-reports' ? \" active\" : \"\"}`}>\r\n <Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/about-daily-reports`}>About</Link>\r\n </li>\r\n </ul>\r\n </div>\r\n <div className=\"d-lg-none sj-row-100\">\r\n <DropdownButton align=\"end\" title={buttonTitle} id=\"dropdown-menu-align-end\" className='sj-large-font-button daily-report-sub-menu'>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}`}>Latest report</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}/observed-snowfall-analysis`}>Snowfall analysis</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}/season/${currentSeason}`}>Seasonal archives</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}/snow-depth-analysis`}>Snow depth data</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}/weather`}>Weather</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${window.$baseDailyReportUrl}/${nowUniqueName}/about-daily-reports`}>About</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailTabs","import { Image } from 'react-bootstrap'\r\nimport { GetPCIconImageName, GetWindCIconImageName, GetWthConditionIconImageName, GetVConditionIconImageName } from '../../../../helpers/Helper'\r\n\r\nconst DailyReportInfo = ({ dailyReport, isArchive }) => {\r\n\r\n let reportType = '(latest report)'\r\n if (isArchive) {\r\n reportType = '(Archive report)'\r\n }\r\n\r\n //console.log(dailyReport)\r\n\r\n return (\r\n <div>\r\n <h3 className={`mt-4 mb-4 ${isArchive ? 'sj-red-text' : ''}`}>{dailyReport.NowReportWeekDay} {dailyReport.NowReportDayTh} {dailyReport.NowReportMonthFull} {dailyReport.NowReportYear} {dailyReport.NowReportHourMinute} {reportType}</h3>\r\n {dailyReport.Season > '2011-2012' &&\r\n <>\r\n <div className='row sj-no-margin'>\r\n <div className='col-md-6 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Observed snowfall at base (24 hrs)</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h2 className='sj-light-blue-text'>{dailyReport.NewSnowfallResortA}cm</h2>\r\n </div>\r\n </div>\r\n <div className='col-md-6 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Temperature (base / top)</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h2 className='sj-light-blue-text'>{dailyReport.TemperatureBottom}°C / {dailyReport.TemperatureTop}°C</h2>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='row sj-no-margin'>\r\n <div className='col-3 sj-no-margin'>\r\n <div className='center-aligned'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/NowImages/NowIconsNew/${GetWthConditionIconImageName(dailyReport.WeatherConditionIcon)}`} fluid='true' alt='Weather Condition' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h6>[Overview]</h6>\r\n {dailyReport.WeatherCondition}\r\n </div>\r\n </div>\r\n <div className='col-3 sj-no-margin'>\r\n <div className='center-aligned'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/NowImages/NowIconsNew/${GetPCIconImageName(dailyReport.PrecipitationConditionIcon)}`} fluid='true' alt='Precipitation Condition' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h6>[Precipitation]</h6>\r\n {dailyReport.PrecipitationCondition}\r\n </div>\r\n </div>\r\n <div className='col-3 sj-no-margin'>\r\n <div className='center-aligned'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/NowImages/NowIconsNew/${GetWindCIconImageName(dailyReport.WindConditionIcon)}`} fluid='true' alt='Wind Condition' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h6>[Wind]</h6>\r\n {dailyReport.WindCondition}\r\n </div>\r\n </div>\r\n <div className='col-3 sj-no-margin'>\r\n <div className='center-aligned'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/NowImages/NowIconsNew/${GetVConditionIconImageName(dailyReport.VisibilityConditionIcon)}`} fluid='true' alt='Visibility Condition' />\r\n </div>\r\n <div className='center-aligned'>\r\n <h6>[Visibility]</h6>\r\n {dailyReport.VisibilityCondition}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default DailyReportInfo","import { useRef } from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst DailyObservedSnowfall = ({ season, dailySnowfallList }) => {\r\n\r\n const chartRef = useRef()\r\n\r\n const getSnowDataValue = () => {\r\n\r\n let dailySnowData = {}\r\n let dailySnowfallData = []\r\n let accumulatedSnowData = []\r\n let dailyAccumulatedSnow = 0\r\n\r\n let sortedDailySnowfallList = dailySnowfallList.sort(function (a, b) {\r\n if (a.Id < b.Id) { return -1; }\r\n if (a.Id > b.Id) { return 1; }\r\n\r\n return 0;\r\n })\r\n\r\n\r\n sortedDailySnowfallList.forEach(function (dataItem) {\r\n let valueCounter = 0;\r\n\r\n if (dataItem.NowReportMonth < 6) {\r\n valueCounter = 1\r\n }\r\n\r\n dailySnowfallData.push([Date.UTC(1969 + valueCounter, Number(dataItem.NowReportMonth) - 1, dataItem.NowReportDay), dataItem.NewSnowfallResortA])\r\n\r\n dailyAccumulatedSnow = dailyAccumulatedSnow + dataItem.NewSnowfallResortA\r\n\r\n accumulatedSnowData.push([Date.UTC(1969 + valueCounter, Number(dataItem.NowReportMonth) - 1, dataItem.NowReportDay), dailyAccumulatedSnow])\r\n })\r\n\r\n dailySnowData = { ...dailySnowData, 'dailySnowfallData': dailySnowfallData }\r\n dailySnowData = { ...dailySnowData, 'accumulatedSnowData': accumulatedSnowData }\r\n\r\n return dailySnowData\r\n }\r\n\r\n var thisDailySnowfallDataSeries = [];\r\n\r\n thisDailySnowfallDataSeries.push({\r\n 'name': season,\r\n 'data': getSnowDataValue().dailySnowfallData\r\n })\r\n\r\n const options = {\r\n //colors: \"#0000CC\".split(\",\"),\r\n colors: [\"#0000CC\"],\r\n chart: {\r\n type: 'column',\r\n zoomType: 'x',\r\n backgroundColor: \"#efefef\",\r\n borderWidth: 1,\r\n borderColor: \"#dedede\",\r\n style: {\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n title: {\r\n text: 'Daily observed snowfall at base',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n subtitle: {\r\n text: 'Drag a section of the graph to zoom in',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: { // don't display the dummy year\r\n month: '%b %e ', year: '%b'\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Observed snowfall at base (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n min: 0\r\n },\r\n tooltip: {\r\n headerFormat: '<b>{series.name}</b><br>',\r\n pointFormat: '{point.x:%b %e}: {point.y}cm'\r\n },\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n spline: {\r\n marker: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n series: thisDailySnowfallDataSeries,\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n const ShowAccumSnowChart = () => {\r\n if (chartRef.current.chart !== undefined) {\r\n var accumulatedSnowDataSeries = [];\r\n\r\n accumulatedSnowDataSeries.push({\r\n 'name': season,\r\n 'data': getSnowDataValue().accumulatedSnowData\r\n })\r\n\r\n chartRef.current.chart.update({\r\n title: {\r\n text: 'Observed accumulated snowfall'\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Observed accumulated snowfall (cm)'\r\n },\r\n min: 0\r\n },\r\n series: accumulatedSnowDataSeries\r\n });\r\n }\r\n }\r\n\r\n const ShowSnowfallChart = () => {\r\n if (chartRef.current.chart !== undefined) {\r\n\r\n var dailySnowfallDataSeries = [];\r\n\r\n dailySnowfallDataSeries.push({\r\n 'name': season,\r\n 'data': getSnowDataValue().dailySnowfallData\r\n })\r\n\r\n chartRef.current.chart.update({\r\n title: {\r\n text: 'Daily observed snowfall at base'\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Observed snowfall at base (cm)'\r\n },\r\n min: 0\r\n },\r\n series: dailySnowfallDataSeries\r\n });\r\n }\r\n }\r\n\r\n if (dailySnowfallList.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n else {\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-4\">\r\n <h4>Daily observed snowfall at base</h4>\r\n </div>\r\n <h3 className='center-aligned space-above'>{season} season</h3>\r\n <div className='row sj-row-no-margin-padding sj-no-bg center-aligned'>\r\n <div className='col-md-6 sj-row-no-margin-padding sj-padding-right-10'>\r\n <button className='btn btn-primary sj-large-button-blue sj-full-width' onClick={ShowSnowfallChart}>Show snowfall</button>\r\n </div>\r\n <div className='col-md-6 sj-row-no-margin-padding sj-padding-left-10'>\r\n <button className='btn btn-primary sj-large-button-blue sj-full-width' onClick={ShowAccumSnowChart}>Show accumulated snowfall</button>\r\n </div>\r\n </div>\r\n <div className='mt-4'>\r\n <HighchartsReact highcharts={Highcharts} options={options} allowChartUpdate={true} ref={chartRef} />\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default DailyObservedSnowfall;","import { Link } from 'react-router-dom'\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst RecentDailyReports = ({ dailySnowfallList }) => {\r\n\r\n let sortedDailySnowfallList = dailySnowfallList.sort(function (a, b) {\r\n if (a.Id < b.Id) { return 1; }\r\n if (a.Id > b.Id) { return -1; }\r\n\r\n return 0;\r\n })\r\n\r\n let last7daysDailyReports = sortedDailySnowfallList.slice(1, 8)\r\n\r\n if (last7daysDailyReports.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n else {\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-4\">\r\n <h4>Previous 7 reports</h4>\r\n </div>\r\n <div className='mt-4'>\r\n {last7daysDailyReports.map(dailyReport => (\r\n <div key={dailyReport.Id}>\r\n <h5><Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/archives/${dailyReport.NowReportDayTh}-${dailyReport.NowReportMonthFull}-${dailyReport.NowReportYear}`}>{dailyReport.NowReportWeekDay} {dailyReport.NowReportDayTh} {dailyReport.NowReportMonthFull} {dailyReport.NowReportYear}, {dailyReport.NowReportHourMinute} ({dailyReport.NewSnowfallResortA}cm)</Link></h5>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nexport default RecentDailyReports;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport DailyObservedSnowfall from './DailyObservedSnowfall'\r\nimport RecentDailyReports from './RecentDailyReports'\r\n\r\nconst SnowfallStatistics = ({ dailyReport, isArchive }) => {\r\n\r\n const [snowfallTotalList, setSnowfallTotalList] = useState([]);\r\n const [seasonDailyReportList, setSeasonDailyReportList] = useState([]);\r\n\r\n const fetchSeasonDailyReportAndSnowfallTotal = async (nowId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/snowfalltotal/${nowId}`\r\n }).then(resSnowfallTotal => {\r\n setSnowfallTotalList(resSnowfallTotal.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/${dailyReport.UniqueName}/${dailyReport.Season}/${dailyReport.CreatedAt}`\r\n })\r\n }).then(resSeasonDailyReport => {\r\n setSeasonDailyReportList(resSeasonDailyReport.data)\r\n console.log(seasonDailyReportList)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSeasonDailyReportAndSnowfallTotal(dailyReport.Now_Id)\r\n }, [dailyReport.Now_Id]);\r\n\r\n let TotalSnow7Days = '-'\r\n let TotalSnow14Days = '-'\r\n let TotalSnowCurrentMonth = '0cm'\r\n let TotalSnowCurrentSeason = '0cm'\r\n\r\n if (snowfallTotalList !== undefined) {\r\n let TotalSnow7DaysData = snowfallTotalList.find(item => item.TotalType === '7')\r\n if (TotalSnow7DaysData !== undefined) {\r\n TotalSnow7Days = TotalSnow7DaysData['TotalSnow'] + 'cm'\r\n }\r\n\r\n let TotalSnow14DaysData = snowfallTotalList.find(item => item.TotalType === '14')\r\n if (TotalSnow14DaysData !== undefined) {\r\n TotalSnow14Days = TotalSnow14DaysData['TotalSnow'] + 'cm'\r\n }\r\n\r\n let TotalSnowCurrentMonthData = snowfallTotalList.find(item => item.TotalType === 'CurrentMonth')\r\n if (TotalSnowCurrentMonthData !== undefined) {\r\n TotalSnowCurrentMonth = TotalSnowCurrentMonthData['TotalSnow'] + 'cm'\r\n }\r\n\r\n let TotalSnowCurrentSeasonData = snowfallTotalList.find(item => item.TotalType === 'CurrentSeason')\r\n if (TotalSnowCurrentSeasonData !== undefined) {\r\n TotalSnowCurrentSeason = TotalSnowCurrentSeasonData['TotalSnow'] + 'cm'\r\n }\r\n }\r\n\r\n return (\r\n <div>\r\n {(!isArchive) &&\r\n <>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2 mb-4\">\r\n <h4>Recent observed snowfall data at base</h4>\r\n </div>\r\n <div className='row sj-no-margin'>\r\n <div className='col-md-3 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Lastest 7 reports</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h3 className='sj-light-blue-text'>{TotalSnow7Days}</h3>\r\n </div>\r\n </div>\r\n <div className='col-md-3 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Lastest 14 reports</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h3 className='sj-light-blue-text'>{TotalSnow14Days}</h3>\r\n </div>\r\n </div>\r\n <div className='col-md-3 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Current month</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h3 className='sj-light-blue-text'>{TotalSnowCurrentMonth}</h3>\r\n </div>\r\n </div>\r\n <div className='col-md-3 sj-no-margin'>\r\n <div className='sj-box sj-box-lighter-gray center-aligned white-border'><h5>Season so far</h5></div>\r\n <div className='center-aligned mt-3'>\r\n <h3 className='sj-light-blue-text'>{TotalSnowCurrentSeason}</h3>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n }\r\n {(isArchive) &&\r\n <div className=\"sj-box sj-box-red sj-round-full center-aligned mt-5\">\r\n <h5>This is an archive report from {dailyReport.NowReportWeekDay} {dailyReport.NowReportDayTh} {dailyReport.NowReportMonthFull} {dailyReport.NowReportYear}</h5>\r\n </div>\r\n }\r\n {(seasonDailyReportList.length > 1) &&\r\n <div>\r\n <RecentDailyReports dailySnowfallList={seasonDailyReportList} />\r\n </div>\r\n }\r\n <div>\r\n <DailyObservedSnowfall season={dailyReport.Season} dailySnowfallList={seasonDailyReportList} />\r\n </div>\r\n <div className=\"sj-para\">\r\n <Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/observed-snowfall-analysis`} className=\"btn btn-primary sj-large-button-blue sj-full-width\">Full analysis here</Link>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SnowfallStatistics;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport DailyReportInfo from './DailyReportInfo'\r\nimport SnowfallStatistics from './SnowfallStatistics'\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst DetailDailyReport = ({ dailyReport, params, isArchive }) => {\r\n\r\n const [thisReport, setThisReport] = useState(undefined)\r\n\r\n const fetchDailyReport = async (reportUniqueName, seasonName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/archived/${reportUniqueName}/${seasonName}`\r\n }).then(resDailyReport => {\r\n setThisReport(resDailyReport.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n if (params.season !== undefined) {\r\n fetchDailyReport(dailyReport.UniqueName, params.season)\r\n } else {\r\n setThisReport(dailyReport)\r\n }\r\n }, [dailyReport, params.season])\r\n\r\n const getDayOrdinal = (day) => {\r\n if (day > 3 && day < 21) return 'th'\r\n switch (day % 10) {\r\n case 1: return \"st\"\r\n case 2: return \"nd\"\r\n case 3: return \"rd\"\r\n default: return \"th\"\r\n }\r\n }\r\n\r\n const getFormattedDate = (reportDate) => {\r\n const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\r\n let thisReportDate = new Date(reportDate)\r\n let formattedDate = ''\r\n\r\n formattedDate = [\r\n thisReportDate.getDate() + getDayOrdinal(thisReportDate.getDate()),\r\n MONTHS[thisReportDate.getMonth()],\r\n thisReportDate.getFullYear()\r\n ].join('-')\r\n\r\n return formattedDate\r\n }\r\n\r\n if (thisReport === undefined) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div>\r\n <Helmet>\r\n <title>{`${thisReport.Name} | ${thisReport.NowReportDayTh} ${thisReport.NowReportMonthFull} ${thisReport.NowReportYear} | ${isArchive ? \"Archive\" : \"Latest\"} snow and weather report from ${thisReport.AreaName} | SnowJapan`}</title>\r\n <meta name=\"description\" content={`${isArchive ? \"Archive\" : \"Exclusive independent daily\"} snow and weather reports from the ${thisReport.AreaName} of Japan. ${isArchive ? \"All SnowJapan reports are exclusive and 100% independent\" : \"Snowfall is observed from base areas\"}.`} />\r\n <link rel=\"canonical\" href={window.location.href} />\r\n </Helmet>\r\n <DailyReportInfo dailyReport={thisReport} isArchive={isArchive} />\r\n {(isArchive) &&\r\n <div className=\"sj-box sj-box-red sj-round-full center-aligned mt-5\">\r\n <h5>This is an archive report from {thisReport.NowReportWeekDay} {thisReport.NowReportDayTh} {thisReport.NowReportMonthFull} {thisReport.NowReportYear}</h5>\r\n </div>\r\n }\r\n <hr className='mt-5' />\r\n <div className='empty-row'>\r\n <pre>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(thisReport.MainReport) }} />\r\n </pre>\r\n <div className='sj-para'>\r\n <h4>Opening, lift & other notes</h4>\r\n </div>\r\n <pre>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(thisReport.LiftOperation) }} />\r\n </pre>\r\n </div>\r\n {thisReport.Season > '2011-2012' &&\r\n <SnowfallStatistics dailyReport={thisReport} isArchive={isArchive} />\r\n }\r\n <div className='empty-row'>\r\n {thisReport.Photo1 !== null &&\r\n <div className='sj-image-holder-now center-aligned mt-5'>\r\n <Image src={`https://www.snowjapan.com${thisReport.Photo1.replace('~', '')}`} fluid='true' alt='Report 1' />\r\n </div>\r\n }\r\n {thisReport.Photo2 !== null &&\r\n <div className='sj-image-holder-now center-aligned mt-4'>\r\n <Image src={`https://www.snowjapan.com${thisReport.Photo2.replace('~', '')}`} fluid='true' alt='Report 2' />\r\n </div>\r\n }\r\n {thisReport.Photo3 !== null &&\r\n <div className='sj-image-holder-now center-aligned mt-4'>\r\n <Image src={`https://www.snowjapan.com${thisReport.Photo3.replace('~', '')}`} fluid='true' alt='Report 3' />\r\n </div>\r\n }\r\n </div>\r\n {\r\n (isArchive) &&\r\n <div className=\"sj-box sj-box-red sj-round-full center-aligned mt-5\">\r\n <h5>This is an archive report from {thisReport.NowReportWeekDay} {thisReport.NowReportDayTh} {thisReport.NowReportMonthFull} {thisReport.NowReportYear}</h5>\r\n </div>\r\n }\r\n {\r\n (isArchive) &&\r\n <div className='mt-5'>\r\n <Link to={`${window.$baseDailyReportUrl}/${thisReport.UniqueName}`} className='btn btn-primary sj-large-button-blue sj-full-width'>View latest Yuzawa Now report</Link>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default DetailDailyReport","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport Highcharts from 'highcharts'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport { GetCurrentSeasonName, GetPreviousSeasonName } from '../../../../helpers/Helper'\r\n\r\nconst DailySnowfall = ({ dailyReport }) => {\r\n\r\n const [dailySnowfallList, setDailySnowfallList] = useState([]);\r\n\r\n const fetchDailySnowfall = async (nowUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/${nowUniqueName}/All`\r\n }).then(resDailySnowfall => {\r\n setDailySnowfallList(resDailySnowfall.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchDailySnowfall(dailyReport.UniqueName)\r\n }, [dailyReport.UniqueName]);\r\n\r\n const getSnowfallValue = (season) => {\r\n\r\n let dailySnowfallData = [];\r\n\r\n let dailyData = dailySnowfallList.filter(function (currentElement) {\r\n return (currentElement.Season === season);\r\n });\r\n\r\n dailyData.sort(function (a, b) {\r\n var dateA = new Date(a.Id), dateB = new Date(b.Id)\r\n return dateA - dateB\r\n })\r\n\r\n dailyData.forEach(function (dataItem) {\r\n let valueCounter = 0;\r\n\r\n if (dataItem.NowReportMonth < 6) {\r\n valueCounter = 1\r\n }\r\n\r\n dailySnowfallData.push([Date.UTC(1969 + valueCounter, Number(dataItem.NowReportMonth) - 1, dataItem.NowReportDay), dataItem.NewSnowfallResortA])\r\n })\r\n\r\n return dailySnowfallData\r\n }\r\n\r\n let dailySnowfallDataSeries = [];\r\n let seasons = [...new Set(dailySnowfallList.map(item => item.Season))].sort().reverse();\r\n let currentSesson = GetCurrentSeasonName()\r\n let previousSeason = GetPreviousSeasonName()\r\n\r\n seasons.forEach(function (item) {\r\n\r\n if (item > '2011-2012') {\r\n\r\n let seriesVisible = false\r\n\r\n if (item === currentSesson || item === previousSeason) {\r\n seriesVisible = true;\r\n }\r\n\r\n dailySnowfallDataSeries.push({\r\n 'name': item,\r\n 'data': getSnowfallValue(item),\r\n 'visible': seriesVisible\r\n })\r\n }\r\n })\r\n\r\n const options = {\r\n colors: [\"#DF7401\", \"#0033CC\", \"#3366CC\", \"#3399FF\", \"#000066\", \"#990000\", \"#CC0000\", \"#FF0066\", \"#660033\", \"#8904B1\", \"#FE9A2E\", \"#DF7401\"],\r\n chart: {\r\n type: 'spline',\r\n zoomType: 'x',\r\n backgroundColor: \"#efefef\",\r\n borderWidth: 1,\r\n borderColor: \"#dedede\",\r\n style: {\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n title: {\r\n text: 'Daily observed snowfall at base',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n subtitle: {\r\n text: 'Drag a section of the graph to zoom in',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: { // don't display the dummy year\r\n month: '%b %e ', year: '%b'\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n yAxis: {\r\n min: 0,\r\n title: {\r\n text: 'Daily observed snowfall (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n minorTickInterval: 'auto',\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '<b>{series.name}</b><br>',\r\n pointFormat: '{point.x:%b %e}: {point.y}cm'\r\n },\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n spline: {\r\n marker: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n series: dailySnowfallDataSeries,\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n if (dailySnowfallList.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='sj-para'>\r\n <HighchartsReact highcharts={Highcharts} options={options} />\r\n <div className='center-aligned sj-box-lighter-gray p-2'>\r\n <h6>Click on each season to add or remove data from other seasons</h6>\r\n </div>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default DailySnowfall;","import Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst MonthlySnowfall = ({ monthlySnowfall }) => {\r\n\r\n const getSnowfallValue = (season) => {\r\n\r\n let monthlySnowfallData = [];\r\n\r\n let monthlyData = monthlySnowfall.filter(function (currentElement) {\r\n return (currentElement.Season === season);\r\n });\r\n\r\n let novemberData = monthlyData.filter(function (currentElement) {\r\n return (currentElement.NowReportMonthFull === 'November');\r\n });\r\n\r\n if (novemberData.length <= 0) {\r\n monthlySnowfallData.push(null)\r\n }\r\n\r\n monthlyData.forEach(function (dataItem) {\r\n monthlySnowfallData.push(dataItem.TotalSnow)\r\n })\r\n\r\n return monthlySnowfallData;\r\n }\r\n\r\n let monthlySnowfallDataSeries = [];\r\n let seasons = [...new Set(monthlySnowfall.map(item => item.Season))].sort().reverse();\r\n\r\n seasons.forEach(function (item) {\r\n if (item > '2011-2012') {\r\n monthlySnowfallDataSeries.push({\r\n 'name': item,\r\n 'data': getSnowfallValue(item),\r\n 'visible': true\r\n })\r\n }\r\n })\r\n\r\n const options = {\r\n colors: [\"#0000CC\", \"#0033CC\", \"#3366CC\", \"#3399FF\", \"#000066\", \"#990000\", \"#CC0000\", \"#FF0066\", \"#660033\", \"#8904B1\", \"#FE9A2E\", \"#DF7401\"],\r\n chart: {\r\n /*renderTo: 'newsnowfall-season',*/\r\n type: 'column',\r\n backgroundColor: \"#efefef\",\r\n style: {\r\n fontFamily: 'Lato'\r\n },\r\n borderWidth: 1,\r\n borderColor: \"#dedede\"\r\n },\r\n title: {\r\n text: 'Monthly observed snowfall at base',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n xAxis: {\r\n categories: [\r\n 'Nov',\r\n 'Dec',\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr'\r\n ],\r\n crosshair: true\r\n },\r\n yAxis: {\r\n min: 0,\r\n title: {\r\n text: 'Daily observed snowfall (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n minorTickInterval: 'auto',\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '<span style=\"font-size:12px;font-weight:bold;\">{point.key}</span><table>',\r\n pointFormat: '<tr><td style=\"color:{series.color};padding:0\">{series.name}: </td>' +\r\n '<td style=\"padding:0;text-align:right;\"><b>{point.y} cm</b></td></tr>',\r\n footerFormat: '</table>',\r\n shared: true,\r\n useHTML: true,\r\n backgroundColor: 'rgba(255,255,255,0.8)',\r\n shadow: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n },\r\n candlestick: {\r\n lineColor: '#404048'\r\n }\r\n },\r\n // General\r\n background2: '#F0F0EA',\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n series: monthlySnowfallDataSeries,\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n if (monthlySnowfall.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='sj-para'>\r\n <HighchartsReact highcharts={Highcharts} options={options} />\r\n <div className='center-aligned sj-box-lighter-gray p-2'>\r\n <h6>Click on each season to add or remove data from other seasons</h6>\r\n </div>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default MonthlySnowfall;","import { Link } from 'react-router-dom'\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst MonthlySnowfallTable = ({ monthlySnowfall, nowUniqueName }) => {\r\n\r\n const getSnowfallValue = (season) => {\r\n let monthlySnowfallData = [];\r\n\r\n let monthlyData = monthlySnowfall.filter(function (currentElement) {\r\n return (currentElement.Season === season);\r\n });\r\n\r\n monthlyData.forEach(function (dataItem) {\r\n let totalSeasonSnowfall = dataItem.TotalSnow + dataItem.PrevMonthTotalSnow1 + dataItem.PrevMonthTotalSnow2 + dataItem.PrevMonthTotalSnow3 + dataItem.PrevMonthTotalSnow4 + dataItem.PrevMonthTotalSnow5 + dataItem.PrevMonthTotalSnow6\r\n\r\n monthlySnowfallData.push({ 'month': dataItem.NowReportMonthFull, 'newSnowfall': dataItem.TotalSnow, 'seasonSnowfall': totalSeasonSnowfall })\r\n })\r\n\r\n return monthlySnowfallData;\r\n }\r\n\r\n let monthlySnowfallData = [];\r\n let seasons = [...new Set(monthlySnowfall.map(item => item.Season))].sort().reverse();\r\n\r\n seasons.forEach(function (item) {\r\n if (item > '2011-2012') {\r\n monthlySnowfallData.push({\r\n 'name': item,\r\n 'data': getSnowfallValue(item)\r\n })\r\n }\r\n })\r\n\r\n const GetNovemberBlankCells = (monthlyData) => {\r\n let novemberData = monthlyData.filter(function (currentElement) {\r\n return (currentElement.month === 'November');\r\n });\r\n\r\n if (novemberData.length <= 0) {\r\n return (\r\n <td className=\"center-aligned\">-</td>\r\n )\r\n }\r\n else {\r\n return (<></>)\r\n }\r\n }\r\n\r\n const GetBlankCells = (monthlyData) => {\r\n let novemberData = monthlyData.filter(function (currentElement) {\r\n return (currentElement.month === 'November');\r\n });\r\n\r\n let blankCells = monthlyData.length\r\n\r\n if (novemberData.length <= 0) {\r\n blankCells = blankCells + 1\r\n }\r\n\r\n return (\r\n <>\r\n {(() => {\r\n const rows = [];\r\n for (let i = 0; i < (6 - blankCells); i++) {\r\n rows.push(<td className=\"center-aligned\" key={i}>-</td>);\r\n }\r\n return rows;\r\n })()}\r\n </>\r\n )\r\n }\r\n\r\n if (monthlySnowfall.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='table-container overflow-x'>\r\n <table className='table-container__table sj-list-table monthly-snow-fall'>\r\n <thead>\r\n <tr>\r\n <th className=\"td-table-header center-aligned\">Season</th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">November</span><span className=\"d-lg-none\">NOV</span></th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">December</span><span className=\"d-lg-none\">DEC</span></th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">January</span><span className=\"d-lg-none\">JAN</span></th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">February</span><span className=\"d-lg-none\">FEB</span></th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">March</span><span className=\"d-lg-none\">MAR</span></th>\r\n <th className=\"td-table-header\"><span className=\"d-none d-lg-block\">April</span><span className=\"d-lg-none\">APR</span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {monthlySnowfallData.map(season => (\r\n <tr key={season.name}>\r\n <td className='td-first-column'><Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/season/${season.name}`}>{season.name}</Link></td>\r\n {GetNovemberBlankCells(season.data)}\r\n {season.data.map((snowdata, index) => (\r\n <td key={index} className=\"center-aligned\">\r\n <div className='td-monthly-snowfall'>{snowdata.newSnowfall}cm</div>\r\n <div className='td-season-snowfall'>[{snowdata.seasonSnowfall}cm]</div>\r\n </td>\r\n ))}\r\n {GetBlankCells(season.data)}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default MonthlySnowfallTable;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\n\r\nconst SeasonSnowfall = ({ dailyReport }) => {\r\n\r\n const [seasonSnowfallList, setSeasonSnowfallList] = useState([]);\r\n\r\n const fetchSeasonSnowfall = async (nowId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/season-snowfall/All/${nowId}`\r\n }).then(resSeasonSnowfall => {\r\n setSeasonSnowfallList(resSeasonSnowfall.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSeasonSnowfall(dailyReport.Now_Id)\r\n }, [dailyReport.Now_Id]);\r\n\r\n const getSnowfallValue = (season) => {\r\n\r\n let seasonSnowfallData = [];\r\n\r\n let seasonData = seasonSnowfallList.filter(function (currentElement) {\r\n return (currentElement.Season === season);\r\n });\r\n\r\n seasonData.forEach(function (dataItem) {\r\n\r\n seasonSnowfallData.push(dataItem.TotalSnow)\r\n })\r\n\r\n return seasonSnowfallData;\r\n }\r\n\r\n let seasonSnowfallDataSeries = [];\r\n let seasons = [...new Set(seasonSnowfallList.map(item => item.Season))].sort().reverse();\r\n\r\n seasons.forEach(function (item) {\r\n if (item > '2011-2012') {\r\n seasonSnowfallDataSeries.push({\r\n 'name': item,\r\n 'data': getSnowfallValue(item),\r\n 'visible': true\r\n })\r\n }\r\n })\r\n\r\n const options = {\r\n colors: [\"#0000CC\", \"#0033CC\", \"#3366CC\", \"#3399FF\", \"#000066\", \"#990000\", \"#CC0000\", \"#FF0066\", \"#660033\", \"#8904B1\", \"#FE9A2E\", \"#DF7401\"],\r\n chart: {\r\n type: 'column',\r\n backgroundColor: \"#efefef\",\r\n style: {\r\n fontFamily: 'Lato'\r\n },\r\n borderWidth: 1,\r\n borderColor: \"#dedede\"\r\n },\r\n title: {\r\n text: 'Season total observed snowfall at base',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n xAxis: {\r\n categories: [''\r\n ],\r\n crosshair: true\r\n },\r\n yAxis: {\r\n min: 0,\r\n title: {\r\n text: 'Season total observed snowfall (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n minorTickInterval: 'auto',\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n },\r\n candlestick: {\r\n lineColor: '#404048'\r\n }\r\n },\r\n // General\r\n background2: '#F0F0EA',\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n series: seasonSnowfallDataSeries,\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n if (seasonSnowfallList.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='sj-para'>\r\n <HighchartsReact highcharts={Highcharts} options={options} />\r\n <div className='center-aligned sj-box-lighter-gray p-2'>\r\n <h6>Click on each season to add or remove data from other seasons</h6>\r\n </div>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default SeasonSnowfall;","import { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport { GetTotalMonthDays, GetCurrentSeasonName } from '../../../../helpers/Helper'\r\n\r\nconst DaylySnowfallTable = ({ dailyReport }) => {\r\n\r\n const [dailySnowfallList, setDailySnowfallList] = useState([]);\r\n\r\n const fetchDailySnowfall = async (nowUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/${nowUniqueName}/All`\r\n }).then(resDailySnowfall => {\r\n setDailySnowfallList(resDailySnowfall.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchDailySnowfall(dailyReport.UniqueName)\r\n }, [dailyReport.UniqueName]);\r\n\r\n const getMonthlySeasonSnowfallValue = (month) => {\r\n let monthlySeasonSnowfallData = []\r\n\r\n let seasons = [...new Set(dailySnowfallList.map(item => item.Season))].sort().reverse();\r\n\r\n seasons.forEach(function (season) {\r\n if (season > '2011-2012') {\r\n let dailySnowfallData = []\r\n\r\n let dailyReportData = dailySnowfallList.filter(function (currentElement) {\r\n return (currentElement.NowReportMonthFull === month && currentElement.Season === season);\r\n });\r\n\r\n dailyReportData.forEach(function (dataItem) {\r\n dailySnowfallData.push({ 'day': dataItem.NowReportDay, 'dailySnowfall': dataItem.NewSnowfallResortA, 'reportDate': dataItem.NowReportDayTh + '-' + dataItem.NowReportMonthFull + '-' + dataItem.NowReportYear })\r\n })\r\n\r\n monthlySeasonSnowfallData.push({ 'seasonName': season, 'seasonDailySnowfall': dailySnowfallData })\r\n }\r\n })\r\n\r\n return monthlySeasonSnowfallData;\r\n }\r\n\r\n let dailySnowfallDataList = [];\r\n let months = ['November', 'December', 'January', 'February', 'March', 'April'];\r\n\r\n months.forEach(function (month) {\r\n dailySnowfallDataList.push({\r\n 'name': month,\r\n 'seasonData': getMonthlySeasonSnowfallValue(month)\r\n })\r\n })\r\n\r\n let totalDays = 0\r\n\r\n const runCallback = (cb) => {\r\n return cb();\r\n };\r\n\r\n const GetDailyData = (monthlyData, day) => {\r\n let snowData = monthlyData.filter(function (elm) {\r\n return (elm.day === day);\r\n });\r\n\r\n if (snowData.length > 0) {\r\n return snowData[0].dailySnowfall;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const GetDailyDataCell = (monthlyData, day, seasonName) => {\r\n let snowData = monthlyData.filter(function (elm) {\r\n return (elm.day === day);\r\n });\r\n\r\n if (snowData.length > 0) {\r\n return (<td key={day} className={`${seasonName === currentSeason ? \"sj-box-light-red\" : \"\"}`}><Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/archives/${snowData[0].reportDate}`}>{snowData[0].dailySnowfall}</Link></td>);\r\n } else {\r\n return (<td key={day} className={`${seasonName === currentSeason ? \"sj-box-light-red\" : \"\"}`}></td>);\r\n }\r\n };\r\n\r\n const GetDayTh = (day) => {\r\n let dayTh = ''\r\n\r\n switch (day) {\r\n case 1:\r\n case 21:\r\n case 31:\r\n dayTh = 'st'\r\n break;\r\n case 2:\r\n case 22:\r\n dayTh = 'nd'\r\n break;\r\n case 3:\r\n case 23:\r\n dayTh = 'rd'\r\n break;\r\n default:\r\n dayTh = 'th'\r\n }\r\n\r\n return day + dayTh\r\n };\r\n\r\n const currentSeason = GetCurrentSeasonName()\r\n\r\n if (dailySnowfallList.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='empty-row'>\r\n <div className='center-aligned mt-5'>\r\n <h5>Click on the dates in the tables below to view each daily report</h5>\r\n </div>\r\n {dailySnowfallDataList.map((monthlyData, index) => (\r\n <div key={index} className='empty-row' style={{ overflowX: 'auto' }}>\r\n <div>\r\n <h3 className='center-aligned'>{monthlyData.name}</h3>\r\n </div>\r\n <div className='table-container'>\r\n <table className='table-container__table sj-data-table'>\r\n <thead>\r\n <tr>\r\n <th>Season</th>\r\n {runCallback(() => {\r\n totalDays = GetTotalMonthDays(monthlyData.name)\r\n const row = [];\r\n for (var i = 1; i < (totalDays + 1); i++) {\r\n row.push(<th key={i}>{GetDayTh(i)}</th>);\r\n }\r\n return row;\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {monthlyData.seasonData.map((seasonSnowData, key) => (\r\n <tr key={key} >\r\n <td className={`td-first-column ${seasonSnowData.seasonName === currentSeason ? \"sj-box-red\" : \"\"}`}><Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/season/${seasonSnowData.seasonName}`}>{seasonSnowData.seasonName}</Link></td>\r\n {runCallback(() => {\r\n const row = [];\r\n for (var i = 1; i < (totalDays + 1); i++) {\r\n /*row.push(<td key={i} className={`${seasonSnowData.seasonName === currentSeason ? \"sj-box-light-red\" : \"\"}`}>{\r\n GetDailyData(seasonSnowData.seasonDailySnowfall, i)\r\n }</td>);*/\r\n row.push(GetDailyDataCell(seasonSnowData.seasonDailySnowfall, i, seasonSnowData.seasonName));\r\n }\r\n return row;\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n ))\r\n }\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default DaylySnowfallTable;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport { Link } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport DailySnowfall from './DailySnowfall'\r\nimport MonthlySnowfall from './MonthlySnowfall'\r\nimport MonthlySnowfallTable from './MonthlySnowfallTable'\r\nimport SeasonSnowfall from './SeasonSnowfall'\r\nimport DaylySnowfallTable from './DaylySnowfallTable'\r\nimport { GetCurrentSeasonName } from '../../../../helpers/Helper'\r\n\r\nconst ObservedSnowfallAnalysisContainer = ({ dailyReport }) => {\r\n\r\n const currentSeason = GetCurrentSeasonName()\r\n const [monthlySnowfall, setMonthlySnowfall] = useState([]);\r\n\r\n const fetchMonthlySnowfallWithPrevMonth = async (nowId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/monthly-snowfall-with-prev-month/${nowId}`\r\n }).then(resMonthlySnowfallWithPrevMonth => {\r\n setMonthlySnowfall(resMonthlySnowfallWithPrevMonth.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchMonthlySnowfallWithPrevMonth(dailyReport.Now_Id)\r\n }, [dailyReport.Now_Id]);\r\n\r\n return (\r\n <div>\r\n <Helmet>\r\n <title>{dailyReport.Name} | Snowfall data and analysis from from {dailyReport.AreaName} | SnowJapan</title>\r\n <meta name=\"description\" content={`Daily and monthly observed snowfall data and analysis from the ${dailyReport.AreaName} of Japan. Snowfall is observed from base areas.`} />\r\n </Helmet>\r\n <h3>Snowfall analysis</h3>\r\n <div className='sj-para'>\r\n All data is the snowfall observed by our reporters around base areas. Please read <Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/about-daily-reports`}>this</Link> to learn more about our reporting.\r\n </div>\r\n <DailySnowfall dailyReport={dailyReport} />\r\n <MonthlySnowfall monthlySnowfall={monthlySnowfall} />\r\n <MonthlySnowfallTable monthlySnowfall={monthlySnowfall} nowUniqueName={dailyReport.UniqueName} />\r\n <SeasonSnowfall dailyReport={dailyReport} />\r\n <DaylySnowfallTable dailyReport={dailyReport} season={currentSeason} />\r\n </div>\r\n )\r\n};\r\n\r\nexport default ObservedSnowfallAnalysisContainer;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport { Helmet } from 'react-helmet'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport Loader from \"../../../Common/Loader\"\r\nimport SnowChart from '../../../Common/SnowChart'\r\nimport SeasonSnowChart from '../../../Common/SeasonSnowChart'\r\n\r\nconst SnowDepthAnalysisContainer = ({ dailyReport }) => {\r\n const [snowData, setSnowData] = useState([])\r\n const [skiAreaName, setSkiAreaName] = useState(dailyReport.ResortAName)\r\n const [dailyReportSkiAreas, setDailyReportSkiAreas] = useState([])\r\n const [showChart, setShowChart] = useState(true)\r\n\r\n const fetchSnowData = async (resortId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/snowfall/${resortId}`\r\n }).then(dataSnowData => {\r\n\r\n if (dataSnowData.data.length > 0) {\r\n\r\n let thisAllSnowData = dataSnowData.data\r\n\r\n let thisSnowData = thisAllSnowData.filter(function (currentElement) {\r\n return (currentElement.SnowDepth !== 999 && currentElement.Season !== '-');\r\n });\r\n\r\n setSnowData(thisSnowData)\r\n setShowChart(true)\r\n }\r\n })\r\n };\r\n\r\n const fetchDailyReportSkiAreas = async (dailyReportId) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/dailyreportskiareas/${dailyReportId}`\r\n }).then(dailyReportSkiAreaData => {\r\n setDailyReportSkiAreas(dailyReportSkiAreaData.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSnowData(dailyReport.ResortAId)\r\n fetchDailyReportSkiAreas(dailyReport.Now_Id)\r\n }, [dailyReport]);\r\n\r\n const ResortSelected = (evtKey, evt) => {\r\n\r\n setShowChart(false)\r\n let selectedSkiAreaId = evtKey;\r\n\r\n let selectedSkiAreaList = dailyReportSkiAreas.filter(function (currentElement) {\r\n return (currentElement.Resort_Id === parseInt(selectedSkiAreaId));\r\n });\r\n\r\n setSkiAreaName(selectedSkiAreaList[0].ResortName)\r\n\r\n fetchSnowData(selectedSkiAreaId)\r\n }\r\n\r\n const chartOptions = {\r\n chart: {\r\n type: 'area',\r\n zoomType: 'x',\r\n backgroundColor: \"#efefef\",\r\n borderWidth: 1,\r\n borderColor: \"#dedede\",\r\n style: {\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n title: {\r\n text: 'Official snow depth data',\r\n style: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n subtitle: {\r\n text: 'Drag a section of the graph to zoom in',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Lato'\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n dateTimeLabelFormats: { // don't display the dummy year\r\n month: '%b %e ', year: '%b'\r\n },\r\n title: {\r\n text: '',\r\n enabled: false\r\n }\r\n },\r\n legend: {\r\n itemStyle: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n }\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Official snow depth (cm)',\r\n style: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n },\r\n min: 0,\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n fontFamily: 'Montserrat'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '<b>{series.name}</b><br>',\r\n pointFormat: '{point.x:%b %e}: {point.y}cm'\r\n },\r\n exporting:\r\n {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n marker: {\r\n enabled: false,\r\n symbol: 'circle',\r\n radius: 3,\r\n states: {\r\n hover: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 3\r\n }\r\n },\r\n threshold: null\r\n }\r\n },\r\n credits:\r\n {\r\n enabled: false\r\n }\r\n };\r\n\r\n if (snowData.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n let seasons = [...new Set(snowData.map(item => item.Season))].sort().reverse();\r\n\r\n return (\r\n <>\r\n <Helmet>\r\n <title>{dailyReport.Name} | Individual ski area official snow depth data from {dailyReport.AreaName} | SnowJapan</title>\r\n <meta name=\"description\" content={`Official snow depth data for ski areas in the ${dailyReport.AreaName} of Japan. Snowfall is observed from base areas.`} />\r\n </Helmet>\r\n {(showChart) &&\r\n <div className='empty-row'>\r\n <h3>Ski area snow depth data</h3>\r\n <div>\r\n The data published on this page is official snow depth data, as originally reported by the ski areas. Please note that each ski area has its own method of measuring snow. SnowJapan does not control this data.\r\n </div>\r\n <div className='mt-3 mb-4'>\r\n On the top graph click on each season name to toggle on/off and compare seasons.\r\n </div>\r\n <div className='sj-row-100'>\r\n <DropdownButton align=\"start\" title={skiAreaName} onSelect={ResortSelected} id=\"snow-depth-resort\" className='sj-large-font-button'>\r\n {dailyReportSkiAreas.map((item, index) => (\r\n <Dropdown.Item eventKey={item.Resort_Id} key={index}>{item.ResortName}</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n <SnowChart resortName={skiAreaName} snowData={snowData} />\r\n {seasons.map((season, index) => (\r\n <div key={index}>\r\n <SeasonSnowChart resortName={skiAreaName} snowData={snowData} season={season} chartOptions={chartOptions} index={index} />\r\n </div>\r\n ))}\r\n </div>\r\n }\r\n </>\r\n )\r\n }\r\n};\r\n\r\nexport default SnowDepthAnalysisContainer;","import { useState } from 'react'\r\nimport { Button, Collapse } from 'react-bootstrap'\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst WeatherContainer = ({ dailyReport }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n return (\r\n <div>\r\n <Helmet>\r\n <title>Yuzawa Now | Real-time snowfall resources, snow forecasts and weather maps from {dailyReport.AreaName} | SnowJapan</title>\r\n <meta name=\"description\" content={`Real time snowfall maps, snow and weather forecasts and weather maps for ${dailyReport.AreaName} of Japan.`} />\r\n </Helmet>\r\n <h3>Weather</h3>\r\n <div>\r\n The <strong>Japan Meteorological Agency (JMA)</strong> publishes various real-time snowfall, weather and forecast related resources. We introduce various resources for the region covered by {dailyReport.Name} located on this page. All links open in a new window. All maps are centred on the region.\r\n </div>\r\n <div className='sj-para sj-red-text'>\r\n Important: The below information is provided to give a general insight into the weather and snowfall conditions in the region. It is not ski area specific. Actual snowfall is often more than shown, especially at higher elevations.\r\n </div>\r\n <div className=\"sj-row\">\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-2\">\r\n <h4>{dailyReport.Name} region</h4>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Town information</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:normal/elements:snowd`} target='_blank' rel='noreferrer'>Snow depth</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`${dailyReport.HotelBookingLink1}`} target='_blank' rel='noreferrer'>Weather Advisory</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Precipitation analysis</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_nowc/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:deep/elements:hrpns&slmcs&amds_rain10m`} target='_blank' rel='noreferrer'>Now</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_kaikotan/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:normal/#zoom:6/elements:slmcs&rasrf24h`} target='_blank' rel='noreferrer'>24-hour</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:deep/elements:snowd`} target='_blank' rel='noreferrer'>Snow depth</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 left-aligned-jma sj-row-no-margin-padding\">\r\n <div className='sj-box sj-box-dark-blue sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5>Snowfall</h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:deep/elements:snowf24h`} target='_blank' rel='noreferrer'>24-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:deep/elements:snowf48h`} target='_blank' rel='noreferrer'>48-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 left-aligned sj-row-no-margin-padding\">\r\n <div className='sj-box-lighter-gray sj-round-full m-2 p-2 pt-3 pb-3'>\r\n <h5><a href={`https://www.jma.go.jp/bosai/en_snow/#zoom:12/lat:${dailyReport.Location_Latitude}/lon:${dailyReport.Location_Longitude}/colordepth:deep/elements:snowf72h`} target='_blank' rel='noreferrer'>72-hour snowfall</a></h5>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"sj-row\">\r\n The JMA is an agency of the Ministry of Land, Infrastructure, Transport and Tourism.\r\n </div>\r\n <div className=\"sj-row\">\r\n <h3 className='mt-5'>About weather forecasts</h3>\r\n We do not specifically recommend any detailed weather forecasting service for all regions of Japan. However, many forecasts, both in Japanese and English, are free to use and widely available. Such services offer varying accuracy, with some seemingly more accurate for some areas of Japan than others.\r\n </div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5\">\r\n <h4>Weather map</h4>\r\n </div>\r\n <div className=\"sj-row\">\r\n <div className=\"row sj-row\">\r\n <Button\r\n onClick={() => setOpen(!open)}\r\n aria-expanded={open} className='w-100 mb-1'><h5 className='mt-1'>{open ? 'Click to hide map -' : 'Click to view map +'}</h5></Button>\r\n <Collapse in={open}>\r\n <div className='ratio ratio-16x9'>\r\n {(open) &&\r\n <iframe title='Various animated forecasts' src={`${dailyReport.WeatherMapUrl}`} allowFullScreen></iframe>\r\n }\r\n </div>\r\n </Collapse>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default WeatherContainer;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst SeasonSummary = ({ dailyReport, seasonName }) => {\r\n\r\n const seasonNameParts = seasonName.split('-')\r\n\r\n const [dailyReportSeasonSummary, setDailyReportSeasonSummary] = useState([]);\r\n\r\n const fetchSeasonSummary = async (nowId, season) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/archive/${nowId}/${season}`\r\n }).then(resSeasonSummary => {\r\n console.log(resSeasonSummary.data)\r\n setDailyReportSeasonSummary(resSeasonSummary.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n if (seasonName > '2011-2012') {\r\n fetchSeasonSummary(dailyReport.Now_Id, seasonName)\r\n }\r\n }, [dailyReport.Now_Id, seasonName]);\r\n\r\n if (dailyReportSeasonSummary.length <= 0) {\r\n return (<Loader />)\r\n }\r\n else {\r\n return (\r\n <div className='empty-row'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned mt-2\">\r\n <h4>Observed snowfall during the {seasonName} winter season</h4>\r\n </div>\r\n {dailyReportSeasonSummary.TotalSnowfall > 0 &&\r\n <div className=\"sj-table-container sj-full-width sj-no-margin\">\r\n <table className=\"sj-table sj-table-season-summary\">\r\n <tbody>\r\n <tr>\r\n <td>Total snowfall over the season</td>\r\n <td colSpan={2}>{dailyReportSeasonSummary.TotalSnowfall}cm</td>\r\n </tr>\r\n <tr>\r\n <td>Number of days snowfall observed at base</td>\r\n <td colSpan={2}>{dailyReportSeasonSummary.TotalSnowfallDays} days</td>\r\n </tr>\r\n <tr>\r\n <td>Most observed snowfall in 1 day</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.MostDailySnowfall}cm</td>\r\n <td>[{dailyReportSeasonSummary.MostDailySnowfallDate}]</td>\r\n </tr>\r\n <tr>\r\n <td>November {seasonNameParts[0]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.NovemberSnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.NovemberSnowfallDays}</strong> days in November {seasonNameParts[0]}</td>\r\n </tr>\r\n <tr>\r\n <td>December {seasonNameParts[0]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.DecemberSnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.DecemberSnowfallDays}</strong> days in December {seasonNameParts[0]}</td>\r\n </tr>\r\n <tr>\r\n <td>January {seasonNameParts[1]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.JanuarySnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.JanuarySnowfallDays}</strong> days in January {seasonNameParts[1]}</td>\r\n </tr>\r\n <tr>\r\n <td>February {seasonNameParts[1]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.FebruarySnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.FebruarySnowfallDays}</strong> days in February {seasonNameParts[1]}</td>\r\n </tr>\r\n <tr>\r\n <td>March {seasonNameParts[1]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.MarchSnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.MarchSnowfallDays}</strong> days in March {seasonNameParts[1]}</td>\r\n </tr>\r\n <tr>\r\n <td>April {seasonNameParts[1]} snowfall</td>\r\n <td className='left-aligned'>{dailyReportSeasonSummary.AprilSnowfall}cm</td>\r\n <td>Reported on <strong>{dailyReportSeasonSummary.AprilSnowfallDays}</strong> days in April {seasonNameParts[1]}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n {dailyReportSeasonSummary.TotalSnowfall == 0 &&\r\n <div>\r\n <h3 className='center-aligned space-above'>No data yet</h3>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default SeasonSummary;","import { useState, useEffect } from 'react';\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nconst SeasonReportCalendar = ({ dailyReport, nowYear, nowMonth, dailySnowfallMonthlyList }) => {\r\n\r\n //const history = useHistory();\r\n const navigate = useNavigate();\r\n\r\n const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n const DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n const DAYS_OF_THE_WEEK = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'];\r\n const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\r\n const [date, setDate] = useState(new Date(nowYear, nowMonth, 1));\r\n const [month, setMonth] = useState(date.getMonth());\r\n const [startDay, setStartDay] = useState(getStartDayOfMonth(date));\r\n\r\n useEffect(() => {\r\n setMonth(date.getMonth());\r\n setStartDay(getStartDayOfMonth(date));\r\n }, [nowYear, nowMonth, date]);\r\n\r\n function getStartDayOfMonth(date) {\r\n const startDate = new Date(date.getFullYear(), date.getMonth(), 1).getDay();\r\n return startDate === 0 ? 7 : startDate;\r\n }\r\n\r\n function isLeapYear(year) {\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n }\r\n\r\n const getDayOrdinal = (day) => {\r\n if (day > 3 && day < 21) return 'th';\r\n switch (day % 10) {\r\n case 1: return \"st\";\r\n case 2: return \"nd\";\r\n case 3: return \"rd\";\r\n default: return \"th\";\r\n }\r\n }\r\n\r\n const getDailySnowfall = (calDay) => {\r\n\r\n let dailySnowfall = undefined\r\n\r\n let dailySnowfallData = dailySnowfallMonthlyList.filter(function (currentElement) {\r\n return (currentElement.NowReportDay === calDay);\r\n });\r\n\r\n if (dailySnowfallData[0] !== undefined) {\r\n dailySnowfall = dailySnowfallData[0].NewSnowfallResortA\r\n }\r\n\r\n return dailySnowfall\r\n }\r\n\r\n const getReportCSS = (snowfall) => {\r\n\r\n let snowfallCSS = ' with-report-individual-0'\r\n\r\n if (snowfall > 0 && snowfall < 10) {\r\n snowfallCSS = ' with-report-individual-9'\r\n } else if (snowfall > 9 && snowfall < 20) {\r\n snowfallCSS = ' with-report-individual-19'\r\n } else if (snowfall > 19 && snowfall < 50) {\r\n snowfallCSS = ' with-report-individual-49'\r\n } else if (snowfall > 49) {\r\n snowfallCSS = ' with-report-individual-50'\r\n }\r\n\r\n return snowfallCSS\r\n }\r\n\r\n const goToDetail = (d) => {\r\n const archiveUrl = `${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/archives/${d}${getDayOrdinal(d)}-${MONTHS[month]}-${nowYear}`\r\n\r\n //history.push(archiveUrl)\r\n navigate(archiveUrl);\r\n }\r\n\r\n const days = isLeapYear(date.getFullYear()) ? DAYS_LEAP : DAYS;\r\n\r\n return (\r\n <div className='now-calendar-frame'>\r\n <div className='now-calendar-frame-header'>\r\n <div className='center-aligned'>\r\n <h4>{MONTHS[month]} {nowYear}</h4>\r\n </div>\r\n </div>\r\n <div className='now-calendar-frame-body'>\r\n {DAYS_OF_THE_WEEK.map((d) => (\r\n <div key={`${d}-${nowMonth}-${nowYear}`} className='now-calendar-day-header'>\r\n <strong>{d}</strong>\r\n </div>\r\n ))}\r\n {Array(days[month] + (startDay - 1)).fill(null).map((_, index) => {\r\n const d = index - (startDay - 2);\r\n var dayClassName = ''\r\n var dailySnowfall = ''\r\n\r\n\r\n if (d <= 0) {\r\n dayClassName = ' empty-date'\r\n } else {\r\n dayClassName = ' with-date-individual'\r\n dailySnowfall = getDailySnowfall(d)\r\n if (dailySnowfall !== undefined) {\r\n dayClassName = dayClassName + getReportCSS(dailySnowfall)\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {d <= 0 &&\r\n <div className={dayClassName} key={index}></div>\r\n }\r\n {(d > 0 && dailySnowfall !== undefined) &&\r\n <div className={dayClassName} key={index} onClick={() => goToDetail(d)}>\r\n <div className='calendar-date-container'>{d}</div>\r\n <div className='calendar-snow-container'>{dailySnowfall}cm</div>\r\n </div>\r\n }\r\n {(d > 0 && dailySnowfall === undefined) &&\r\n <div className={dayClassName} key={index}>\r\n {d}\r\n </div>\r\n }\r\n </>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SeasonReportCalendar;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport SeasonSummary from './SeasonSummary'\r\nimport DailyObservedSnowfall from '../Common/DailyObservedSnowfall'\r\nimport SeasonReportCalendar from './SeasonReportCalendar';\r\n\r\nconst SeasonContainer = ({ dailyReport, seasonName }) => {\r\n const [years, setYears] = useState(seasonName.split('-'));\r\n const [dailySnowfallList, setDailySnowfallList] = useState([]);\r\n\r\n const fetchDailyObservedSnowfall = async (nowUniqueName, seasonName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/${nowUniqueName}/${seasonName}`\r\n }).then(resDailySnowfall => {\r\n setDailySnowfallList(resDailySnowfall.data)\r\n })\r\n };\r\n\r\n const getDailySnowfallMonthlyList = (month) => {\r\n let dailyData = dailySnowfallList.filter(function (currentElement) {\r\n return (currentElement.NowReportMonth === month);\r\n });\r\n\r\n return dailyData\r\n }\r\n\r\n useEffect(() => {\r\n fetchDailyObservedSnowfall(dailyReport.UniqueName, seasonName)\r\n setYears(seasonName.split('-'))\r\n }, [dailyReport.UniqueName, seasonName]);\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{dailyReport.Name} | {seasonName} season snowfall data, analysis and archives from {dailyReport.AreaName} | SnowJapan</title>\r\n <meta name=\"description\" content={`Annual observed snowfall data and analysis with links to archive reports from the ${dailyReport.AreaName} of Japan. Snowfall is observed from base areas.`} />\r\n </Helmet>\r\n <h3>{seasonName} season statistics & archives</h3>\r\n <div>\r\n All data is the snowfall observed by our reporters around base areas. Please read <Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/about-daily-reports`}>this</Link> to learn more about our reporting.\r\n </div>\r\n {seasonName > '2011-2012' &&\r\n <SeasonSummary dailyReport={dailyReport} seasonName={seasonName} />\r\n }\r\n {seasonName > '2011-2012' &&\r\n <DailyObservedSnowfall dailyReport={dailyReport} season={seasonName} dailySnowfallList={dailySnowfallList} />\r\n }\r\n <div className='mt-5'>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-half center-aligned mt-2\">\r\n <h4>{seasonName} season calendar</h4>\r\n </div>\r\n <div className='center-aligned mt-3'>\r\n Click on the date to view each individual archive report\r\n </div>\r\n </div>\r\n <div className='center-aligned sj-row' style={{ overflow: 'none' }}>\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[0]} nowMonth={10} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(11)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[0]} nowMonth={11} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(12)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[1]} nowMonth={0} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(1)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[1]} nowMonth={1} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(2)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[1]} nowMonth={2} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(3)} />\r\n </div>\r\n <div className=\"col-lg-4 col-md-6\">\r\n <SeasonReportCalendar dailyReport={dailyReport} nowYear={years[1]} nowMonth={3} dailySnowfallMonthlyList={getDailySnowfallMonthlyList(4)} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default SeasonContainer;","import styled from 'styled-components';\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst Frame = styled.div`\r\nwidth: 400px;\r\nmin-height: 525px;\r\nborder: 1px solid lightgrey;\r\nbox-shadow: 2px 2px 2px #eee;\r\nfloat:left;\r\n`;\r\n\r\nconst Header = styled.div`\r\nfont-size: 18px;\r\nfont-weight: bold;\r\npadding: 10px 10px 5px 10px;\r\ndisplay: flex;\r\njustify-content: space-between;\r\nbackground-color: #f5f6fa;\r\n`;\r\n\r\nconst Body = styled.div`\r\nwidth: 100%;\r\n`;\r\n\r\nconst MonthlyReportsListing = ({ dailyReport, monthName, nowYear, dailySnowfallList }) => {\r\n\r\n var dailyDataList = dailySnowfallList.filter(function (currentElement) {\r\n return (currentElement.NowReportMonthFull === monthName && currentElement.NowReportYear === parseInt(nowYear));\r\n });\r\n\r\n dailyDataList.sort(function (a, b) {\r\n var dateA = new Date(a.Id), dateB = new Date(b.Id)\r\n return dateA - dateB\r\n })\r\n\r\n return (\r\n <Frame>\r\n <Header>\r\n {/*<Button onClick={() => setDate(new Date(year, month - 1, day))}>Prev</Button>*/}\r\n <div>\r\n {monthName} {nowYear}\r\n </div>\r\n {/*<Button onClick={() => setDate(new Date(year, month + 1, day))}>Next</Button>*/}\r\n </Header>\r\n <Body>\r\n {dailyDataList.map((dailyData, index) => (\r\n <div key={index}>\r\n <Link to={`${window.$baseDailyReportUrl}/${dailyReport.UniqueName}/archives/${dailyData.NowReportDayTh}-${dailyData.NowReportMonthFull}-${dailyData.NowReportYear}`}>{dailyData.NowReportDayTh} {dailyData.NowReportMonthFull} {dailyData.NowReportYear}</Link>\r\n </div>\r\n ))}\r\n </Body>\r\n </Frame>\r\n )\r\n};\r\n\r\nexport default MonthlyReportsListing;","import { useState, useEffect } from 'react'\r\nimport axios from 'axios'\r\nimport MonthlyReportsListing from './MonthlyReportsListing'\r\nimport { GetCurrentSeasonName } from '../../../../helpers/Helper'\r\n\r\nconst MonthlyReportsListingContainer = ({ dailyReport }) => {\r\n\r\n const [dailySnowfallList, setDailySnowfallList] = useState([]);\r\n const [seasonName, setSeasonName] = useState(GetCurrentSeasonName());\r\n const [years, setYears] = useState(seasonName.split('-'));\r\n\r\n const fetchDailySnowfall = async (nowUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/${nowUniqueName}/All`\r\n }).then(resDailySnowfall => {\r\n setDailySnowfallList(resDailySnowfall.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchDailySnowfall(dailyReport.UniqueName)\r\n setYears(seasonName.split('-'))\r\n }, [dailyReport.UniqueName, seasonName]);\r\n\r\n let seasons = [...new Set(dailySnowfallList.map(item => item.Season))].sort().reverse();\r\n\r\n const handleChange = (event) => {\r\n setSeasonName(event.target.value)\r\n };\r\n\r\n return (\r\n <div>\r\n <h1>Daily Report Archives</h1>\r\n <div>\r\n <div>\r\n <select onChange={handleChange}>\r\n {seasons.map((item, index) => (\r\n <option key={index} value={item}>\r\n {item} Season\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n <div>\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='April' nowYear={years[1]} dailySnowfallList={dailySnowfallList} />\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='March' nowYear={years[1]} dailySnowfallList={dailySnowfallList} />\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='February' nowYear={years[1]} dailySnowfallList={dailySnowfallList} />\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='January' nowYear={years[1]} dailySnowfallList={dailySnowfallList} />\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='December' nowYear={years[0]} dailySnowfallList={dailySnowfallList} />\r\n <MonthlyReportsListing dailyReport={dailyReport} monthName='November' nowYear={years[0]} dailySnowfallList={dailySnowfallList} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default MonthlyReportsListingContainer;","import MonthlyReportsListingContainer from './MonthlyReportsListingContainer'\r\nimport DetailDailyReport from '../Common/DetailDailyReport'\r\n\r\nconst ArchivesContainer = ({ params, dailyReport, nowSeasons }) => {\r\n return (\r\n <div>\r\n {params.season === undefined\r\n ? <MonthlyReportsListingContainer dailyReport={dailyReport} />\r\n : <DetailDailyReport dailyReport={dailyReport} params={params} nowSeasons={nowSeasons} isArchive={true} />\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default ArchivesContainer","import { Link } from 'react-router-dom'\r\n\r\nconst YearlyAnalysisTab = ({ nowUniqueName, nowSeasons }) => {\r\n\r\n return (\r\n <div className='sj-link-button-container'>\r\n {nowSeasons.map((season, index) => (\r\n <div key={index} className='sj-weather-season-button center-aligned'><Link to={`${window.$baseDailyReportUrl}/${nowUniqueName}/season/${season.Season}`}>{season.Season}</Link></div>\r\n ))}\r\n </div >\r\n );\r\n}\r\n\r\nexport default YearlyAnalysisTab;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport Loader from '../../../Common/Loader'\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst AboutDailyReport = ({ params }) => {\r\n\r\n const [guide, setGuide] = useState(undefined)\r\n\r\n const fetchGuides = async (guideUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/guides/${guideUniqueName}`\r\n }).then(resGuide => {\r\n setGuide(resGuide.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchGuides('about-daily-reports')\r\n }, [params])\r\n\r\n if (guide !== undefined && guide !== null) {\r\n return (\r\n <>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(guide.HtmlContent) }} />\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n}\r\n\r\nexport default AboutDailyReport","import { useState, useEffect, Fragment } from 'react'\r\nimport axios from 'axios'\r\nimport { Link, useParams } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\nimport DetailTabs from './DetailTabs'\r\nimport Loader from \"../../Common/Loader\"\r\nimport DetailDailyReport from './Common/DetailDailyReport'\r\nimport ObservedSnowfallAnalysisContainer from './ObservedSnowfallAnalysis/ObservedSnowfallAnalysisContainer'\r\nimport SnowDepthAnalysisContainer from './SnowDepthAnalysis/SnowDepthAnalysisContainer'\r\nimport WeatherContainer from './Weather/WeatherContainer'\r\nimport SeasonContainer from './Season/SeasonContainer'\r\nimport ArchivesContainer from './Archives/ArchivesContainer'\r\nimport YearlyAnalysisTab from './YearlyAnalysisTab'\r\nimport AboutDailyReport from './About/AboutDailyReport'\r\n\r\n\r\nconst DetailContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n const [latestReport, setLatestReport] = useState([]);\r\n const [nowSeasons, setNowSeasons] = useState([]);\r\n\r\n const fetchLatestReportAndNowSeasons = async (nowUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/latest/${nowUniqueName}`\r\n }).then(resLatestReport => {\r\n\r\n if (Object.keys(resLatestReport.data).length <= 0) {\r\n window.location.href = \"https://www.snowjapan.com/404.html\";\r\n }\r\n\r\n setLatestReport(resLatestReport.data)\r\n\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/dailyreport/reports/snowfall-seasons/${resLatestReport.data.Now_Id}`\r\n })\r\n }).then(resNowSeasons => {\r\n setNowSeasons(resNowSeasons.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchLatestReportAndNowSeasons(params.now);\r\n }, [params.now]);\r\n\r\n if (Object.keys(latestReport).length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n else {\r\n return (\r\n <Fragment>\r\n <h2>{latestReport.Name}</h2>\r\n <div className='sj-para mt-1 mb-3'>\r\n Independent snow and weather reports from the <Link to={`${window.$baseSkiAreaUrl}/area/${latestReport.AreaUniqueName}`}>{latestReport.AreaName}</Link>, Japan\r\n </div>\r\n <DetailTabs />\r\n <div>\r\n {\r\n {\r\n undefined: <DetailDailyReport dailyReport={latestReport} params={params} nowSeasons={nowSeasons} isActive={false} />,\r\n 'observed-snowfall-analysis': <ObservedSnowfallAnalysisContainer dailyReport={latestReport} />,\r\n 'snow-depth-analysis': <SnowDepthAnalysisContainer dailyReport={latestReport} />,\r\n 'weather': <WeatherContainer dailyReport={latestReport} />,\r\n 'archives': <ArchivesContainer params={params} dailyReport={latestReport} nowSeasons={nowSeasons} />,\r\n 'season': <SeasonContainer dailyReport={latestReport} seasonName={params.season} />,\r\n 'about-daily-reports': <AboutDailyReport params={params} />\r\n }[params.type]\r\n }\r\n </div>\r\n <div>\r\n <div className=\"sj-box sj-box-dark-gray sj-round-full center-aligned mt-5 mb-3\">\r\n <h4>Annual archives</h4>\r\n </div>\r\n <YearlyAnalysisTab nowUniqueName={params.now} nowSeasons={nowSeasons} />\r\n </div>\r\n {/*params.now === 'Niseko-Now' &&\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://www.yukiroro.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-yu-kiroro.jpg' alt='listing-yu-kiroro' /></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n */}\r\n {params.now === 'Yuzawa-Now' &&\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://gala.co.jp/winter/english/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-gala-yuzawa.jpg' alt='listing-gala-yuzawa' /></a>\r\n </div>\r\n </div>\r\n {/*<div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center1 mt-3'>\r\n <a href='https://www.naspanewotani.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-naspa.jpg' alt='listing-naspa' /></a>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-center2 mt-3'>\r\n <a href='https://www.snowjapan.com/listings/travel/yuzawa-minamiuonuma-eleven-plus' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-eleven-plus.jpg' alt='listing-naspa' /></a>\r\n </div>\r\n </div>*/}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {params.now === 'Nozawa-Onsen-Now' &&\r\n <div className=\"banner-holder\">\r\n <div className=\"sj-row mb-0\">\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg\">\r\n <div className=\"col-lg-3 col-md-6 sj-row-no-margin-padding\">\r\n <div className='home-listing-holder-left mt-3'>\r\n <a href='https://en.nozawaski.com/' target='_blank' rel='noreferrer'><Image src='https://www.snowjapan.com/UploadedFiles/CMSImages/Listings/listing-nozawa-onsen.jpg' alt='listing-nozawa-onsen' /></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </Fragment>\r\n )\r\n }\r\n};\r\n\r\nexport default DetailContainer;","import { useState, useEffect } from 'react'\r\nimport styled from 'styled-components';\r\n\r\nconst CheckboxText = styled.span`\r\n ${props => props.Disabled && `\r\n color: #b7b7b7;\r\n `}\r\n`;\r\n\r\nconst NearbySkiAreaCheckList = ({ selectedPrefectures, selectedSkiAreas, options, onChange }) => {\r\n const [skiAreaData, setSkiAreaData] = useState(options);\r\n\r\n const toggle = index => {\r\n const newData = [...skiAreaData];\r\n newData.splice(index, 1, {\r\n name: skiAreaData[index].name,\r\n uniqueName: skiAreaData[index].uniqueName,\r\n accommodationUniqueName: skiAreaData[index].accommodationUniqueName,\r\n checked: !skiAreaData[index].checked,\r\n disabled: skiAreaData[index].disabled\r\n });\r\n setSkiAreaData(newData);\r\n onChange(newData);\r\n };\r\n\r\n const refreshSkiAreaOpetions = (prefectures, allSkiAreas, selSkiAreas) => {\r\n\r\n let selectedSkiAreaList = selSkiAreas.filter(function (currentElement) {\r\n return (currentElement.checked);\r\n });\r\n\r\n var selecteSkidAreaUniqueNames = selectedSkiAreaList.map(function (obj) { return obj.uniqueName; });\r\n\r\n let selectedPrefectureList = prefectures.filter(function (currentElement) {\r\n return (currentElement.checked);\r\n });\r\n\r\n var prefectureUniqueNames = selectedPrefectureList.map(function (obj) { return obj.uniqueName; });\r\n\r\n allSkiAreas = allSkiAreas.map(item => {\r\n item.disabled = false;\r\n item.checked = selecteSkidAreaUniqueNames.includes(item.uniqueName);\r\n return item;\r\n })\r\n\r\n setSkiAreaData(allSkiAreas);\r\n }\r\n\r\n useEffect(() => {\r\n refreshSkiAreaOpetions(selectedPrefectures, options, selectedSkiAreas);\r\n }, [selectedPrefectures, options, selectedSkiAreas]);\r\n\r\n return (\r\n <>\r\n <h3>Nearby Ski Areas</h3>\r\n {skiAreaData.map((item, index) => (\r\n <div key={item.uniqueName}>\r\n <label>\r\n <input\r\n readOnly\r\n type=\"checkbox\"\r\n checked={item.checked || false}\r\n onClick={() => toggle(index)}\r\n disabled={item.disabled || false}\r\n /> <CheckboxText Disabled={item.disabled}>{item.name}</CheckboxText>\r\n </label><br />\r\n </div>\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default NearbySkiAreaCheckList;","import { useState, useEffect } from 'react'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport AccommodationListTable from './AccommodationListTable';\r\n\r\nconst SearchResult = ({ allAccommodationList, ClearSort, prefectures, areas, towns, nearbySkiAreas, noFilter }) => {\r\n\r\n const [searchedAccommodationList, setSearchedAccommodationList] = useState(allAccommodationList)\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Sort By: Accommodation name [A-Z]')\r\n const [sortColumn, setSortColumn] = useState('')\r\n const [sortOrder, setSortOrder] = useState('')\r\n const [searchFilterPrefecture, setSearchFilterPrefecture] = useState('')\r\n const [searchFilterArea, setSearchFilterArea] = useState('')\r\n const [searchFilterTown, setSearchFilterTown] = useState('')\r\n const [searchFilterNearbySkiArea, setSearchFilterNearbySkiArea] = useState('')\r\n\r\n\r\n const ClearSortValues = () => {\r\n setButtonTitle('Sort By: Accommodation name [A-Z]')\r\n setSortColumn('')\r\n setSortOrder('')\r\n }\r\n\r\n const PerpareSearchFilter = () => {\r\n if (prefectures.length > 0) {\r\n\r\n let selectedPrefectures = prefectures.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let prefectureList = [...new Set(selectedPrefectures.map(item => item.name))].sort();\r\n\r\n if (prefectureList.length > 0) {\r\n setSearchFilterPrefecture(prefectureList.join(', '))\r\n }\r\n }\r\n\r\n if (areas.length > 0) {\r\n\r\n let selectedAreas = areas.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let areaList = [...new Set(selectedAreas.map(item => item.name))].sort();\r\n\r\n if (areaList.length > 0) {\r\n setSearchFilterArea(areaList.join(', '))\r\n }\r\n }\r\n\r\n if (towns.length > 0) {\r\n\r\n let selectedTowns = towns.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let townList = [...new Set(selectedTowns.map(item => item.name))].sort();\r\n\r\n if (townList.length > 0) {\r\n setSearchFilterTown(townList.join(', '))\r\n }\r\n }\r\n\r\n if (nearbySkiAreas.length > 0) {\r\n\r\n let selectedNearbySkiAreas = nearbySkiAreas.filter(function (currentElement) {\r\n return (currentElement.checked === true);\r\n });\r\n\r\n let nearbySkiAreaList = [...new Set(selectedNearbySkiAreas.map(item => item.name))].sort();\r\n\r\n if (nearbySkiAreaList.length > 0) {\r\n setSearchFilterNearbySkiArea(nearbySkiAreaList.join(', '))\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n PerpareSearchFilter()\r\n setSearchedAccommodationList(allAccommodationList)\r\n ClearSortValues()\r\n if (noFilter) {\r\n setSearchFilterPrefecture('')\r\n setSearchFilterArea('')\r\n setSearchFilterTown('')\r\n setSearchFilterNearbySkiArea('')\r\n }\r\n }, [allAccommodationList, noFilter])\r\n\r\n useEffect(() => {\r\n ClearSort.current = ClearSortValues\r\n }, [ClearSort])\r\n\r\n const SortResult = (evtKey, evt) => {\r\n\r\n var sortedResult = []\r\n var sortColumn = ''\r\n var sortOrder = ''\r\n\r\n if (evtKey === '1' || evtKey === '2') {\r\n sortedResult = searchedAccommodationList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '2') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Accommodation name\"\r\n\r\n } else if (evtKey === '3' || evtKey === '4') {\r\n sortedResult = searchedAccommodationList.sort(function (a, b) {\r\n let nameA = a.AreaName.toLowerCase(), nameB = b.AreaName.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '4') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Area\"\r\n\r\n } else if (evtKey === '5' || evtKey === '6') {\r\n sortedResult = searchedAccommodationList.sort(function (a, b) {\r\n let nameA = a.PrefectureName.toLowerCase(), nameB = b.PrefectureName.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '6') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Prefecture\"\r\n\r\n }\r\n\r\n setSearchedAccommodationList(sortedResult)\r\n setButtonTitle('Sort by: ' + evt.target.innerText)\r\n setSortColumn(sortColumn)\r\n setSortOrder(sortOrder)\r\n }\r\n\r\n\r\n if (searchedAccommodationList.length > 0) {\r\n return (\r\n <>\r\n <div className=\"empty-row\">\r\n <div className='row sj-no-bg sj-row-no-margin-padding'>\r\n <div className='col-md-6 sj-row-no-margin-padding'>\r\n {searchFilterPrefecture !== '' &&\r\n <div><strong>[Prefecture] </strong>{searchFilterPrefecture}</div>\r\n }\r\n {searchFilterArea !== '' &&\r\n <div><strong>[Area] </strong>{searchFilterArea}</div>\r\n }\r\n {searchFilterTown !== '' &&\r\n <div><strong>[Town] </strong>{searchFilterTown}</div>\r\n }\r\n {searchFilterNearbySkiArea !== '' &&\r\n <div><strong>[Nearby Ski areas] </strong>{searchFilterNearbySkiArea}</div>\r\n }\r\n {(searchFilterPrefecture === '' && searchFilterArea === '' && searchFilterTown === '' && searchFilterNearbySkiArea === '') &&\r\n <div>No filters selected</div>\r\n }\r\n </div>\r\n <div className='col-md-6 right-aligned sj-row-no-margin-padding'>\r\n <DropdownButton align=\"end\" title={buttonTitle} onSelect={SortResult} id=\"dropdown-menu-align-end\" className='sj-large-font-button'>\r\n <Dropdown.Item eventKey=\"1\">Accommodation name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"2\">Accommodation name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"3\">Area name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"4\">Area name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"5\">Prefecture name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"6\">Prefecture name [Z-A]</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n <AccommodationListTable\r\n tableData={searchedAccommodationList}\r\n sortColumn={sortColumn}\r\n sortOrder={sortOrder}\r\n headingColumns={['', 'Accommodation name', 'Area', 'Prefecture']}\r\n dataMapping={['a', 'Name', 'AreaName', 'PrefectureName']}\r\n title={`Selected accommodations`}\r\n />\r\n </div>\r\n </>\r\n )\r\n } else {\r\n return (\r\n <>\r\n <h3>No Result Found</h3>\r\n </>\r\n )\r\n }\r\n};\r\n\r\nexport default SearchResult;","import axios from 'axios'\r\nimport { useState, useEffect, useRef } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport { Helmet } from \"react-helmet\"\r\nimport { Button, Offcanvas } from 'react-bootstrap'\r\nimport Loader from \"../Common/Loader\"\r\nimport PrefectureCheckList from \"../Common/PrefectureCheckList\"\r\nimport TownCheckList from \"../Common/TownCheckList\"\r\nimport AreaCheckList from \"../Common/AreaCheckList\"\r\nimport NearbySkiAreaCheckList from \"../Common/NearbySkiAreaCheckList\"\r\nimport SearchResult from './SearchResult'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst AccommodationHome = ({ accommodationList, uniqueSkiAreas, allNearbySkyAreaList }) => {\r\n\r\n const params = useParams()\r\n\r\n const [accommodationHomePage, setAccommodationHomePage] = useState('')\r\n\r\n const [allAccommodationList, setAllAccommodationList] = useState([])\r\n\r\n // Prefectures\r\n const [prefectures, setPrefectures] = useState([])\r\n const [selectedPrefectures, setSelectedPrefectures] = useState([])\r\n\r\n // Areas\r\n const [allAreas, setAllAreas] = useState([]);\r\n const [selectedAreas, setSelectedAreas] = useState([])\r\n\r\n // Towns\r\n const [allTowns, setAllTowns] = useState([]);\r\n const [selectedTowns, setSelectedTowns] = useState([])\r\n\r\n // Ski Areas\r\n const [selectedSkiAreas, setSelectedSkiAreas] = useState([])\r\n\r\n const ClearSort = useRef(null)\r\n const [show, setShow] = useState(false)\r\n\r\n const handleClose = () => setShow(false)\r\n const handleShow = () => setShow(true)\r\n\r\n const [noFilter, setNoFilter] = useState(true)\r\n\r\n const fetchAccommodationHomePage = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/Accommodation`\r\n }).then(resGeneralMessages => {\r\n setAccommodationHomePage(resGeneralMessages.data.Message)\r\n })\r\n };\r\n\r\n // Pre-Searched Prefecture, Area and Town List\r\n const getAccommodationPrefectures = (resultAccommodationList) => {\r\n if (resultAccommodationList.length > 0) {\r\n const prefectures = [...new Map(resultAccommodationList.map(item => [item['PrefectureUniqueName'], item])).values()]\r\n\r\n const uniquePrefectures = prefectures.map(p => ({ name: p.PrefectureName, uniqueName: p.PrefectureUniqueName, checked: false }))\r\n\r\n uniquePrefectures.sort(function (a, b) {\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n\r\n })\r\n\r\n setPrefectures(uniquePrefectures)\r\n }\r\n }\r\n\r\n const getAllAccommodationAreas = (allAccommodations) => {\r\n\r\n if (allAccommodations.length > 0) {\r\n const areas = [...new Map(allAccommodations.map(item => [item['AreaUniqueName'], item])).values()]\r\n\r\n const uniqueAreas = areas.map(a => ({ name: a.AreaName, uniqueName: a.AreaUniqueName, prefectureUniqueName: a.PrefectureUniqueName, checked: false, disabled: false }));\r\n\r\n uniqueAreas.sort(function (a, b) {\r\n if (a.name === null || b.name === null) {\r\n return 0;\r\n }\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n setAllAreas(uniqueAreas)\r\n }\r\n }\r\n\r\n const getAllAccommodationTowns = (allAccommodations) => {\r\n if (allAccommodations.length > 0) {\r\n const towns = [...new Map(allAccommodations.map(item => [item['TownUniqueName'], item])).values()];\r\n\r\n const uniqueTowns = towns.map(t => ({ name: t.TownName, uniqueName: t.TownUniqueName, prefectureUniqueName: t.PrefectureUniqueName, checked: false, disabled: false }));\r\n\r\n uniqueTowns.sort(function (a, b) {\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n\r\n })\r\n\r\n setAllTowns(uniqueTowns)\r\n }\r\n }\r\n\r\n const getSearchResult = (thisAccommodationList) => {\r\n let searchedAccommodation = thisAccommodationList\r\n\r\n var searchedAccommodationPrefecture = []\r\n var searchedAccommodationArea = []\r\n var searchedAccommodationTown = []\r\n var searchedAccommodationSkiArea = []\r\n\r\n // Prefecture Search\r\n let selectedPrefectureList = selectedPrefectures.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n })\r\n\r\n if (selectedPrefectureList.length > 0) {\r\n\r\n var prefectureUniqueNames = selectedPrefectureList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedAccommodationPrefecture = thisAccommodationList.filter(({ PrefectureUniqueName }) => prefectureUniqueNames.includes(PrefectureUniqueName))\r\n }\r\n\r\n // Area Search\r\n let selectedAreaList = selectedAreas.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n });\r\n\r\n if (selectedAreaList.length > 0) {\r\n\r\n var areaUniqueNames = selectedAreaList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedAccommodationArea = thisAccommodationList.filter(({ AreaUniqueName }) => areaUniqueNames.includes(AreaUniqueName))\r\n }\r\n\r\n // Town Search\r\n let selectedTownList = selectedTowns.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n });\r\n\r\n if (selectedTownList.length > 0) {\r\n\r\n var townUniqueNames = selectedTownList.map(function (obj) { return obj.uniqueName; })\r\n\r\n searchedAccommodationTown = thisAccommodationList.filter(({ TownUniqueName }) => townUniqueNames.includes(TownUniqueName))\r\n }\r\n\r\n // Ski Area Search\r\n let selectedSkiAreaList = selectedSkiAreas.filter(function (currentElement) {\r\n return (currentElement.checked)\r\n })\r\n\r\n if (selectedSkiAreaList.length > 0) {\r\n\r\n var skiAreaUniqueNames = selectedSkiAreaList.map(function (obj) { return obj.uniqueName; })\r\n\r\n var selectedNearbySkiAreas = allNearbySkyAreaList.filter(({ SkiAreaUniqueName }) => skiAreaUniqueNames.includes(SkiAreaUniqueName))\r\n\r\n var accommodationUniqueNames = selectedNearbySkiAreas.map(function (obj) { return obj.AccommodationUniqueName })\r\n\r\n searchedAccommodationSkiArea = thisAccommodationList.filter(({ UniqueName }) => accommodationUniqueNames.includes(UniqueName))\r\n }\r\n\r\n if (selectedPrefectureList.length > 0 || selectedAreaList.length > 0 || selectedTownList.length > 0 || selectedSkiAreaList.length > 0) {\r\n searchedAccommodation = [...new Set([...searchedAccommodationPrefecture, ...searchedAccommodationTown, ...searchedAccommodationArea, ...searchedAccommodationSkiArea])];\r\n\r\n setNoFilter(false)\r\n }\r\n\r\n searchedAccommodation = searchedAccommodation.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase()\r\n\r\n if (nameA < nameB) {\r\n return -1\r\n }\r\n if (nameA > nameB) {\r\n return 1\r\n }\r\n return 0\r\n })\r\n\r\n setAllAccommodationList(searchedAccommodation)\r\n getAccommodationPrefectures(searchedAccommodation)\r\n getAllAccommodationAreas(accommodationList)\r\n getAllAccommodationTowns(accommodationList)\r\n }\r\n\r\n useEffect(() => {\r\n fetchAccommodationHomePage()\r\n }, [params])\r\n\r\n useEffect(() => {\r\n getSearchResult(accommodationList)\r\n\r\n }, [params, accommodationList, uniqueSkiAreas, selectedPrefectures, selectedTowns, selectedAreas, selectedSkiAreas])\r\n\r\n const ClearSearch = () => {\r\n\r\n if (selectedPrefectures.length > 0) {\r\n const selPrefectures = selectedPrefectures.map(p => ({ name: p.name, uniqueName: p.uniqueName, checked: false }))\r\n setSelectedPrefectures(selPrefectures)\r\n }\r\n\r\n if (selectedAreas.length > 0) {\r\n const selAreas = selectedAreas.map(a => ({ name: a.AreaName, uniqueName: a.AreaUniqueName, prefectureUniqueName: a.PrefectureUniqueName, checked: false, disabled: false }))\r\n setSelectedAreas(selAreas)\r\n }\r\n\r\n if (selectedTowns.length > 0) {\r\n const selTowns = selectedTowns.map(t => ({ name: t.TownName, uniqueName: t.TownUniqueName, prefectureUniqueName: t.PrefectureUniqueName, checked: false, disabled: false }))\r\n setSelectedTowns(selTowns)\r\n }\r\n\r\n if (selectedSkiAreas.length > 0) {\r\n const selSkiAreas = uniqueSkiAreas.map(sa => ({ name: sa.name, uniqueName: sa.uniqueName, prefectureUniqueName: sa.prefectureUniqueName, accommodationUniqueName: sa.accommodationUniqueName, checked: false, disabled: false }))\r\n setSelectedSkiAreas(selSkiAreas)\r\n }\r\n\r\n getSearchResult(accommodationList)\r\n setNoFilter(true)\r\n\r\n ClearSort.current()\r\n }\r\n\r\n if (prefectures.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Accommodation near ski areas in Japan | SnowJapan</title>\r\n <meta name=\"description\" content=\"Accommodation and places to stay near popular ski areas throughout Japan\" />\r\n </Helmet>\r\n <h3>Accommodation</h3>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Accommodations.svg\" alt=\"Japan Ski Areas\" /></div>\r\n <div>\r\n <div className=\"sj-para\">\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(accommodationHomePage) }} />\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <Button variant=\"primary\" onClick={handleShow} className='sj-large-font-button sj-red-bg'>{'< Select filters'}</Button> \r\n <Button variant=\"primary\" onClick={ClearSearch} className='sj-large-font-button'>Clear all filters</Button>\r\n <Offcanvas show={show} onHide={handleClose}>\r\n <Offcanvas.Header closeButton>\r\n <Offcanvas.Title>\r\n <h3>Choose filter(s)</h3>\r\n </Offcanvas.Title>\r\n </Offcanvas.Header>\r\n <Offcanvas.Body>\r\n <div>Choose any combination of filters from this list of Prefectures, Areas and Towns.</div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body sj-box-lighter-blue'>\r\n <PrefectureCheckList\r\n options={prefectures}\r\n selectedPrefectures={selectedPrefectures}\r\n onChange={data => {\r\n setSelectedPrefectures(data)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body sj-box-lighter-blue'>\r\n <AreaCheckList\r\n options={allAreas}\r\n selectedPrefectures={selectedPrefectures}\r\n selectedAreas={selectedAreas}\r\n onChange={data => {\r\n setSelectedAreas(data)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body sj-box-lighter-blue'>\r\n <TownCheckList\r\n options={allTowns}\r\n selectedPrefectures={selectedPrefectures}\r\n selectedTowns={selectedTowns}\r\n onChange={data => {\r\n setSelectedTowns(data)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='search-bar-frame'>\r\n <div className='search-bar-frame-body sj-box-lighter-blue'>\r\n <NearbySkiAreaCheckList\r\n options={uniqueSkiAreas}\r\n selectedPrefectures={selectedPrefectures}\r\n selectedSkiAreas={selectedSkiAreas}\r\n onChange={data => {\r\n setSelectedSkiAreas(data)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Offcanvas.Body>\r\n </Offcanvas>\r\n <div>\r\n <SearchResult allAccommodationList={allAccommodationList} ClearSort={ClearSort} prefectures={selectedPrefectures} areas={selectedAreas} towns={selectedTowns} nearbySkiAreas={selectedSkiAreas} noFilter={noFilter} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n};\r\n\r\nexport default AccommodationHome","import { useState, useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Helmet } from \"react-helmet\"\r\nimport AccommodationHome from './Home'\r\n\r\nconst AccommodationContainer = () => {\r\n const params = useParams()\r\n const [accommodationList, setAccommodationList] = useState([])\r\n const [allNearbySkyAreaList, setAllNearbySkyAreaList] = useState([])\r\n const [uniqueSkiAreas, setuniqueSkiAreas] = useState([])\r\n\r\n const fetchAccommodationList = async (thisParam) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/list/all/all`\r\n }).then(dataAccommodationList => {\r\n setAccommodationList(dataAccommodationList.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/nearby-resorts/list/all`\r\n })\r\n }).then(dataNearbySkyAras => {\r\n setAllNearbySkyAreaList(dataNearbySkyAras.data)\r\n getAllAccommodationNearbySkiAreas(dataNearbySkyAras.data)\r\n })\r\n };\r\n\r\n const getAllAccommodationNearbySkiAreas = (nearbySkyAreas) => {\r\n\r\n if (nearbySkyAreas.length > 0) {\r\n const nearbySkiAreas = [...new Map(nearbySkyAreas.map(item => [item['SkiAreaUniqueName'], item])).values()];\r\n\r\n const allUniqueSkiAreas = nearbySkiAreas.map(sa => ({ name: sa.SkiAreaName, uniqueName: sa.SkiAreaUniqueName, prefectureUniqueName: sa.SkiAreaPrefectureUniqueName, accommodationUniqueName: sa.AccommodationUniqueName, checked: false, disabled: false }));\r\n\r\n allUniqueSkiAreas.sort(function (a, b) {\r\n let nameA = a.name.toLowerCase(),\r\n nameB = b.name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n\r\n })\r\n\r\n setuniqueSkiAreas(allUniqueSkiAreas)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n fetchAccommodationList(params)\r\n }, [params]);\r\n\r\n return (\r\n <>\r\n <Helmet>\r\n <title>Accommodation Title</title>\r\n <meta name=\"description\" content=\"Helmet application\" />\r\n </Helmet>\r\n <AccommodationHome accommodationList={accommodationList} uniqueSkiAreas={uniqueSkiAreas} allNearbySkyAreaList={allNearbySkyAreaList} />\r\n </>\r\n )\r\n};\r\n\r\nexport default AccommodationContainer;","import { useState, useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst AccommodationDetailTabs = () => {\r\n\r\n const params = useParams()\r\n\r\n const [buttonTitle, setButtonTitle] = useState('Introduction')\r\n const [subItemName, setSubItemName] = useState('')\r\n const baseUrlPath = window.$baseAccommodationUrl + '/' + params.prefecture + '/' + params.town + '/' + params.hotel\r\n\r\n useEffect(() => {\r\n\r\n setSubItemName(params.type)\r\n\r\n let thisButtonTitle\r\n switch (params.type) {\r\n case 'photographs':\r\n thisButtonTitle = 'Photographs';\r\n break;\r\n case 'route-finder':\r\n thisButtonTitle = 'Route Finder';\r\n break;\r\n default:\r\n thisButtonTitle = \"Introduction\";\r\n }\r\n\r\n setButtonTitle(thisButtonTitle)\r\n\r\n }, [params]);\r\n\r\n return (\r\n <div>\r\n <div className=\"d-none d-lg-block bg-color-accommodation\">\r\n <ul className=\"tabs\">\r\n <li className={`${subItemName === undefined ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}`}>Introduction</Link>\r\n </li>\r\n <li className={`${subItemName === 'photographs' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/photographs`}>Photographs</Link>\r\n </li>\r\n {/*<li className={`${subItemName === 'route-finder' ? \" active\" : \"\"}`}>\r\n <Link to={`${baseUrlPath}/route-finder`}>Route Finder</Link>\r\n </li>*/}\r\n </ul>\r\n </div>\r\n <div className=\"d-lg-none sj-row-100\">\r\n <DropdownButton align=\"end\" title={buttonTitle} id=\"dropdown-menu-align-end\" variant=\"danger\" className='sj-large-font-button accommodation-sub-menu'>\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}`}>Introduction</Dropdown.Item>\r\n <Dropdown.Item as={Link} to={`${baseUrlPath}/photographs`}>Photographs</Dropdown.Item>\r\n {/*<Dropdown.Item as={Link} to={`${baseUrlPath}/route-finder`}>Route Finder</Dropdown.Item>*/}\r\n </DropdownButton>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AccommodationDetailTabs;","const AccommodationInfo = ({ accommodation }) => {\r\n return (\r\n <div className='sj-para'>\r\n <div className=\"sj-para-large\">\r\n <h3 className=\"sj-lighter-blue-text\">{accommodation.TownName} {accommodation.TownTypeStr}, {accommodation.PrefectureName}</h3>\r\n {accommodation.PrefectureNameJapanese}{accommodation.TownNameJapanese}\r\n </div>\r\n {(accommodation.WebUrl !== '' && accommodation.WebUrl !== undefined && accommodation.WebUrl !== null) &&\r\n <div>\r\n <a className=\"sj-large-button-blue btn btn-primary\" href={accommodation.WebUrl} target=\"_blank\" rel='noreferrer'> <strong>VISIT WEBSITE</strong> </a>\r\n </div>\r\n }\r\n {/*{(accommodation.EmailAddress1 !== '' && accommodation.EmailAddress1 !== undefined && accommodation.EmailAddress1 !== null) &&\r\n <div className='sj-para'>\r\n <h4>Email: <a href={`mailto:${accommodation.EmailAddress1}`}>Send</a></h4>\r\n </div>\r\n }\r\n {(accommodation.PhoneNumber1 !== '' && accommodation.PhoneNumber1 !== undefined && accommodation.PhoneNumber1 !== null) &&\r\n <div className='sj-para'>\r\n <h4>Phone (in Japan): {accommodation.PhoneNumber1}</h4>\r\n </div>\r\n }*/}\r\n </div>\r\n );\r\n}\r\n\r\nexport default AccommodationInfo;","import { Link } from 'react-router-dom'\r\nimport { Image } from 'react-bootstrap'\r\nimport AccommodationInfo from '../AccommodationInfo'\r\nimport { RenderBreak } from '../../../../helpers/Helper'\r\n\r\nconst BasicContainer = ({ accommodation, nearbySkyAraList, accommodationPhotos }) => {\r\n\r\n let sortedAccommodationPhotos = []\r\n let firstAccommodationPhoto = undefined\r\n\r\n if (accommodationPhotos.length > 0) {\r\n sortedAccommodationPhotos = accommodationPhotos.filter(function (currentElement) {\r\n return (currentElement.SortOrder !== null);\r\n });\r\n\r\n sortedAccommodationPhotos.sort(function (a, b) {\r\n return a.SortOrder - b.SortOrder\r\n })\r\n\r\n if (sortedAccommodationPhotos.length > 0) {\r\n firstAccommodationPhoto = sortedAccommodationPhotos[0]\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <div className='empty-row'>\r\n {firstAccommodationPhoto !== undefined &&\r\n <div className=\"accommodation-first-photo right-aligned\">\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/HotelImages/Photos/${firstAccommodationPhoto.FileName}`} className='img-fluid' alt='Hotel 1' />\r\n </div>\r\n }\r\n <div>\r\n <AccommodationInfo accommodation={accommodation} firstAccommodationPhoto={firstAccommodationPhoto} />\r\n <div className=\"sj-para\">\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(accommodation.PageContent) }} />\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div className='ratio ratio-16x9'>\r\n <iframe title='Location Map' width='930' height='600' src={`https://www.google.com/maps/embed/v1/place?q=${accommodation.Location_Latitude},${accommodation.Location_Longitude}&key=AIzaSyAmyWUwcoNW504tXuRlQ_mZssrKEEhGn20&zoom=${accommodation.Location_MapZoomLevel}`} allowFullScreen></iframe>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className='row sj-no-bg sj-row-no-margin-padding'>\r\n {sortedAccommodationPhotos.length > 1 &&\r\n <div className='col-md-6 center-aligned mt-3'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/HotelImages/Photos/${sortedAccommodationPhotos[1].FileName}`} fluid='true' alt='Hotel 2' />\r\n </div>\r\n }\r\n {sortedAccommodationPhotos.length > 2 &&\r\n <div className='col-md-6 center-aligned mt-3'>\r\n <Image src={`https://www.snowjapan.com/UploadedFiles/HotelImages/Photos/${sortedAccommodationPhotos[2].FileName}`} fluid='true' alt='Hotel 3' />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className='empty-row padding-top'>\r\n <h2 className='mt-3'>Nearby Ski Areas</h2>\r\n <div>\r\n <div className='row sj-frame-header sj-row-no-margin-padding'>\r\n <div className=\"col-8\">\r\n <h5>Ski Area</h5>\r\n </div>\r\n <div className=\"col-4\">\r\n <h5>Distance</h5>\r\n </div>\r\n </div>\r\n <div className='sj-data-table-holder'>\r\n {nearbySkyAraList.map(nearbySkyAra => (\r\n <div className='row sj-frame-body sj-row-no-margin-padding' key={nearbySkyAra.Id}>\r\n <div className=\"col-8\">\r\n <Link to={`${window.$baseSkiAreaUrl}/${nearbySkyAra.SkiAreaPrefectureName}/${nearbySkyAra.SkiAreaTownUniqueName}/${nearbySkyAra.SkiAreaUniqueName}`}>{nearbySkyAra.SkiAreaName}</Link>\r\n </div>\r\n <div className=\"col-4\">\r\n {nearbySkyAra.Distance}km\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default BasicContainer;","import AccommodationInfo from '../AccommodationInfo'\r\nimport { useState, useEffect, useCallback } from 'react'\r\nimport Gallery from \"react-photo-gallery\";\r\nimport Carousel, { Modal, ModalGateway } from \"react-images\";\r\nimport Loader from \"../../../Common/Loader\"\r\n\r\nconst PhotographsContainer = ({ accommodation, accommodationPhotos }) => {\r\n const [currentImage, setCurrentImage] = useState(0);\r\n const [viewerIsOpen, setViewerIsOpen] = useState(false);\r\n const [photoList, setPhotoList] = useState([]);\r\n\r\n const openLightbox = useCallback((event, { photo, index }) => {\r\n setCurrentImage(index);\r\n setViewerIsOpen(true);\r\n }, []);\r\n\r\n const closeLightbox = () => {\r\n setCurrentImage(0);\r\n setViewerIsOpen(false);\r\n };\r\n\r\n const fetchAccommodationPhotos = (thisAccommodationPhotos) => {\r\n var accommodationPhotoList = thisAccommodationPhotos.map(p => ({ src: 'https://www.snowjapan.com/UploadedFiles/HotelImages/Photos/' + p.FileName, width: p.ImageWidth, height: p.ImageHeight }));\r\n setPhotoList(accommodationPhotoList);\r\n }\r\n\r\n useEffect(() => {\r\n fetchAccommodationPhotos(accommodationPhotos);\r\n }, [accommodationPhotos]);\r\n\r\n if (photoList.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <div className='empty-row'>\r\n <AccommodationInfo accommodation={accommodation} />\r\n </div>\r\n <div className='empty-row'>\r\n <h1>Photographs</h1>\r\n </div>\r\n <div className='empty-row'>\r\n <Gallery photos={photoList} onClick={openLightbox} />\r\n <ModalGateway>\r\n {viewerIsOpen ? (\r\n <Modal onClose={closeLightbox}>\r\n <Carousel\r\n currentIndex={currentImage}\r\n views={photoList.map(x => ({\r\n ...x,\r\n srcset: x.srcSet,\r\n caption: x.title\r\n }))}\r\n />\r\n </Modal>\r\n ) : null}\r\n </ModalGateway>\r\n </div>\r\n </div >\r\n )\r\n }\r\n};\r\n\r\nexport default PhotographsContainer;","import AccommodationInfo from '../AccommodationInfo'\r\n\r\nconst RouteFinderContainer = ({ accommodation }) => {\r\n return (\r\n <div>\r\n <h1>Route Finder</h1>\r\n <AccommodationInfo accommodation={accommodation} />\r\n <div>\r\n </div>\r\n </div>\r\n )\r\n};\r\n\r\nexport default RouteFinderContainer;","import { useState, useEffect, Fragment } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from \"../../Common/Loader\"\r\nimport AccommodationDetailTabs from './AccommodationDetailTabs'\r\nimport BasicContainer from './BasicInfo/BasicInfoContainer'\r\nimport PhotographsContainer from './Photographs/PhotographsContainer'\r\nimport RouteFinderContainer from './RouteFinder/RouteFinderContainer'\r\n\r\nconst AccommodationDetailContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n const [accommodation, setAccommodation] = useState([]);\r\n const [accommodationPhotos, setAccommodationPhotos] = useState([]);\r\n const [nearbySkyAras, setNearbySkyAras] = useState([]);\r\n\r\n const fetchAccommodationPhotosAndNearbySkyAras = async (hotelUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/${hotelUniqueName}`\r\n }).then(dataAccommodation => {\r\n setAccommodation(dataAccommodation.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/photos/${hotelUniqueName}`\r\n })\r\n }).then(dataAccommodationPhotos => {\r\n setAccommodationPhotos(dataAccommodationPhotos.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/nearby-resorts/skiarea/${hotelUniqueName}`\r\n })\r\n }).then(dataNearbySkyAreas => {\r\n setNearbySkyAras(dataNearbySkyAreas.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchAccommodationPhotosAndNearbySkyAras(params.hotel);\r\n }, [params.hotel]);\r\n\r\n if (accommodation.length <= 0) {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n else {\r\n return (\r\n <Fragment>\r\n <Helmet>\r\n <title>{accommodation.Name}, an accommodation {accommodation.TownName} {accommodation.TownTypeStr}, {accommodation.PrefectureName}, Japan | {accommodation.NameJapanese} | SnowJapan</title>\r\n <meta name=\"description\" content={`Introducing ${accommodation.Name}, an accommodation located close to ski areas in ${accommodation.TownName} ${accommodation.TownTypeStr}, ${accommodation.PrefectureName}, Japan.`} />\r\n </Helmet>\r\n <h2>{accommodation.Name}</h2>\r\n <div className='sj-para-large mt-1 mb-3'>{accommodation.NameJapanese}</div>\r\n <AccommodationDetailTabs />\r\n <>\r\n {\r\n {\r\n undefined: <BasicContainer accommodation={accommodation} nearbySkyAraList={nearbySkyAras} accommodationPhotos={accommodationPhotos} />,\r\n 'photographs': <PhotographsContainer accommodation={accommodation} accommodationPhotos={accommodationPhotos} />,\r\n 'route-finder': <RouteFinderContainer accommodation={accommodation} />\r\n }[params.type]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n }\r\n};\r\n\r\nexport default AccommodationDetailContainer;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link, useLocation } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst Home = ({ listingSectionList, listingList, accommodationList }) => {\r\n\r\n const location = useLocation()\r\n\r\n const [listingIntroductionText, setListingIntroductionText] = useState('')\r\n\r\n const fetchListingMessage = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/Listing`\r\n }).then(resGeneralMessages => {\r\n setListingIntroductionText(resGeneralMessages.data.Message)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n fetchListingMessage()\r\n }, [location.pathname]);\r\n\r\n const getSectionListingList = (sectionUniqueName) => {\r\n const listings = listingList.filter(function (currentElement) {\r\n return (currentElement.SectionUniqueName === sectionUniqueName)\r\n })\r\n\r\n return listings\r\n }\r\n\r\n return (\r\n <div className='sj-row'>\r\n <Helmet>\r\n <title>Accommodation, ski lessons and jobs available near ski areas around Japan | SnowJapan</title>\r\n <meta name=\"description\" content='Introducing various accommodations, ski schools and other businesses near ski areas in Japan' />\r\n </Helmet>\r\n {\r\n (listingIntroductionText !== null && listingIntroductionText !== undefined && listingIntroductionText !== '') &&\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(listingIntroductionText) }} />\r\n }\r\n <div className='sj-listing-frame-row'>\r\n {(accommodationList !== undefined && accommodationList.length > 0) &&\r\n <div className='sj-listing-frame-holder'>\r\n <div className='sj-listing-frame'>\r\n <div className='sj-listing-frame-body'>\r\n <div>\r\n <h4>Accommodation</h4>\r\n </div>\r\n <div>\r\n <DropdownButton id=\"accommodation-list-button\" title=\"Please Select\" drop='down'>\r\n {accommodationList.map((item, index) => (\r\n <Dropdown.Item key={index} as={Link} to={`${window.$baseAccommodationUrl}/${item.PrefectureUniqueName}/${item.TownUniqueName}/${item.UniqueName}`}>{item.Name}</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={window.$baseAccommodationUrl}>Full accommodation listings</Link>\r\n </div>\r\n <div>\r\n <Link to={window.$baseAccommodationUrl}><img src={`https://www.snowjapan.com/UploadedFiles/SectionIcons/SnowJapan-Icons_Accommodation.svg`} alt='accommodation' /></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n {listingSectionList.map(listingSection => (\r\n <div key={listingSection.Id} className='sj-listing-frame-holder'>\r\n <div className='sj-listing-frame'>\r\n <div className='sj-listing-frame-body'>\r\n <div>\r\n <h4>{listingSection.Name}</h4>\r\n </div>\r\n <div>\r\n <DropdownButton id={listingSection.UniqueName} title=\"Please Select\" drop='down'>\r\n {getSectionListingList(listingSection.UniqueName).map((item, index) => (\r\n <Dropdown.Item key={index} as={Link} to={`${window.$baseListingUrl}/${listingSection.UniqueName}/${item.UniqueName}`}>{item.Name}</Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n </div>\r\n <div className='mt-3'>\r\n <Link to={`${window.$baseListingUrl}/${listingSection.UniqueName}`}>Full {listingSection.Name} listings</Link>\r\n </div>\r\n <div>\r\n <Link to={`${window.$baseListingUrl}/${listingSection.UniqueName}`}><img src={`https://www.snowjapan.com/UploadedFiles/SectionIcons/${listingSection.SectionIcon}`} alt={`${listingSection.Name}`} /></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Home","import { useState, useEffect } from 'react'\r\nimport { DropdownButton, Dropdown } from 'react-bootstrap'\r\nimport Loader from \"../Common/Loader\"\r\nimport ListingListTable from './ListingListTable';\r\n\r\nconst ListingList = ({ listingList }) => {\r\n\r\n const [listings, setListings] = useState([])\r\n const [buttonTitle, setButtonTitle] = useState('Sort By: Listing name [A-Z]')\r\n const [sortColumn, setSortColumn] = useState('')\r\n const [sortOrder, setSortOrder] = useState('')\r\n\r\n useEffect(() => {\r\n setListings(listingList)\r\n }, [listingList])\r\n\r\n const SortResult = (evtKey, evt) => {\r\n\r\n var sortedResult = []\r\n var sortColumn = ''\r\n var sortOrder = ''\r\n\r\n if (evtKey === '1' || evtKey === '2') {\r\n sortedResult = listings.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '2') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Listing name\"\r\n\r\n } else if (evtKey === '3' || evtKey === '4') {\r\n sortedResult = listings.sort(function (a, b) {\r\n let nameA = a.AreaName.toLowerCase(), nameB = b.AreaName.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '4') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Area\"\r\n\r\n } else if (evtKey === '5' || evtKey === '6') {\r\n sortedResult = listings.sort(function (a, b) {\r\n let nameA = a.PrefectureName.toLowerCase(), nameB = b.PrefectureName.toLowerCase();\r\n\r\n if (nameA < nameB) { return -1; }\r\n if (nameA > nameB) { return 1; }\r\n\r\n if (a.Name > b.Name) return 1;\r\n if (a.Name < b.Name) return -1;\r\n\r\n return 0;\r\n })\r\n sortOrder = \"ASC\"\r\n\r\n if (evtKey === '6') {\r\n sortedResult = sortedResult.reverse()\r\n sortOrder = \"DESC\"\r\n }\r\n\r\n sortColumn = \"Prefecture\"\r\n }\r\n\r\n setListings(sortedResult)\r\n setButtonTitle('Sort by: ' + evt.target.innerText)\r\n setSortColumn(sortColumn)\r\n setSortOrder(sortOrder)\r\n }\r\n\r\n if (listings.length > 0) {\r\n return (\r\n <>\r\n <div className=\"empty-row right-aligned\">\r\n <DropdownButton align=\"end\" title={buttonTitle} onSelect={SortResult} id=\"dropdown-menu-align-end\" className='sj-large-font-button'>\r\n <Dropdown.Item eventKey=\"1\">Listing name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"2\">Listing name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"3\">Area name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"4\">Area name [Z-A]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"5\">Prefecture name [A-Z]</Dropdown.Item>\r\n <Dropdown.Item eventKey=\"6\">Prefecture name [Z-A]</Dropdown.Item>\r\n </DropdownButton>\r\n </div>\r\n <ListingListTable\r\n tableData={listings}\r\n sortColumn={sortColumn}\r\n sortOrder={sortOrder}\r\n headingColumns={['', 'Listing name', 'Area', 'Prefecture']}\r\n dataMapping={['a', 'Name', 'AreaName', 'PrefectureName']}\r\n title=''\r\n />\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n};\r\n\r\nexport default ListingList;","import Loader from \"../Common/Loader\"\r\nimport { Helmet } from \"react-helmet\";\r\nimport { RenderBreak } from '../../helpers/Helper'\r\nimport ListingList from './ListingList';\r\n\r\nconst ListingListContainer = ({ sectionUniqueName, listingSectionList, listingList }) => {\r\n\r\n //const [listingSection, setListingSection] = useState({})\r\n //const [listings, setListings] = useState([])\r\n\r\n const listingSection = listingSectionList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === sectionUniqueName);\r\n });\r\n\r\n const listings = listingList.filter(function (currentElement) {\r\n return (currentElement.SectionUniqueName === sectionUniqueName);\r\n });\r\n\r\n if (listingSectionList.length > 0 && listingList.length > 0) {\r\n return (\r\n <>\r\n {(sectionUniqueName !== 'accommodation') &&\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{listingSection[0].Name} near ski areas in Japan | SnowJapan</title>\r\n <meta name=\"description\" content={`${listingSection[0].Name} near popular ski areas throughout Japan`} />\r\n </Helmet>\r\n <h3>{listingSection[0].Name}</h3>\r\n <div className=\"sj-para-image\">\r\n {listingSection[0].UniqueName === 'resort-spotlights' &&\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-SkiArea.svg\" alt={listingSection[0].Name} />\r\n }\r\n {listingSection[0].UniqueName === 'lessons' &&\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Facilities-Lessons.svg\" alt={listingSection[0].Name} />\r\n }\r\n {listingSection[0].UniqueName === 'job-listings' &&\r\n <img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Jobs-Available.svg\" alt={listingSection[0].Name} />\r\n }\r\n </div>\r\n <div>\r\n <div className=\"sj-para\">\r\n {(listingSection[0].IntroductionText !== null && listingSection[0].IntroductionText !== undefined && listingSection[0].IntroductionText !== '') &&\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(listingSection[0].IntroductionText) }} />\r\n }\r\n </div>\r\n </div>\r\n <ListingList listingList={listings} />\r\n </div>\r\n }\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n};\r\n\r\nexport default ListingListContainer;","import { RenderBreak } from '../../helpers/Helper'\r\nimport Loader from \"../Common/Loader\"\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst ListingDetail = ({ listingUniqueName, listingList }) => {\r\n\r\n const listings = listingList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === listingUniqueName);\r\n });\r\n\r\n const listingDetail = listings[0]\r\n\r\n if (listingDetail !== undefined) {\r\n return (\r\n <>\r\n <Helmet>\r\n <title>{listingDetail.Name}</title>\r\n <meta name=\"description\" content={listingDetail.Description} />\r\n </Helmet>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(listingDetail.HtmlContent) }} />\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n\r\n\r\n};\r\n\r\nexport default ListingDetail;","import axios from 'axios'\r\nimport { useState, useEffect, Fragment } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport Home from './Home'\r\nimport ListingListContainer from './ListingListContainer'\r\nimport ListingDetail from './ListingDetail'\r\n\r\nconst ListingContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n let requestType = undefined\r\n\r\n if (params.section_name !== undefined && params.section_name !== '' && (params.listing_name === '' || params.listing_name === undefined)) {\r\n requestType = 'section_listing'\r\n } else if (params.section_name !== undefined && params.section_name !== '' && params.listing_name !== undefined && params.listing_name !== '') {\r\n requestType = 'listing_detail'\r\n }\r\n\r\n const [listingList, setListingList] = useState([]);\r\n const [listingSectionList, setListingSectionList] = useState([]);\r\n const [accommodationList, setAccommodationList] = useState([]);\r\n\r\n const fetchListingSectionsAndListings = async (thisMatch) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/sections/list/Listing`\r\n }).then(resListingSections => {\r\n setListingSectionList(resListingSections.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/listings/list/All`\r\n })\r\n }).then(resListings => {\r\n setListingList(resListings.data)\r\n return axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/accommodation/list/all/all`\r\n })\r\n }).then(dataAccommodationList => {\r\n\r\n if (dataAccommodationList.data.length > 0) {\r\n let thisAccommodationList = dataAccommodationList.data\r\n thisAccommodationList.sort(function (a, b) {\r\n let nameA = a.Name.toLowerCase(),\r\n nameB = b.Name.toLowerCase();\r\n\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n\r\n })\r\n setAccommodationList(thisAccommodationList)\r\n }\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchListingSectionsAndListings(params)\r\n }, [params]);\r\n\r\n return (\r\n <Fragment>\r\n <>\r\n {\r\n {\r\n undefined: <Home listingSectionList={listingSectionList} listingList={listingList} accommodationList={accommodationList} />,\r\n 'section_listing': <ListingListContainer sectionUniqueName={params.section_name} listingSectionList={listingSectionList} listingList={listingList} />,\r\n 'listing_detail': <ListingDetail listingUniqueName={params.listing_name} listingList={listingList} />\r\n }[requestType]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n};\r\n\r\nexport default ListingContainer;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst GuideHome = () => {\r\n\r\n const location = useLocation()\r\n\r\n const [guideHomePage, setGuideHomePage] = useState('');\r\n\r\n const fetchGuideHomePage = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/Guide`\r\n }).then(resGeneralMessages => {\r\n setGuideHomePage(resGeneralMessages.data.Message)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchGuideHomePage()\r\n }, [location.path]);\r\n\r\n return (\r\n <>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(guideHomePage) }} />\r\n </>\r\n )\r\n};\r\n\r\nexport default GuideHome;","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from '../Common/Loader'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\n\r\nconst GuideDetail = ({ params }) => {\r\n\r\n const guideUniqueName = params.guide_name\r\n const [guideList, setGuideList] = useState([])\r\n\r\n const fetchGuides = async (sectionUniqueName) => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/listingGuideSection/guides/list/${sectionUniqueName}`\r\n }).then(resGuides => {\r\n\r\n /*let guidePages = resGuides.data.filter(function (currentElement) {\r\n return (currentElement.UniqueName === guideUniqueName);\r\n });\r\n\r\n if (guidePages.length <= 0) {\r\n window.location.href = \"https://www.snowjapan.com/404.html\";\r\n }*/\r\n\r\n setGuideList(resGuides.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchGuides(params.section_name)\r\n }, [params]);\r\n\r\n let guides = []\r\n\r\n if (guideUniqueName !== undefined && guideUniqueName !== '') {\r\n guides = guideList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === guideUniqueName);\r\n })\r\n } else {\r\n guides = guideList.filter(function (currentElement) {\r\n return (currentElement.IsHomePage);\r\n })\r\n }\r\n\r\n let guideDetail = undefined\r\n\r\n if (guides.length > 0) {\r\n guideDetail = guides[0]\r\n }\r\n\r\n if (guideDetail !== undefined) {\r\n return (\r\n <>\r\n <Helmet>\r\n <title>{guideDetail.Title}</title>\r\n <meta name=\"description\" content={`${guideDetail.Description}`} />\r\n <script src=\"https://public.flourish.studio/resources/embed.js\"></script>\r\n </Helmet>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(guideDetail.HtmlContent) }} />\r\n </>\r\n )\r\n } else {\r\n return (\r\n <Loader />\r\n )\r\n }\r\n}\r\n\r\nexport default GuideDetail","import { Fragment } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport GuideHome from './Home'\r\nimport GuideDetail from './GuideDetail'\r\n\r\nconst GuideContainer = () => {\r\n\r\n const params = useParams()\r\n\r\n let requestType = undefined\r\n\r\n if (params.section_name !== '' && params.section_name !== undefined) {\r\n requestType = 'guide-detail'\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <>\r\n {\r\n {\r\n undefined: <GuideHome />,\r\n 'guide-detail': <GuideDetail params={params} />\r\n }[requestType]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default GuideContainer","import axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\nimport { Link, useLocation } from 'react-router-dom'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from '../Common/Loader'\r\n\r\nconst MemberHome = ({ user }) => {\r\n\r\n const [memberHomePage, setMemberHomePage] = useState('')\r\n const location = useLocation()\r\n const [userFullName, setUserFullName] = useState('')\r\n\r\n const fetchData = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/generalmessage/MemberHome`\r\n }).then(resGeneralMessages => {\r\n setMemberHomePage(resGeneralMessages.data.Message)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchData()\r\n }, [location.pathname])\r\n\r\n useEffect(() => {\r\n if (user === null) {\r\n setUserFullName('')\r\n } else {\r\n setUserFullName(user.FullName)\r\n }\r\n }, [user])\r\n\r\n if (memberHomePage === '') {\r\n return (\r\n <Loader />\r\n )\r\n\r\n } else {\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{userFullName}’s member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Icons-Member.svg\" alt='member-login' /></div>\r\n <div>\r\n <h3>{userFullName}’s member area</h3>\r\n <div className=\"sj-para\">\r\n <p>Thank you for sharing your thoughts and/or photographs of Japanese ski areas with other SnowJapan readers.</p>\r\n <p>Be assured that your email address is strictly only used for registration purposes. It is not shared with anyone or added to any mailing list, and you will not receive any emails from us.</p>\r\n <p>Before submitting content to SnowJapan, <Link to={`${window.$baseAppUrl}/about-members-area`}>please read this</Link>.</p>\r\n </div>\r\n <div>\r\n <div className='sj-row'>\r\n <div className='sj-para'>\r\n <h3>Submit new content</h3>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-right-5\">\r\n <Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-1'><h6 className='mt-1 mb-1'>Upload new ski area photos</h6></Link>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-left-5\">\r\n <Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-1'><h6 className='mt-1 mb-1'>Write a new ski area review</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='sj-para'>\r\n <h3>Your current content </h3>\r\n <div className=\"row sj-row sj-no-bg sj-row-no-margin-padding\">\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-right-5\">\r\n <Link to={`${window.$baseMemberUrl}/photos`} className='btn btn-primary w-100 sj-box-dark-blue mt-1'><h6 className='mt-1 mb-1'>My photos</h6></Link>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-left-5\">\r\n <Link to={`${window.$baseMemberUrl}/reviews`} className='btn btn-primary w-100 sj-box-dark-blue mt-1'><h6 className='mt-1 mb-1'>My reviews</h6></Link>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default MemberHome","import { Link } from 'react-router-dom'\r\nimport { RenderBreak } from '../../helpers/Helper'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst MemberReviewDetail = ({ review }) => {\r\n return (\r\n <div className='sj-row'>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{review.Headline}</h4>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding sj-no-bg\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${review.PrefectureUniqueName}/${review.TownUniqueName}/${review.ResortUniqueName}`}><h4>{review.ResortName}</h4></Link>\r\n </div>\r\n <div className='sj-large-font'>\r\n <Link to={`${window.$baseSkiAreaUrl}/town/${review.TownUniqueName}`}>{review.TownName} {review.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${review.PrefectureUniqueName}`}>{review.PrefectureName}</Link>\r\n </div>\r\n </div>\r\n {review.ReviewText !== '' &&\r\n <div className='row sj-row-small-margin-padding sj-no-bg'>\r\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(review.ReviewText) }} />\r\n </div>\r\n }\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Date visited:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.DateVisited}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I liked:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsILiked}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Things I didn’t like:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ThingsIDidnotLike}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Review by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.ReaderName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Posted:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {review.SubmittedDayTh} {review.SubmittedMonthFull} {review.SubmittedYear}\r\n </div>\r\n </div>\r\n <hr className='mt-5' />\r\n </div>\r\n )\r\n};\r\n\r\nMemberReviewDetail.propTypes = {\r\n review: PropTypes.object.isRequired\r\n}\r\n\r\nexport default MemberReviewDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from '../Common/Loader'\r\nimport { Link } from 'react-router-dom'\r\nimport useSkiAreaReviews from '../CustomHooks/useSkiAreaReviews'\r\nimport MemberReviewDetail from './MemberReviewDetail'\r\n\r\nconst MemberReviews = ({ user }) => {\r\n\r\n const queryReview = 0\r\n const userName = user.UserName\r\n const [pageNumberReview, setPaegNumberReview] = useState(1)\r\n\r\n const {\r\n loadingReview,\r\n errorReview,\r\n reviews,\r\n hasMoreReview\r\n } = useSkiAreaReviews(queryReview, userName, pageNumberReview)\r\n\r\n const observerReview = useRef()\r\n const lastReviewElementRef = useCallback(nodeReview => {\r\n if (loadingReview)\r\n return\r\n if (observerReview.current)\r\n observerReview.current.disconnect()\r\n observerReview.current = new IntersectionObserver(entriesReview => {\r\n if (entriesReview[0].isIntersecting && hasMoreReview) {\r\n setPaegNumberReview(prevPageNumberReview => prevPageNumberReview + 1)\r\n }\r\n })\r\n\r\n if (nodeReview)\r\n observerReview.current.observe(nodeReview)\r\n }, [loadingReview, hasMoreReview])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{user.FullName}’s reviews | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Member reviews | Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Reviews.svg\" alt='review' /></div>\r\n <div>\r\n <h3>My ski area reviews</h3>\r\n <div className=\"sj-para\">\r\n Below are the ski area reviews you have posted on SnowJapan. Please note that reviews need to be manually approved before appearing on the site, so please allow some time after posting a review.\r\n </div>\r\n {/*<div className=\"col-md-6 sj-row-no-margin-padding padding-right-5\">\r\n <Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-1'><h6 className='mt-1 mb-1'>Upload new ski area photos</h6></Link>\r\n </div>\r\n <div className=\"col-md-6 sj-row-no-margin-padding padding-left-5\">\r\n <Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg w-100 mt-1'><h6 className='mt-1 mb-1'>Write a new ski area review</h6></Link>\r\n </div>*/}\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Write a new ski area review</Link></h6>\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className=\"sj-para\">\r\n <h3>Recent reviews</h3>\r\n </div>\r\n {reviews.map((review, index) => {\r\n if (reviews.length === index + 1) {\r\n return (\r\n <div ref={lastReviewElementRef} key={review.Id}>\r\n <MemberReviewDetail review={review} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={review.Id}>\r\n <MemberReviewDetail review={review} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingReview &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorReview && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default MemberReviews","import { useState, Fragment } from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { Form } from 'react-bootstrap'\r\n\r\nconst ResortAutocomplete = ({ skiAreaList, onResortSelect }) => {\r\n\r\n const [activeSuggestion, setActiveSuggestion] = useState(0)\r\n const [filteredSkiAreas, setFilteredSkiAreas] = useState([])\r\n const [showSuggestions, setShowSuggestions] = useState(false)\r\n const [userInput, setUserInput] = useState('')\r\n\r\n //const history = useHistory()\r\n const navigate = useNavigate();\r\n\r\n const onChange = (e) => {\r\n let selectedSkiAreaNameParts = e.currentTarget.value.split('(')\r\n\r\n const userInput = selectedSkiAreaNameParts[0].trim();\r\n\r\n const thisFilteredSkiAreas = skiAreaList.filter(\r\n //skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.NameJapanese.indexOf(userInput) === 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) === 0 || skiArea.TownNameJapanese.indexOf(userInput) === 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) === 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) === 0))\r\n skiArea => (skiArea.Name.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.NameJapanese.indexOf(userInput) >= 0 || skiArea.TownName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0 || skiArea.TownNameJapanese.indexOf(userInput) >= 0 || (skiArea.AreaName !== null && skiArea.AreaName !== undefined && skiArea.AreaName.toLowerCase().indexOf(userInput.toLowerCase()) >= 0) || (skiArea.AreaNameJapanese !== null && skiArea.AreaNameJapanese !== undefined && skiArea.AreaNameJapanese.indexOf(userInput) >= 0))\r\n );\r\n\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas(thisFilteredSkiAreas)\r\n setShowSuggestions(true)\r\n setUserInput(e.currentTarget.value)\r\n };\r\n\r\n const onClick = e => {\r\n setActiveSuggestion(0)\r\n setFilteredSkiAreas([])\r\n setShowSuggestions(false)\r\n setUserInput(e.currentTarget.innerText)\r\n\r\n let resortUniqueName = ''\r\n let selectedSkiAreaNameParts = e.currentTarget.innerText.split('(')\r\n\r\n const selectedSkiAreaList = skiAreaList.filter(\r\n skiArea => (skiArea.Name === selectedSkiAreaNameParts[0].trim())\r\n );\r\n\r\n if (selectedSkiAreaList.length > 0) {\r\n\r\n let selectedSkiArea = selectedSkiAreaList[0];\r\n\r\n //let path = `${window.$baseSkiAreaUrl}/${selectedSkiArea.PrefectureUniqueName}/${selectedSkiArea.TownUniqueName}/${selectedSkiArea.UniqueName}`;\r\n //history.push(path);\r\n //navigate(path);\r\n //console.log(selectedSkiArea)\r\n resortUniqueName = selectedSkiArea.UniqueName\r\n }\r\n\r\n onResortSelect(resortUniqueName)\r\n };\r\n\r\n const onKeyDown = (e) => {\r\n if (e.keyCode === 13) {\r\n setActiveSuggestion(0)\r\n setShowSuggestions(false)\r\n let selectedSkiArea = filteredSkiAreas[activeSuggestion]\r\n if (selectedSkiArea !== null && selectedSkiArea !== undefined) {\r\n setUserInput(selectedSkiArea.Name)\r\n let path = `${window.$baseSkiAreaUrl}/${selectedSkiArea.PrefectureUniqueName}/${selectedSkiArea.TownUniqueName}/${selectedSkiArea.UniqueName}`;\r\n //history.push(path);\r\n navigate(path);\r\n }\r\n }\r\n else if (e.keyCode === 38) {\r\n if (activeSuggestion === 0) {\r\n return;\r\n }\r\n\r\n setActiveSuggestion(activeSuggestion - 1)\r\n }\r\n else if (e.keyCode === 40) {\r\n if (activeSuggestion - 1 === filteredSkiAreas.length) {\r\n return;\r\n }\r\n setActiveSuggestion(activeSuggestion + 1)\r\n }\r\n };\r\n\r\n let suggestionsListComponent;\r\n\r\n if (showSuggestions && userInput) {\r\n if (filteredSkiAreas.length) {\r\n suggestionsListComponent = (\r\n <ul className=\"suggestions\">\r\n {filteredSkiAreas.map((skiArea, index) => {\r\n let className;\r\n\r\n if (index === activeSuggestion) {\r\n className = \"suggestion-active\";\r\n }\r\n\r\n return (\r\n <li className={className} key={index} onClick={onClick}>\r\n {skiArea.Name} ({skiArea.PrefectureName})\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n } else {\r\n suggestionsListComponent = (\r\n <div className=\"no-suggestions\">\r\n <em>No ski area found</em>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Form.Group controlId=\"txtResort\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Choose ski area:</h5>\r\n Type a ski area name, and available options will appear.\r\n </Form.Label>\r\n <Form.Control name=\"txtResort\" type=\"text\" onChange={onChange} onKeyDown={onKeyDown} value={userInput} />\r\n {suggestionsListComponent}\r\n </Form.Group>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default ResortAutocomplete;","import { useState, useEffect } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Form, Button, Row } from 'react-bootstrap'\r\nimport { useNavigate, useParams } from 'react-router-dom'\r\nimport ResortAutocomplete from './ResortAutocomplete'\r\n\r\nconst MemberSubmitReview = ({ user, skiAreaList }) => {\r\n\r\n const params = useParams()\r\n const navigate = useNavigate()\r\n\r\n /*const headlineRef = useRef()\r\n const dateVisitedRef = useRef()\r\n const snowConditionOnVisitRef = useRef()\r\n const reviewTextRef = useRef()\r\n const thingsILikedRef = useRef()\r\n const thingsIDidnotLikeRef = useRef()\r\n const errRef = useRef()*/\r\n\r\n const [resortUniqueNameFromParam, setResortUniqueNameFromParam] = useState('')\r\n const [thisResort, setThisResort] = useState(undefined)\r\n const [resortUniqueName, setResortUniqueName] = useState('')\r\n /*const [validResortUniqueName, setValidResortUniqueName] = useState(true)\r\n //const [resortUniqueNameFocus, setResortUniqueNameFocus] = useState(false)\r\n\r\n const [headline, setHeadline] = useState('')\r\n const [validHeadline, setValidHeadline] = useState(true)\r\n const [headlineFocus, setHeadlineFocus] = useState(false)\r\n\r\n const [snowConditionOnVisit, setSnowConditionOnVisit] = useState('')\r\n const [validSnowConditionOnVisit, setValidSnowConditionOnVisit] = useState(false)\r\n const [snowConditionOnVisitFocus, setSnowConditionOnVisitFocus] = useState(false)\r\n\r\n const [reviewText, setReviewText] = useState('')\r\n const [validReviewText, setValidReviewText] = useState(false)\r\n const [reviewTextFocus, setReviewTextFocus] = useState(false)\r\n\r\n const [thingsILiked, setThingsILiked] = useState('')\r\n const [validThingsILiked, setValidThingsILiked] = useState(false)\r\n const [thingsILikedFocus, setThingsILikedFocus] = useState(false)\r\n\r\n const [thingsIDidnotLike, setThingsIDidnotLike] = useState('')\r\n const [validThingsIDidnotLike, setValidThingsIDidnotLike] = useState(false)\r\n const [thingsIDidnotLikeFocus, setThingsIDidnotLikeFocus] = useState(false)\r\n\r\n const [dateVisited, setDateVisited] = useState('')\r\n const [validDateVisited, setValidDateVisited] = useState(true)\r\n const [dateVisitedFocus, setDateVisitedFocus] = useState(false)\r\n\r\n const [success, setSuccess] = useState(false)*/\r\n const [errMsg, setErrMsg] = useState('')\r\n const [formerrors, setFormErrors] = useState({})\r\n\r\n const [values, setValues] = useState({\r\n Headline: \"\",\r\n SnowConditionOnVisit: \"\",\r\n ReviewText: \"\",\r\n ThingsILiked: \"\",\r\n ThingsIDidnotLike: \"\",\r\n DateVisited: \"\"\r\n });\r\n\r\n useEffect(() => {\r\n if (params !== undefined && params.resort_unique !== undefined) {\r\n setResortUniqueNameFromParam(params.resort_unique)\r\n setResortUniqueName(params.resort_unique)\r\n }\r\n }, [params.resort_unique]);\r\n\r\n useEffect(() => {\r\n let passedResort = skiAreaList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === params.resort_unique);\r\n });\r\n\r\n if (passedResort !== undefined && passedResort[0] !== undefined) {\r\n setThisResort(passedResort[0])\r\n }\r\n }, [skiAreaList, params.resort_unique])\r\n\r\n /*useEffect(() => {\r\n headlineRef.current.focus()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setValidResortUniqueName(resortUniqueName !== undefined && resortUniqueName !== '')\r\n }, [resortUniqueName])\r\n\r\n useEffect(() => {\r\n setValidHeadline(headline !== undefined && headline !== '')\r\n }, [headline])\r\n\r\n useEffect(() => {\r\n setValidDateVisited(dateVisited !== undefined && dateVisited !== '')\r\n }, [dateVisited])\r\n\r\n useEffect(() => {\r\n setValidSnowConditionOnVisit(snowConditionOnVisit !== undefined && snowConditionOnVisit !== '')\r\n }, [snowConditionOnVisit])\r\n\r\n useEffect(() => {\r\n setValidReviewText(reviewText !== undefined && reviewText !== '')\r\n }, [reviewText])\r\n\r\n useEffect(() => {\r\n setValidThingsILiked(thingsILiked !== undefined && thingsILiked !== '')\r\n }, [thingsILiked])\r\n\r\n useEffect(() => {\r\n setValidThingsIDidnotLike(thingsIDidnotLike !== undefined && thingsIDidnotLike !== '')\r\n }, [thingsIDidnotLike])\r\n\r\n useEffect(() => {\r\n setErrMsg('')\r\n }, [headline, snowConditionOnVisit, reviewText, thingsILiked, thingsIDidnotLike])\r\n\r\n const handleChange = (value, selectOptionSetter) => {\r\n selectOptionSetter(value)\r\n }*/\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const validate = () => {\r\n let errors = {}\r\n\r\n if (!values.Headline) {\r\n errors.Headline = \"The headline field cannot be blank.\"\r\n }\r\n\r\n if (!values.SnowConditionOnVisit) {\r\n errors.SnowConditionOnVisit = \"The snow condition on visit field cannot be blank.\"\r\n }\r\n\r\n if (!values.ReviewText) {\r\n errors.ReviewText = \"The review text field cannot be blank.\"\r\n }\r\n\r\n if (!values.ThingsILiked) {\r\n errors.ThingsILiked = \"The headline field cannot be blank.\"\r\n }\r\n\r\n if (!values.ThingsIDidnotLike) {\r\n errors.ThingsIDidnotLike = \"The things I liked field cannot be blank.\"\r\n }\r\n\r\n /*if (!values.DateVisited) {\r\n errors.DateVisited = \"The cate of visit field cannot be blank.\"\r\n }*/\r\n\r\n setFormErrors(errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n if (validate(values)) {\r\n try {\r\n var inputData = {\r\n Headline: values.Headline,\r\n SnowConditionOnVisit: values.SnowConditionOnVisit,\r\n ReviewText: values.ReviewText,\r\n ThingsILiked: values.ThingsILiked,\r\n ThingsIDidnotLike: values.ThingsIDidnotLike,\r\n ResortRanking: 0,\r\n UserType: \"User Type\",\r\n ResortUniqueName: resortUniqueName,\r\n DateVisited: values.DateVisited,\r\n Email: user.Email,\r\n Token: user.Token\r\n }\r\n console.log(inputData)\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/sjmember/SubmitReview`,\r\n data: inputData\r\n }).then(reviewSubmissionResult => {\r\n\r\n console.log(reviewSubmissionResult?.data);\r\n\r\n let reviewSubmission = reviewSubmissionResult.data\r\n\r\n if (reviewSubmission !== null) {\r\n console.log(reviewSubmission)\r\n\r\n let path = window.$baseMemberUrl + '/reviews';\r\n navigate(path);\r\n } else {\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No Server Response')\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Write a ski area review | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Write a ski area review | Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Reviews.svg\" alt='submit-review' /></div>\r\n <div>\r\n <h3>Write a new ski area review</h3>\r\n <div className=\"sj-para\">\r\n Please note that all submissions will be reviewed before appearing on the site. We reserve the right to decline content that we feel is inappropriate. Before submitting content to SnowJapan and for full details, <Link to={`${window.$baseAppUrl}/about-members-area`}>please read this</Link>.\r\n </div>\r\n <div className='sj-row'>\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n {resortUniqueNameFromParam === '' &&\r\n <ResortAutocomplete skiAreaList={skiAreaList} onResortSelect={data => {\r\n setResortUniqueName(data)\r\n }} />\r\n }\r\n {(resortUniqueNameFromParam !== '' && thisResort !== undefined) &&\r\n <Form.Group controlId=\"txtResortNameLabel\" className=\"mt-2 mb-4\">\r\n <Form.Label><h5>Ski area:</h5></Form.Label>\r\n <Form.Control name=\"txtResortNameLabel\" type=\"text\" placeholder=\"Caption\" value={thisResort.Name} readOnly=\"true\" />\r\n </Form.Group>\r\n }\r\n <Form.Group controlId=\"txtCaption\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Headline:</h5>\r\n A simple description/summary to display above the review.<br />\r\n Please limit to 100 words.\r\n </Form.Label>\r\n <Form.Control name=\"txtHeadline\" type=\"text\" placeholder=\"Headline\" value={values.Headline} onChange={handleChange} />\r\n {formerrors.Headline && (\r\n <div className=\"text-danger\">{formerrors.Headline}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtDateVisited\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Date of visit:</h5>\r\n Enter a specific date or a more general description of when you visited the ski area.\r\n </Form.Label>\r\n <Form.Control name=\"txtDateVisited\" type=\"text\" placeholder=\"Date of visit\" value={values.DateVisited} onChange={handleChange} />\r\n {formerrors.DateVisited && (\r\n <div className=\"text-danger\">{formerrors.DateVisited}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtSnowConditionOnVisit\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Snow conditions:</h5>\r\n Summarise the snow conditions when you visited the ski area.\r\n </Form.Label>\r\n <Form.Control name=\"txtSnowConditionOnVisit\" as=\"textarea\" rows={3} placeholder=\"Snow conditions\" value={values.SnowConditionOnVisit} onChange={handleChange} />\r\n {formerrors.SnowConditionOnVisit && (\r\n <div className=\"text-danger\">{formerrors.SnowConditionOnVisit}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtReviewText\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Review:</h5>\r\n Write your main review of the ski area here.\r\n </Form.Label>\r\n <Form.Control name=\"txtReviewText\" as=\"textarea\" rows={12} placeholder=\"Review\" value={values.ReviewText} onChange={handleChange} />\r\n {formerrors.ReviewText && (\r\n <div className=\"text-danger\">{formerrors.ReviewText}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtThingsILiked\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Things I liked:</h5>\r\n Summarise what you liked about your visit to the ski area.\r\n </Form.Label>\r\n <Form.Control name=\"txtThingsILiked\" as=\"textarea\" rows={3} placeholder=\"Things I liked\" value={values.ThingsILiked} onChange={handleChange} />\r\n {formerrors.ThingsILiked && (\r\n <div className=\"text-danger\">{formerrors.ThingsILiked}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"txtThingsIDidnotLike\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Things I didn’t like:</h5>\r\n Summarise what you did not like about your visit to the ski area.\r\n </Form.Label>\r\n <Form.Control name=\"txtThingsIDidnotLike\" as=\"textarea\" rows={3} placeholder=\"Things I didn’t like\" value={values.ThingsIDidnotLike} onChange={handleChange} />\r\n {formerrors.ThingsIDidnotLike && (\r\n <div className=\"text-danger\">{formerrors.ThingsIDidnotLike}</div>\r\n )}\r\n </Form.Group>\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Submit review</Button>\r\n </div>\r\n </Row>\r\n </Form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default MemberSubmitReview","import PropTypes from 'prop-types'\r\nimport { Button, Modal, Image } from 'react-bootstrap'\r\nimport { useNavigate, Link } from 'react-router-dom'\r\nimport { useState } from 'react'\r\nimport axios from 'axios'\r\n\r\nconst MemberPhotoDetail = ({ photo, user }) => {\r\n //console.log(photo)\r\n //const [show, setShow] = useState(false)\r\n const [errMsg, setErrMsg] = useState('')\r\n const navigate = useNavigate()\r\n\r\n /*const handleClose = () => {\r\n setShow(false)\r\n }\r\n const showModal = () => {\r\n setShow(true)\r\n }*/\r\n\r\n const handleDeletePhoto = (e) => {\r\n //console.log('agreed to delete')\r\n //console.log(e)\r\n if (e > 0) {\r\n try {\r\n var inputData = {\r\n Id: e,\r\n Caption: \"a\",\r\n ResortUniqueName: \"a\",\r\n Email: user.Email,\r\n Token: user.Token\r\n }\r\n console.log(inputData)\r\n\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/sjmember/DeletePhoto`,\r\n data: inputData\r\n }).then(photoDeleteResult => {\r\n\r\n console.log(photoDeleteResult?.data);\r\n\r\n let photoDelete = photoDeleteResult.data\r\n\r\n if (photoDelete !== null) {\r\n console.log(photoDelete)\r\n\r\n let path = window.$baseMemberUrl;\r\n navigate(path);\r\n } else {\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n }\r\n })\r\n } catch (err) {\r\n if (!err?.response) {\r\n setErrMsg('No Server Response')\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div>\r\n <div className=\"sj-box sj-box-blue sj-round-half left-aligned mt-3\">\r\n <h4>{photo.Caption}</h4>\r\n </div>\r\n {(photo.ResortUniqueName !== undefined && photo.ResortUniqueName !== null) &&\r\n <div className=\"row sj-row-small-margin-padding sj-no-bg\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${photo.PrefectureUniqueName}/${photo.TownUniqueName}/${photo.ResortUniqueName}`}><h4>{photo.ResortName}</h4></Link>\r\n </div>\r\n <div className='sj-large-font'>\r\n <Link to={`${window.$baseSkiAreaUrl}/town/${photo.TownUniqueName}`}>{photo.TownName} {photo.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${photo.PrefectureUniqueName}`}>{photo.PrefectureName}</Link>\r\n </div>\r\n </div>\r\n }\r\n <div className='sj-row-small-margin-padding center-aligned'>\r\n <Image src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`thumb-${photo.Id}`} fluid='true' />\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-2\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-10\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n <div className=\"sj-row-no-margin-padding sj-no-bg\">\r\n <Button variant=\"primary\" onClick={() => {\r\n const confirmBox = window.confirm(\r\n \"Do you really want to delete this photo?\"\r\n )\r\n if (confirmBox === true) {\r\n handleDeletePhoto(photo.Id)\r\n }\r\n }} className='sj-large-font-button sj-red-bg w-100'>{'Delete Photo'}</Button>\r\n </div>\r\n <hr className='mt-5' />\r\n {/*<Modal\r\n show={show}\r\n size=\"lg\"\r\n onHide={handleClose}\r\n backdrop=\"static\"\r\n keyboard={false}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>{photo.Caption}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className='center-aligned'>\r\n <img src={`${window.$baseAppUrl}/photo-galleries/${photo.CreatedByUserName}/${photo.PhotoFileName}`} alt={`full-${photo.Id}`} />\r\n </div>\r\n {(photo.ResortUniqueName !== undefined && photo.ResortUniqueName !== null) &&\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div>\r\n <Link to={`${window.$baseSkiAreaUrl}/${photo.PrefectureUniqueName}/${photo.TownUniqueName}/${photo.ResortUniqueName}`}><h5>{photo.ResortName}</h5></Link>\r\n (<Link to={`${window.$baseSkiAreaUrl}/town/${photo.TownUniqueName}`}>{photo.TownName} {photo.TownTypeStr}</Link>, \r\n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${photo.PrefectureUniqueName}`}>{photo.PrefectureName}</Link>)\r\n </div>\r\n </div>\r\n }\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded by:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedByUserName}\r\n </div>\r\n </div>\r\n <div className=\"row sj-row-small-margin-padding\">\r\n <div className=\"col-lg-3\">\r\n <strong>Uploaded on:</strong>\r\n </div>\r\n <div className=\"col-lg-9\">\r\n {photo.CreatedAtDayTh} {photo.CreatedAtMonthFull} {photo.CreatedAtYear}\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>*/}\r\n </div>\r\n )\r\n};\r\n\r\nMemberPhotoDetail.propTypes = {\r\n photo: PropTypes.object.isRequired\r\n}\r\n\r\nexport default MemberPhotoDetail;","import { useState, useRef, useCallback } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport Loader from '../Common/Loader'\r\nimport { Link } from 'react-router-dom'\r\nimport useSkiAreaPhotos from '../CustomHooks/useSkiAreaPhotos'\r\nimport MemberPhotoDetail from './MemberPhotoDetail'\r\n\r\nconst MemberPhotos = ({ user }) => {\r\n const queryPhoto = 0\r\n /*if (user === null) {\r\n return null\r\n }*/\r\n const userName = user.UserName\r\n const [pageNumberPhoto, setPaegNumberPhoto] = useState(1)\r\n\r\n const {\r\n loadingPhoto,\r\n errorPhoto,\r\n photos,\r\n hasMorePhoto\r\n } = useSkiAreaPhotos(queryPhoto, userName, pageNumberPhoto)\r\n\r\n const observerPhoto = useRef()\r\n const lastPhotoElementRef = useCallback(nodePhoto => {\r\n if (loadingPhoto)\r\n return\r\n if (observerPhoto.current)\r\n observerPhoto.current.disconnect()\r\n observerPhoto.current = new IntersectionObserver(entriesPhoto => {\r\n if (entriesPhoto[0].isIntersecting && hasMorePhoto) {\r\n setPaegNumberPhoto(prevPageNumberPhoto => prevPageNumberPhoto + 1)\r\n }\r\n })\r\n\r\n if (nodePhoto)\r\n observerPhoto.current.observe(nodePhoto)\r\n }, [loadingPhoto, hasMorePhoto])\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>{user.FullName}’s photos | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Member photos | Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Photos.svg\" alt='snowjapan-photo' /></div>\r\n <div>\r\n <h3>My photos</h3>\r\n <div className=\"sj-para\">\r\n Below are the photos you have posted on SnowJapan. Please note that photos need to be manually approved before appearing on the site, so please allow some time after posting new photos.\r\n </div>\r\n {/*<div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>*/}\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/upload-photo`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Upload new ski area photos</Link></h6>\r\n </div>\r\n <div className=\"sj-para\">\r\n <h6 className='mt-1 mb-1'><Link to={`${window.$baseMemberUrl}/submit-review`} className='btn btn-primary sj-large-font-button sj-red-bg sj-50-box'>Write a new ski area review</Link></h6>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='empty-row'>\r\n <div className=\"sj-para\">\r\n <h3>Recent photos</h3>\r\n </div>\r\n {photos.map((photo, index) => {\r\n if (photos.length === index + 1) {\r\n return (\r\n <div ref={lastPhotoElementRef} key={photo.Id}>\r\n <MemberPhotoDetail photo={photo} user={user} />\r\n </div>\r\n )\r\n } else {\r\n return (\r\n <div key={photo.Id}>\r\n <MemberPhotoDetail photo={photo} user={user} />\r\n </div>\r\n )\r\n }\r\n })}\r\n <div>\r\n {loadingPhoto &&\r\n <Loader />\r\n }\r\n </div>\r\n <div>{errorPhoto && 'Error'}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default MemberPhotos","import '../../Uploader.scss'\r\n\r\nconst Uploader = () => {\r\n return (\r\n <div className=\"uploader-container\">\r\n <div className=\"uploader\">\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--dot\"></div>\r\n <div className=\"uploader--text\"></div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Uploader;","import { useState, useEffect } from 'react'\r\nimport { Helmet } from 'react-helmet'\r\nimport { Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport { Form, Button, Row } from 'react-bootstrap'\r\nimport { useNavigate, useParams } from 'react-router-dom'\r\nimport ResortAutocomplete from './ResortAutocomplete'\r\nimport Uploader from '../Common/Uploader'\r\n\r\nconst imageTypeRegex = /image\\/(png|jpg|jpeg)/gm\r\nconst MIN_FILE_SIZE = 50 // .25MB\r\nconst MAX_FILE_SIZE = 5120 // 5MB\r\n\r\nconst MemberUploadPhoto = ({ user, skiAreaList }) => {\r\n\r\n const params = useParams()\r\n const navigate = useNavigate()\r\n\r\n const [imageFiles, setImageFiles] = useState([])\r\n const [images, setImages] = useState([])\r\n\r\n /*const selectPhotoRef = useRef()\r\n const captionRef = useRef()\r\n const errRef = useRef()*/\r\n const [success, setSuccess] = useState(false)\r\n const [errMsg, setErrMsg] = useState('')\r\n const [formerrors, setFormErrors] = useState({})\r\n const [uploadStarted, setUploadStarted] = useState(false)\r\n\r\n const [values, setValues] = useState({\r\n Caption: \"\"\r\n })\r\n\r\n const [resortUniqueNameFromParam, setResortUniqueNameFromParam] = useState('')\r\n const [thisResort, setThisResort] = useState(undefined)\r\n const [resortUniqueName, setResortUniqueName] = useState('')\r\n\r\n //const [selectPhoto, setSelectPhoto] = useState('')\r\n const [validSelectPhoto, setValidSelectPhoto] = useState(true)\r\n //const [selectPhotoFocus, setSelectPhotoFocus] = useState(false)\r\n\r\n //const [caption, setCaption] = useState('')\r\n //const [validCaption, setValidCaption] = useState(true)\r\n //const [captionFocus, setCaptionFocus] = useState(false)\r\n\r\n useEffect(() => {\r\n if (params !== undefined && params.resort_unique !== undefined) {\r\n setResortUniqueNameFromParam(params.resort_unique)\r\n setResortUniqueName(params.resort_unique)\r\n }\r\n }, [params.resort_unique]);\r\n\r\n useEffect(() => {\r\n let passedResort = skiAreaList.filter(function (currentElement) {\r\n return (currentElement.UniqueName === params.resort_unique);\r\n })\r\n\r\n if (passedResort !== undefined && passedResort[0] !== undefined) {\r\n setThisResort(passedResort[0])\r\n }\r\n }, [skiAreaList, params.resort_unique])\r\n\r\n /*useEffect(() => {\r\n captionRef.current.focus()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setValidCaption(caption !== undefined && caption !== '')\r\n }, [caption])\r\n\r\n useEffect(() => {\r\n setErrMsg('')\r\n }, [caption])*/\r\n\r\n useEffect(() => {\r\n const images = [], fileReaders = []\r\n let isCancel = false\r\n if (imageFiles.length) {\r\n imageFiles.forEach((file) => {\r\n const fileReader = new FileReader()\r\n fileReaders.push(fileReader)\r\n fileReader.onload = (e) => {\r\n const { result } = e.target\r\n if (result) {\r\n images.push(result)\r\n }\r\n if (images.length === imageFiles.length && !isCancel) {\r\n setImages(images)\r\n }\r\n }\r\n fileReader.readAsDataURL(file)\r\n })\r\n }\r\n return () => {\r\n isCancel = true;\r\n fileReaders.forEach(fileReader => {\r\n if (fileReader.readyState === 1) {\r\n fileReader.abort()\r\n }\r\n })\r\n }\r\n }, [imageFiles])\r\n\r\n const validate = () => {\r\n\r\n let errors = {}\r\n\r\n if (!values.Caption) {\r\n errors.Caption = \"The caption field cannot be left blank\"\r\n }\r\n\r\n setFormErrors(errors)\r\n\r\n if (Object.keys(errors).length === 0) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const changeHandler = (e) => {\r\n const { files } = e.target\r\n\r\n const validImageFiles = []\r\n let hasErrorWithSelectedFiles = false\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i]\r\n\r\n if (file.type.match(imageTypeRegex)) {\r\n\r\n let fileSizeKiloBytes = file.size / 1024\r\n\r\n if (fileSizeKiloBytes > MAX_FILE_SIZE || fileSizeKiloBytes < MIN_FILE_SIZE) {\r\n hasErrorWithSelectedFiles = true\r\n setValidSelectPhoto(false)\r\n }\r\n else {\r\n validImageFiles.push(file)\r\n }\r\n }\r\n else {\r\n hasErrorWithSelectedFiles = true\r\n setValidSelectPhoto(false)\r\n }\r\n }\r\n\r\n if (validImageFiles.length === files.length) {\r\n setImageFiles(validImageFiles)\r\n return;\r\n }\r\n\r\n if (hasErrorWithSelectedFiles) {\r\n setImages([])\r\n alert(\"The selected image(s) are either not valid type or too large\")\r\n }\r\n };\r\n\r\n const handleChange = (event) => {\r\n setValues((values) => ({\r\n ...values,\r\n [event.target.name.slice(3)]: event.target.value,\r\n }))\r\n }\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (validate(values)) {\r\n try {\r\n setUploadStarted(true)\r\n const formData = new FormData()\r\n formData.append(\"ResortUniqueName\", resortUniqueName);\r\n formData.append(\"Caption\", values.Caption);\r\n formData.append(\"Email\", user.Email);\r\n formData.append(\"Token\", user.Token);\r\n for (let i = 0; i < imageFiles.length; i++) {\r\n formData.append('files', imageFiles[i]);\r\n }\r\n\r\n //console.log(formData)\r\n\r\n axios({\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n \"x-rapidapi-host\": \"file-upload8.p.rapidapi.com\",\r\n \"x-rapidapi-key\": \"your-rapidapi-key-here\",\r\n },\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/sjmember/UploadPhoto`,\r\n data: formData\r\n }).then(photoUploadResult => {\r\n\r\n //console.log(photoUploadResult?.data);\r\n let photoUpload = photoUploadResult.data\r\n\r\n if (photoUpload !== null) {\r\n //console.log(photoUpload)\r\n\r\n let path = window.$baseMemberUrl + '/photos';\r\n navigate(path);\r\n } else {\r\n setUploadStarted(false)\r\n setErrMsg('An error occured. Please contact SnowJapan administrator')\r\n }\r\n })\r\n } catch (err) {\r\n setUploadStarted(false)\r\n //console.log(err)\r\n if (!err?.response) {\r\n setErrMsg('No Server Response')\r\n }\r\n //errRef.current.focus()\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className='empty-row'>\r\n <Helmet>\r\n <title>Upload photo(s) | Member area | SnowJapan</title>\r\n <meta name=\"description\" content=\"Upload photo(s) | Member area | SnowJapan\" />\r\n </Helmet>\r\n <div>\r\n <div className=\"sj-para-image\"><img src=\"https://www.snowjapan.com/UploadedFiles/CMSImages/Icons/SnowJapan-Photos.svg\" alt='upload-photo' /></div>\r\n <div>\r\n <h3>Upload new photo(s)</h3>\r\n <div className=\"sj-para\">\r\n Please note that all submissions will be reviewed before appearing on the site. We reserve the right to decline content that we feel is inappropriate. Before submitting content to SnowJapan and for full details, <Link to={`${window.$baseAppUrl}/about-members-area`}>please read this</Link>.\r\n </div>\r\n <div className='sj-row'>\r\n <Form onSubmit={handleSubmit}>\r\n <Row className=\"mb-3 sj-no-margin\">\r\n {uploadStarted ? (\r\n <>\r\n <Uploader />\r\n </>\r\n ) : (\r\n <div>\r\n {resortUniqueNameFromParam === '' &&\r\n <ResortAutocomplete skiAreaList={skiAreaList} onResortSelect={data => {\r\n setResortUniqueName(data)\r\n }} />\r\n }\r\n {(resortUniqueNameFromParam !== '' && thisResort !== undefined) &&\r\n <Form.Group controlId=\"txtResortNameLabel\" className=\"mt-2 mb-4\">\r\n <Form.Label><h5>Ski area:</h5></Form.Label>\r\n <Form.Control name=\"txtResortNameLabel\" type=\"text\" placeholder=\"Caption\" value={thisResort.Name} readOnly=\"true\" />\r\n </Form.Group>\r\n }\r\n <Form.Group controlId=\"txtCaption\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Caption:</h5>\r\n A simple description to display with the photo.<br />\r\n Please limit to 100 words.\r\n </Form.Label>\r\n <Form.Control name=\"txtCaption\" type=\"text\" placeholder=\"Caption\" value={values.Caption} onChange={handleChange} />\r\n {formerrors.Caption && (\r\n <div className=\"text-danger\">{formerrors.Caption}</div>\r\n )}\r\n </Form.Group>\r\n <Form.Group controlId=\"filePhotos\" className=\"mt-2 mb-4\">\r\n <Form.Label>\r\n <h5>Select photo(s):</h5>\r\n Max. size allowed 5MB.<br />\r\n After selecting image(s), click on Upload photos and wait.\r\n </Form.Label>\r\n <Form.Control name=\"filePhotos\" type=\"file\" placeholder=\"Caption\" accept=\"image/png, image/jpg, image/jpeg\" multiple required onChange={changeHandler} />\r\n {formerrors.Photos && (\r\n <div className=\"text-danger\">{formerrors.Photos}</div>\r\n )}\r\n </Form.Group>\r\n </div>\r\n )\r\n }\r\n {\r\n images.length > 0 ?\r\n <div className=\"row sj-row-no-margin-padding sj-no-bg mb-2\">\r\n {\r\n images.map((image, idx) => {\r\n return <div className=\"col-lg-2 col-md-4 col-sm-6\" key={idx}> <img src={image} alt=\"\" className=\"sj-full-width\" /> </div>\r\n })\r\n }\r\n </div> : null\r\n }\r\n {!uploadStarted &&\r\n <div className='center-aligned'>\r\n <Button type=\"submit\" className='sj-large-font-button sj-red-bg sj-row-100'>Upload Photo(s)</Button>\r\n </div>\r\n }\r\n </Row>\r\n </Form>\r\n\r\n </div>\r\n </div>\r\n </div >\r\n </div >\r\n )\r\n}\r\n\r\nexport default MemberUploadPhoto","import { useNavigate, useParams } from 'react-router-dom'\r\nimport { useState, useEffect, Fragment } from 'react'\r\nimport axios from 'axios'\r\nimport MemberHome from './Home'\r\nimport MemberReviews from './MemberReviews'\r\nimport MemberSubmitReview from './MemberSubmitReview'\r\nimport MemberPhotos from './MemberPhotos'\r\nimport MemberUploadPhoto from './MemberUploadPhoto'\r\nimport { useAuth } from '../CustomHooks/useAuth'\r\n\r\nconst MemberContainer = () => {\r\n\r\n const params = useParams()\r\n const { setAuth, auth, setUser, user } = useAuth()\r\n const navigate = useNavigate()\r\n\r\n if (!sessionStorage.getItem('sessionUser') || sessionStorage.getItem('sessionUser') === null || sessionStorage.getItem('sessionUser') === 'null') {\r\n setAuth(false)\r\n navigate('/login')\r\n console.log(\"b\")\r\n }\r\n\r\n console.log(auth)\r\n\r\n if (auth === null) {\r\n navigate(window.$baseAppUrl)\r\n console.log(\"a\")\r\n navigate('/')\r\n }\r\n const thisSessionUser = JSON.parse(sessionStorage.getItem('sessionUser'))\r\n console.log(thisSessionUser)\r\n\r\n const [skiAreaList, setSkiAreaList] = useState([])\r\n\r\n /*const checkLogin = async () => {\r\n if (auth === null || !auth) {\r\n const thisSessionUser = JSON.parse(sessionStorage.getItem('sessionUser'))\r\n\r\n try {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseSJAPIUrl}/Account/CheckLoginStatus`,\r\n data: {\r\n FullName: thisSessionUser.FullName,\r\n Email: thisSessionUser.Email,\r\n Token: thisSessionUser.Token\r\n }\r\n }).then(loginStatusResult => {\r\n let loggedInUser = loginStatusResult.data\r\n if (loggedInUser.UserName !== null && loggedInUser.UserName !== '') {\r\n sessionStorage.setItem('sessionUser', JSON.stringify(loggedInUser))\r\n setAuth(true)\r\n setUser(loggedInUser)\r\n }\r\n })\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n }\r\n }\r\n\r\n useEffect((thisAuth, thisUser, localSessionUser) => {\r\n\r\n }, [auth, user, thisSessionUser]);*/\r\n\r\n const fetchSkiAreas = async () => {\r\n axios({\r\n method: 'POST',\r\n url: `${window.$baseAPIUrl}/skiarea/home/list`\r\n }).then(dataResortList => {\r\n setSkiAreaList(dataResortList.data)\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n fetchSkiAreas()\r\n /*if (auth && user == null) {\r\n if (thisSessionUser == null) {\r\n checkLogin()\r\n }\r\n else {\r\n setUser(thisSessionUser)\r\n }\r\n }*/\r\n }, []);\r\n\r\n return (\r\n <Fragment>\r\n <>\r\n {\r\n {\r\n undefined: <MemberHome user={thisSessionUser} />,\r\n 'reviews': <MemberReviews user={thisSessionUser} />,\r\n 'submit-review': <MemberSubmitReview user={thisSessionUser} skiAreaList={skiAreaList} />,\r\n 'photos': <MemberPhotos user={thisSessionUser} />,\r\n 'upload-photo': <MemberUploadPhoto user={thisSessionUser} skiAreaList={skiAreaList} />\r\n }[params.type]\r\n }\r\n </>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default MemberContainer","import React from 'react'\nimport { BrowserRouter as Router, Routes, Route } from 'react-router-dom'\nimport { AuthProvider } from './components/CustomHooks/useAuth'\nimport 'bootstrap/dist/css/bootstrap.css'\nimport './App.scss'\n\n//Misc Section\nimport ScrollToTop from './ScrollToTop'\nimport Home from './components/Common/Home'\nimport Login from './components/Common/Login'\nimport Register from './components/Common/Register'\nimport ConfirmEmail from './components/Common/ConfirmEmail'\nimport ForgotPassword from './components/Common/ForgotPassword'\nimport ResetPassword from './components/Common/ResetPassword'\nimport Contact from './components/Common/Contact'\nimport RouteFinder from './components/Common/RouteFinder'\nimport CommonPage from './components/Common/CommonPage'\nimport GeneralSearch from './components/Common/GeneralSearch'\nimport Header from './components/Common/Header'\nimport MainNav from './components/Common/MainNav'\nimport SearchMemberBar from './components/Common/SearchMemberBar'\nimport Footer from './components/Common/Footer'\n\n// Ski Area Section\nimport SkiAreaContainer from './components/SkiArea/SkiAreaContainer'\nimport SkiAreaList from './components/SkiArea/SkiAreaList'\nimport SkiAreaDetailContainer from './components/SkiArea/SkiAreaDetail/SkiAreaDetailContainer'\n\n// Daily Reports Section\nimport DailyReportContainer from './components/DailyReport/DailyReportContainer'\nimport DetailContainer from './components/DailyReport/Detail/DetailContainer'\n\n// Accommodation Section\nimport AccommodationContainer from './components/Accommodation/AccommodationContainer'\nimport AccommodationDetailContainer from './components/Accommodation/AccommodationDetail/AccommodationDetailContainer'\n\n// Listing Section\nimport ListingContainer from './components/Listing/ListingContainer'\n\n// Guide Section\nimport GuideContainer from './components/Guide/GuideContainer'\n\n// Member Section\nimport MemberContainer from './components/Member/MemberContainer'\n\nconst App = () => {\n return (\n <Router>\n <div className='App'>\n\n <ScrollToTop />\n <React.StrictMode>\n <AuthProvider>\n <Header />\n <MainNav />\n <SearchMemberBar />\n <div className='sj-content-holder'>\n <Routes>\n <Route path='/' exact element={<Home />} />\n <Route path='/register' exact element={<Register />} />\n <Route path='/confirm-email' exact element={<ConfirmEmail />} />\n <Route path='/login' exact element={<Login />} />\n <Route path='/forgot-password' exact element={<ForgotPassword />} />\n <Route path='/reset-password' exact element={<ResetPassword />} />\n <Route path='/contact' exact element={<Contact />} />\n <Route path={`${window.$baseRouteFinderUrl}/:resort?`} element={<RouteFinder />} />\n\n <Route path={`${window.$baseSkiAreaUrl}/prefecture/:key`} element={<SkiAreaList />} />\n <Route path={`${window.$baseSkiAreaUrl}/town/:key`} element={<SkiAreaList />} />\n <Route path={`${window.$baseSkiAreaUrl}/area/:key`} element={<SkiAreaList />} />\n <Route path={`${window.$baseSkiAreaUrl}/:prefecture/:town/:resort/:type?`} element={<SkiAreaDetailContainer />} />\n <Route path={`${window.$baseSkiAreaUrl}/:type?`} element={<SkiAreaContainer />} />\n\n <Route path={`${window.$baseDailyReportUrl}`} exact element={<DailyReportContainer />} />\n <Route path={`${window.$baseDailyReportUrl}/calendar`} exact element={<DailyReportContainer />} />\n <Route path={`${window.$baseDailyReportUrl}/official-snow-depth`} exact element={<DailyReportContainer />} />\n {/*<Route path={`${window.$baseDailyReportUrl}/about-daily-reports`} exact component={DailyReportCommonPage} />*/}\n <Route path={`${window.$baseDailyReportUrl}/webcams/:type?`} exact element={<DailyReportContainer />} />\n <Route path={`${window.$baseDailyReportUrl}/:now/:type?/:season?`} element={<DetailContainer />} />\n\n <Route path={`${window.$baseAccommodationUrl}/:prefecture/:town/:hotel/:type?`} element={<AccommodationDetailContainer />} />\n <Route path={`${window.$baseAccommodationUrl}`} element={<AccommodationContainer />} />\n\n <Route path={`${window.$baseListingUrl}/:section_name/:listing_name`} element={<ListingContainer />} />\n <Route path={`${window.$baseListingUrl}/:section_name`} element={<ListingContainer />} />\n <Route path={`${window.$baseListingUrl}/`} element={<ListingContainer />} />\n\n <Route path={`${window.$baseGuideUrl}/`} exact element={<GuideContainer />} />\n <Route path={`${window.$baseGuideUrl}/:section_name/:guide_name?`} element={<GuideContainer />} />\n\n <Route path={`${window.$baseMemberUrl}/:type?/:resort_unique?`} element={<MemberContainer />} />\n\n <Route path='/search/:keyword?' exact element={<GeneralSearch />} />\n\n <Route path='/:type' element={<CommonPage />} />\n </Routes>\n </div>\n <Footer />\n </AuthProvider>\n </React.StrictMode>\n </div>\n </Router >\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import 'bootstrap/dist/css/bootstrap.min.css'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\n// Winter Sports Japan\n//window.$baseAPIUrl = 'https://www.wintersportsjapan.net/rest-api'\n//window.$baseSJAPIUrl = 'https://www.wintersportsjapan.net/api'\n//window.$baseAppUrl = 'https://www.wintersportsjapan.net'\n\n// Snow Japan\nwindow.$baseAPIUrl = 'https://www.snowjapan.com/rest-api'\nwindow.$baseSJAPIUrl = 'https://www.snowjapan.com/api'\nwindow.$baseAppUrl = 'https://www.snowjapan.com'\n\n// Localhost\n//window.$baseAPIUrl = 'http://localhost/rest-api'\n//window.$baseSJAPIUrl = 'http://localhost/api'\n//window.$baseAppUrl = 'http://localhost'\n\nwindow.$baseSkiAreaUrl = '/japan-ski-resorts'\nwindow.$baseDailyReportUrl = '/japan-daily-snow-weather-reports'\nwindow.$baseAccommodationUrl = '/japan-places-to-stay'\nwindow.$baseListingUrl = '/listings'\nwindow.$baseGuideUrl = '/guides'\nwindow.$baseRouteFinderUrl = '/route-finder'\nwindow.$baseMemberUrl = '/members'\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faAngleDoubleDown, faAngleDoubleUp } from '@fortawesome/free-solid-svg-icons'\n\nconst SkiAreaListTable = ({ tableData, sortColumn, sortOrder, headingColumns, dataMapping, title, breakOn = 'medium' }) => {\n\n let tableClass = 'table-container__table';\n\n if (breakOn === 'small') {\n tableClass += ' table-container__table--break-sm';\n } else if (breakOn === 'medium') {\n tableClass += ' table-container__table--break-md';\n } else if (breakOn === 'large') {\n tableClass += ' table-container__table--break-lg';\n }\n\n const data = tableData.map((row, index) => {\n let rowData = [];\n let i = 0;\n\n for (const key in row) {\n\n if (dataMapping[i] === undefined) {\n continue;\n }\n\n var objName = 'row.' + dataMapping[i]\n\n rowData.push({\n key: headingColumns[i],\n val: eval(objName),\n UniqueName: row.UniqueName,\n PrefectureName: row.PrefectureName,\n PrefectureUniqueName: row.PrefectureUniqueName,\n TownName: row.TownName,\n TownUniqueName: row.TownUniqueName,\n TownTypeStr: row.TownTypeStr\n });\n i++;\n }\n\n return <tr key={index}>\n {rowData.map((data, index) => {\n if (index === 0) {\n if (sortColumn === 'Ski area name') {\n return <td key={index} className='sorted-column' data-heading={data.key}>\n <Link to={`${window.$baseSkiAreaUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n (<Link to={`${window.$baseSkiAreaUrl}/town/${data.TownUniqueName}`}>{data.TownName} {data.TownTypeStr}</Link>, \n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${data.PrefectureUniqueName}`}>{data.PrefectureName}</Link>)\n </td>\n } else {\n return <td key={index} data-heading={data.key}>\n <Link to={`${window.$baseSkiAreaUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n (<Link to={`${window.$baseSkiAreaUrl}/town/${data.TownUniqueName}`}>{data.TownName} {data.TownTypeStr}</Link>, \n <Link to={`${window.$baseSkiAreaUrl}/prefecture/${data.PrefectureUniqueName}`}>{data.PrefectureName}</Link>)\n </td>\n }\n }\n else {\n if (data.key === sortColumn) {\n return <td key={index} className='sorted-column' data-heading={data.key}>{data.val}</td>\n } else {\n return <td key={index} data-heading={data.key}>{data.val}</td>\n }\n }\n }\n )}\n </tr>\n });\n\n return (\n <div className=\"table-container\">\n <div className=\"left-aligned\">\n <h4>{title}</h4>\n </div>\n <table className={`ski-area-list ${tableClass}`}>\n <thead>\n <tr>\n {headingColumns.map((col, index) => {\n if (col === sortColumn) {\n if (sortOrder === 'ASC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleDown} /></th>\n } else if (sortOrder === 'DESC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleUp} /></th>\n } else {\n return <th key={index} className='sorted-column-header'>{col}</th>\n }\n } else {\n return <th key={index}>{col}</th>\n }\n })}\n </tr>\n </thead>\n <tbody>\n {data}\n </tbody>\n </table>\n </div>\n );\n}\n\nSkiAreaListTable.propTypes = {\n tableData: PropTypes.arrayOf(PropTypes.object).isRequired,\n headingColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n title: PropTypes.string.isRequired,\n breakOn: PropTypes.oneOf(['small', 'medium', 'large'])\n}\n\nexport default SkiAreaListTable;","/* eslint no-eval: 0 */\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom'\nimport { RenderBreak } from '../../helpers/Helper'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faAngleDoubleDown, faAngleDoubleUp } from '@fortawesome/free-solid-svg-icons'\n\nconst AccommodationListTable = ({ tableData, sortColumn, sortOrder, headingColumns, dataMapping, title, breakOn = 'medium' }) => {\n let tableClass = 'table-container__table';\n\n if (breakOn === 'small') {\n tableClass += ' table-container__table--break-sm';\n } else if (breakOn === 'medium') {\n tableClass += ' table-container__table--break-md';\n } else if (breakOn === 'large') {\n tableClass += ' table-container__table--break-lg';\n }\n\n const data = tableData.map((row, index) => {\n let rowData = [];\n let i = 0;\n\n for (const key in row) {\n //forEach(row){\n\n if (dataMapping[i] === undefined) {\n continue;\n }\n\n var objName = 'row.' + dataMapping[i]\n\n rowData.push({\n key: headingColumns[i],\n val: eval(objName),\n UniqueName: row.UniqueName,\n PrefectureUniqueName: row.PrefectureUniqueName,\n TownUniqueName: row.TownUniqueName,\n TownTypeStr: row.TownTypeStr,\n AreaUniqueName: row.AreaUniqueName,\n TopIntroText: row.TopIntroText,\n ListingImageName: row.ListingImageName\n });\n i++;\n }\n\n return <tr key={index}>\n {rowData.map((data, index) => {\n if (index === 0) {\n return <td key={index}><Link to={`${window.$baseAccommodationUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><img src={`https://www.snowjapan.com/UploadedFiles/ListingImages/${data.ListingImageName}`} alt={`${data.Name}`} /></Link></td>\n } else if (index === 1) {\n if (sortColumn === 'Accommodation name') {\n return <td key={index} className='sorted-column' data-heading={data.key}>\n <Link to={`${window.$baseAccommodationUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.TopIntroText !== null && data.TopIntroText !== undefined && data.TopIntroText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.TopIntroText) }} />\n }\n </td>\n } else {\n return <td key={index} data-heading={data.key}>\n <Link to={`${window.$baseAccommodationUrl}/${data.PrefectureUniqueName}/${data.TownUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.TopIntroText !== null && data.TopIntroText !== undefined && data.TopIntroText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.TopIntroText) }} />\n }\n </td>\n }\n }\n else {\n if (data.key === sortColumn) {\n return <td key={index} className='sorted-column' data-heading={data.key}>\n {data.val}\n </td>\n } else {\n return <td key={index} data-heading={data.key}>\n {data.val}\n </td>\n }\n }\n }\n )}\n </tr>\n });\n\n return (\n <div className=\"table-container\">\n <div className=\"left-aligned\">\n <h4>{title}</h4>\n </div>\n <table className={`sj-list-table sj-accommodation-table ${tableClass}`}>\n <thead>\n <tr>\n {headingColumns.map((col, index) => {\n if (col !== '' && col === sortColumn) {\n if (sortOrder === 'ASC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleDown} /></th>\n } else if (sortOrder === 'DESC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleUp} /></th>\n } else {\n return <th key={index} className='sorted-column-header'>{col}</th>\n }\n } else {\n return <th key={index}>{col}</th>\n }\n })}\n </tr>\n </thead>\n <tbody>\n {data}\n </tbody>\n </table>\n </div>\n );\n}\n\nAccommodationListTable.propTypes = {\n tableData: PropTypes.arrayOf(PropTypes.object).isRequired,\n headingColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n title: PropTypes.string.isRequired,\n breakOn: PropTypes.oneOf(['small', 'medium', 'large'])\n}\n\nexport default AccommodationListTable;","/* eslint no-eval: 0 */\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom'\nimport { RenderBreak } from '../../helpers/Helper'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faAngleDoubleDown, faAngleDoubleUp } from '@fortawesome/free-solid-svg-icons'\n\nconst ListingListTable = ({ tableData, sortColumn, sortOrder, headingColumns, dataMapping, title, breakOn = 'medium' }) => {\n let tableClass = 'table-container__table';\n\n if (breakOn === 'small') {\n tableClass += ' table-container__table--break-sm';\n } else if (breakOn === 'medium') {\n tableClass += ' table-container__table--break-md';\n } else if (breakOn === 'large') {\n tableClass += ' table-container__table--break-lg';\n }\n\n const data = tableData.map((row, index) => {\n let rowData = [];\n let i = 0;\n\n for (const key in row) {\n\n if (dataMapping[i] === undefined) {\n continue;\n }\n\n var objName = 'row.' + dataMapping[i]\n\n rowData.push({\n key: headingColumns[i],\n val: eval(objName),\n UniqueName: row.UniqueName,\n SectionUniqueName: row.SectionUniqueName,\n IntroductionText: row.IntroductionText,\n ImageName: row.ImageName\n });\n i++;\n }\n\n return <tr key={index}>\n {rowData.map((data, index) => {\n if (index === 0) {\n return <td key={index}>\n <Link to={`${window.$baseListingUrl}/${data.SectionUniqueName}/${data.UniqueName}`}><img src={`https://www.snowjapan.com/UploadedFiles/ListingImages/${data.ImageName}`} alt={`${data.Name}`} /></Link>\n </td>\n } else if (index === 1) {\n if (sortColumn === 'Listing name') {\n return <td key={index} className='sorted-column' data-heading={data.key}>\n <Link to={`${window.$baseListingUrl}/${data.SectionUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.IntroductionText !== null && data.IntroductionText !== undefined && data.IntroductionText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.IntroductionText) }} />\n }\n </td>\n } else {\n return <td key={index} data-heading={data.key}>\n <Link to={`${window.$baseListingUrl}/${data.SectionUniqueName}/${data.UniqueName}`}><h5>{data.val}</h5></Link>\n {(data.IntroductionText !== null && data.IntroductionText !== undefined && data.IntroductionText !== '') &&\n <div dangerouslySetInnerHTML={{ __html: RenderBreak(data.IntroductionText) }} />\n }\n </td>\n }\n }\n else {\n if (data.key === sortColumn) {\n return <td key={index} className='sorted-column' data-heading={data.key}>\n {data.val}\n </td>\n } else {\n return <td key={index} data-heading={data.key}>\n {data.val}\n </td>\n }\n }\n }\n )}\n </tr>\n });\n\n return (\n <div className=\"table-container\">\n <table className={`sj-list-table sj-accommodation-table ${tableClass}`}>\n <thead>\n <tr>\n {headingColumns.map((col, index) => {\n if (col !== '' && col === sortColumn) {\n if (sortOrder === 'ASC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleDown} /></th>\n } else if (sortOrder === 'DESC') {\n return <th key={index} className='sorted-column-header'>{col} <FontAwesomeIcon icon={faAngleDoubleUp} /></th>\n } else {\n return <th key={index} className='sorted-column-header'>{col}</th>\n }\n } else {\n return <th key={index}>{col}</th>\n }\n })}\n </tr>\n </thead>\n <tbody>\n {data}\n </tbody>\n </table>\n </div>\n );\n}\n\nListingListTable.propTypes = {\n tableData: PropTypes.arrayOf(PropTypes.object).isRequired,\n headingColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n title: PropTypes.string.isRequired,\n breakOn: PropTypes.oneOf(['small', 'medium', 'large'])\n}\n\nexport default ListingListTable;"],"sourceRoot":""}