{"version":3,"sources":["theme.ts","settings.ts","utils/webViewTools.ts","common/enums/PlatformsEnum.ts","common/components/Spacer.tsx","common/enums/ResponseStatusEnum.ts","apiServices/QueryParameter.ts","common/enums/GamesEnum.ts","utils/urlHelper.ts","hooks/useIsMobile.ts","contexts/notification/actions/NotificationActions.ts","common/components/img/Img.tsx","utils/calculateAspectRatio.ts","contexts/notification/NotificationContextStore.ts","contexts/notification/NotificationReducer.ts","contexts/notification/NotificationContext.tsx","contexts/scroll/ScrollContext.tsx","contexts/identity/IdentityStore.ts","contexts/identity/IdentityReducer.ts","contexts/identity/IdentityContext.tsx","contexts/configuration/ConfigurationReducer.ts","contexts/configuration/ConfigurationStore.ts","contexts/configuration/ConfigurationContext.tsx","pages/landing/components/hero/HeroImageDesktop.tsx","pages/landing/components/hero/HeroDesktop.tsx","contexts/notification/actions/NewNotificationActions.ts","contexts/application/ApplicationActions.ts","contexts/application/ApplicationContextStore.ts","apiServices/application/ApplicationApiService.ts","contexts/application/ApplicationReducer.ts","contexts/application/ApplicationContext.tsx","common/components/buttons/StyledButton.tsx","apiServices/identity/IdentityApiService.ts","contexts/notification/actions/OldNotificationActions.ts","common/components/buttons/RouterLinkButton.tsx","hooks/useTrainTracks/useTrainTracks.ts","common/components/cookieConsent/CookieContext.tsx","apiServices/ApiServiceBase.ts","utils/analyticsHelper.ts","contexts/identity/actions/IdentityActions.ts","hooks/useTrainTracks/TrainTrackContext.ts","common/components/loaders/PageCircularProgress.tsx","common/enums/WebViewEventsEnum.ts","apiServices/notifications/NotificationsApiService.ts","assets/icons/CloseIcon.tsx","contexts/identity/actions/JwtActions.ts","common/components/uiComponents/buttons/Button.tsx","common/components/Loader.tsx","hooks/useResponsivePaddingClass.ts","common/components/ProfileAvatar.tsx","common/components/links/RouterLink.tsx","common/components/uiComponents/dialogs/Portal.tsx","contexts/identity/actions/OnboardingActions.ts","assets/images/logos/racenet/icon_racenetlogofull.svg","assets/images/backgrounds/error.jpg","pages/errorPages/ErrorPage.tsx","pages/errorPages/InternalServerErrorPage.tsx","contexts/configuration/actions/ConfigurationActions.ts","utils/axiosTools.ts","common/components/notifications/NotificationsBadge.tsx","common/components/skeleton/SkeletonElement.tsx","apiServices/identity/responses/IAccessTokenResponse.ts","common/components/notifications/NotificationsActions.tsx","common/components/ResponsiveSpacer.tsx","hooks/useResponsivePadding.ts","hooks/useLocalStorage.ts","contexts/theme/ThemeContext.tsx","assets/icons/profileStats/FriendsIcon.tsx","common/components/links/NewTabLink.tsx","common/components/cookieConsent/ICookiePreferences.ts","common/components/cookieConsent/CookiePreferenceStorageService.ts","containers/navigation/authorised/mobile/MobileBottomNavSpacer.tsx","apiServices/preferences/PreferenceApiService.ts","contexts/identity/actions/PreferencesActions.ts","assets/icons/navBar/GamePadIcon.tsx","contexts/identity/actions/NotificationPreferencesActions.ts","apiServices/cdn/CdnApiService.ts","common/components/MoreActionsMenu.tsx","apiServices/notifications/requests/INotificationsRequest.ts","GlobalCss.tsx","hooks/useClickOutside.ts","contexts/webAcceptance/WebAcceptanceActions.ts","routing/ScrollToTop.tsx","pages/notifications/NotificationsPage.tsx","pages/gamesStats/layout/HubV3MobileBackButton.tsx","containers/navigation/authorised/mobile/MobileNavigation.tsx","containers/layout/StickyFooter.tsx","containers/layout/PageLayout.tsx","containers/navigation/authorised/AuthorisedNavigationBar.tsx","assets/images/appStore/playStore.png","assets/images/appStore/appStore.png","assets/icons/onboarding/ProgressIcon.tsx","common/components/OnboardingDialog/OnboardingDialog.tsx","common/components/StyledSnackbar.tsx","common/components/launchDialogs/dialogs/InstallAppSnackbar.tsx","common/components/DelayRender.tsx","common/components/launchDialogs/LaunchDialogsController.tsx","routing/AuthorisedRoutes.tsx","pages/landing/components/sections/SectionF1LeagueSimple.tsx","pages/landing/components/sections/SectionWrcClubs.tsx","pages/landing/components/sections/SectionTimetrialAnalysis.tsx","pages/landing/components/sections/SectionRacenetAppFooter.tsx","pages/landing/components/footer/Footer.tsx","pages/landing/components/sections/SectionF12023Leagues.tsx","pages/landing/LandingPage.tsx","common/enums/StorageKeyEnum.ts","pages/oauth/pages/OauthCallback.tsx","utils/routeHelper.ts","routing/AnonymousRoutes.tsx","pages/appStoreRedirect/AppStoreRedirect.tsx","routing/Routing.tsx","common/components/OfflineBanner.tsx","App.tsx","serviceWorker.ts","common/components/cookieConsent/banner/CookieBanner.tsx","common/components/cookieConsent/CookieConsent.tsx","hooks/useTrainTracks/calculateBorderRadius.ts","hooks/useTrainTracks/TrainTrackProvider.tsx","index.tsx","common/enums/NotificationTypeEnum.ts","common/components/notifications/cardResolver/cards/NotificationCard.tsx","common/components/notifications/cardResolver/cards/components/DisplayNameLink.tsx","common/components/notifications/cardResolver/cards/FriendRequestCard.tsx","common/components/notifications/cardResolver/cards/FriendRequestAcceptedCard.tsx","common/components/notifications/cardResolver/cards/LeagueNotificationCard.tsx","common/components/notifications/cardResolver/NotificationsCardResolver.tsx","common/components/notifications/NotificationsContent.tsx","common/components/dialogs/Dialog.tsx","apiServices/friends/FriendsApiService.ts","common/components/scroll/CustomScroll.tsx","apiServices/friends/Responses/IFriendsByPlatformResponse.ts","containers/navigation/anonymous/NewLoginSignupButton.tsx","common/components/uiComponents/dialogs/PortalDialog.tsx","hooks/useCardBorderRadiusClass.ts","utils/dateTools.ts","common/components/popover/Popover.tsx","hooks/useBreakpoint.ts","containers/layout/PageSection.tsx","hooks/useIsLandscape.ts","assets/icons/ArrowLeftIconV2.tsx","common/components/buttons/NewTabLinkButton.tsx","common/components/uiComponents/drawers/ProfileDrawerSkeleton.tsx","common/components/uiComponents/drawers/Drawer.tsx","common/components/buttons/DropDownToggleButton.tsx","utils/calculateAspectRatioPaddingTopPercentage.ts","assets/icons/navBar/FeedbackIcon.tsx","containers/navigation/authorised/common/SettingsDropdownContents.tsx","containers/navigation/authorised/desktop/DesktopDropDown.tsx","containers/navigation/authorised/desktop/notifications/NotificationsPopover.tsx","containers/navigation/authorised/desktop/notifications/Notifications.tsx","assets/icons/RacenetEAIcon.tsx","containers/navigation/authorised/desktop/DesktopNavigation.tsx","common/components/popover/popover.module.scss","common/components/loaders/StyledCircularProgress.tsx","common/components/AppSnackbar.tsx","common/components/uiComponents/buttons/NewTabButton.tsx","assets/icons/navBar/ProfileIcon.tsx","common/components/RefreshButton.tsx","common/components/buttons/LoadableButton.tsx","assets/icons/redbull/TrophyIcon.tsx","pages/landing/components/sections/SectionRacenetApp.tsx","common/components/HideableCard.tsx","assets/icons/FriendIconNoCircle.tsx","utils/loadTrustArcScript.ts","assets/icons/ExclamationIcon.tsx","pages/gamesStats/WRC2023/components/rallyTV/icons/TickIcon.tsx","contexts/webAcceptance/WebAcceptanceStore.tsx","contexts/webAcceptance/WebAcceptanceContext.tsx","pages/landing/landing.module.scss","common/polyfills/DragDropTouch.js"],"names":["fonts","primary","secondary","fontTypes","bold","fontFamily","fontWeight","book","regular","mediumItalic","fontStyle","layout","sidebarWidth","defaultPageSectionMaxWidth","hubV3MaxWidth","scrollbarWidth","toolBarHeight","mobileTopInset","getDesktopToolbarSpacing","theme","horizontal","spacing","vertical","height","paCar1Colour","paCar2Colour","paScrubberDefaultColour","paScrubberDefaultColourHover","f1ConstructorColors","redBull","haas","ferrari","mcLaren","mercedes","astonMartin","alpine","sauber","alphaTauri","williams","stats_orange","lightWhite","lightGrey","baseTheme","responsiveFontSizes","createTheme","palette","common","white","black","stats","purple_light","mint","red","aqua","pink","variants","offWhite","tableHeaderColour","purple","visualiserBackground","green","grey","transparentColour","EAOrange","EALightGray","EACharGray","EADisabled","EALightPurple","EALilac","EABlue","EALightBlue","accessCodeBox","twitterBlue","facebookBlue","whatsappGreen","discordBlue","yellow","errorRed","sidebar","backgroundColor","color","logoColor","hoverState","navSelected","background","backgroundSize","cookieBanner","border","mobileHeader","selectedTabBackground","selectedTabColor","tabColor","styles","defaultHoverOpacity","hoverEaseInOut","defaultBoxShadow","fade","roundedBodyBoxShadow","borderRadiusXxs","borderRadiusXs","borderRadiusSm","borderRadiusMd","borderRadiusLg","skeleton","animation","headerOverlay","opacity","backgroundImage","borderBottomColor","boxShadowColour","cssImportant","typography","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","p","button","textTransform","caption","overline","darkTheme","main","dark","light","contrastText","info","error","default","paper","text","disabled","dropdownBorder","borderBottom","leaderboardBorderBottom","transparentBg","transparentButton","popoverBackground","blue","orange","overrides","MuiListItemIcon","root","MuiToolbar","minHeight","lightTheme","richBlack","periwinkle","coral","coralHover","blueHover","EADisplayFont","EATextFont","buttonStyles","fontSize","letterSpacing","margin","cursor","position","display","alignItems","justifyContent","transition","lineHeight","styleGuide","richGrey","whiteHover","blueSelected","inputGrey","textDark","inputBlack","darkerBlack","transparent","disabledBg","disabledText","gold","silver","bronze","lightGreen","variant","greenBg","yellowBg","titleXL","title","heading","subHeading","heading3","copy","copyText","input","breakpoints","xs","sm","md","lg","xl","borderRadius","minWidth","padding","jumbo","mobile","width","hover","inactive","outlinedPrimary","outlinedSecondary","outlinedBlue","segmented","pill","dialogSelector","boxShadow","link","transitions","value","mobileAppUserAgent","tabletAppUserAgent","MAX_SEARCH_FRIENDS_CHARACTERS","DEBOUNCE_SEARCH_MS","origin","document","location","settings","basePath","getElementsByTagName","getAttribute","e","getBasePath","appUrl","apiUrl","cachingDuration","gameHubUrls","dirtRallyLeaguesUrl","websiteUrl","trimEndSlash","dirtRally2ClubsUrl","routingUrls","landing","landingWRC","landingF12023","appStoreRedirect","notificationCenter","home","profile","activityFeed","friends","gamesCoach","preferences","newsFeed","loggedOut","oauthCallback","games","releaseNotes","faq","dirtRally","community","events","telemetry","gameInfo","dirtRally2","performanceAnalysis","dirt5","playgrounds","f1_2021","news","photos","previousEvents","currentEvent","leaderboards","leagues","leaguesSearch","league","leaguesEvents","yourLeagues","leaguesDiscover","f1_2022","f1_2023","leaguesPreferences","leaguesAdmin","leagueHelp","redbull","f1_2024","fanzone","fanzonesVote","timeTrial","f1_2025","grid21","wrc2023","clubs","club","clubMembership","friendsClubs","playerStats","playerStatsCompare","playerStatsCareer","playerStatsSolo","playerStatsMultiplayer","playerStatsChampionship","playerStatsTimetrial","playerStatsMoments","performanceAnalysisClubsMobile","errorPages","apiUrls","getApplication","getAntiforgery","getIdentity","getMobileIdentity","getGames","gameLibraryAnnouncement","getStats","postPublicInfo","getProfile","getSocialFeed","getNewsFeed","getReleaseNotes","getFaq","getFriends","getProfileFriends","getFriendSearch","postFriendRequest","ssid","putBlockFriend","friendSsid","deleteCancelInviteFriend","putUnblockFriend","putAcceptFriend","putDeclineFriend","deleteRemoveFriend","deleteFriend","bulkRequest","friendsRecommendations","friendsByPlatform","checkFriends","identity","getSecuredIdentity","getAccessToken","refreshTokens","logout","getWebAcceptanceText","postWebAcceptance","acceptanceId","postOnboarding","postNotificationPreferences","getLmitedToken","getPreferences","getProfilePictures","getCoverPhotosPictures","getPlatforms","postProfilePicture","getProfilePicture","postCoverPhoto","reporting","reportLeagueName","reportWrc2023ClubName","reportLeagueDescription","reportWrc2023ClubDescription","reportPlayerName","getPlayerStats","getPlayerTrackResults","getPlayerActivity","getPlayer","getPlayerRacedTrackLocationsWithDisciplines","getVehicleClasses","getFriendsWithPlatforms","getCommunityStats","getfriendLeaderboard","getEvents","getEventLeaderboard","getRecentActivity","getTracks","getRacedTracks","getRacedVehicleClasses","getTrackResults","getFriendsLeaderboard","getPlaygrounds","getPlayground","playgroundId","postPinPlayground","postUnpinPlayground","getPlaygroundTags","getRacenetRecommendedPlaygrounds","getSimilarPlaygrounds","getGateCrasherRecommendedPlaygrounds","getPlaygroundLeaderboard","getPlaygroundAroundPlayerLeaderboard","getPlaygroundCreativeIdeas","getPlayerPinnedPlaygrounds","getPlayerGarageStats","getPlayerRacedTracks","getCommunityChallenges","getCombinedFriendsLeaderboard","getCommunityLeaderboard","F12021","getFriendsWithPlatform","getValues","getLeaderboard","getLeaderboardSummary","getEventLeaderboards","getPerformanceAnalysisPlayer","getPerformanceAnalysisFriends","getPerformanceAnalysisSpline","getPerformanceAnalysisGhost","getPhotosOfWeek","getNews","F12022","getLeaderboardVersion","F12023","getAnnouncements","F12023Redbull","getRedbullEventWinnersOfTheWeek","weekId","getRedbullEventWeeks","getRedbullEventLeaderboard","getRedbullEventLeaderboardPlayerEntry","postSignUpForRedbullEvent","getIsUserSignedUp","F12023ProChallenges","getProChallenges","getProChallengesGhostData","id","F12024","getFanzones","getFanzonesVotes","voteId","F12024Redbull","F12024ProChallenges","F12025","F12025ProChallenges","F12021InGameLeagues","getMemberships","getRecommendedLeagues","searchLeagues","getLeague","getSeasonResults","getFriendsLeagues","getBeginnerLeagues","getIntermediateLeagues","getExpertLeagues","getBeginnerLeaguesDiscover","getIntermediateLeaguesDiscover","getExpertLeaguesDiscover","F12022InGameLeagues","proLeagues","createLeague","leagueId","createSeason","getTieringTracks","getTieringTimes","getUserPriorities","editUserPriorities","getAvailableDrivers","getCanUserVote","addUpvote","addDownvote","editLeagueSettings","editLeagueSeasonSettings","joinLeague","setTiers","getTiersCount","seasonId","validateLeagueName","validateLeagueDescription","editWeekendStructure","getCurrentSeasonPastEvents","getCurrentSeasonUpcomingEvents","assistsProfile","assistsProfileById","seasonEnroll","joinLeagueAndEnrollInSeason","getAssistsProfileByLevel","calculateAssistsProfile","getLeagueMembers","editMemberRole","editMemberPlatform","banMember","unbanMember","getTieringResults","warnMember","getSeasonStandings","getSeasonConstructorStandings","getResults","eventId","getQualifyingResults","editMemberTier","userId","swapMemberTiers","getSeasons","getSeasonEvents","rescheduleAvailable","rescheduleEvent","applyPenalty","leaderboardEntryId","editResult","leaderboardId","removeMember","canSeasonBeCreated","closeLeague","closeCurrentSeason","exportResults","exportQualifyingResults","exportStandngs","exportConstructorStandings","addSeasonEvent","deleteSeasonEvent","leaveLeague","updateEvent","getRecommendedAllLeagues","getUserPlatform","getUserAvailability","editUserAvailability","deleteLeague","editBannerImage","editSocialLinks","deleteMember","memberId","getTakenTeams","editTeams","getPlayerRacedClasses","getWeather","wrc2023Clubs","getClub","clubId","getClubByCode","accessCode","getSearchClubMembers","getClubMembership","getOfficialClubs","getPartneredClubs","getChampionship","championshipId","getSearchClubs","postClub","getClubChampionshipPointsLeaderboard","getClubChampionshipEventPointsLeaderboard","getClubChampionshipTimetrialLeaderboard","postClubReaction","postTransferClubOwnership","postLeaveClub","postCloseClub","getFriendsClubs","postJoinClubByAccessCode","postJoinClubById","getClubImages","postBanClubMember","postUnbanClubMember","postkickClubMember","postPromoteClubMemberToAdmin","postDemoteClubMemberToMember","postValidateClubName","postValidateClubDescription","getExportStageLeaderboard","getExportEventLeaderboard","getExportChampionshipLeaderboard","redeemCode","eventID","getGhost","getTimetrialStageInfo","getTimetrialLeaderboard","route","vehicleClass","surfaceCondition","getFriendsTimetrialLeaderboard","putActivityFeedReaction","activityId","getActivityFeed","deleteActivityFeed","getNotificationFeed","getNotifications","externalSiteUrls","codemasters","termsAndConditions","privacyPolicy","socials","facebook","twitter","shareUrls","whatsapp","discord","terms","youtube","racenetAccess","icons","raceNetIcon","images","defaultCover","defaultAvatar","EAPaths","index","linkedPlatforms","dirtRallyCdnPath","dirt5CdnPath","dirtRally2CdnPath","grid21CdnPath","F12021CdnPath","F12022CdnPath","F12023CdnPath","WRC2023CdnPath","F12024CdnPath","F12025CdnPath","cdnPaths","vehicles","splines","tracks","locations","nationalities","eventTypes","vehicleClasses","hub","liveries","flags","assists","backgrounds","leagueAttendance","leagueResultsTile","leagueTile","leagueTileFlag","locationCovers","ranks","safety","trophies","eventLocationsHub","leagueCoverPhotos","leagueCoverPhotosMobile","smallCovers","featuredLaps","proChallenges","proChallengesMobile","proChallengesAvatars","onboarding","chapters","routes","eventPanelLandscape","eventHubPanel","classBadges","categoryBadges","disciplines","eventLocations","clubCoverPhotos","timetrialLocations","hubImages","statsLocationsDesktop","statsLocationsMobile","statsEventLocationsLogo","statsIcons","rallyTVConfig","driverNumbers","constructorLogos","fanzones","fanzoneCoverConstructorLarge","fanzoneCoverDriverLarge","fanzoneCoverConstructorSmall","fanzoneCoverDriverSmall","fanzoneNavConstructorMobile","fanzoneNavDriverMobile","fanzoneCoverConstructorMobile","fanzoneCoverDriverMobile","fanzoneBackgroundConstructorDesktop","fanzoneBackgroundDriverDesktop","fanzonesOnboarding","fanzoneVoteDriver","fanzoneVoteConstructor","fanzoneVoteEsports","fanzoneVoteEsportsConstructor","activityGamePackshots","gamePackshots","gameMiniHeroes","gameSmallCovers","nationalities_flags","qrCodes","gamesLibrary","gameSettings","gameId","GamesEnum","DirtRally","activityFeedEnabled","DirtRally2","Dirt4","Dirt5","Grid","Grid2021","F12020","WRC2023","Dirt5SupportedPlatforms","Platforms","Steam","MicrosoftLive","PlaystationNetwork","Stadia","DirtRallySupportedPlatforms","Oculus","DirtRally2SupportedPlatforms","WindowsStore","F12021SupportedPlatforms","F12022SupportedPlatforms","EAPlay","F12023SupportedPlatforms","F12024SupportedPlatforms","F12025SupportedPlatforms","GRID21SupportedPlatforms","WRC2023SupportedPlatforms","PC","PlatformNames","None","ShortPlatformNames","analyticsIds","gameHubVideo","identitySsid","TabTitle","RaceNet","Hub","Stats","Info","Friends","Community","PerformanceAnalysis","Events","News","NotFound","Profile","GameLib","Settings","ReleaseNotes","Playgrounds","PlaygroundPage","Timetrial","Leagues","League","LeagueHelp","LeaguesSearch","Photos","Faq","Clubs","Club","ClubMembers","CLubMembership","FriendsClubs","F123RedbullPage","F124RedbullPage","Fanzone","proLeaguesConfig","f1PlayerUserId","MAX_SEASON_LENGTH","F123_PRO_LEAGUES_VERSION","F124_PRO_LEAGUES_VERSION","F125_PRO_LEAGUES_VERSION","F123_COVER_PHOTOS_NUMBER","F124_COVER_PHOTOS_NUMBER","F125_COVER_PHOTOS_NUMBER","ONDEMAND_MAX_MEMBER_COUNT","SCHEDULED_MAX_MEMBER_COUNT","maxAiLevel","F123_REPORTING_YEAR","F124_REPORTING_YEAR","F125_REPORTING_YEAR","legalMessage","isRaceNetMobileApp","window","navigator","userAgent","isRaceNetTabletApp","webViewPostMessage","message","ReactNativeWebView","postMessage","console","log","webViewRouteToNative","routeInApp","params","WebViewEnum","NativeRoute","Spacer","props","useTheme","size","disableTheme","style","rest","dimension","flex","ResponseStatusEnum","QueryParameter","name","buildParamString","getParamString","trim","length","toString","this","constructQueryParameterString","builtParams","forEach","param","builtParam","push","join","url","lastIndexOf","substring","getQueryParams","search","replace","JSON","parse","decodeURI","escapeUrl","useIsMobile","useMediaQuery","down","isMobile","isTablet","NotificationTypes","getNotificationsIds","notifications","notificationIds","notification","notificationID","getNotificiationIds","dispatchFetchAllNotifications","dispatch","oldNotifications","newNotifications","newNextPageCursor","oldNextPageCursor","a","Promise","all","dispatchFetchOldNotifications","dispatchFetchNewNotifications","dispatchSetSkip","notificationId","isRead","filteredOldNotifications","map","n","skip","dispatchSetOldNotifications","filteredNewNotifications","dispatchSetNewNotifications","dispatchAddReceivedFriendRequestsSsid","receivedFriendRequestSsids","type","AddReceivedFriendRequestSsid","payload","dispatchAddReceivedFriendRequestSsid","dispatchAddActedFriendRequestsSsid","actedFriendRequestSsids","AddActedFriendRequestSsid","dispatchAddActedFriendRequestSsid","dispatchClearAllNotifications","removeNotifications","dispatchSetNewNotificationsCount","dispatchSetIsNotificationsLastPage","dispatchSetOldNotificationsIsLastPage","dispatchMarkNewNotificationsAsRead","filteredNotifications","updatedOldNotifications","newNotificationIds","markAsRead","dispatchRemoveNotification","filter","dispatchHandleTray","HandleTray","notificationReducer","state","action","openTray","Img","src","placeholder","alt","srcSet","sizes","loading","imageProps","loadingOpacity","hoverable","progressiveImageDelay","disableLazyLoad","lazyLoadOffset","className","children","objectFit","objectPosition","classes","makeStyles","properties","hoverableImageHoverStateStyles","top","zoomPercentageAmount","left","createStyles","overflow","absoluteFull","imageContainer","property","create","hoverableImage","useStyles","imageStyle","imageClassName","imagePropsRest","aspectRatio","calculateAspectRatio","paddingTopPercentage","calculateAspectRatioPaddingTopPercentage","placeholderComponent","Skeleton","paddingTop","loadingStyles","_loading","opacityImageTransition","duration","easing","easeInOut","imageContent","delay","srcSetData","_src","clsx","offset","once","defaultNotificationContext","newNotificationStore","isLastPage","count","refreshable","oldNotificationStore","notificationStore","reducer","newNotificationReducer","oldNotificationReducer","NotificationContext","createContext","NotificationContextProvider","useReducer","config","useConfig","identityContext","useIdentityContext","latestNotificationCount","useRef","current","useEffect","connection","HubConnectionBuilder","withUrl","notificationHubUrl","accessTokenFactory","jwtTokens","tokens","accessToken","withAutomaticReconnect","build","start","then","on","dispatchSetNewNotificationsRefreshable","catch","stop","Provider","useNotificationContext","useContext","ScrollItems","ScrollContext","disableScroll","handleDisableScroll","handleEnableScroll","handleInitialLoad","scrollItems","ScrollContextProvider","useLocation","useState","setDisableScroll","setScrollItems","initialLoad","setInitialLoad","useLayoutEffect","isExternalMouse","useMemo","scrollDiv","createElement","body","appendChild","offsetWidth","clientWidth","removeChild","bodyScrollable","scrollHeight","innerHeight","setBodyScrollable","resizeObserver","ResizeObserver","observe","unobserve","useBodyScrollable","settingsDropdown","getElementById","touchAction","includes","Popover","isMacOs","paddingRight","setTimeout","isIOS","item","prev","load","useScrollContext","defaultIdentity","isAuthenticated","displayName","isNewProfile","isTermsAccepted","hasFetched","countryCode","userPreferences","coverPhotoUrl","privacyLevelId","profileImageUrl","providers","preferencesValues","coverPhotos","profileImages","refreshToken","completedOnboardings","pushNotificationPreferences","f123","friendRequests","identityReducer","preferencesReducer","jwtTokensReducer","identityCompletedOnboardingReducer","notificationsPreferencesReducer","IdentityContext","IdentityContextProvider","Pending","responseStatus","setResponseStatus","handleRNmessage","useCookieContext","event","data","stringify","axios","defaults","headers","authorization","dispatchFetchIdentity","Ok","Error","addEventListener","authRequest","clientId","jwtConfig","grantType","refresh_grant_type","redirectUri","authCode","codeVerifier","isAuthorized","response","removeEventListener","status","Loader","InternalServerErrorPage","Forbidden","ErrorPage","analytics","setUserId","getContent","store","configurationReducer","defaultConfigurationStore","authUrls","login","loginJwt","response_type","grant_type","logoutRedirectUri","googleOptimize","experiments","landingPage","undefined","DR2CarOfWeekVideo","videoId","features","redbullContent","logo","coverMobile","coverDesktop","description","steps","prizes","termsConditionsUrl","footer","knockoutDates","wheel","controller","finalDates","redbullLeaderboardVersion","wrc2023Esports","linkText","termsLink","ConfigurationContext","ConfigurationContextProvider","dispatchFetchConfiguration","configJson","baseURL","withCredentials","useConfigDispatch","HeroImageDesktop","laptopImg","mobileImg","right","marginBottom","bottom","SET_SELECTED_MENU_EVENT","SCROLL_OFFSET","HeroDesktop","forwardRef","ref","cdnPath","game","nav","iOsUrl","playStoreUrl","appDescription","selected","setSelected","heroImage","setSelectedMenu","detail","sendSelectedMenu","scrollY","offsetTop","clientHeight","flexDirection","gap","NewLoginSignupButton","overflowX","maxWidth","Typography","textAlign","stickyStyle","zIndex","i","onClick","label","justifySelf","SectionRacenetApp","playStore","NewNotificationTypes","FetchNewNotifications","take","NotificationFilter","UnRead","filteredArr","uniqueIds","Set","has","add","sortedByDateArray","sort","b","Date","datePosted","valueOf","dispatchSetNextPageCursor","nextPageCursor","loadMore","SetNewNotifications","SetNewNotificationsCount","SetNewNotificationsRefreshable","SetNewNotificationsIsLastPage","SetNextPageCursor","SetNewNotificationsLoading","ApplicationTypes","defaultApplicationContext","applicationStore","hasFetchedData","minSearchFriendCharacters","youtubeFeedVideoId","surveyUrl","gameStatsSurveyUrl","accountWeb","registerWeb","platformsWeb","cdnUrl","supportedGames","registrationOpen","registrationLimit","racenetLegacyUrl","version","major","minor","patch","iosUrl","get","resolveSupportedGames","g","gameSetting","find","f","dispatchFetchApplication","FetchApplication","FetchApplicationCompleted","applicationReducer","ApplicationContext","ApplicationContextProvider","configurationDispatch","dispatchFetchFeatures","interceptors","use","isCancel","reject","setAxios","useApplicationContext","getButtonBorder","colour","useStyledButtonStyles","options","highlighted","textCase","disableDefaultWidth","primaryWithBorder","secondaryLight","transparentLight","transparentInfo","transparentDark","infoPrimary","infoLight","infoLightTransparent","infoSecondary","whitePrimary","whiteSecondary","textDecoration","infoTransparent","paCompare","linkInfo","EAAccount","getButtonStyles","primaryTheme","primaryWithBorderTheme","secondaryTheme","secondaryLightTheme","transparentTheme","transparentLightTheme","transparentInfoTheme","transparentDarkTheme","infoPrimaryTheme","infoLightTheme","infoLightTransparentTheme","infoSecondaryTheme","whitePrimaryTheme","whiteSecondaryTheme","linkTheme","infoTransparentTheme","paCompareTheme","linkInfoTheme","eaAccountTheme","getMinWidth","standard","whiteSpace","sizeSmall","sizeLarge","StyledButton","fetchSecureIdentity","isBetaUser","fetchAccessToken","request","post","refreshAccessToken","defaultTokenResponse","logoutUser","fetchWebAcceptanceText","validateStatus","NoContent","onboardingTypeId","queryParams","queryParamString","fetchLimitedToken","OldNotificationTypes","FetchOldNotifications","dispatchSetOldNotificationsLoading","Read","concat","SetOldNotifications","typye","SetOldNotificationsIsLastPage","SetOldNotificationsLoading","SetOldNotificationsNextPageCursor","RouterLinkButton","to","component","RouterLink","useTrainTracks","TrainTrackContext","defaultCookieContext","cookieBannerIsOpen","onCloseOverlay","savePreferences","CookieContext","CookieContextProvider","onPreferencesUpdate","localStoragePreferences","getCookiePreferences","setPreferences","setCookieBannerIsOpen","cookieStore","_preferences","validateSsid","validateTrackId","trackId","postAnalyticsEvent","eventName","messageData","dataLayer","custom_event_value","IdentityTypes","FetchIdentity","dispatchSetIdentityPreferences","dispatchSetCompletedOnboarding","dispatchSetNotificationPreferences","FetchIdentityCompleted","pageCircularProgress","PageCircularProgress","circularProgressProps","colorPrimary","delete","CloseIcon","xmlns","x","y","viewBox","points","JwtTypes","dispatchFetchTokens","FetchTokens","FetchTokensCompleted","access_token","refresh_token","dispatchRefreshTokens","RefreshTokens","RefreshTokensCompleted","Button","customStyles","endIcon","startIcon","mode","toggled","setHightlighted","iconStyles","transform","getStyles","onMouseEnter","onMouseLeave","SizeEnum","setBacgroundColor","noBackground","container","contained","loader","medium","paddingSize","responsivePadding","useResponsivePaddingClass","layer","trainTracks","ProfileAvatar","borderColor","imageSrc","customVariant","clickable","history","useHistory","underlineNone","underlineHover","underlineAlways","underline","Portal","wrapperId","wrapperElement","setWrapperElement","element","systemCreated","setAttribute","createWrapperAndAppendToBody","parentNode","createPortal","CompletedOnboardingTypes","dispatchAddCompletedOnboarding","onboardingType","AddOnboarding","onboardingTypes","SetOnboarding","_g","_path","_excluded","_extends","Object","assign","target","arguments","source","key","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgIconRacenetlogofull","_ref","svgRef","titleId","xmlnsXlink","enableBackground","xmlSpace","fill","d","ForwardRef","content","header","row","backgroundPosition","paddingClass","nativeBackButton","GoBack","align","gutterBottom","ConfigurationTypes","FetchConfiguration","FetchConfigurationCompleted","configPath","getFeaturesConfig","FetchFeaturesCompleted","FetchFeatures","setTokenAndUnauthorizedInterceptorIntoAxiosDefaults","refreshRequest","Unauthorized","href","reason","authorized","tokenResponse","badge","NotificationsBadge","overrideClasses","notificationContext","badgeContent","max","SkeletonElement","skeletonType","box","circle","skeletonStyles","expires_in","token_type","id_token","NotificationsActions","refreshing","actions","iconButtonProps","ResponsiveSpacer","useResponsivePadding","useLocalStorage","initialValue","localStorage","getItem","storedValue","setStoredValue","valueToStore","Function","setItem","CustomThemeContext","darkMode","setDarkMode","topInset","setTopInset","appVersion","setAppVersion","CustomThemeProvider","setInset","setVersion","ThemeProvider","useNativeAppProps","FriendsIcon","NewTabLink","rel","PreferencesValues","bottomNavSpacerCollapsed","bottomNavSpacerExpanded","MobileBottomNavSpacer","deviceHeight","addSpacing","setAddSpacing","isInStandaloneMode","matchMedia","matches","standalone","allScreenDevice","al","fetchCoverPhotos","saveCoverPhoto","fetchProviders","fetchProfilePictureForUser","PreferencesTypes","handleSetCoverPhoto","coverPhoto","dispatchSaveIdentityCoverPhoto","SaveIdentityCoverPhoto","SaveIdentityCoverPhotoCompleted","profilePicture","FetchIdentityPreferencesCompleted","dispatchFetchCoverPhotos","FetchCoverPhotos","result","FetchCoverPhotosCompleted","dispatchFetchProviders","FetchProviders","FetchProvidersCompleted","SaveIdentityProfilePicture","FetchIdentityPreferences","FetchProfilePictures","LinkIdentityProvider","SaveIdentityProfilePictureCompleted","LinkIdentityProviderCompleted","FetchProfilePicturesCompleted","GamePadIcon","NotificationPreferencesTypes","SetPreferences","instance","getLandingCdnConfig","cdnBaseUrl","filePath","getRallyTVConfig","MoreActionsMenu","React","anchorEl","setAnchorEl","handleClose","currentTarget","keepMounted","open","Boolean","onClose","dense","GlobalCss","customScrollbar","scrollBarColor","scrollBarTrackColor","scrollbarColor","useClickOutside","handler","listener","contains","WebAcceptanceType","dispatchFetchWebAcceptanceText","FetchAcceptanceText","dispatchSetWebAcceptance","hasAccepted","SetWebAcceptance","dipatchPostWebAcceptance","SubmitWebAcceptance","webAcceptanceReducer","acceptanceText","hasAcceptedTerms","withRouter","pathname","scroll","behavior","popoverPaper","maxHeight","closeIcon","NotificationsPage","isOpen","setIsOpen","anchorOrigin","transformOrigin","onExited","PageSection","IconButton","NotificationsContent","disableActions","HubV3MobileBackButton","pointerEvents","icon","RegExp","test","goBack","ArrowLeftIconV2","dropdownLabelZindex","appBar","iconSize","textOverflow","topToolbar","bottomToolbar","iconButton","bottomNav","buttonContainer","bottomItem","bottmItemSelected","popover","versioning","MobileNavigation","applicationContext","userAvatar","navbarRef","setDropdownIsOpen","dropdownIsOpen","buttonVariant","feedbackUrl","dropdownContent","NewTabLinkButton","res","openNotification","setOpenNotification","mobileNavigationItems","matchExactPath","FriendIconNoCircle","drawer","Toolbar","disableGutters","prevState","marginTop","Drawer","anchor","setOpen","stickyFooterRoot","StickyFooter","childContainer","PageLayout","AuthorisedNavigationBar","navItemIconFontSize","navigationItems","ProfileIcon","paddingBottom","DesktopNavigation","items","SvgIcon","currentOnboarding","cookieContext","o","useBreakpoint","contentContainer","list","listStyle","listItem","qr","qrContainer","mockImg","swoosh","cdnPathQrCodes","iOSUrl","openState","TrophyIcon","ProgressIcon","appStore","StyledSnackbar","Snackbar","hide","show","snackbar","contentLink","openApp","InstallAppSnackbar","timeOpen","isAppInstalled","setIsAppInstalled","installAppMessage","openNativeApp","installedApp","getInstalledRelatedApps","apps","nativeApp","app","scrollDirection","setScrollDirection","lastScrollY","pageYOffset","updateScrollDirection","direction","clientInformation","DelayRender","isVisible","setIsVisible","timeout","clearTimeout","LaunchDialogsController","storageId","showInstallAppSnackbar","setShowInstallAppSnackbar","isLandscape","useIsLandscape","doNotShowInstallAppBanner","setLocalStorage","sessionStorage","setSessionStorage","isMobileSafari","showAgain","Games","lazy","LoggedInNotFoundPage","ProfileRoutes","Preferences","DRRoutes","DR2Routes","D5Routes","GRID21Routes","F121Routes","F122Routes","F123Routes","F124Routes","F125Routes","WRC2023Routes","UnderConstruction","AuthorisedRoutes","showInstallAppBanner","gameStatsRoutes","isRacenetEnabled","gameTitle","Helmet","titleBase","path","OnboardingDialog","fallback","exact","from","render","SectionF1LeagueSimple","dispatchEvent","CustomEvent","bubbles","gridTemplateColumns","backgroundPositionX","SectionWrcClubs","image","marginLeft","alignSelf","SectionTimetrialAnalysis","backgroundPositionY","SectionRacenetAppFooter","Footer","termsUrl","policyUrl","loadTrustArcScript","SectionF12023Leagues","HeroMobile","SectionSupportedGamesDesktop","SectionSupportedGamesMobile","LandingPage","setLoader","cdnConfig","setCdnConfig","elementRefs","hero","createRef","leagueRacing","F12023LeagueRacing","WRCClubs","timetrial","racenetAppFooter","resolveGameParam","selectedGame","r","finally","handleNavTo","navItems","gettingStarted","scrollIntoView","f12023LeagueRacing","wrcClubs","timetrialAnalysis","menu","supportedGameSection","leagueRacingSection","f12023LeagueRacingSection","wrc2023ClubSection","timetrialSection","mobileAppFooterSection","useCallback","heroSection","mobileAppSection","descriptionMobile","supportedGamesSection","supportedGamesMobile","row1","row2","gamesInfo","supportedGamesDesktop","wrcClubsSection","f12023LeagueSection","timetrialAnalysisSection","racenetAppFooterSection","sections","s","termsAndConditionsUrl","privacyPolicyUrl","StorageKeyEnum","OauthCallback","destinationPath","OriginalRouteDestination","handleMobilePlatformRedirect","platform","URLSearchParams","destination","authorizeUserAsync","removeItem","isAuthorizedRoute","isRoute","values","every","v","vv","AnonymousRoutes","isLoading","setIsLoading","checkIsAuthorized","hash","AppStoreRedirect","isAndroid","Routing","WebAcceptanceContext","OfflineBanner","banner","setBanner","onlineStatus","setOnlineStatus","closeButton","autoHideDuration","App","Functional","reload","prefsChange","userOS","userOSver","uaindex","ua","match","substr","Number","validIosVersion","AppSnackbar","hostname","CookieBanner","CookieConsent","calculateInnerBorderRadius","outerBorderRadius","outerBorderThickness","innerBorderThickness","memo","only","layer0","layer1","getNextLayer","layer2","previousLayer","minBorderRadius","getNextLayerBorderRadius","calculatedBorderRadius","firebaseApp","firebaseConfig","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","initialiseFirebase","initializeApp","getAnalytics","basename","ReactDOM","serviceWorker","ready","registration","unregister","NotificationType","WebkitLineClamp","WebkitBoxOrient","actionButtonRoot","NotificationCard","profileAvatarProps","borderRadiusClassName","useCardBorderRadiusClass","paddingClassName","commonActions","notificationType","FriendRequested","read","HideableCard","hidden","getTimeDifferenceInUTC","DisplayNameLink","friendProfileLink","FriendRequestCard","senderSSID","setStatus","metadata","friendsApiService","FriendRequestAcceptedCard","LeagueNotificationCard","entityID","NotificationsCardResolver","FriendRequestAccepted","ProLeagueLeagueLiked","ProLeagueCreated","ProLeagueSeasonCreated","ProLeagueMemberJoined","ProLeagueMemberPromotedToAdmin","ProLeagueEventStartingSoon","ProLeagueNameChanged","ProLeagueMemberBanned","ProLeagueBanLifted","ProLeagueMemberEnroled","ProLeaguePlatformChanged","ProLeaguePrivacyLevelChanged","ProLeagueTieringComplete","ProLeagueWarningApplied","ProLeagueResultsReceived","ProLeaguePenaltyApplied","ProLeagueRemovedFromSeason","ProLeagueMemberUpdatedAvailability","ProLeagueReserveSubbed","ProLeagueEventLobbyOpened","ProLeagueTieringFailed","ClubLiked","ClubOwnershipTransferred","ClubRoleChangedToAdmin","ClubMemberUnbanned","ClubMemberBanned","ClubAccessLevelChanged","ClubNameChanged","ClubMemberJoined","ClubPlatformChanged","ClubEventStartingSoon","ClubChampionshipCreated","ClubChampionshipFinished","ClubChampionshipCancelled","titleSuffix","NotificationsSection","LoadableButton","rootZIndex","Dialog","childrenAction","infoBoxChildren","buttonText","backgroundColorAction","saving","borderVariant","node","dialog","overflowY","gridArea","placeSelf","dialogButton","actionContainer","actionChildren","handleOnClose","defaultStyle","backdropFilter","transitionStyles","entering","entered","exiting","exited","unmounted","in","enter","exit","unmountOnExit","sendFriendRequest","revokeFriendRequest","put","acceptFriendRequest","declineFriendRequest","cancelFriendRequest","blockFriend","blockFriendWithErr","unblockFriend","removeFriend","bulkRequestFriends","getFriendsRecommendations","pageSize","getFriendsByPlatform","BadRequest","defaultConsolidatedFriendsResponse","operationStatus","requestedPlatform","defaultPageSize","defaultFriendResponse","pageCount","pageNumber","totalFriends","fetchExistingFriends","searchTerm","includePreferences","cancelToken","fetchFriends","fetchPendingFriends","userSsid","getFriendProfile","scrollBarWidth","CustomScroll","scrollConfig","shadowHeight","mobileShadowHeight","onScrollHover","setScrollHover","bottomReached","setIsBottomReached","listScrollHeight","setListScrollHeight","setScrollHeight","listRef","disableButtons","currentStep","disableShadow","customHeight","gradientHeight","scrollbarGutter","blur","marginRight","disconnect","listResizeObserver","divElement","handleInitialHover","isScroll","onTouchStart","preventDefault","onScroll","scrollTop","totalSize","entries","defaultConsolidatedFriendsErrorResponse","PortalDialog","styleConfig","defaultStyleConfig","titleAlignement","flexWrap","visibility","actionType","cardBorderRadius","getLongDate","date","moment","diff","getLocalDate","locale","language","localFormat","Intl","DateTimeFormat","format","getUserTimeZone","userTimeZone","resolvedOptions","timeZone","getLocalDateWithDash","getLocalDefaultDate","utcDate","utc","local","getLocalDefaultDateWithSlash","localDate","toDate","getLocalDefaultDateWithMinutes","getLocalDefaultDateWithTime","getLocalDefaultDateWithTimeMinutesAndSeconds","getLocalShortDateFromUTC","utcTime","getLocalShortNoAbvDateFromUTC","getLocalShortNoAbvDateWithTimeFromUTC","getLocalDateFromUTC","getLocalShortDateWithYearFromUTC","getLocalTimefromUTC","getEventRangeDate","end","getEventStartDate","textOverride","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","getActivityFeedDate","getLastPlayedDate","getShortMonthName","getDayNumber","isUTCDateBeforeNow","now","isBefore","isUTCDateAfterNow","isAfter","humanize","calculateFormattedTimeDifference","maxDays","asSeconds","Math","floor","asMinutes","asHours","asDays","headerChildren","headerChildrenAction","heightOverride","contentHeaderChildren","onSubmit","noPaddingTop","nativeAppProps","nativeAppReturnValue","isFirefox","toLowerCase","setHover","desktopRoot","headerContent","backgroundEffect","desktopContainer","desktopContent","desktopScrollContainer","headerChildrenContainer","mobileContent","form","hideBackButton","titleContent","comparisonType","setMatches","handleBreakpointChange","mediaQueryList","noPadding","pageSection","maxWidthContainer","responsivePaddingClassName","innerWidth","setWidth","setHeight","update","ProfileDrawerSkeleton","borderTopLeftRadius","borderTopRightRadius","notch","drawerChildren","CustomSwipeableDrawer","withStyles","SwipeableDrawer","onOpen","DropDownToggleButton","isDisabled","FeedbackIcon","buttonItem","SettingsDropdownContents","setClose","closeDropdown","profileIconSize","profileIconMargin","_transition","dropdownLabel","dropdownHoverEffect","dropdownLabelOpen","borderBottomLeftRadius","borderBottomRightRadius","dropdownContentsContainer","dropdownContentsPlaceholder","dropdownContents","showDropdownContents","profileIcon","avatar","dropdownToggleButton","userName","DesktopDropDown","showDropDownHoverState","setShowDropDownHoverState","closeDropDown","toggleDropDown","ClickAwayListener","onClickAway","Collapse","NotificationsPopover","paperBackgroundColor","paperRoot","up","notificationTopArrow","borderLeft","borderRight","disableScrollLock","notificationIcon","Notifications","disableFocusRipple","RacenetEAIcon","bodyContainerZIndex","desktopToolbarSpacing","heightMediaQueries","drawerPaper","bracketNavItem","flexShrink","feedback","feedbackIcon","navItem","navItemIconContainer","navItemText","activeNavLink","linkSelector","linkSelectionWidth","navList","List","MenuItem","NavLink","activeClassName","AppBar","DesktopNavigationToolbar","module","exports","StyledCircularProgress","snackbarNotificationEventName","showSnackbar","setShowSnackbar","eventContent","setEventContent","progress","setProgress","CustomLinearProgress","bar","LinearProgress","stopPropagation","step","ceil","Interval","snackbarDurationMs","timer","setInterval","oldProgress","min","clearInterval","callback","NewTabButton","rotate","buttonColor","RefreshButton","buttonProgress","appear","elm","head","documentElement","ExclamationIcon","TickIcon","defaultWebAcceptanceStore","WebAcceptancePage","WebAcceptanceContextProvider","identityWebAcceptance","Suspense","useWebAcceptanceContext","DragDropTouch","DragDropTouch_1","DataTransfer","_dropEffect","_effectAllowed","_data","defineProperty","set","enumerable","configurable","clearData","getData","setData","setDragImage","img","offsetX","offsetY","ddt","_instance","_imgCustom","_imgOffset","_lastClick","supportsPassive","passive","maxTouchPoints","ts","_touchstart","bind","tm","_touchmove","te","_touchend","opt","capture","getInstance","_this","_shouldHandle","_DBLCLICK","_dispatchEvent","_reset","_closestDraggable","_dragSource","_ptDown","_getPoint","_lastTouch","_img","_CTXMENU","_ISPRESSHOLDMODE","_pressHoldInterval","_isDragEnabled","_PRESSHOLDAWAIT","_shouldCancelPressHoldMove","_shouldHandleMove","_shouldHandlePressHoldMove","_getTarget","_shouldStartDragging","_createImage","_lastTarget","_moveImage","_isDropZone","_destroyImage","defaultPrevented","touches","_getDelta","_PRESSHOLDMARGIN","delta","_THRESHOLD","_PRESSHOLDTHRESHOLD","_dataTransfer","page","pageX","clientX","pageY","clientY","abs","pt","el","elementFromPoint","getComputedStyle","parentElement","cloneNode","_copyStyle","rc","getBoundingClientRect","_OPACITY","requestAnimationFrame","round","_copyProps","dst","_rmvAtts","att","removeAttribute","HTMLCanvasElement","cSrc","cDst","getContext","drawImage","cs","evt","createEvent","t","initEvent","which","buttons","_kbdProps","_ptProps","dataTransfer","hasAttribute","draggable","split"],"mappings":"qrBAgHaA,EAAQ,CACjBC,QAAS,+CACTC,UAAW,6CAGFC,EAAwB,CACjCC,KAAM,CACFC,WAAYL,EAAMC,QAClBK,WAAY,KAEhBC,KAAM,CACFF,WAAYL,EAAME,UAClBI,WAAY,KAEhBE,QAAS,CACLH,WAAYL,EAAME,UAClBI,WAAY,KAEhBG,aAAc,CACVJ,WAAYL,EAAME,UAClBI,WAAY,IACZI,UAAW,WAINC,EAAS,CAClBC,aAAc,GACdC,2BAA4B,KAC5BC,cAAe,KACfC,eAAgB,EAChBC,cAAe,GACfC,eAAgB,IAGPC,EAA2B,SAACC,GACrC,MAAO,CACHC,WAAYD,EAAME,QAAQ,GAC1BC,SAAUH,EAAME,QAAQ,GACxBE,OAAQ,KAIHC,EAAe,UACfC,EAAe,UACfC,EAA0B,UAC1BC,EAA+B,UAE/BC,EAAsB,CAC/BC,QAAS,UACTC,KAAM,OACNC,QAAS,UACTC,QAAS,UACTC,SAAU,OACVC,YAAa,UACbC,OAAQ,UACRC,OAAQ,OACRC,WAAY,UACZC,SAAU,WAIDC,EAAe,UACfC,EAAa,UACbC,EAAY,UAEnBC,EAAmBC,YACrBC,YAAY,CACRC,QAAS,CACLC,OAAQ,CACJC,MAAO,UACPC,MAAO,SAGfC,MAAO,CACHC,aAAc,UACdC,KAAM,UACNC,IAAK,UACLC,KAAM,UACNC,KAAM,WAEVC,SAAU,CACNC,SAAU,UACVhB,WAAY,UACZC,UAAW,UACXgB,kBAAmB,UACnBC,OAAQ,UACRC,qBAAsB,UACtBC,MAAO,UACPC,KAAM,UACNC,kBAAmB,cACnBC,SAAU,UACVC,YAAa,UACbC,WAAY,UACZC,WAAY,UACZC,cAAe,UACfC,QAAS,UACTC,OAAQ,UACRC,YAAa,UACbC,cAAe,UACfC,YAAa,UACbC,aAAc,UACdC,cAAe,UACfC,YAAa,UACbC,OAAQ,UACRC,SAAU,WAEdC,QAAS,CACLC,gBAAiB,UACjBC,MAAO,qBACPC,UAAW,UACXC,WAAY,UACZC,YAAa,CAETC,WAAY,UACZJ,MAAO,qBACPK,eAAgB,SAOxBC,aAAc,CACVP,gBAAiB,UACjBQ,OAAQ,WAEZC,aAAc,CACVT,gBAAiB,UACjBU,sBAAuB,UACvBC,iBAAkB,UAClBC,SAAU,WAEdC,OAAQ,CACJC,oBAAqB,GACrBC,eAAgB,sBAChBC,iBAAiB,oBAAD,OAAsBC,YAAK,UAAW,KACtDC,qBAAqB,oBAAD,OAAsBD,YAAK,UAAW,KAC1DE,gBAAiB,EACjBC,eAAgB,EAChBC,eAAgB,EAChBC,eAAgB,GAChBC,eAAgB,GAChBC,SAAU,CACNvB,MAAO,SAAC7D,GAAD,OAAkBA,EAAM0B,QAAQgB,KAAK,MAC5C2C,UAAW,QAEfC,cAAe,CACXC,QAAS,GACTC,gBAAiB,gDAErBC,kBAAmB,UACnBC,gBAAiB,UACjBC,aAAc,eAElBnG,OAAQ,CACJC,aAAc,GACdC,2BAA4B,KAC5BE,eAAgB,EAChBC,cAAe,IAEnB+F,WAAY,CAGRC,GAAG,eACI7G,EAAUC,MAEjB6G,GAAG,eACI9G,EAAUC,MAEjB8G,GAAG,eACI/G,EAAUC,MAEjB+G,GAAG,eACIhH,EAAUC,MAEjBgH,GAAG,eACIjH,EAAUC,MAEjBiH,GAAG,eACIlH,EAAUC,MAEjBkH,UAAU,eACHnH,EAAUC,MAEjBmH,UAAU,eACHpH,EAAUC,MAEjBoH,MAAM,eACCrH,EAAUK,SAEjBiH,MAAM,eACCtH,EAAUK,SAEjBkH,EAAE,eACKvH,EAAUK,SAEjBmH,OAAO,2BAAMxH,EAAUC,MAAjB,IAAuBwH,cAAe,SAC5CC,QAAQ,eACD1H,EAAUK,SAEjBsH,SAAS,eACF3H,EAAUK,aAOvBuH,EAAmBnF,YAAYF,EAAW,CAC5CG,QAAS,CACL5C,QAAS,CACL+H,KAAM,UACNC,KAAM,UACNC,MAAO,UACPC,aAAc,WAElBjI,UAAW,CACP8H,KAAM,UACNC,KAAM,UACNC,MAAO,UACPC,aAAc,WAElBC,KAAM,CACFJ,KAAM,UACNE,MAAO,UACPD,KAAM,WAGVI,MAAO,CACHL,KAAM,WAGV5C,WAAY,CACRkD,QAAS,UACTC,MAAO,WAEXC,KAAM,CACFvI,QAAS,UACTC,UAAW,UACXuI,SAAU,YAGlB7C,OAAQ,CACJ8C,eAAgB,UAChBC,aAAc,oBACdC,wBAAwB,sBACxBC,cAAe,OACfC,kBAAmB,UACnBC,kBAAmB,yBAEvB9F,MAAO,CACHS,OAAQ,UACRsF,KAAM,UACNpF,MAAO,UACPqF,OAAQ,WAEZC,UAAW,CACPC,gBAAiB,CACbC,KAAM,CACFpE,MAAO,YAGfqE,WAAY,CACRD,KAAM,CACF7H,OAAQZ,EAAOK,cACfsI,UAAW3I,EAAOK,cAAgB,kBAO5CuI,EAAoB3G,YAAYF,EAAW,CAC7CG,QAAS,CACL5C,QAAS,CACL+H,KAAM,UACNC,KAAM,UACNC,MAAO,UACPC,aAAc,WAElBjI,UAAW,CACP8H,KAAM,UAENE,MAAO,UACPD,KAAM,UACNE,aAAc,WAElBC,KAAM,CACFJ,KAAM,UACNE,MAAO,UACPD,KAAM,WAKV7C,WAAY,CACRkD,QAAS,UACTC,MAAO,WAEXC,KAAM,CACFvI,QAAS,UAETC,UAAW,UACXuI,SAAU,YAGlB7C,OAAQ,CACJ8C,eAAgB,UAChBC,aAAc,oBACdC,wBAAwB,sBACxBC,cAAe,UACfC,kBAAmB,QAEvB7F,MAAO,CACHS,OAAQ,UACRsF,KAAM,UACNC,OAAQ,UACRrF,MAAO,WAEXsF,UAAW,CACPC,gBAAiB,CACbC,KAAM,CACFpE,MAAO,WAGfqE,WAAY,CACRD,KAAM,CACF7H,OAAQZ,EAAOK,cACfsI,UAAW3I,EAAOK,cAAgB,kBAY5CwI,EAAY,UACZzG,EAAQ,UAIR0G,EAAa,UACbC,EAAQ,UACRC,EAAa,UACbX,EAAO,UACPY,EAAY,UAiBZC,EAAgB,+CACTC,EAAa,4CAEpBC,EAAwB,CAC1B1J,WAAYwJ,EACZvJ,WAAY,IACZ0J,SAAU,GACVC,cAAe,IACfrC,cAAe,YACfsC,OAAQ,EACRC,OAAQ,UACRC,SAAU,WACVC,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBC,WAAY,6CACZC,WAAY,GAIHC,EAAa,CACtB1F,MAAO,CACHnB,KAlDK,UAmDL2F,UAAWA,EACXmB,SAnDS,UAoDT5H,MAAOA,EACP6H,WAlDW,UAmDX5H,MAjDM,OAkDNyG,WAAYA,EACZC,MAAOA,EACPC,WAAYA,EACZX,KAAMA,EACNY,UAAWA,EACXiB,aAjDa,UAkDbC,UAjDU,UAkDVC,SAhDS,UAiDTC,WAlDW,UAmDXC,YAjDY,UAkDZC,YAjDY,cAkDZC,WAjDW,UAkDXC,aAjDa,UAkDb5J,aAAcA,EACdC,aAAcA,EACd4J,KAnDK,UAoDLC,OAnDO,UAoDPC,OAnDO,UAoDPnI,IAnDI,UAoDJQ,MAnDM,UAoDN4H,WAnDW,UAoDXhI,SAxES,UAyEToB,OApDO,YAsDX6G,QAAS,CACLvH,WAAY,UACZwH,QAAS,UACTC,SAAU,WAEd5E,WAAY,CACR6E,QAAS,CACLvL,WAAYwJ,EACZvJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,IACZP,OAAQ,GAEZ2B,MAAO,CACHxL,WAAYwJ,EACZvJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,IACZP,OAAQ,GAEZ4B,QAAS,CACLzL,WAAYwJ,EACZvJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,IACZP,OAAQ,GAEZ6B,WAAY,CACR1L,WAAYwJ,EACZvJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhBuB,SAAU,CACN3L,WAAYyJ,EACZxJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhBwB,KAAM,CACF5L,WAAYyJ,EACZxJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhByB,SAAU,CACN7L,WAAYyJ,EACZxJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhB0B,MAAO,CACH9L,WAAYyJ,EACZxJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhB5C,QAAS,CACLxH,WAAYyJ,EACZxJ,WAAY,IACZ0J,SAAU,GACVhF,MAAOjC,EACP0H,WAAY,KAEhB9C,OAAO,eACAoC,IAGXqC,YAAa,CACTC,GAAI,EACJC,GAAI,IACJC,GAAI,IACJC,GAAI,KACJC,GAAI,MAERtM,UAAW,CACPC,KAAM,CACFE,WAAY,KAEhBE,QAAS,CACLF,WAAY,MAGpBqH,OAAQ,CACJnH,QAAS,CACL8H,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiB2E,EACjB1E,MAAOjC,EACPxB,OAAQ,GACRgE,OAAO,aAAD,OAAemE,GACrBgD,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiB2E,EACjB1E,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZiB,OAAQ,GACRgE,OAAO,aAAD,OAAemE,GACrBgD,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiB2E,EACjB1E,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZiB,OAAQ,GACRgE,OAAO,aAAD,OAAemE,GACrBgD,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiB4E,EACjB3E,MAAO,UACPO,OAAO,aAAD,OAAeoE,IAEzBsD,SAAU,CACNlI,gBAAiB,UACjBC,MAAO,UACPO,OAAO,oBACP4E,OAAQ,YAGhB+C,gBAAiB,CACb5E,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAemE,GACrB1E,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAemE,GACrB1E,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAemE,GACrB1E,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiB4E,EACjBpE,OAAO,aAAD,OAAeoE,GACrB3E,MAAO,WAEXiI,SAAU,CACNlI,gBAAiB,cACjBQ,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBgD,kBAAmB,CACf7E,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAexC,GACrBiC,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAexC,GACrBiC,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAexC,GACrBiC,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiBhC,EACjBwC,OAAO,aAAD,OAAexC,GACrBiC,MAAO,WAEXiI,SAAU,CACNlI,gBAAiB,cACjBQ,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBiD,aAAc,CACV9E,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiB,cACjBQ,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,GAEXkK,SAAU,CACNlI,gBAAiB,cACjBQ,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBkD,UAAW,CACP/E,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiB6E,EACjBrE,OAAO,aAAD,OAAeqE,GACrB5E,MAAO,WAEXiI,SAAU,CACNlI,gBAAiB,cACjBQ,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBmD,KAAM,CACFhF,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,GACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,GACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiBiE,EACjBzD,OAAO,aAAD,OAAeyD,GACrBhE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,GACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiB6E,EACjBrE,OAAO,aAAD,OAAeqE,GACrB5E,MAAOjC,GAEXkK,SAAU,CACNlI,gBAAiBiE,EACjBzD,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBoD,eAAgB,CACZjF,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiByE,EACjBjE,OAAO,aAAD,OAAeiE,GACrBxE,MAAOjC,EACPxB,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiByE,EACjBjE,OAAO,aAAD,OAAeiE,GACrBxE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiByE,EACjBjE,OAAO,aAAD,OAAeiE,GACrBxE,MAAOjC,EACP1C,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZsH,cAAe,YACfrG,OAAQ,GACRmL,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiBhC,EACjBwC,OAAO,aAAD,OAAexC,GACrBiC,MAAOwE,EACPgE,UAAU,WAAD,OAAa/D,EAAb,OAEbwD,SAAU,CACNlI,gBAAiByE,EACjBjE,OAAO,oBACPP,MAAO,UACPmF,OAAQ,YAGhBsD,KAAM,CACFnF,QAAQ,2BACDyB,GADA,IAEHhF,gBAAiB,cACjBC,MAAO0E,EACPnI,OAAQ,GACRgE,OAAQ,OACRmH,aAAc,EACdC,SAAU,IACVC,QAAS,WAEbC,MAAM,2BACC9C,GADF,IAEDhF,gBAAiB,cACjBC,MAAO0E,EACPrJ,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZiB,OAAQ,GACRgE,OAAQ,OACRmH,aAAc,EACdC,SAAU,IACVC,QAAS,SACT3C,cAAe,IAEnB6C,OAAO,2BACA/C,GADD,IAEFhF,gBAAiB,cACjBC,MAAO0E,EACPrJ,WAAYwJ,EACZG,SAAU,GACV1J,WAAY,IACZiB,OAAQ,GACRgE,OAAQ,OACRmH,aAAc,EACdK,MAAO,OACPH,QAAS,SACT3C,cAAe,KAEnB+C,MAAO,CACHjI,gBAAiB,OACjBC,MAAO2E,EACPpE,OAAQ,QAEZ0H,SAAU,CACNlI,gBAAiB,OACjBC,MAAO,UACPO,OAAQ,OACR4E,OAAQ,aAIpBpB,kBAAmB,CACfhE,gBAAgB,GAAD,OAAKyE,EAAL,OAEnBkD,aAAc,EACdc,UAAW,CACPzK,MAAM,WAAD,OAAa0G,EAAb,OAETiE,YAAa,CACT5H,eAAgB,uBAEpBzE,QAAS,eAACsM,EAAD,uDAAiB,EAAjB,OAA+B,EAARA,K,2mCC1hCvBC,EAAqB,mBACrBC,EAAqB,mBAUrBC,EAAgC,GAChCC,EAAqB,IAE5BC,EAASC,SAASC,SAASF,OAEpBG,EAAW,CACpBC,SAdgB,WAChB,IAAK,IAAD,EACA,iBAAOH,SAASI,qBAAqB,QAAQ,GAAGC,aAAa,eAA7D,QAAwE,IAC1E,MAAOC,GACL,MAAO,KAUDC,GACVC,OAAQT,EACRU,OAAQ,IACRC,gBAAiB,IAGRC,EACE,aADFA,EAEG,cAFHA,EAGF,SAHEA,EAIA,WAJAA,EAKA,SALAA,EAMA,SANAA,EAOA,SAPAA,EAQA,SARAA,EASI,eATJA,EAUA,iBAGAC,EAAsB,SAACC,GAAD,gBAA2BC,YAAaD,GAAxC,gBACtBE,EAAqB,SAACF,GAAD,gBAA2BC,YAAaD,GAAxC,WAErBG,EAAc,CACvBC,QAAS,IACTC,WAAY,OACZC,cAAe,UACfC,iBAAkB,sBAClBC,mBAAoB,iBACpBC,KAAM,QACNC,QAAS,WACTC,aAAc,gBACdC,QAAS,WACTC,WAAY,cACZC,YAAa,YACbC,SAAU,YACVC,UAAW,GACXC,cAAe,iBACfC,MAAO,gBACPC,aAAc,gBACdC,IAAK,OACLC,UAAW,CACP/G,KAAMwF,EACNwB,UAAU,GAAD,OAAKxB,EAAL,cACTyB,OAAO,GAAD,OAAKzB,EAAL,WACN0B,UAAU,GAAD,OAAK1B,EAAL,cACTc,QAAQ,GAAD,OAAKd,EAAL,YACP3L,MAAM,GAAD,OAAK2L,EAAL,UACL2B,SAAS,GAAD,OAAK3B,EAAL,cAEZ4B,WAAY,CACRpH,KAAMwF,EACNwB,UAAU,GAAD,OAAKxB,EAAL,cACT3L,MAAM,GAAD,OAAK2L,EAAL,UACLc,QAAQ,GAAD,OAAKd,EAAL,YACP6B,oBAAoB,GAAD,OAAK7B,EAAL,wBACnByB,OAAO,GAAD,OAAKzB,EAAL,WACN2B,SAAS,GAAD,OAAK3B,EAAL,cAEZ8B,MAAO,CACHtH,KAAMwF,EACNwB,UAAU,GAAD,OAAKxB,EAAL,cACTc,QAAQ,GAAD,OAAKd,EAAL,YACP3L,MAAM,GAAD,OAAK2L,EAAL,UACL2B,SAAS,GAAD,OAAK3B,EAAL,SACR+B,YAAY,GAAD,OAAK/B,EAAL,iBAEfgC,QAAS,CACLxH,KAAMwF,EACN3L,MAAM,GAAD,OAAK2L,EAAL,UACLiC,KAAK,GAAD,OAAKjC,EAAL,SACJkC,OAAO,GAAD,OAAKlC,EAAL,WACNmC,eAAe,GAAD,OAAKnC,EAAL,mBACdoC,aAAa,GAAD,OAAKpC,EAAL,kBACZc,QAAQ,GAAD,OAAKd,EAAL,YACPqC,aAAa,GAAD,OAAKrC,EAAL,iBACZ6B,oBAAoB,GAAD,OAAK7B,EAAL,wBACnB2B,SAAS,GAAD,OAAK3B,EAAL,aACRsC,QAAQ,GAAD,OAAKtC,EAAL,YACPuC,cAAc,GAAD,OAAKvC,EAAL,mBACbwC,OAAO,GAAD,OAAKxC,EAAL,WACNyC,cAAc,GAAD,OAAKzC,EAAL,wBACb0C,YAAY,GAAD,OAAK1C,EAAL,yBACX2C,gBAAgB,GAAD,OAAK3C,EAAL,sBAEnB4C,QAAS,CACLpI,KAAMwF,EACN3L,MAAM,GAAD,OAAK2L,EAAL,UACLiC,KAAK,GAAD,OAAKjC,EAAL,SACJkC,OAAO,GAAD,OAAKlC,EAAL,WACNmC,eAAe,GAAD,OAAKnC,EAAL,mBACdoC,aAAa,GAAD,OAAKpC,EAAL,kBACZc,QAAQ,GAAD,OAAKd,EAAL,YACPqC,aAAa,GAAD,OAAKrC,EAAL,iBACZ6B,oBAAoB,GAAD,OAAK7B,EAAL,wBACnB2B,SAAS,GAAD,OAAK3B,EAAL,aACRsC,QAAQ,GAAD,OAAKtC,EAAL,YACPuC,cAAc,GAAD,OAAKvC,EAAL,mBACbwC,OAAO,GAAD,OAAKxC,EAAL,WACNyC,cAAc,GAAD,OAAKzC,EAAL,wBACb0C,YAAY,GAAD,OAAK1C,EAAL,yBACX2C,gBAAgB,GAAD,OAAK3C,EAAL,sBAEnB6C,QAAS,CACLrI,KAAMwF,EACNc,QAAQ,GAAD,OAAKd,EAAL,YACP3L,MAAM,GAAD,OAAK2L,EAAL,UACL6B,oBAAoB,GAAD,OAAK7B,EAAL,wBACnBqC,aAAa,GAAD,OAAKrC,EAAL,iBACZiC,KAAK,GAAD,OAAKjC,EAAL,SACJsC,QAAQ,GAAD,OAAKtC,EAAL,YACPwC,OAAO,GAAD,OAAKxC,EAAL,mBACN2C,gBAAgB,GAAD,OAAK3C,EAAL,qBACf8C,mBAAmB,GAAD,OAAK9C,EAAL,wBAClB+C,aAAa,GAAD,OAAK/C,EAAL,mBACZgD,WAAW,GAAD,OAAKhD,EAAL,iBACViD,QAAQ,GAAD,OAAKjD,EAAL,cAEXkD,QAAS,CACL1I,KAAMwF,EACNmD,QAAQ,GAAD,OAAKnD,EAAL,YACPoD,aAAa,GAAD,OAAKpD,EAAL,iBACZc,QAAQ,GAAD,OAAKd,EAAL,YACPiC,KAAK,GAAD,OAAKjC,EAAL,SACJsC,QAAQ,GAAD,OAAKtC,EAAL,YACPwC,OAAO,GAAD,OAAKxC,EAAL,mBACN2C,gBAAgB,GAAD,OAAK3C,EAAL,qBACf8C,mBAAmB,GAAD,OAAK9C,EAAL,wBAClB+C,aAAa,GAAD,OAAK/C,EAAL,mBACZgD,WAAW,GAAD,OAAKhD,EAAL,iBACViD,QAAQ,GAAD,OAAKjD,EAAL,aACPqD,UAAU,GAAD,OAAKrD,EAAL,gBAEbsD,QAAS,CACL9I,KAAMwF,EACNmD,QAAQ,GAAD,OAAKnD,EAAL,YACPoD,aAAa,GAAD,OAAKpD,EAAL,iBACZc,QAAQ,GAAD,OAAKd,EAAL,YACPiC,KAAK,GAAD,OAAKjC,EAAL,SACJsC,QAAQ,GAAD,OAAKtC,EAAL,YACPwC,OAAO,GAAD,OAAKxC,EAAL,mBACN2C,gBAAgB,GAAD,OAAK3C,EAAL,qBACf8C,mBAAmB,GAAD,OAAK9C,EAAL,wBAClB+C,aAAa,GAAD,OAAK/C,EAAL,mBACZgD,WAAW,GAAD,OAAKhD,EAAL,iBACVqD,UAAU,GAAD,OAAKrD,EAAL,gBAEbuD,OAAQ,CACJ/I,KAAMwF,EACN3L,MAAM,GAAD,OAAK2L,EAAL,UACLc,QAAQ,GAAD,OAAKd,EAAL,YACPqC,aAAa,GAAD,OAAKrC,EAAL,iBACZiC,KAAK,GAAD,OAAKjC,EAAL,SACJsC,QAAQ,GAAD,OAAKtC,EAAL,YACP2B,SAAS,GAAD,OAAK3B,EAAL,aACRyB,OAAO,GAAD,OAAKzB,EAAL,YAEVwD,QAAS,CACLhJ,KAAMwF,EACNyD,MAAM,GAAD,OAAKzD,EAAL,UACL0D,KAAK,GAAD,OAAK1D,EAAL,UACJ2D,eAAe,GAAD,OAAK3D,EAAL,qBACd4D,aAAa,GAAD,OAAK5D,EAAL,kBACZqC,aAAa,GAAD,OAAKrC,EAAL,iBACZc,QAAQ,GAAD,OAAKd,EAAL,YACP6B,oBAAoB,GAAD,OAAK7B,EAAL,wBACnB6D,YAAY,GAAD,OAAK7D,EAAL,eACX8D,mBAAmB,GAAD,OAAK9D,EAAL,uBAClB+D,kBAAkB,GAAD,OAAK/D,EAAL,sBACjBgE,gBAAgB,GAAD,OAAKhE,EAAL,oBACfiE,uBAAuB,GAAD,OAAKjE,EAAL,2BACtBkE,wBAAwB,GAAD,OAAKlE,EAAL,4BACvBmE,qBAAqB,GAAD,OAAKnE,EAAL,yBACpBoE,mBAAmB,GAAD,OAAKpE,EAAL,uBAClBiC,KAAK,GAAD,OAAKjC,EAAL,SACJqE,+BAA+B,GAAD,OAAKrE,EAAL,8BAElCsE,WAAY,CACR,IAAO,SAIFC,EAAU,CACnBC,eAAe,GAAD,OAAKjF,EAASO,OAAd,mBACd2E,eAAe,GAAD,OAAKlF,EAASO,OAAd,+BACd4E,YAAY,GAAD,OAAKnF,EAASO,OAAd,gBACX6E,kBAAkB,GAAD,OAAKpF,EAASO,OAAd,wBACjB8E,SAAS,GAAD,OAAKrF,EAASO,OAAd,uBACR+E,wBAAyB,iBACzBC,SAAS,GAAD,OAAKvF,EAASO,OAAd,mCACRiF,eAAe,GAAD,OAAKxF,EAASO,OAAd,8BACdkF,WAAW,GAAD,OAAKzF,EAASO,OAAd,eACVmF,cAAc,GAAD,OAAK1F,EAASO,OAAd,mBACboF,YAAY,GAAD,OAAK3F,EAASO,OAAd,iBACXqF,gBAAgB,GAAD,OAAK5F,EAASO,OAAd,2BACfsF,OAAO,GAAD,OAAK7F,EAASO,OAAd,kBACNgB,QAAS,CACLuE,WAAW,GAAD,OAAK9F,EAASO,OAAd,cACVwF,kBAAkB,GAAD,OAAK/F,EAASO,OAAd,sBACjByF,gBAAgB,GAAD,OAAKhG,EAASO,OAAd,qBACf0F,kBAAmB,SAACC,GAAD,gBAAqBlG,EAASO,OAA9B,yCAAqE2F,IACxFC,eAAgB,SAACC,GAAD,gBAA2BpG,EAASO,OAApC,uCAAyE6F,IACzFC,yBAA0B,SAACD,GAAD,gBACnBpG,EAASO,OADU,8CACkC6F,IAC5DE,iBAAkB,SAACF,GAAD,gBAA2BpG,EAASO,OAApC,yCAA2E6F,IAC7FG,gBAAiB,SAACH,GAAD,gBAA2BpG,EAASO,OAApC,8CAAgF6F,IACjGI,iBAAkB,SAACJ,GAAD,gBAA2BpG,EAASO,OAApC,+CAAiF6F,IACnGK,mBAAoB,SAACL,GAAD,gBAA2BpG,EAASO,OAApC,wCAA0E6F,IAC9FM,aAAc,SAACN,GAAD,gBAA2BpG,EAASO,OAApC,wCAA0E6F,IACxFO,YAAY,GAAD,OAAK3G,EAASO,OAAd,2BACXqG,uBAAuB,GAAD,OAAK5G,EAASO,OAAd,8BACtBsG,kBAAkB,GAAD,OAAK7G,EAASO,OAAd,2BACjBuG,aAAa,GAAD,OAAK9G,EAASO,OAAd,4BAEhBwG,SAAU,CACNC,mBAAmB,GAAD,OAAKhH,EAASO,OAAd,wBAClB0G,eAAe,GAAD,OAAKjH,EAASO,OAAd,qBACd2G,cAAc,GAAD,OAAKlH,EAASO,OAAd,6BACb4G,OAAO,GAAD,OAAKnH,EAASO,OAAd,uBACN6G,qBAAqB,GAAD,OAAKpH,EAASO,OAAd,+BACpB8G,kBAAmB,SAACC,GAAD,gBAA6BtH,EAASO,OAAtC,mCAAuE+G,EAAvE,YACnBC,eAAe,GAAD,OAAKvH,EAASO,OAAd,kCACdiH,4BAA4B,GAAD,OAAKxH,EAASO,OAAd,mDAC3BkH,eAAe,GAAD,OAAKzH,EAASO,OAAd,8BAElBkB,YAAa,CACTiG,eAAe,GAAD,OAAK1H,EAASO,OAAd,mBACdoH,mBAAmB,GAAD,OAAK3H,EAASO,OAAd,6BAClBqH,uBAAuB,GAAD,OAAK5H,EAASO,OAAd,0BACtBsH,aAAa,GAAD,OAAK7H,EAASO,OAAd,wBACZuH,mBAAmB,GAAD,OAAK9H,EAASO,OAAd,mCAClBwH,kBAAkB,GAAD,OAAK/H,EAASO,OAAd,mCACjByH,eAAe,GAAD,OAAKhI,EAASO,OAAd,gCAElB0H,UAAW,CACPC,iBAAiB,GAAD,OAAKlI,EAASO,OAAd,+BAChB4H,sBAAsB,GAAD,OAAKnI,EAASO,OAAd,iCACrB6H,wBAAwB,GAAD,OAAKpI,EAASO,OAAd,sCACvB8H,6BAA6B,GAAD,OAAKrI,EAASO,OAAd,wCAC5B+H,iBAAiB,GAAD,OAAKtI,EAASO,OAAd,6BAEpByB,UAAW,CACPuG,eAAe,GAAD,OAAKvI,EAASO,OAAd,oCACdiI,sBAAsB,GAAD,OAAKxI,EAASO,OAAd,2CACrBkI,kBAAkB,GAAD,OAAKzI,EAASO,OAAd,6CACjBmI,UAAU,GAAD,OAAK1I,EAASO,OAAd,8BACToI,4CAA4C,GAAD,OAAK3I,EAASO,OAAd,0CAC3CqI,kBAAkB,GAAD,OAAK5I,EAASO,OAAd,sCACjBsI,wBAAwB,GAAD,OAAK7I,EAASO,OAAd,uCACvBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,+BACVuI,kBAAkB,GAAD,OAAK9I,EAASO,OAAd,iCACjBwI,qBAAqB,GAAD,OAAK/I,EAASO,OAAd,0CACpByI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,8BACT0I,oBAAoB,GAAD,OAAKjJ,EAASO,OAAd,2CAEvBgC,MAAO,CACHmG,UAAU,GAAD,OAAK1I,EAASO,OAAd,6BACTgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,mCACdsI,wBAAwB,GAAD,OAAK7I,EAASO,OAAd,sCACvBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,8BACV2I,kBAAkB,GAAD,OAAKlJ,EAASO,OAAd,4CACjB4I,UAAU,GAAD,OAAKnJ,EAASO,OAAd,6BACT6I,eAAe,GAAD,OAAKpJ,EAASO,OAAd,yCACd8I,uBAAuB,GAAD,OAAKrJ,EAASO,OAAd,0CACtBqI,kBAAkB,GAAD,OAAK5I,EAASO,OAAd,qCACjB+I,gBAAgB,GAAD,OAAKtJ,EAASO,OAAd,mCACfgJ,sBAAsB,GAAD,OAAKvJ,EAASO,OAAd,yCACrBuI,kBAAkB,GAAD,OAAK9I,EAASO,OAAd,sCACjBiJ,eAAe,GAAD,OAAKxJ,EAASO,OAAd,kCACdkJ,cAAe,SAACC,GAAD,gBAA6B1J,EAASO,OAAtC,0CAA8EmJ,IAC7FC,kBAAmB,SAACD,GAAD,gBACZ1J,EAASO,OADG,0CACqCmJ,EADrC,SAEnBE,oBAAqB,SAACF,GAAD,gBACd1J,EAASO,OADK,0CACmCmJ,EADnC,WAErBG,kBAAkB,GAAD,OAAK7J,EAASO,OAAd,uCACjBuJ,iCAAiC,GAAD,OAAK9J,EAASO,OAAd,sDAChCwJ,sBAAsB,GAAD,OAAK/J,EAASO,OAAd,sDACrByJ,qCAAqC,GAAD,OAAKhK,EAASO,OAAd,0DACpC0J,yBAA0B,SAACP,GAAD,gBACnB1J,EAASO,OADU,sDAC0CmJ,IACpEQ,qCAAsC,SAACR,GAAD,gBAC/B1J,EAASO,OADsB,sDAC8BmJ,EAD9B,kBAEtCS,2BAA2B,GAAD,OAAKnK,EAASO,OAAd,gDAC1B6J,2BAA2B,GAAD,OAAKpK,EAASO,OAAd,0CAE9B8B,WAAY,CACRqG,UAAU,GAAD,OAAK1I,EAASO,OAAd,8BACTgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,oCACdsI,wBAAwB,GAAD,OAAK7I,EAASO,OAAd,uCACvBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,+BACV2I,kBAAkB,GAAD,OAAKlJ,EAASO,OAAd,6CACjBuI,kBAAkB,GAAD,OAAK9I,EAASO,OAAd,uCACjB8J,qBAAqB,GAAD,OAAKrK,EAASO,OAAd,qCACpB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,0CACpB8I,uBAAuB,GAAD,OAAKrJ,EAASO,OAAd,2CACtBgK,uBAAuB,GAAD,OAAKvK,EAASO,OAAd,4CACtB+I,gBAAgB,GAAD,OAAKtJ,EAASO,OAAd,2CACfiK,8BAA8B,GAAD,OAAKxK,EAASO,OAAd,kDAC7BgJ,sBAAsB,GAAD,OAAKvJ,EAASO,OAAd,0CACrBkK,wBAAwB,GAAD,OAAKzK,EAASO,OAAd,8CAE3BmK,OAAQ,CACJhC,UAAU,GAAD,OAAK1I,EAASO,OAAd,0BACToK,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,mCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,2BACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,gCACdqK,UAAU,GAAD,OAAK5K,EAASO,OAAd,0BACTsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,+BACduK,sBAAsB,GAAD,OAAK9K,EAASO,OAAd,sCACrB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,sCACpByI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,0BACTwK,qBAAqB,GAAD,OAAK/K,EAASO,OAAd,uCACpByK,6BAA6B,GAAD,OAAKhL,EAASO,OAAd,8CAC5B0K,8BAA8B,GAAD,OAAKjL,EAASO,OAAd,+CAC7B2K,6BAA6B,GAAD,OAAKlL,EAASO,OAAd,8CAC5B4K,4BAA4B,GAAD,OAAKnL,EAASO,OAAd,6CAC3B6K,gBAAgB,GAAD,OAAKpL,EAASO,OAAd,gCACf8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,yBAEX+K,OAAQ,CACJ5C,UAAU,GAAD,OAAK1I,EAASO,OAAd,wBACToK,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,iCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,yBACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,8BACdqK,UAAU,GAAD,OAAK5K,EAASO,OAAd,wBACTsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,6BACdyI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,wBACTwK,qBAAqB,GAAD,OAAK/K,EAASO,OAAd,qCACpB6K,gBAAgB,GAAD,OAAKpL,EAASO,OAAd,8BACf8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,sBACPyK,6BAA6B,GAAD,OAAKhL,EAASO,OAAd,4CAC5B0K,8BAA8B,GAAD,OAAKjL,EAASO,OAAd,6CAC7B2K,6BAA6B,GAAD,OAAKlL,EAASO,OAAd,4CAC5B4K,4BAA4B,GAAD,OAAKnL,EAASO,OAAd,2CAC3BgL,sBAAsB,GAAD,OAAKvL,EAASO,OAAd,qCACrB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,qCAExBiL,OAAQ,CACJ9C,UAAU,GAAD,OAAK1I,EAASO,OAAd,wBACToK,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,iCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,yBACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,8BACdqK,UAAU,GAAD,OAAK5K,EAASO,OAAd,wBACTsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,6BACd8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,sBACPyK,6BAA6B,GAAD,OAAKhL,EAASO,OAAd,4CAC5B0K,8BAA8B,GAAD,OAAKjL,EAASO,OAAd,6CAC7B2K,6BAA6B,GAAD,OAAKlL,EAASO,OAAd,4CAC5B4K,4BAA4B,GAAD,OAAKnL,EAASO,OAAd,2CAC3BgL,sBAAsB,GAAD,OAAKvL,EAASO,OAAd,qCACrB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,oCACpBuK,sBAAsB,GAAD,OAAK9K,EAASO,OAAd,2CACrBkL,iBAAiB,GAAD,OAAKzL,EAASO,OAAd,gCAEpBmL,cAAe,CACXC,gCAAiC,SAACC,GAAD,gBAC1B5L,EAASO,OADiB,8CAC2BqL,EAD3B,aAEjCC,qBAAqB,GAAD,OAAK7L,EAASO,OAAd,sCACpBuL,2BAA4B,SAACF,GAAD,gBACrB5L,EAASO,OADY,8CACgCqL,EADhC,iBAE5BG,sCAAuC,SAACH,GAAD,gBAChC5L,EAASO,OADuB,8CACqBqL,EADrB,6BAEvCI,0BAA0B,GAAD,OAAKhM,EAASO,OAAd,wCACzB0L,kBAAkB,GAAD,OAAKjM,EAASO,OAAd,4CAErB2L,oBAAqB,CACjBC,iBAAiB,GAAD,OAAKnM,EAASO,OAAd,+BAChB6L,0BAA2B,SAACC,GAAD,gBAAmBrM,EAASO,OAA5B,uCAAiE8L,EAAjE,gBAE/BC,OAAQ,CACJ5D,UAAU,GAAD,OAAK1I,EAASO,OAAd,wBACTgM,YAAY,GAAD,OAAKvM,EAASO,OAAd,0BACXiM,iBAAiB,GAAD,OAAKxM,EAASO,OAAd,gCAChBsD,aAAc,SAAC4I,GAAD,gBAAuBzM,EAASO,OAAhC,wCAAsEkM,IACpF9B,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,iCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,yBACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,8BACdqK,UAAU,GAAD,OAAK5K,EAASO,OAAd,wBACTsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,6BACd8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,sBACPyK,6BAA6B,GAAD,OAAKhL,EAASO,OAAd,4CAC5B0K,8BAA8B,GAAD,OAAKjL,EAASO,OAAd,6CAC7B2K,6BAA6B,GAAD,OAAKlL,EAASO,OAAd,4CAC5B4K,4BAA4B,GAAD,OAAKnL,EAASO,OAAd,2CAC3BgL,sBAAsB,GAAD,OAAKvL,EAASO,OAAd,qCACrB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,oCACpBuK,sBAAsB,GAAD,OAAK9K,EAASO,OAAd,2CACrBkL,iBAAiB,GAAD,OAAKzL,EAASO,OAAd,gCAEpBmM,cAAe,CACXf,gCAAiC,SAACC,GAAD,gBAC1B5L,EAASO,OADiB,8CAC2BqL,EAD3B,aAEjCC,qBAAqB,GAAD,OAAK7L,EAASO,OAAd,sCACpBuL,2BAA4B,SAACF,GAAD,gBACrB5L,EAASO,OADY,8CACgCqL,EADhC,iBAE5BG,sCAAuC,SAACH,GAAD,gBAChC5L,EAASO,OADuB,8CACqBqL,EADrB,6BAEvCI,0BAA0B,GAAD,OAAKhM,EAASO,OAAd,wCACzB0L,kBAAkB,GAAD,OAAKjM,EAASO,OAAd,4CAErBoM,oBAAqB,CACjBR,iBAAiB,GAAD,OAAKnM,EAASO,OAAd,+BAChB6L,0BAA2B,SAACC,GAAD,gBAAmBrM,EAASO,OAA5B,uCAAiE8L,EAAjE,gBAE/BO,OAAQ,CACJlE,UAAU,GAAD,OAAK1I,EAASO,OAAd,wBACTgM,YAAY,GAAD,OAAKvM,EAASO,OAAd,0BACXiM,iBAAiB,GAAD,OAAKxM,EAASO,OAAd,gCAChBsD,aAAc,SAAC4I,GAAD,gBAAuBzM,EAASO,OAAhC,wCAAsEkM,IACpF9B,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,iCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,yBACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,8BACdqK,UAAU,GAAD,OAAK5K,EAASO,OAAd,wBACTsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,6BACd8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,sBACPyK,6BAA6B,GAAD,OAAKhL,EAASO,OAAd,4CAC5B0K,8BAA8B,GAAD,OAAKjL,EAASO,OAAd,6CAC7B2K,6BAA6B,GAAD,OAAKlL,EAASO,OAAd,4CAC5B4K,4BAA4B,GAAD,OAAKnL,EAASO,OAAd,2CAC3BgL,sBAAsB,GAAD,OAAKvL,EAASO,OAAd,qCACrB+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,oCACpBuK,sBAAsB,GAAD,OAAK9K,EAASO,OAAd,2CACrBkL,iBAAiB,GAAD,OAAKzL,EAASO,OAAd,gCAEpBsM,oBAAqB,CACjBV,iBAAiB,GAAD,OAAKnM,EAASO,OAAd,+BAChB6L,0BAA2B,SAACC,GAAD,gBAAmBrM,EAASO,OAA5B,uCAAiE8L,EAAjE,gBAE/BS,oBAAqB,CACjBC,eAAe,GAAD,OAAK/M,EAASO,OAAd,uCACdyM,sBAAsB,GAAD,OAAKhN,EAASO,OAAd,+CACrByI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,kCACT0M,cAAc,GAAD,OAAKjN,EAASO,OAAd,0CACb2M,UAAU,GAAD,OAAKlN,EAASO,OAAd,mCACT4M,iBAAiB,GAAD,OAAKnN,EAASO,OAAd,0CAChB6M,kBAAkB,GAAD,OAAKpN,EAASO,OAAd,0CACjB8M,mBAAmB,GAAD,OAAKrN,EAASO,OAAd,4CAClB+M,uBAAuB,GAAD,OAAKtN,EAASO,OAAd,gDACtBgN,iBAAiB,GAAD,OAAKvN,EAASO,OAAd,0CAChBiN,2BAA2B,GAAD,OAAKxN,EAASO,OAAd,qDAC1BkN,+BAA+B,GAAD,OAAKzN,EAASO,OAAd,yDAC9BmN,yBAAyB,GAAD,OAAK1N,EAASO,OAAd,oDAE5BoN,oBAAqB,CACjBZ,eAAe,GAAD,OAAK/M,EAASO,OAAd,qCACdyM,sBAAsB,GAAD,OAAKhN,EAASO,OAAd,6CACrByI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,gCACT0M,cAAc,GAAD,OAAKjN,EAASO,OAAd,wCACb2M,UAAU,GAAD,OAAKlN,EAASO,OAAd,iCACT4M,iBAAiB,GAAD,OAAKnN,EAASO,OAAd,wCAChB6M,kBAAkB,GAAD,OAAKpN,EAASO,OAAd,wCACjB8M,mBAAmB,GAAD,OAAKrN,EAASO,OAAd,0CAClB+M,uBAAuB,GAAD,OAAKtN,EAASO,OAAd,8CACtBgN,iBAAiB,GAAD,OAAKvN,EAASO,OAAd,wCAChBiN,2BAA2B,GAAD,OAAKxN,EAASO,OAAd,mDAC1BkN,+BAA+B,GAAD,OAAKzN,EAASO,OAAd,uDAC9BmN,yBAAyB,GAAD,OAAK1N,EAASO,OAAd,kDAE5BqN,WAAY,CACRhD,UAAU,GAAD,OAAK5K,EAASO,OAAd,yBACTsN,aAAa,GAAD,OAAK7N,EAASO,OAAd,kBACZwM,eAAe,GAAD,OAAK/M,EAASO,OAAd,8BACd2M,UAAW,SAACY,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,IACrEC,aAAc,SAACD,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,aACdE,iBAAkB,SAACF,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,mBAClBG,gBAAiB,SAACH,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,kBACjBI,kBAAkB,GAAD,OAAKlO,EAASO,OAAd,kCACjB4N,mBAAmB,GAAD,OAAKnO,EAASO,OAAd,kCAClB6N,oBAAoB,GAAD,OAAKpO,EAASO,OAAd,mCACnB8N,eAAgB,SAACP,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,iBAChBQ,UAAW,SAACR,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,YACXS,YAAa,SAACT,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,cACbU,mBAAoB,SAACV,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,sBACpBW,yBAA0B,SAACX,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,oBAC1Bb,cAAc,GAAD,OAAKjN,EAASO,OAAd,gCACbmO,WAAY,SAACZ,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,kBACZa,SAAU,SAACb,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,WACVc,cAAe,SAACC,GAAD,gBAAyB7O,EAASO,OAAlC,0BAA0DsO,EAA1D,gBACfC,mBAAmB,GAAD,OAAK9O,EAASO,OAAd,+BAClBwO,0BAA0B,GAAD,OAAK/O,EAASO,OAAd,sCACzByO,qBAAsB,SAAClB,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,sBACtBmB,2BAA4B,SAACnB,GAAD,gBACrB9N,EAASO,OADY,0BACYuN,EADZ,8BAE5BoB,+BAAgC,SAACpB,GAAD,gBACzB9N,EAASO,OADgB,0BACQuN,EADR,kCAEhCqB,eAAgB,SAACrB,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,oBAChBsB,mBAAmB,GAAD,OAAKpP,EAASO,OAAd,iCAClB8O,aAAc,SAACvB,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,0BACdwB,4BAA6B,SAACxB,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,mBAC7ByB,yBAAyB,GAAD,OAAKvP,EAASO,OAAd,wCACxBiP,wBAAwB,GAAD,OAAKxP,EAASO,OAAd,0CACvBkP,iBAAkB,SAAC3B,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,aAClB4B,eAAgB,SAAC5B,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,wBAChB6B,mBAAoB,SAAC7B,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,4BACpB8B,UAAW,SAAC9B,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,iBACX+B,YAAa,SAAC/B,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,mBACbgC,kBAAmB,SAAChC,GAAD,gBACZ9N,EAASO,OADG,0BACqBuN,EADrB,kCAEnBiC,WAAY,SAACjC,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,kBACZkC,mBAAoB,SAACnB,GAAD,gBAAyB7O,EAASO,OAAlC,iCAAiEsO,EAAjE,eACpBoB,8BAA+B,SAACpB,GAAD,gBACxB7O,EAASO,OADe,iCACgBsO,EADhB,0BAE/BqB,WAAY,SAACC,GAAD,gBAAwBnQ,EAASO,OAAjC,iCAAgE4P,EAAhE,aACZC,qBAAsB,SAACD,GAAD,gBACfnQ,EAASO,OADM,iCACyB4P,EADzB,uBAEtBE,eAAgB,SAACvC,EAAkBe,EAAkByB,GAArC,gBACTtQ,EAASO,OADA,0BACwBuN,EADxB,oBAC4Ce,EAD5C,oBACgEyB,EADhE,UAEhBC,gBAAiB,SAACzC,EAAkBe,GAAnB,gBACV7O,EAASO,OADC,0BACuBuN,EADvB,oBAC2Ce,EAD3C,qBAEjB2B,WAAY,SAAC1C,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,gBACZ2C,gBAAiB,SAAC5B,GAAD,gBAAyB7O,EAASO,OAAlC,iCAAiEsO,EAAjE,YACjB6B,oBAAqB,SAACP,GAAD,gBACdnQ,EAASO,OADK,iCAC0B4P,EAD1B,yBAErBQ,gBAAiB,SAAC7C,EAAkBqC,GAAnB,gBACVnQ,EAASO,OADC,0BACuBuN,EADvB,mBAC0CqC,EAD1C,gBAEjBS,aAAc,SAAC9C,EAAkBqC,EAAiBU,GAApC,gBACP7Q,EAASO,OADF,0BAC0BuN,EAD1B,mBAC6CqC,EAD7C,yBACqEU,EADrE,kBAEdC,WAAY,SAAChD,EAAkBqC,EAAiBY,GAApC,gBACL/Q,EAASO,OADJ,0BAC4BuN,EAD5B,kBAC8CqC,EAD9C,wBACqEY,IACjFC,aAAc,SAAClD,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,kCACdmD,mBAAoB,SAACnD,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,wBACpBoD,YAAa,SAACpD,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,WACbqD,mBAAoB,SAACrD,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,wBACpBsD,cAAe,SAACjB,GAAD,gBAAwBnQ,EAASO,OAAjC,iCAAgE4P,EAAhE,wBACfkB,wBAAyB,SAAClB,GAAD,gBAClBnQ,EAASO,OADS,iCACsB4P,EADtB,kCAEzBmB,eAAgB,SAACzC,GAAD,gBACT7O,EAASO,OADA,iCAC+BsO,EAD/B,0BAEhB0C,2BAA4B,SAAC1C,GAAD,gBACrB7O,EAASO,OADY,iCACmBsO,EADnB,qCAE5B2C,eAAgB,SAAC1D,EAAkBe,GAAnB,gBACT7O,EAASO,OADA,0BACwBuN,EADxB,mBAC2Ce,EAD3C,YAEhB4C,kBAAmB,SAAC3D,EAAkBqC,GAAnB,gBACZnQ,EAASO,OADG,0BACqBuN,EADrB,kBACuCqC,IAC1DuB,YAAa,SAAC5D,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,WACb6D,YAAa,SAAC7D,EAAkBqC,GAAnB,gBACNnQ,EAASO,OADH,0BAC2BuN,EAD3B,kBAC6CqC,EAD7C,gBAEb/C,kBAAkB,GAAD,OAAKpN,EAASO,OAAd,iCACjBqR,yBAAyB,GAAD,OAAK5R,EAASO,OAAd,iCACxByM,sBAAsB,GAAD,OAAKhN,EAASO,OAAd,oCACrBsR,gBAAiB,SAAC/D,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,8BACjBgE,oBAAqB,SAACjD,GAAD,gBACd7O,EAASO,OADK,kCAC2BsO,EAD3B,0BAErBkD,qBAAsB,SAAClD,GAAD,gBACf7O,EAASO,OADM,kCAC0BsO,EAD1B,yBAEtBmD,aAAc,SAAClE,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,IACxEmE,gBAAiB,SAACnE,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,iBACjBoE,gBAAiB,SAACpE,GAAD,gBAAyB9N,EAASO,OAAlC,0BAA0DuN,EAA1D,iBACjBqE,aAAc,SAACrE,EAAkBsE,GAAnB,gBACPpS,EAASO,OADF,0BAC0BuN,EAD1B,oBAC8CsE,EAD9C,YAEdC,cAAe,SAACxD,GAAD,gBAAyB7O,EAASO,OAAlC,kCAAkEsO,EAAlE,gBACfyD,UAAW,SAACxE,EAAkBe,GAAnB,gBACJ7O,EAASO,OADL,0BAC6BuN,EAD7B,oBACiDe,EADjD,WAGf7K,OAAQ,CACJ0E,UAAU,GAAD,OAAK1I,EAASO,OAAd,wBACToK,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,iCACtBuF,WAAW,GAAD,OAAK9F,EAASO,OAAd,yBACVgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,8BACd+J,qBAAqB,GAAD,OAAKtK,EAASO,OAAd,oCACpBgS,sBAAsB,GAAD,OAAKvS,EAASO,OAAd,qCACrBsK,eAAe,GAAD,OAAK7K,EAASO,OAAd,6BACdyI,UAAU,GAAD,OAAKhJ,EAASO,OAAd,wBACTwK,qBAAqB,GAAD,OAAK/K,EAASO,OAAd,wBACpBiS,WAAW,GAAD,OAAKxS,EAASO,OAAd,yBACV8K,QAAQ,GAAD,OAAKrL,EAASO,OAAd,uBAEXkS,aAAc,CACVC,QAAS,SAACC,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,IACnEC,cAAe,SAACC,GAAD,gBAA2B7S,EAASO,OAApC,uCAAyEsS,IACxFC,qBAAsB,SAACH,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,oBACtBI,kBAAkB,GAAD,OAAK/S,EAASO,OAAd,uCACjByS,iBAAiB,GAAD,OAAKhT,EAASO,OAAd,6BAChB0S,kBAAkB,GAAD,OAAKjT,EAASO,OAAd,8BACjB2S,gBAAiB,SAACC,GAAD,gBACVnT,EAASO,OADC,0CACuC4S,IACxDC,eAAe,GAAD,OAAKpT,EAASO,OAAd,2BACd8S,SAAS,GAAD,OAAKrT,EAASO,OAAd,oBACR+S,qCAAsC,SAACX,EAAgBQ,GAAjB,gBAC/BnT,EAASO,OADsB,4BACIoS,EADJ,gCACkCQ,IACxEI,0CAA2C,SAACZ,EAAgBxC,GAAjB,gBACpCnQ,EAASO,OAD2B,4BACDoS,EADC,yBACsBxC,IACjEqD,wCAAyC,SAACb,EAAgB5B,GAAjB,gBAClC/Q,EAASO,OADyB,4BACCoS,EADD,wBACuB5B,IAChE0C,iBAAkB,SAACd,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,cAClBe,0BAA2B,SAACf,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,uBAC3BgB,cAAe,SAAChB,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,WACfiB,cAAe,SAACjB,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,WACfkB,gBAAgB,GAAD,OAAK7T,EAASO,OAAd,gCACfuT,yBAA0B,SAACnB,GAAD,gBACnB3S,EAASO,OADU,4BACgBoS,EADhB,8BAE1BoB,iBAAkB,SAACpB,GAAD,gBAAuB3S,EAASO,OAAhC,4BAA0DoS,EAA1D,iBAClBqB,cAAc,GAAD,OAAKhU,EAASO,OAAd,mCACb0T,kBAAmB,SAACtB,EAAgBrC,GAAjB,gBACZtQ,EAASO,OADG,4BACuBoS,EADvB,oBACyCrC,EADzC,SAEnB4D,oBAAqB,SAACvB,EAAgBrC,GAAjB,gBACdtQ,EAASO,OADK,4BACqBoS,EADrB,oBACuCrC,EADvC,WAErB6D,mBAAoB,SAACxB,EAAgBrC,GAAjB,gBACbtQ,EAASO,OADI,4BACsBoS,EADtB,oBACwCrC,EADxC,UAEpB8D,6BAA8B,SAACzB,EAAgBrC,GAAjB,gBACvBtQ,EAASO,OADc,4BACYoS,EADZ,oBAC8BrC,EAD9B,qBAE9B+D,6BAA8B,SAAC1B,EAAgBrC,GAAjB,gBACvBtQ,EAASO,OADc,4BACYoS,EADZ,oBAC8BrC,EAD9B,qBAE9BgE,qBAAqB,GAAD,OAAKtU,EAASO,OAAd,oCACpBgU,4BAA4B,GAAD,OAAKvU,EAASO,OAAd,2CAC3BiU,0BAA2B,SAAC7B,EAAgB5B,GAAjB,gBACpB/Q,EAASO,OADW,4BACeoS,EADf,wBACqC5B,EADrC,YAE3B0D,0BAA2B,SAAC9B,EAAgBxC,GAAjB,gBACpBnQ,EAASO,OADW,4BACeoS,EADf,yBACsCxC,EADtC,YAE3BuE,iCAAkC,SAAC/B,EAAgBQ,GAAjB,gBAC3BnT,EAASO,OADkB,4BACQoS,EADR,gCACsCQ,EADtC,YAElCwB,WAAY,SAACC,GAAD,gBAAwB5U,EAASO,OAAjC,uCAAsEqU,KAEtF3Q,QAAS,CACL2G,UAAU,GAAD,OAAK5K,EAASO,OAAd,2BACTmI,UAAU,GAAD,OAAK1I,EAASO,OAAd,2BACTsU,SAAS,GAAD,OAAK7U,EAASO,OAAd,8CACRgI,eAAe,GAAD,OAAKvI,EAASO,OAAd,iCACduF,WAAW,GAAD,OAAK9F,EAASO,OAAd,4BACVoK,uBAAuB,GAAD,OAAK3K,EAASO,OAAd,oCACtBuU,sBAAsB,GAAD,OAAK9U,EAASO,OAAd,uCACrBwU,wBAAyB,SAACC,EAAeC,EAAsBC,GAAtC,gBAClBlV,EAASO,OADS,wCAC6ByU,EAD7B,YACsCC,EADtC,YACsDC,IAC/EC,+BAAgC,SAACH,EAAeC,EAAsBC,GAAtC,gBACzBlV,EAASO,OADgB,wCACsByU,EADtB,YAC+BC,EAD/B,YAC+CC,EAD/C,aAEhC7J,QAAQ,GAAD,OAAKrL,EAASO,OAAd,yBACPkL,iBAAiB,GAAD,OAAKzL,EAASO,OAAd,mCAEpB6U,wBAAyB,SAACC,GAAD,gBAA2BrV,EAASO,OAApC,qCAAuE8U,EAAvE,WACzBC,gBAAgB,GAAD,OAAKtV,EAASO,OAAd,oBACfgV,mBAAoB,SAACF,GAAD,gBAA2BrV,EAASO,OAApC,qCAAuE8U,IAC3FG,oBAAoB,GAAD,OAAKxV,EAASO,OAAd,qBACnBkV,iBAAiB,GAAD,OAAKzV,EAASO,OAAd,qBAGPmV,EAAmB,CAC5BC,YAAa,CACTC,mBAAoB,uCACpBC,cAAe,oDAEnBC,QAAS,CACLC,SAAU,wCACVC,QAAS,mCAEbC,UAAW,CACPF,SAAU,sCACVC,QAAS,mCACTE,SAAU,sCACVC,QAAS,wBAEbC,MAAO,CACHD,QAAS,4BACTE,QAAS,uDAEbC,cACI,wIAGKC,EAAQ,CACjBC,YAAY,GAAD,OAAKxW,EAASC,SAAd,oCAGFwW,EAAS,CAClBC,aAAa,GAAD,OAAK1W,EAASC,SAAd,4BACZ0W,cAAc,GAAD,OAAK3W,EAASC,SAAd,8BAGJ2W,EAAU,CACnBC,MAAO,iBACPC,gBAAiB,0BAGfC,EAAmB,QACnBC,EAAe,SACfC,EAAoB,QACpBC,EAAgB,QAChBC,EAAgB,UAChBC,EAAgB,UAChBC,EAAgB,UAChBC,EAAiB,WACjBC,EAAgB,UAChBC,EAAgB,UAETC,EAAW,CACpBzV,UAAW,CACP0V,SAAS,GAAD,OAAKX,EAAL,aACRY,QAAQ,GAAD,OAAKZ,EAAL,YACPa,OAAO,GAAD,OAAKb,EAAL,WACNc,UAAU,GAAD,OAAKd,EAAL,cACTe,cAAc,GAAD,OAAKf,EAAL,kBACb3U,SAAS,GAAD,OAAK2U,EAAL,cAEZxU,MAAO,CACHwV,WAAW,GAAD,OAAKf,EAAL,eACVa,UAAU,GAAD,OAAKb,EAAL,cACTgB,eAAe,GAAD,OAAKhB,EAAL,mBACdU,SAAS,GAAD,OAAKV,EAAL,aACR5U,SAAS,GAAD,OAAK4U,EAAL,aACRiB,IAAI,GAAD,OAAKjB,EAAL,SAEP3U,WAAY,CACRqV,SAAS,GAAD,OAAKT,EAAL,aACRiB,SAAS,GAAD,OAAKjB,EAAL,aACRY,UAAU,GAAD,OAAKZ,EAAL,cACTkB,MAAM,GAAD,OAAKlB,EAAL,UACLa,cAAc,GAAD,OAAKb,EAAL,kBACb7U,SAAS,GAAD,OAAK6U,EAAL,cAEZxU,QAAS,CACL2V,QAAQ,GAAD,OAAKjB,EAAL,gBACPkB,YAAY,GAAD,OAAKlB,EAAL,iBACXmB,iBAAiB,GAAD,OAAKnB,EAAL,0BAChBoB,kBAAkB,GAAD,OAAKpB,EAAL,wBACjBqB,WAAW,GAAD,OAAKrB,EAAL,gBACVsB,eAAe,GAAD,OAAKtB,EAAL,qBACduB,eAAe,GAAD,OAAKvB,EAAL,uBACdpU,QAAQ,GAAD,OAAKoU,EAAL,YACPwB,MAAM,GAAD,OAAKxB,EAAL,cACLyB,OAAO,GAAD,OAAKzB,EAAL,gBACN0B,SAAS,GAAD,OAAK1B,EAAL,gBACR2B,kBAAkB,GAAD,OAAK3B,EAAL,uBACjBW,cAAc,GAAD,OAAKX,EAAL,kBACb/U,SAAS,GAAD,OAAK+U,EAAL,cAEZ9T,QAAS,CACL+U,QAAQ,GAAD,OAAKhB,EAAL,gBACPiB,YAAY,GAAD,OAAKjB,EAAL,iBACXkB,iBAAiB,GAAD,OAAKlB,EAAL,0BAChBmB,kBAAkB,GAAD,OAAKnB,EAAL,wBACjBoB,WAAW,GAAD,OAAKpB,EAAL,gBACVqB,eAAe,GAAD,OAAKrB,EAAL,qBACdsB,eAAe,GAAD,OAAKtB,EAAL,uBACduB,MAAM,GAAD,OAAKvB,EAAL,cACLwB,OAAO,GAAD,OAAKxB,EAAL,gBACNyB,SAAS,GAAD,OAAKzB,EAAL,gBACR0B,kBAAkB,GAAD,OAAK1B,EAAL,uBACjBU,cAAc,GAAD,OAAKV,EAAL,kBACbhV,SAAS,GAAD,OAAKgV,EAAL,aACRrU,QAAQ,GAAD,OAAKqU,EAAL,aAEX9T,QAAS,CACLP,QAAQ,GAAD,OAAKsU,EAAL,YACPmB,WAAW,GAAD,OAAKnB,EAAL,gBACVoB,eAAe,GAAD,OAAKpB,EAAL,qBACdkB,kBAAkB,GAAD,OAAKlB,EAAL,wBACjB0B,kBAAkB,GAAD,OAAK1B,EAAL,wBACjB2B,wBAAwB,GAAD,OAAK3B,EAAL,+BACvByB,kBAAkB,GAAD,OAAKzB,EAAL,uBACjBqB,eAAe,GAAD,OAAKrB,EAAL,uBACdgB,YAAY,GAAD,OAAKhB,EAAL,iBACXsB,MAAM,GAAD,OAAKtB,EAAL,cACLiB,iBAAiB,GAAD,OAAKjB,EAAL,0BAChBuB,OAAO,GAAD,OAAKvB,EAAL,gBACNwB,SAAS,GAAD,OAAKxB,EAAL,gBACRS,cAAc,GAAD,OAAKT,EAAL,kBACb4B,YAAY,GAAD,OAAK5B,EAAL,uBACX6B,aAAa,GAAD,OAAK7B,EAAL,kBACZ8B,cAAc,GAAD,OAAK9B,EAAL,mBACb+B,oBAAoB,GAAD,OAAK/B,EAAL,0BACnBgC,qBAAqB,GAAD,OAAKhC,EAAL,2BACpBiC,WAAW,GAAD,OAAKjC,EAAL,eACV3T,QAAQ,GAAD,OAAK2T,EAAL,cAEXrT,OAAQ,CACJ5B,SAAS,GAAD,OAAK8U,EAAL,aACRe,IAAI,GAAD,OAAKf,EAAL,QACH5S,YAAY,GAAD,OAAK4S,EAAL,gBACXqC,SAAS,GAAD,OAAKrC,EAAL,aACRQ,SAAS,GAAD,OAAKR,EAAL,aACRW,UAAU,GAAD,OAAKX,EAAL,cACTsC,OAAO,GAAD,OAAKtC,EAAL,WACNY,cAAc,GAAD,OAAKZ,EAAL,kBACbuC,oBAAoB,GAAD,OAAKvC,EAAL,0BACnBwC,cAAc,GAAD,OAAKxC,EAAL,oBACbyC,YAAY,GAAD,OAAKzC,EAAL,iBACX0C,eAAe,GAAD,OAAK1C,EAAL,oBACd2C,YAAY,GAAD,OAAK3C,EAAL,iBAEfjT,QAAS,CACL6V,eAAe,GAAD,OAAKxC,EAAL,oBACdyC,gBAAgB,GAAD,OAAKzC,EAAL,uBACfb,OAAO,GAAD,OAAKa,EAAL,iBACN0C,mBAAmB,GAAD,OAAK1C,EAAL,wBAClB2C,UAAU,GAAD,OAAK3C,EAAL,eACT4C,sBAAsB,GAAD,OAAK5C,EAAL,4BACrB6C,qBAAqB,GAAD,OAAK7C,EAAL,2BACpB8C,wBAAwB,GAAD,OAAK9C,EAAL,+BACvBI,SAAS,GAAD,OAAKJ,EAAL,mBACR+C,WAAW,GAAD,OAAK/C,EAAL,eACVU,eAAe,GAAD,OAAKV,EAAL,oBACdgD,cAAc,GAAD,OAAKhD,EAAL,8BAEjB3T,QAAS,CACL4W,cAAc,GAAD,OAAKhD,EAAL,mBACbiD,iBAAiB,GAAD,OAAKjD,EAAL,qBAChBkD,SAAS,GAAD,OAAKlD,EAAL,aACRmD,6BAA6B,GAAD,OAAKnD,EAAL,oCAC5BoD,wBAAwB,GAAD,OAAKpD,EAAL,+BACvBqD,6BAA6B,GAAD,OAAKrD,EAAL,oCAC5BsD,wBAAwB,GAAD,OAAKtD,EAAL,+BACvBuD,4BAA4B,GAAD,OAAKvD,EAAL,mCAC3BwD,uBAAuB,GAAD,OAAKxD,EAAL,8BACtByD,8BAA8B,GAAD,OAAKzD,EAAL,qCAC7B0D,yBAAyB,GAAD,OAAK1D,EAAL,gCACxB2D,oCAAoC,GAAD,OAAK3D,EAAL,2CACnC4D,+BAA+B,GAAD,OAAK5D,EAAL,sCAC9B6D,mBAAmB,GAAD,OAAK7D,EAAL,wBAClB8D,kBAAkB,GAAD,OAAK9D,EAAL,wBACjB+D,uBAAuB,GAAD,OAAK/D,EAAL,6BACtBgE,mBAAmB,GAAD,OAAKhE,EAAL,yBAClBiE,8BAA8B,GAAD,OAAKjE,EAAL,qCAC7BxU,QAAQ,GAAD,OAAKwU,EAAL,YACPkB,eAAe,GAAD,OAAKlB,EAAL,qBACdwB,kBAAkB,GAAD,OAAKxB,EAAL,wBACjByB,wBAAwB,GAAD,OAAKzB,EAAL,+BACvBuB,kBAAkB,GAAD,OAAKvB,EAAL,uBACjBc,YAAY,GAAD,OAAKd,EAAL,iBACXoB,MAAM,GAAD,OAAKpB,EAAL,cACLe,iBAAiB,GAAD,OAAKf,EAAL,0BAChBqB,OAAO,GAAD,OAAKrB,EAAL,gBACNsB,SAAS,GAAD,OAAKtB,EAAL,gBACRO,cAAc,GAAD,OAAKP,EAAL,kBACb0B,YAAY,GAAD,OAAK1B,EAAL,uBACX2B,aAAa,GAAD,OAAK3B,EAAL,kBACZ4B,cAAc,GAAD,OAAK5B,EAAL,mBACb6B,oBAAoB,GAAD,OAAK7B,EAAL,0BACnB8B,qBAAqB,GAAD,OAAK9B,EAAL,2BACpB+B,WAAW,GAAD,OAAK/B,EAAL,eACV7T,QAAQ,GAAD,OAAK6T,EAAL,cAEXxT,QAAS,CACLwW,cAAc,GAAD,OAAK/C,EAAL,mBACbgD,iBAAiB,GAAD,OAAKhD,EAAL,qBAChBiD,SAAS,GAAD,OAAKjD,EAAL,aACRkD,6BAA6B,GAAD,OAAKlD,EAAL,oCAC5BmD,wBAAwB,GAAD,OAAKnD,EAAL,+BACvBoD,6BAA6B,GAAD,OAAKpD,EAAL,oCAC5BqD,wBAAwB,GAAD,OAAKrD,EAAL,+BACvBsD,4BAA4B,GAAD,OAAKtD,EAAL,mCAC3BuD,uBAAuB,GAAD,OAAKvD,EAAL,8BACtBwD,8BAA8B,GAAD,OAAKxD,EAAL,qCAC7ByD,yBAAyB,GAAD,OAAKzD,EAAL,gCACxB0D,oCAAoC,GAAD,OAAK1D,EAAL,2CACnC2D,+BAA+B,GAAD,OAAK3D,EAAL,sCAC9B4D,mBAAmB,GAAD,OAAK5D,EAAL,wBAClB6D,kBAAkB,GAAD,OAAK7D,EAAL,wBACjB8D,uBAAuB,GAAD,OAAK9D,EAAL,6BACtB+D,mBAAmB,GAAD,OAAK/D,EAAL,yBAClBgE,8BAA8B,GAAD,OAAKhE,EAAL,qCAC7BzU,QAAQ,GAAD,OAAKyU,EAAL,YACPiB,eAAe,GAAD,OAAKjB,EAAL,qBACduB,kBAAkB,GAAD,OAAKvB,EAAL,wBACjBwB,wBAAwB,GAAD,OAAKxB,EAAL,+BACvBsB,kBAAkB,GAAD,OAAKtB,EAAL,uBACjBa,YAAY,GAAD,OAAKb,EAAL,iBACXmB,MAAM,GAAD,OAAKnB,EAAL,cACLc,iBAAiB,GAAD,OAAKd,EAAL,0BAChBoB,OAAO,GAAD,OAAKpB,EAAL,gBACNqB,SAAS,GAAD,OAAKrB,EAAL,gBACRM,cAAc,GAAD,OAAKN,EAAL,kBACbyB,YAAY,GAAD,OAAKzB,EAAL,uBACX0B,aAAa,GAAD,OAAK1B,EAAL,kBACZ2B,cAAc,GAAD,OAAK3B,EAAL,mBACb4B,oBAAoB,GAAD,OAAK5B,EAAL,0BACnB6B,qBAAqB,GAAD,OAAK7B,EAAL,2BACpB8B,WAAW,GAAD,OAAK9B,EAAL,eACV9T,QAAQ,GAAD,OAAK8T,EAAL,cAEXiE,sBAAuB,mCACvBC,cAAe,0BACfC,eAAgB,2BAChB5a,QAAS,kBACT6a,gBAAiB,6BACjBC,oBAAqB,8BACrBC,QAAS,aACTC,aAAc,yBAYLC,EAA+B,CACxC,CACIC,OAAQC,IAAUC,UAClBnH,MAAOlU,EAAYkB,UAAU/G,KAC7BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUG,WAClBrH,MAAOlU,EAAYuB,WAAWpH,KAC9BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUI,MAClBF,qBAAqB,GAEzB,CACIH,OAAQC,IAAUK,MAClBvH,MAAOlU,EAAYyB,MAAMtH,KACzBmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUM,KAClBJ,qBAAqB,GAEzB,CACIH,OAAQC,IAAUO,SAClBzH,MAAOlU,EAAYkD,OAAO/I,KAC1BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUQ,OAClBN,qBAAqB,GAEzB,CACIH,OAAQC,IAAUxR,OAClBsK,MAAOlU,EAAY2B,QAAQxH,KAC3BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAU5Q,OAClB0J,MAAOlU,EAAYuC,QAAQpI,KAC3BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAU1Q,OAClBwJ,MAAOlU,EAAYwC,QAAQrI,KAC3BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAU5P,OAClB0I,MAAOlU,EAAY6C,QAAQ1I,KAC3BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUtP,OAClBoI,MAAOlU,EAAYiD,QAAQ9I,KAC3BmhB,qBAAqB,GAEzB,CACIH,OAAQC,IAAUS,QAClB3H,MAAOlU,EAAYmD,QAAQhJ,KAC3BmhB,qBAAqB,IAIhBQ,EAAuC,CAChDC,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUI,QAGDC,EAA2C,CACpDL,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUM,QAGDC,EAA4C,CACrDP,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUM,OACVN,IAAUQ,cAGDC,EAAwC,CACjDT,IAAUC,MACVD,IAAUE,cACVF,IAAUG,oBAGDO,EAAwC,CACjDV,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUW,QAGDC,EAAwC,CACjDZ,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUW,QAGDE,EAAwC,CACjDb,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUW,QAGDG,EAAwC,CACjDd,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUW,QAGDI,EAAwC,CACjDf,IAAUC,MACVD,IAAUE,cACVF,IAAUG,mBACVH,IAAUW,QAGDK,GAAyC,CAClDhB,IAAUE,cACVF,IAAUG,mBACVH,IAAUiB,IAGDC,IAAa,mBACrBlB,IAAUmB,KAAO,kBADI,cAErBnB,IAAUI,OAAS,UAFE,cAGrBJ,IAAUC,MAAQ,SAHG,cAIrBD,IAAUE,cAAgB,QAJL,cAKrBF,IAAUG,mBAAqB,eALV,cAMrBH,IAAUM,OAAS,UANE,cAOrBN,IAAUW,OAAS,UAPE,cAQrBX,IAAUQ,aAAe,WARJ,cASrBR,IAAUiB,GAAK,MATM,GAYbG,IAAkB,mBAC1BpB,IAAUmB,KAAO,QADS,cAE1BnB,IAAUI,OAAS,UAFO,cAG1BJ,IAAUC,MAAQ,SAHQ,cAI1BD,IAAUE,cAAgB,QAJA,cAK1BF,IAAUG,mBAAqB,OALL,cAM1BH,IAAUM,OAAS,UANO,cAO1BN,IAAUW,OAAS,UAPO,cAQ1BX,IAAUQ,aAAe,WARC,cAS1BR,IAAUiB,GAAK,MATW,GAYlBI,GAAe,CACxBC,aAAc,qBACdC,aAAc,iBAGLC,GAAW,CACpBC,QAAS,UACTC,IAAK,MACLC,MAAO,QACPC,KAAM,OACNC,QAAS,UACTC,UAAW,YACXC,oBAAqB,KACrBC,OAAQ,SACRC,KAAM,OACNC,SAAU,YACVC,QAAS,UACTC,QAAS,gBACTC,SAAU,WACVC,aAAc,gBACdC,YAAa,cACbC,eAAgB,aAChBC,UAAW,YACXC,QAAS,UACTC,OAAQ,SACRC,WAAY,6BACZC,cAAe,iBACfC,OAAQ,SACRC,IAAK,MACLC,MAAO,QACPC,KAAM,OACNC,YAAa,iBACbC,eAAgB,aAChBC,aAAc,gBACdC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,QAAS,WAGAC,GAAmB,CAC5BC,eAAgB,KAChBC,kBAAmB,GACnBC,yBAA0B,EAC1BC,yBAA0B,EAC1BC,yBAA0B,EAC1BC,yBAA0B,GAC1BC,yBAA0B,GAC1BC,yBAA0B,GAC1BC,0BAA2B,GAC3BC,2BAA4B,IAC5BC,WAAY,IACZC,oBAAqB,GACrBC,oBAAqB,GACrBC,oBAAqB,IAWZC,GAAe,uD,oCCzmC5B,2JAGaC,EAAqBC,OAAOC,UAAUC,YAAc/hB,IACpDgiB,EAAqBH,OAAOC,UAAUC,YAAc9hB,IAEpDgiB,EAAqB,SAACC,GAC/B,GAAIN,GAAsB3hB,IACtB,IAAK,IAAD,EAEA,UAAA4hB,OAAOM,0BAAP,SAA2BC,YAAYF,GACzC,MAAOznB,GACL4nB,QAAQC,IAAI,oDAAqD7nB,KAKhE8nB,EAAuB,SAACC,EAAoBC,GACrDR,EACIS,IAAYC,YAAZ,qCAEiBH,EAFjB,uCAGkBC,EAHlB,mB,iCCnBHrF,G,SAAAA,O,eAAAA,I,iCAAAA,I,2CAAAA,I,iBAAAA,I,mBAAAA,I,mBAAAA,I,oBAAAA,I,gCAAAA,I,cAAAA,M,KAiBUA,O,oGCAAwF,IATA,SAACC,GACZ,IAAMtvB,EAAQuvB,cACd,EAA2DD,EAAnDE,YAAR,MAAe,EAAf,IAA2DF,EAAzCG,oBAAlB,SAAwCC,EAAmBJ,EAAnBI,MAAUC,EAAlD,YAA2DL,EAA3D,GAEMM,EAAYH,EAAeD,EAAOxvB,EAAME,QAAQsvB,GAEtD,OAAO,iCAAKE,MAAK,aAAItvB,OAAQwvB,EAAWhkB,MAAOgkB,EAAWC,KAAM,YAAeH,IAAaC,M,kCCd3FG,G,SAAAA,O,qBAAAA,I,aAAAA,I,uBAAAA,I,2BAAAA,I,uCAAAA,I,6BAAAA,I,iCAAAA,I,2BAAAA,I,yBAAAA,I,yBAAAA,I,oBAAAA,M,KAcUA,O,+GCZMC,EAIjB,WAAYC,EAAcxjB,GAAyC,IAAD,gCAHzDwjB,UAGyD,OAFzDxjB,WAEyD,OAK3DyjB,iBAAmB,WACtB,OAAO,EAAKC,eAAe,EAAKF,KAAM,EAAKxjB,OAAO2jB,QANY,KAS1DD,eAAiB,SAACF,EAAcxjB,GACpC,MAAqB,kBAAVA,GAAsBA,EAAM4jB,OAAS,EAAS,GAAN,OAAUJ,EAAV,YAAkBxjB,GAC3C,kBAAVA,GACU,mBAAVA,EAD0B,GAAN,OAAUwjB,EAAV,YAAkBxjB,EAAM6jB,YAGrD,IAbPC,KAAKN,KAAOA,EACZM,KAAK9jB,MAAQA,GAgBd,SAAS+jB,EAA8BrB,GAC1C,GAAsB,qBAAXA,GAA4C,IAAlBA,EAAOkB,OAAc,MAAO,GAEjE,IAAII,EAAwB,GAS5B,OARAtB,EAAOuB,SAAQ,SAACC,GACZ,IAAMC,EAAaD,EAAMT,mBAEC,IAAtBU,EAAWP,QAEfI,EAAYI,KAAKD,MAGM,IAAvBH,EAAYJ,OAAqB,GAE/B,IAAN,OAAWI,EAAYK,KAAK,KAAKV,U,iCCtChCjH,G,SAAAA,O,yBAAAA,I,iBAAAA,I,2BAAAA,I,eAAAA,I,oBAAAA,I,kBAAAA,I,4BAAAA,I,wBAAAA,I,oBAAAA,I,oBAAAA,I,oBAAAA,I,oBAAAA,I,oBAAAA,I,wCAAAA,I,uBAAAA,M,KAkBUA,O,8BClBf,sGAAO,IAAMtb,EAAe,SAACkjB,GAEzB,OADwB,OAARA,GAAgBA,EAAIC,YAAY,OAASD,EAAIV,OAAS,EAE3DU,EAAIE,UAAU,EAAGF,EAAIV,OAAS,GAElCU,GAGEG,EAAiB,SAACC,GAO3B,OANAA,EAASA,EAAOC,QAAQ,IAAK,IAEVC,KAAKC,MACpB,KAAOC,UAAUJ,GAAQC,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAS,OAMrFI,EAAY,SAACT,GAAD,OAAiBA,EAAIK,QAAQ,sBAAuB,U,gCClB7E,6BASeK,IALK,WAChB,IAAMxxB,EAAQuvB,cACd,OAAOkC,YAAczxB,EAAMiL,YAAYymB,KAAK,QAAWC,aAAaC,a,sVCW5DC,E,wEAAAA,K,0DAAAA,E,iEAAAA,E,0BAAAA,M,KAcL,IAQMC,EAAsB,SAACC,GAChC,IAAIC,EAA4B,GAMhC,OAJAD,EAActB,SAAQ,SAACwB,GACnBD,EAAe,sBAAOA,GAAP,YAZY,SAACC,GAChC,IAAID,EAA4B,GAIhC,OAFAA,EAAgBpB,KAAKqB,EAAaC,gBAE3BF,EAOuCG,CAAoBF,QAG3DD,GAGEI,EAA6B,uCAAG,WACzCC,EACAC,EACAC,EACAC,EACAC,GALyC,SAAAC,EAAA,sEAOnCC,QAAQC,IAAI,CACdC,YAA8BR,EAAUC,EAAkBG,GAC1DK,YAA8BT,EAAUE,EAAkBC,KATrB,2CAAH,8DA8B7BO,EAAkB,SAC3BV,EACAW,EACAC,EACAX,EACAC,GAEA,GAAIU,EAAQ,CACR,IAAMC,EAA2BZ,EAAiBa,KAAI,SAACC,GACnD,OAAOA,EAAElB,iBAAmBc,EAArB,2BAA2CI,GAA3C,IAA8CC,MAAM,IAASD,KAExEE,YAA4BjB,EAAUa,OACnC,CACH,IAAMK,EAA2BhB,EAAiBY,KAAI,SAACC,GACnD,OAAOA,EAAElB,iBAAmBc,EAArB,2BAA2CI,GAA3C,IAA8CC,MAAM,IAASD,KAExEI,YAA4BnB,EAAUkB,KAIjCE,EAAwC,SACjDpB,EACAnf,EACAwgB,IAjCgD,SAChDrB,EACAqB,GAEArB,EAAS,CACLsB,KAAM9B,EAAkB+B,6BACxBC,QAASH,IA6BbI,CAAqCzB,EAAD,sBAAeqB,GAAf,CAA2CxgB,MAGtE6gB,EAAqC,SAC9C1B,EACAnf,EACA8gB,IAhD6C,SAAC3B,EAA+B2B,GAC7E3B,EAAS,CACLsB,KAAM9B,EAAkBoC,0BACxBJ,QAASG,IA+CbE,CAAkC7B,EAAD,sBAAe2B,GAAf,CAAwC9gB,MAGhEihB,EAA6B,uCAAG,WACzC9B,EACAE,EACAD,GAHyC,SAAAI,EAAA,sDAKzC0B,YAAoBtC,EAAoB,GAAD,mBAAKS,GAAL,YAA0BD,MAEjEkB,YAA4BnB,EAAU,IACtCgC,YAAiChC,EAAU,GAC3CiC,YAAmCjC,GAAU,GAE7CiB,YAA4BjB,EAAU,IACtCkC,YAAsClC,GAAU,GAZP,2CAAH,0DAe7BmC,EAAqC,SAC9CnC,EACAE,EACAD,GAEA,IAAMmC,EAAwBlC,EACzBY,KAAI,SAACC,GACF,OAAO,2BAAKA,GAAZ,IAAeH,QAAQ,OAGzByB,EAAuB,sBAAOD,GAAP,YAAiCnC,IAC9DgB,YAA4BjB,EAAUqC,GAEtClB,YAA4BnB,EAAU,IACtCgC,YAAiChC,EAAU,GAC3CiC,YAAmCjC,GAAU,GAE7C,IAAIsC,EAAqB7C,EAAoBS,GAEX,IAA9BoC,EAAmBvE,QAEvBwE,YAAWD,IAGFE,EAA0B,uCAAG,WACtCxC,EACAC,EACAC,EACAS,EACAC,GALsC,iBAAAP,EAAA,6DAOlCO,GACMC,EAA2BZ,EAAiBwC,QAAO,SAAC1B,GAAD,OAAOA,EAAElB,iBAAmBc,KACrFM,YAA4BjB,EAAUa,KAEhCK,EAA2BhB,EAAiBuC,QAAO,SAAC1B,GAAD,OAAOA,EAAElB,iBAAmBc,KACrFQ,YAA4BnB,EAAUkB,IAZJ,SAehCa,YAAoB,CAACpB,IAfW,2CAAH,8DAkB1B+B,EAAqB,SAAC1C,GAC/BA,EAAS,CACLsB,KAAM9B,EAAkBmD,cAInBC,EAAsB,SAACC,EAA2BC,GAC3D,OAAQA,EAAOxB,MACX,KAAK9B,EAAkBoC,0BACnB,OAAO,2BACAiB,GADP,IAEIlB,wBAAyBmB,EAAOtB,UAExC,KAAKhC,EAAkB+B,6BACnB,OAAO,2BACAsB,GADP,IAEIxB,2BAA4ByB,EAAOtB,UAE3C,KAAKhC,EAAkBmD,WACnB,OAAO,2BACAE,GADP,IAEIE,UAAWF,EAAME,WAEzB,QACI,OAAOF,K,mcCrGJ,SAASG,EAAI/F,GACxB,IACIgG,EAoBAhG,EApBAgG,IADJ,EAqBIhG,EAnBAiG,mBAFJ,MAEkB,GAFlB,EAGIC,EAkBAlG,EAlBAkG,IAHJ,EAqBIlG,EAjBAmG,cAJJ,MAIa,GAJb,IAqBInG,EAhBAoG,aALJ,MAKY,GALZ,EAMI9pB,EAeA0jB,EAfA1jB,MACAxL,EAcAkvB,EAdAlvB,OACAu1B,EAaArG,EAbAqG,QARJ,EAqBIrG,EAZAsG,kBATJ,MASiB,GATjB,IAqBItG,EAXAuG,sBAVJ,MAUqB,GAVrB,EAWIC,EAUAxG,EAVAwG,UAXJ,EAqBIxG,EATAvrB,kBAZJ,WAqBIurB,EARAyG,6BAbJ,MAa4B,EAb5B,EAcIC,EAOA1G,EAPA0G,gBAdJ,EAqBI1G,EANA2G,sBAfJ,MAeqB,IAfrB,EAiBIC,GAIA5G,EALA6G,SAKA7G,EAJA4G,WAjBJ,EAqBI5G,EAHA8G,iBAlBJ,MAkBgB,QAlBhB,IAqBI9G,EAFA+G,sBAnBJ,MAmBqB,QAnBrB,EAoBO1G,EApBP,YAqBIL,EArBJ,GAuBMgH,EA7GQ,SAACvyB,GAAD,OACdwyB,aAAW,SAACv2B,GACR,IASuCw2B,EAPjCC,EAAiC,CACnCr2B,OAAO,GAAD,OAAK,IAAL,KACNwL,MAAM,GAAD,OAAK,IAAL,KACL8qB,IAAI,IAAD,OAAMC,IAAN,KACHC,KAAK,IAAD,OAAMD,IAAN,MAMR,OAAOE,YAAa,CAChB5uB,KAAM,CACF6uB,SAAU,SACV5tB,QAAS,OACTD,SAAU,WACV,sBAAuB,CACnBC,QAAS,OACT2mB,KAAM,MAGdiG,UAAW,CACP,4CAA6C,CACzC,UAAW,CACP,oBAAoB,eACbW,MAKnBM,aAAc,CACV9tB,SAAU,WACV7I,OAAQ,OACRwL,MAAO,OACP8qB,IAAK,EACLE,KAAM,GAEVI,eAAgB,CACZ9tB,QAAS,OACTG,YA/B+BmtB,EA+BW,CAAC,SAAU,QAAS,MAAO,QA9BzEA,EAAWrD,KAAI,SAAC8D,GAAD,OAAcj3B,EAAMuM,YAAY2qB,OAAOD,MAAWpG,KAAK,QAgCtEsG,eAAgBpzB,EAAU,eAEb0yB,GAEP,QA6DEW,CAAUrzB,EAAVqzB,GACVp3B,EAAgBuvB,cAEP8H,EAA6DzB,EAApElG,MAA8B4H,EAAsC1B,EAAjDM,UAA8BqB,EAAzD,YAA4E3B,EAA5E,GAEM4B,ECvHK,SAA8BlI,GACzC,IAAQlvB,EAAkBkvB,EAAlBlvB,OAER,OAF0BkvB,EAAV1jB,MAEDxL,EDoHKq3B,CAAqB,CAAEr3B,SAAQwL,UAE7C8rB,EAAuBC,YAAyC,CAClE/rB,MAAO4rB,EACPp3B,OAAQ,IAGNw3B,EACF,cAACC,EAAA,EAAD,CACIxyB,UAAWrF,EAAMyE,OAAOW,SAASC,UACjCiF,QAAQ,OACRsB,MAAM,OACNxL,OAAQ,EACR81B,UAAWI,EAAQS,aACnBrH,MAAO,CACHoI,WAAYJ,EACZ9zB,gBAAiB5D,EAAMyE,OAAOW,SAASvB,MAAM7D,GAC7CuF,QAASswB,KAKfkC,EAAgB,SAACC,GACnB,IAAMC,EAAyBj4B,EAAMuM,YAAY2qB,OAAO,MAAO,CAC3DgB,SAAU,IACVC,OAAQn4B,EAAMuM,YAAY4rB,OAAOC,YAGrC,MAAO,CACH7yB,QAASyyB,EAAWnC,EAAiB,EACrCf,OAAO,QAAD,OAAUkD,EAAW,GAAK,EAA1B,OACN3uB,WAAY4uB,IAIdI,EACF,cAAC,IAAD,CACI/C,IAAKA,EACLC,YAAaA,EACb+C,MAAOvC,EACPwC,WAAY,CACR9C,OAAQA,EACRC,MAAOA,GANf,SASK,SAAC8C,EAAcR,EAAmBO,GAAlC,OACG,qBACIrC,UAAWuC,kBAAKnC,EAAQU,eAAgBV,EAAQS,aAAjC,eACVT,EAAQa,eAAiBrB,GAAc/xB,IAAei0B,IAF/D,SAMI,iCACI9B,UAAWoB,EACX5H,MAAK,yBACD9jB,MAAO,OACPxL,OAAQ,OACRg2B,UAAWA,EACXC,eAAgBA,GACb0B,EAAcC,IACdX,GAEP/B,IAAKkD,EACLhD,IAAKA,EACL5pB,MAAOA,EACPxL,OAAQA,EACRq1B,OAAQ8C,EAAW9C,OACnBC,MAAO6C,EAAW7C,OACd6B,SAOxB,OACI,6CACIrB,UAAWuC,kBAAKvC,EAAWI,EAAQruB,KAApB,eACVquB,EAAQR,UAAYA,KAErBnG,GAJR,aAMI,qBAAKD,MAAO,CAAEoI,WAAYJ,EAAsBt3B,OAAQ,EAAGyvB,KAAM,KAAjE,SACK8F,EACGiC,EACA5B,EACAqC,EAEA,cAAC,IAAD,CAAUj4B,OAAO,OAAOs4B,OAAQzC,EAAgB0C,MAAI,EAACpD,YAAaqC,EAAlE,SACKS,W,+HEvLZO,EAAwD,CACjEC,qBAAsB,CAClB9G,cAAe,GACf+G,YAAY,EACZnD,SAAS,EACToD,MAAO,EACPC,aAAa,GAEjBC,qBAAsB,CAClBlH,cAAe,GACf+G,YAAY,EACZnD,SAAS,GAEbuD,kBAAmB,CACflF,wBAAyB,GACzBN,2BAA4B,GAC5B0B,UAAU,I,wBCzCL+D,EAAU,SAAC,EAEpBhE,GAFmB,IACjB0D,EADiB,EACjBA,qBAAsBI,EADL,EACKA,qBAAsBC,EAD3B,EAC2BA,kBAD3B,MAGU,CAC7BL,qBAAsBO,YAAuBP,EAAsB1D,GACnE8D,qBAAsBI,YAAuBJ,EAAsB9D,GACnE+D,kBAAmBjE,YAAoBiE,EAAmB/D,K,uBCExDmE,EAAsBC,wBAAmF,CAC3GrE,MAAO0D,EACPvG,SAAU,kBAAM,QAGPmH,EAAiD,SAAC,GAAkB,IAAhBrD,EAAe,EAAfA,SAC7D,EAA0BsD,qBAAWN,EAASP,GAA9C,mBAAO1D,EAAP,KAAc7C,EAAd,KACMqH,EAASC,cACTC,EAAkBC,cAElBC,EAA0BC,iBAAO,GAsCvC,OArCAD,EAAwBE,QAAU9E,EAAM2D,qBAAqBE,MAE7DkB,qBAAU,cAAU,CAAC/E,EAAM+D,qBAAqBlH,gBAEhDkI,qBAAU,WACN,IAAMC,GAAa,IAAIC,KAClBC,QAAQV,EAAOW,mBAAoB,CAChCC,mBADgC,WAE5B,OAAOV,EAAgB1E,MAAMqF,UAAUC,OAAOC,eAGrDC,yBACAC,QAYL,OAVAT,EACKU,QACAC,MAAK,WACFX,EAAWY,GAAG,0BAA0B,WACpCzG,YAAiChC,EAAUyH,EAAwBE,QAAU,GAC7Ee,YAAuC1I,GAAU,SAGxD2I,OAAM,SAAC5tB,GAAD,OAAO0hB,QAAQC,IAAI,sBAAuB3hB,MAE9C,WACH8sB,EAAWe,UAEhB,IAEHhB,qBAAU,WACN7H,YACIC,EACA6C,EAAM+D,qBAAqBlH,cAC3BmD,EAAM2D,qBAAqB9G,iBAEhC,IAEI,cAACuH,EAAoB4B,SAArB,CAA8B1uB,MAAO,CAAE0oB,QAAO7C,YAA9C,SAA2D8D,KAGzDgF,EAAyB,kBAAMC,qBAAW9B,K,yIC3D3C+B,E,gEAAAA,O,qBAAAA,I,mBAAAA,I,oBAAAA,M,KAcZ,IAAMC,EAAgB/B,wBAA8B,CAChDgC,eAAe,EACfC,oBAAqB,aACrBC,mBAAoB,aACpBC,kBAAmB,aACnBC,YAAa,KAOJC,EAAwB,SAAC,GAA0B,IAAxBzF,EAAuB,EAAvBA,SAC9BxE,EAAWH,cACXzkB,EAAW8uB,cACjB,EAA0CC,oBAAkB,GAA5D,mBAAOP,EAAP,KAAsBQ,EAAtB,KACA,EAAsCD,mBAAmB,IAAzD,mBAAOH,EAAP,KAAoBK,EAApB,KACA,EAAsCF,oBAAkB,GAAxD,mBAAOG,EAAP,KAAoBC,EAApB,KAkBAC,2BAAgB,WACRpvB,IACAivB,EAAe,IACfD,GAAiB,MAEtB,CAAChvB,IAEJ,IAAMqvB,EAAkBC,mBAAQ,WAC5B,IAAMC,EAAYxvB,SAASyvB,cAAc,OACzCD,EAAU5M,MAAM9jB,MAAQ,QACxB0wB,EAAU5M,MAAMtvB,OAAS,QACzBk8B,EAAU5M,MAAMoH,SAAW,SAC3BwF,EAAU5M,MAAMzmB,SAAW,WAC3BqzB,EAAU5M,MAAMgH,IAAM,UACtB5pB,SAAS0vB,KAAKC,YAAYH,GAC1B,IAAM18B,EAAiB08B,EAAUI,YAAcJ,EAAUK,YAGzD,OAFA7vB,SAAS0vB,KAAKI,YAAYN,GAEtB18B,EAAiB,IAKtB,IAgBH,IAAMi9B,EAdN,WACI,MAA4Cf,mBAAShvB,SAAS0vB,KAAKM,aAAexO,OAAOyO,aAAzF,mBAAOF,EAAP,KAAuBG,EAAvB,KAUA,OATA/C,qBAAU,WACN,IAAMgD,EAAiB,IAAIC,gBAAe,WACtCF,EAAkBlwB,SAAS0vB,KAAKM,aAAexO,OAAOyO,gBAG1D,OADAE,EAAeE,QAAQrwB,SAAS0vB,MACzB,WACHS,EAAeG,UAAUtwB,SAAS0vB,SAEvC,IACIK,EAGYQ,GA0CvB,OAxCApD,qBAAU,WACN,IAAuB,IAAnB4C,IAA4C,IAAhBZ,EAAhC,CAEA,IAAMqB,EAAmBxwB,SAASywB,eAAe,qBAEjD,GAAIhC,GAUA,GATAzuB,SAAS0vB,KAAK9M,MAAMoH,SAAW,SAC/BhqB,SAAS0vB,KAAK9M,MAAM8N,YAAc,OAE9B7B,EAAY8B,SAASpC,EAAYqC,WACjC5wB,SAAS0vB,KAAK9M,MAAMzmB,SAAW,QAC/B6D,SAAS0vB,KAAK9M,MAAMtvB,OAAS,OAC7B0M,SAAS0vB,KAAK9M,MAAM9jB,MAAQ,SAG3B+lB,IAAaC,WAAU,CACxB,IAAKwK,GAAmBuB,UAAS,OAEjC7wB,SAAS0vB,KAAK9M,MAAMkO,aAAeD,UAAU,OAAS,OAClDL,IACAA,EAAiB5N,MAAMkO,aAAeD,UAAU,OAAS,cAGxC,IAAlBpC,GACPsC,YAAW,WACP/wB,SAAS0vB,KAAK9M,MAAMoH,SAAW,QAC/BhqB,SAAS0vB,KAAK9M,MAAM8N,YAAc,QAElC1wB,SAAS0vB,KAAK9M,MAAMzmB,SAAW,QAE1B60B,UACDhxB,SAAS0vB,KAAK9M,MAAMkO,aAAe,QAC/BN,IACAA,EAAiB5N,MAAMkO,aAAe,YAG/C,QAER,CAACrC,EAAeU,IAGf,cAACX,EAAcJ,SAAf,CACI1uB,MAAO,CACH+uB,gBACAC,oBArGgB,SAACuC,GACzBhC,GAAiB,GAEjBC,GAAe,SAACgC,GAAD,4BAAcA,GAAd,CAAoBD,QAmG3BtC,mBAhGe,SAACsC,GACxBhC,GAAiB,GAEjBC,GAAe,SAACgC,GAAD,OAAUA,EAAKlJ,QAAO,SAACpC,GAAD,OAAOA,IAAMqL,SA8F1CrC,kBA3Fc,SAACuC,GACvB/B,EAAe+B,IA2FPtC,eANR,SASKxF,KAKA+H,EAAmB,kBAAM9C,qBAAWE,K,gLCzFpC6C,EAAkC,CAC3CpqB,SAAU,CACNb,KAAM,GACNkrB,iBAAiB,EACjBC,YAAa,GACbC,cAAc,EACdC,iBAAiB,EACjBC,YAAY,EACZ7I,SAAS,EACT8I,YAAa,IAEjBhwB,YApC8C,CAC9CiwB,gBAAiB,CACbC,cAAelb,IAAOC,aACtBkb,eAAgB,EAChBC,gBAAiBpb,IAAOE,cACxBmb,UAAW,IAEfC,kBAAmB,CACfC,YAAa,GACbC,cAAe,GACfH,UAAW,IAEfN,YAAY,EACZ7I,SAAS,GAwBT4E,UArBsC,CACtCC,OAAQ,CACJC,YAAa,GACbyE,aAAc,IAElBV,YAAY,EACZ7I,SAAS,GAgBTwJ,qBAAsB,GACtBC,4BAA6B,CACzBC,MAAM,EACNC,gBAAgB,I,4CCnEXnG,EAAU,SAAC,EAEpBhE,GAFmB,IACjBphB,EADiB,EACjBA,SAAUtF,EADO,EACPA,YAAa8rB,EADN,EACMA,UAAW4E,EADjB,EACiBA,qBAAsBC,EADvC,EACuCA,4BADvC,MAQD,CAClBrrB,SAAUwrB,YAAgBxrB,EAAUohB,GACpC1mB,YAAa+wB,YAAmB/wB,EAAa0mB,GAC7CoF,UAAWkF,YAAiBlF,EAAWpF,GACvCgK,qBAAsBO,YAClBP,EACAhK,GAEJiK,4BAA6BO,YACzBP,EACAjK,K,oFCXFyK,EAAkBrG,wBAAwE,CAC5FrE,MAAOiJ,EACP9L,SAAU,kBAAM,QAGPwN,EAA6C,SAAC,GAAkB,IAAhB1J,EAAe,EAAfA,SACzD,EAA0BsD,qBAAWN,EAASgF,GAA9C,mBAAOjJ,EAAP,KAAc7C,EAAd,KACA,EAA4CyJ,mBAA6BhM,IAAmBgQ,SAA5F,mBAAOC,EAAP,KAAuBC,EAAvB,KAEMtG,EAASC,cAGTsG,GAFgBC,cAED,uCAAG,WAAOC,GAAP,SAAAzN,EAAA,mEAGZyN,EAAMC,OAAQhP,KAAKiP,UAAUF,EAAMC,MAAM3C,SAAS,UAHtC,uBAKZ6C,IAAMC,SAASC,QAAQC,cAAgBN,EAAMC,KALjC,SAMNM,YAAsBrO,GANhB,OAOZ2N,EAAkBlQ,IAAmB6Q,IAPzB,uDAUhB7R,QAAQC,IAAI,SACZiR,EAAkBlQ,IAAmB8Q,OAXrB,yDAAH,uDAerB3G,qBAAU,WAON,IALI5L,KAAsBI,OACtB3hB,SAAS+zB,iBAAiB,aAAcZ,GACxCvR,YAAmB,iBAGnBqR,IAAmBjQ,IAAmBgQ,UAAazR,MAAsBI,IAAqB,CAC9F,IAAMqS,EAAwC,CAC1CC,SAAUrH,EAAOsH,UAAUD,SAC3BE,UAAWvH,EAAOsH,UAAUE,mBAC5BhC,aAAc,GACdiC,YAAazH,EAAOsH,UAAUG,YAC9BC,SAAU,GACVC,aAAc,IAGlBC,YAAajP,EAAUyO,GAClBjG,MAAK,SAAC0G,GACHvB,EAAkBlQ,IAAmB6Q,OAExC3F,OAAM,SAAC9zB,GACJ4nB,QAAQC,IAAI,qBAAsB7nB,GAClC84B,EAAkBlQ,IAAmB8Q,UAGjD,OAAO,kBAAM9zB,SAAS00B,oBAAoB,aAAcvB,MACzD,CAACF,IAsBJ,OAAO,mCApBY,SAAC0B,GAChB,OAAQA,GACJ,KAAK3R,IAAmBgQ,QACpB,OAAQzR,MAAuBI,KAAsB,cAACiT,EAAA,EAAD,CAAQ99B,gBAAiB,mBAClF,KAAKksB,IAAmB8Q,MACpB,OAAO,cAACe,EAAA,EAAD,IACX,KAAK7R,IAAmB8R,UACpB,OACI,cAACC,EAAA,EAAD,CACIn3B,MAAK,+BACLrD,KAAM,8DAGlB,KAAKyoB,IAAmB6Q,GAGpB,MAFqB,qBAAdmB,aAA6BC,YAAUD,YAAW5M,EAAMnhB,SAASb,MAEjE,cAAC0sB,EAAgB1E,SAAjB,CAA0B1uB,MAAO,CAAE0oB,QAAO7C,YAA1C,SAAuD8D,KAIhE6L,CAAWjC,MAGZlG,EAAqB,kBAAMuB,qBAAWwE,K,0MC7FtCzG,EAAU,SAAC8I,EAA4B9M,GAA7B,OACnB+M,YAAqBD,EAAO9M,ICiDnBgN,EAAiD,CAC1D50B,OAAQ,GACR8sB,mBAAoB,GACpB+H,SAAU,CACNC,MAAO,GACPC,SAAU,GACVnuB,OAAQ,GACR7H,KAAM,IAEV00B,UAAW,CACPD,SAAU,GACVI,YAAa,GACboB,cAAe,GACfC,WAAY,GACZtB,mBAAoB,GACpBuB,kBAAmB,IAEvBC,eAAgB,CACZC,YAAa,CACTC,iBAAaC,IAGrBlN,SAAS,EACT6I,YAAY,EACZsE,kBAAmB,CAAEC,QAAS,cAAer4B,MAAO,0BACpDs4B,SAAU,GACVC,eAAgB,CACZv4B,MAAO,GACPw4B,KAAM,GACNC,YAAa,GACbC,aAAc,GACdC,YAAa,GACbC,MAAO,GACPC,OAAQ,GACRC,mBAAoB,GACpBC,OAAQ,GACRC,cAAe,CAAEC,MAAO,GAAIC,WAAY,IACxCC,WAAY,CAAEF,MAAO,GAAIC,WAAY,KAEzCE,0BAA2B,EAC3BC,eAAgB,CACZ3gB,MAAO,CACH4gB,SAAU,GACVC,UAAW,M,OCvFjBC,EAAuB3K,wBAA6E,CACtGrE,MAAOiN,EACP9P,SAAU,kBAAM,QAGP8R,EAAkD,SAAC,GAAkB,IAAhBhO,EAAe,EAAfA,SAC9D,EAA0BsD,qBAAWN,EAASgJ,GAA9C,mBAAOjN,EAAP,KAAc7C,EAAd,KACA,EAA4CyJ,mBAA6BhM,IAAmBgQ,SAA5F,mBAAOC,EAAP,KAAuBC,EAAvB,KAEA/F,qBAAU,WACNmK,YAA2B/R,GACtBwI,MAAK,SAACwJ,GACH/D,IAAMC,SAAS+D,QAAUD,EAAW92B,OACpC+yB,IAAMC,SAASgE,iBAAkB,EACjCvE,EAAkBlQ,IAAmB6Q,OAExC3F,OAAM,WACHgF,EAAkBlQ,IAAmB8Q,YAE9C,IAiBH,OAAO,mCAfY,SAACa,GAChB,OAAQA,GACJ,KAAK3R,IAAmBgQ,QACpB,OAAO,cAAC4B,EAAA,EAAD,IACX,KAAK5R,IAAmB8Q,MACpB,OAAO,cAACe,EAAA,EAAD,IACX,KAAK7R,IAAmB6Q,GACpB,OACI,cAACuD,EAAqBhJ,SAAtB,CAA+B1uB,MAAO,CAAE0oB,QAAO7C,YAA/C,SACK8D,KAMX6L,CAAWjC,MAGZpG,EAAY,kBAAMyB,qBAAW8I,GAAsBhP,OACnDsP,EAAoB,kBAAMpJ,qBAAW8I,GAAsB7R,W,wOCjBzDoS,EAxBU,SAAC,GAA0C,IAAxCC,EAAuC,EAAvCA,UAAWC,EAA4B,EAA5BA,UAAWx5B,EAAiB,EAAjBA,GAC9C,OACI,sBACIukB,MAAO,CACHxmB,QAAS,OACTD,SAAU,WACVG,eAAgB,MAChBwC,MAAO,OACPg5B,MAAOz5B,EAAK,MAAQ,SACpB05B,aAAc,MAPtB,UAUI,cAACxP,EAAA,EAAD,CAAKC,IAAKoP,EAAW94B,MAAO,KAAMxL,OAAQ,IAAKsvB,MAAO,CAAE9jB,MAAO,OAASoqB,iBAAe,IACvF,cAACX,EAAA,EAAD,CACIC,IAAKqP,EACL/4B,MAAO,IACPxL,OAAQ,IACRsvB,MAAO,CAAE9jB,MAAO,MAAO3C,SAAU,WAAY67B,OAAQ,MAAOF,MAAO,OACnE5O,iBAAe,Q,4CCDlB+O,EAA0B,gCAC1BC,EAAgB,EAEvBC,EAAcC,sBAChB,WAA+FC,GAAc,IAA1GC,EAAyG,EAAzGA,QAAS16B,EAAgG,EAAhGA,MAAO24B,EAAyF,EAAzFA,YAAagC,EAA4E,EAA5EA,KAAMC,EAAsE,EAAtEA,IAAKC,EAAiE,EAAjEA,OAAQC,EAAyD,EAAzDA,aAAcC,EAA2C,EAA3CA,eAAgBpsB,EAA2B,EAA3BA,GACvErZ,EAAgBuvB,cAChBpkB,EAAKsmB,YAAczxB,EAAMiL,YAAYymB,KAAK,OAEhD,EAAgCoK,mBAASwJ,EAAI,GAAGjsB,IAAhD,mBAAOqsB,EAAP,KAAiBC,EAAjB,KAEMC,EAAYvJ,mBAAQ,WACtB,OAAQgJ,IACCnc,IAAUS,QACJ,CACH+a,UAAU,GAAD,OAAKU,EAAL,8BACTT,UAAU,GAAD,OAAKS,EAAL,2BACTj6B,GAAIA,GAGD,CACHu5B,UAAU,GAAD,OAAKU,EAAL,6BACTT,UAAU,GAAD,OAAKS,EAAL,wBACTj6B,GAAIA,KAGjB,CAACk6B,IAwBJ,OAtBApL,qBAAU,WACN,IAAM4L,EAAkB,SAAC1F,GACrBwF,EAAYxF,EAAM2F,SAKtB,OAFAxX,OAAOuS,iBAAiBkE,EAAyBc,GAE1C,kBAAMvX,OAAOkT,oBAAoBuD,EAAyBc,MAClE,IAEH5L,qBAAU,WACN,IAAM8L,EAAmB,WACjBzX,OAAO0X,QAAUhB,EAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cACrEP,EAAYtsB,IAMpB,OAFAiV,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,sBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfliC,WAAW,gBAAD,OAAkBmhC,EAAlB,mCACVlhC,eAAgB,aANxB,UASI,sBACIwrB,MAAO,CACH9jB,MAAO,OACP1C,QAAS,OACTuC,QAAQ,GAAD,OAAKlC,IAAWrJ,QAAQ,GAAxB,cAAgCqJ,IAAWrJ,QAAQ,GAAnD,MACPkJ,eAAgB,iBALxB,UAQI,cAAC,IAAD,CAAQsmB,MAAO,CAAEtvB,OAAQ,MACzB,qBAAKsvB,MAAO,CAAExmB,QAAS,OAAQk9B,IAAK78B,IAAWrJ,QAAQ,IAAvD,SACI,cAACmmC,EAAA,EAAD,CAAsB1U,UAAU,SAGxC,sBAAKjC,MAAO,CAAExmB,QAAS,OAAQ0C,MAAO,OAAQ06B,UAAW,OAAQn9B,WAAY,UAA7E,UACI,qBACIumB,MAAO,CACHxmB,QAAS,OACT0C,MAAOT,EAAK,MAAQ,MACpB/K,OAAQ,OACRgJ,eAAgB,SAChBD,WAAY,UANpB,SASI,sBACIumB,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfC,IAAK78B,IAAWrJ,UAChBuL,QAASN,EAAE,UACF5B,IAAWrJ,QAAQ,GADjB,cACyBqJ,IAAWrJ,QAAQ,GAD5C,MAELqJ,IAAWrJ,QAAQ,GACzBqmC,SAAU,KARlB,UAWI,cAACC,EAAA,EAAD,CACI9W,MAAK,2BACGvkB,EAAK5B,IAAW3D,WAAW8E,MAAQnB,IAAW3D,WAAW6E,SAD5D,IAEDg8B,UAAW,OACXn9B,WAAY,IAJpB,SAOKoB,IAEL,cAAC87B,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWkF,MAA7B,IAAmC27B,UAAW,SAA/D,SACKpD,IAEL,cAAChU,EAAA,EAAD,CAAQG,KAAM,KAId,cAAC6W,EAAA,EAAD,CAAsB1U,UAAU,EAAOtqB,KAAK,cAAcqoB,MAAO,CAAE6W,SAAU,YAGrF,qBAAK7W,MAAO,CAAExmB,QAAS,OAAQ0C,MAAOT,EAAK,MAAQ,MAAOm7B,UAAW,QAArE,SACI,cAAC,EAAD,eAAsBV,SAG9B,cAAC,IAAD,CAAQc,YAAa,CAAEC,OAAQ,IAA/B,SACI,qBACIjX,MAAO,CACHxmB,QAAS,OACT0C,MAAO,OACPH,QAASlC,IAAWrJ,QAAQ,GAC5BkJ,eAAgB,UALxB,SAQI,qBACIsmB,MAAO,CACHxmB,QAAS,OACTf,UAAW,GACXoD,aAAc,KACdE,QAASlC,IAAWrJ,UACpB0D,gBAAiB2F,IAAW1F,MAAMgE,KAClCsB,WAAY,SACZE,WAAYE,IAAWgD,YAAY5H,gBAR3C,SAWK2gC,EAAInS,KAAI,SAACyT,GAAD,OACL,qBAEIlX,MAAO,CACHxmB,QAAS,OACTuC,QAAQ,GAAD,OAAKlC,IAAWrJ,QAAQ,GAAxB,cAAgCqJ,IAAWrJ,QAAQ,GAAnD,MACP8I,OAAQ,UACRuC,aAAc,GACd3H,gBAAiB8hC,IAAakB,EAAEvtB,GAAK9P,IAAW1F,MAAMjC,MAAQ,eAElEilC,QAAS,WAELD,EAAEzR,OAAOyR,EAAEvtB,KAXnB,SAcI,cAACmtB,EAAA,EAAD,CACI9W,MAAK,2BACEnmB,IAAW3D,WAAWkF,MADxB,IAED27B,UAAW,SACX5iC,MAAO6hC,IAAakB,EAAEvtB,GAAK9P,IAAW1F,MAAMgE,KAAO0B,IAAW1F,MAAMjC,QAJ5E,SAOKglC,EAAEE,SArBX,wBAC0BF,EAAEvtB,cA4B5C,cAACgW,EAAA,EAAD,CAAQG,KAAM,IACd,qBACIE,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACf/8B,eAAgB,MAChBhJ,OAAQ,OACRwL,MAAO,OACPm7B,YAAa,OAPrB,SAUI,cAACC,EAAA,EAAD,CACIrV,UAAU,EACVyT,QAASA,EACT6B,UAAWzB,EACXD,OAAQA,EACRlC,YAAaoC,EACbpsB,GAAI,wBAQb4rB,a,6OClNHiC,E,yDAAAA,K,gDAAAA,E,mEAAAA,E,4CAAAA,E,uDAAAA,E,2DAAAA,E,mEAAAA,E,mEAAAA,E,0CAAAA,M,KAwBZ,IAEapU,EAA6B,uCAAG,WACzCT,EACAE,EACAvpB,GAHyC,qBAAA0pB,EAAA,6DAKzCL,EAAS,CACLsB,KAAMuT,EAAqBC,wBANU,SASlB1kB,YAAiB,CACpCzZ,OAAQA,EACRo+B,KAb6B,GAc7BtS,OAAQuS,IAAmBC,SAZU,cASnC/F,EATmC,OAenCgG,EAA+B,GAC/BC,EAAY,IAAIC,IAEtBlV,EAAiB9B,SAAQ,SAACsN,GACjByJ,EAAUE,IAAI3J,EAAK7L,kBACpBsV,EAAUG,IAAI5J,EAAK7L,gBACnBqV,EAAY3W,KAAKmN,OAIzBwD,EAASxP,cAActB,SAAQ,SAACsN,GACvByJ,EAAUE,IAAI3J,EAAK7L,kBACpBsV,EAAUG,IAAI5J,EAAK7L,gBAEnBqV,EAAY3W,KAAKmN,OAInB6J,EAAoBL,EAAYM,MAClC,SAACnV,EAAGoV,GAAJ,OAAU,IAAIC,KAAKD,EAAEE,YAAsBC,UAAY,IAAIF,KAAKrV,EAAEsV,YAAsBC,aAG5FzU,EAA4BnB,EAAUuV,GACtCM,EAA0B7V,EAAUkP,EAAS4G,gBAC7C7T,EAAmCjC,GAAWkP,EAAS6G,UACvD/T,EAAiChC,EAAUkP,EAASxP,cAAc3B,QAxCzB,kBA0ClCmR,EAASxP,eA1CyB,4CAAH,0DA6C7ByB,EAA8B,SAACnB,EAA+BN,GACvEM,EAAS,CACLsB,KAAMuT,EAAqBmB,oBAC3BxU,QAAS9B,KAIJsC,EAAmC,SAAChC,EAA+B0G,GAC5E1G,EAAS,CACLsB,KAAMuT,EAAqBoB,yBAC3BzU,QAASkF,KAIJgC,EAAyC,SAAC1I,EAA+B2G,GAClF3G,EAAS,CACLsB,KAAMuT,EAAqBqB,+BAC3B1U,QAASmF,KAIJ1E,EAAqC,SAACjC,EAA+ByG,GAC9EzG,EAAS,CACLsB,KAAMuT,EAAqBsB,8BAC3B3U,QAASiF,KAIJoP,EAA4B,SAAC7V,EAA+BrpB,GAMrE,OALAqpB,EAAS,CACLsB,KAAMuT,EAAqBuB,kBAC3B5U,QAAS7qB,IAGNA,GAGEowB,EAAyB,SAClClE,EACAC,GAEA,OAAQA,EAAOxB,MACX,KAAKuT,EAAqBmB,oBACtB,OAAO,2BACAnT,GADP,IAEInD,cAAeoD,EAAOtB,UAE9B,KAAKqT,EAAqBoB,yBACtB,OAAO,2BACApT,GADP,IAEI6D,MAAO5D,EAAOtB,UAEtB,KAAKqT,EAAqBwB,2BACtB,OAAO,2BACAxT,GADP,IAEIS,QAASR,EAAOtB,UAExB,KAAKqT,EAAqBqB,+BACtB,OAAO,2BACArT,GADP,IAEI8D,YAAa7D,EAAOtB,UAE5B,KAAKqT,EAAqBsB,8BACtB,OAAO,2BACAtT,GADP,IAEI4D,WAAY3D,EAAOtB,UAE3B,KAAKqT,EAAqBuB,kBACtB,OAAO,2BACAvT,GADP,IAEIiT,eAAgBhT,EAAOtB,UAE/B,QACI,OAAOqB,K,2GC7IdyT,E,yCCEQC,EAAsD,CAC/DC,iBAAkB,CACdC,gBAAgB,EAChBC,0BAA2B,EAC3BC,mBAAoB,GACpBC,UAAW,GACXC,mBAAoB,GACpBC,WAAY,GACZC,YAAa,GACbC,aAAc,GACdC,OAAQ,GACRC,eAAgB,GAChB5T,SAAS,EACT6I,YAAY,EACZgL,kBAAkB,EAClBC,kBAAmB,EACnBC,iBAAkB,GAClBC,QAAS,CACLC,MAAO,EACPC,MAAO,EACPC,MAAO,EACPH,QAAS,IAEbI,OAAQ,GACRvE,aAAc,K,8DC/BTvzB,EAAc,uCAAG,4BAAAygB,EAAA,sEACH4N,IAAM0J,IAAIp8B,YAAaoE,IAAQC,iBAD5B,cACpBsvB,EADoB,yBAGnBA,GAHmB,2CAAH,sD,SFKtBoH,K,qCAAAA,E,wDAAAA,E,yCAAAA,M,KAaL,IAAMsB,EAAwB,SAACp7B,GAC3B,IAAI06B,EAAkC,GAYtC,OAVK,OAAL16B,QAAK,IAALA,KAAOskB,KAAI,SAAC+W,GAAO,IAAD,EACRC,EAAcnhB,IAAaohB,MAAK,SAACC,GAAD,OAAOA,EAAEphB,SAAWihB,EAAEjhB,UACtDoc,EAAI,2BACH6E,GADG,IAENloB,MAAK,OAAEmoB,QAAF,IAAEA,OAAF,EAAEA,EAAanoB,MACpBoH,oBAAmB,iBAAE+gB,QAAF,IAAEA,OAAF,EAAEA,EAAa/gB,2BAAf,WAEvBmgB,EAAe3Y,KAAKyU,MAGjBkE,GAGEe,EAAwB,uCAAG,WAAOjY,GAAP,eAAAK,EAAA,6DACpCL,EAAS,CACLsB,KAAMgV,EAAiB4B,mBAFS,SAKbt4B,IALa,WAK9BsvB,EAL8B,QAOvBE,SAAW3R,IAAmB8Q,MAPP,sBAOoB,IAAIA,MAAM,uCAP9B,cASpCvO,EAAS,CACLsB,KAAMgV,EAAiB6B,0BACvB3W,QAAS,CACLkV,0BAA2BxH,EAASnB,KAAK2I,0BACzCC,mBAAoBzH,EAASnB,KAAK4I,mBAClCC,UAAW1H,EAASnB,KAAK6I,UACzBC,mBAAoB3H,EAASnB,KAAK8I,mBAClCC,WAAW,GAAD,OAAKv7B,YAAa2zB,EAASnB,KAAK+I,YAAhC,YAA+CvlB,IAAQC,OACjEulB,YAAa7H,EAASnB,KAAKgJ,YAC3BC,aAAa,GAAD,OAAKz7B,YAAa2zB,EAASnB,KAAK+I,YAAhC,YAA+CvlB,IAAQE,iBACnEglB,gBAAgB,EAChBQ,OAAQ/H,EAASnB,KAAKkJ,OACtBC,eAAgBU,EAAsB1I,EAASnB,KAAKmJ,gBACpDC,iBAAkBjI,EAASnB,KAAKoJ,iBAChCC,kBAAmBlI,EAASnB,KAAKqJ,kBACjCC,iBAAkBnI,EAASnB,KAAKsJ,iBAChCC,QAAS,CACLC,MAAOrI,EAASnB,KAAKuJ,QAAQC,MAC7BC,MAAOtI,EAASnB,KAAKuJ,QAAQE,MAC7BC,MAAOvI,EAASnB,KAAKuJ,QAAQG,MAC7BH,QAASpI,EAASnB,KAAKuJ,QAAQA,SAEnCI,OAAQxI,EAASnB,KAAK2J,OACtBvE,aAAcjE,EAASnB,KAAKoF,gBAhCA,kBAmC7BjE,GAnC6B,2CAAH,sDAsCxBkJ,EAAqB,SAACvV,EAA0BC,GACzD,OAAQA,EAAOxB,MACX,KAAKgV,EAAiB4B,iBAClB,OAAO,2BACArV,GADP,IAEIS,SAAS,IAEjB,KAAKgT,EAAiB6B,0BAClB,OAAO,2BACArV,EAAOtB,SADd,IAEI8B,SAAS,EACT6I,YAAY,IAEpB,QACI,OAAOtJ,IGvFNiE,EAAU,SAAC,EAEpBhE,GAFmB,IACjB0T,EADiB,EACjBA,iBADiB,MAGS,CAC5BA,iBAAkB4B,EAAmB5B,EAAkB1T,K,gCCKrDuV,EAAqBnR,wBAAkF,CACzGrE,MAAO0T,EACPvW,SAAU,kBAAM,QAGPsY,EAAgD,SAAC,GAAkB,IAAhBxU,EAAe,EAAfA,SACtDyU,EAAwBpG,cAC9B,EAA0B/K,qBAAWN,EAASyP,GAA9C,mBAAO1T,EAAP,KAAc7C,EAAd,KACA,EAA4CyJ,mBAA6BhM,IAAmBgQ,SAA5F,mBAAOC,EAAP,KAAuBC,EAAvB,KAoBA/F,qBAAU,WACF8F,IAAmBjQ,IAAmBgQ,SACtCwK,EAAyBjY,GACpBwI,MAAK,SAAC0G,GAEH,OADAvB,EAAkBlQ,IAAmB6Q,IAC9BY,KAEV1G,MAAK,SAAC0G,GACHsJ,YAAsBD,EAAuBrJ,EAASnB,KAAKkJ,QA1B1D,SAAC/H,GACVlT,KAAsBI,KAC1B6R,IAAMwK,aAAavJ,SAASwJ,KACxB,SAACxJ,GACG,OAAOA,KAEX,SAACr6B,GACG,OAAIo5B,IAAM0K,SAAS9jC,GACRq6B,GACAr6B,EAAMq6B,SAASE,SAAW3R,IAAmB8R,YACpD9S,QAAQC,IAAI,8CACZiR,EAAkBlQ,IAAmB8R,YAElCjP,QAAQsY,OAAO/jC,OAclBgkC,CAAS3J,MAEZvG,OAAM,SAAC5tB,GACJ0hB,QAAQC,IAAI,6BAA8B3hB,GAC1C4yB,EAAkBlQ,IAAmB8Q,YAGlD,CAACb,IAeJ,OAAO,mCAbY,SAAC0B,GAChB,OAAQA,GACJ,KAAK3R,IAAmBgQ,QACpB,OAAQzR,MAAuBI,KAAsB,cAACiT,EAAA,EAAD,CAAQ99B,gBAAiB,mBAClF,KAAKksB,IAAmB8Q,MACpB,OAAO,cAACe,EAAA,EAAD,IACX,KAAK7R,IAAmB6Q,GACpB,OACI,cAAC+J,EAAmBxP,SAApB,CAA6B1uB,MAAO,CAAE0oB,QAAO7C,YAA7C,SAA0D8D,KAKhE6L,CAAWjC,MAGZoL,EAAwB,kBAAM/P,qBAAWsP,K,2QChE/C,SAASU,EAAgBC,GAC5B,MAAM,aAAN,OAAoBA,GA8OjB,IAAMC,EAAwB,SAACC,GAAD,OACjChV,aAAW,SAACv2B,GACR,IAAQwrC,EAA+CD,EAA/CC,YAAaC,EAAkCF,EAAlCE,SAAUC,EAAwBH,EAAxBG,oBAEzB9iC,EA3OP,SAAyB5I,GAC5B,MAAO,CACHlB,QAAS,CACLqI,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQ5C,QAAQ+H,KACvChD,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,cAE7D6lC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAAO7G,EAAMyE,OAAOkB,eAGzDgmC,kBAAmB,CACfxkC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQ5C,QAAQ+H,KACvChD,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,aACzDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQ+H,OAElD2kC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAAO7G,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQ+H,QAGtD9H,UAAW,CACPoI,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQ3C,UAAU8H,KACzChD,MAAO7D,EAAM0B,QAAQ3C,UAAUiI,aAAehH,EAAMyE,OAAOkB,cAE/D6lC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ3C,UAAUiI,aACzCnD,MAAO7D,EAAM0B,QAAQ3C,UAAU8H,KAAO7G,EAAMyE,OAAOkB,eAG3DimC,eAAgB,CACZzkC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQ3C,UAAUgI,MACzClD,MAAO,OAAS7D,EAAMyE,OAAOkB,aAC7BvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ3C,UAAUgI,QAEpDykC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ3C,UAAUiI,aACzCnD,MAAO7D,EAAM0B,QAAQ3C,UAAUgI,MAAQ/G,EAAMyE,OAAOkB,eAG5DoE,YAAa,CACT5C,QAAS,CACLvD,gBAAiB5D,EAAMoC,SAASO,kBAChCkB,MAAO7D,EAAMyE,OAAOiD,cAAgB1H,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgBprC,EAAMyE,OAAOiD,gBAEzC8jC,YAAa,CACT5nC,gBAAiB5D,EAAMyE,OAAOiD,cAC9B7D,MAAO7D,EAAMyE,OAAOkD,kBAAoB3H,EAAMyE,OAAOkB,aACrDvB,OAAQgnC,EAAgBprC,EAAMyE,OAAOiD,iBAG7CmkC,iBAAkB,CACd1kC,QAAS,CACLvD,gBAAiB5D,EAAMoC,SAASO,kBAChCkB,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,aACzDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQkI,eAElDwkC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAAO7G,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQkI,gBAGtD8kC,gBAAiB,CACb3kC,QAAS,CACLvD,gBAAiB5D,EAAMoC,SAASO,kBAChCkB,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,aACzDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQkI,eAElDwkC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,aAC7CvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuF,KAAKJ,QAGnDklC,gBAAiB,CACb5kC,QAAS,CACLvD,gBAAiB5D,EAAMoC,SAASO,kBAChCkB,MAAO7D,EAAM0B,QAAQuC,WAAWkD,QAAUnH,EAAMyE,OAAOkB,aACvDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuC,WAAWkD,UAErDqkC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQuC,WAAWkD,QAC1CtD,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,aAC7CvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuC,WAAWkD,WAGzD6kC,YAAa,CACT7kC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,cAE7D6lC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQC,OAAOE,MAAQ7B,EAAMyE,OAAOkB,eAGzDsmC,UAAW,CACP9kC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQuF,KAAKF,MACpClD,MAAO7D,EAAM0B,QAAQ5C,QAAQgI,KAAO9G,EAAMyE,OAAOkB,cAErD6lC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQC,OAAOE,MAAQ7B,EAAMyE,OAAOkB,eAGzDumC,qBAAsB,CAClB/kC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQuC,WAAWkD,QAC1CtD,MAAO7D,EAAM0B,QAAQuF,KAAKF,MAAQ/G,EAAMyE,OAAOkB,aAC/CvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuF,KAAKF,QAE/CykC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQC,OAAOE,MAAQ7B,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgB7hC,IAAW1F,MAAMjC,SAGjDuqC,cAAe,CACXhlC,QAAS,CACLvD,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,aACzDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuF,KAAKJ,OAE/C2kC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQC,OAAOE,MAAQ7B,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuF,KAAKJ,QAGnDulC,aAAc,CACVjlC,QAAS,CACLvD,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAAO7G,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgB7hC,IAAW1F,MAAMjC,QAE7C4pC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQ+H,KACvChD,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,aAC7CvB,OAAQgnC,EAAgB7hC,IAAW1F,MAAMjC,SAGjDyqC,eAAgB,CACZllC,QAAS,CACLvD,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQ3C,UAAU8H,KAAO7G,EAAMyE,OAAOkB,aACnDvB,OAAQgnC,EAAgB7hC,IAAW1F,MAAMjC,QAE7C4pC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ3C,UAAU8H,KACzChD,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,aAC7CvB,OAAQgnC,EAAgB7hC,IAAW1F,MAAMjC,SAGjD0K,KAAM,CACFnF,QAAQ,aACJvD,gBAAiB,cACjBC,MAAO7D,EAAM0B,QAAQ3C,UAAU8H,KAAO7G,EAAMyE,OAAOkB,aACnD2mC,eAAgB,aACbttC,IAAUM,cAEjBksC,YAAa,CACT5nC,gBAAiB,cACjBC,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,aAC7C2mC,eAAgB,cAGxBC,gBAAiB,CACbplC,QAAS,CACLvD,gBAAiB5D,EAAMoC,SAASO,kBAChCkB,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAAehH,EAAMyE,OAAOkB,aACzDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQuF,KAAKJ,OAE/C2kC,YAAa,CACT5nC,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCnD,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAAO7G,EAAMyE,OAAOkB,aACjDvB,OAAQgnC,EAAgBprC,EAAM0B,QAAQ5C,QAAQkI,gBAGtDwlC,UAAW,CACPrlC,QAAQ,aACJvD,gBAAiB,cACjBC,MAAOvD,IACPgsC,eAAgB,aACbttC,IAAUM,cAEjBksC,YAAa,CACT5nC,gBAAiB,cACjBC,MAAO,UACPyoC,eAAgB,cAGxBG,SAAU,CACNtlC,QAAQ,aACJvD,gBAAiB,cACjBC,MAAO,UACPyoC,eAAgB,aACbttC,IAAUM,cAEjBksC,YAAa,CACT5nC,gBAAiB,cACjBC,MAAO,UACPyoC,eAAgB,cAGxBI,UAAW,CACPvlC,QAAS,CACLvD,gBAAiB,UACjBC,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,cAEjD6lC,YAAa,CACT5nC,gBAAiB,UACjBC,MAAO0F,IAAW1F,MAAMjC,MAAQ5B,EAAMyE,OAAOkB,gBAgBhCgnC,CAAgB3sC,GAE/B4sC,EAAepB,EAAc5iC,EAAa9J,QAAQ0sC,YAAc5iC,EAAa9J,QAAQqI,QAErF0lC,EAAyBrB,EACzB5iC,EAAa+iC,kBAAkBH,YAC/B5iC,EAAa+iC,kBAAkBxkC,QAE/B2lC,EAAiBtB,EAAc5iC,EAAa7J,UAAUysC,YAAc5iC,EAAa7J,UAAUoI,QAE3F4lC,EAAsBvB,EACtB5iC,EAAagjC,eAAeJ,YAC5B5iC,EAAagjC,eAAezkC,QAE5B6lC,EAAmBxB,EAAc5iC,EAAamB,YAAYyhC,YAAc5iC,EAAamB,YAAY5C,QAEjG8lC,EAAwBzB,EACxB5iC,EAAaijC,iBAAiBL,YAC9B5iC,EAAaijC,iBAAiB1kC,QAE9B+lC,EAAuB1B,EACvB5iC,EAAakjC,gBAAgBN,YAC7B5iC,EAAakjC,gBAAgB3kC,QAE7BgmC,EAAuB3B,EACvB5iC,EAAamjC,gBAAgBP,YAC7B5iC,EAAamjC,gBAAgB5kC,QAE7BimC,EAAmB5B,EAAc5iC,EAAaojC,YAAYR,YAAc5iC,EAAaojC,YAAY7kC,QAEjGkmC,EAAiB7B,EAAc5iC,EAAaqjC,UAAUT,YAAc5iC,EAAaqjC,UAAU9kC,QAE3FmmC,EAA4B9B,EAC5B5iC,EAAasjC,qBAAqBV,YAClC5iC,EAAasjC,qBAAqB/kC,QAElComC,EAAqB/B,EACrB5iC,EAAaujC,cAAcX,YAC3B5iC,EAAaujC,cAAchlC,QAE3BqmC,EAAoBhC,EACpB5iC,EAAawjC,aAAaZ,YAC1B5iC,EAAawjC,aAAajlC,QAE1BsmC,EAAsBjC,EACtB5iC,EAAayjC,eAAeb,YAC5B5iC,EAAayjC,eAAellC,QAE5BumC,EAAYlC,EAAc5iC,EAAa0D,KAAKk/B,YAAc5iC,EAAa0D,KAAKnF,QAE5EwmC,EAAuBnC,EACvB5iC,EAAa2jC,gBAAgBf,YAC7B5iC,EAAa2jC,gBAAgBplC,QAE7BymC,EAAiBpC,EAAc5iC,EAAa4jC,UAAUhB,YAAc5iC,EAAa4jC,UAAUrlC,QAE3F0mC,EAAgBrC,EAAc5iC,EAAa6jC,SAASjB,YAAc5iC,EAAa6jC,SAAStlC,QAExF2mC,EAAiBllC,EAAa8jC,UAAUvlC,QAExC4mC,EAAc,SAACviC,GACjB,OAAOkgC,EAAsB,QAAUlgC,GAG3C,OAAOqrB,YAAa,CAChB5uB,KAAM,CACFoE,UAAW,OACX5F,cAAeglC,EACfpiC,WAAYrJ,EAAMuM,YAAY2qB,OAAO,MAAO,CACxCgB,SAAUl4B,EAAMuM,YAAY2rB,SAAS8V,SACrC7V,OAAQn4B,EAAMuM,YAAY4rB,OAAOC,YAErC3sB,QAAQ,WACRrH,OAAQgnC,EAAgBprC,EAAMoC,SAASO,mBACvCsrC,WAAY,SACZ1iC,aAhUW,EAiUXC,SAAUuiC,EAAY,KACtBjlC,cAAe,KAEnBolC,UAAW,CACPziC,QAASzL,EAAME,QAAQ,GAAK,GAC5BsL,SAAUuiC,EAAY,MAE1BI,UAAW,CACP1iC,QAASzL,EAAME,QAAQ,GAAK,GAC5B2I,SA3UmB,SA4UnB2C,SAAUuiC,EAAY,MAE1BjvC,QAAQ,2BACD8tC,GADA,IAEH,UAAU,eAAMhkC,EAAa9J,QAAQ0sC,eAEzCG,kBAAkB,2BACXkB,GADU,IAEb,UAAU,eAAMjkC,EAAa+iC,kBAAkBH,eAEnDzsC,UAAU,2BACH+tC,GADE,IAEL,UAAU,eAAMlkC,EAAa7J,UAAUysC,eAE3CI,eAAe,2BACRmB,GADO,IAEV,UAAU,eAAMnkC,EAAagjC,eAAeJ,eAEhDzhC,YAAY,2BACLijC,GADI,IAEP,UAAU,eAAMpkC,EAAamB,YAAYyhC,eAE7CK,iBAAiB,2BACVoB,GADS,IAEZ,UAAU,eAAMrkC,EAAaijC,iBAAiBL,eAElDM,gBAAgB,2BACToB,GADQ,IAEX,UAAU,eAAMtkC,EAAakjC,gBAAgBN,eAEjDO,gBAAgB,2BACToB,GADQ,IAEX,UAAU,eAAMvkC,EAAamjC,gBAAgBP,eAEjDQ,YAAY,2BACLoB,GADI,IAEP,UAAU,eAAMxkC,EAAaojC,YAAYR,eAE7CS,UAAU,2BACHoB,GADE,IAEL,UAAU,eAAMzkC,EAAaqjC,UAAUT,eAE3CU,qBAAqB,2BACdoB,GADa,IAEhB,UAAU,eAAM1kC,EAAasjC,qBAAqBV,eAEtDW,cAAc,2BACPoB,GADM,IAET,UAAU,eAAM3kC,EAAaujC,cAAcX,eAE/CY,aAAa,2BACNoB,GADK,IAER,UAAU,eAAM5kC,EAAawjC,aAAaZ,eAE9Ca,eAAe,2BACRoB,GADO,IAEV,UAAU,eAAM7kC,EAAayjC,eAAeb,eAEhDl/B,KAAK,2BACEohC,GADH,IAEA,UAAU,eAAM9kC,EAAa0D,KAAKk/B,eAEtCe,gBAAgB,2BACToB,GADQ,IAEX,UAAU,eAAM/kC,EAAa2jC,gBAAgBf,eAEjDgB,UAAU,2BACHoB,GADE,IAEL,UAAU,eAAMhlC,EAAa4jC,UAAUhB,aACvC,YAAY,eAAM5iC,EAAa4jC,UAAUrlC,WAE7CslC,SAAS,2BACFoB,GADC,IAEJ,UAAU,eAAMjlC,EAAa6jC,SAASjB,aACtC,YAAY,eAAM5iC,EAAa6jC,SAAStlC,WAE5CG,SAAU,CACN1D,gBAAiB,WAAa5D,EAAMyE,OAAOkB,aAC3CvB,OAAQgnC,EAAgBprC,EAAMoC,SAASO,mBAAqB3C,EAAMyE,OAAOkB,aACzE9B,MAAO7D,EAAMoC,SAASW,WAAa/C,EAAMyE,OAAOkB,aAChDJ,QAAS,KAEbmnC,UAAU,2BACHoB,GADE,IAEL,UAAU,eAAMllC,EAAa8jC,UAAUlB,aACvC,YAAY,eAAM5iC,EAAa8jC,UAAUvlC,iBAmC1C,SAASinC,EAAa9e,GACjC,IACI6G,EAQA7G,EARA6G,SACAD,EAOA5G,EAPA4G,UAFJ,EASI5G,EANAhlB,eAHJ,MAGc,UAHd,IASIglB,EALAkc,mBAJJ,WASIlc,EAJAmc,gBALJ,MAKe,YALf,IASInc,EAHAhoB,gBANJ,WASIgoB,EAFAoc,2BAPJ,SAQO/b,EARP,YASIL,EATJ,GAUMgH,EAAUgV,EAAsB,CAAEE,cAAaC,WAAUC,uBAA/CJ,GAEhB,OACI,cAAC,IAAD,yBACIpV,UAAWuC,kBAAKvC,EAAWI,EAAQruB,KAAMquB,EAAQhsB,GAAlC,eACVgsB,EAAQhvB,SAAWA,IAExBgvB,QAAS,CAAE4X,UAAW5X,EAAQ4X,UAAWC,UAAW7X,EAAQ6X,WAC5D7mC,SAAUA,GACNqoB,GANR,aAQKwG,O,0aCjcAkY,EAAmB,uCAAG,8BAAA3b,EAAA,6DAC3B5B,EAAMwP,IAAMC,SAASC,QAAQC,cAAgBzuB,IAAQ+B,SAASC,mBAAqBhC,IAAQG,YADhE,SAERmuB,IAAM0J,IAAN,UAAalZ,IAFL,cAEzByQ,EAFyB,yBAIxB,CACHxB,eAAgBwB,EAASE,OACzB1tB,SAAS,2BAAMwtB,EAASnB,MAAhB,IAAsBkO,YAAY,MANf,2CAAH,qDAUnBC,EAAgB,uCAAG,WAAOC,GAAP,eAAA9b,EAAA,sEACL4N,IAAMmO,KAA2Bz8B,IAAQ+B,SAASE,eAAgBu6B,EAAS,CAC9FjK,iBAAiB,IAFO,cACtBhD,EADsB,yBAKrBA,EAASnB,MALY,2CAAH,sDAQhBsO,EAAkB,uCAAG,WAAOF,GAAP,eAAA9b,EAAA,sEACP4N,IAAMmO,KAA2Bz8B,IAAQ+B,SAASG,cAAes6B,EAAS,CAC7FjK,iBAAiB,IAFS,UAKN,OAJlBhD,EADwB,QAKjBE,OALiB,yCAMnBkN,KANmB,gCASvBpN,EAASnB,MATc,2CAAH,sDAYlBwO,EAAU,uCAAG,sBAAAlc,EAAA,sEACC4N,IAAMmO,KACzBz8B,IAAQ+B,SAASI,OACjB,GACA,CACIowB,iBAAiB,IALH,yDAAH,qDAUVsK,EAAsB,uCAAG,4BAAAnc,EAAA,sEACX4N,IAAM0J,IAAgCh4B,IAAQ+B,SAASK,qBAAsB,CAChG06B,eAAgB,SAAUrN,GACtB,OAAOA,EAAS,OAHU,WAC5BF,EAD4B,QAOrBE,SAAW3R,IAAmB6Q,GAPT,yCAOoBY,EAASnB,MAP7B,qCAS3ByC,GAT2B,2CAAH,qDAYtBxuB,EAAiB,uCAAG,WAAOC,GAAP,SAAAoe,EAAA,sEACN4N,IAAMmO,KAAKz8B,IAAQ+B,SAASM,kBAAkBC,QAAeuuB,EAAW,CAC3FiM,eAAgB,SAAUrN,GACtB,OAAOA,EAAS,OAHK,iBAOhBA,SAAW3R,IAAmBif,UAPd,0CAOgC,GAPhC,iCAStB,GATsB,2CAAH,sDAYjBx6B,EAAc,uCAAG,WAAOy6B,GAAP,iBAAAtc,EAAA,6DACpBuc,EAAgC,CAAC,IAAIlf,IAAe,mBAAoBif,IAExEE,EAAmB3e,YAA8B0e,GAH7B,SAKH3O,IAAMmO,KAAN,UAChBz8B,IAAQ+B,SAASQ,gBADD,OACkB26B,GACrC,GACA,CACIJ,eAAgB,SAAUrN,GACtB,OAAOA,EAAS,OAVF,iBAebA,SAAW3R,IAAmBif,UAfjB,0CAemC,GAfnC,iCAiBnB,GAjBmB,2CAAH,sDAoBdv6B,EAA2B,uCAAG,WACvC4rB,GADuC,eAAA1N,EAAA,sEAGhB4N,IAAMmO,KAAKz8B,IAAQ+B,SAASS,4BAA6B4rB,EAAM,CAClFI,QAAS,CACL,eAAgB,sBALe,cAGjCe,EAHiC,yBAShC,CACHnB,KAAMmB,EAASnB,KACfqB,OAAQF,EAASE,SAXkB,2CAAH,sDAe3B0N,EAAiB,uCAAG,4BAAAzc,EAAA,sEACN4N,IAAM0J,IAAIh4B,IAAQ+B,SAASU,gBADrB,cACvB8sB,EADuB,yBAGtBA,EAASnB,MAHa,2CAAH,sD,+KC7HlBgP,E,yDAAAA,K,gDAAAA,E,mEAAAA,E,2CAAAA,E,kEAAAA,E,6DAAAA,E,wEAAAA,M,KAoBZ,IAEavc,EAA6B,uCAAG,WACzCR,EACAC,EACAG,GAHyC,eAAAC,EAAA,6DAKzCL,EAAS,CACLsB,KAAMyb,EAAqBC,wBAG/BC,EAAmCjd,GAAU,GATJ,SAWlB5P,YAAiB,CACpCzZ,OAAQypB,EACR2U,KAf6B,GAgB7BtS,OAAQuS,IAAmBkI,OAdU,cAWnChO,EAXmC,OAiBzCjO,EAA4BjB,EAAUC,EAAiBkd,OAAOjO,EAASxP,gBACvEmW,EAA0B7V,EAAUkP,EAAS4G,gBAC7C5T,EAAsClC,GAAWkP,EAAS6G,UAC1DkH,EAAmCjd,GAAU,GApBJ,kBAsBlCkP,EAASxP,eAtByB,4CAAH,0DAyB7BuB,EAA8B,SAACjB,EAA+BC,GACvED,EAAS,CACLsB,KAAMyb,EAAqBK,oBAC3B5b,QAASvB,KAIJiC,EAAwC,SAAClC,EAA+ByG,GACjFzG,EAAS,CACLqd,MAAON,EAAqBO,8BAC5B9b,QAASiF,KAIJwW,EAAqC,SAACjd,EAA+BsD,GAC9EtD,EAAS,CACLsB,KAAMyb,EAAqBQ,2BAC3B/b,QAAS8B,KAIJuS,EAA4B,SAAC7V,EAA+BrpB,GAMrE,OALAqpB,EAAS,CACLsB,KAAMyb,EAAqBS,kCAC3Bhc,QAAS7qB,IAGNA,GAGEqwB,EAAyB,SAClCnE,EACAC,GAEA,OAAQA,EAAOxB,MACX,KAAKyb,EAAqBK,oBACtB,OAAO,2BACAva,GADP,IAEInD,cAAeoD,EAAOtB,UAE9B,KAAKub,EAAqBO,8BACtB,OAAO,2BACAza,GADP,IAEI4D,WAAY3D,EAAOtB,UAE3B,KAAKub,EAAqBQ,2BACtB,OAAO,2BACA1a,GADP,IAEIS,QAASR,EAAOtB,UAExB,KAAKub,EAAqBS,kCACtB,OAAO,2BACA3a,GADP,IAEIiT,eAAgBhT,EAAOtB,UAE/B,QACI,OAAOqB,K,sICpGJ,SAAS4a,EAAiBxgB,GACrC,IAAQ6G,EAA0B7G,EAA1B6G,SAAU4Z,EAAgBzgB,EAAhBygB,GAAOpgB,EAAzB,YAAkCL,EAAlC,GAEA,OACI,cAAC,IAAD,yBAEI0gB,UAAWC,IACXF,GAAIA,GACApgB,GAJR,aAMKwG,O,kFChBE,SAAS+Z,IACpB,OAAO9U,qBAAW+U,O,uICYhBC,EAAuC,CACzCC,oBAAoB,EACpB5hC,iBAAao0B,EACbyN,eAAgB,aAChBC,gBAAiB,cAGfC,EAAgBjX,wBAA8B6W,GAEvCK,EAAwB,SAACnhB,GAClC,IAAQohB,EAAkCphB,EAAlCohB,oBAAqBva,EAAa7G,EAAb6G,SAEvBwa,EAA0BC,cAEhC,EAAsC9U,mBAAyC6U,GAA/E,mBAAOliC,EAAP,KAAoBoiC,EAApB,KAEA,EAAoD/U,mBAAyC,qBAAhBrtB,GAA7E,mBAAO4hC,EAAP,KAA2BS,EAA3B,KAEMR,EAAiB,WACnBQ,GAAsB,IAQpBC,EAA8B,CAChCV,mBAAoBA,EACpB5hC,YAAaA,EACb6hC,eAAgBA,EAChBC,gBAToB,SAACS,GACrBH,EAAeG,GACfN,EAAoBM,KAwBxB,OAdA/W,qBAAU,WACqB,qBAAhBxrB,GAEXiiC,EAAoBjiC,KACrB,CAACA,IAEJwrB,qBAAU,WAGN,OAFAntB,SAAS0vB,KAAKqE,iBAAiB,kBAAkB,kBAAMyP,OAEhD,WACHxjC,SAAS0vB,KAAKgF,oBAAoB,kBAAkB,kBAEzD,CAAC6O,IAEG,cAACG,EAActV,SAAf,CAAwB1uB,MAAOukC,EAA/B,SAA6C5a,KAG3C+J,EAAmB,kBAAM9E,qBAAWoV,K,6BCnEjD,oEAAO,IAAMS,EAAe,SAAC/9B,GACzB,GAAoB,IAAhBA,EAAKkd,OACL,MAAM,IAAIwQ,MAAM,qBAIXsQ,EAAkB,SAACC,GAC5B,GAAIA,GAAW,EACX,MAAM,IAAIvQ,MAAM,4B,6BCRxB,8CAEawQ,EAAqB,SAACC,EAAmBjR,GAClD,GAAI/R,KAAsBI,IAA1B,CACI,IAAM6iB,EAAclgB,KAAKiP,UAAUD,GACnC1R,YAAmB,IAAD,OAAK2iB,GAAL,QAA4B,OAAXC,QAAW,IAAXA,OAAA,EAAAA,EAAalhB,QAAS,EAAI,IAAMkhB,EAAc,SAI5D,qBAAdC,YAEPnR,EAEAmR,UAAU3gB,KAAK,CACXuP,MAAOkR,EACPG,mBAAoBpR,IAIxBmR,UAAU3gB,KAAK,CACXuP,MAAOkR,O,wGCZPI,E,mFAAAA,K,+BAAAA,E,mDAAAA,M,KAYL,IAAM/Q,EAAqB,uCAAG,WAAOrO,GAAP,mCAAAK,EAAA,6DACjCL,EAAS,CACLsB,KAAM8d,EAAcC,gBAFS,SAKVrD,cALU,WAK3B9M,EAL2B,QAOpBxB,iBAAmBjQ,IAAmB8Q,MAPlB,sBAO+B,IAAIA,MAAM,uCAPzC,cASjC+Q,YAA+Btf,EAAD,UAAWkP,EAASxtB,gBAApB,aAAW,EAAmBtF,aAC5DmjC,YAA+Bvf,EAAD,oBAAWkP,EAASxtB,gBAApB,aAAW,EAAmBorB,4BAA9B,QAAsD,IACpF0S,YACIxf,EAD8B,oBAE9BkP,EAASxtB,gBAFqB,aAE9B,EAAmBqrB,mCAFW,QAEoB,CAAEC,MAAM,EAAOC,gBAAgB,IAGrFjN,EAAS,CACLsB,KAAM8d,EAAcK,uBACpBje,QAAS,CACLwK,YAAW,UAAEkD,EAASxtB,gBAAX,aAAE,EAAmBsqB,YAChCnrB,KAAI,UAAEquB,EAASxtB,gBAAX,aAAE,EAAmBb,KACzBkrB,gBAAe,UAAEmD,EAASxtB,gBAAX,aAAE,EAAmBqqB,gBACpCE,aAAY,UAAEiD,EAASxtB,gBAAX,aAAE,EAAmBuqB,aACjCC,gBAAe,UAAEgD,EAASxtB,gBAAX,aAAE,EAAmBwqB,gBACpCE,YAAa8C,EAASxtB,SAAS0qB,eAxBN,kBA4B1B8C,EAASxB,gBA5BiB,4CAAH,sDA+BrBR,EAAkB,SAACrK,EAA2BC,GACvD,OAAQA,EAAOxB,MACX,KAAK8d,EAAcC,cACf,OAAO,2BACAxc,GADP,IAEIS,SAAS,IAEjB,KAAK8b,EAAcK,uBACf,OAAO,2BACA3c,EAAOtB,SADd,IAEI8B,SAAS,EACT6I,YAAY,IAEpB,QACI,OAAOtJ,K,8BCjEnB,WAYMib,EAAoB5W,wBAA4B,CAClD,EAAK,CACDhuB,aAAc,EACdE,QAAS,GAEb,EAAK,CACDF,aAAc,EACdE,QAAS,GAEb,EAAK,CACDF,aAAc,EACdE,QAAS,KAIF0kC,O,iKCtBT/Y,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChBkb,qBAAsB,CAClB7oC,QAAS,OACT0C,MAAO,OACPxC,eAAgB,SAChBD,WAAY,SACZ/I,OAAQ,OACR2I,OAAQ/I,EAAME,QAAQ,EAAG,IAE7BpB,QAAS,CACL+E,MAAO7D,EAAM0B,QAAQuF,KAAKJ,WASvB,SAASmrC,EAAqB1iB,GACzC,IAAQ4G,EAA8C5G,EAA9C4G,UAAW+b,EAAmC3iB,EAAnC2iB,sBAA0BtiB,EAA7C,YAAsDL,EAAtD,GAEMgH,EAAUc,EAAU9H,GAE1B,OACI,6CAAK4G,UAAWuC,kBAAKvC,EAAWI,EAAQyb,uBAA2BpiB,GAAnE,aACI,cAAC,IAAD,aAAwB2G,QAAS,CAAE4b,aAAc5b,EAAQx3B,UAAemzC,S,8BChC7E,IAAK9iB,EAAZ,kC,SAAYA,K,wBAAAA,E,wBAAAA,E,sBAAAA,E,oBAAAA,E,UAAAA,E,mCAAAA,E,cAAAA,E,cAAAA,E,oBAAAA,E,4BAAAA,E,wBAAAA,E,mCAAAA,E,iCAAAA,E,sBAAAA,E,oBAAAA,E,gCAAAA,E,wBAAAA,E,uBAAAA,E,eAAAA,E,0BAAAA,E,6BAAAA,M,gNCOL,SAAe1M,EAAtB,kC,4CAAO,WAAgC+rB,GAAhC,mBAAA9b,EAAA,6DACGuc,EAAgC,CAClC,IAAIlf,IAAe,SAAUye,EAAQxlC,QACrC,IAAI+mB,IAAe,OAAQye,EAAQpH,MACnC,IAAIrX,IAAe,SAAUye,EAAQ1Z,SAGnCoa,EAAmB3e,YAA8B0e,GAPpD,SASoB3O,IAAM0J,IAAN,UAAqCh4B,IAAQyQ,kBAA7C,OAAgEysB,GAAoB,CACvGJ,eAAgB,SAAUrN,GACtB,OAAOA,GAAU,OAXtB,WASGF,EATH,QAeUE,SAAW3R,IAAmB6Q,GAfxC,yCAgBQ,CACH5O,cAAe,GACfqW,UAAU,IAlBf,gCAqBI7G,EAASnB,MArBb,4C,sBAwBA,SAAexL,EAAtB,kC,4CAAO,WAA0B5C,GAA1B,SAAAU,EAAA,sEACG4N,IAAMmO,KAAKz8B,IAAQyQ,iBAAkBuP,GADxC,4C,sBAIA,SAAeoC,EAAtB,kC,4CAAO,WAAmCpC,GAAnC,iBAAAU,EAAA,6DACGuc,EAAgC,GAEtCjd,EAAgBvB,SAAQ,SAACpX,GACrB41B,EAAYre,KAAK,IAAIb,IAAe,kBAAmB1W,OAGrD61B,EAAmB3e,YAA8B0e,GAPpD,SASG3O,IAAM6R,OAAN,UAAgBngC,IAAQyQ,kBAAxB,OAA2CysB,IAT9C,4C,iFCxBQkD,IARG,SAAC9iB,GAAD,OACd,cAAC,IAAD,2BAAaA,GAAb,aACI,qBAAKqa,QAAQ,MAAMtwB,GAAG,UAAUg5B,MAAM,6BAA6BC,EAAE,MAAMC,EAAE,MAAMC,QAAQ,YAA3F,SACI,yBAASC,OAAO,gH,yICAhBC,E,gDAAAA,K,2BAAAA,E,8CAAAA,E,+BAAAA,E,mDAAAA,M,KAgBL,IAAMC,EAAmB,uCAAG,WAC/BtgB,EACAmc,GAF+B,eAAA9b,EAAA,6DAI/BL,EAAS,CACLsB,KAAM+e,EAASE,cALY,SAQRrE,YAAiBC,GART,cAQzBjN,EARyB,OAU/BlP,EAAS,CACLsB,KAAM+e,EAASG,qBACfhf,QAAS,CACL2G,OAAQ,CACJC,YAAa8G,EAASuR,aACtB5T,aAAcqC,EAASwR,kBAfJ,kBAoBxB,CACHtY,YAAa8G,EAASuR,aACtB5T,aAAcqC,EAASwR,gBAtBI,2CAAH,wDA0BnBC,EAAqB,uCAAG,WACjC3gB,EACAmc,GAFiC,eAAA9b,EAAA,6DAIjCL,EAAS,CACLsB,KAAM+e,EAASO,gBALc,SAQVvE,YAAmBF,GART,UAQ3BjN,EAR2B,6BAUvB,IAAIX,MAAM,wCAVa,cAajCvO,EAAS,CACLsB,KAAM+e,EAASQ,uBACfrf,QAAS,CACL2G,OAAQ,CACJC,YAAa8G,EAASuR,aACtB5T,aAAcqC,EAASwR,kBAlBF,kBAuB1B,CACHtY,YAAa8G,EAASuR,aACtB5T,aAAcqC,EAASwR,gBAzBM,2CAAH,wDA6BrBtT,EAAmB,SAACvK,EAAwBC,GACrD,OAAQA,EAAOxB,MACX,KAAK+e,EAASE,YACV,OAAO,2BACA1d,GADP,IAEIS,SAAS,IAEjB,KAAK+c,EAASG,qBACV,OAAO,2BACA1d,EAAOtB,SADd,IAEI8B,SAAS,EACT6I,YAAY,IAEpB,KAAKkU,EAASO,cACV,OAAO,2BACA/d,GADP,IAEIS,SAAS,IAEjB,KAAK+c,EAASQ,uBACV,OAAO,2BACA/d,EAAOtB,SADd,IAEI8B,SAAS,EACT6I,YAAY,IAEpB,QACI,OAAOtJ,K,sEC0IJie,IAhNA,SAAC,GAcK,IAAD,IAbhB7oC,eAagB,MAbN,UAaM,MAZhBklB,YAYgB,MAZT,WAYS,EAXhB2G,EAWgB,EAXhBA,SACA0Q,EAUgB,EAVhBA,QAUgB,IAThBv/B,gBASgB,aARhBqqB,gBAQgB,SAPhByhB,EAOgB,EAPhBA,aACAC,EAMgB,EANhBA,QACAC,EAKgB,EALhBA,UAKgB,IAJhB3f,YAIgB,MAJT,SAIS,EAHhBta,EAGgB,EAHhBA,GAGgB,IAFhBk6B,YAEgB,MAFT,SAES,MADhBC,eACgB,SAChB,EAAuC1X,oBAAkB,GAAzD,mBAAO0P,EAAP,KAAoBiI,EAApB,KAEA,EACIlqC,IAAW/C,OADPnH,EAAR,EAAQA,QAAS0M,EAAjB,EAAiBA,gBAAiBC,EAAlC,EAAkCA,kBAAmBE,EAArD,EAAqDA,UAAWD,EAAhE,EAAgEA,aAAcE,EAA9E,EAA8EA,KAAMC,EAApF,EAAoFA,eAAgBE,EAApG,EAAoGA,KAG9F7H,EAAS,CACXpF,QAAS,CACL8H,QAASwqB,EAAWtyB,EAAQsM,OAAkB,UAAT6jB,EAAmBnwB,EAAQqM,MAAQrM,EAAQ8H,QAChFqkC,YAAY,eACLnsC,EAAQwM,OAEfH,MAAM,eACCrM,EAAQqM,OAEfpE,SAAS,eACFjI,EAAQyM,WAGnBC,gBAAiB,CACb5E,QAASwqB,EACH5lB,EAAgBJ,OACP,UAAT6jB,EACAzjB,EAAgBL,MAChBK,EAAgB5E,QACtBqkC,YAAY,eACLz/B,EAAgBF,OAEvBH,MAAM,eACCK,EAAgBL,OAEvBpE,SAAS,eACFyE,EAAgBD,WAG3BE,kBAAmB,CACf7E,QAASwqB,EACH3lB,EAAkBL,OACT,UAAT6jB,EACAxjB,EAAkBN,MAClBM,EAAkB7E,QACxBqkC,YAAY,eACLx/B,EAAkBH,OAEzBH,MAAM,eACCM,EAAkBN,OAEzBpE,SAAS,eACF0E,EAAkBF,WAG7BG,aAAc,CACV9E,QAASwqB,EAAW1lB,EAAaN,OAAkB,UAAT6jB,EAAmBvjB,EAAaP,MAAQO,EAAa9E,QAC/FqkC,YAAY,eACLv/B,EAAaJ,OAEpBH,MAAM,eACCO,EAAaP,OAEpBpE,SAAS,eACF2E,EAAaH,WAGxBI,UAAW,CACP/E,QAASwqB,EAAWzlB,EAAUP,OAAkB,UAAT6jB,EAAmBtjB,EAAUR,MAAQQ,EAAU/E,QACtFqkC,YAAY,eACLt/B,EAAUL,OAEjBH,MAAM,eACCQ,EAAUR,OAEjBpE,SAAS,eACF4E,EAAUJ,WAGrBK,KAAM,CACFhF,QAASwqB,EAAWxlB,EAAKR,OAAkB,UAAT6jB,EAAmBrjB,EAAKT,MAAQS,EAAKhF,QACvEqkC,YAAY,eACLr/B,EAAKN,OAEZH,MAAM,eACCS,EAAKT,OAEZpE,SAAS,eACF6E,EAAKL,WAGhBM,eAAgB,CACZjF,QAASwqB,EACHvlB,EAAeT,OACN,UAAT6jB,EACApjB,EAAeV,MACfU,EAAejF,QACrBqkC,YAAY,eACLp/B,EAAeP,OAEtBH,MAAM,eACCU,EAAeV,OAEtBpE,SAAS,eACF8E,EAAeN,WAG1BQ,KAAM,CACFnF,QAASwqB,EAAWrlB,EAAKX,OAAkB,UAAT6jB,EAAmBljB,EAAKZ,MAAQY,EAAKnF,QACvEqkC,YAAY,eACLl/B,EAAKT,OAEZH,MAAM,eACCY,EAAKZ,OAEZpE,SAAS,eACFgF,EAAKR,YAKd4nC,EAAsB,CACxBxqC,QAAS,OACTD,SAAU,WACVytB,IAAK,MACLid,UAAW,mBACXloC,QAASlC,IAAWrJ,WAwBlB0I,EArBY,SAAC0B,GACf,OAAQA,GACJ,IAAK,kBACD,OAAO7F,EAAOsH,gBAClB,IAAK,oBACD,OAAOtH,EAAOuH,kBAClB,IAAK,YACD,OAAOvH,EAAOyH,UAClB,IAAK,eACD,OAAOzH,EAAOwH,aAClB,IAAK,OACD,OAAOxH,EAAO0H,KAClB,IAAK,iBACD,OAAO1H,EAAO2H,eAClB,IAAK,OACD,OAAO3H,EAAO6H,KAClB,QACI,OAAO7H,EAAOpF,SAILu0C,CAAUtpC,GA0B/B,OAVA2vB,qBAAU,WACO,WAATsZ,GAGAE,IADAD,KAKL,CAACA,IAGA,yBACI3M,QAASA,EACTxtB,GAAIA,EACJsa,KAAMA,EACNjE,MAAK,uCACE9mB,EAAazB,SACZG,EAAWsB,EAAatB,SAAWkkC,EAAc5iC,EAAa4iC,YAAc,MAC7E4H,GAEPS,aAlCmB,WAEnBliB,GAAqB,WAAT4hB,GAEhBE,GAAgB,IA+BZK,aA5BmB,WAEnBniB,GAAqB,WAAT4hB,GAEhBE,GAAgB,IAyBZnsC,SAAUA,EAXd,UAaKgsC,GAAa,sBAAM5jB,MAAK,2BAAOgkB,GAAP,IAAmB9c,KAAM,IAApC,SAA0C0c,IAEvDnd,EACAkd,GAAW,sBAAM3jB,MAAK,2BAAOgkB,GAAP,IAAmB9O,MAAO,IAArC,SAA2CyO,S,mECtMvDU,E,oGA/BNC,EAAoB,SAAC1kB,GACvB,OAAIA,EAAM2kB,aACC,gBAEP3kB,EAAM1rB,gBACC0rB,EAAM1rB,gBAGVyqB,KAAsBI,IAAqB,UAAY,kBAG5D2I,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACTqd,UAAW,SAAC5kB,GAAD,MAAoB,CAC3B1jB,MAAO,OACPxL,OAAQ,OACR6I,SAAUqmB,EAAM6kB,UAAY,WAAa,QACzCzd,IAAK,EACLE,KAAM,EACNhzB,gBAAiBowC,EAAkB1kB,GACnCqX,OAAQrX,EAAM2kB,aAAe,OAAS,IACtC/qC,QAAS,OACTE,eAAgB,SAChBD,WAAY,WAEhBirC,OAAQ,CACJvwC,MAAO7D,EAAM0B,QAAQuF,KAAKJ,Y,SAK1BktC,O,kBAAAA,I,oBAAAA,I,mBAAAA,M,KA2BGrS,IAdA,SAACpS,GACZ,IAAQ4G,EAA2C5G,EAA3C4G,UAAW1G,EAAgCF,EAAhCE,KAAuBG,GAASL,EAA1B2kB,aAAzB,YAAmD3kB,EAAnD,IAEMgH,EAAUc,EAAU9H,GAE1B,OACI,6CAAK4G,UAAWuC,kBAAKvC,EAAWI,EAAQ4d,YAAgBvkB,GAAxD,aACI,8BACI,cAAC,IAAD,CAAkBuG,UAAWI,EAAQ8d,OAAQ5kB,KAAMA,GAAcukB,EAASM,gB,6BC1D1F,8DAGMjd,EAAY,SAACkd,GAAD,OACd/d,aAAW,SAACv2B,GACR,OAAO62B,YAAa,CAChB0d,kBAAmB,CACf9oC,QAAS6oC,SASV,SAASE,IAA+C,IAArBllB,EAAoB,uDAAJ,GAC9D,EAAwBA,EAAhBmlB,aAAR,MAAgB,IAAhB,EAEMC,EAAcxE,cAEd5Z,EAAUc,EAAUsd,EAAYD,GAAOhpC,QAA7B2rB,GAEhB,OAAOd,EAAQie,oB,8NCiBJ,SAASI,EAAcrlB,GAClC,IAxBeic,EAwBPqJ,EAAqFtlB,EAArFslB,YAAaC,EAAwEvlB,EAAxEulB,SAAU9E,EAA8DzgB,EAA9DygB,GAAI7Z,EAA0D5G,EAA1D4G,UAAW2Q,EAA+CvX,EAA/CuX,QAA9C,EAA6FvX,EAAtCwlB,qBAAvD,MAAuE,SAAvE,EAAoFnlB,EAApF,YAA6FL,EAA7F,GACMgH,GAzBSiV,EAyBW,CAAEqJ,eAxB5Bre,aAAW,SAACv2B,GACR,IAZwBqrC,EAYxB,EAAiDE,EAAzCqJ,mBAAR,MAAsBrrC,IAAW1F,MAAMjC,MAAvC,EAEA,OAAOi1B,YAAa,CAChB5uB,KAAM,CACF7D,QAhBgBinC,EAgBeuJ,EAfrC,aAAN,OAAoBvJ,IAgBRxnC,MAAO0F,IAAW1F,MAAMjC,OAE5BmzC,UAAW,CACP/rC,OAAQ,mBAiBdgsC,EAAUC,cAEhB,OACI,cAAC,IAAD,aACI3qC,QAASwqC,EACT5e,UAAWuC,kBAAKvC,EAAWI,EAAQruB,KAApB,eACVquB,EAAQye,eAAmBlS,IAAPkN,IAEzBza,IAAKuf,GAAwB,IAAZA,EAAiBA,EAAWpxB,IAAOE,cACpDkjB,QAAS,SAAC1G,QACU0C,IAAZgE,GACAA,EAAQ1G,QAGD0C,IAAPkN,GACAiF,EAAQpkB,KAAKmf,KAGjBpgB,M,sKC1DVyH,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CAAEpE,MAAO,WACfqxC,cAAe,CACX5I,eAAgB,QAEpB6I,eAAgB,CACZ7I,eAAgB,OAChB,UAAW,CACPA,eAAgB,cAGxB8I,gBAAiB,CACb9I,eAAgB,kBAQb,SAAS2D,EAAW3gB,GAAgB,IAAD,EACxCgH,EAAUc,IACRjB,EAAqD7G,EAArD6G,SAAR,EAA6D7G,EAA3C+lB,iBAAlB,MAA8B,OAA9B,EAAsCnf,EAAuB5G,EAAvB4G,UAAcvG,EAApD,YAA6DL,EAA7D,GACA,OACI,cAAC,IAAD,yBACI4G,UAAWuC,kBAAKvC,EAAWI,EAAQruB,MAApB,mBACVquB,EAAQ4e,cAA8B,SAAdG,GADd,cAEV/e,EAAQ6e,eAA+B,UAAdE,GAFf,cAGV/e,EAAQ8e,gBAAgC,WAAdC,GAHhB,KAKX1lB,GANR,aAQKwG,O,0DCIEmf,IA1BA,SAAC,GAAqC,IAAnCnf,EAAkC,EAAlCA,SAAUof,EAAwB,EAAxBA,UACxB,EAA4CzZ,mBAA6B,MAAzE,mBAAO0Z,EAAP,KAAuBC,EAAvB,KAoBA,OAlBAtZ,2BAAgB,WACZ,IAAIuZ,EAAU5oC,SAASywB,eAAegY,GAClCI,GAAgB,EASpB,OANKD,IACDC,GAAgB,EAChBD,EAjByB,SAACH,GAClC,IAAMC,EAAiB1oC,SAASyvB,cAAc,OAG9C,OAFAiZ,EAAeI,aAAa,KAAML,GAClCzoC,SAAS0vB,KAAKC,YAAY+Y,GACnBA,EAaWK,CAA6BN,IAE3CE,EAAkBC,GAEX,WACCC,GAAiBD,EAAQI,YACzBJ,EAAQI,WAAWlZ,YAAY8Y,MAGxC,CAACH,IAEmB,OAAnBC,EAAgC,KAE7BO,uBAAa5f,EAAUqf,K,uICnC7BQ,E,kBAAAA,K,wCAAAA,E,yCAAAA,M,KAYE,IAAMC,EAAiC,SAAC5jB,EAA+B6jB,GAM1E,OALA7jB,EAAS,CACLsB,KAAMqiB,EAAyBG,cAC/BtiB,QAASqiB,IAGNA,GAGEtE,EAAiC,SAACvf,EAA+B+jB,GAM1E,OALA/jB,EAAS,CACLsB,KAAMqiB,EAAyBK,cAC/BxiB,QAASuiB,IAGNA,GAGE1W,EAAqC,SAC9CxK,EACAC,GAEA,OAAQA,EAAOxB,MACX,KAAKqiB,EAAyBG,cAC1B,MAAM,GAAN,mBAAWjhB,GAAX,CAAkBC,EAAOtB,UAC7B,KAAKmiB,EAAyBK,cAC1B,OAAOlhB,EAAOtB,QAClB,QACI,OAAOqB,K,qCC3CnB,sCAAIohB,EAAIC,EAAR,OAEIC,EAAY,CAAC,QAAS,WAE1B,SAASC,IAA2Q,OAA9PA,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIhQ,EAAI,EAAGA,EAAIiQ,UAAUzmB,OAAQwW,IAAK,CAAE,IAAIkQ,EAASD,UAAUjQ,GAAI,IAAK,IAAImQ,KAAOD,EAAcJ,OAAOM,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQH,EAAOG,GAAOD,EAAOC,IAAY,OAAOH,GAAkBH,EAASU,MAAM7mB,KAAMumB,WAEhT,SAASO,EAAyBN,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkEC,EAAKnQ,EAAnEgQ,EAEzF,SAAuCE,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2DC,EAAKnQ,EAA5DgQ,EAAS,GAAQU,EAAaZ,OAAOa,KAAKT,GAAqB,IAAKlQ,EAAI,EAAGA,EAAI0Q,EAAWlnB,OAAQwW,IAAOmQ,EAAMO,EAAW1Q,GAAQyQ,EAASG,QAAQT,IAAQ,IAAaH,EAAOG,GAAOD,EAAOC,IAAQ,OAAOH,EAFxMa,CAA8BX,EAAQO,GAAuB,GAAIX,OAAOgB,sBAAuB,CAAE,IAAIC,EAAmBjB,OAAOgB,sBAAsBZ,GAAS,IAAKlQ,EAAI,EAAGA,EAAI+Q,EAAiBvnB,OAAQwW,IAAOmQ,EAAMY,EAAiB/Q,GAAQyQ,EAASG,QAAQT,IAAQ,GAAkBL,OAAOM,UAAUY,qBAAqBV,KAAKJ,EAAQC,KAAgBH,EAAOG,GAAOD,EAAOC,IAAU,OAAOH,EAMne,SAASiB,EAAuBC,EAAMC,GACpC,IAAIrtC,EAAQotC,EAAKptC,MACbstC,EAAUF,EAAKE,QACf1oB,EAAQ8nB,EAAyBU,EAAMtB,GAE3C,OAAoB,gBAAoB,MAAOC,EAAS,CACtDp9B,GAAI,UACJg5B,MAAO,6BACP4F,WAAY,+BACZ3F,EAAG,MACHC,EAAG,MACHC,QAAS,gBACT9iB,MAAO,CACLwoB,iBAAkB,qBAEpBC,SAAU,WACVC,KAAM,UACNjT,IAAK4S,EACL,kBAAmBC,GAClB1oB,GAAQ5kB,EAAqB,gBAAoB,QAAS,CAC3D2O,GAAI2+B,GACHttC,GAAS,KAAM4rC,IAAOA,EAAkB,gBAAoB,IAAK,KAAmB,gBAAoB,OAAQ,CACjH+B,EAAG,mNACY,gBAAoB,OAAQ,CAC3CA,EAAG,0RACY,gBAAoB,OAAQ,CAC3CA,EAAG,qPACY,gBAAoB,OAAQ,CAC3CA,EAAG,uUACY,gBAAoB,OAAQ,CAC3CA,EAAG,6KACY,gBAAoB,OAAQ,CAC3CA,EAAG,uUACY,gBAAoB,OAAQ,CAC3CA,EAAG,yJACC9B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC/D8B,EAAG,g6CAIP,IAAIC,EAA0B,aAAiBT,GAChC,K,qGCrDA,MAA0B,kC,sDCanCzgB,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CACFhE,WAAYjE,EAAM0B,QAAQuC,WAAWkD,QACrCyE,MAAO,OACPxL,OAAQ,QACR8I,QAAS,QAEbqvC,QAAS,CACLrvC,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,UAEhBqvC,OAAQ,CACJ30C,MAAO7D,EAAMoC,SAASf,YAE1Bo3C,IAAK,CACDvvC,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChB5D,gBAAgB,OAAD,OAASvB,EAAT,KACfC,eAAgB,QAChBw0C,mBAAoB,iBAExBhuC,MAAO,CACH7G,MAAO7D,EAAM0B,QAAQuF,KAAKJ,MAE9BQ,KAAM,CACFlI,WAAY,SACZ0E,MAAO0F,IAAW1F,MAAMjC,YAWrB,SAASigC,EAAUvS,GAC9B,IAAQ5kB,EAAwB4kB,EAAxB5kB,MAAOrD,EAAiBioB,EAAjBjoB,KAAM8tB,EAAW7F,EAAX6F,OACfwjB,EAAenE,YAA0B,CAAEC,MAAO,MAClDne,EAAUc,IAEVwhB,EACF,cAACxK,EAAA,EAAD,CAAc9jC,QAAQ,cAAcu8B,QAAS,kBAAMnY,YAAmBS,IAAY0pB,SAAlF,SACI,cAACrS,EAAA,EAAD,wBAIR,OACI,sBAAKtQ,UAAWI,EAAQruB,KAAxB,UACI,qBAAKiuB,UAAWuC,kBAAKnC,EAAQmiB,IAAKE,GAAlC,SACI,cAACnS,EAAA,EAAD,CAAYtQ,UAAWI,EAAQkiB,OAAQluC,QAAQ,KAA/C,0BAIJ,sBAAK4rB,UAAWuC,kBAAKnC,EAAQiiB,QAASI,GAAtC,eACe9V,IAAVn4B,EAAsB,KACnB,cAAC87B,EAAA,EAAD,CAAYtQ,UAAWI,EAAQ5rB,MAAOJ,QAAQ,KAAKwuC,MAAM,SAAzD,SACKpuC,SAGCm4B,IAATx7B,EAAqB,KAClB,cAACm/B,EAAA,EAAD,CAAYtQ,UAAWI,EAAQjvB,KAAMiD,QAAQ,KAAKwuC,MAAM,SAASC,cAAY,EAA7E,SACK1xC,IAGRgnB,KAAsBI,IACnBmqB,OACW/V,IAAX1N,EAAuB,KACvB,qCACI,cAAC9F,EAAA,EAAD,CAAQG,KAAM,MACb2F,a,6BCvFzB,sDAEe,SAASwM,IACpB,OACI,cAAC,IAAD,CACIj3B,MAAM,WACNrD,KACI,iI,wICEJ2xC,E,iFAAAA,K,yCAAAA,E,4DAAAA,E,+BAAAA,E,mDAAAA,M,KAgBL,IAAM5U,EAA0B,uCAAG,WAAO/R,GAAP,eAAAK,EAAA,6DACtCL,EAAS,CACLsB,KAAMqlB,EAAmBC,qBAFS,kBAMb3Y,IAAM0J,IAAN,UACdh9B,IAASM,OADK,YAE2B,gBARd,cAM5BosB,EAN4B,OAYlCrH,EAAS,CACLsB,KAAMqlB,EAAmBE,4BACzBrlB,QAAS6F,EAAO0G,OAdc,kBAiB3B1G,EAAO0G,MAjBoB,sCAmB5BQ,MAAM,wEAnBsB,yDAAH,sDAuB1BiK,EAAqB,uCAAG,WAAOxY,EAA+BiX,GAAtC,iBAAA5W,EAAA,6DACjCL,EAAS,CACLsB,KAAMqlB,EAAmBC,qBAGvBE,EACF,UACSvrC,YAAa07B,GADtB,kBAN6B,kBAaR8P,YAAkBD,GAbV,cAavBzf,EAbuB,OAe7BrH,EAAS,CACLsB,KAAMqlB,EAAmBK,uBACzBxlB,QAAS6F,IAjBgB,kBAoBtBA,GApBsB,wCAsBvBkH,MAAM,mEAtBiB,0DAAH,wDA0BrBsB,EAAuB,SAAChN,EAA4BC,GAAkC,IAAD,IAC9F,OAAQA,EAAOxB,MACX,KAAKqlB,EAAmBC,mBACxB,KAAKD,EAAmBM,cACpB,OAAO,2BACApkB,GADP,IAEIS,SAAS,IAGjB,KAAKqjB,EAAmBE,4BACpB,OAAO,2BACA/jB,EAAOtB,SADd,IAEIuO,SAAS,2BACFjN,EAAOtB,QAAQuO,UADd,IAEJC,MAAM,GAAD,OAAKlN,EAAOtB,QAAQuO,SAASC,OAA7B,OAAqCr1B,IAASM,QACnD6G,OAAO,GAAD,OAAKghB,EAAOtB,QAAQuO,SAASjuB,QAA7B,OAAsCnH,IAASM,UAEzDqoB,SAAS,EACT6I,YAAY,IAGpB,KAAKwa,EAAmBK,uBACpB,OAAO,2BACAnkB,GADP,IAEI8N,SAAQ,oBAAE7N,EAAOtB,eAAT,aAAE,EAAgBmP,gBAAlB,QAA8B,GACtCrN,SAAS,EACT6I,YAAY,IAEpB,QACI,OAAOtJ,K,sLC9FNqkB,EAAsD,SAC/D9e,EACApI,EACAmnB,GAEAlZ,IAAMC,SAASC,QAAQC,cAAvB,iBAAiDhG,GAEjD6F,IAAMwK,aAAavJ,SAASwJ,KACxB,SAACxJ,GACG,OAAOA,KAEX,SAACr6B,GACOA,EAAMq6B,SAASE,SAAW3R,IAAmB2pB,eAC7C3qB,QAAQC,IAAI,yCAEZikB,YAAsB3gB,EAAUmnB,GAC3B3e,MAAK,SAAC0G,GACCA,EAAS9G,aAAekU,IAAqBmE,cAC7CxS,IAAMC,SAASC,QAAQC,cAAvB,iBAAiDc,EAAS9G,aAE1DiG,YAAsBrO,IAEtB/D,OAAOvhB,SAAS2sC,KAAhB,UAA0B5rC,IAAYC,YAG7CitB,OAAM,SAAC2e,GACJ7qB,QAAQC,IAAR,uCAA4C4qB,IAC5CrrB,OAAOvhB,SAAS2sC,KAAhB,UAA0B5rC,IAAYC,iBAOjDuzB,EAAY,uCAAG,WACxBjP,EACAmc,GAFwB,iBAAA9b,EAAA,6DAIpBknB,GAAa,EAJO,SAMI5G,YAAsB3gB,EAAUmc,GANpC,cAMlBqL,EANkB,QAQNpf,cAAgBkU,IAAqBmE,eACnDyG,EAAoDM,EAAcpf,YAAapI,EAAUmc,GACzFoL,GAAa,GAVO,SAYlBlZ,YAAsBrO,GAZJ,gCAajBunB,GAbiB,2CAAH,yD,gKCpCnBxiB,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChBijB,MAAO,GACPh7C,QAAS,CACL8E,gBAAiB5D,EAAM0B,QAAQ5C,QAAQ+H,KACvChD,MAAO0F,IAAW1F,MAAMjC,MACxBwC,OAAO,aAAD,OAAemF,IAAW1F,MAAMjC,QAE1C7C,UAAW,CACP6E,gBAAiB5D,EAAM0B,QAAQ5C,QAAQgI,KACvCjD,MAAO0F,IAAW1F,MAAMjC,MACxBwC,OAAO,aAAD,OAAemF,IAAW1F,MAAMjC,QAE1CA,MAAO,CACHgC,gBAAiB5D,EAAMoC,SAASf,WAChCwC,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAC7BzC,OAAO,aAAD,OAAepE,EAAM0B,QAAQ5C,QAAQ+H,YAWxC,SAASkzC,EAAT,GAAiG,IAAD,IAAlEzvC,eAAkE,MAAxD,UAAwD,EAApC0vC,EAAoC,EAA7C1jB,QAA6B3G,EAAgB,iBACrG2G,EAAUc,IAEV6iB,EAAsB9e,cAE5B,OACI,cAAC,IAAD,aAEI+e,aAAcD,EAAoB/kB,MAAM2D,qBAAqBE,MAC7DohB,IAAK,EACL7jB,QAAO,2BAAO0jB,GAAP,IAAwBF,MAAOrhB,kBAAI,OAACuhB,QAAD,IAACA,OAAD,EAACA,EAAiBF,MAAOxjB,EAAQhsB,OACvEqlB,M,yJCuCDyqB,IA/CS,SAAC,GAA0F,IAAxFC,EAAuF,EAAvFA,aAAcj6C,EAAyE,EAAzEA,OAAQwL,EAAiE,EAAjEA,MAAiE,IAA1DhI,uBAA0D,MAAxC,GAAwC,MAApCmF,cAAoC,MAA3B,IAA2B,EAAnB4mB,EAAmB,iBACxGgC,EAAWH,cACXxxB,EAAgBuvB,cAChB+G,EApCQ,SAAC3E,EAAmB/tB,EAAyBmF,GAA7C,OACdwtB,aAAW,SAACv2B,GAAD,OACP62B,YAAa,CAET,mBAAoB,CAChB,MAAO,CACH8c,UAAW,aACXpuC,QAAS,IAEb,OAAQ,CACJouC,UAAW,WACXpuC,QAAS,IAGjB0C,KAAM,CACFiB,QAAS,QACTtF,gBAAiBA,GAAoC5D,EAAM0B,QAAQ5C,QAAQiI,MAC3E1B,UAAW,kCACXw/B,aAAc7kC,EAAME,QAAQ6I,SAkBxBquB,CAAUzF,EAAU/tB,EAAiBmF,EAArCquB,GAEV3yB,EAAS,CACXiG,MAAO,CACHtK,OAAQA,IAAkBuxB,EAAW,GAAK,IAC1C/lB,MAAOA,GAAgB,OACvBL,aAAcvL,EAAMyE,OAAOO,gBAE/Bs1C,IAAK,CACDl6C,OAAQA,IAAkBuxB,EAAW,IAAM,KAC3C/lB,MAAOA,GAAgB,OACvBL,aAAcvL,EAAMyE,OAAOO,gBAE/Bu1C,OAAQ,CACJn6C,OAAQA,IAAkBuxB,EAAW,GAAK,IAC1C/lB,MAAOA,IAAgB+lB,EAAW,GAAK,IACvCpmB,aAAc,SAehBivC,EAXY,SAACH,GACf,OAAQA,GACJ,IAAK,QACD,OAAO51C,EAAOiG,MAClB,IAAK,MACD,OAAOjG,EAAO61C,IAClB,IAAK,SACD,OAAO71C,EAAO81C,QAIH3G,CAAUyG,GAEjC,OACI,iCACInkB,UAAWI,EAAQruB,KACnBynB,MAAK,eACE8qB,IAEH7qB,M,sCCvEhB,kCAAO,IAAMgf,EAA6C,CACtDmE,aAAc,GACdC,cAAe,GACf0H,WAAY,EACZC,WAAY,GACZC,SAAU,O,6BCbd,+EAQe,SAASC,IACpB,IAAMX,EAAsB9e,cAEtB0f,EACFZ,EAAoB/kB,MAAM2D,qBAAqBlD,SAC/CskB,EAAoB/kB,MAAM+D,qBAAqBtD,QAUnD,OACI,gCACI,cAAC,IAAD,CACImlB,QAAS,CACL,CACIhU,MAAO,sBACPD,QAdO,WACvB1S,YACI8lB,EAAoB5nB,SACpB4nB,EAAoB/kB,MAAM2D,qBAAqB9G,cAC/CkoB,EAAoB/kB,MAAM+D,qBAAqBlH,kBAa3CgpB,gBAAiB,CAAEvrB,KAAM,WAE7B,cAAC,IAAD,CACImG,QAASklB,EACThU,QAAS,kBACLzU,YACI6nB,EAAoB5nB,SACpB4nB,EAAoB/kB,MAAM+D,qBAAqBlH,cAC/CkoB,EAAoB/kB,MAAM2D,qBAAqB9G,gBAGvDzqB,UAAW2yC,EAAoB/kB,MAAM2D,qBAAqBG,YAC1DxJ,KAAK,e,yHCpCN,SAASwrB,EAAiB1rB,GACrC,IAAMolB,EAAcxE,cAEpB,EAAiC5gB,EAAzBmlB,aAAR,MAAgB,IAAhB,EAAwB9kB,EAAxB,YAAiCL,EAAjC,GAEA,OAAO,cAAC,IAAD,aAAQE,KAAMklB,EAAYD,GAAOhpC,QAASgkB,cAAY,GAAKE,M,6BCbtE,8CAMe,SAASsrB,IAA0C,IAArB3rB,EAAoB,uDAAJ,GACzD,EAAwBA,EAAhBmlB,aAAR,MAAgB,IAAhB,EAEMC,EAAcxE,cAEpB,OAAOwE,EAAYD,GAAOhpC,U,oICgBfyvC,MAzBf,SAA4BnE,EAAaoE,GAGrC,MAAsCrf,oBAAS,WAC3C,IACI,IAAMiC,EAAOzP,OAAO8sB,aAAaC,QAAQtE,GACzC,OAAOhZ,EAAO3M,KAAKC,MAAM0M,GAAQod,EACnC,MAAO/tC,GAEL,OADA0hB,QAAQC,IAAI,qBAAsB3hB,GAC3B+tC,MANf,mBAAOG,EAAP,KAAoBC,EAApB,KAmBA,MAAO,CAACD,EATsB,SAAC9uC,GAC3B,IACI,IAAMgvC,EAAehvC,aAAiBivC,SAAWjvC,EAAM8uC,GAAe9uC,EACtE+uC,EAAeC,GACfltB,OAAO8sB,aAAaM,QAAQ3E,EAAK3lB,KAAKiP,UAAUmb,IAClD,MAAOpuC,GACL0hB,QAAQC,IAAI,0BAA2B3hB,O,OCP7CuuC,EAAqBpiB,wBAAkC,CACzDqiB,UAAU,EACVC,YAAa,aACbC,cAAUjZ,EACVkZ,YAAa,aACbC,gBAAYnZ,EACZoZ,cAAe,eAObC,EAAsB,SAAC,GAA0B,IAAxB/lB,EAAuB,EAAvBA,SAC3B,EAAgC+kB,EAAgB,YAAY,GAA5D,mBAAOU,EAAP,KAAiBC,EAAjB,KACA,EAA6B/f,qBAA7B,mBAAOggB,EAAP,KAAiBK,EAAjB,KACA,EAAiCrgB,qBAAjC,mBAAOkgB,EAAP,KAAmBI,EAAnB,KAEc/f,mBAAQ,kBAAOuf,EAAWh1C,IAAYwB,MAAa,CAACwzC,IAKlE,OACI,cAACS,EAAA,EAAD,CAAer8C,MAAO4G,IAAtB,SAEI,cAAC+0C,EAAmBzgB,SAApB,CACI1uB,MAAO,CACHovC,WACAC,cACAC,WACAC,YAXI,SAACvvC,GAAD,OAAmB2vC,EAAS3vC,IAYhCwvC,aACAC,cAZM,SAACzvC,GAAD,OAAmB4vC,EAAW5vC,KAK5C,SAUK2pB,OAQJmmB,EAAoB,WAC7B,MAH8BlhB,qBAAWugB,GAGjCI,EAAR,EAAQA,YACR,MAAO,CACHD,SAFJ,EAAqBA,SAGjBC,cACAC,WAJJ,EAA+BA,WAK3BC,cALJ,EAA2CA,iB,4FCzDhC,SAASM,EAAYjtB,GAChC,OACI,eAAC,IAAD,2BAAaA,GAAb,cACI,8BACI,sBAAM+oB,EAAE,oPACR,sBAAMA,EAAE,iyBAEZ,sBAAMA,EAAE,6PACR,sBAAMA,EAAE,sPACR,4BACI,sBAAMA,EAAE,0vBAEZ,4BACI,sBAAMA,EAAE,yuB,iHCXT,SAASmE,EAAWltB,GAC/B,IAAQ6G,EAAsB7G,EAAtB6G,SAAaxG,EAArB,YAA8BL,EAA9B,GAEA,OACI,cAAC,IAAD,yBAAMsnB,OAAO,SAAS6F,IAAI,cAAiB9sB,GAA3C,aACKwG,O,8BCTN,IAAKumB,EAAZ,kC,SAAYA,O,uBAAAA,I,2BAAAA,I,8BAAAA,M,mCCEZ,kCAEO,SAAS9L,IACZ,IAAM7S,EAAOqd,aAAaC,QAHU,sCAKpC,GAAY,MAARtd,EAEJ,OAAO3M,KAAKC,MAAM0M,K,gICAhB3G,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT8lB,yBAA0B,CACtBx0C,UAAW,EACXkB,WAAY,yBAEhBuzC,wBAAyB,CACrBvzC,WAAY,wBACZlB,UAAW,SAKR,SAAS00C,IAAyB,IAAD,EACtCvmB,EAAUc,IAChB,EAAwC0E,mBAAiBxN,OAAOyO,aAAhE,mBAAO+f,EAAP,KACA,GADA,KACoChhB,oBAAS,IAA7C,mBAAOihB,EAAP,KAAmBC,EAAnB,KAEMC,EAA2B,UAC5B3uB,OAAO4uB,WAAW,8BAA8BC,SAE7C7uB,OAAOC,UAAU6uB,kBAHQ,SAM3BC,EAAkBvf,SAASgf,EAAe,IAehD,OAbA7iB,qBAAU,WACN,IAAMqjB,EAAK,WACHxf,SAASgf,GACLxuB,OAAOyO,YAAc+f,EACrBE,GAAc,GAGtBA,GAAc,IAGlB,OADA1uB,OAAOuS,iBAAiB,SAAUyc,GAC3B,kBAAMhvB,OAAOkT,oBAAoB,SAAU8b,GAAI,MACvD,IAEID,EACH,qBACInnB,UAAWuC,kBAAKnC,EAAQqmB,yBAAT,eACVrmB,EAAQsmB,wBAA0BK,GAAsBF,MAGjE,O,gPC/CKQ,EAAgB,uCAAG,4BAAA7qB,EAAA,sEACL4N,IAAM0J,IAAch4B,IAAQvD,YAAYmG,wBADnC,cACtB2sB,EADsB,yBAGrBA,EAASnB,MAHY,2CAAH,qDAMhBod,EAAc,uCAAG,WAAO1sB,GAAP,SAAA4B,EAAA,sEACpB4N,IAAMmO,KAAKz8B,IAAQvD,YAAYuG,eAAgB,CAAE8b,IAAKA,IADlC,2CAAH,sDAId2sB,EAAc,uCAAG,4BAAA/qB,EAAA,sEACH4N,IAAM0J,IAAyBp8B,YAAaoE,IAAQvD,YAAYoG,eAD7D,cACpB0sB,EADoB,yBAGnBA,EAASnB,MAHU,2CAAH,qDAMdsd,EAA0B,uCAAG,WAAOxqC,GAAP,qBAAAwf,EAAA,6DAChCuc,EAAgC,CAAC,IAAIlf,IAAe,OAAQ7c,IAE5Dg8B,EAAmB3e,YAA8B0e,GAHjB,SAKf3O,IAAM0J,IAAN,UAChBh4B,IAAQvD,YAAYsG,mBADJ,OACwBm6B,IANT,WAKhC3N,EALgC,QASzBE,SAAW3R,IAAmBif,UATL,yCASuB,IATvB,0CAW/BxN,EAASnB,KAAKvB,uBAXiB,QAWE,IAXF,2CAAH,uD,2MCf3B8e,E,wDAAAA,K,kDAAAA,E,qEAAAA,E,0DAAAA,E,6EAAAA,E,8CAAAA,E,iEAAAA,E,sDAAAA,E,yEAAAA,E,sCAAAA,E,yDAAAA,E,8CAAAA,E,iEAAAA,E,iCAAAA,E,qDAAAA,M,KAoCZ,IAAMC,EAAsB,SAACC,GAAD,OACT,OAAfA,GAAsC,KAAfA,EAAoBA,EAAap6B,IAAOC,cAKtDo6B,EAA8B,uCAAG,WAC1CzrB,EACAsM,GAF0C,SAAAjM,EAAA,6DAI1CL,EAAS,CACLsB,KAAMgqB,EAAiBI,yBALe,SAQpCP,YAAe7e,GARqB,cAU1CtM,EAAS,CACLsB,KAAMgqB,EAAiBK,gCACvBnqB,QAAS+pB,EAAoBjf,KAZS,kBAenCA,GAfmC,2CAAH,wDAkB9BgT,EAAiC,SAACtf,EAA+B5jB,GArB9C,IAACwvC,EAgC7B,OAVA5rB,EAAS,CACLsB,KAAMgqB,EAAiBO,kCACvBrqB,QAAS,CACL8K,cAAeif,EAAmB,OAACnvC,QAAD,IAACA,OAAD,EAACA,EAAakwB,eAChDC,eAAc,OAAEnwB,QAAF,IAAEA,OAAF,EAAEA,EAAamwB,eAC7BC,iBA3BqBof,EA2BmB,OAACxvC,QAAD,IAACA,OAAD,EAACA,EAAaowB,gBA1B3C,OAAnBof,GAA8C,KAAnBA,EAAwBA,EAAiBx6B,IAAOE,eA2BnEmb,UAAS,OAAErwB,QAAF,IAAEA,OAAF,EAAEA,EAAaqwB,aAIzBrwB,GAGE0vC,EAAwB,uCAAG,WAAO9rB,GAAP,eAAAK,EAAA,6DACpCL,EAAS,CACLsB,KAAMgqB,EAAiBS,mBAFS,SAKfb,cALe,cAK9Bc,EAL8B,OAOpChsB,EAAS,CACLsB,KAAMgqB,EAAiBW,0BACvBzqB,QAASwqB,IATuB,kBAY7BA,GAZ6B,2CAAH,sDAexBE,EAAsB,uCAAG,WAAOlsB,GAAP,eAAAK,EAAA,6DAClCL,EAAS,CACLsB,KAAMgqB,EAAiBa,iBAFO,SAKbf,cALa,cAK5BY,EAL4B,OAOlChsB,EAAS,CACLsB,KAAMgqB,EAAiBc,wBACvB5qB,QAASwqB,IATqB,kBAY3BA,GAZ2B,2CAAH,sDAetB7e,EAAqB,SAACtK,EAA8BC,GAC7D,OAAQA,EAAOxB,MACX,KAAKgqB,EAAiBI,uBACtB,KAAKJ,EAAiBe,2BACtB,KAAKf,EAAiBgB,yBACtB,KAAKhB,EAAiBS,iBACtB,KAAKT,EAAiBiB,qBACtB,KAAKjB,EAAiBa,eACtB,KAAKb,EAAiBkB,qBAClB,OAAO,2BACA3pB,GADP,IAEIS,SAAS,IAEjB,KAAKgoB,EAAiBK,gCAClB,OAAO,2BACA9oB,GADP,IAEIwJ,gBAAgB,2BACTxJ,EAAMwJ,iBADE,IAEXC,cAAexJ,EAAOtB,UAE1B8B,SAAS,IAEjB,KAAKgoB,EAAiBmB,oCAClB,OAAO,2BACA5pB,GADP,IAEIwJ,gBAAgB,2BACTxJ,EAAMwJ,iBADE,IAEXG,gBAAiB1J,EAAOtB,UAE5B8B,SAAS,IAEjB,KAAKgoB,EAAiBoB,8BAClB,OAAO,2BACA7pB,GADP,IAEIwJ,gBAAgB,2BACTxJ,EAAMwJ,iBADE,IAEXI,UAAW3J,EAAOtB,YAG9B,KAAK8pB,EAAiBO,kCAClB,OAAO,2BACAhpB,GADP,IAEIwJ,gBAAiBvJ,EAAOtB,QACxB8B,SAAS,IAEjB,KAAKgoB,EAAiBW,0BAClB,OAAO,2BACAppB,GADP,IAEI6J,kBAAkB,2BACX7J,EAAM6J,mBADI,IAEbC,YAAa7J,EAAOtB,UAExB8B,SAAS,IAEjB,KAAKgoB,EAAiBqB,8BAClB,OAAO,2BACA9pB,GADP,IAEI6J,kBAAkB,2BACX7J,EAAM6J,mBADI,IAEbE,cAAe9J,EAAOtB,UAE1B8B,SAAS,IAEjB,KAAKgoB,EAAiBc,wBAClB,OAAO,2BACAvpB,GADP,IAEI6J,kBAAkB,2BACX7J,EAAM6J,mBADI,IAEbD,UAAW3J,EAAOtB,UAEtB8B,SAAS,IAEjB,QACI,OAAOT,K,yFCvLJ,SAAS+pB,EAAY3vB,GAChC,OACI,cAAC,IAAD,2BAAaA,GAAb,aACI,sBAAM+oB,EAAE,8mC,0GCFf6G,E,iBAAAA,K,kCAAAA,M,KAWE,IAAMrN,EAAqC,SAC9Cxf,EACA5jB,GAOA,OALA4jB,EAAS,CACLsB,KAAMurB,EAA6BC,eACnCtrB,QAASplB,IAGNA,GAGEkxB,EAAkC,SAC3CzK,EACAC,GAEA,OAAQA,EAAOxB,OACNurB,EAA6BC,eACvB,2BACAjqB,GADP,IAEImK,KAAMlK,EAAOtB,QAAQwL,KACrBC,eAAgBnK,EAAOtB,QAAQyL,iBAG5BpK,I,sLChCbkqB,EAAW9e,IAAMpJ,SAEVmoB,EAAmB,uCAAG,WAAOC,GAAP,eAAA5sB,EAAA,sEACxB0sB,EAASpV,IAAT,UAAuCsV,EAAvC,uCADwB,wJAC/B,EAAgGlf,KADjE,mFAAH,sDAGnBgZ,EAAiB,uCAAG,WAAOmG,GAAP,eAAA7sB,EAAA,sEACtB0sB,EAASpV,IAAgCuV,GADnB,wJAC7B,EAA4Dnf,KAD/B,mFAAH,sDAGjBof,EAAgB,uCAAG,WAAOF,GAAP,eAAA5sB,EAAA,sEACrB0sB,EAASpV,IAAT,UAA2CsV,EAA3C,YAAyD76B,IAASxT,QAAQqW,cAA1E,mBADqB,wJAC5B,EACM8Y,KAFsB,mFAAH,uD,6LCJvBhJ,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACTzvB,MAAO,CACHxD,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQC,OAAOE,MAC5BuC,OAAO,aAAD,OAAepE,EAAM0B,QAAQuF,KAAKF,aAerC,SAAS04C,EAAT,GAAgE,IAArC3E,EAAoC,EAApCA,QAASC,EAA2B,EAA3BA,gBACzCzkB,EAAUc,IAChB,EAAgCsoB,IAAM5jB,SAA6B,MAAnE,mBAAO6jB,EAAP,KAAiBC,EAAjB,KACM5/C,EAAgBuvB,cAMhBswB,EAAc,WAChBD,EAAY,OAGhB,OACI,qCACI,cAAC,IAAD,yBACI/Y,QAXQ,SAAC1G,GACjByf,EAAYzf,EAAM2f,gBAWVpwB,MAAO,CACHzrB,WAAYjE,EAAMoC,SAASO,kBAC3BkB,MAAO7D,EAAM0B,QAAQC,OAAOC,QAE5Bm5C,GANR,aAQI,cAAC,IAAD,OAEHD,EAAQ1qB,OAAS,GACd,cAAC,IAAD,CACIkG,QAAS,CAAElvB,MAAOkvB,EAAQlvB,OAC1Bu4C,SAAUA,EACVI,aAAW,EACXC,KAAMC,QAAQN,GACdO,QAASL,EALb,SAOK/E,EAAQ3nB,KAAI,SAACgC,EAAQyR,GAAT,OACT,qCACI,cAAC,IAAD,CACIlX,MAAO,CAAE3mB,OAAQ,cAAewC,aAAc,GAE9Cs7B,QAAS,WACL1R,EAAO0R,UACPgZ,KAEJM,OAAK,EAPT,SASKhrB,EAAO2R,OAPHF,GASRA,EAAIkU,EAAQ1qB,OAAS,GAAK,cAAC,IAAD,iB,kCCtEhD,IAAKiX,EAAZ,kC,SAAYA,O,mBAAAA,I,eAAAA,I,cAAAA,M,wJCCNjQ,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB,UAAW,CACP,cAAe,CACXjzB,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,YAM9B,SAASu5C,EAAU9wB,GAE9B,OADA8H,IACO,cAAC,WAAD,eAAc9H,IAGlB,SAAS+wB,EAAgBrgD,GAC5B,IAAMsgD,EAAiBtgD,EAAM0B,QAAQuF,KAAKF,MACpCw5C,EAAsBh3C,IAAW1F,MAAMjC,MAG7C,MAAO,CACH,uBAAwB,CAAEgK,MAHZ,GAId,6BAA8B,CAAE3H,WAAYs8C,GAC5C,6BAA8B,CAC1Bt8C,WAAYq8C,EACZ/0C,aAPU,GASd3L,eAAgB,OAChB4gD,eAAe,GAAD,OAAKF,EAAL,YAAuBC,M,6BCpC7C,6CAEA,SAASE,EAAgBtb,EAA6Cub,GAClEzmB,qBAAU,WACN,IAAM0mB,EAAW,SAACvzC,GACT+3B,EAAInL,UAAWmL,EAAInL,QAAQ4mB,SAASxzC,EAAEwpC,SAG3C8J,EAAQtzC,IAKZ,OAHAN,SAAS+zB,iBAAiB,YAAa8f,GACvC7zC,SAAS+zB,iBAAiB,aAAc8f,GAEjC,WACH7zC,SAAS00B,oBAAoB,YAAamf,GAC1C7zC,SAAS00B,oBAAoB,aAAcmf,MAEhD,CAACD,EAASvb,M,yKCbZ0b,E,gDAAAA,K,gDAAAA,E,sCAAAA,E,6CAAAA,M,KAcE,IAAMC,EAA8B,uCAAG,WAC1CzuB,GAD0C,eAAAK,EAAA,sEAGnBmc,cAHmB,cAGpCtN,EAHoC,OAK1ClP,EAAS,CACLsB,KAAMktB,EAAkBE,oBACxBltB,QAAS0N,IAP6B,kBAUnCA,GAVmC,2CAAH,sDAa9Byf,EAA2B,SAAC3uB,EAA+B4uB,GAMpE,OALA5uB,EAAS,CACLsB,KAAMktB,EAAkBK,iBACxBrtB,QAASotB,IAGNA,GAGEE,EAAwB,uCAAG,WACpC9uB,EACA/d,GAFoC,eAAAoe,EAAA,sEAIbre,YAAkBC,GAJL,cAI9BitB,EAJ8B,OAMpClP,EAAS,CACLsB,KAAMktB,EAAkBO,oBACxBvtB,QAAS0N,IARuB,kBAW7BA,GAX6B,2CAAH,wDAcxB8f,EAAuB,SAACnsB,EAA4BC,GAC7D,OAAQA,EAAOxB,MACX,KAAKktB,EAAkBE,oBACnB,OAAO,2BACA7rB,GADP,IAEIosB,eAAgBnsB,EAAOtB,UAE/B,KAAKgtB,EAAkBK,iBACvB,KAAKL,EAAkBO,oBACnB,OAAO,2BACAlsB,GADP,IAEIqsB,iBAAkBpsB,EAAOtB,UAEjC,QACI,OAAOqB,K,4PCnDJssB,eAdK,WAChB,IAAQC,EAAa5lB,cAAb4lB,SAUR,OARAxnB,qBAAU,WACN3L,OAAOozB,OAAO,CACVhrB,IAAK,EACLE,KAAM,EACN+qB,SAAU,aAEf,CAACF,IAEG,Q,mRCALrqB,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CACFrE,gBAAiB5D,EAAM0B,QAAQuC,WAAWmD,MAC1CyoB,KAAM,EACNhsB,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,WAE9By5C,OAAQ,CACJtvC,QAAS,OACTC,WAAY,SACZC,eAAgB,gBAChBvF,MAAO7D,EAAM0B,QAAQ2F,KAAKvI,QAC1B0I,aAAa,aAAD,OAAexH,EAAM0B,QAAQuF,KAAKF,OAC9C89B,aAAc7kC,EAAME,QAAQ,IAEhC0hD,aAAc,CACVh2C,MAAO,OACPxL,OAAQ,OACRs2B,IAAK,EAAI12B,EAAMyE,OAAOkB,aACtBixB,KAAM,EAAI52B,EAAMyE,OAAOkB,aACvB4gC,SAAU,OACVsb,UAAW,OACXt2C,aAAc,GAElBu2C,UAAW,CACPj+C,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,gBASvB,SAASgjD,EAAT,GAA8C,IAAjB/B,EAAgB,EAAhBA,KAClC1pB,EAAUc,IAGhB,GAFgB6d,cAEYnZ,oBAAS,IAArC,mBAAOkmB,EAAP,KAAeC,EAAf,KACMhI,EAAsB9e,cAmB5B,OATAlB,qBAAU,WAMNgoB,GAAWD,KACZ,CAAChC,EAAM/F,EAAoB/kB,MAAMgE,kBAAkB9D,WAGlD,cAACsI,EAAA,EAAD,CACIsiB,KAAMgC,EACNE,aAAc,CACV/hD,SAAU,MACVF,WAAY,UAEhBkiD,gBAAiB,CACbhiD,SAAU,MACVF,WAAY,UAEhBq2B,QAAS,CACLlvB,MAAOkvB,EAAQsrB,cAEnBlyB,MAAO,CAAEgH,IAAK,EAAGE,KAAM,GACvBwrB,SAAU,WA/Bd5tB,YACIylB,EAAoB5nB,SACpB4nB,EAAoB/kB,MAAM2D,qBAAqB9G,cAC/CkoB,EAAoB/kB,MAAM+D,qBAAqBlH,gBAcnD,SAmBI,qBAAKmE,UAAWI,EAAQruB,KAAxB,SACI,eAACo6C,EAAA,EAAD,WACI,sBAAKnsB,UAAWI,EAAQkiB,OAAxB,UACI,cAAC8J,EAAA,EAAD,CAAYpsB,UAAWI,EAAQwrB,UAAWjb,QAAS,kBAAMob,GAAU,IAAnE,SACI,cAAC,IAAD,MAEJ,cAACzb,EAAA,EAAD,CAAYl8B,QAAQ,KAAKwuC,MAAM,SAA/B,iCAGA,cAAC8B,EAAA,EAAD,OAEJ,cAAC2H,EAAA,EAAD,CAAsBC,gBAAc,W,yHChBzCC,GA3Ee,SAAC,GAA0B,IAAxBn7C,EAAuB,EAAvBA,SAEvBitC,GADgBhlB,cACI0rB,gBACpBjG,EAAUC,cACVloC,EAAW8uB,cAiDXp3B,EAAkB,CACpBwD,KAAM,CACF1C,QAAS+B,EAAW,GAAM,EAC1Bq/B,OAAQ,EACR+b,cAAe,MACf9+C,gBAAiB,uBACjBQ,OAAQ,OACRmH,aAAc,MACdrC,QAAS,OACTH,OAAQ,EACR0C,QAA6B,KAApB8oC,GAEboO,KAAM,CAAEz5C,QAAS,OAAQrF,MAAO0F,IAAW1F,MAAMjC,QAGrD,OACI,wBAAQ8tB,MAAOjrB,EAAOwD,KAAM4+B,QA/DX,WAEb,IAAI+b,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQhJ,MAA7C,OAAwD46C,KAAK91C,EAAS00C,UACtEzM,EAAQpkB,KAAK9iB,IAAYe,OAIzB,IAAI+zC,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQM,oBAA7C,8BAAgGsxC,KAC5F91C,EAAS00C,UAGbzM,EAAQpkB,KAAK7jB,EAAS00C,SAASzwB,UAAU,EAAGjkB,EAAS00C,SAAS1wB,YAAY,OAE1E,IAAI6xB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQM,oBAA7C,oBAAqFsxC,KAAK91C,EAAS00C,UAEnGzM,EAAQpkB,KAAK9iB,IAAYmD,QAAQhJ,MAC1B,IAAI26C,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQK,aAA7C,iBAA0EuxC,KAAK91C,EAAS00C,UAC/FzM,EAAQpkB,KAAK9iB,IAAYmD,QAAQK,aAC1B,IAAIsxC,OAAOrxB,YAAUzjB,IAAYmD,QAAQK,cAAcuxC,KAAK91C,EAAS00C,WAErE,IAAImB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQM,oBAA7C,OAAsEsxC,KAAK91C,EAAS00C,WAItF,IAAImB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQnB,cAA7C,MAA+D+yC,KAAK91C,EAAS00C,WAI7E,IAAImB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQE,MAA7C,OAAwD0xC,KAAK91C,EAAS00C,UAT3EzM,EAAQpkB,KAAK9iB,IAAYmD,QAAQhJ,MAW1B,IAAI26C,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQE,MAA7C,cAAgE0xC,KAAK91C,EAAS00C,UACrFzM,EAAQpkB,KAAK9iB,IAAYmD,QAAQE,MAC1B,IAAIyxC,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQE,MAA7C,sBAAyE0xC,KAAK91C,EAAS00C,UAC9FzM,EAAQpkB,KAAK7jB,EAAS00C,SAASzwB,UAAU,EAAGjkB,EAAS00C,SAAS1wB,YAAY,OAGrE,IAAI6xB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQ3B,qBAA7C,OAAuEuzC,KAAK91C,EAAS00C,WAIrF,IAAImB,OAAJ,WAAerxB,YAAUzjB,IAAYmD,QAAQvB,MAA7C,OAAwDmzC,KAAK91C,EAAS00C,UAH3EzM,EAAQpkB,KAAK9iB,IAAYmD,QAAQhJ,MAMjC+sC,EAAQ8N,UAoBuCnvB,KAAK,SAASrsB,SAAUA,EAA3E,SACI,cAACy7C,GAAA,EAAD,CAAiBrzB,MAAOjrB,EAAOk+C,U,UC/CrCvrB,GAAYb,aAAW,SAACv2B,GAC1B,IAAMgjD,EAAsBhjD,EAAM2mC,OAAOsc,OACnCC,EAAWljD,EAAME,QAAQ,GAE/B,OAAO22B,YAAa,CAChBosB,OAAQ,CACJr/C,gBAAiB2F,IAAW1F,MAAMwE,UAClCjI,OATgB,GAUhBqL,QAAS,SAEbf,MAAM,2BACC1L,IAAUC,MADZ,IAED63B,SAAU,SACVqsB,aAAc,WACdlV,WAAY,WAEhBmV,WAAY,CACRhjD,OAnBgB,GAoBhB+H,UApBgB,GAqBhBe,QAAS,OACTE,eAAgB,iBAEpBi6C,cAAe,CACXjjD,OAAQZ,IAAOK,cACfsI,UAAW3I,IAAOK,cAClBqJ,QAAS,OACTE,eAAgB,gBAEpBk6C,WAAY,CACRljD,OAAQ8iD,EACRt3C,MAAOs3C,GAEXpJ,MAAO,CACHpjB,IAAK12B,EAAME,UAAY,GAE3BqjD,UAAW,CACPt6C,SAAU,QACV67B,OAAQ,EACRlO,KAAM,EACNgO,MAAO,EACP+B,OAAQqc,EACRp/C,gBAAiB2F,IAAW1F,MAAMwE,WAEtCm7C,gBAAiB,CACb3zB,KAAM,EACNzvB,OAAQ,OACR8I,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,SACZC,eAAgB,SAChBqC,QAASqyB,UAASnM,YAAW,QAAU,QACvC9tB,MAAO7D,EAAM2D,QAAQE,OAEzB6hC,SAAU,GAGV+d,WAAY,CACRv6C,QAAS,OACT9I,OAAQ,GACRwL,MAAO,GACPJ,SAAU,QACVpC,eAAgB,SAChBD,WAAY,SACZtF,MAAO7D,EAAM2D,QAAQE,OAEzB6/C,kBAAmB,CAEf7/C,MAAO7D,EAAMoC,SAASC,SACtBkJ,aAAc,OACdurB,SAAU,UAEd6sB,QAAS,CACLz6C,QAAS,OACTuC,QAASzL,EAAME,UACfimC,cAAe,SACfviC,gBAAiB5D,EAAM2D,QAAQC,gBAC/BghC,MAAO,GAEXgf,WAAY,CACR//C,MAAO7D,EAAM2D,QAAQE,MACrB4iC,UAAW,UAEf//B,QAAS,CACL4C,WAAY,QAST,SAASu6C,GAAiBv0B,GACrC,IAAMgH,EAAUc,KACVsC,EAASC,cACTmqB,EAAqB3Y,cACrB4Y,EAAalqB,cAAqB3E,MAAMzmB,YAAYiwB,gBAAgBG,gBACpEmlB,EAAYjqB,iBAAO,MACzB,EAAgC+B,mBAAiB,GAAjD,mBAAO4J,EAAP,KAAiBC,EAAjB,KACM3lC,EAAQuvB,cACRglB,EAAoB0G,eAEpB4E,EAAc,WAChBoE,GAAkB,IAGtB,EAA4CnoB,oBAAkB,GAA9D,mBAAOooB,EAAP,KAAuBD,EAAvB,KAUME,EAAgB,mBAChBC,EAAcN,EAAmB5uB,MAAM2T,iBAAiBI,UAExDob,EACF,sBACI30B,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfC,IAAK78B,IAAWrJ,QAAQ,MACxBuL,QAASlC,IAAWrJ,QAAQ,IALpC,UAQI,cAACokD,EAAA,EAAD,CAAkB5K,KAAM0K,EAAa95C,QAAS65C,EAA9C,sBAGA,cAACrU,EAAA,EAAD,CAAkBxlC,QAAS65C,EAAetd,QAASgZ,EAAa9P,GAAIjiC,IAAYW,YAAhF,sBAGA,cAACqhC,EAAA,EAAD,CAAkBxlC,QAAS65C,EAAetd,QAASgZ,EAAa9P,GAAIjiC,IAAYgB,aAAhF,2BAGA,cAACghC,EAAA,EAAD,CAAkBxlC,QAAS65C,EAAetd,QAASgZ,EAAa9P,GAAIjiC,IAAYiB,IAAhF,iBAGA,cAACq/B,EAAA,EAAD,CAAc9jC,QAAS65C,EAAetd,QAhCzB,WACjB+H,cAAa/T,MAAK,SAAC0pB,GACfj2B,OAAOvhB,SAAS2sC,KAAhB,UAA0BhgB,EAAO0I,SAASjuB,QAA1C,OAAmDvG,YAAaZ,IAASC,WAAzE,OACIa,IAAYa,eA6BhB,qBAGA,cAAC63B,EAAA,EAAD,CACIl8B,QAAQ,QACR4rB,UAAWI,EAAQstB,WAFvB,oBAGME,EAAmB5uB,MAAM2T,iBAAiBc,QAAQA,cAIhE,EAAgD7N,oBAAS,GAAzD,mBAAO0oB,EAAP,KAAyBC,EAAzB,KAYMC,EAA2C,CAC7C,CACI/B,KACI,cAAC1D,EAAA,EAAD,CACIvvB,MAAO,CACH7rB,MAAoB,IAAb6hC,EAAiB,UAAY1lC,EAAM0B,QAAQ5C,QAAQkI,aAC1D6B,SAAU,YAItB6wC,KAAM5rC,IAAYe,MAClB81C,gBAAgB,GAEpB,CACIhC,KACI,cAACiC,EAAA,EAAD,CACIl1B,MAAO,CACH7rB,MAAoB,IAAb6hC,EAAiB,UAAY1lC,EAAM0B,QAAQ5C,QAAQkI,aAC1D6B,SAAU,YAItB6wC,KAAM5rC,IAAYS,QAClBo2C,gBAAgB,GAEpB,CACIhC,KACI,cAACxP,EAAA,EAAD,CAAQtM,QArCO,WACvBuK,aAAmB,sBACnBqT,GAAqBD,IAmCwB90B,MAAO,CAAEjkB,QAAS,GAAKyqB,UAAWI,EAAQmtB,WAA/E,SACI,cAAC1J,EAAA,EAAD,CAAoBzvC,QAAQ,YAAYgsB,QAAS,CAAEwjB,MAAOxjB,EAAQwjB,OAAlE,SACI,cAAC,IAAD,CACIpqB,MAAO,CACH7rB,MAAO7D,EAAM0B,QAAQ5C,QAAQkI,aAC7B6B,SAAU,gBAM9B6wC,KAAM,KAEV,CACIiJ,KACI,cAAChO,EAAA,EAAD,CACIjlB,MAAO,CACHtvB,OAAQ,MACRmmC,SAAU,MACVniC,OACI,oBAAa,IAAbshC,EACmB1lC,EAAM0B,QAAQuF,KAAKJ,KACnB7G,EAAM0B,QAAQ5C,QAAQkI,eAEjD6tC,SAAUkP,IAGlBrK,KAAM5rC,IAAYO,QAClBs2C,gBAAgB,GAEpB,CACIhC,KACI,cAACxP,EAAA,EAAD,CAAQtM,QAhEG,WACnBod,GAAmBC,IA+DsBx0B,MAAO,CAAEjkB,QAAS,GAAKyqB,UAAWI,EAAQmtB,WAA3E,SACI,cAAC,IAAD,CACI/zB,MAAO,CACH7rB,MAAoB,IAAb6hC,EAAiB,UAAY1lC,EAAM0B,QAAQ5C,QAAQkI,aAC1D6B,SAAU,cAK1B6wC,KAAM,IACNiL,gBAAgB,IAkBxB,OACI,qCACI,qBACIj1B,MAAO,CACHzmB,SAAU,QACV2tB,KAAM,EACN+P,OAAQ3mC,EAAM2mC,OAAOke,OAAS,EAC9Bp5C,QAAQ,GAAD,OAAyB,EAApB8oC,EAAL,cAAoD,EAApBA,EAAhC,OALf,SAQI,cAAC,GAAD,MAEJ,cAACwN,EAAD,CAAmB/B,KAAMwE,IACzB,sBAAKtuB,UAAWuC,kBAAKnC,EAAQitB,UAAW,kBAAmBpe,IAAK6e,EAAhE,UACI,cAACc,EAAA,EAAD,CAAS5uB,UAAWI,EAAQ+sB,cAAe0B,gBAAc,EAAzD,SACKL,EAAsBvxB,KAAI,SAAC4K,EAAMla,GAAP,OACvB,sBAAKqS,UAAWuC,kBAAKnC,EAAQktB,gBAAT,eAA6BltB,EAAQoP,SAAW7hB,IAAU6hB,IAA9E,UACI,cAAC,IAAD,CACImB,QAAS,kBAAMlB,GAAY,SAACqf,GAAD,OAA0B,IAAVnhC,EAAcmhC,EAAYnhC,MACrEksB,GAAIhS,EAAK2b,KACTxjB,UAAWI,EAAQmtB,WACnB/zB,MAAO,CACHjkB,QAAwB,YAAfsyB,EAAK+I,MAAsB,EAAI,EACxCme,UAA0B,YAAflnB,EAAK+I,MAAsB,EAAI,SANlD,SASK/I,EAAK4kB,OAET5kB,EAAK+I,OACF,cAACN,EAAA,EAAD,CACItQ,UAAWI,EAAQ5vB,QACnBgpB,MAAO7L,IAAU6hB,EAAW,CAAE7hC,MAAO7D,EAAM0B,QAAQuF,KAAKJ,MAAS,GACjEyD,QAAQ,UAHZ,SAKKyzB,EAAK+I,gBAM1B,cAAC+V,GAAA,EAAD,OAEJ,cAACqI,GAAA,EAAD,CAEIlF,KAAMkE,EACNvyB,SAAUA,YACVwzB,OAAQ,SACRC,QAASnB,EACTpE,YAAaA,EANjB,SAQKwE,O,yCCzUXjtB,GAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACTwuB,iBAAkB,CACdn8C,QAAS,OACT2mB,KAAM,WACNsW,cAAe,SACfh+B,UAAW,QACXtE,MAAO0F,IAAW1F,MAAMjC,MACxB4J,SAAU,GAEd+sC,QAAS,CACL1oB,KAAM,WACN3mB,QAAS,OACTD,SAAU,WACVuC,SAAU,QASP,SAAS85C,GAAah2B,GACjC,IAAMgH,EAAUc,KACRjB,EAAyC7G,EAAzC6G,SAAUsN,EAA+BnU,EAA/BmU,OAAQvN,EAAuB5G,EAAvB4G,UAAcvG,EAAxC,YAAiDL,EAAjD,IAEA,OACI,+CAAM4G,UAAWuC,kBAAKvC,EAAWI,EAAQ+uB,mBAAuB11B,GAAhE,cACI,qBAAKuG,UAAWI,EAAQiiB,QAAxB,SAAkCpiB,IACjCsN,M,kDC3BPrM,GAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,GACNs9C,eAAgB,CACZr8C,QAAS,OACTi9B,cAAe,SACftW,KAAM,WACNrkB,SAAU,QAOP,SAASg6C,GAAWl2B,GAC/B,IAAQ6G,EAAiC7G,EAAjC6G,SAAUD,EAAuB5G,EAAvB4G,UAAcvG,EAAhC,YAAyCL,EAAzC,IACMqC,EAAWH,cAEX8E,EAAUc,KAEhB,OACI,cAACkuB,GAAD,yBACIpvB,UAAWuC,kBAAKvC,EAAWI,EAAQruB,MACnCw7B,OAAQ,cAACpU,GAAA,EAAD,CAAQG,MAAMmC,GAAatD,MAAuBI,KAAyB,EAAJ,KAC3EkB,GAHR,aAKI,qBAAKuG,UAAWI,EAAQivB,eAAxB,SAAyCpvB,O,0CCpB/CiB,GAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,CACFiB,QAAS,OACTD,SAAU,WACVuC,SAAU,QAOP,SAASi6C,GAAwBn2B,GAC5C,IAAQ4G,EAAiC5G,EAAjC4G,UAAWC,EAAsB7G,EAAtB6G,SAAaxG,EAAhC,YAAyCL,EAAzC,IACMgH,EAAUc,KACVzF,EAAWH,cAEXk0B,EAAsB,UACtBC,EAAqC,CACvC,CACIhD,KAAM,cAAC1D,EAAA,EAAD,CAAap2C,SAAU68C,EAAqBh2B,MAAO,CAAEmV,cAAe,KAC1EiC,MAAO,QACP4S,KAAM5rC,IAAYe,MAClB81C,gBAAgB,GAEpB,CACIhC,KAAM,cAACpG,GAAA,EAAD,CAAa1zC,SAAU68C,IAC7B5e,MAAO,UACP4S,KAAM5rC,IAAYS,QAClBo2C,gBAAgB,GAEpB,CACIhC,KAAM,cAACiD,EAAA,EAAD,CAAa/8C,SAAU68C,EAAqBh2B,MAAO,CAAEm2B,cAAe,KAC1E/e,MAAO,UACP4S,KAAM5rC,IAAYO,QAClBs2C,gBAAgB,IAIxB,OACI,8CAAKzuB,UAAWuC,kBAAKvC,EAAWI,EAAQruB,OAAW0nB,GAAnD,cACKtB,MAAsBI,KAAqB,KAAOkD,EAC/C,cAACkyB,GAAD,eAAsBl0B,IAEtB,cAACm2B,EAAA,EAAD,aAAmBC,MAAOJ,GAAqBh2B,IAEnD,cAAC61B,GAAD,UAEKrvB,Q,gGC9DF,OAA0B,sCCA1B,4qM,mBCEA,YAAC7G,GACZ,OACI,eAAC02B,GAAA,EAAD,2BAAa12B,GAAb,IAAoBkjB,QAAQ,YAA5B,UACI,sBAAM6F,EAAE,6GACR,sBAAMA,EAAE,iLACR,sBAAMA,EAAE,2GACR,sBAAMA,EAAE,oH,mBCcd4N,GAAoB,qBAOX,cAGX,IAAMC,EAAgBhmB,eAChBtG,EAAkBC,cAClBiqB,EAAqB3Y,cAC3B,EAAwBrP,wBACgE+G,IAApFjJ,EAAgB1E,MAAMiK,qBAAqBiL,MAAK,SAAC+b,GAAD,OAAOA,IAAMF,OADjE,mBAAOjG,EAAP,KAAaoF,EAAb,KAGMh6C,EAAKg7C,aAAc,IAAK,QAC9B,EAAmDloB,eAA3CxC,EAAR,EAAQA,kBAAmBF,EAA3B,EAA2BA,oBAErB/2B,EAAkB,CACpBk+C,KAAM,CACF9+C,MAAO0F,IAAW1F,MAAMjC,MACxBxB,OAAQ,GACRwL,MAAO,IAEXy6C,iBAAkB,CACdn9C,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,SACZw9B,OAAQ,EACR19B,SAAU,WAEV7I,OAAQ,QAEZ6D,WAAY,CACRgF,SAAU,WACV2tB,MAAOrtB,IAAWrJ,QAAQ,GAC1B0kC,OAAQr7B,IAAWrJ,QAAQ,GAC3Bw2B,IAAK,IACLiQ,OAAQ,GAEZ2f,KAAM,CACFC,UAAW,OACX96C,QAAS,EACT1C,OAAQ,EACRG,QAAS,OACTi9B,cAAe,SACfC,IAAK78B,IAAWrJ,QAAQ,GACxB43B,WAAYvuB,IAAWrJ,QAAQ,IAEnCsmD,SAAU,CACNt9C,QAAS,OACTk9B,IAAK78B,IAAWrJ,QAAQ,GACxBiJ,WAAY,SACZ/I,OAAQ,eAEZqmD,GAAI,CACA76C,MAAO,IACPxL,OAAQ,QAEZsmD,YAAa,CACTx9C,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,SACZi9B,IAAK78B,IAAWrJ,QAAQ,GACxBuL,QAASlC,IAAWrJ,QAAQ,GAC5B0D,gBAAiB2F,IAAW1F,MAAMwE,UAClCkD,aAAchC,IAAWgC,cAE7Bo7C,QAAS,CACL/6C,MAAO,IACPxL,OAAQ,OACRumC,OAAQ,EACRx+B,UAAW,MACX0nB,KAAM,GAEV+2B,OAAQ,CACJxmD,OAAQ,IACR6I,SAAU,WACVytB,IAAKtrB,EAAK,IAAM,IAChBw5B,MAAO,EACPhO,KAAM,EACN+P,QAAS,GAEbj8B,MAAM,2BACCnB,IAAW3D,WAAW8E,OADxB,IAEDu6C,WAAY17C,IAAWrJ,QAAQ,KAEnCu4C,IAAK,CACDvvC,QAAS,OACTk9B,IAAK78B,IAAWrJ,QAAQ,GACxBuL,QAAQ,GAAD,OAAKlC,IAAWrJ,QAAQ,GAAxB,cAAgCqJ,IAAWrJ,QAAQ,GAAnD,QAIT2mD,EAAc,UAAMj5C,YAAak2C,EAAmB5uB,MAAM2T,iBAAiBS,QAA7D,YAAwE17B,YACxF6W,IAASqE,UAEP0c,EAAese,EAAmB5uB,MAAM2T,iBAAiBrD,aACzDshB,EAAShD,EAAmB5uB,MAAM2T,iBAAiBkB,OAEnD8V,EAAW,yCAAG,uBAAAntB,EAAA,6DAChB0yB,GAAQ,GADQ,SAGV7wC,YAAe0xC,IAHL,OAIhBhQ,aAA+Brc,EAAgBvH,SAAU4zB,IAJzC,2CAAH,qDAOjBhsB,qBAAU,WACF+lB,IAASkG,EAAc7V,qBACvB3U,GAAkB,GAClBF,EAAoBH,KAAYqC,YAErC,CAACsiB,IAEJ,IAAM+G,EAAY/G,IAASkG,EAAc7V,mBAEnCppC,EAAgB,CAClB,CACI07C,KAAM,cAACpG,GAAA,EAAD,CAAa7sB,MAAOjrB,EAAOk+C,OACjCt7C,KAAM,qEAEV,CACIs7C,KAAM,cAACqE,GAAA,EAAD,CAAYt3B,MAAOjrB,EAAOk+C,OAChCt7C,KAAM,oEAEV,CACIs7C,KAAM,cAACsE,GAAD,CAAcv3B,MAAOjrB,EAAOk+C,OAClCt7C,KAAM,mDAEV,CACIs7C,KAAM,cAAC,IAAD,CAAmBjzB,MAAOjrB,EAAOk+C,OACvCt7C,KAAM,iGAIRq/C,EACF,sBAAKh3B,MAAOjrB,EAAOiiD,YAAnB,UACI,cAACrxB,GAAA,EAAD,CAAKC,IAAG,UAAKuxB,EAAL,WAA8BrxB,IAAI,UAAUp1B,OAAQ,IAAKwL,MAAO,IAAK8jB,MAAOjrB,EAAOgiD,KAC3F,uBAAM/2B,MAAO,CAAExmB,QAAS,OAAQi9B,cAAe,SAAU/8B,eAAgB,iBAAzE,UACI,mBAAGswC,KAAMoN,EAAQlQ,OAAO,SAAS6F,IAAI,sBAArC,SACI,cAACpnB,GAAA,EAAD,CAAK3F,MAAO,CAAE9jB,MAAO,KAAO0pB,IAAK4xB,GAAU1xB,IAAI,YAAYp1B,OAAQ,IAAKwL,MAAO,QAEnF,cAACyjB,GAAA,EAAD,CAAQG,KAAM,IACd,mBAAGkqB,KAAMlU,EAAcoR,OAAO,SAAS6F,IAAI,sBAA3C,SACI,cAACpnB,GAAA,EAAD,CAAK3F,MAAO,CAAE9jB,MAAO,KAAO0pB,IAAK2R,GAAWzR,IAAI,YAAYp1B,OAAQ,MAAOwL,MAAO,cAM5F2sC,EACF,sBAAK7oB,MAAOjrB,EAAO4hD,iBAAnB,UACI,cAAChxB,GAAA,EAAD,CACI3F,MAAOjrB,EAAOmiD,OACdtxB,IAAG,UAAKuxB,EAAL,kBACHrxB,IAAI,YACJp1B,OAAQ,IACRwL,MAAO,MAEX,cAACyjB,GAAA,EAAD,IACA,cAACgG,GAAA,EAAD,CACIC,IAAG,UAAKuxB,EAAL,iBACHrxB,IAAI,WACJp1B,OAAQ,IACRwL,MAAO,IACP8jB,MAAOjrB,EAAOkiD,UAElB,cAACt3B,GAAA,EAAD,CAAQG,KAAM,IACd,cAACgX,EAAA,EAAD,CAAYsS,MAAM,SAASppB,MAAOjrB,EAAOiG,MAAzC,4CAGA,cAAC2kB,GAAA,EAAD,CAAQG,KAAM,KACd,cAACgX,EAAA,EAAD,CAAY9W,MAAOnmB,IAAW3D,WAAWiF,SAAzC,gEAGA,cAACwkB,GAAA,EAAD,IACA,sBAAKK,MAAOjrB,EAAOg0C,IAAnB,UACI,oBAAI/oB,MAAOjrB,EAAO6hD,KAAlB,SACKr/C,EAAKksB,KAAI,SAAC4K,EAAala,GACpB,OACI,qBAA+B6L,MAAOjrB,EAAO+hD,SAA7C,UACKzoB,EAAK4kB,KACN,cAACnc,EAAA,EAAD,CAAY9W,MAAOnmB,IAAW3D,WAAWmF,SAAzC,SAAoDgzB,EAAK12B,SAF7D,UAAYwc,EAAZ,oBAOX6iC,QAKb,OACI,cAAC,KAAD,CAAS1E,OAAQ+E,EAAW7G,QAASL,EAAatZ,SAAU,IAA5D,SACKgS,K,sCCnNPnhB,GAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,CACFrE,gBAAiB2F,IAAW1F,MAAMjC,MAClCwC,OAAO,aAAD,OAAepE,EAAM0B,QAAQuF,KAAKH,MACxCyE,aAAcvL,EAAMyE,OAAOQ,gBAE/BszC,QAAS,CACL10C,MAAO7D,EAAM0B,QAAQ3C,UAAU+H,KAC/B+oB,KAAM,QAOH,SAASs3B,GAAe73B,GACnC,IAAMgH,EAAUc,KACRlB,EAAiC5G,EAAjC4G,UAAWC,EAAsB7G,EAAtB6G,SAAaxG,EAAhC,YAAyCL,EAAzC,IAEA,OACI,cAAC83B,GAAA,EAAD,yBAAUlxB,UAAWuC,kBAAKvC,EAAWI,EAAQruB,OAAW0nB,GAAxD,aACI,qBAAKuG,UAAWuC,kBAAKnC,EAAQiiB,SAAU7oB,MAAOC,EAAKD,MAAnD,SACKyG,O,kDCjBXiB,GAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CACFgB,SAAU,QACV2C,MAAO,OACPgrB,KAAM,EACNgO,MAAO,EACP9N,SAAU,SACVJ,IAAK,EACL9yB,gBAAiB5D,EAAM0B,QAAQC,OAAOC,MACtCigD,UAAW,GACXx4C,WAAY,YAEhBg+C,KAAM,CACF3wB,KAAM,IAEV4wB,KAAM,CACF5wB,IAAK,GAET6wB,SAAU,CACNr+C,QAAS,OAET9I,OAAQ,QAEZonD,YAAa,CACTrhB,cAAe,MACfj9B,QAAS,OACTC,WAAY,SACZsC,QAAS,EACTF,aAAcvL,EAAMyE,OAAOO,eAC3B4G,MAAO,QAEX67C,QAAS,CACL7jD,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpC0E,aAAc,EACdE,QAAS,iBAUN,SAASi8C,GAAmBp4B,GACSA,EAAxC4wB,QAD+C,IAAD,EACrCL,EAA+BvwB,EAA/BuwB,YAAaG,EAAkB1wB,EAAlB0wB,KAASrwB,EAAvC,YAAgDL,EAAhD,IACMgH,EAAUc,KAChB,EAAgC0E,oBAAS,GAAzC,mBAAO6rB,EAAP,KACM3nD,GADN,KACsBuvB,eACtB,EAA4CuM,qBAA5C,mBAAO8rB,EAAP,KAAuBC,EAAvB,KAKMC,EACF,qCACI,cAACthB,EAAA,EAAD,CAAY9W,MAAO,CAAEvwB,WAAY,QAAjC,wBACA,cAACqnC,EAAA,EAAD,CAAYl8B,QAAQ,UAAUolB,MAAO,CAAEpmB,WAAY,KAAnD,gDAMFy+C,EACF,qCACI,cAACvhB,EAAA,EAAD,CAAY9W,MAAO,CAAEvwB,WAAY,OAAQmK,WAAY,KAArD,wBACA,cAACk9B,EAAA,EAAD,CAAYl8B,QAAQ,UAAUolB,MAAO,CAAEpmB,WAAY,KAAnD,4CA0BF0+C,EAAY,yCAAG,+BAAAt1B,EAAA,+EAGMnE,UAAU05B,0BAHhB,QAGPC,EAHO,QAQJ93B,OAAS,IACR+3B,EAAYD,EAAK9d,MAAK,SAACge,GAAD,MAAoC,sBAAXA,EAAI/uC,MAErDwuC,IADAM,IAVK,gDAiBbr5B,QAAQC,IAAI,+BAAZ,MAjBa,yDAAH,qDAqBlB,EAA8C+M,qBAA9C,mBAAOusB,EAAP,KAAwBC,EAAxB,KAuBA,OArBAruB,qBAAU,WACN+tB,MACD,IAEH/tB,qBAAU,WACN,IAAIsuB,EAAcj6B,OAAOk6B,YAEnBC,EAAwB,WAC1B,IAAMziB,EAAU1X,OAAO0X,QACjB0iB,EAAY1iB,EAAUuiB,EAAc,OAAS,KAC/CG,IAAcL,IAAoBriB,EAAUuiB,EAAc,IAAMviB,EAAUuiB,GAAe,KACzFD,EAAmBI,GAEvBH,EAAcviB,EAAU,EAAIA,EAAU,GAG1C,OADA1X,OAAOuS,iBAAiB,SAAU4nB,GAC3B,WACHn6B,OAAOkT,oBAAoB,SAAUinB,MAE1C,CAACJ,KA7DKvqB,SAWDxP,OAAO4uB,WAAW,8BAA8BC,SAEhD7uB,OAAOC,UAAU6uB,YAEjB9uB,OAAOq6B,kBAAkBvL,WAbrB9uB,OAAO4uB,WAAW,8BAA8BC,SAChD,eAAgB7uB,OAAOC,WAEvBD,OAAOC,UAAU6uB,YAEjB9uB,OAAOq6B,kBAAkBvL,aAwDJtf,SAgE7B,KA/DA,qCACI,qBACIpO,MAAO,CACHzmB,SAAU,SACV7I,OAAQ,GACRwL,MAAO,OACP1C,QAA6B,SAApBm/C,GAA+BrI,EAAgB,QAAT,UAGvD,cAACmH,GAAD,yBAEI9tC,GAAI,UACAsW,GAHR,IAIIqwB,KAAMA,GAAQ2H,EACdzxB,UAAWuC,kBAAKnC,EAAQruB,MAAT,mBACVquB,EAAQ+wB,KAA2B,SAApBgB,GADL,cAEV/xB,EAAQgxB,KAA2B,OAApBe,GAFL,IAIf34B,MAAO,CAAEjkB,QAAS,WATtB,SAWI,sBAAKyqB,UAAWI,EAAQixB,SAAxB,UACI,cAACjF,EAAA,EAAD,CACIzb,QAAS,kBAAMgZ,GAAeA,GAAY,IAC1Ch8C,MAAM,UACN6rB,MAAO,CAAE9jB,MAAO,GAAIzD,UAAW,QAHnC,SAKI,cAACiqC,GAAA,EAAD,CAAW1iB,MAAO,CAAE9jB,MAAO,GAAIxL,OAAQ,QAG3C,sBAAK81B,UAAWI,EAAQkxB,YAAxB,UACI,qBAAK93B,MAAO,CAAE9jB,MAAO,GAAIxL,OAAQ,GAAI8I,QAAS,OAAQC,WAAY,UAAlE,SACI,qBACImsB,IAAK/R,IAAMC,YACXgS,IAAI,GACJ9F,MAAO,CACHnkB,aAAcvL,EAAMyE,OAAOO,eAC3B4G,MAAO,YAKnB,cAACyjB,GAAA,EAAD,IAEA,qBAAKK,MAAO,CAAExmB,QAAS,OAAQ2mB,KAAM,EAAGsW,cAAe,UAAvD,SACKyhB,EAAiBG,EAAgBD,IAGtC,cAACz4B,GAAA,EAAD,CAAQG,KAAM,KAEd,mBACI0G,UAAWI,EAAQmxB,QACnB/N,KAAMkO,EAxIR,gBADD,wEA0IG/gB,QAAS,kBAAMgZ,GAAY,IAH/B,SAKI,cAACrZ,EAAA,EAAD,CAAY9W,MAAO,CAAE7rB,MAAO7D,EAAM0B,QAAQC,OAAOC,MAAOzC,WAAY,QAApE,SACKyoD,EAAiB,OAAS,WAGnC,cAACv4B,GAAA,EAAD,CAAQG,KAAM,iB,4BC1MvB,SAASo5B,GAAYt5B,GAChC,IAAQgJ,EAA6BhJ,EAA7BgJ,MAAOnC,EAAsB7G,EAAtB6G,SAAaxG,EAA5B,YAAqCL,EAArC,IAEA,EAAkCwM,oBAAS,GAA3C,mBAAO+sB,EAAP,KAAkBC,EAAlB,KASA,OAPA7uB,qBAAU,WACN,IAAI8uB,EAAUlrB,YAAW,WACrBirB,GAAa,KACdxwB,GACH,OAAO,kBAAM0wB,aAAaD,MAC3B,IAEIF,EAAY,+CAASl5B,GAAT,aAAgBwG,KAAkB,K,cCD1C,SAAS8yB,KACpB,IAVuBC,EAUjBv3B,EAAWH,cACjB,EAA4DsK,oBAAkB,GAA9E,mBAAOqtB,EAAP,KAA+BC,EAA/B,KACMC,EAAcC,eAOdC,GAnBiBL,EAeC,gCAdjB,CACH9N,aAAkD,SAApCA,aAAaC,QAAQ6N,GACnCM,gBAAiB,SAACh9C,GAAD,OAAoB4uC,aAAaM,QAAQwN,EAAW18C,EAAM6jB,aAC3Eo5B,eAAsD,SAAtCA,eAAepO,QAAQ6N,GACvCQ,kBAAmB,SAACl9C,GAAD,OAAoBi9C,eAAe/N,QAAQwN,EAAW18C,EAAM6jB,eAenF4J,qBAAU,WACFsvB,EAA0BE,gBAE9BL,GAA0B,KAC3B,IAOH,OAEKC,IACG13B,GACCtD,MACAI,MACAk7B,mBACAJ,EAA0BE,eAQ3B,KAPA,cAACb,GAAD,CAAatwB,MAAO,IAApB,SACI,cAACovB,GAAD,CACI1H,KAAMmJ,EACNtJ,YAhBkB,SAAC+J,IAC9BA,GAAaL,EAA0BG,mBAAkB,GAC1DN,GAA0B,IAedlH,aAAc,CAAEjiD,WAAY,SAAUE,SAAU,cClCpE,IAAM0pD,GAAQC,gBAAK,kBAAM,oCACnBC,GAAuBD,gBAAK,kBAAM,oCAClCE,GAAgBF,gBAAK,kBAAM,yDAC3Bp+B,GAAUo+B,gBAAK,kBAAM,iEACrBG,GAAcH,gBAAK,kBAAM,0DACzBh+B,GAAOg+B,gBAAK,kBAAM,oCAClB39B,GAAe29B,gBAAK,kBAAM,oCAC1Bl9B,GAAMk9B,gBAAK,kBAAM,oCAEjBI,GAAWJ,gBAAK,kBAAM,kEACtBK,GAAYL,gBAAK,kBAAM,kEACvBM,GAAWN,gBAAK,kBAAM,kEACtBO,GAAeP,gBAAK,kBAAM,kEAC1BQ,GAAaR,gBAAK,kBAAM,kFACxBS,GAAaT,gBAAK,kBAAM,kFACxBU,GAAaV,gBAAK,kBAAM,kFACxBW,GAAaX,gBAAK,kBAAM,iFACxBY,GAAaZ,gBAAK,kBAAM,iFACxBa,GAAgBb,gBAAK,kBAAM,0DAC3Bc,GAAoBd,gBAAK,kBAAM,oCAEtB,SAASe,KAAoB,IAAD,EACjCl5B,EAAWH,cACXoI,EAAkBC,cAClBiqB,EAAqB3Y,cACrB2f,EAAoB,UAAGnxB,cAAYqJ,gBAAf,aAAG,EAAsBoH,MAAK,SAACC,GAAD,MAAa,uBAANA,KAEzD0gB,EAAkBjH,EAAmB5uB,MAAM2T,iBAAiBU,eAAepW,KAC7E,YAAiD,IAA9CnR,EAA6C,EAA7CA,MAAOiH,EAAsC,EAAtCA,OAAQ+hC,EAA8B,EAA9BA,iBAAkBtgD,EAAY,EAAZA,MAChC,IAAKsgD,QAA8BnoB,IAAV7gB,GAAiC,KAAVA,EAAc,OAAO,KAErE,IAAImU,EACA,cAACy0B,GAAD,CACIK,UAAWvgD,EACXu+B,UAAW6a,EAAmB5uB,MAAM2T,iBAAiBK,qBAgG7D,OA5FIjgB,IAAWC,KAAUC,UACrBgN,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAACw/C,GAAD,CAAUiB,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAG/Cue,IAAWC,KAAUG,WAC5B8M,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAACy/C,GAAD,CAAWgB,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGhDue,IAAWC,KAAUK,MAC5B4M,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC0/C,GAAD,CAAUe,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAG/Cue,IAAWC,KAAUO,SAC5B0M,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC2/C,GAAD,CAAcc,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGnDue,IAAWC,KAAUxR,OAC5Bye,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC4/C,GAAD,CAAYa,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGjDue,IAAWC,KAAU5Q,OAC5B6d,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC6/C,GAAD,CAAYY,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGjDue,IAAWC,KAAU1Q,OAC5B2d,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC8/C,GAAD,CAAYW,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGjDue,IAAWC,KAAUS,QAC5BwM,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAACigD,GAAD,CAAeQ,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGpDue,IAAWC,KAAU5P,OAC5B6c,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAAC+/C,GAAD,CAAYU,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,QAGjDue,IAAWC,KAAUtP,SAC5Buc,EACI,qCACI,cAAC+0B,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiC5gB,OAErC,cAACggD,GAAD,CAAYS,UAAS,UAAK9/B,IAASC,QAAd,cAA2B5gB,SAMxD,cAAC,IAAD,CAA+B0gD,KAAMppC,EAArC,SACKmU,GADL,gBAAqBlN,OAOjC,OACI,qCACK6hC,GAAwB,cAAC7B,GAAD,IACzB,cAAC,EAAD,IACA,cAAC3vB,EAAA,EAAD,UACI,eAACmsB,GAAD,YACMp3B,OAAuBI,OAAuBkD,GAAY,cAAC05B,GAAD,IAC5D,cAAC,WAAD,CAAUC,SAAU,cAACtZ,GAAA,EAAD,IAApB,SACI,eAAC,IAAD,WAEI,eAAC,IAAD,CAAOoZ,KAAMt9C,IAAYO,QAAzB,UACI,cAAC68C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASW,aAE9C,cAACg+B,GAAD,OAEJ,eAAC,IAAD,CAAOuB,OAAK,EAACH,KAAMt9C,IAAYe,MAA/B,UACI,cAACq8C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASY,aAE9C,cAAC49B,GAAD,OAGJ,eAAC,IAAD,CAAO0B,OAAK,EAACH,KAAMt9C,IAAYS,QAA/B,UACI,cAAC28C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASK,aAE9C,cAACA,GAAD,OAGHq/B,EAED,eAAC,IAAD,CAAOQ,OAAK,EAACH,KAAMt9C,IAAYW,YAA/B,UACI,cAACy8C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASa,cAE9C,cAAC+9B,GAAD,OAEJ,eAAC,IAAD,CAAOmB,KAAMt9C,IAAYY,SAAzB,UACI,cAACw8C,GAAA,EAAD,UACI,wDAEJ,cAACp/B,GAAD,OAEJ,eAAC,IAAD,CAAOs/B,KAAI,UAAKt9C,IAAYgB,aAAjB,cAAX,UACI,cAACo8C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASc,kBAE9C,cAACA,GAAD,OAEJ,eAAC,IAAD,CAAOi/B,KAAMt9C,IAAYiB,IAAzB,UACI,cAACm8C,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASuB,SAE9C,cAACA,GAAD,OAEJ,cAAC,IAAD,CAAU2+B,OAAK,EAACC,KAAK,IAAIzb,GAAIjiC,IAAYe,QACzC,cAAC,IAAD,CACIu8C,KAAMt9C,IAAYiE,WAAW,KAC7B05C,OAAQ,kBACJ,qCACI,cAACP,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASU,cAE9C,cAACg+B,GAAD,UAIZ,cAAC,IAAD,CACI0B,OAAQ,kBACJ,qCACI,cAACP,GAAA,EAAD,UACI,0CAAW7/B,IAASC,QAApB,cAAiCD,IAASU,cAE9C,cAACg+B,GAAD,oBAU5B,uBAAO1wC,GAAI6R,IAAaE,aAAcuI,KAAK,SAASnnB,MAAOotB,EAAgB1E,MAAMnhB,SAASb,U,iCC5JvFw4C,GArEexmB,sBAAW,WAAwDC,GAAc,IAAnEC,EAAkE,EAAlEA,QAASzT,EAAyD,EAAzDA,SAAUjnB,EAA+C,EAA/CA,MAAO24B,EAAwC,EAAxCA,YAAahqB,EAA2B,EAA3BA,GACzErZ,EAAgBuvB,cAChBpkB,EAAKsmB,aAAczxB,EAAMiL,YAAYymB,KAAK,OAE1CztB,EAAao4B,mBAAQ,WACvB,MAAe,UACN+I,EADFzT,EAAQ,4BAETxmB,EAAE,iDAGT,CAACwmB,EAAUxmB,IAiBd,OAfA8uB,qBAAU,WACN,IAAM8L,EAAmB,WAEjBzX,OAAO0X,QAAUhB,kBAAiBG,EAAInL,QAAQiM,WAC9C3X,OAAO0X,QAAUhB,iBAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cAErE5X,OAAOq9B,cAAc,IAAIC,YAAY7mB,2BAAyB,CAAEe,OAAQzsB,EAAIwyC,SAAS,MAM7F,OAFAv9B,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,qBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACT4iD,oBAAqBn6B,EAAW,MAAQxmB,EAAK,UAAY,UACzDS,MAAO,OACP3H,WAAW,QAAD,OAAUA,EAAV,gBACVC,eAAgB,QAChBiF,WAAY,MACZC,eAAgB,SAChB2iD,oBAAqBp6B,EAAW,MAAQ,UAVhD,SAaI,sBACIjC,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfC,IAAK78B,IAAWrJ,QAAQ,IACxBuL,QAASkmB,EAAQ,eACHpoB,IAAWrJ,QAAQ,GADhB,cACwBqJ,IAAWrJ,QAAQ,GAD3C,cACmDqJ,IAAWrJ,QAAQ,GADtE,oBAEJqJ,IAAWrJ,QAAQ,GAFf,MAGjBqmC,SAAU,IACVQ,YAAa,UATrB,UAYI,cAACP,EAAA,EAAD,CACI9W,MAAK,2BACGiC,EAAWpoB,IAAW3D,WAAW+E,QAAUpB,IAAW3D,WAAW8E,OADpE,IAED+7B,UAAW9U,EAAW,SAAW,UAHzC,SAMKjnB,IAEL,cAAC87B,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWmF,UAA7B,IAAuC07B,UAAW9U,EAAW,SAAW,UAAzF,SACK0R,YCIN2oB,GAjES9mB,sBAAW,WAAwDC,GAAc,IAAnExT,EAAkE,EAAlEA,SAAUyT,EAAwD,EAAxDA,QAAS16B,EAA+C,EAA/CA,MAAO24B,EAAwC,EAAxCA,YAAahqB,EAA2B,EAA3BA,GACnE4yC,EAAK,UAAM7mB,EAAN,sBAiBX,OAfAnL,qBAAU,WACN,IAAM8L,EAAmB,WAEjBzX,OAAO0X,QAAUhB,kBAAiBG,EAAInL,QAAQiM,WAC9C3X,OAAO0X,QAAUhB,iBAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cAErE5X,OAAOq9B,cAAc,IAAIC,YAAY7mB,2BAAyB,CAAEe,OAAQzsB,EAAIwyC,SAAS,MAM7F,OAFAv9B,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,sBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACTi9B,cAAexU,EAAW,SAAW,MACrClmB,QAASkmB,EAAQ,oBACjByU,IAAK78B,IAAWrJ,QAAQyxB,EAAW,EAAI,GACvCvoB,eAAgB,UAPxB,UAUI,cAACisB,GAAA,EAAD,CACIC,IAAK22B,EACLrgD,MAAO,KACPxL,OAAQ,IACRsvB,MAAO,CAAE9jB,MAAO+lB,EAAW,OAAS,MAAOu6B,WAAYv6B,EAAW,OAAS,OAC3EqE,iBAAe,IAEnB,qBACItG,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfh9B,WAAYwoB,EAAW,SAAW,QAClCvoB,eAAgB,SAChBwC,MAAO+lB,EAAW,OAAS,MAC3BlmB,QAASkmB,EAAQ,YAAQpoB,IAAWrJ,QAAQ,GAA3B,MAAoC,GAP7D,SAUI,sBAAKwvB,MAAO,CAAExmB,QAAS,OAAQq9B,SAAU,IAAK4lB,UAAW,SAAUhmB,cAAe,UAAlF,UACI,cAACK,EAAA,EAAD,CACI9W,MAAK,2BACGiC,EAAWpoB,IAAW3D,WAAW+E,QAAUpB,IAAW3D,WAAW8E,OADpE,IAED+7B,UAAW9U,EAAW,SAAW,SAHzC,SAMKjnB,IAEL,cAAC2kB,GAAA,EAAD,CAAQG,KAAM,KACd,cAACgX,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWmF,UAA7B,IAAuC07B,UAAW9U,EAAW,SAAW,SAAzF,SACK0R,eCqBV+oB,GA7EkBlnB,sBAAW,WAA8DC,GAAc,IAAzExT,EAAwE,EAAxEA,SAAUyT,EAA8D,EAA9DA,QAAS16B,EAAqD,EAArDA,MAAO24B,EAA8C,EAA9CA,YAAagC,EAAiC,EAAjCA,KAAMhsB,EAA2B,EAA3BA,GAClFrZ,EAAgBuvB,cAChBpkB,EAAKsmB,aAAczxB,EAAMiL,YAAYymB,KAAK,OAE1CztB,EAAao4B,mBAAQ,WACvB,OAAIgJ,IAASnc,KAAUS,QACJ,UACNyb,EADFzT,EAAQ,2BAETxmB,EAAE,6CAIG,UACNi6B,EADFzT,EAAQ,0BAETxmB,EAAE,6CAGT,CAACwmB,EAAUxmB,EAAIk6B,IAiBlB,OAfApL,qBAAU,WACN,IAAM8L,EAAmB,WAEjBzX,OAAO0X,QAAUhB,kBAAiBG,EAAInL,QAAQiM,WAC9C3X,OAAO0X,QAAUhB,iBAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cAErE5X,OAAOq9B,cAAc,IAAIC,YAAY7mB,2BAAyB,CAAEe,OAAQzsB,EAAIwyC,SAAS,MAM7F,OAFAv9B,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,qBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACT4iD,oBAAqBn6B,EAAW,MAAQxmB,EAAK,UAAY,UACzDS,MAAO,OACP3H,WAAW,gBAAD,OAAkBA,EAAlB,gBACVC,eAAgB,QAChBiF,WAAY,MACZC,eAAgB,SAChB2iD,oBAAqBp6B,EAAW,MAAQxmB,EAAK,MAAQ,KACrDkhD,oBAAqBlhD,EAAK,SAAW,QAX7C,SAcI,sBACIukB,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfC,IAAK78B,IAAWrJ,QAAQ,IACxBuL,QAASkmB,EAAQ,eACHpoB,IAAWrJ,QAAQ,GADhB,cACwBqJ,IAAWrJ,QAAQ,GAD3C,cACmDqJ,IAAWrJ,QAAQ,GADtE,oBAEJqJ,IAAWrJ,QAAQ,GAFf,MAGjBqmC,SAAU,IACVQ,YAAa,UATrB,UAYI,cAACP,EAAA,EAAD,CACI9W,MAAK,2BACGiC,EAAWpoB,IAAW3D,WAAW+E,QAAUpB,IAAW3D,WAAW8E,OADpE,IAED+7B,UAAW9U,EAAW,SAAW,UAHzC,SAMKjnB,IAEL,cAAC87B,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWmF,UAA7B,IAAuC07B,UAAW9U,EAAW,SAAW,UAAzF,SACK0R,YC0CNipB,GA7GiBpnB,sBAC5B,WAAiFC,GAAc,IAA5FxT,EAA2F,EAA3FA,SAAUyT,EAAiF,EAAjFA,QAASC,EAAwE,EAAxEA,KAAM4B,EAAkE,EAAlEA,UAAW1B,EAAuD,EAAvDA,OAAQ76B,EAA+C,EAA/CA,MAAO24B,EAAwC,EAAxCA,YAAahqB,EAA2B,EAA3BA,GASzD4yC,EAAQ5vB,mBAAQ,WAClB,OAAIgJ,IAASnc,KAAUS,QAAe,GAAN,OAAUyb,EAAV,uBAE1B,GAAN,OAAUA,EAAV,wBACD,CAACC,IAiBJ,OAfApL,qBAAU,WACN,IAAM8L,EAAmB,WAEjBzX,OAAO0X,SAAWb,EAAInL,QAAQiM,WAAatU,EAAW,EAAIwT,EAAInL,QAAQkM,aAAe,IACrF5X,OAAO0X,QAAUhB,iBAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cAErE5X,OAAOq9B,cAAc,IAAIC,YAAY7mB,2BAAyB,CAAEe,OAAQzsB,EAAIwyC,SAAS,MAM7F,OAFAv9B,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,qBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfv6B,MAAO,OACPH,QAAQ,GAAD,OAAKlC,IAAWrJ,QAAQ,GAAxB,QACPkJ,eAAgB,SAChBD,WAAY,UARpB,SAWI,sBACIumB,MAAO,CACHxmB,QAAS,OACT0C,MAAO,OACPu6B,cAAe,SACfliC,WAAW,GAAD,OAAKsF,IAAW1F,MAAMnB,KAAtB,iBAAmC0iC,EAAnC,YACNzT,EAAW,eAAiB,uBADtB,gBAGVztB,eAAgBytB,EAAW,OAAS,OACpC+mB,mBAAoB/mB,EAAW,UAAY,UAC3CxoB,WAAY,SACZm9B,UAAW,UAXnB,UAcI,cAACjR,GAAA,EAAD,CACIC,IAAK22B,EACLrgD,MAAO,KACPxL,OAAQ,IACRsvB,MAAO,CAAE9jB,MAAO+lB,EAAW,OAAS,MAAO4U,SAAU,OAEzD,cAAClX,GAAA,EAAD,CAAQG,KAAM,IACd,cAACgX,EAAA,EAAD,CACI9W,MAAK,2BACGiC,EAAWpoB,IAAW3D,WAAW+E,QAAUpB,IAAW3D,WAAW8E,OADpE,IAED+7B,UAAW,WAHnB,SAMK/7B,IAEL,cAAC2kB,GAAA,EAAD,CAAQG,KAAM,KACd,cAACgX,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWmF,UAA7B,IAAuC07B,UAAW,WAAnE,SACKpD,IAEL,sBACI3T,MAAO,CACHxmB,QAAS,OACT0C,MAAO,OACP26B,SAAU,IACVH,IAAK78B,IAAWrJ,QAAQ,GACxBkJ,eAAgBuoB,EAAW,SAAW,MACtClmB,QAASlC,IAAWrJ,QAAQ,IAPpC,UAUI,cAACm1B,GAAA,EAAD,CACIzpB,MAAO,IACPxL,OAAQ,IACRk1B,IAAG,UAAK8P,EAAL,wBACH1V,MAAO,CAAE9jB,MAAO,OAAQ5C,OAAQ,WAChCgtB,iBAAe,EACf6Q,QAtFa,WAC7BvY,OAAO0xB,KAAKza,EAAQ,aAuFR,cAAClQ,GAAA,EAAD,CACIzpB,MAAO,IACPxL,OAAQ,IACRk1B,IAAG,UAAK8P,EAAL,0BACH1V,MAAO,CAAE9jB,MAAO+lB,EAAW,OAAS,OAAQ3oB,OAAQ,WACpD69B,QAjGc,WAC9BvY,OAAO0xB,KAAK/Y,EAAW,WAiGPjR,iBAAe,e,oBCjD5Bu2B,GAzDA,SAAC,GAA+C,IAA7C56B,EAA4C,EAA5CA,SAAU66B,EAAkC,EAAlCA,SAAUC,EAAwB,EAAxBA,UAC5BzsD,EAAgBuvB,cAChBpkB,EAAKsmB,aAAczxB,EAAMiL,YAAYymB,KAAK,OAEhDuI,qBAAU,WACNyyB,iBACD,IAEH,IAAMjoD,EAAkB,CACpB4C,KAAK,uCACEkC,IAAW3D,WAAWkF,MACtBvB,IAAWvK,UAAUC,MAFxB,IAGA4E,MAAO0F,IAAW1F,MAAM0E,MACxB9B,cAAe,YACfggC,UAAW,YAInB,OACI,sBACI/W,MAAO,CACHxmB,QAAS,OACTi9B,cAAexU,EAAW,iBAAmB,MAC7ClmB,QAASkmB,EAAQ,UACRpoB,IAAWrJ,QAAQ,GADX,cACmBqJ,IAAWrJ,QAAQ,GADtC,cAC8CqJ,IAAWrJ,QAChE,GAFO,cAGJqJ,IAAWrJ,QAAQ,GAHf,MAIXqJ,IAAWrJ,QAAQ,GACzB0D,gBAAiB2F,IAAW1F,MAAM2F,SAClCJ,eAAgB,gBAChBg9B,IAAK78B,IAAWrJ,QAAQyxB,EAAW,EAAI,IAX/C,UAcI,cAAC,KAAD,CAAQjC,MAAO,CAAEtvB,OAAQ,MACzB,sBACIsvB,MAAO,CACHxmB,QAAS,OACTi9B,cAAexU,EAAW,SAAW,MACrCyU,IAAK78B,IAAWrJ,QAAQyxB,EAAW,EAAIxmB,EAAK,EAAI,GAChDhC,WAAY,SACZy0B,aAAcjM,EAAW,EAAI,IANrC,UASI,mBAAG+nB,KAAM8S,EAAU5V,OAAO,SAA1B,SACI,cAACpQ,EAAA,EAAD,CAAY9W,MAAOjrB,EAAO4C,KAA1B,kCAEJ,mBAAGqyC,KAAM+S,EAAW7V,OAAO,SAA3B,SACI,cAACpQ,EAAA,EAAD,CAAY9W,MAAOjrB,EAAO4C,KAA1B,8BAEJ,cAACm/B,EAAA,EAAD,CAAY9W,MAAOjrB,EAAO4C,KAA1B,SACI,qBAAKgS,GAAG,uB,qBCiBbszC,GAjEcznB,sBAAW,WAAwDC,GAAc,IAAnExT,EAAkE,EAAlEA,SAAUyT,EAAwD,EAAxDA,QAAS16B,EAA+C,EAA/CA,MAAO24B,EAAwC,EAAxCA,YAAahqB,EAA2B,EAA3BA,GACxE4yC,EAAK,UAAM7mB,EAAN,wBAiBX,OAfAnL,qBAAU,WACN,IAAM8L,EAAmB,WAEjBzX,OAAO0X,QAAUhB,kBAAiBG,EAAInL,QAAQiM,WAC9C3X,OAAO0X,QAAUhB,iBAAgBG,EAAInL,QAAQiM,UAAYd,EAAInL,QAAQkM,cAErE5X,OAAOq9B,cAAc,IAAIC,YAAY7mB,2BAAyB,CAAEe,OAAQzsB,EAAIwyC,SAAS,MAM7F,OAFAv9B,OAAOuS,iBAAiB,SAAUkF,GAE3B,kBAAMzX,OAAOkT,oBAAoB,SAAUuE,MACnD,CAACZ,IAGA,sBACIA,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACTi9B,cAAexU,EAAW,SAAW,MACrClmB,QAASkmB,EAAQ,oBACjByU,IAAK78B,IAAWrJ,QAAQyxB,EAAW,EAAI,GACvCvoB,eAAgB,UAPxB,UAUI,cAACisB,GAAA,EAAD,CACIC,IAAK22B,EACLrgD,MAAO,KACPxL,OAAQ,IACRsvB,MAAO,CAAE9jB,MAAO+lB,EAAW,OAAS,MAAOu6B,WAAYv6B,EAAW,OAAS,OAC3EqE,iBAAe,IAEnB,qBACItG,MAAO,CACHxmB,QAAS,OACTi9B,cAAe,SACfh9B,WAAYwoB,EAAW,SAAW,QAClCvoB,eAAgB,SAChBwC,MAAO+lB,EAAW,OAAS,MAC3BlmB,QAASkmB,EAAQ,YAAQpoB,IAAWrJ,QAAQ,GAA3B,MAAoC,GAP7D,SAUI,sBAAKwvB,MAAO,CAAExmB,QAAS,OAAQq9B,SAAU,IAAK4lB,UAAW,SAAUhmB,cAAe,UAAlF,UACI,cAACK,EAAA,EAAD,CACI9W,MAAK,2BACGiC,EAAWpoB,IAAW3D,WAAW+E,QAAUpB,IAAW3D,WAAW8E,OADpE,IAED+7B,UAAW9U,EAAW,SAAW,SAHzC,SAMKjnB,IAEL,cAAC2kB,GAAA,EAAD,CAAQG,KAAM,KACd,cAACgX,EAAA,EAAD,CAAY9W,MAAK,2BAAOnmB,IAAW3D,WAAWmF,UAA7B,IAAuC07B,UAAW9U,EAAW,SAAW,SAAzF,SACK0R,eCxDnB4B,GAAc6kB,gBAAK,kBAAM,2CACzB8C,GAAa9C,gBAAK,kBAAM,0DACxB+C,GAA+B/C,gBAAK,kBAAM,oCAC1CgD,GAA8BhD,gBAAK,kBAAM,0DAUhC,SAASiD,GAAT,GAA2C,IAAD,mHAAnBziD,GAAmB,EAAnBA,QAC5Bu+B,GAAmBsC,cAAwBjW,MAAM2T,iBACjDyW,GAAazW,GAAiBS,OAC9BC,GAAiBV,GAAiBU,eAClC/D,GAAeqD,GAAiBrD,aAChCD,GAASsD,GAAiBkB,OAC1BpY,GAAWH,cAEjB,GAA4BsK,oBAAS,GAArC,qBAAOsY,GAAP,MAAe4Y,GAAf,MACA,GAAkClxB,qBAAlC,qBAAOmxB,GAAP,MAAkBC,GAAlB,MAEMC,GAAc,CAChBC,KAAMC,sBACN9jB,eAAgB8jB,sBAChBC,aAAcD,sBACdE,mBAAoBF,sBACpBG,SAAUH,sBACVI,UAAWJ,sBACXK,iBAAkBL,uBAGhBM,GAAmBtxB,mBAAQ,WAC7B,MAAgB,QAAZ/xB,GAA0B4e,KAAUS,QACxB,WAAZrf,GAA6B4e,KAAU1Q,YAA3C,IAGD,CAAClO,KAEJ,GAAuBwxB,mBAAS6xB,IAAzBC,GAAP,qBAEA3zB,qBAAU,WACN+yB,IAAU,GACV3N,aAAoBC,IACfzkB,MAAK,SAACgzB,GACHX,GAAaW,MAEhBC,SAAQ,WACLd,IAAU,QAEnB,IAEH,IAAM5nB,GAAO,UAAMx3B,YAAa0xC,KAAnB,OAjDO,iBAkDdja,GAAI,OAAGuoB,SAAH,IAAGA,MAAgB1kC,KAAU5P,OAEjCy0C,GAAc,SAAC10C,GACbA,IAAO20C,GAASC,eAAe50C,IAAmC,OAA7B8zC,GAAYC,KAAKpzB,QACtDmzB,GAAYC,KAAKpzB,QAAQk0B,eAAe,CAAEvM,SAAU,WAC7CtoC,IAAO20C,GAASzkB,eAAelwB,IAA6C,OAAvC8zC,GAAY5jB,eAAevP,QACvEmzB,GAAY5jB,eAAevP,QAAQk0B,eAAe,CAAEvM,SAAU,WACvDtoC,IAAO20C,GAASV,aAAaj0C,IAA2C,OAArC8zC,GAAYG,aAAatzB,QACnEmzB,GAAYG,aAAatzB,QAAQk0B,eAAe,CAAEvM,SAAU,WACrDtoC,IAAO20C,GAASG,mBAAmB90C,IAAiD,OAA3C8zC,GAAYI,mBAAmBvzB,QAC/EmzB,GAAYI,mBAAmBvzB,QAAQk0B,eAAe,CAAEvM,SAAU,WAC3DtoC,IAAO20C,GAASI,SAAS/0C,IAAuC,OAAjC8zC,GAAYK,SAASxzB,QAC3DmzB,GAAYK,SAASxzB,QAAQk0B,eAAe,CAAEvM,SAAU,WACjDtoC,IAAO20C,GAASK,kBAAkBh1C,IAAwC,OAAlC8zC,GAAYM,UAAUzzB,QACrEmzB,GAAYM,UAAUzzB,QAAQk0B,eAAe,CAAEvM,SAAU,WAClDtoC,IAAO20C,GAASN,iBAAiBr0C,IAA+C,OAAzC8zC,GAAYO,iBAAiB1zB,SAC3EmzB,GAAYO,iBAAiB1zB,QAAQk0B,eAAe,CAAEvM,SAAU,YAIlEqM,GAAW,CACbC,eAAgB,CAAE50C,GAAI,UAAWytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAWG,YAAb,aAAE,EAAiBkB,YAAnB,QAA2B,GAAIn5B,OAAQ44B,IAC7ExkB,eAAgB,CAAElwB,GAAI,YAAaytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAWsB,4BAAb,aAAE,EAAiCD,YAAnC,QAA2C,GAAIn5B,OAAQ44B,IAC/FT,aAAc,CAAEj0C,GAAI,SAAUytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAWuB,2BAAb,aAAE,EAAgCF,YAAlC,QAA0C,GAAIn5B,OAAQ44B,IACzFI,mBAAoB,CAChB90C,GAAI,uBACJytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAWwB,iCAAb,aAAE,EAAsCH,YAAxC,QAAgD,GACrDn5B,OAAQ44B,IAEZK,SAAU,CAAE/0C,GAAI,YAAaytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAWyB,0BAAb,aAAE,EAA+BJ,YAAjC,QAAyC,GAAIn5B,OAAQ44B,IACvFM,kBAAmB,CACfh1C,GAAI,qBACJytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAW0B,wBAAb,aAAE,EAA6BL,YAA/B,QAAuC,GAC5Cn5B,OAAQ44B,IAEZL,iBAAkB,CACdr0C,GAAI,cACJytB,MAAK,iBAAEmmB,SAAF,IAAEA,IAAF,UAAEA,GAAW2B,8BAAb,aAAE,EAAmCN,YAArC,QAA6C,GAClDn5B,OAAQ44B,KAIVzoB,GAAMupB,uBAAY,WACpB,OAAIjB,KAAiB1kC,KAAUS,QACpB,CACHqkC,GAASC,eACTD,GAASzkB,eACTykB,GAASK,kBACTL,GAASI,SACTJ,GAASV,aACTU,GAASN,kBAGbE,KAAiB1kC,KAAU1Q,OACpB,CACHw1C,GAASC,eACTD,GAASzkB,eACTykB,GAASG,mBACTH,GAASK,kBACTL,GAASI,SACTJ,GAASN,kBAGV,CACHM,GAASC,eACTD,GAASzkB,eACTykB,GAASV,aACTU,GAASI,SACTJ,GAASK,kBACTL,GAASN,oBAEd,CAACE,GAAcxZ,KAEZ0a,GAAcn9B,GAChB,cAACi7B,GAAD,CACIvzC,GAAI20C,GAASC,eAAe50C,GAC5B8rB,IAAKgoB,GAAYC,KACjBhoB,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,QAAF,EAAEA,GAAWG,KAAK1iD,aAAlB,QAA2B,GAChC24B,YAAW,iBAAE4pB,SAAF,IAAEA,QAAF,EAAEA,GAAWG,KAAK/pB,mBAAlB,QAAiC,GAC5CgC,KAAMA,GACNC,IAAKA,KACLC,OAAQA,GACRC,aAAcA,GACdC,eAAc,iBAAEwnB,SAAF,IAAEA,QAAF,EAAEA,GAAW8B,iBAAiBC,yBAA9B,QAAmD,KAGrE,cAAC,GAAD,CACI31C,GAAI20C,GAASC,eAAe50C,GAC5B8rB,IAAKgoB,GAAYC,KACjBhoB,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAWG,YAAb,aAAE,EAAiB1iD,aAAnB,QAA4B,GACjC24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,UAAEA,GAAWG,YAAb,aAAE,EAAiB/pB,mBAAnB,QAAkC,GAC7CgC,KAAMA,GACNC,IAAKA,KACLC,OAAQA,GACRC,aAAcA,GACdC,eAAc,iBAAEwnB,SAAF,IAAEA,IAAF,UAAEA,GAAW8B,wBAAb,aAAE,EAA6B1rB,mBAA/B,QAA8C,KAI9D4rB,GAAwBt9B,GAC1B,cAACm7B,GAAD,CACIzzC,GAAI20C,GAASzkB,eAAelwB,GAC5B8rB,IAAKgoB,GAAY5jB,eACjBlE,KAAMA,GACNkE,eAAc,iBAAE0jB,SAAF,IAAEA,QAAF,EAAEA,GAAWsB,qBAAqBW,4BAAlC,QAA0D,CAAEC,KAAM,GAAIC,KAAM,IAC1FC,UAAW9lB,GACX7+B,MAAK,iBAAEuiD,SAAF,IAAEA,QAAF,EAAEA,GAAWsB,qBAAqB7jD,aAAlC,QAA2C,GAChD24B,YAAW,iBAAE4pB,SAAF,IAAEA,QAAF,EAAEA,GAAWsB,qBAAqBlrB,mBAAlC,QAAiD,GAC5D+B,QAASA,KAGb,cAACynB,GAAD,CACIxzC,GAAI20C,GAASzkB,eAAelwB,GAC5B8rB,IAAKgoB,GAAY5jB,eACjBlE,KAAMA,GACNkE,eAAc,iBAAE0jB,SAAF,IAAEA,IAAF,UAAEA,GAAWsB,4BAAb,aAAE,EAAiCe,6BAAnC,QAA4D,GAC1ED,UAAW9lB,GACXnE,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAWsB,4BAAb,aAAE,EAAiC7jD,aAAnC,QAA4C,GACjD24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,UAAEA,GAAWsB,4BAAb,aAAE,EAAiClrB,mBAAnC,QAAkD,KAI/DmrB,GACF,cAAC,GAAD,CACIn1C,GAAI20C,GAASV,aAAaj0C,GAC1B8rB,IAAKgoB,GAAYG,aACjB37B,SAAUA,GACVyT,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAWuB,2BAAb,aAAE,EAAgC9jD,aAAlC,QAA2C,GAChD24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,UAAEA,GAAWuB,2BAAb,aAAE,EAAgCnrB,mBAAlC,QAAiD,KAI9DksB,GACF,cAAC,GAAD,CACIl2C,GAAI20C,GAASI,SAAS/0C,GACtB8rB,IAAKgoB,GAAYK,SACjB77B,SAAUA,GACVyT,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAWyB,0BAAb,aAAE,EAA+BhkD,aAAjC,QAA0C,GAC/C24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,UAAEA,GAAWyB,0BAAb,aAAE,EAA+BrrB,mBAAjC,QAAgD,KAI7DmsB,GACF,cAAC,GAAD,CACIn2C,GAAI20C,GAASG,mBAAmB90C,GAChC8rB,IAAKgoB,GAAYI,mBACjB57B,SAAUA,GACVyT,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAWwB,iCAAb,aAAE,EAAsC/jD,aAAxC,QAAiD,GACtD24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,UAAEA,GAAWwB,iCAAb,aAAE,EAAsCprB,mBAAxC,QAAuD,KAIpEosB,GACF,cAAC,GAAD,CACIp2C,GAAI20C,GAASK,kBAAkBh1C,GAC/B8rB,IAAKgoB,GAAYM,UACjB97B,SAAUA,GACVyT,QAASA,GACT16B,MAAK,iBAAEuiD,SAAF,IAAEA,IAAF,UAAEA,GAAW0B,wBAAb,aAAE,EAA6BjkD,aAA/B,QAAwC,GAC7C24B,YAAW,iBAAE4pB,SAAF,IAAEA,IAAF,WAAEA,GAAW0B,wBAAb,cAAE,GAA6BtrB,mBAA/B,QAA8C,GACzDgC,KAAMA,KAIRqqB,GACF,cAAC,GAAD,CACIr2C,GAAI20C,GAASN,iBAAiBr0C,GAC9B8rB,IAAKgoB,GAAYO,iBACjB/7B,SAAUA,GACVyT,QAASA,GACTC,KAAMA,GACN4B,UAAWzB,GACXD,OAAQA,GACR76B,MAAK,kBAAEuiD,SAAF,IAAEA,IAAF,WAAEA,GAAW2B,8BAAb,cAAE,GAAmClkD,aAArC,UAA8C,GACnD24B,YAAW,kBAAE4pB,SAAF,IAAEA,IAAF,WAAEA,GAAW2B,8BAAb,cAAE,GAAmCvrB,mBAArC,UAAoD,KAIjEssB,GAAWd,uBAAY,WACzB,OAAIjB,KAAiB1kC,KAAUS,QACpB,CACHmlC,GACAG,GACAQ,GACAF,GACAf,GACAkB,IAGJ9B,KAAiB1kC,KAAU1Q,OACpB,CACHs2C,GACAG,GACAO,GACAC,GACAF,GACAG,IAGD,CACHZ,GACAG,GACAT,GACAe,GACAE,GACAC,MAEL,CAAC9B,GAAcxZ,KAElB,OAAIA,GAAe,cAACpC,GAAA,EAAD,IAGf,qBAAK9b,UAAWI,KAAQorB,OAAQhyB,MAAO,CAAExmB,QAAS,OAAQi9B,cAAe,SAAUl9B,SAAU,YAA7F,SACI,eAAC,WAAD,CAAUqiD,SAAU,cAACtZ,GAAA,EAAD,IAApB,UACK2d,KAAWx8B,KAAI,SAACy8B,GAAD,OAAOA,KACvB,cAAC,GAAD,CACIj+B,SAAUA,GACV66B,SAAQ,kBAAES,SAAF,IAAEA,QAAF,EAAEA,GAAW4C,6BAAb,UAAsC,GAC9CpD,UAAS,kBAAEQ,SAAF,IAAEA,QAAF,EAAEA,GAAW6C,wBAAb,UAAiC,U,ICvSzDC,G,uCAAAA,O,6BAAAA,I,qCAAAA,I,6BAAAA,I,yBAAAA,I,yBAAAA,I,iCAAAA,I,qBAAAA,I,uBAAAA,I,2BAAAA,I,oCAAAA,I,sCAAAA,I,sDAAAA,I,wBAAAA,E,qDAAAA,Q,KAkBUA,UCsEAC,GA1EO,WAClB,IAAMjjD,EAAW8uB,cACXnC,EAASC,cACf,EAA4BE,cAApB3E,EAAR,EAAQA,MAAO7C,EAAf,EAAeA,SACT2iB,EAAUC,cACVgb,EAAkB7U,aAAaC,QAAQ0U,GAAeG,0BACtDv+B,EAAWH,cAEX2+B,EAA4B,yCAAG,iCAAAz9B,EAAA,sDAC7BpE,OAAOvhB,SAAS00C,WAAa3zC,IAAYW,aAAekjB,IAClDT,EAAS5C,OAAOvhB,SAASmkB,OACzBk/B,EAAW,IAAIC,gBAAgBn/B,GAAQ8Y,IAAI,YACxB9U,EAAMnhB,SAASqqB,kBAE9BkyB,EADY,UACK1iD,YAAa8rB,EAAO0I,SAAS91B,OADlC,OAC0C8jD,GAC5D9hC,OAAOvhB,SAASokB,QAAQm/B,GACxBtb,EAAQpkB,KAAK0/B,GACblV,aAAaM,QAAQqU,GAAeG,yBAA0BI,KATrC,2CAAH,qDA+DlC,OAjDAr2B,qBAAU,WACN,IAAMs2B,EAAkB,yCAAG,uCAAA79B,EAAA,6DACjBxB,EAASnkB,EAASmkB,UAEX5C,OAAOvhB,SAAS2sC,KAAO5rC,IAAYC,UAE1CkhC,EAAche,YAAeC,MAE/B5C,OAAOvhB,SAAS2sC,KAAO5rC,IAAYC,UAGjCqzB,EAAW6N,EAAW,QAExB3gB,OAAOvhB,SAAS2sC,KAAO5rC,IAAYC,SAGjCygC,EAAoC,CACtCpN,SAAUA,EACVL,SAAUrH,EAAOsH,UAAUD,SAC3BE,UAAWvH,EAAOsH,UAAUwB,WAC5BnB,aAAc,GACdF,YAAazH,EAAOsH,UAAUG,YAC9BjC,aAAc,IArBK,mBAyBEyT,aAAoBtgB,EAAUmc,GAzBhC,eAyBbhU,EAzBa,OA2BnB+e,aAAoD/e,EAAOC,YAAapI,EAArB,YAAC,eAC7Cmc,GAD4C,IAE/CvN,UAAWvH,EAAOsH,UAAUE,mBAC5BE,SAAU,MA9BK,UAiCbV,aAAsBrO,GAjCT,QAmCb+4B,EAAO6E,GAAoCniD,IAAYe,MAC7DmmC,EAAQpkB,KAAKw6B,GACbhQ,aAAaoV,WAAWT,GAAeG,0BACvCC,IAtCmB,kDAwCnBrhC,QAAQC,IAAR,iDACAT,OAAOvhB,SAAS2sC,KAAO5rC,IAAYC,QAzChB,0DAAH,qDA6CxBwiD,MACD,IAEI,8BCnFEE,GAAoB,SAACrF,GAC9B,IAAIsF,GAAU,EA4Bd,OA1BAha,OAAOia,OAAO7iD,KAAa8iD,OAAM,SAACC,GAC9B,MAAiB,kBAANA,EACHA,IAAMzF,IACNsF,GAAU,GACH,GAME,kBAANG,GACPna,OAAOia,OAAOE,GAAGD,OAAM,SAACE,GACpB,QAAI1F,EAAK5T,QAAQsZ,IAAO,KACpBJ,GAAU,GACH,OAMXA,QAVR,KAgBGA,GClBI,SAASK,KACpB,IAAMr3B,EAASC,cACTqb,EAAUC,cACVrb,EAAkBC,cAExB,EAAkCiC,oBAAS,GAA3C,mBAAOk1B,EAAP,KAAkBC,EAAlB,KAsCA,OApCAh3B,qBAAU,WACN,IAAM6G,EAAwC,CAC1CC,SAAUrH,EAAOsH,UAAUD,SAC3BE,UAAWvH,EAAOsH,UAAUE,mBAC5BhC,aAAc,GACdiC,YAAazH,EAAOsH,UAAUG,YAC9BC,SAAU,GACVC,aAAc,IAGZ6vB,EAAiB,yCAAG,+BAAAx+B,EAAA,yDAElBpE,OAAOvhB,SAAS00C,WAAa3zC,IAAYC,SACzCugB,OAAOvhB,SAAS00C,WAAa3zC,IAAYE,YACzCsgB,OAAOvhB,SAAS00C,WAAa3zC,IAAYG,eACzCqgB,OAAOvhB,SAAS00C,WAAa3zC,IAAYc,eACzC0f,OAAOvhB,SAAS00C,WAAa3zC,IAAYa,YACzC8hD,GAAkBniC,OAAOvhB,SAAS00C,UAPhB,uBASlBrG,aAAaM,QACTqU,GAAeG,yBACf5hC,OAAOvhB,SAAS00C,SAAWnzB,OAAOvhB,SAASokD,MAX7B,SAaa7vB,aAAa1H,EAAgBvH,SAAUyO,GAbpD,gBAeRwvB,EADY,UAEdlV,aAAaC,QAAQ0U,GAAeG,iCAFtB,QAEmDpiD,IAAYO,QACjF2mC,EAAQpkB,KAAK0/B,GACblV,aAAaoV,WAAWT,GAAeG,2BAlBzB,2CAAH,qDAuBvBgB,IAAoBpD,SAAQ,kBAAMmD,GAAa,QAChD,IAGC,oCACMD,GACE,eAAC,IAAD,WACI,cAAC,IAAD,CAAO5F,KAAMt9C,IAAYc,cAAe28C,OAAK,EAA7C,SACI,cAAC,GAAD,MAEJ,cAAC,IAAD,CAAOH,KAAMt9C,IAAYC,QAASw9C,OAAK,EAAvC,SACI,cAACwB,GAAD,MAEJ,cAAC,IAAD,CAAO3B,KAAMt9C,IAAYG,cAAes9C,OAAK,EAA7C,SACI,cAACwB,GAAD,CAAaziD,QAAQ,aAEzB,cAAC,IAAD,CAAO8gD,KAAMt9C,IAAYE,WAAYu9C,OAAK,EAA1C,SACI,cAACwB,GAAD,CAAaziD,QAAQ,UAEzB,cAAC,IAAD,CAAUylC,GAAIjiC,IAAYC,e,cCG/BqjD,GAhEU,WACrB,IAAMtN,EAAqB3Y,cAErB1mC,EAAkB,CACpBwD,KAAM,CACFiB,QAAS,OACTE,eAAgB,SAChBD,WAAY,SACZhB,UAAW,QACX/H,OAAQ,OACRwL,MAAO,OACPH,QAASlC,IAAWrJ,QAAQ,GAC5B6I,OAAQ,GAEZmrC,UAAW,CACPhrC,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,UAEhB9B,KAAM,CACFxD,MAAO0F,IAAW1F,MAAMjC,OAE5B62C,IAAK,CACDvvC,QAAS,OACTi9B,cAAexU,YAAW,SAAW,MACrCxoB,WAAY,SACZC,eAAgB,WAIlBo8B,EAAese,EAAmB5uB,MAAM2T,iBAAiBrD,aACzDshB,EAAShD,EAAmB5uB,MAAM2T,iBAAiBkB,OAUzD,OARA9P,qBAAU,WACF6D,UAASnM,YACTrD,OAAOvhB,SAAS2sC,KAAOoN,EAChBuK,cAAa1/B,cACpBrD,OAAOvhB,SAAS2sC,KAAOlU,KAE5B,IAGC,yBAAS9V,MAAOjrB,EAAOwD,KAAvB,SACI,sBAAKynB,MAAOjrB,EAAOyvC,UAAnB,UACI,cAAC,KAAD,CAAQxkB,MAAO,CAAEtvB,OAAQ,OAAQwL,MAAO+lB,YAAW,MAAQ,IAAKymB,KAAM7uC,IAAW1F,MAAM0E,SACvF,cAAC8mB,GAAA,EAAD,CAAQG,KAAM,IACd,cAACgX,EAAA,EAAD,CAAYsS,MAAM,SAASppB,MAAK,2BAAOnmB,IAAW3D,WAAW+E,SAAYlG,EAAO4C,MAAhF,gEAGA,cAACgoB,GAAA,EAAD,CAAQG,KAAM,IACd,uBAAME,MAAOjrB,EAAOg0C,IAApB,UACI,mBAAGiB,KAAMoN,EAAT,SACI,cAACzxB,GAAA,EAAD,CAAK3F,MAAO,CAAE9jB,MAAO,KAAO0pB,IAAK4xB,GAAU1xB,IAAI,YAAYp1B,OAAQ,IAAKwL,MAAO,QAEnF,cAACyjB,GAAA,EAAD,CAAQG,KAAM,IACd,mBAAGkqB,KAAMlU,EAAT,SACI,cAACnQ,GAAA,EAAD,CAAK3F,MAAO,CAAE9jB,MAAO,KAAO0pB,IAAK2R,GAAWzR,IAAI,YAAYp1B,OAAQ,MAAOwL,MAAO,iBC3D3F,SAAS0lD,KACpB,IAAMvkD,EAAW8uB,cAAc4lB,SACzB7nB,EAAkBC,cAExB,OAAO9sB,IAAae,IAAYI,iBAC5B,cAAC,GAAD,IACA0rB,EAAgB1E,MAAMnhB,SAASqqB,gBAC/B,cAACmzB,GAAA,EAAD,UACI,cAAC1G,GAAD,MAGJ,cAACkG,GAAD,I,wDCyCOS,GArDO,WAClB,MAA4B11B,oBAAS,GAArC,mBAAO21B,EAAP,KAAeC,EAAf,KACA,EAAwC51B,oBAAS,GAAjD,mBAAO61B,EAAP,KAAqBC,EAArB,KACM5xD,EAAQuvB,cACRswB,EAAc,WAChB6R,GAAU,IAERG,EACF,cAAC,KAAD,CAAYhrB,QAASgZ,EAAanwB,MAAO,CAAEjkB,QAAS,GAApD,SACI,cAAC,KAAD,CAAYikB,MAAO,CAAE7rB,MAAO0F,IAAW1F,MAAMjC,WAcrD,OAVAq4B,qBAAU,WAIN,OAHA3L,OAAOuS,iBAAiB,UAAU,kBAAM+wB,GAAgB,MACxDtjC,OAAOuS,iBAAiB,WAAW,kBAAM+wB,GAAgB,MAElD,WACHtjC,OAAOkT,oBAAoB,UAAU,eACrClT,OAAOkT,oBAAoB,WAAW,kBAE3C,IAGC,qCACI,cAAC4lB,GAAA,EAAD,CACIpH,MAAO2R,IAAiBF,EACxBvR,QAASL,EACTlxB,QAAQ,mBACRmjC,iBAAkB,IAClB38B,OAAQ08B,KAEVF,GAAgBF,GACd,qBACI/hC,MAAO,CACHzmB,SAAU,QACV67B,OAAQ,EACRl5B,MAAO,OACPxL,OAAQ,GACRwD,gBAAiB5D,EAAM0B,QAAQ5C,QAAQgI,KACvC6/B,OAAQ,IACR9iC,MAAO0F,IAAW1F,MAAMjC,MACxB6kC,UAAW,SACXvnC,WAAYc,EAAM4F,WAAWS,MAAMnH,WACnC2J,SAAU,IAXlB,yB,8BCuCDkpD,GAlEH,WACR,IAAM7L,EAAgBhmB,eA4CtB,OApBAjG,qBAAU,WAeN,OAFAntB,SAAS0vB,KAAKqE,iBAAiB,kBAAkB,kBAZ7B,WAChB,IAAM8P,EAA0BC,eAE5BD,IACAuV,EAAc3V,gBAAgBI,GAEzBA,EAAwBnkC,MAAMixB,SAASif,KAAkBsV,WAAW3hC,aACrE/B,OAAOvhB,SAASklD,UAK2BC,MAEhD,WACHplD,SAAS0vB,KAAKgF,oBAAoB,kBAAkB,kBAEzD,IAGC,mCA3CoB,WACpB,IAAI2wB,EACAC,EAEAC,EADAC,EAAK/jC,UAAUC,UAYnB,OAVI8jC,EAAGC,MAAM,UAAYD,EAAGC,MAAM,cAC9BJ,EAAS,MACTE,EAAUC,EAAG9a,QAAQ,QAGV,QAAX2a,GAAoBE,GAAW,IAE/BD,EAAYE,EAAGE,OAAOH,EAAU,EAAG,GAAGlhC,QAAQ,IAAK,QAGxC,QAAXghC,GAAoBM,OAAOL,IAAc,IA6BxCM,GACG,qCACI,cAAC,GAAD,KACErkC,OAAuBI,MAAsB,cAACkkC,GAAA,EAAD,IAC/C,cAACjoB,EAAA,EAAD,UACI,cAAC9K,EAAA,EAAD,UACI,cAACtE,GAAA,EAAD,UACI,cAACg2B,GAAD,aAMhB,cAACzvB,GAAA,EAAD,CAAWx6B,KAAK,8CC7DZ44C,QACa,cAA7B3xB,OAAOvhB,SAAS6lD,UAEiB,UAA7BtkC,OAAOvhB,SAAS6lD,UAEhBtkC,OAAOvhB,SAAS6lD,SAASL,MAAM,2D,cCDxBM,GAZM,SAAC,GAClB,OADuC,EAAnB7S,KAEhB,qBACI3mC,GAAG,mBACHqW,MAAO,CAAEzmB,SAAU,QAAS67B,OAAQ,EAAG6B,OAAQ,IAAQ/6B,MAAO,QAC9DsqB,UAAU,qBAGd,8BCRO,SAAS48B,KACpB,IAAM5M,EAAgBhmB,eAUtB,OARAjG,qBAAU,WAGN,OAFAntB,SAAS0vB,KAAKqE,iBAAiB,kBAAkB,kBAAMqlB,EAAc5V,oBAE9D,WACHxjC,SAAS0vB,KAAKgF,oBAAoB,kBAAkB,kBAEzD,CAAC0kB,EAAc7V,qBAEX,cAAC,GAAD,CAAc2P,KAAMkG,EAAc7V,qBCDtC,SAAS0iB,GAA2BzjC,GACvC,IAAQ7jB,EAAmF6jB,EAAnF7jB,QAASunD,EAA0E1jC,EAA1E0jC,kBAAjB,EAA2F1jC,EAAvD2jC,4BAApC,MAA2D,EAA3D,IAA2F3jC,EAA7B4jC,qBAE9D,OAAOF,EAAoBvnD,GAAWwnD,QAFtC,MAAqF,EAArF,IAEqF,E,aCF1EvT,OAAMyT,MAAK,SAA4B7jC,GAClD,IAAQ6G,EAAa7G,EAAb6G,SACFn2B,EAAQuvB,cAERrkB,EAAKumB,aAAczxB,EAAMiL,YAAYmoD,KAAK,OAC1CjoD,EAAKsmB,aAAczxB,EAAMiL,YAAYmoD,KAAK,OAC1ChoD,EAAKqmB,aAAczxB,EAAMiL,YAAYmoD,KAAK,OAC1C/nD,EAAKomB,aAAczxB,EAAMiL,YAAYmoD,KAAK,OAG1CC,GAFK5hC,aAAczxB,EAAMiL,YAAYmoD,KAAK,OAEF,CAC1CloD,GAAI,CACAK,aAAcvL,EAAME,QAAQ,IAC5BuL,QAASzL,EAAME,QAAQ,IAE3BiL,GAAI,CACAI,aAAcvL,EAAME,QAAQ,IAC5BuL,QAASzL,EAAME,QAAQ,IAE3BkL,GAAI,CACAG,aAAcvL,EAAME,QAAQ,IAC5BuL,QAASzL,EAAME,QAAQ,IAE3BmL,GAAI,CACAE,aAAcvL,EAAME,QAAQ,IAC5BuL,QAASzL,EAAME,QAAQ,IAE3BoL,GAAI,CACAC,aAAcvL,EAAME,QAAQ,IAC5BuL,QAASzL,EAAME,QAAQ,MAkBzBozD,EAASC,GAAaF,EAdN,CAClBnoD,GAAIlL,EAAME,QAAQ,GAClBiL,GAAInL,EAAME,QAAQ,GAClBkL,GAAIpL,EAAME,QAAQ,GAClBmL,GAAIrL,EAAME,QAAQ,GAClBoL,GAAItL,EAAME,QAAQ,IAEQ,CAC1BgL,GAAIlL,EAAME,QAAQ,IAClBiL,GAAInL,EAAME,QAAQ,IAClBkL,GAAIpL,EAAME,QAAQ,IAClBmL,GAAIrL,EAAME,QAAQ,IAClBoL,GAAItL,EAAME,QAAQ,MAkBhBszD,EAASD,GAAaD,EAdN,CAClBpoD,GAAIlL,EAAME,QAAQ,GAClBiL,GAAInL,EAAME,QAAQ,GAClBkL,GAAIpL,EAAME,QAAQ,GAClBmL,GAAIrL,EAAME,QAAQ,GAClBoL,GAAItL,EAAME,QAAQ,IAEQ,CAC1BgL,GAAIlL,EAAME,QAAQ,GAClBiL,GAAInL,EAAME,QAAQ,GAClBkL,GAAIpL,EAAME,QAAQ,GAClBmL,GAAIrL,EAAME,QAAQ,GAClBoL,GAAItL,EAAME,QAAQ,KAItB,OAAIgL,EAEI,cAACilC,GAAA,EAAkBjV,SAAnB,CACI1uB,MAAO,CACH,EAAK6mD,EAAOnoD,GACZ,EAAKooD,EAAOpoD,GACZ,EAAKsoD,EAAOtoD,IAJpB,SAOKirB,IAIThrB,EAEI,cAACglC,GAAA,EAAkBjV,SAAnB,CACI1uB,MAAO,CACH,EAAK6mD,EAAOloD,GACZ,EAAKmoD,EAAOnoD,GACZ,EAAKqoD,EAAOroD,IAJpB,SAOKgrB,IAIT/qB,EAEI,cAAC+kC,GAAA,EAAkBjV,SAAnB,CACI1uB,MAAO,CACH,EAAK6mD,EAAOjoD,GACZ,EAAKkoD,EAAOloD,GACZ,EAAKooD,EAAOpoD,IAJpB,SAOK+qB,IAIT9qB,EAEI,cAAC8kC,GAAA,EAAkBjV,SAAnB,CACI1uB,MAAO,CACH,EAAK6mD,EAAOhoD,GACZ,EAAKioD,EAAOjoD,GACZ,EAAKmoD,EAAOnoD,IAJpB,SAOK8qB,IAML,cAACga,GAAA,EAAkBjV,SAAnB,CACI1uB,MAAO,CACH,EAAK6mD,EAAO/nD,GACZ,EAAKgoD,EAAOhoD,GACZ,EAAKkoD,EAAOloD,IAJpB,SAOK6qB,OAkBjB,SAASo9B,GACLE,EACAhoD,EACAioD,GAEA,MAAO,CACHxoD,GAAI,CACAK,aAAcooD,GACV,CACIX,kBAAmBS,EAAcvoD,GAAGK,aACpCE,QAASgoD,EAAcvoD,GAAGO,SAE9BioD,EAAgBxoD,IAEpBO,QAASA,EAAQP,IAErBC,GAAI,CACAI,aAAcooD,GACV,CACIX,kBAAmBS,EAActoD,GAAGI,aACpCE,QAASgoD,EAActoD,GAAGM,SAE9BioD,EAAgBvoD,IAEpBM,QAASA,EAAQN,IAErBC,GAAI,CACAG,aAAcooD,GACV,CACIX,kBAAmBS,EAAcroD,GAAGG,aACpCE,QAASgoD,EAAcroD,GAAGK,SAE9BioD,EAAgBtoD,IAEpBK,QAASA,EAAQL,IAErBC,GAAI,CACAE,aAAcooD,GACV,CACIX,kBAAmBS,EAAcpoD,GAAGE,aACpCE,QAASgoD,EAAcpoD,GAAGI,SAE9BioD,EAAgBroD,IAEpBI,QAASA,EAAQJ,IAErBC,GAAI,CACAC,aAAcooD,GACV,CACIX,kBAAmBS,EAAcnoD,GAAGC,aACpCE,QAASgoD,EAAcnoD,GAAGG,SAE9BioD,EAAgBpoD,IAEpBG,QAASA,EAAQH,KAK7B,SAASqoD,GAAyBrkC,GAA+D,IAAtBokC,EAAqB,uDAAH,EACnFE,EAAyBb,GAA2BzjC,GAE1D,OAAOskC,EAAyBF,EAAkBA,EAAkBE,E,ICjM7D9xB,GAEA+xB,G,8BAZLC,GAAiB,CACnBC,OAAQ,0CACRC,WAAY,8BACZC,UAAW,cACXC,cAAe,0BACfC,kBAAmB,eACnBC,MAAO,4CACPC,cAAe,gBAONC,GAAqB,WAAO,IAAD,EAC/BT,KACDA,GAAcU,aAAcT,KAGhChyB,GAAY0yB,aAAaX,IAGzB,IAAM3gD,EAAI,UAAGpG,SAASywB,eAAerS,IAAaE,qBAAxC,aAAG,EAAoD5e,WAC/Cq2B,IAAdf,SAAoCe,IAAT3vB,GAC3B6uB,aAAUD,GAAW5uB,GAIzBob,OAAOijB,UAAYjjB,OAAOijB,WAAa,IAGrC6W,GACF,cAAClkB,EAAA,EAAD,UACI,cAAC,GAAD,UACI,cAACkc,GAAA,EAAD,UACI,cAAC,KAAD,UACI,eAAC5P,GAAA,EAAD,CACIE,oBAAqB,SAACjiC,IAClB,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAajC,MAAMixB,SAASif,KAAkBsV,WAAW3hC,cACzDikC,MAHZ,WAOMjmC,OAAuBI,MAAsB,cAACqkC,GAAD,IAC/C,cAAC,IAAD,CAAe2B,SAAUznD,IAASC,SAAlC,SACI,cAAC,GAAD,iBAS5BynD,IAASjJ,OAAOrD,GAAKt7C,SAASywB,eAAe,SLyDrC,kBAAmBhP,WACnBA,UAAUomC,cAAcC,MACnB/5B,MAAK,SAACg6B,GACHA,EAAaC,gBAEhB95B,OAAM,SAAC9zB,GACJ4nB,QAAQ5nB,MAAMA,EAAMynB,a,mEMvIxBomC,E,6JAAAA,O,eAAAA,I,qCAAAA,I,iDAAAA,I,yBAAAA,I,uDAAAA,I,mDAAAA,I,2CAAAA,I,uCAAAA,I,mDAAAA,I,sCAAAA,I,wCAAAA,I,8CAAAA,I,kDAAAA,I,sDAAAA,I,wDAAAA,I,0DAAAA,I,gDAAAA,I,wCAAAA,I,oDAAAA,I,kDAAAA,I,oEAAAA,I,4DAAAA,I,gDAAAA,I,kDAAAA,I,4CAAAA,I,oDAAAA,I,wDAAAA,I,gEAAAA,I,wDAAAA,I,sDAAAA,I,wDAAAA,I,sDAAAA,I,4DAAAA,I,4EAAAA,I,oDAAAA,I,sDAAAA,I,0DAAAA,I,qDAAAA,M,gCCmBN39B,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CACFgB,SAAU,WACV09B,OAAQ,EACRz9B,QAAS,OACTC,WAAY,SACZ/E,OAAO,aAAD,OAAepE,EAAM0B,QAAQuF,KAAKF,OACxC6E,MAAO,OACPi5B,aAAc7kC,EAAME,QAAQ,GAC5B2D,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,UAC1B6E,gBAAiB5D,EAAMoC,SAASe,aAEpCkE,KAAM,CACFwoB,KAAM,EACN3mB,QAAS,cACTH,OAAQ,SACRisD,gBAAiB,EACjBC,gBAAiB,WACjBn+B,SAAU,SACVqsB,aAAc,YAElB+R,iBAAkB,CACdtxD,gBAAiB2F,IAAW1F,MAAMjC,YAc/B,SAASuzD,EAAiB7lC,GACrC,IAAQ8lC,EAAyD9lC,EAAzD8lC,mBAAoBnjC,EAAqC3C,EAArC2C,aAAc5qB,EAAuBioB,EAAvBjoB,KAA1C,EAAiEioB,EAAjBwrB,eAAhD,MAA0D,GAA1D,EACMxkB,EAAUc,IACVp3B,EAAQuvB,cACR0qB,EAAsB9e,cAEtBk6B,EAAwBC,YAAyB,CAAE7gB,MAAO,MAC1D8gB,EAAmB/gB,YAA0B,CAAEC,MAAO,MAEtD+gB,EAA0C,CAC5C,CACI1uB,MAAO,sBACPD,QAAS,WACL5U,EAAawjC,mBAAqBV,EAAiBW,iBAC/CtkB,YAAmB,sCACvBvc,YACIolB,EAAoB5nB,SACpB4nB,EAAoB/kB,MAAM+D,qBAAqBlH,cAC/CkoB,EAAoB/kB,MAAM2D,qBAAqB9G,cAC/CE,EAAaC,eACbD,EAAa0jC,SAM7B,OACI,cAACC,EAAA,EAAD,CAAcC,QAAQ,EAAtB,SACI,sBAAK3/B,UAAWuC,kBAAKnC,EAAQruB,KAAMotD,EAAuBE,GAA1D,eAC4B1yB,IAAvBuyB,GACG,qCACI,cAACzgB,EAAA,EAAD,2BAAmBygB,GAAnB,IAAuCxgB,YAAa50C,EAAM0B,QAAQ3C,UAAU8H,QAC5E,cAACwoB,EAAA,EAAD,OAGR,sBACI6G,UAAWI,EAAQjvB,KACnBw/B,QAASvX,EAAMuX,QACfnX,MAAO,CAAE1mB,OAAQsmB,EAAMuX,QAAU,UAAY,QAHjD,UAKKvX,EAAM5kB,OAAS,cAAC87B,EAAA,EAAD,CAAY9W,MAAO,CAAEvwB,WAAY,QAAjC,SAA4CmwB,EAAM5kB,QAClE,cAAC87B,EAAA,EAAD,CAAY9W,MAAO,CAAEpmB,WAAY,KAAjC,SAAyCjC,OAE5CioB,EAAM6G,SACP,cAAC9G,EAAA,EAAD,IACA,uBAAMK,MAAO,CAAExmB,QAAS,OAAQi9B,cAAe,SAAUh9B,WAAY,YAArE,UACI,cAACs2C,EAAA,EAAD,CACI3E,QAAO,sBAAMA,GAAY0a,GACzBza,gBAAiB,CACbvrB,KAAM,QACN8G,QAAS,CACLruB,KAAMquB,EAAQ4+B,qBAI1B,cAAC1uB,EAAA,EAAD,CAAYl8B,QAAQ,UAAUwuC,MAAM,QAAQppB,MAAO,CAAE7rB,MAAO7D,EAAM0B,QAAQuF,KAAKF,OAA/E,SACK+uD,YAAuB7jC,EAAa+V,sB,oBC5GvD5Q,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT5uB,KAAM,CACF9I,WAAY,aAWT,SAAS42D,EAAgBzmC,GACpC,IAAQ+O,EAAsB/O,EAAtB+O,YAAanrB,EAASoc,EAATpc,KACfojB,EAAUc,IAEV4+B,EAAiB,UAAMloD,IAAYO,QAAlB,YAA6B6E,GAEpD,OACI,cAAC+8B,EAAA,EAAD,CAAY/Z,UAAWI,EAAQruB,KAAM8nC,GAAIimB,EAAmBnvB,QAASvX,EAAMuX,QAASwO,UAAU,QAA9F,SACKhX,I,aCkGE43B,EA3GW,SAAChkC,GACvB,MAA4BkJ,cAApBjG,EAAR,EAAQA,MAAO7C,EAAf,EAAeA,SAEf4H,qBAAU,WACNxG,YACIpB,EACAJ,EAAaikC,WACbhhC,EAAMgE,kBAAkBlF,2BAE7B,IAEH,MAA4B8H,mBAAiB,WAA7C,mBAAO2F,EAAP,KAAe00B,EAAf,KAeA,OAbAl8B,qBAAU,WACS,aAAXwH,GAAoC,aAAXA,GACzB1O,YACIV,EACAJ,EAAaC,eACbD,EAAa0jC,KAEbzgC,EAAM+D,qBAAqBlH,cAC3BmD,EAAM2D,qBAAqB9G,iBAGpC,CAAC0P,IAGA,cAAC0zB,EAAD,CACIC,mBAAoB,CAChBvgB,SAAU5iB,EAAamkC,SAAb,aACVrmB,GAAG,GAAD,OAAKjiC,IAAYO,QAAjB,YAA4B4jB,EAAaikC,aAE/CjkC,aAAcA,EACd5qB,KACe,aAAXo6B,GAAyBxP,EAAaoB,KAClC,oDACiB,IACb,cAAC0iC,EAAD,CACI13B,YAAapM,EAAamkC,SAAb,kBACbljD,KAAM+e,EAAaikC,WACnBrvB,QAAS,kBAAM9R,YAAmB1C,MAL1C,uBASW,aAAXoP,GAAyBxP,EAAaoB,KACtC,oDACiB,IACb,cAAC0iC,EAAD,CACI13B,YAAapM,EAAamkC,SAAb,kBACbljD,KAAM+e,EAAaikC,WACnBrvB,QAAS,kBAAM9R,YAAmB1C,MAL1C,uBAUA,qCACI,cAAC0jC,EAAD,CACI13B,YAAapM,EAAamkC,SAAb,kBACbljD,KAAM+e,EAAaikC,WACnBrvB,QAAS,kBAAM9R,YAAmB1C,MACnC,IALP,mCAURyoB,QACe,YAAXrZ,GAAyBxP,EAAaoB,KAmChC,GAlCA,CACI,CACIyT,MAAO,SACPD,QAAS,WACLsvB,EAAU,YACV/kB,YAAmB,sCACnBilB,IACyBpkC,EAAaikC,YACjCr7B,MAAK,kBACF9G,YACI1B,EACAJ,EAAaikC,WACbhhC,EAAMgE,kBAAkBlF,8BAK5C,CACI8S,MAAO,SACPD,QAAS,WACLsvB,EAAU,YACV/kB,YAAmB,sCACnBilB,IAC0BpkC,EAAaikC,YAClCr7B,MAAK,kBACF9G,YACI1B,EACAJ,EAAaikC,WACbhhC,EAAMgE,kBAAkBlF,kCClFvDsiC,EAvBmB,SAACrkC,GAC/B,IAAQI,EAAa8I,cAAb9I,SACR,OACI,cAAC8iC,EAAD,CACIC,mBAAoB,CAChBvgB,SAAU5iB,EAAamkC,SAAb,aACVrmB,GAAG,GAAD,OAAKjiC,IAAYO,QAAjB,YAA4B4jB,EAAaikC,aAE/CjkC,aAAcA,EACd5qB,KACI,qCACI,cAAC0uD,EAAD,CACI13B,YAAapM,EAAamkC,SAAb,kBACbljD,KAAM+e,EAAaikC,WACnBrvB,QAAS,kBAAM9R,YAAmB1C,MACnC,IALP,yC,QCXD,SAASkkC,EAAuBtkC,GAC3C,IAAM+iB,EAAUC,cACR5iB,EAAa8I,cAAb9I,SAER,OACI,cAAC8iC,EAAD,CACIljC,aAAcA,EACdvnB,MAAOunB,EAAavnB,MACpBrD,KAAM4qB,EAAasmB,QACnB1R,QAAS,WACLmO,EAAQpkB,KAAR,yCAA+CqB,EAAaukC,WAC5DzhC,YAAmB1C,MCVpB,SAASokC,EAA0BxkC,GAC9C,OAAQA,EAAawjC,kBACjB,KAAKV,EAAiBW,gBAClB,OAAO,cAAC,EAAD,eAAuBzjC,IAClC,KAAK8iC,EAAiB2B,sBAClB,OAAO,cAAC,EAAD,eAA+BzkC,IAC1C,KAAK8iC,EAAiB4B,qBACtB,KAAK5B,EAAiB6B,iBACtB,KAAK7B,EAAiB8B,uBACtB,KAAK9B,EAAiB+B,sBACtB,KAAK/B,EAAiBgC,+BACtB,KAAKhC,EAAiBiC,2BACtB,KAAKjC,EAAiBkC,qBACtB,KAAKlC,EAAiBmC,sBACtB,KAAKnC,EAAiBoC,mBACtB,KAAKpC,EAAiBqC,uBACtB,KAAKrC,EAAiBsC,yBACtB,KAAKtC,EAAiBuC,6BACtB,KAAKvC,EAAiBwC,yBACtB,KAAKxC,EAAiByC,wBACtB,KAAKzC,EAAiB0C,yBACtB,KAAK1C,EAAiB2C,wBACtB,KAAK3C,EAAiB4C,2BACtB,KAAK5C,EAAiB6C,mCACtB,KAAK7C,EAAiB8C,uBACtB,KAAK9C,EAAiB+C,0BACtB,KAAK/C,EAAiBgD,uBAClB,OAAO,cAACxB,EAAD,eAA4BtkC,IACvC,KAAK8iC,EAAiBiD,UACtB,KAAKjD,EAAiBkD,yBACtB,KAAKlD,EAAiBmD,uBACtB,KAAKnD,EAAiBoD,mBACtB,KAAKpD,EAAiBqD,iBACtB,KAAKrD,EAAiBsD,uBACtB,KAAKtD,EAAiBuD,gBACtB,KAAKvD,EAAiBwD,iBACtB,KAAKxD,EAAiByD,oBACtB,KAAKzD,EAAiB0D,sBACtB,KAAK1D,EAAiB2D,wBACtB,KAAK3D,EAAiB4D,yBACtB,KAAK5D,EAAiB6D,0BAEtB,QACI,OAAO,cAACzD,EAAD,CAAkBljC,aAAcA,EAAc5qB,KAAM4qB,EAAasmB,W,+CC/BrE,SAASgK,EAAT,GAAmE,IAAD,IAAlCC,sBAAkC,SAC7E,EAA4BrnB,cAApBjG,EAAR,EAAQA,MAAO7C,EAAf,EAAeA,SACTryB,EAAgBuvB,cAYtB,OAVA0K,qBAAU,WACNnH,YACIT,EACA6C,EAAM2D,qBAAqB9G,cAC3BmD,EAAM2D,qBAAqBsP,gBAC7BtN,MAAK,WACHxG,YAAiChC,EAAU6C,EAAM2D,qBAAqBE,YAE3E,IAGC,qCACyD,IAApD7D,EAAM2D,qBAAqB9G,cAAc3B,QACc,IAApD8E,EAAM+D,qBAAqBlH,cAAc3B,QACrC,cAACoW,EAAA,EAAD,CAAY9W,MAAO,CAAE7rB,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,WAAauL,QAAQ,KAAKwuC,MAAM,SAA/E,+CAKP5jB,EAAM2D,qBAAqB9G,cAAc3B,OAAS,GAC/C,cAAC,EAAD,CACI1lB,MAAM,oBACNqnB,cAAemD,EAAM2D,qBAAqB9G,cAC1C+G,WAAY5D,EAAM2D,qBAAqBC,WACvCsP,SAAU,kBACNtV,YACIT,EACA6C,EAAM2D,qBAAqB9G,cAC3BmD,EAAM2D,qBAAqBsP,iBAGnCxS,QAAST,EAAM2D,qBAAqBlD,QACpCkjC,YAAarW,OAAiB3f,EAAY,cAAC+X,EAAA,EAAD,MAIjD1lB,EAAM2D,qBAAqB9G,cAAc3B,OAAS,GAC/C8E,EAAM+D,qBAAqBlH,cAAc3B,OAAS,GAAK,cAAC4qB,EAAA,EAAD,CAAkBvG,MAAM,MAElFvf,EAAM+D,qBAAqBlH,cAAc3B,OAAS,GAC/C,cAAC,EAAD,CACI1lB,MAAM,sBACNqnB,cAAemD,EAAM+D,qBAAqBlH,cAC1C+G,WAAY5D,EAAM+D,qBAAqBH,WACvCsP,SAAU,kBACNvV,YACIR,EACA6C,EAAM+D,qBAAqBlH,cAC3BmD,EAAM+D,qBAAqBkP,iBAGnCxS,QAAST,EAAM+D,qBAAqBtD,QACpCkjC,YACIrW,GAAkBttB,EAAM2D,qBAAqB9G,cAAc3B,OAAS,OAAIyS,EACpE,cAAC+X,EAAA,EAAD,SAkB5B,IAAMke,EAAuB,SAACxpC,GAC1B,IAAQ5kB,EAAqE4kB,EAArE5kB,MAAOqnB,EAA8DzC,EAA9DyC,cAAe+G,EAA+CxJ,EAA/CwJ,WAAYsP,EAAmC9Y,EAAnC8Y,SAAUzS,EAAyBrG,EAAzBqG,QAASkjC,EAAgBvpC,EAAhBupC,YACvD74D,EAAgBuvB,cAEtB,OACI,qCACI,sBAAKG,MAAO,CAAExmB,QAAS,OAAQC,WAAY,SAAUC,eAAgB,gBAAiBy8C,cAAe,GAArG,UACI,cAACrf,EAAA,EAAD,CAAY9W,MAAO,CAAE7rB,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,WAAauL,QAAQ,KAApE,SACKI,IAEJmuD,KAEJ9mC,EAAcoB,KAAI,SAAClB,GAAD,OACf,cAACwkC,EAAD,eAA+BxkC,QAEjC6G,GACE,qBAAKpJ,MAAO,CAAExmB,QAAS,OAAQE,eAAgB,UAA/C,SACI,cAAC2vD,EAAA,EAAD,CAAgBzuD,QAAQ,mBAAmBklB,KAAK,QAAQqX,QAASuB,EAAU4oB,UAAWr7B,EAAtF,8B,oMCpGPqjC,EAAqB,KA6PnBC,IA5IA,SAAC,GAgBD,IAfX9iC,EAeU,EAfVA,SACA+iC,EAcU,EAdVA,eACAC,EAaU,EAbVA,gBACAnX,EAYU,EAZVA,OACAnC,EAWU,EAXVA,YACAuF,EAUU,EAVVA,QAUU,IATVjB,qBASU,MATM,cASN,EARViV,EAQU,EARVA,WAQU,IAPVC,6BAOU,MAPc,GAOd,OANVjlB,OAMU,EALVklB,eAKU,SAJV9gB,EAIU,EAJVA,OACAjS,EAGU,EAHVA,SAGU,KAFV36B,MAEU,EADV2tD,sBACU,MADM,SACN,EACJC,EAAOz/B,iBAAuB,MACpC,EAAgFmE,cAAzD1C,GAAvB,EAAQD,cAAR,EAAuBC,qBAAqBC,EAA5C,EAA4CA,mBAAoBE,EAAhE,EAAgEA,YAE1DrF,EAjIQ,SACd3E,EACA0nC,EACAC,EACA/yB,EACAgzB,GALc,OAOdhjC,aAAW,SAACv2B,GAAD,OACP62B,YAAa,CACT5uB,KAAM,CACFrE,gBAAiB5D,EAAMyE,OAAOmD,kBAC9BqB,SAAU,QACVytB,IAAK,EACLoO,OAAQ,EACRF,MAAO,EACPhO,KAAM,EACN1tB,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBu9B,OAAQqyB,EAAa,GAEzBS,OAAQ,CACJxwD,SAAU,WACVs9B,SAAU5U,IAAa4U,EAAW,IAAMA,GAAsB,IAC9D36B,MAAO,OACP06B,UAAW,SACXozB,UAAW,OACX7X,UAAW,sBACX8X,SAAU,MACVC,UAAW,gBACXh2D,gBAAiB5D,EAAM0B,QAAQuC,WAAWmD,MAC1CvD,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,UAC1BsN,UACsB,WAAlBktD,EAAA,wBACuBv5D,EAAM0B,QAAQuF,KAAKJ,KAD1C,4BACkE7G,EAAM0B,QAAQuF,KAAKJ,MAC/E,OACVzC,OAA0B,WAAlBm1D,EAA6B,OAA7B,oBAAmDv5D,EAAM0B,QAAQuF,KAAKJ,MAC9E0E,aAAcvL,EAAMyE,OAAOO,eAC3ByG,QAASkmB,EAAW3xB,EAAME,QAAQ,GAAKF,EAAME,QAAQ,GACrD6I,OAAQ4oB,EAAW3xB,EAAME,QAAQ,GAAKF,EAAME,QAAQ,GACpDgJ,QAAS,OACTi9B,cAAe,UAEnBhQ,SAAU,GACV0jC,aAAc,CACVt0D,QAAS+zD,EAAS,GAAM,EACxBrwD,SAAU,WACVwC,QAASzL,EAAME,QAAQ,GACvB0kC,MAAO,OACPlO,IAAK,OACLv3B,WAAY,OACZ0E,MAAO7D,EAAMoC,SAASf,WACtBuC,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpCzC,OAAQ,OACRmH,aAAcvL,EAAMyE,OAAOM,gBAC3BiE,OAAQ,UACRE,QAAS,OACTG,WAAYrJ,EAAMyE,OAAOE,eAAiB3E,EAAMyE,OAAOkB,aACvD,UAAW,CACP/B,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQuF,KAAKJ,OAGlCizD,gBAAiB,CACbl2D,gBAAiBy1D,GAAgDr5D,EAAM0B,QAAQ5C,QAAQ+H,KACvFhD,MAAO7D,EAAM0B,QAAQuF,KAAKJ,KAC1B0E,aAAcvL,EAAMyE,OAAOQ,eAC3BwG,QAAS4tD,EAAwB,EAAI1nC,EAAW3xB,EAAME,QAAQ,KAAOF,EAAME,QAAQ,GACnF2vB,KAAM,EACN6pC,UAAW,QAEfK,eAAe,aACX9U,UAAWtzB,EAAW3xB,EAAME,QAAQ,GAAKF,EAAME,QAAQ,GACvD2vB,KAAM,EACN3mB,QAAS,OACTE,eAAgB,UACfpJ,EAAMiL,YAAYymB,KAAK,KAAO,CAC3ByU,cAAe,WAGvBqS,OAAQ,CACJ30C,MAAO7D,EAAM0B,QAAQuF,KAAKJ,KAC1Bg+B,aAAclT,EAAW3xB,EAAME,QAAQ,GAAKF,EAAME,QAAQ,IAE9D4mC,MAAO,CACHjjC,MAAO0F,IAAW1F,MAAMjC,YA4CpBw1B,CADC5F,cACmB6nC,EAAuBC,EAAQ/yB,EAAUgzB,EAA7DniC,GAEhBqpB,YAAgB+Y,GAAM,WACdF,IAEAzZ,EACAA,IACOuF,GACPA,GAAQ,OAIhB,IAAM4U,EAAgB,WACdV,IAEAzZ,EACAA,IACOuF,GACPA,GAAQ,KAIhBnrB,qBAAU,WACF0B,EAAY8B,SAASpC,IAAYqC,WAEjCskB,GACAxmB,EAAoBH,IAAY49B,SAGrB,IAAXjX,GACAvmB,EAAmBJ,IAAY49B,WAEpC,CAACjX,IAEJ,IAAMiY,EAAe,CACjB5wD,WAAW,4BACX9D,QAAS,EACT20D,eAAgB,aAGdC,EAAmB,CACrBC,SAAU,GACVC,QAAS1+B,EAAY8B,SAASpC,IAAYqC,SACpC,CAAEn4B,QAAS,EAAG8D,WAAY,wBAC1B,CAAE9D,QAAS,EAAG8D,WAAY,uBAAwB6wD,eAAgB,aACxEI,QAAS,CAAE/0D,QAAS,EAAG20D,eAAgB,QAAS7wD,WAAY,yBAC5DkxD,OAAQ,GACRC,UAAW,IAGf,OACI,cAAC,IAAD,CAAQjlB,UAAU,mBAAlB,SACI,cAAC,IAAD,CAAYklB,GAAIzY,EAAQ+G,QAAS,CAAE2R,MAAO,IAAKC,KAAM,KAAOC,eAAa,EAAzE,SACK,SAAC1lC,GAAD,OACG,mCACKgkC,EACG,qBACIxpC,MAAK,2BACEuqC,GACAE,EAAiBjlC,IAExBgB,UAAWI,EAAQruB,KALvB,SAOI,sBAAKk9B,IAAKq0B,EAAMtjC,UAAWI,EAAQmjC,OAAnC,UACI,wBAAQvjC,UAAWI,EAAQujC,aAAchzB,QAASmzB,EAAe1yD,SAAUgyD,EAA3E,SACI,cAAC,IAAD,CACI5pC,MAAO,CACHtvB,OAAQ,GACRwL,MAAO,QAInB,cAAC,IAAD,CAAY8jB,MAAO,CAAE+W,UAAW,UAAYn8B,QAAQ,KAApD,SACKkuC,IAEL,cAAC,IAAD,IACA,sBAAMtiB,UAAWI,EAAQwjC,gBAAzB,SAA2C3jC,IAC3C,sBAAMD,UAAWI,EAAQyjC,eAAzB,SAA0Cb,SAIlD,qBACIxpC,MAAK,2BACEuqC,GACAE,EAAiBjlC,IAExBgB,UAAWI,EAAQruB,KALvB,SAOI,sBAAKk9B,IAAKq0B,EAAMtjC,UAAWI,EAAQmjC,OAAnC,UACI,wBAAQvjC,UAAWI,EAAQujC,aAAchzB,QAASmzB,EAAe1yD,SAAUgyD,EAA3E,SACI,cAAC,IAAD,CACI5pC,MAAO,CACHtvB,OAAQ,GACRwL,MAAO,QAIlButD,GACG,qCACI,sBAAMjjC,UAAWI,EAAQwjC,gBAAzB,SAA2CX,IAC3C,cAAC,IAAD,OAGR,sBAAMjjC,UAAWI,EAAQH,SAAzB,SAAoCA,IACpC,cAAC,IAAD,CAAQ3G,KAAM,IACb4pC,GACG,cAAC,IAAD,CAAc9uD,QAAS65C,EAAetd,QAASmzB,EAAe1yD,SAAUgyD,EAAxE,SACKF,kB,2rBC7OtC,SAAeyB,EAAtB,kC,4CAAO,WAAiC3nD,GAAjC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAMmO,KAAKz8B,IAAQzD,QAAQ0E,kBAAkBC,IAHvD,oF,sBAMA,SAAe4nD,EAAtB,kC,4CAAO,WAAmC5nD,GAAnC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAIUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQiF,iBAAiBN,IAJrD,oF,sBAOA,SAAe8nD,EAAtB,kC,4CAAO,WAAmC9nD,GAAnC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQgF,gBAAgBL,IAHpD,oF,sBAMA,SAAe+nD,EAAtB,kC,4CAAO,WAAoC/nD,GAApC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQiF,iBAAiBN,IAHrD,oF,sBAMA,SAAegoD,EAAtB,kC,4CAAO,WAAmChoD,GAAnC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAM6R,OAAOngC,IAAQzD,QAAQ8E,yBAAyBH,IAHhE,oF,sBAMA,SAAeioD,EAAtB,kC,4CAAO,WAA2BjoD,GAA3B,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQ4E,eAAeD,IAHnD,oF,sBAMA,SAAekoD,EAAtB,kC,4CAAO,WAAkCloD,GAAlC,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQ4E,eAAeD,IAAO8nB,OAAM,SAAC9zB,GAChE,OAAOA,KAJR,oF,sBAQA,SAAem0D,EAAtB,kC,4CAAO,WAA6BnoD,GAA7B,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAIUotB,IAAMy6B,IAAI/oD,IAAQzD,QAAQ+E,iBAAiBJ,IAJrD,oF,sBAOA,SAAeooD,EAAtB,kC,4CAAO,WAA4BpoD,GAA5B,SAAAwf,EAAA,6DACHue,YAAa/9B,GADV,SAGUotB,IAAM6R,OAAOngC,IAAQzD,QAAQmF,aAAaR,IAHpD,oF,sBAMA,SAAeqoD,EAAtB,kC,4CAAO,WAAkCn7B,GAAlC,eAAA1N,EAAA,sEACoB4N,IAAMmO,KAAKz8B,IAAQzD,QAAQoF,YAAaysB,EAAM,CACjEI,QAAS,CACL,eAAgB,oBAEpBsO,eAAgB,kBAAM,KALvB,cACGvN,EADH,yBAQIA,EAASnB,MARb,4C,sBAWA,SAAeo7B,EAAtB,kC,4CAAO,WAAyCC,GAAzC,mBAAA/oC,EAAA,6DACGuc,EAAgC,CAAC,IAAIlf,IAAe,WAAY0rC,IAEhEvsB,EAAmB3e,YAA8B0e,GAHpD,SAKoB3O,IAAM0J,IAAN,UAAah4B,IAAQzD,QAAQqF,wBAA7B,OAAsDs7B,IAL1E,cAKG3N,EALH,yBAOIA,EAASnB,MAPb,4C,sBAUA,SAAes7B,EAAtB,kC,4CAAO,WAAoCtL,GAApC,mBAAA19B,EAAA,6DACGuc,EAAgC,CAAC,IAAIlf,IAAe,WAAYqgC,IAEhElhB,EAAmB3e,YAA8B0e,GAHpD,SAKoB3O,IAAM0J,IAAN,UAAah4B,IAAQzD,QAAQsF,mBAA7B,OAAiDq7B,GAAoB,CACxFJ,eAAgB,kBAAM,KANvB,WAKGvN,EALH,QASUE,SAAW3R,IAAmB6rC,WATxC,oEAWQC,KAXR,IAYKC,gBAAiBt6B,EAASE,OAC1Bv6B,MAAOq6B,EAASnB,QAbrB,UAeQmB,EAASE,SAAW3R,IAAmBif,UAf/C,qEAiBQ6sB,KAjBR,IAkBKC,gBAAiBt6B,EAASE,OAC1Bv6B,MAAO,CACH40D,kBAAmB,GACnBntC,QAAS,OArBlB,4DA0BI4S,EAASnB,MA1Bb,IA2BCy7B,gBAAiBt6B,EAASE,UA3B3B,6C,sBA+BP,IAAMs6B,EAAkB,GAElBC,EAAyC,CAC3CC,UAAW,EACXC,WAAY,EACZC,aAAc,EACd5tD,QAAS,IAYN,SAAe6tD,EAAtB,kC,4CAAO,WAAoC7wB,GAApC,qCAAA7Y,EAAA,+DAOC6Y,EALA8wB,kBAFD,MAEc,GAFd,IAOC9wB,EAJAkwB,gBAHD,MAGYM,EAHZ,IAOCxwB,EAHA2wB,kBAJD,MAIc,EAJd,IAOC3wB,EAFA+wB,0BALD,SAMCC,EACAhxB,EADAgxB,YAGEttB,EAAc,CAChB,IAAIlf,IAAe,aAAcssC,GACjC,IAAItsC,IAAe,aAAcmsC,GACjC,IAAInsC,IAAe,WAAY0rC,GAC/B,IAAI1rC,IAAe,qBAAsBusC,IAGvCptB,EAAmB3e,YAA8B0e,GAhBpD,SAkBoB3O,IAAM0J,IAAN,UAA8Bh4B,IAAQzD,QAAQwE,mBAA9C,OAAkEm8B,GAAoB,CACzGqtB,YAAaA,IAnBd,WAkBGh7B,EAlBH,QAsBUE,SAAW3R,IAAmB6Q,GAtBxC,yCAsBmDq7B,GAtBnD,gCAwBIz6B,EAASnB,MAxBb,4C,sBA2BA,SAAeo8B,EAAtB,kC,4CAAO,WAA4BjxB,GAA5B,uCAAA7Y,EAAA,2DAOC6Y,EALA8wB,kBAFD,MAEc,GAFd,IAOC9wB,EAJAkwB,gBAHD,MAGYM,EAHZ,IAOCxwB,EAHA2wB,kBAJD,MAIc,EAJd,IAOC3wB,EAFA+wB,0BALD,SAMCC,EACAhxB,EADAgxB,YAGsB,IAAtBF,EAAWjsC,OATZ,yCASiC4rC,GATjC,cAWG/sB,EAAc,CAChB,IAAIlf,IAAe,aAAcssC,GACjC,IAAItsC,IAAe,aAAcmsC,GACjC,IAAInsC,IAAe,WAAY0rC,GAC/B,IAAI1rC,IAAe,qBAAsBusC,IAGvCptB,EAAmB3e,YAA8B0e,GAEjDne,EAAM9e,IAAQzD,QAAQyE,gBAAkBk8B,EApB3C,SAsBoB5O,IAAM0J,IAAqBlZ,EAAK,CACnDyrC,YAAaA,IAvBd,WAsBGh7B,EAtBH,QA0BUE,SAAW3R,IAAmB6Q,GA1BxC,0CA0BmDq7B,GA1BnD,iCA4BIz6B,EAASnB,MA5Bb,6C,sBA+BA,SAAeq8B,EAAtB,kC,4CAAO,WAAmClxB,GAAnC,qCAAA7Y,EAAA,+DAOC6Y,EALA8wB,kBAFD,MAEc,GAFd,IAOC9wB,EAJAkwB,gBAHD,MAGYM,EAHZ,IAOCxwB,EAHA2wB,kBAJD,MAIc,EAJd,IAOC3wB,EAFA+wB,0BALD,SAMCC,EACAhxB,EADAgxB,YAGEttB,EAAc,CAChB,IAAIlf,IAAe,aAAcssC,GACjC,IAAItsC,IAAe,aAAcmsC,GACjC,IAAInsC,IAAe,WAAY0rC,GAC/B,IAAI1rC,IAAe,SAAU,WAC7B,IAAIA,IAAe,qBAAsBusC,IAGvCptB,EAAmB3e,YAA8B0e,GAjBpD,SAmBoB3O,IAAM0J,IAAN,UAA8Bh4B,IAAQzD,QAAQuE,YAA9C,OAA2Do8B,GAAoB,CAClGqtB,YAAaA,IApBd,WAmBGh7B,EAnBH,QAuBUE,SAAW3R,IAAmB6Q,GAvBxC,yCAuBmDq7B,GAvBnD,gCAyBIz6B,EAASnB,MAzBb,4C,sBA4BA,SAAetsB,EAAtB,kC,4CAAO,WAA4B4oD,GAA5B,mBAAAhqC,EAAA,6DACGuc,EAAc,CAAC,IAAIlf,IAAe,WAAY2sC,IAE9CxtB,EAAmB3e,YAA8B0e,GAHpD,SAKoB3O,IAAM0J,IAAN,UAAah4B,IAAQzD,QAAQuF,cAA7B,OAA4Co7B,IALhE,cAKG3N,EALH,yBAOIA,EAASnB,MAPb,4C,sBAUA,SAAeu8B,EAAtB,sC,4CAAO,WAAgCT,EAAoBT,EAAkBvoD,GAAtE,mBAAAwf,EAAA,6DACGuc,EAAc,CAChB,IAAIlf,IAAe,aAAcmsC,GACjC,IAAInsC,IAAe,WAAY0rC,GAC/B,IAAI1rC,IAAe,OAAQ7c,IAGzBg8B,EAAmB3e,YAA8B0e,GAPpD,SASoB3O,IAAM0J,IAAN,UAAah4B,IAAQzD,QAAQwE,mBAA7B,OAAiDm8B,IATrE,cASG3N,EATH,yBAWIA,EAASnB,MAXb,4C,gJCzOMw8B,EAAiB,GAyIfC,IAvHM,SAAC,GAA0F,IAAxF1mC,EAAuF,EAAvFA,SAAU2mC,EAA6E,EAA7EA,aAA6E,IAA/DC,oBAA+D,MAAhD,MAAgD,MAAzCC,0BAAyC,MAApB,MAAoB,EACrGh9D,EAAgBuvB,cACtB,EAAwCuM,oBAAkB,GAA1D,mBAAOmhC,EAAP,KAAsBC,EAAtB,KACA,EAA4CphC,oBAAkB,GAA9D,mBAAOqhC,EAAP,KAAsBC,EAAtB,KACA,EAAgDthC,mBAAiB,GAAjE,mBAAOuhC,EAAP,KAAyBC,EAAzB,KACA,EAAwCxhC,mBAAiB,GAAzD,mBAAOgB,EAAP,KAAqBygC,EAArB,KACMC,EAAUzjC,iBAAuB,MACjCoL,EAAMpL,iBAAuB,MAC7BpI,EAAWH,cAEXisC,KAA6B,OAAZX,QAAY,IAAZA,OAAA,EAAAA,EAAcW,kBAAd,OAA+BX,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAcW,gBAC9DC,GAA0B,OAAZZ,QAAY,IAAZA,OAAA,EAAAA,EAAcY,aAAcZ,EAAaY,YAAc,EACrEC,KAA4B,OAAZb,QAAY,IAAZA,OAAA,EAAAA,EAAca,gBAAgBb,EAAaa,cAC3DC,GAA2B,OAAZd,QAAY,IAAZA,OAAA,EAAAA,EAAcc,cAAed,EAAac,aAAe,OACxE/5D,GAAoB,OAAZi5D,QAAY,IAAZA,OAAA,EAAAA,EAAcj5D,OAAQi5D,EAAaj5D,MAAQ0F,IAAW1F,MAAMnB,KACpEm7D,GAA6B,OAAZf,QAAY,IAAZA,OAAA,EAAAA,EAAce,gBAAiBf,EAAae,eAAiB,MAE9Ep5D,EAAkB,CACpB0xB,SAAU,CACN9sB,WAAYsoB,EAAW,OAAS3xB,EAAMyE,OAAOE,eAC7CvE,OAAQw9D,EACR9mC,SAAU2mC,EAAiB,SAAW9rC,GAAYC,YAAYqrC,EAAgB,OAAS,SACvFa,gBAAiB,SACjBx3B,UAAW,SACX1I,aAAyBg/B,GAE7BmB,KAAM,CACF10D,WAAYrJ,EAAMyE,OAAOE,eACzBsE,SAAU,WACV2C,MAAO,OACP+6B,OAAQ,EACR7B,OAAQ,EACRF,MAAO,EACPxkC,OAAQuxB,EAAW,IAAM,IACzB+wB,cAAe,OACfz+C,WAAY0tB,EAAQ,gCACW9tB,EADX,aAEE,OAAZi5D,QAAY,IAAZA,OAAA,EAAAA,EAAcE,oBAAqBF,EAAaE,mBAAqBA,EAF3D,2DAIWn5D,EAJX,YAIoBg6D,EAJpB,+BAKE,OAAZf,QAAY,IAAZA,OAAA,EAAAA,EAAcC,cAAeD,EAAaC,aAAeA,EAL/C,MAQxBvW,SAAU,CACN1vB,SAAU,OACV12B,OAAQ,OACR49D,YAAarsC,GAAYirC,EAAmC,KAAjBA,IAInD3iC,qBAAU,WACN,GAAKkL,EAAInL,QAAT,CAEA,IAAMiD,EAAiB,IAAIC,gBAAe,WAAO,IAAD,EAC5CqgC,EAAgB9K,OAAM,OAACttB,QAAD,IAACA,GAAD,UAACA,EAAKnL,eAAN,aAAC,EAAc8C,kBAIzC,OADAG,EAAeE,QAAQgI,EAAInL,SACpB,kBAAMiD,EAAeghC,iBAC7B,CAACP,IAEJzjC,qBAAU,WACN,GAAKujC,EAAQxjC,QAAb,CAEA,IAAMkkC,EAAqB,IAAIhhC,gBAAe,WAAO,IAAD,EAChDogC,EAAoB7K,OAAM,OAAC+K,QAAD,IAACA,GAAD,UAACA,EAASxjC,eAAV,aAAC,EAAkB8C,kBAIjD,OADAohC,EAAmB/gC,QAAQqgC,EAAQxjC,SAC5B,kBAAMkkC,EAAmBD,iBACjC,CAACP,IAEJzjC,qBAAU,WACN,GAAIujC,EAAS,CACT,IAAMW,EAAU,OAAGX,QAAH,IAAGA,OAAH,EAAGA,EAASxjC,QAE5B,GAAImkC,EAAY,CACZ,IAAMC,EAAqB,WACvBlB,GAAe,IAKnB,OAFAiB,EAAWt9B,iBAAiB,YAAau9B,GAElC,WACHD,EAAW38B,oBAAoB,YAAa48B,QAIzD,QAACZ,QAAD,IAACA,OAAD,EAACA,EAASxjC,UAEb,IAAMqkC,GAAYV,GAAiB7gC,EAAeugC,EAalD,OACI,qBACIl4B,IAAKq4B,EACL9tC,MAAOjrB,EAAO+hD,SACd3S,aAAc,kBAAMqpB,GAAe,IACnCppB,aAAc,kBAAMopB,GAAe,IACnCoB,aAAc,SAAClxD,GAAD,OAAOA,EAAEmxD,kBAL3B,SAOI,sBAAKp5B,IAAKA,EAAKzV,MAAOjrB,EAAO0xB,SAAUqoC,SAnBrB,SAACpxD,GACvB,IAEM03B,EACF13B,EAAE0yC,cAAchjB,aAAe1vB,EAAE0yC,cAAc2e,WAAarxD,EAAE0yC,cAAc5Z,aAH3D,GAMjBk3B,IADAt4B,IAaA,UACK3O,EACAkoC,IAAalB,IAAkBQ,GAAiB,qBAAKjuC,MAAOjrB,EAAOs5D,c,iCCxIpF,wEA8CanC,EAAiE,CAC1EK,UAAW,GACXyC,UAAW,GACXtO,SAjDJ,MAiDcvmC,EAAUmB,KACpB2zC,QAAS,IAGAC,EAA4E,CACrF9C,kBAAmB,GACnBntC,QAAS,K,6BCxDb,4BAiCe0X,IAvBc,SAAC,GAAmD,IAAjD1U,EAAgD,EAAhDA,SAAUjC,EAAsC,EAAtCA,MAAsC,IAA/BroB,YAA+B,MAAxB,UAAwB,EACtEqyB,EAASC,cAaf,OACI,mCACI,cAAC,IAAD,CAAQyZ,aAAc1jB,EAAOmX,QAbjB,WAChB,IAAI7F,EAAYtH,EAAOsH,UAEnBlQ,EACA,UAAG4I,EAAO0I,SAASE,SAAnB,qBAAwCtB,EAAUD,SAAlD,6BACiBC,EAAUuB,cAD3B,4BAEgBvB,EAAUG,aAE9B7S,OAAOvhB,SAAS2sC,KAAO5oB,GAKgCtB,KAAM,QAASmC,SAAUA,EAA5E,SACKtqB,Q,kKCSJ2xD,EAAqB,KAqJnB6F,IAnJM,SAAC,GAAgG,IAAD,MAA7Fn0D,EAA6F,EAA7FA,MAAOyrB,EAAsF,EAAtFA,SAAU2kB,EAA4E,EAA5EA,QAASnpB,EAAmE,EAAnEA,SAAUquB,EAAyD,EAAzDA,KAAME,EAAmD,EAAnDA,QAAmD,IAA1C9L,cAA0C,SAA1B0qB,EAA0B,EAA1BA,YACjFtF,EAAOz/B,iBAAuB,MACpC,EAAiEmE,cAAzD1C,EAAR,EAAQA,oBAAqBC,EAA7B,EAA6BA,mBAAoBE,EAAjD,EAAiDA,YAE3CojC,EAAkB,2BACjBD,GADiB,IAEpBl7D,gBAAiB2F,IAAW1F,MAAM2F,WAGtCi3C,YAAgB+Y,GAAM,WACdplB,GAEJ8L,OAGJjmB,qBAAU,WACF0B,EAAY8B,SAASpC,IAAYqC,WAEjCsiB,GACAxkB,EAAoBH,IAAY49B,SAGvB,IAATjZ,GACAvkB,EAAmBJ,IAAY49B,WAEpC,CAACjZ,IAEJ,IAAMv7C,EAAkB,CACpBwD,KAAK,2BACEsB,IAAW3B,mBADd,IAEAqB,SAAU,QACVytB,IAAK,EACLoO,OAAQ,EACRF,MAAO,EACPhO,KAAM,EACN1tB,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBu9B,OAAQqyB,EAAa,IAEzBS,OAAQ,CACJ71D,gBAAiBm7D,EAAmBn7D,gBACpCsF,QAAS,OACTi9B,cAAe,SACf16B,QAASszD,EAAmBtzD,QAAUszD,EAAmBtzD,QAAhD,UAA6DkmB,EAAW,GAAK,GAA7E,qBACTkwB,UAAW,sBACX8X,SAAU,MACVC,UAAW,gBACXtzB,UAAW,SACXozB,UAAW,OACX9tD,MAAK,UAAEmzD,EAAmBnzD,aAArB,QAA8B,OACnC26B,SAAQ,UAAEw4B,EAAmBx4B,gBAArB,QAAiC,IACzCh7B,aAAchC,IAAWgC,aACzBxC,QAAQ,UAAAg2D,EAAmBh2D,cAAnB,QAA6B4oB,GAAWpoB,IAAWrJ,QAAQ,GAAK,GAE5EwK,MAAO,CACHxB,QAAS,OACTE,eAAgB21D,EAAmBC,gBAC7BD,EAAmBC,gBACnBrtC,EACA,SACA,aACNk0B,cAAe,IAEnB1vB,SAAU,GACV2kB,QAAS,CACL5xC,QAAS,OACTk9B,IAAKzU,EAAW,GAAK,GACrBmG,WAAY,GACZ1uB,eAAgBuoB,EAAW,SAAW,WACtCstC,SAAU,OACVC,WAAY9qB,EAAS,SAAW,UAChCjO,cAAexU,EAAW,iBAAmB,QAI/CsoC,EAAe,CACjB5wD,WAAW,4BACX9D,QAAS,EACT20D,eAAgB,aAGdC,EAAmB,CACrBC,SAAU,GACVC,QAAS1+B,EAAY8B,SAASpC,IAAYqC,SACpC,CAAEn4B,QAAS,EAAG8D,WAAY,wBAC1B,CAAE9D,QAAS,EAAG8D,WAAY,uBAAwB6wD,eAAgB,aACxEI,QAAS,CAAE/0D,QAAS,EAAG20D,eAAgB,QAAS7wD,WAAY,yBAC5DkxD,OAAQ,GACRC,UAAW,IAGf,OACI,cAAC,IAAD,CAAQjlB,UAAU,mBAAlB,SACI,cAAC,IAAD,CAAYklB,GAAIza,EAAM+I,QAAS,CAAE2R,MAAO,IAAKC,KAAM,KAAOC,eAAa,EAAvE,SACK,SAAC1lC,GAAD,OACG,qBACIxF,MAAK,uCACEjrB,EAAOwD,MACPgyD,GACAE,EAAiBjlC,IAJ5B,SAOI,sBAAKxF,MAAOjrB,EAAOg1D,OAAQt0B,IAAKq0B,EAAhC,UACK9uD,GACG,qBAAKglB,MAAOjrB,EAAOiG,MAAnB,SACI,cAAC,IAAD,CAAYglB,MAAOnmB,IAAW3D,WAAW+E,QAAzC,SAAmDD,MAG3D,qBAAKglB,MAAOjrB,EAAO0xB,SAAnB,SAA8BA,IAC7B2kB,GACG,qBAAKprB,MAAOjrB,EAAOq2C,QAAnB,SACKA,EAAQ3nB,KAAI,SAACT,EAAG7O,GAAJ,kBACQgf,IAAjBnQ,EAAEysC,YAA6C,WAAjBzsC,EAAEysC,WAC5B,cAAC,IAAD,CAEI70D,QAAoB,YAAXooB,EAAEiB,KAAqB,UAAY,kBAC5CkT,QAAS,WACLnU,EAAEmU,WAENv/B,SAAUorB,EAAEprB,SACZqqB,SAAUA,EACVyhB,aAAczhB,EAAW,CAAE/lB,MAAO,QAAW,GARjD,SAUK8mB,EAAEoU,OAVP,wBAC0BjjB,IAY1B,cAAC,IAAD,CAEI61B,KAAI,UAAEhnB,EAAEgnB,YAAJ,QAAY,IAChBpvC,QAAoB,YAAXooB,EAAEiB,KAAqB,UAAY,kBAC5ChC,SAAUA,EAJd,SAMKe,EAAEoU,OANP,sBACwBjjB,qB,6BCtKpE,8DAGMuT,EAAY,SAAC7rB,GAAD,OACdgrB,aAAW,SAACv2B,GACR,OAAO62B,YAAa,CAChBuoC,iBAAkB,CACd7zD,aAAcA,SASf,SAAS+pD,IAA8C,IAArBhmC,EAAoB,uDAAJ,GAC7D,EAAwBA,EAAhBmlB,aAAR,MAAgB,IAAhB,EAEMC,EAAcxE,cAEd5Z,EAAUc,EAAUsd,EAAYD,GAAOlpC,aAA7B6rB,GAEhB,OAAOd,EAAQ8oC,mB,6BCvBnB,q0BAEMC,EAAc,SAACC,GACjB,OAAIC,MAASC,KAAKF,EAAM,QAAU,EACvB,eACAC,MAASC,KAAKF,EAAM,SAAS,GAAQ,EACtC,IAAN,OAAWC,MAASC,KAAKF,EAAM,SAA/B,MAEM,IAAN,OAAWC,MAASC,KAAKF,EAAM,UAA/B,OAIKG,EAAe,SAACH,GACzB,IAAMI,EAASnxC,UAAUoxC,SACnBtnB,EAAI,IAAItQ,KAAKu3B,GAEnB,OAAOM,EADa,IAAIC,KAAKC,eAAeJ,GAAQK,QACjC1nB,IAGV2nB,EAAkB,WAE3B,IAAMC,EAAeJ,KAAKC,iBAAiBI,kBAAkBC,SAC7D,GAAIF,EACA,OAAOA,GAIFG,EAAuB,SAACd,GACjC,IAAMI,EAASnxC,UAAUoxC,SACnBtnB,EAAI,IAAItQ,KAAKu3B,GAInB,OAAOM,EAHa,IAAIC,KAAKC,eAAeJ,GAAQK,QAGjC1nB,GAAGlnB,QAFR,MAEuB,MAG5BkvC,EAAsB,SAACC,GAEhC,OADkBf,IAAOgB,IAAID,GAASE,QAAQT,OAAO,eAI5CU,EAA+B,SAACH,GACzC,IAAMZ,EAASnxC,UAAUoxC,SAEnBe,EAAYnB,IAAOgB,IAAID,GAASE,QAAQT,OAAO,KAC/C1nB,EAAIknB,IAAOmB,GAAWC,SAG5B,OAAOf,EADa,IAAIC,KAAKC,eAAeJ,GAAQK,QACjC1nB,GAAGlnB,QAFR,MAEuB,MAG5ByvC,EAAiC,SAACN,GAE3C,OADkBf,IAAOgB,IAAID,GAASE,QAAQT,OAAO,qBAI5Cc,EAA8B,SAACP,GAExC,OADkBf,IAAOgB,IAAID,GAASE,QAAQT,OAAO,wBAI5Ce,EAA+C,SAACR,GAEzD,OADkBf,IAAOgB,IAAID,GAASE,QAAQT,OAAO,4BAM5CgB,EAA2B,SAACC,GAErC,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,WAI5CkB,EAAgC,SAACD,GAE1C,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,UAI5CmB,EAAwC,SAACF,GAElD,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,iBAI5CoB,EAAsB,SAACH,GAEhC,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,gBAK5CqB,EAAmC,SAACJ,GAE7C,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,gBAI5CsB,EAAsB,SAACL,GAEhC,OADkBzB,IAAOgB,IAAIS,GAASR,QAAQT,OAAO,UAI5CuB,EAAoB,SAAC1mC,EAAe2mC,GAC7C,OAAIhC,IAAO3kC,GAAS2kC,IAAOgC,GAAa,GAEtBhC,IAAO3kC,GAAOmlC,OAAO,WAGpB,MAFHR,IAAOgC,GAAKxB,OAAO,YAK1ByB,EAAoB,SAAClC,EAAqBmC,GACnD,OAAOlC,IAAOD,GAAMoC,SAAS,KAAM,CAC/BC,QAAQ,IAAD,OAAMF,GAA8B,QAApC,kBACPG,QAAQ,IAAD,OAAMH,GAA8B,QAApC,qBACPI,SAAS,IAAD,OAAMJ,GAA8B,QAApC,oBACRK,QAAQ,IAAD,OAAML,GAA8B,QAApC,uBACPM,SAAU,OACVC,SAAU,sBAILC,EAAsB,SAAC3C,GAChC,KAAIC,MAASC,KAAKF,EAAM,QAAU,GAClC,OAAOC,IAAOD,GAAMoC,SAAS,KAAM,CAC/BC,QAAS,UACTC,QAAS,aACTC,SAAU,OACVC,QAAS,cACTC,SAAU1C,EAAYC,GACtB0C,SAAU3C,EAAYC,MAIjB4C,EAAoB,SAAC5C,GAC9B,OAAOC,IAAOD,GAAMoC,SAAS,KAAM,CAC/BC,QAAS,UACTC,QAAS,aACTC,SAAU,OACVC,QAAS,cACTC,SAAU,OACVC,SAAU,iBAILG,EAAoB,SAAC7C,GAAD,OAAyBC,IAAOD,GAAMS,OAAO,QAEjEqC,EAAe,SAAC9C,GAAD,OAAyBC,IAAOD,GAAMA,QAErD+C,EAAqB,SAAC/C,GAC/B,IAAMgD,EAAM/C,MAASgB,MAGrB,OAFgBhB,IAAOD,GAAMiB,MAEdgC,SAASD,IAGfE,EAAoB,SAAClD,GAC9B,IAAMgD,EAAM/C,MAASgB,MAGrB,OAFgBhB,IAAOD,GAAMiB,MAEdkC,QAAQH,IAIdxM,EAAyB,SAACwJ,GACnC,IACME,EADUD,MAASgB,MACJf,KAAKD,IAAOD,IAGjC,OAFiBC,IAAOrnC,SAASsnC,GAEjBkD,YAIPC,EAAmC,SAACrD,EAAcsD,GAC3D,IAAMzoB,EAAMyoB,GAAoB,IAG1BpD,EADUD,IAAOgB,MACFf,KAAKD,IAAOD,IAC3BpnC,EAAWqnC,IAAOrnC,SAASsnC,GAEjC,OAAItnC,EAAS2qC,YAAc,GACjB,GAAN,OAAUC,KAAKC,MAAM7qC,EAAS2qC,aAA9B,KACO3qC,EAAS8qC,YAAc,GACxB,GAAN,OAAUF,KAAKC,MAAM7qC,EAAS8qC,aAA9B,KACO9qC,EAAS+qC,UAAY,GACtB,GAAN,OAAUH,KAAKC,MAAM7qC,EAAS+qC,WAA9B,KACO/qC,EAASgrC,UAAY/oB,EACtB,GAAN,OAAU2oB,KAAKC,MAAM7qC,EAASgrC,UAA9B,KAEM,IAAN,OAAW/oB,EAAX,O,qMCuMOzc,IAjVC,SAAC,GAkBF,IAjBXylC,EAiBU,EAjBVA,eACAC,EAgBU,EAhBVA,qBACAjtC,EAeU,EAfVA,SACA6rB,EAcU,EAdVA,OACAoD,EAaU,EAbVA,QACAlF,EAYU,EAZVA,QACAmjB,EAWU,EAXVA,eAWU,IAVV98B,gBAUU,MAVC,IAUD,EATVjgB,EASU,EATVA,WACA5b,EAQU,EARVA,MACA44D,EAOU,EAPVA,sBACAvJ,EAMU,EANVA,eACA+C,EAKU,EALVA,aACAyG,EAIU,EAJVA,SACA93D,EAGU,EAHVA,QAGU,IAFV+3D,oBAEU,aADVjuB,iBACU,MADE,oBACF,EACJv1C,EAAgBuvB,cAChBk0C,EAAiBnnB,cACjBonB,IAAuBD,EAAeznB,WACtC2nB,EAAYp1C,UAAUC,UAAUo1C,cAAcpsB,QAAQ,YAAc,EACpExC,EAAUC,cACVtjB,EAAWH,cAEjB,EAAoD0M,cAA5C1C,EAAR,EAAQA,oBAAqBC,EAA7B,EAA6BA,mBAC7B,EAA0BK,oBAAkB,GAA5C,mBAAOjwB,EAAP,KAAcg4D,EAAd,KAEMp/D,EAAkB,CACpBwD,KAAM,CACFwD,QAAS,EACT7H,gBAAiB2F,IAAW1F,MAAMnB,KAClCuG,SAAU,QACV6tB,SAAU6sC,IAAchyC,EAAW,QAAU,SAC7CvxB,OAAQ,OACRwL,MAAO,OACP8qB,IAAK,EACLE,KAAM,EACNkO,OAAQ,EACRF,MAAO,EACP17B,QAAS,OACTi9B,cAAe,SACfQ,OAAQqyB,IAAa,GAEzB8K,YAAa,CACT76D,SAAU,QACV6tB,SAAU6sC,IAAchyC,EAAW,QAAU,SAC7CvxB,OAAQ,OACRwL,MAAO,OACP8qB,IAAK,EACLE,KAAM,EACNkO,OAAQ,EACRF,MAAO,EACP+B,OAAQqyB,IAAa,EACrB9vD,QAAS,QAEb66D,cAAe,CACX76D,QAAS,OACTE,eAAgBuoB,GAAYwxC,EAAiB,gBAAkBxxC,EAAW,WAAa,SACvFyU,IAAK78B,IAAWrJ,UAChBiJ,WAAY,SACZ0mB,KAAM,EACN5mB,SAAU,YAEd+6D,iBAAkB,CACdrK,SAAU,MACV/1D,gBAAiB5D,EAAMyE,OAAOmD,mBAElCq8D,iBAAkB,CACdtK,SAAU,MACVC,UAAW,SACXhuD,MAAO,OACPxL,OAAQijE,GAAkC,OAC1CxhB,UAAWlwB,EAAW,OAzGP,KA0GfxpB,UAAW,IACXsD,QAASlC,IAAWrJ,QAAQ,GAC5B42B,UAAWnF,GAAYgyC,EAAY,SAAW,MAElDO,eAAgB,CACZtgE,gBAAiB2F,IAAW1F,MAAMnB,KAClCqG,OAAQ,SACRw9B,SAAUA,EACVnmC,OAAQ,OACRmL,aAAchC,IAAWgC,aACzBE,QAAO,OAAEA,QAAF,IAAEA,IAAWlC,IAAWrJ,QAAQ,GACvCmM,UAAU,mBACVnD,QAAS,OACTi9B,cAAe,SACfrP,UAAWnF,GAAYgyC,EAAY,SAAW,MAElDQ,uBAAwB,CACpB14D,QAAS,EACTvC,QAAS,OACTi9B,cAAe,SACf/lC,OAAQ,OACR6I,UAAW0oB,GAAYgyC,EAAY,KAAO,WAC1Ch9B,OAAQ,GAEZozB,eAAgB,CACZn2D,gBAAiB2F,IAAW1F,MAAMnB,KAClCwG,QAAS,OACTi9B,cAAexU,EAAW,iBAAmB,MAC7CyU,IAAK78B,IAAWrJ,QAAQ,GACxBkJ,eAAgB,WAChB0uB,WAAYvuB,IAAWrJ,QAAQ,GAC/B2vB,KAAM,EACN8W,OAAQ,GAEZkrB,YAAa,CACT5oD,SAAU0oB,EAAW,UAAY,WACjC+E,IAAK,EACLkO,MAAO,EACP17B,QAAS,OACTE,eAAgB,SAChBD,WAAY,SACZ/I,OAAQuxB,EAAW,GAAK,GACxB/lB,MAAO+lB,EAAW,GAAK,GACvBxyB,WAAY,OACZ0E,MAAOgI,EAAQtC,IAAW1F,MAAM0E,MAAQgB,IAAW1F,MAAMjC,MACzDgC,gBAAiBiI,EAAQtC,IAAW1F,MAAMjC,MAAQ2H,IAAW1F,MAAMkG,YACnE3F,OAAO,aAAD,OAAemF,IAAW1F,MAAM0E,OACtCgD,aAAchC,IAAWgC,aACzBvC,OAAQ,UACRK,WAAYrJ,EAAMyE,OAAOE,eAAiB3E,EAAMyE,OAAOkB,aACvDghC,OAAQ,GAEZy9B,wBAAyB,CACrBl7D,QAAS,OACTi9B,cAAe,UAEnBk+B,cAAe,CACXn7D,QAAS,OACTi9B,cAAe,SACf/lC,OAAQ,OACRqL,QAASlC,IAAWrJ,QAAQ,GAC5B43B,YACKzJ,KAAsBI,MAAuBg1C,EAAe3nB,SACvD0nB,EACIC,EAAe3nB,SAAW,GAC1B2nB,EAAe3nB,SACnBvyC,IAAWrJ,QAAQ,IAEjCokE,KAAM,CACF5K,UAAW,UACXpzB,UAAW,SACXlmC,OAAQ,OACR8I,QAASyoB,EAAW,QAAU,SAIhCsoC,GAAe,CACjB5wD,WAAW,4BACX9D,QAAS,EACT20D,eAAgB,aAGdC,GAAmB,CACrBC,SAAU,GACVC,QAAS,CACL90D,QAAS,EACT20D,eAAgB,YAChB7wD,WAAY,wBAEhBixD,QAAS,CACL/0D,QAAS,EACT20D,eAAgB,QAChB7wD,WAAY,yBAEhBkxD,OAAQ,GACRC,UAAW,IAkBfvgC,qBAAU,WAON,OANI+nB,GACAxmB,EAAoBH,IAAYqC,SAChCrP,KAAsBK,YAAmB,GAAD,OAAIS,IAAYo1C,eAAhB,YAAkCb,KAE1EjoC,EAAmBJ,IAAYqC,SAE5B,kBAAMhP,YAAmB,GAAD,OAAIS,IAAYo1C,eAAhB,aAAmCb,OACnE,CAAC1hB,IAEJ,IAAM+hB,GACF,sBAAKr0C,MAAOjrB,EAAOs/D,cAAnB,UACKZ,GAAkBA,EAClBC,GAGG,wBACI1zC,MAAOjrB,EAAOotD,YACdhe,aAAc,kBAAMgwB,GAAS,IAC7B/vB,aAAc,kBAAM+vB,GAAS,IAC7Bh9B,QAAS,SAACz5B,GAAD,OAnCH,SAACA,GACnBA,EAAEmxD,iBAEFnZ,GAAWA,GAASpD,GACpB6hB,GAAS,GAITx1C,KAAsBK,YAAmB,GAAD,OAAIS,IAAYo1C,eAAhB,aAAmCb,IAEvExjB,EACAA,IACGlL,EAAQ8N,SAuBakX,CAAc5sD,IAJlC,SAMI,cAAC,IAAD,CAAWsiB,MAAO,CAAE7mB,SAAU,kBAMxC27D,GAAe95D,EACjBinB,EACI,oBAAIjC,MAAOnmB,IAAW3D,WAAW+E,QAAjC,SAA2CD,IAE3C,oBACIglB,MAAK,2BACEnmB,IAAW3D,WAAW8E,OADxB,IAEDe,QAAQ,KAAD,OAAOlC,IAAWrJ,QAAQ,GAA1B,MACPumC,UAAW,SACX0c,aAAc,WACdlV,WAAY,SACZnX,SAAU,WAPlB,SAUKpsB,SAGTm4B,EAEEwhC,GACF,sBAAK30C,MAAOjrB,EAAO4/D,cAAnB,UACKN,GACD,cAAC,IAAD,CAAQv0C,KAAM2zC,EAAiB,EAAI,IAClCqB,IAAgBA,GAChBA,IAAgBlB,GAAyB,cAAC,IAAD,IACzCA,GACG,qCACI,cAAC,IAAD,IACA,qBAAK5zC,MAAOjrB,EAAO2/D,wBAAnB,SAA6Cd,OAGrD,cAAC,IAAD,IACA,cAAC,IAAD,CACIxG,aAAcA,EACdE,oBACgB,OAAZF,QAAY,IAAZA,OAAA,EAAAA,EAAcE,oBACRF,EAAaE,mBACbjD,IAAgC,OAAdA,QAAc,IAAdA,OAAA,EAAAA,EAAgB3pC,QAAS,EAC3C,MACA,MAPd,SAUK+F,IAEJ4jC,GAAkBA,EAAe3pC,OAAS,GACvC,qBAAKV,MAAOjrB,EAAOs1D,eAAnB,gBAAoCA,QAApC,IAAoCA,OAApC,EAAoCA,EAAgB5mC,KAAI,SAACT,GAAD,OAAOA,UAKrEwxC,GACF,qCACI,qBAAKx0C,MAAOjrB,EAAOu/D,mBACnB,qBAAKt0C,MAAOjrB,EAAOw/D,iBAAnB,SACI,sBAAMv0C,MAAOjrB,EAAOy/D,eAApB,SACI,sBAAKx0C,MAAOjrB,EAAO0/D,uBAAnB,UACKJ,GACAS,GACAlB,GACG,qCACI,cAAC,IAAD,CAAQ9zC,KAAM,MACd,qBAAKE,MAAOjrB,EAAO2/D,wBAAnB,SAA6Cd,OAGrD,cAAC,IAAD,IACA,cAAC,IAAD,CAAcxG,aAAcA,EAA5B,SAA2C3mC,IAC1C4jC,GAAkBA,EAAe3pC,OAAS,GACvC,sBAAMV,MAAOjrB,EAAOs1D,eAApB,gBAAqCA,QAArC,IAAqCA,OAArC,EAAqCA,EAAgB5mC,KAAI,SAACT,GAAD,OAAOA,iBAQxF,OACI,cAAC,IAAD,CAAQ6iB,UAAWA,EAAnB,SACI,cAAC,IAAD,CAAYklB,GAAIzY,EAAQ+G,QAAS,CAAE2R,MAAO,IAAKC,KAAM,KAAOC,eAAa,EAAzE,SACK,SAAC1lC,GAAD,OACG,mCACI,sBACIgB,UAAWvE,EAAW,GAAK2E,IAAQruB,KACnCynB,MACIiC,GACMA,EAAQ,uCAEGltB,EAAOwD,MACPgyD,IACAE,GAAiBjlC,IAL1B,uCAcKzwB,EAAOq/D,aACP7J,IACAE,GAAiBjlC,IAnBtC,UAuBK5O,EACAi9C,EACG,sBAAMA,SAAUA,EAAU7zC,MAAOjrB,EAAO6/D,KAAxC,SACK3yC,EAAW0yC,GAAgBH,KAEhCvyC,EACA0yC,GAEAH,e,gDCzVjB9d,IA1BO,SAAC55C,EAAei4D,GAClC,MAA8B3oC,oBAAS,GAAvC,mBAAOqhB,EAAP,KAAgBunB,EAAhB,KAsBA,OApBAzqC,qBAAU,WACN,IAAM0qC,EAAyB,SAACxkC,GAC5BukC,EAAWvkC,EAAMgd,UAGfynB,EACiB,OAAnBH,EACMn2C,OAAO4uB,WAAP,sBAAiC1wC,EAAjC,QACmB,SAAnBi4D,EACAn2C,OAAO4uB,WAAP,sBAAiC1wC,EAAjC,QACA8hB,OAAO4uB,WAAP,kBAA6B1wC,EAA7B,QAKV,OAHAk4D,EAAWE,EAAeznB,SAC1BynB,EAAe/jC,iBAAiB,SAAU8jC,GAEnC,WACHC,EAAepjC,oBAAoB,SAAUmjC,MAElD,CAACn4D,EAAOi4D,IAEJtnB,I,4MCOI,SAASkF,EAAY/yB,GAChC,IACI6G,EAMA7G,EANA6G,SACAD,EAKA5G,EALA4G,UAFJ,EAOI5G,EAJAu1C,iBAHJ,WAOIv1C,EAHAiX,gBAJJ,MAIe/mC,IAAOE,2BAJtB,EAKas6C,EAET1qB,EAFAgH,QACG3G,EANP,YAOIL,EAPJ,GAQMgH,EArCQ,SAACiQ,GAAD,OACdhQ,aAAW,WACP,OAAOM,YAAa,CAChBiuC,YAAa,CACTj1C,KAAM,WACN3mB,QAAS,OACTE,eAAgB,SAChBoC,SAAU,GAEdu5D,kBAAmB,CACfv5D,SAAU,EACVqkB,KAAM,WACN3mB,QAAS,OACTi9B,cAAe,SACfI,SAAUA,QAuBNnP,CAAUmP,EAAVnP,GACV4tC,EAA6BxwB,cAEnC,OACI,6CAAKte,UAAWuC,kBAAKvC,EAAWI,EAAQwuC,YAApB,OAAiC9qB,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAiB8qB,cAAkBn1C,GAAxF,aACI,qBACIuG,UAAWuC,kBAAKnC,EAAQyuC,kBAAT,OAA4B/qB,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAiB+qB,kBAA7C,eACVC,GAA8BH,IAFvC,SAKK1uC,S,iEC/BFmzB,IAlBQ,WACnB,MAA0BxtB,mBAAiBxN,OAAO22C,YAAlD,mBAAOr5D,EAAP,KAAcs5D,EAAd,KACA,EAA4BppC,mBAAiBxN,OAAOyO,aAApD,mBAAO38B,EAAP,KAAe+kE,EAAf,KAGM9b,GADS73B,eAAiBnD,KAAsBI,MACxB7iB,EAAQxL,EAEhCglE,EAAS,WACXF,EAAS52C,OAAO22C,YAChBE,EAAU72C,OAAOyO,cAOrB,OALA9C,qBAAU,WAEN,OADA3L,OAAOuS,iBAAiB,SAAUukC,GAC3B,kBAAM92C,OAAOkT,oBAAoB,SAAU4jC,OAG/C/b,I,uDCJItG,IAdS,SAACzzB,GACrB,OACI,cAAC,IAAD,2BAAaA,GAAb,aACI,qBAAKqa,QAAQ,MAAMtwB,GAAG,UAAUg5B,MAAM,6BAA6BC,EAAE,MAAMC,EAAE,MAAMC,QAAQ,YAA3F,SACI,sBACIn5B,GAAG,UACHg/B,EAAE,+H,gICCP,SAASiM,EAAiBh1B,GACrC,IAAQ6G,EAA4B7G,EAA5B6G,SAAUujB,EAAkBpqB,EAAlBoqB,KAAS/pB,EAA3B,YAAoCL,EAApC,GAEA,OACI,cAAC,IAAD,yBAEI0gB,UAAWwM,IACX9C,KAAMA,EACNrE,UAAU,QACN1lB,GALR,aAOKwG,O,qFCuBEkvC,EAnCe,SAAC,GAAkC,IAAD,IAA/B1zC,SAC7B,YAD4D,SAExD,qCACI,cAACyoB,EAAA,EAAD,CACIC,aAAa,MACbj6C,OAAQ,IACRwL,MAAO,OACPhI,gBAAiB2F,IAAW1F,MAAM2F,WAEtC,cAAC6lB,EAAA,EAAD,IACA,cAAC+qB,EAAA,EAAD,CACIC,aAAa,MACbj6C,OAAQ,GACRwL,MAAO,OACPhI,gBAAiB2F,IAAW1F,MAAM2F,cAI1C,sBAAKkmB,MAAO,CAAExmB,QAAS,OAAQ4iD,oBAAqB,UAAW1lB,IAAK78B,IAAWrJ,QAAQ,GAAIE,OAAQ,QAAnG,UACI,cAACg6C,EAAA,EAAD,CACIC,aAAa,MACbj6C,OAAQ,OACRwL,MAAO,OACPhI,gBAAiB2F,IAAW1F,MAAM2F,WAEtC,cAAC4wC,EAAA,EAAD,CACIC,aAAa,MACbj6C,OAAQ,OACRwL,MAAO,OACPhI,gBAAiB2F,IAAW1F,MAAM2F,e,kBCkDnC07C,IArEA,SAAC,GAAgG,IAAD,IAA7F9Q,cAA6F,SAA7E4L,EAA6E,EAA7EA,KAAM7pB,EAAuE,EAAvEA,SAAuE,IAA7DxE,gBAA6D,SAA3CwzB,EAA2C,EAA3CA,OAAQC,EAAmC,EAAnCA,QAASvF,EAA0B,EAA1BA,YAC3Ep7C,EAAkB,CACpBogD,OAAQ,CACJle,OAAQqyB,IAAa,EACrBp1D,gBAAiB,cACjByF,WAAYE,IAAWgD,YAAY5H,eACnCu1D,eAAgB,YAChBoL,oBAAqB/7D,IAAWgC,aAChCg6D,qBAAsBh8D,IAAWgC,cAErCi6D,MAAO,CACH55D,MAAO,GACPxL,OAAQ,EACRmL,aAAchC,IAAWgC,aACzBtH,WAAYsF,IAAW1F,MAAMyE,WAC7BS,OAAQ,UAEZotB,SAAU,CACNjtB,QAAS,OACTi9B,cAAe,SACfm/B,oBAAqB/7D,IAAWgC,aAChCg6D,qBAAsBh8D,IAAWgC,aACjC3H,gBAAiB2F,IAAW1F,MAAM2F,WAIpCi8D,EAAiBrxB,EACnB,cAAC,EAAD,CAAuBziB,SAAUA,IAEjC,qCACI,qBAAKjC,MAAOjrB,EAAO+gE,QACnB,cAACn2C,EAAA,EAAD,IACA,sBAAKK,MAAOjrB,EAAO0xB,SAAnB,UACKA,EACD,cAAC9G,EAAA,EAAD,IACA,cAACwtB,EAAA,EAAD,UAKN6oB,EAAwBC,YAAW,CACrCv+D,MAAO,CACHxD,gBAAiB2F,IAAW1F,MAAMkG,cAFZ47D,CAI3BC,KAUH,OACI,cAACF,EAAD,CACIvgB,OAAQA,EACRnF,KAAMA,EACN6lB,OAAQ,WACJzgB,GAAQ,IAEZlF,QAfQ,WACRL,EACAA,IAEAuF,GAAQ,IAYR11B,MAAOjrB,EAAOogD,OAPlB,SASK4gB,M,2MC7EPruC,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,GACN06C,KAAM,CACFhP,UAAW,gBACXtqC,WAAYrJ,EAAMuM,YAAY2qB,OAAO,cAEzC4qB,UAAW,CACPnO,UAAW,uBAWR,SAASmyB,EAAqBx2C,GACzC,IAAQ4G,EAA8E5G,EAA9E4G,UAAR,GAAsF5G,EAAnEE,KAAmEF,EAA7D4zB,iBAAzB,MAAoC,SAApC,IAAsF5zB,EAAxC0yB,cAA9C,SAA8D+jB,EAAwBz2C,EAAxBy2C,WAAep2C,EAA7E,YAAsFL,EAAtF,GACMgH,EAAUc,EAAU9H,GAE1B,OACI,cAAC,IAAD,yBAAY4G,UAAWuC,kBAAKvC,EAAWI,EAAQruB,MAAOX,SAAUy+D,GAAgBp2C,GAAhF,aACI,cAAC,IAAD,CACI9mB,SAAUq6C,EACVhtB,UAAWuC,kBAAKnC,EAAQqsB,KAAT,eACVrsB,EAAQwrB,UAAYE,W,6BC3B1B,SAASrqB,EAAyCrI,GAC7D,IAAQlvB,EAAkBkvB,EAAlBlvB,OAAQwL,EAAU0jB,EAAV1jB,MAEhB,MAAM,GAAN,OAAWxL,EAASwL,EAAS,IAA7B,KATJ,mC,4MCEe,SAASo6D,EAAa12C,GACjC,OACI,eAAC02B,EAAA,EAAD,2BAAa12B,GAAb,cACI,sBAAM+oB,EAAE,0gBACR,4BACI,sBAAMA,EAAE,+QAEZ,4BACI,sBAAMA,EAAE,kRAEZ,4BACI,sBAAMA,EAAE,sR,6KCClBjhB,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,CACFwD,QAASzL,EAAME,QAAQ,GACvBgJ,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,SACZ,QAAS,CACL07B,aAAc7kC,EAAME,QAAQ,IAEhC,mBAAoB,CAChB2kC,aAAc,IAGtBohC,WAAY,CAAEr6D,MAAO,QACrBkuC,MAAO,CACHlV,MAAO,EACPlO,IAAK,QASF,SAASwvC,EAAyB52C,GAC7C,IAAQ4G,EAA2C5G,EAA3C4G,UAAqBiwC,GAAsB72C,EAAhC6G,SAAgC7G,EAAtB62C,UAAax2C,EAA1C,YAAmDL,EAAnD,GACMqC,EAAWH,cACX8E,EAAUc,IACVsC,EAASC,cACPzE,EAAUiW,cAAVjW,MAWFkxC,EAAgB,iBAA0B,qBAAbD,GAA4BA,KAEzDhiB,EAAgB,mBAEtB,OACI,8CAAKjuB,UAAWuC,kBAAKvC,EAAWI,EAAQruB,OAAW0nB,GAAnD,cACKgC,GACG,cAACooB,EAAA,EAAD,CAAoBzjB,QAAS,CAAEwjB,MAAOxjB,EAAQwjB,OAASpqB,MAAO,CAAE9jB,MAAO,QAAvE,SACI,cAACkkC,EAAA,EAAD,CACIpgB,MAAO,CAAE9jB,MAAO,QAChBtB,QAAS65C,EACTtd,QAASu/B,EACTr2B,GAAIjiC,IAAYK,mBAJpB,6BAUR,cAAC2hC,EAAA,EAAD,CACI5Z,UAAWI,EAAQ2vC,WACnB37D,QAAS65C,EACTtd,QAASu/B,EACTr2B,GAAIjiC,IAAYO,QAJpB,qBASA,cAACyhC,EAAA,EAAD,CACI5Z,UAAWI,EAAQ2vC,WACnB37D,QAAS65C,EACTtd,QAASu/B,EACTr2B,GAAIjiC,IAAYW,YAJpB,sBAQA,cAACqhC,EAAA,EAAD,CACI5Z,UAAWI,EAAQ2vC,WACnB37D,QAAS65C,EACTtd,QAASu/B,EACTr2B,GAAIjiC,IAAYgB,aAJpB,2BAQA,cAACghC,EAAA,EAAD,CACI5Z,UAAWI,EAAQ2vC,WACnB37D,QAAS65C,EACTtd,QAASu/B,EACTr2B,GAAIjiC,IAAYiB,IAJpB,iBAQA,cAACq/B,EAAA,EAAD,CAAclY,UAAWI,EAAQ2vC,WAAY37D,QAAS65C,EAAetd,QA5DxD,WACjB+H,cAAa/T,MAAK,SAAC0pB,GAEfj2B,OAAOvhB,SAAS2sC,KAAhB,UAA0BhgB,EAAO0I,SAASjuB,QAA1C,OAAmDvG,YAAaZ,IAASC,WAAzE,OACIa,IAAYa,eAwDhB,qBAIA,cAAC63B,EAAA,EAAD,CAAYl8B,QAAQ,QAApB,oBAAiC4qB,EAAM2T,iBAAiBc,QAAQA,e,2EChGtEvS,EAAYb,aAAW,SAACv2B,GAC1B,IAAMgjD,EAAsBhjD,EAAM2mC,OAAOsc,OAEnCojB,EAAkBrmE,EAAME,QAAQ,GAChComE,EAAoBtmE,EAAME,QAAQ,GAElCqL,EAAe86D,EAAkB,EAAIC,EAErCC,EAAcvmE,EAAMuM,YAAY2qB,OAAO,OAE7C,OAAOL,YAAa,CAChB5uB,KAAM,CACFgB,SAAU,WACVrF,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO0F,IAAW1F,MAAMjC,MACxB2J,aAAcA,EACdo7B,OAAQqc,EACR32C,UAAWrM,EAAMyE,OAAOG,iBACxBoE,OAAQ,WAEZw9D,cAAe,CACXt9D,QAAS,OACTE,eAAgB,gBAChBD,WAAY,SACZF,SAAU,YAEdw9D,oBAAqB,CACjB,0BAA2B,CACvBlhE,QAASvF,EAAMyE,OAAOC,sBAG9BgiE,kBAAmB,CACfC,uBAAwB,EACxBC,wBAAyB,GAE7BC,0BAA2B,CACvBlgC,OAAQqc,EAAsB,EAC9B/5C,SAAU,WACV6tB,SAAU,UAEdgwC,4BAA6B,CACzB5H,WAAY,UAEhB6H,iBAAkB,CACd99D,SAAU,WACV2C,MAAO,OACPxL,OAAQ,OACRs2B,IAAK,QACLE,KAAM,EACNhzB,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO0F,IAAW1F,MAAMjC,MACxByH,WAAYk9D,EACZI,uBAAwBp7D,EACxBq7D,wBAAyBr7D,EACzBm3C,cAAe,MACfn9C,QAAS,GAEbyhE,qBAAsB,CAClBtwC,IAAK,EACLnxB,QAAS,EACTm9C,cAAe,OAEnBukB,YAAa,CACTl+D,OAAQu9D,EACR,UAAW,CACP/gE,QAASvF,EAAMyE,OAAOC,sBAG9BwiE,OAAQ,CAAEt7D,MAAOy6D,EAAiBjmE,OAAQimE,GAC1Cc,qBAAsB,GACtBC,SAAS,eACFpoE,IAAUM,mBAOV,SAAS+nE,EAAgB/3C,GAAgB,IAAD,IAC3C4G,EAAiC5G,EAAjC4G,UAAwBvG,GAASL,EAAtB6G,SAAnB,YAAyC7G,EAAzC,IAEMgH,EAAUc,IAEVwC,EAAkBC,cAExB,EAA4CiC,oBAAkB,GAA9D,mBAAOooB,EAAP,KAAuBD,EAAvB,KACA,EAA4DnoB,oBAAkB,GAA9E,mBAAOwrC,EAAP,KAA+BC,EAA/B,KAEMC,EAAgB,WAClBvjB,GAAkB,IAGhBI,EAAkB,cAAC6hB,EAAD,CAA0BC,SAAUqB,IAEtDC,EAAiB,WACnBxjB,GAAmBC,IAGvB,OACI,cAACwjB,EAAA,EAAD,CAAmBC,YAAaH,EAAhC,SACI,8CACItxC,UAAWuC,kBAAKvC,EAAWI,EAAQruB,KAApB,eACVquB,EAAQmwC,oBAAsBa,KAE/B33C,GAJR,cAMI,sBACIuG,UAAWuC,kBAAKnC,EAAQkwC,cAAT,eACVlwC,EAAQowC,kBAAoBxiB,IAEjCrQ,aAAc,kBAAM0zB,GAA0B,IAC9CzzB,aAAc,kBAAMyzB,GAA0B,IAC9C1gC,QAAS4gC,EANb,UAQI,cAACx3B,EAAA,EAAD,CACIF,GAAIjiC,IAAYO,QAChB6nB,UAAWI,EAAQ2wC,YACnBpzB,aAAc,kBAAM0zB,GAA0B,IAC9CzzB,aAAc,kBAAMyzB,GAA0B,IAJlD,SAMI,cAAC5yB,EAAA,EAAD,CACIze,UAAWI,EAAQ4wC,OACnBryB,SAAQ,UAAEjb,EAAgB1E,MAAMzmB,mBAAxB,iBAAE,EAAmCiwB,uBAArC,aAAE,EAAoDG,oBAGtE,qBAAKnP,MAAO,CAAExmB,QAAS,OAAQC,WAAY,UAA3C,SACI,cAACq9B,EAAA,EAAD,CAAYtQ,UAAWI,EAAQ8wC,SAAU98D,QAAQ,KAAjD,SACKsvB,EAAgB1E,MAAMnhB,SAASsqB,gBAGxC,cAACynC,EAAA,EAAD,CACI5vC,UAAWI,EAAQ6wC,qBACnBtgC,QAAS4gC,EACT5jE,MAAM,UACNm+C,OAAQkC,OAGhB,sBAAKhuB,UAAWI,EAAQuwC,0BAAxB,UACI,cAACe,EAAA,EAAD,CAAUnN,GAAIvW,EAAd,SACI,qBAAKhuB,UAAWI,EAAQwwC,4BAAxB,SAAsDziB,MAE1D,qBACInuB,UAAWuC,kBAAKnC,EAAQywC,iBAAT,eACVzwC,EAAQ0wC,qBAAuB9iB,IAFxC,SAKKG,a,kFCrGV,SAASwjB,EAAT,GAAoE,IAApC7nB,EAAmC,EAAnCA,KAAML,EAA6B,EAA7BA,SAAUO,EAAmB,EAAnBA,QACrDxL,EAAcxE,cACd+J,EAAsB9e,cAEtB7E,EAtDQ,SAACoe,GAAD,OACdne,aAAW,SAACv2B,GAAmB,IAAD,EAEpB8nE,EAAuB9nE,EAAM0B,QAAQuC,WAAWmD,MAEhDqE,EAAUipC,EAAY,GAAGjpC,QAE/B,OAAOorB,YAAa,CAChBkxC,WAAS,GACL7+D,QAAS,OACTi9B,cAAe,SACfh9B,WAAY,SACZvF,gBAAiBkkE,EACjBv8D,aAAcmpC,EAAY,GAAGnpC,aAC7BE,QAASA,EACTmyB,aAAcnyB,EAAU,GAPnB,cAQJzL,EAAMiL,YAAY+8D,GAAG,MAAQ,CAC1BhK,YAAa,SATZ,yBAWK,SAXL,0BANK,GAkBah+D,EAAME,QAAQ,IAZhC,sBAaEF,EAAMoC,SAASM,MAbjB,GAgBTqvB,cAAc,aACVnmB,MAAO,IACP8tD,UAAW,OACX7X,UAAW,OACXjkB,aAAcnyB,EAAU,GACrB40C,YAAgBrgD,IAEvBioE,qBAAsB,CAClBh/D,SAAU,WACVytB,KA/BU,GAgCVE,KAAM,mBACNhrB,MAAO,EACPxL,OAAQ,EACR8nE,WAAW,GAAD,OAnCA,GAmCA,wBACVC,YAAY,GAAD,OApCD,GAoCC,wBACX3gE,aAAa,GAAD,OArCF,GAqCE,oBAA0BsgE,SAelC1wC,CAAUsd,EAAVtd,GAUhB,OACI,eAACsG,EAAA,EAAD,CACIsiB,KAAMA,EACNL,SAAUA,EACVO,QAAS,WACLA,IAZR1rB,YACIylB,EAAoB5nB,SACpB4nB,EAAoB/kB,MAAM2D,qBAAqB9G,cAC/CkoB,EAAoB/kB,MAAM+D,qBAAqBlH,gBAa/CmwB,aAAc,CACV/hD,SAAU,SACVF,WAAY,UAEhBkiD,gBAAiB,CACbhiD,SAAU,MACVF,WAAY,UAEhBq2B,QAAS,CACLlvB,MAAOkvB,EAAQyxC,WAEnBK,mBAAiB,EAnBrB,UAqBI,qBAAKlyC,UAAWI,EAAQ2xC,uBAExB,qBAAK/xC,UAAWI,EAAQvE,cAAxB,SACI,cAACwwB,EAAA,EAAD,S,aCvFVnrB,GAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChBwxC,iBAAkB,CACdzkE,gBAAiB2F,IAAW1F,MAAMjC,MAClCiC,MAAO7D,EAAM0B,QAAQuF,KAAKJ,KAC1BwF,UAAWrM,EAAMyE,OAAOG,iBACxB,UAAW,CACPhB,gBAAiB5D,EAAM0B,QAAQuF,KAAKJ,KACpChD,MAAO0F,IAAW1F,MAAMjC,QAGhCk4C,MAAO,CACHlV,OAAQ,EACRlO,KAAM,QAKH,SAAS4xC,KACpB,IAAMhyC,EAAUc,KAChB,EAA4B+D,cAApBjG,EAAR,EAAQA,MAAO7C,EAAf,EAAeA,SACf,EAAgCqtB,IAAM5jB,SAAmC,MAAzE,mBAAO6jB,EAAP,KAAiBC,EAAjB,KAMMC,EAAc,WAChBD,EAAY,OAEVI,EAAOC,QAAQN,GAQrB,OANA1lB,qBAAU,WACD/E,EAAMgE,kBAAkB9D,UACzByqB,MAEL,CAAC3qB,EAAMgE,kBAAkB9D,WAGxB,qCACI,cAACktB,EAAA,EAAD,CACIpsB,UAAWI,EAAQ+xC,iBACnBxhC,QAAS,SAACz5B,GApBS,IAAC+yB,IAqBO/yB,EApBnCgkC,aAAmB,sBACnBwO,EAAYzf,EAAM2f,gBAoBL5qB,EAAMgE,kBAAkB9D,UAAYL,YAAmB1C,IAE5DxuB,MAAM,UACN0kE,oBAAkB,EAPtB,SASI,cAACxuB,EAAA,EAAD,CAAoBzjB,QAAS,CAAEwjB,MAAOxjB,EAAQwjB,OAA9C,SACI,cAAC,IAAD,QAGR,cAAC+tB,EAAD,CAAsB7nB,KAAMA,EAAML,SAAUA,EAAUO,QAASL,O,wBC/D5D,SAAS2oB,GAAcl5C,GAClC,OACI,cAAC02B,EAAA,EAAD,yBAASxT,QAAQ,qBAAwBljB,GAAzC,aACI,sBAAKqa,QAAQ,MAAMtwB,GAAG,UAAUg5B,MAAM,6BAA6BC,EAAE,MAAMC,EAAE,MAAMC,QAAQ,YAA3F,UACI,uBAAO7e,KAAK,aACZ,8BACI,sBACIuC,UAAU,MACVmiB,EAAE,mMAGN,sBACIniB,UAAU,MACVmiB,EAAE,mSAIN,sBACIniB,UAAU,MACVmiB,EAAE,mQAIN,sBACIniB,UAAU,MACVmiB,EAAE,yTAIN,sBACIniB,UAAU,MACVmiB,EAAE,6KAGN,sBACIniB,UAAU,MACVmiB,EAAE,6RAIN,sBACIniB,UAAU,MACVmiB,EAAE,qJAIV,sBACIniB,UAAU,MACVmiB,EAAE,07C,aC7BhBjhB,GAAYb,aAAW,SAACv2B,GAAmB,IAAD,MAGtCyoE,EAAsBzoE,EAAM2mC,OAAOke,OAAS,EAE5C6jB,EAAwB3oE,YAAyBC,GAEjD2oE,EACM,6BADNA,EAEM,6BAGZ,OAAO9xC,YAAa,CAChBguB,OAAQ,CACJj5C,MAAOpM,IAAOC,aACd,2BAA4B,CACxByJ,QAAS,QAEb,uBAAwB,CACpBA,QAAS,OACTtJ,eAAgB,QAEpB,QAAS,CACLA,eAAgB,SAGxBgpE,YAAa,CACT1/D,QAAS,OACTi9B,cAAe,SACf/8B,eAAgB,gBAChBwC,MAAOpM,IAAOC,aACd2E,OAAQ,OAERR,gBAAiB2F,IAAW1F,MAAMwE,UAClCxE,MAAO0F,IAAW1F,MAAMjC,OAE5BinE,gBAAc,GACV5jB,UAAWjlD,EAAME,QAAQ,GACzB4oE,WAAY,GAFF,cAGTH,EAA4B,CACzB1jB,UAAWjlD,EAAME,QAAQ,KAJnB,cAMTyoE,EAA4B,CACzB1jB,UAAWjlD,EAAME,QAAQ,MAPnB,GAUd6oE,UAAQ,GACJlkC,aAAc7kC,EAAME,QAAQ,GAAKF,EAAMyE,OAAOkB,aAC9CmjE,WAAY,GAFR,cAGHH,EAA4B,CACzB9jC,aAAc7kC,EAAME,QAAQ,GAAKF,EAAMyE,OAAOkB,eAJ9C,cAMHgjE,EAA4B,CACzB9jC,aAAc7kC,EAAME,QAAQ,IAAOF,EAAMyE,OAAOkB,eAPhD,cASHgjE,EAA4B,CACzB9/D,SAAU,YAVV,sBAYGU,IAAW1F,MAAMjC,OAZpB,GAcRonE,aAAc,CACVnlE,MAAO0F,IAAW1F,MAAMjC,OAE5B0kD,KAAM,CACFxuB,WAAY,EACZ+tB,cAAe,EACf,aAAc,CACVx8C,WAAYrJ,EAAMyE,OAAOE,eACzB,UAAW,CACPf,gBAAiB2F,IAAW1F,MAAM2F,YAI9Cy/D,SAAO,GACH//D,QAAS,OACTi9B,cAAe,SACfl9B,SAAU,WACV,UAAW,CACP,mBAAoB,CAChB1D,QAASvF,EAAMyE,OAAOC,sBAG9BmE,SAAU,SACV4C,QAAQ,GAAD,OAAKzL,EAAME,QAAQ,GAAnB,cAA2BF,EAAME,QAAQ,MAAzC,OAVJ,cAWFF,EAAMiL,YAAYymB,KAAK,MAAQ,CAC5B7oB,SAAU,SACV4C,QAAQ,GAAD,OAAKzL,EAAME,QAAQ,KAAnB,cAA6BF,EAAME,QAAQ,MAA3C,QAbR,cAeFF,EAAMiL,YAAYymB,KAAK,MAAQ,CAC5BjmB,QAAQ,GAAD,OAAKzL,EAAME,QAAQ,MAAnB,cAA8BF,EAAME,QAAQ,GAA5C,MACP2I,SAAU,WAjBX,GAoBPqgE,qBAAsB,CAClB7/D,WAAYrJ,EAAMuM,YAAY2qB,OAAO,MAAO,CACxCgB,SAAUl4B,EAAMuM,YAAY2rB,SAAS8V,SACrC7V,OAAQn4B,EAAMuM,YAAY4rB,OAAOC,YAErC7sB,aAAcvL,EAAMyE,OAAOO,eAC3BkE,QAAS,QAEbigE,YAAY,eACPR,EAA4B,CACzB9/D,SAAU,YAGlB85C,KAAM,CACF9+C,MAAO7D,EAAM2D,QAAQG,WAEzBmD,KAAM,CACFpD,MAAO7D,EAAM0B,QAAQuF,KAAKJ,MAE9BuiE,cAAe,CACXnlE,WAAYsF,IAAW1F,MAAMyE,WAC7BzE,MAAM,GAAD,OAAK0F,IAAW1F,MAAMwE,UAAtB,eACLnE,eAAgB,OAChB,UAAW,CACPN,gBAAgB,GAAD,OAAK2F,IAAW1F,MAAMyE,WAAtB,iBAGvB+gE,aAAc,CACVz9D,MAAO09D,EACPlpE,OAAQ,OACRwD,gBAAiB5D,EAAM0B,QAAQ5C,QAAQkI,aACvCiC,SAAU,WACV2tB,MAAM,EACNF,IAAK,EACLkwC,wBA9HmB,EA+HnBrB,qBA/HmB,GAiIvBjoC,iBAAkB,CACdp0B,QAAS,OACTi9B,cAAe,MACf95B,UAAW,OACXqqB,IAAKgyC,EAAsBzoE,WAC3B2kC,MAAO8jC,EAAsBvoE,SAAWX,IAAOI,eAC/C+mC,OAAQ8hC,EAAsB,EAC9Bj9D,SAAU,IACVI,MAAO,QACPxH,OAAQ,aASL,SAAS0hD,GAAkBx2B,GACtC,IAAQy2B,EAAUz2B,EAAVy2B,MACFzvB,EAAUc,KAEV0sB,EAAqB3Y,cAErBo+B,EACF,cAACC,EAAA,EAAD,CAAMtzC,UAAWI,EAAQgwB,KAAMhwB,QAAS,CAAE7qB,QAAS6qB,EAAQgwB,MAA3D,SACKP,EAAM5yB,KAAI,SAAC4K,EAAM6I,GACd,IAAQ8S,EAA8C3b,EAA9C2b,KAAMiJ,EAAwC5kB,EAAxC4kB,KAAM7b,EAAkC/I,EAAlC+I,MAApB,EAAsD/I,EAA3B4mB,sBAA3B,SACA,OACI,eAAC8kB,EAAA,EAAD,CAEIz5B,UAAW05B,IACX35B,GAAI2J,EACJ6R,MAAO5G,EACPglB,gBAAiBrzC,EAAQ8yC,cACzBlzC,UAAWuC,kBAAKnC,EAAQ2yC,SAN5B,UAQI,qBAAK/yC,UAAWI,EAAQ+yC,eACxB,qBAAKnzC,UAAWI,EAAQ4yC,qBAAxB,SAA+CvmB,IAC/C,cAACnc,EAAA,EAAD,CAAYtQ,UAAWI,EAAQ6yC,YAAa7+D,QAAQ,QAApD,SACKw8B,MAXT,UACYF,EADZ,YACiBE,SAkBjC,OACI,sBAAK5Q,UAAU,iBAAf,UACI,eAACgvB,EAAA,EAAD,CACI56C,QAAQ,YACR4rB,UAAWI,EAAQuuB,OACnBvuB,QAAS,CACLlvB,MAAOkvB,EAAQsyC,aAJvB,UAOI,gCACI,cAACa,EAAA,EAAD,CACIz5B,UAAW05B,IACX35B,GAAIjiC,IAAYC,QAChBw9C,OAAK,EACLoe,gBAAiBrzC,EAAQ8yC,cACzBlzC,UAAWuC,kBAAKnC,EAAQ2yC,QAAS3yC,EAAQuyC,gBACzCn5C,MAAO,CAAEu1B,UAAW,GANxB,SAQI,cAACujB,GAAD,CAAetyC,UAAWI,EAAQqsB,KAAMjzB,MAAO,CAAE7mB,SAAU,cAE9D0gE,KAE4D,qBAAhE,OAAOzlB,QAAP,IAAOA,OAAP,EAAOA,EAAoB5uB,MAAM2T,iBAAiBI,YACK,KAAxD6a,EAAmB5uB,MAAM2T,iBAAiBI,UACtC,wBAEA,eAACwgC,EAAA,EAAD,CACIz5B,UAAWwM,IACX9C,KAAMoK,EAAmB5uB,MAAM2T,iBAAiBI,UAChD/S,UAAWuC,kBAAKnC,EAAQ2yC,QAAS3yC,EAAQuyC,gBAH7C,UAKI,cAAC7C,EAAD,CAAcn9D,SAAS,UAAUqtB,UAAWI,EAAQ0yC,eACpD,cAACxiC,EAAA,EAAD,CAAYtQ,UAAWI,EAAQyyC,SAAUz+D,QAAQ,QAAjD,4BAMZ,eAACs/D,GAAA,EAAD,CAAQ3gE,SAAS,QAAQpF,MAAM,cAAcwV,GAAG,oBAAoB6c,UAAWI,EAAQgH,iBAAvF,UACI,8BACI,cAAC,GAAD,MAEJ,cAAC0d,GAAA,EAAD,CAAkBvG,MAAM,MACxB,cAAC4yB,EAAD,UAMT,IAAMwC,GAA2B,WACpC,IAAMl4C,EAAWH,eAAiBnD,MAAsBI,KAClDzuB,EAAQuvB,cACRm5C,EAAwB3oE,YAAyBC,GAEvD,OAAO2xB,EAAW,KACd,qBACIjC,MAAO,CACHtvB,OAAQsoE,EAAsBtoE,OAC9B2I,OAAO,GAAD,OAAK2/D,EAAsBzoE,WAA3B,cAA2CyoE,EAAsBvoE,SAAjE,MACN0kC,aAAc,O,gBCjQ9BilC,EAAOC,QAAU,CAAC,KAAO,wB,4GCInB3yC,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,CACFpE,MAAO7D,EAAM0B,QAAQuF,KAAKJ,WAKvB,SAASmjE,EAAuB16C,GAC3C,IAAMgH,EAAUc,IAEhB,OAAO,cAAC,IAAD,aAAkBd,QAAS,CAAEruB,KAAMquB,EAAQruB,OAAYqnB,M,oKCPrD26C,EAAgC,0CAqJ9BtX,IAxHK,WAAO,IAAD,EAChBhhC,EAAWH,cACX8E,EApBQ,SAAC3E,GAAD,OACd4E,aAAW,SAACv2B,GAAD,OACP62B,YAAa,CACT5uB,KAAM,CACF2uB,KAAMjF,EAAWpoB,IAAWrJ,QAAQ,GAAKV,IAAOC,aAAe8J,IAAWrJ,QAAQ,GAClF0kC,MAAOjT,EAAWpoB,IAAWrJ,QAAQ,GAAK,UAC1C4kC,OAAQv7B,IAAWrJ,QAAQ,GAC3BsL,SAAU,IACVD,aAAchC,IAAWrJ,UACzB42B,SAAU,SACVlzB,gBAAiB,oBAUbwzB,CAAUzF,EAAVyF,GAEhB,EAAwC0E,oBAAS,GAAjD,mBAAOouC,EAAP,KAAqBC,EAArB,KACA,EAAwCruC,qBAAxC,mBAAOsuC,EAAP,KAAqBC,EAArB,KACA,EAAgCvuC,mBAAS,GAAzC,mBAAOwuC,EAAP,KAAiBC,EAAjB,KAEMC,EAAuB7E,aAAW,SAAC3lE,GAAD,MAAY,CAChDiI,KAAM,CACFrE,gBAAwC,WAAX,OAAZwmE,QAAY,IAAZA,OAAA,EAAAA,EAAcz2C,MAAmBpqB,IAAW1F,MAAMwE,UAAY,aAEnFoiE,IAAK,CACD7mE,gBAAwC,WAAX,OAAZwmE,QAAY,IAAZA,OAAA,EAAAA,EAAcz2C,MAAmBpqB,IAAW1F,MAAM5B,IAAM,cALpD0jE,CAOzB+E,KA0CJ,OAjCAzwC,qBAAU,WAON,OANA3L,OAAOuS,iBAAiBopC,GAA+B,SAAC9pC,GACpDkqC,EAAe,OAAElqC,QAAF,IAAEA,OAAF,EAAEA,EAAyC2F,QAC1D3F,EAAMwqC,kBACNR,GAAgB,MAGb,WACH77C,OAAOkT,oBAAoByoC,GAA+B,kBAE/D,IAEHhwC,qBAAU,WAAO,IAAD,EACZ,GAAKiwC,EAAL,CAKA,IAAMU,EAAO9H,KAAK+H,KAAMC,KAAD,iBAAoBV,QAApB,IAAoBA,OAApB,EAAoBA,EAAcW,0BAAlC,QA7CJ,MA8CbC,EAAQC,aAAY,WACtBV,GAAY,SAACW,GACT,OAAIA,GAAe,IACR,EAEJpI,KAAKqI,IAAID,EAAcN,EAAM,UAlDnC,KAsDT,OAAO,WACHQ,cAAcJ,IAfdT,EAAY,KAiBjB,CAACL,IAGA,cAAC,IAAD,CACIh0C,UAAWI,EAAQruB,KACnB+3C,KAAMkqB,EAENhqB,QA7CY,WAChBiqB,GAAgB,IAChB,OAAIC,QAAJ,IAAIA,OAAJ,EAAIA,EAAciB,WACdjB,EAAaiB,YA2CbvZ,iBAAgB,iBAAEsY,QAAF,IAAEA,OAAF,EAAEA,EAAcW,0BAAhB,QAlED,IAmEf7oB,aACIvwB,EACM,CACIxxB,SAAU,SACVF,WAAY,UAEhB,CACIE,SAAU,SACVF,WAAY,QAd9B,SAkBI,sBACIyvB,MAAO,CACH9jB,MAAO,OACPzD,WAAuB,OAAZiiE,QAAY,IAAZA,OAAA,EAAAA,EAAcjiE,WAAYiiE,EAAajiE,UAAY3I,IAAOK,cACrEO,OAAQ,OACRwD,gBAAiB,UACjBsF,QAAS,OACTE,eAAgB,QAChBD,WAAY,SACZF,SAAU,YATlB,UAYI,qBACIymB,MAAO,CACHgH,IAAK,EACLE,KAAM,EACNhrB,MAAO,MACPxL,OAAQ,OACR6I,SAAU,WACVhF,WAC2B,WAAX,OAAZmmE,QAAY,IAAZA,OAAA,EAAAA,EAAcz2C,MAAd,oCACmCpqB,IAAW1F,MAAM5B,IADpD,eAC8DsH,IAAW1F,MAAMwE,UAD/E,SAEM,mDACV9C,QAAS,IACTsgD,cAAel0B,EAAWpoB,IAAWrJ,UAAY,EACjDqL,aAAcomB,EAAW,EAAIpoB,IAAWgC,aAAe,KAG/D,sBAAKmkB,MAAO,CAAExmB,QAAS,OAAQk9B,IAAK78B,IAAWrJ,QAAQ,GAAIymC,OAAQ,EAAGulB,WAAY,IAAlF,UAC4B,WAAX,OAAZke,QAAY,IAAZA,OAAA,EAAAA,EAAcz2C,MACX,cAAC,IAAD,CAAiBjE,MAAO,CAAE7rB,MAAO0F,IAAW1F,MAAM5B,OAElD,cAAC,IAAD,CAAUytB,MAAO,CAAE7rB,MAAO,aAJlC,OAMKumE,QANL,IAMKA,OANL,EAMKA,EAAc7xB,WAEnB,qBAAK7oB,MAAO,CAAEzmB,SAAU,WAAY2tB,KAAM,EAAGkO,OAAQ,EAAG6B,OAAQ,EAAG/6B,MAAO,QAA1E,SACI,cAAC4+D,EAAD,CAAsBlgE,QAAQ,cAAckC,MAAO89D,a,8BCvJvE,oBA+CegB,IAzCM,SAAC,GAYP,IAAD,IAXVhhE,eAWU,MAXA,UAWA,MAVVklB,YAUU,MAVH,WAUG,EATV2G,EASU,EATVA,SACA0Q,EAQU,EARVA,QAQU,IAPVv/B,gBAOU,aANVqqB,gBAMU,SALVyhB,EAKU,EALVA,aACAC,EAIU,EAJVA,QACAC,EAGU,EAHVA,UACAoG,EAEU,EAFVA,KACArgC,EACU,EADVA,GAEA,OACI,mBACIqgC,KAAMA,EACNhqB,MACI,GAIJknB,OAAO,SACP6F,IAAI,sBARR,SAUI,cAAC,IAAD,CACInyC,QAASA,EACTklB,KAAMA,EACNqX,QAASA,GAAoB,kBAAM,MACnClV,SAAUA,EACVrqB,SAAUA,EACV8rC,aAAcA,EACdC,QAASA,EACTC,UAAWA,EACXj6B,GAAIA,EATR,SAWK8c,Q,0FCvCF,SAASyvB,EAAYt2B,GAChC,OACI,cAAC,IAAD,2BAAaA,GAAb,aACI,8BACI,sBAAM+oB,EAAE,8OACR,sBAAMA,EAAE,67B,qLCDlBjhB,EAAYb,aAAW,SAACv2B,GAAD,OACzB62B,YAAa,CACT,kBAAmB,CACf20B,KAAM,CAAE7X,UAAW,gBACnB5D,GAAI,CAAE4D,UAAW,oBAErB43B,OAAQ,CACJlmE,UAAW,4BAEfmmE,YAAa,CACT3nE,MAAO7D,EAAM0B,QAAQ2F,KAAKtI,WAE9BuI,SAAU,CACNzD,MAAO7D,EAAM0B,QAAQuF,KAAKF,MAAQ/G,EAAMyE,OAAOkB,mBAS5C,SAAS8lE,EAAT,GAAiF,IAAxD5kC,EAAuD,EAAvDA,QAASlR,EAA8C,EAA9CA,QAA8C,IAArCruB,gBAAqC,SAAhBqoB,EAAgB,iBACrF2G,EAAUc,IAEhB,OACI,cAAC,IAAD,yBACI9vB,SAAUquB,GAAWruB,EACrBu/B,QAASA,EACT3Q,UAAWI,EAAQk1C,YACnBl1C,QAAS,CAAEhvB,SAAUgvB,EAAQhvB,WACzBqoB,GALR,aAOI,cAAC,IAAD,CACIuG,UAAWuC,kBAAK,eACXnC,EAAQi1C,OAAS51C,W,wLCpChCyB,EAAYb,aAAW,SAACv2B,GAC1B,OAAO62B,YAAa,CAChB5uB,KAAM,CAAEgB,SAAU,YAClByiE,eAAgB,CACZ7nE,MAAO7D,EAAM0B,QAAQ5C,QAAQ+H,KAC7BoC,SAAU,WACVytB,IAAK,MACLE,KAAM,MACNquB,WAAY,GACZiH,YAAa,SASV,SAAS6M,EAAezpC,GACnC,IAAMgH,EAAUc,IACRjB,EAAsD7G,EAAtD6G,SAAU66B,EAA4C1hC,EAA5C0hC,UAAW1pD,EAAiCgoB,EAAjChoB,SAAU4uB,EAAuB5G,EAAvB4G,UAAcvG,EAArD,YAA8DL,EAA9D,GAEA,OACI,eAAC,IAAD,yBAAc4G,UAAWuC,kBAAKvC,EAAWI,EAAQruB,MAAOX,SAAU0pD,GAAa1pD,GAAcqoB,GAA7F,cACKwG,EACA66B,GAAa,cAAC,IAAD,CAAkBxhC,KAAM,GAAI0G,UAAWI,EAAQo1C,uB,2DCN1D1kB,IAtBI,SAAC13B,GAChB,OACI,cAAC,IAAD,2BAAaA,GAAb,aACI,qBAAKqa,QAAQ,MAAMtwB,GAAG,UAAUg5B,MAAM,6BAA6BC,EAAE,MAAMC,EAAE,MAAMC,QAAQ,YAA3F,SACI,8BACI,sBACI6F,EAAE,igBAMN,sBAAMA,EAAE,8EACR,yBAAS5F,OAAO,uDAChB,yBAASA,OAAO,sDAChB,sBAAMH,EAAE,QAAQC,EAAE,QAAQ3mC,MAAM,QAAQxL,OAAO,mB,8ECH7D4mC,EAAoB9B,sBAAW,WAAoEC,GAAc,IAA/ExT,EAA8E,EAA9EA,SAAUyT,EAAoE,EAApEA,QAASG,EAA2D,EAA3DA,OAAQ0B,EAAmD,EAAnDA,UAAW5D,EAAwC,EAAxCA,YAAwC,EAA3BhqB,GASvF,OACI,qBACI8rB,IAAKA,EACLzV,MAAO,CACHxmB,QAAS,OACTk9B,IAAK78B,IAAWrJ,QAAQ,GACxB0L,MAAO,OACPH,QAASlC,IAAWrJ,QAAQ,GAC5B0D,gBAAiB2F,IAAW1F,MAAM2F,SAClCJ,eAAgB,SAChBD,WAAY,UATpB,SAYI,sBACIumB,MAAO,CACHxmB,QAAS,OACT4iD,oBAAqBn6B,EAAW,MAAQ,UACxCyU,IAAK78B,IAAWrJ,QAAQyxB,EAAW,EAAI,GACvC4U,SAAU,IACV96B,QAAiB,UAARkmB,EAAcpoB,IAAWrJ,QAAQ,GAAcqJ,IAAWrJ,QAAQ,GAA1D,QACjB0L,MAAO,QAPf,UAUK+lB,GACG,cAAC,IAAD,CACIjC,MAAK,2BACEnmB,IAAW3D,WAAWgF,YADxB,IAED67B,UAAW,WAHnB,SAMKpD,KAGP1R,GACE,cAAC,IAAD,CACIjC,MAAK,2BACEnmB,IAAW3D,WAAWgF,YADxB,IAEDzL,WAAYoK,IAAWvK,UAAUK,QAAQF,WACzC+J,QAAS,OACTC,WAAY,WALpB,SAQKk6B,IAGT,sBACI3T,MAAO,CACHxmB,QAAS,OACTk9B,IAAK78B,IAAWrJ,QAAQ,GACxBkJ,eAAgBuoB,EAAW,SAAW,MACtC4U,SAAU,IACVQ,YAAapV,EAAW,SAAW,QACnC/lB,MAAO,QAPf,UAUI,cAAC,IAAD,CACIA,MAAO,IACPxL,OAAQ,IACRk1B,IAAG,UAAK8P,EAAL,wBACH1V,MAAO,CAAE9jB,MAAO,OAAQ5C,OAAQ,WAChCgtB,iBAAe,EACf6Q,QAjEa,WAC7BvY,OAAO0xB,KAAKza,EAAQ,aAkER,cAAC,IAAD,CACI35B,MAAO,IACPxL,OAAQ,IACRk1B,IAAG,UAAK8P,EAAL,0BACH1V,MAAO,CAAE9jB,MAAO+lB,EAAW,OAAS,OAAQ3oB,OAAQ,WACpDgtB,iBAAe,EACf6Q,QA7Ec,WAC9BvY,OAAO0xB,KAAK/Y,EAAW,wBAoFhBD,O,4CCnGf,+DAQe,SAAS4uB,EAAatmC,GACjC,IAAQumC,EAAqBvmC,EAArBumC,OAAQ1/B,EAAa7G,EAAb6G,SAIhB,OACI,cAAC,IAAD,CAAUskC,IAAK5E,EAAQ9M,QAHD,IAG6B6R,eAAa,EAAhE,SACI,cAAC,IAAD,CAAMH,IAAK5E,EAAQ9M,QAAS,CAAE4iB,OAAQ,EAAGhR,KAJvB,KAIlB,SACKxkC,Q,uDCGFyuB,IAnBY,SAACt1B,GACxB,OACI,eAAC,IAAD,2BAAaA,GAAb,cACI,8BACI,sBAAM+oB,EAAE,wPACR,sBAAMA,EAAE,6yBAEZ,sBAAMA,EAAE,+PACR,sBAAMA,EAAE,wPACR,4BACI,sBAAMA,EAAE,swBAEZ,4BACI,sBAAMA,EAAE,qvB,8BCdxB,kCAAO,IAAMqU,EAAqB,WAC9B,IAAIkf,EAAKC,GAEgD,IAArDt9C,UAAUC,UAAUgpB,QAAQ,sBAC5Bq0B,EAAO/+D,SAASI,qBAAqB,QAAQ,IAAMJ,SAAS0vB,MAAQ1vB,SAASg/D,iBAE7EF,EAAM9+D,SAASyvB,cAAc,WACzBjH,IAAM,sGACVu2C,EAAKpvC,YAAYmvC,M,yDCaVG,IAnBS,SAACz8C,GACrB,OACI,cAAC,IAAD,2BAAaA,GAAb,aACI,sBAAKjW,GAAG,iBAAiBg5B,MAAM,6BAA6BG,QAAQ,YAApE,UACI,+BACI,4BAEJ,mBAAGn5B,GAAG,aAAN,SACI,sBACIA,GAAG,WACH6c,UAAU,QACVmiB,EAAE,mX,uDCAX2zB,IAXE,SAAC18C,GACd,OACI,cAAC,IAAD,2BAAaA,GAAb,IAAoBkjB,QAAQ,YAA5B,SACI,sBACI6F,EAAE,kL,+JCGL4zB,EAAiD,CAC1D1qB,kBAAkB,G,OCHhB2qB,EAAoBxsB,IAAMoK,MAAK,kBAAM,oCAErCyH,EAAuBh4B,wBAA6E,CACtGrE,MAAO+2C,EACP55C,SAAU,kBAAM,QAGP85C,EAAkD,SAAC,GAAkB,IAAhBh2C,EAAe,EAAfA,SACxDi2C,EAAwBvyC,cAAqB3E,MAAMnhB,SAASwqB,gBAElE,EAA0B9E,qBAAW4nB,IAAsB4qB,GAA3D,mBAAO/2C,EAAP,KAAc7C,EAAd,KACA,EAA4ByJ,oBAAS,GAArC,mBAAOsY,EAAP,KAAe4Y,EAAf,KAkBA,OAhBA/yB,qBAAU,WACN,IAAI5L,MAAsBI,IAI1B,OAA8B,IAA1B29C,GACAprB,YAAyB3uB,EAAU+5C,QACnCpf,GAAU,SAIdlM,YAA+BzuB,GAAUy7B,SAAQ,WAC7Cd,GAAU,MAVVA,GAAU,KAYf,CAACof,IAEAh4B,EAAe,cAACpC,EAAA,EAAD,IAGf,cAACuf,EAAqBr2B,SAAtB,CAA+B1uB,MAAO,CAAE0oB,QAAO7C,YAA/C,SACK6C,EAAMqsB,kBAAoBlzB,KAAsBI,IAC7C0H,EAEA,cAAC,IAAMk2C,SAAP,CAAgB/gB,SAAU,cAACtZ,EAAA,EAAD,IAA1B,SACI,cAACk6B,EAAD,SAOPI,EAA0B,kBAAMlxC,qBAAWm2B,K,0BClDxDuY,EAAOC,QAAU,CAAC,OAAS,0B,oCCD3B,IAAIwC,GACJ,SAAWC,GACP,aAWA,IAAIC,EAAgB,WAChB,SAASA,IACLn8C,KAAKo8C,YAAc,OACnBp8C,KAAKq8C,eAAiB,MACtBr8C,KAAKs8C,MAAQ,GA0FjB,OAxFAl2B,OAAOm2B,eAAeJ,EAAaz1B,UAAW,aAAc,CAKxDhN,IAAK,WACD,OAAO1Z,KAAKo8C,aAEhBI,IAAK,SAAUtgE,GACX8jB,KAAKo8C,YAAclgE,GAEvBugE,YAAY,EACZC,cAAc,IAElBt2B,OAAOm2B,eAAeJ,EAAaz1B,UAAW,gBAAiB,CAM3DhN,IAAK,WACD,OAAO1Z,KAAKq8C,gBAEhBG,IAAK,SAAUtgE,GACX8jB,KAAKq8C,eAAiBngE,GAE1BugE,YAAY,EACZC,cAAc,IAElBt2B,OAAOm2B,eAAeJ,EAAaz1B,UAAW,QAAS,CAInDhN,IAAK,WACD,OAAO0M,OAAOa,KAAKjnB,KAAKs8C,QAE5BG,YAAY,EACZC,cAAc,IAWlBP,EAAaz1B,UAAUi2B,UAAY,SAAUt5C,GAC7B,MAARA,SACOrD,KAAKs8C,MAAMj5C,EAAKiwC,eAEvBtzC,KAAKs8C,MAAQ,IASrBH,EAAaz1B,UAAUk2B,QAAU,SAAUv5C,GACvC,OAAOrD,KAAKs8C,MAAMj5C,EAAKiwC,gBAAkB,IAW7C6I,EAAaz1B,UAAUm2B,QAAU,SAAUx5C,EAAMnnB,GAC7C8jB,KAAKs8C,MAAMj5C,EAAKiwC,eAAiBp3D,GASrCigE,EAAaz1B,UAAUo2B,aAAe,SAAUC,EAAKC,EAASC,GAC1D,IAAIC,EAAMjB,EAAckB,UACxBD,EAAIE,WAAaL,EACjBG,EAAIG,WAAa,CAAEr7B,EAAGg7B,EAAS/6B,EAAGg7B,IAE/Bd,EA9FS,GAgGpBD,EAAgBC,aAAeA,EAmB/B,IAAIF,EAAiB,WAIjB,SAASA,IAGL,GAFAj8C,KAAKs9C,WAAa,EAEdrB,EAAckB,UACd,KAAM,0CAIV,IAAII,GAAkB,EAQtB,GAPA/gE,SAAS+zB,iBAAiB,QAAQ,cAAgB,CAC1CitC,cAEA,OADAD,GAAkB,GACX,KAIXt/C,UAAUw/C,eAAgB,CAC1B,IAAI11B,EAAIvrC,SACJkhE,EAAK19C,KAAK29C,YAAYC,KAAK59C,MAC3B69C,EAAK79C,KAAK89C,WAAWF,KAAK59C,MAC1B+9C,EAAK/9C,KAAKg+C,UAAUJ,KAAK59C,MACzBi+C,IAAMV,GAAkB,CAAEC,SAAS,EAAOU,SAAS,GACvDn2B,EAAExX,iBAAiB,aAAcmtC,EAAIO,GACrCl2B,EAAExX,iBAAiB,YAAastC,EAAII,GACpCl2B,EAAExX,iBAAiB,WAAYwtC,GAC/Bh2B,EAAExX,iBAAiB,cAAewtC,IA6R1C,OAvRA9B,EAAckC,YAAc,WACxB,OAAOlC,EAAckB,WAGzBlB,EAAcv1B,UAAUi3B,YAAc,SAAU7gE,GAC5C,IAAIshE,EAAQp+C,KACZ,GAAIA,KAAKq+C,cAAcvhE,GAAI,CAEvB,GAAI26B,KAAKu6B,MAAQhyC,KAAKs9C,WAAarB,EAAcqC,WACzCt+C,KAAKu+C,eAAezhE,EAAG,WAAYA,EAAEwpC,QAGrC,OAFAxpC,EAAEmxD,sBACFjuC,KAAKw+C,SAKbx+C,KAAKw+C,SAEL,IAAIx5C,EAAMhF,KAAKy+C,kBAAkB3hE,EAAEwpC,QAC/BthB,IAGKhF,KAAKu+C,eAAezhE,EAAG,YAAaA,EAAEwpC,SACtCtmB,KAAKu+C,eAAezhE,EAAG,YAAaA,EAAEwpC,UAGvCtmB,KAAK0+C,YAAc15C,EACnBhF,KAAK2+C,QAAU3+C,KAAK4+C,UAAU9hE,GAC9BkjB,KAAK6+C,WAAa/hE,EAClBA,EAAEmxD,iBAEF1gC,YAAW,WACH6wC,EAAMM,aAAe15C,GAAqB,MAAdo5C,EAAMU,MAC9BV,EAAMG,eAAezhE,EAAG,cAAekoB,IACvCo5C,EAAMI,WAGfvC,EAAc8C,UACb9C,EAAc+C,mBACdh/C,KAAKi/C,mBAAqB1xC,YAAW,WACjC6wC,EAAMc,gBAAiB,EACvBd,EAAMN,WAAWhhE,KAClBm/D,EAAckD,sBAMrClD,EAAcv1B,UAAUo3B,WAAa,SAAUhhE,GAC3C,GAAIkjB,KAAKo/C,2BAA2BtiE,GAChCkjB,KAAKw+C,cAGT,GAAIx+C,KAAKq/C,kBAAkBviE,IAAMkjB,KAAKs/C,2BAA2BxiE,GAAI,CAEjE,IAAIwpC,EAAStmB,KAAKu/C,WAAWziE,GAC7B,GAAIkjB,KAAKu+C,eAAezhE,EAAG,YAAawpC,GAGpC,OAFAtmB,KAAK6+C,WAAa/hE,OAClBA,EAAEmxD,iBAIFjuC,KAAK0+C,cAAgB1+C,KAAK8+C,MAAQ9+C,KAAKw/C,qBAAqB1iE,KAC5DkjB,KAAKu+C,eAAezhE,EAAG,YAAakjB,KAAK0+C,aACzC1+C,KAAKy/C,aAAa3iE,GAClBkjB,KAAKu+C,eAAezhE,EAAG,YAAawpC,IAGpCtmB,KAAK8+C,OACL9+C,KAAK6+C,WAAa/hE,EAClBA,EAAEmxD,iBACFjuC,KAAKu+C,eAAezhE,EAAG,OAAQkjB,KAAK0+C,aAChCp4B,GAAUtmB,KAAK0/C,cACf1/C,KAAKu+C,eAAev+C,KAAK6+C,WAAY,YAAa7+C,KAAK0/C,aACvD1/C,KAAKu+C,eAAezhE,EAAG,YAAawpC,GACpCtmB,KAAK0/C,YAAcp5B,GAEvBtmB,KAAK2/C,WAAW7iE,GAChBkjB,KAAK4/C,YAAc5/C,KAAKu+C,eAAezhE,EAAG,WAAYwpC,MAIlE21B,EAAcv1B,UAAUs3B,UAAY,SAAUlhE,GAC1C,GAAIkjB,KAAKq+C,cAAcvhE,GAAI,CAEvB,GAAIkjB,KAAKu+C,eAAev+C,KAAK6+C,WAAY,UAAW/hE,EAAEwpC,QAElD,YADAxpC,EAAEmxD,iBAIDjuC,KAAK8+C,OACN9+C,KAAK0+C,YAAc,KACnB1+C,KAAKu+C,eAAev+C,KAAK6+C,WAAY,QAAS/hE,EAAEwpC,QAChDtmB,KAAKs9C,WAAa7lC,KAAKu6B,OAG3BhyC,KAAK6/C,gBACD7/C,KAAK0+C,cACD5hE,EAAEumB,KAAK6jB,QAAQ,UAAY,GAAKlnB,KAAK4/C,aACrC5/C,KAAKu+C,eAAev+C,KAAK6+C,WAAY,OAAQ7+C,KAAK0/C,aAEtD1/C,KAAKu+C,eAAev+C,KAAK6+C,WAAY,UAAW7+C,KAAK0+C,aACrD1+C,KAAKw+C,YAMjBvC,EAAcv1B,UAAU23B,cAAgB,SAAUvhE,GAC9C,OAAOA,IAAMA,EAAEgjE,kBAAoBhjE,EAAEijE,SAAWjjE,EAAEijE,QAAQjgD,OAAS,GAIvEm8C,EAAcv1B,UAAU24B,kBAAoB,SAAUviE,GAClD,OAAQm/D,EAAc+C,kBAAoBh/C,KAAKq+C,cAAcvhE,IAIjEm/D,EAAcv1B,UAAU44B,2BAA6B,SAAUxiE,GAC3D,OAAOm/D,EAAc+C,kBAAoBh/C,KAAKk/C,gBAAkBpiE,GAAKA,EAAEijE,SAAWjjE,EAAEijE,QAAQjgD,QAIhGm8C,EAAcv1B,UAAU04B,2BAA6B,SAAUtiE,GAC3D,OACIm/D,EAAc+C,mBACbh/C,KAAKk/C,gBACNl/C,KAAKggD,UAAUljE,GAAKm/D,EAAcgE,kBAK1ChE,EAAcv1B,UAAU84B,qBAAuB,SAAU1iE,GACrD,IAAIojE,EAAQlgD,KAAKggD,UAAUljE,GAC3B,OACIojE,EAAQjE,EAAckE,YACrBlE,EAAc+C,kBAAoBkB,GAASjE,EAAcmE,qBAKlEnE,EAAcv1B,UAAU83B,OAAS,WAC7Bx+C,KAAK6/C,gBACL7/C,KAAK0+C,YAAc,KACnB1+C,KAAK6+C,WAAa,KAClB7+C,KAAK0/C,YAAc,KACnB1/C,KAAK2+C,QAAU,KACf3+C,KAAKk/C,gBAAiB,EACtBl/C,KAAK4/C,aAAc,EACnB5/C,KAAKqgD,cAAgB,IAAIlE,EACzBrB,cAAc96C,KAAKi/C,qBAGvBhD,EAAcv1B,UAAUk4B,UAAY,SAAU9hE,EAAGwjE,GAI7C,OAHIxjE,GAAKA,EAAEijE,UACPjjE,EAAIA,EAAEijE,QAAQ,IAEX,CAAE/9B,EAAGs+B,EAAOxjE,EAAEyjE,MAAQzjE,EAAE0jE,QAASv+B,EAAGq+B,EAAOxjE,EAAE2jE,MAAQ3jE,EAAE4jE,UAGlEzE,EAAcv1B,UAAUs5B,UAAY,SAAUljE,GAC1C,GAAIm/D,EAAc+C,mBAAqBh/C,KAAK2+C,QACxC,OAAO,EAEX,IAAI1oE,EAAI+pB,KAAK4+C,UAAU9hE,GACvB,OAAO01D,KAAKmO,IAAI1qE,EAAE+rC,EAAIhiB,KAAK2+C,QAAQ38B,GAAKwwB,KAAKmO,IAAI1qE,EAAEgsC,EAAIjiB,KAAK2+C,QAAQ18B,IAGxEg6B,EAAcv1B,UAAU64B,WAAa,SAAUziE,GAG3C,IAFA,IAAI8jE,EAAK5gD,KAAK4+C,UAAU9hE,GACpB+jE,EAAKrkE,SAASskE,iBAAiBF,EAAG5+B,EAAG4+B,EAAG3+B,GACrC4+B,GAA4C,QAAtCE,iBAAiBF,GAAIzuB,eAC9ByuB,EAAKA,EAAGG,cAEZ,OAAOH,GAGX5E,EAAcv1B,UAAU+4B,aAAe,SAAU3iE,GAEzCkjB,KAAK8+C,MACL9+C,KAAK6/C,gBAGT,IAAI76C,EAAMhF,KAAKo9C,YAAcp9C,KAAK0+C,YAKlC,GAJA1+C,KAAK8+C,KAAO95C,EAAIi8C,WAAU,GAC1BjhD,KAAKkhD,WAAWl8C,EAAKhF,KAAK8+C,MAC1B9+C,KAAK8+C,KAAK1/C,MAAMgH,IAAMpG,KAAK8+C,KAAK1/C,MAAMkH,KAAO,WAExCtG,KAAKo9C,WAAY,CAClB,IAAI+D,EAAKn8C,EAAIo8C,wBACTR,EAAK5gD,KAAK4+C,UAAU9hE,GACxBkjB,KAAKq9C,WAAa,CAAEr7B,EAAG4+B,EAAG5+B,EAAIm/B,EAAG76C,KAAM2b,EAAG2+B,EAAG3+B,EAAIk/B,EAAG/6C,KACpDpG,KAAK8+C,KAAK1/C,MAAMnqB,QAAUgnE,EAAcoF,SAASthD,WAGrDC,KAAK2/C,WAAW7iE,GAChBN,SAAS0vB,KAAKC,YAAYnM,KAAK8+C,OAGnC7C,EAAcv1B,UAAUm5B,cAAgB,WAChC7/C,KAAK8+C,MAAQ9+C,KAAK8+C,KAAKkC,eACvBhhD,KAAK8+C,KAAKkC,cAAc10C,YAAYtM,KAAK8+C,MAE7C9+C,KAAK8+C,KAAO,KACZ9+C,KAAKo9C,WAAa,MAGtBnB,EAAcv1B,UAAUi5B,WAAa,SAAU7iE,GAC3C,IAAIshE,EAAQp+C,KACZshD,uBAAsB,WAClB,GAAIlD,EAAMU,KAAM,CACZ,IAAI8B,EAAKxC,EAAMQ,UAAU9hE,GAAG,GACxBwiD,EAAI8e,EAAMU,KAAK1/C,MACnBkgC,EAAE3mD,SAAW,WACb2mD,EAAElN,cAAgB,OAClBkN,EAAEjpB,OAAS,SACXipB,EAAEh5B,KAAOksC,KAAK+O,MAAMX,EAAG5+B,EAAIo8B,EAAMf,WAAWr7B,GAAK,KACjDsd,EAAEl5B,IAAMosC,KAAK+O,MAAMX,EAAG3+B,EAAIm8B,EAAMf,WAAWp7B,GAAK,UAK5Dg6B,EAAcv1B,UAAU86B,WAAa,SAAUC,EAAKz8C,EAAKhG,GACrD,IAAK,IAAIsX,EAAI,EAAGA,EAAItX,EAAMc,OAAQwW,IAAK,CACnC,IAAIrgC,EAAI+oB,EAAMsX,GACdmrC,EAAIxrE,GAAK+uB,EAAI/uB,KAGrBgmE,EAAcv1B,UAAUw6B,WAAa,SAAUl8C,EAAKy8C,GAMhD,GAJAxF,EAAcyF,SAASvhD,SAAQ,SAAUwhD,GACrCF,EAAIG,gBAAgBD,MAGpB38C,aAAe68C,kBAAmB,CAClC,IAAIC,EAAO98C,EACP+8C,EAAON,EACXM,EAAKzmE,MAAQwmE,EAAKxmE,MAClBymE,EAAKjyE,OAASgyE,EAAKhyE,OACnBiyE,EAAKC,WAAW,MAAMC,UAAUH,EAAM,EAAG,GAI7C,IADA,IAAII,EAAKnB,iBAAiB/7C,GACjBsR,EAAI,EAAGA,EAAI4rC,EAAGpiD,OAAQwW,IAAK,CAChC,IAAImQ,EAAMy7B,EAAG5rC,GACTmQ,EAAIS,QAAQ,cAAgB,IAC5Bu6B,EAAIriD,MAAMqnB,GAAOy7B,EAAGz7B,IAG5Bg7B,EAAIriD,MAAMgzB,cAAgB,OAE1B,IAAS9b,EAAI,EAAGA,EAAItR,EAAIa,SAAS/F,OAAQwW,IACrCtW,KAAKkhD,WAAWl8C,EAAIa,SAASyQ,GAAImrC,EAAI57C,SAASyQ,KAGtD2lC,EAAcv1B,UAAU63B,eAAiB,SAAUzhE,EAAGumB,EAAMijB,GACxD,GAAIxpC,GAAKwpC,EAAQ,CACb,IAAI67B,EAAM3lE,SAAS4lE,YAAY,SAC3BC,EAAIvlE,EAAEijE,QAAUjjE,EAAEijE,QAAQ,GAAKjjE,EAQnC,OAPAqlE,EAAIG,UAAUj/C,GAAM,GAAM,GAC1B8+C,EAAIjsE,OAAS,EACbisE,EAAII,MAAQJ,EAAIK,QAAU,EAC1BxiD,KAAKwhD,WAAWW,EAAKrlE,EAAGm/D,EAAcwG,WACtCziD,KAAKwhD,WAAWW,EAAKE,EAAGpG,EAAcyG,UACtCP,EAAIQ,aAAe3iD,KAAKqgD,cACxB/5B,EAAO+U,cAAc8mB,GACdA,EAAIrC,iBAEf,OAAO,GAGX7D,EAAcv1B,UAAU+3B,kBAAoB,SAAU3hE,GAClD,KAAOA,EAAGA,EAAIA,EAAEkkE,cACZ,GAAIlkE,EAAE8lE,aAAa,cAAgB9lE,EAAE+lE,UACjC,OAAO/lE,EAGf,OAAO,MAEJm/D,EA1TU,GA4TTA,EAAckB,UAAY,IAAIlB,EAE1CA,EAAckE,WAAa,EAC3BlE,EAAcoF,SAAW,GACzBpF,EAAcqC,UAAY,IAC1BrC,EAAc8C,SAAW,IACzB9C,EAAc+C,kBAAmB,EACjC/C,EAAckD,gBAAkB,IAChClD,EAAcgE,iBAAmB,GACjChE,EAAcmE,oBAAsB,EAEpCnE,EAAcyF,SAAW,2BAA2BoB,MAAM,KAG1D7G,EAAcwG,UAAY,kCAAkCK,MAAM,KAClE7G,EAAcyG,SAAW,8DAA8DI,MAAM,KAC7F5G,EAAgBD,cAAgBA,EA3cpC,CA4cGA,IAAkBA,EAAgB,M","file":"static/js/main.820669d6.chunk.js","sourcesContent":["import React from \"react\";\nimport { createTheme, responsiveFontSizes, alpha as fade, Theme, ThemeOptions } from \"@material-ui/core/styles\";\nimport { CreateCSSProperties, CSSProperties } from \"@material-ui/core/styles/withStyles\";\n\ninterface IFontTypes {\n book: CSSProperties;\n regular: CSSProperties;\n mediumItalic: CSSProperties;\n bold: CSSProperties;\n}\n\nexport interface IStyles {\n [key: string]: React.CSSProperties | {};\n}\n\n// Extend theme properties with module augmentation\ndeclare module \"@material-ui/core\" {\n interface ITheme extends Theme {\n stats: {\n purple: string;\n purple_light: string;\n blue: string;\n mint: string;\n orange: string;\n red: string;\n green: string;\n aqua: string;\n pink: string;\n };\n variants: {\n offWhite: string;\n lightWhite: string;\n lightGrey: string;\n tableHeaderColour: string;\n purple: string;\n visualiserBackground: string;\n green: string;\n grey: string;\n transparentColour: string;\n EAOrange: string;\n EALightGray: string;\n EACharGray: string;\n EALightBlue: string;\n EADisabled: string;\n EALightPurple: string;\n EALilac: string;\n accessCodeBox: string;\n twitterBlue: string;\n facebookBlue: string;\n whatsappGreen: string;\n discordBlue: string;\n yellow: string;\n errorRed: string;\n };\n sidebar: {\n backgroundColor: string;\n color: string;\n logoColor: string;\n hoverState: string;\n navSelected: {\n background: string;\n backgroundSize: string;\n boxShadow: string;\n };\n };\n cookieBanner: {\n backgroundColor: string;\n border: string;\n };\n mobileHeader: {\n backgroundColor: string;\n selectedTabBackground: string;\n selectedTabColor: string;\n tabColor: string;\n };\n styles: {\n defaultHoverOpacity: number;\n hoverEaseInOut: string;\n defaultBoxShadow: string;\n roundedBodyBoxShadow: string;\n borderRadiusXxs: number;\n borderRadiusXs: number;\n borderRadiusSm: number;\n borderRadiusMd: number;\n borderRadiusLg: number;\n skeleton: {\n color: (theme: Theme) => string;\n animation: any;\n };\n headerOverlay: {\n backgroundImage: string;\n opacity: number;\n };\n dropdownBorder: string;\n borderBottom: string;\n leaderboardBorderBottom: string;\n borderBottomColor: string;\n boxShadowColour: string;\n cssImportant: string;\n transparentBg: string;\n transparentButton: string;\n popoverBackground: string;\n };\n layout: {\n sidebarWidth: number;\n defaultPageSectionMaxWidth: number;\n scrollbarWidth: number;\n toolBarHeight: number;\n };\n }\n}\n\nexport const fonts = {\n primary: \"ElectronicArtsDisplay, Helvetica, sans-serif\",\n secondary: \"ElectronicArtsText, Helvetica, sans-serif\",\n};\n\nexport const fontTypes: IFontTypes = {\n bold: {\n fontFamily: fonts.primary,\n fontWeight: 700,\n },\n book: {\n fontFamily: fonts.secondary,\n fontWeight: 300,\n },\n regular: {\n fontFamily: fonts.secondary,\n fontWeight: 400,\n },\n mediumItalic: {\n fontFamily: fonts.secondary,\n fontWeight: 500,\n fontStyle: \"italic\",\n },\n};\n\nexport const layout = {\n sidebarWidth: 80,\n defaultPageSectionMaxWidth: 1440,\n hubV3MaxWidth: 1693,\n scrollbarWidth: 7,\n toolBarHeight: 60,\n mobileTopInset: 70,\n};\n\nexport const getDesktopToolbarSpacing = (theme: Theme) => {\n return {\n horizontal: theme.spacing(2),\n vertical: theme.spacing(2),\n height: 48,\n };\n};\n\nexport const paCar1Colour = \"#19caf8\";\nexport const paCar2Colour = \"#f3d03d\";\nexport const paScrubberDefaultColour = \"#F2F2F2\";\nexport const paScrubberDefaultColourHover = \"#F2F2F2\";\n\nexport const f1ConstructorColors = {\n redBull: \"#001A30\",\n haas: \"#000\",\n ferrari: \"#E1251B\",\n mcLaren: \"#231F20\",\n mercedes: \"#000\",\n astonMartin: \"#005850\",\n alpine: \"#0C1D2C\",\n sauber: \"#000\",\n alphaTauri: \"#1D43D8\",\n williams: \"#041E42\",\n};\n\n// Keep for Canvas.tsx, Track.tsx.\nexport const stats_orange = \"#e39b26\";\nexport const lightWhite = \"#FFFFFF\";\nexport const lightGrey = \"#e6e6e6\";\n\nconst baseTheme: Theme = responsiveFontSizes(\n createTheme({\n palette: {\n common: {\n white: \"#F2F2F2\",\n black: \"#000\",\n },\n },\n stats: {\n purple_light: \"#964490\",\n mint: \"#72efdd\",\n red: \"#F7004a\",\n aqua: \"#4EC2CB\",\n pink: \"#c52a96\",\n },\n variants: {\n offWhite: \"#F2F2F2\",\n lightWhite: \"#FFFFFF\",\n lightGrey: \"#e6e6e6\",\n tableHeaderColour: \"#F8F8F8\",\n purple: \"#221421\",\n visualiserBackground: \"#2f222b\",\n green: \"#42ba2e\",\n grey: \"#685767\",\n transparentColour: \"transparent\",\n EAOrange: \"#FF4747\",\n EALightGray: \"#EFEFEF\",\n EACharGray: \"#63666A\",\n EADisabled: \"#908E97\",\n EALightPurple: \"#AFB4F2\",\n EALilac: \"#B0B5F3\",\n EABlue: \"#0D1042\",\n EALightBlue: \"#272C7D\",\n accessCodeBox: \"#2B2D40\",\n twitterBlue: \"#1D9BF0\",\n facebookBlue: \"#1877F2\",\n whatsappGreen: \"#25D366\",\n discordBlue: \"#5865F2\",\n yellow: \"#D0DA46\",\n errorRed: \"#CB1F1F\",\n },\n sidebar: {\n backgroundColor: \"#040C1F\",\n color: \"#F2F2F2 !important\",\n logoColor: \"#FF4747\",\n hoverState: \"#161A59\",\n navSelected: {\n //background: \"linear-gradient(72deg, #091329, #0a1a3e)\",\n background: \"#B0B6F4\",\n color: \"#1B2064 !important\",\n backgroundSize: \"100%\",\n /*boxShadow: `\n inset 0px 11px 11px -10px #040c1e,\n inset 0px -11px 11px -10px #040c1e; \n `,*/\n },\n },\n cookieBanner: {\n backgroundColor: \"#1B2064\",\n border: \"#B0B6F4\",\n },\n mobileHeader: {\n backgroundColor: \"#1B2064\",\n selectedTabBackground: \"#B0B6F4\",\n selectedTabColor: \"#131850\",\n tabColor: \"#B0B6F4\",\n },\n styles: {\n defaultHoverOpacity: 0.8,\n hoverEaseInOut: \"all .2s ease-in-out\",\n defaultBoxShadow: `-2px 2px 4px 0px ${fade(\"#221421\", 0.4)}`,\n roundedBodyBoxShadow: `-4px 0px 4px 0px ${fade(\"#221421\", 0.3)}`,\n borderRadiusXxs: 2,\n borderRadiusXs: 4,\n borderRadiusSm: 8,\n borderRadiusMd: 16,\n borderRadiusLg: 32,\n skeleton: {\n color: (theme: Theme) => theme.palette.grey[200],\n animation: \"wave\" as \"wave\",\n },\n headerOverlay: {\n opacity: 0.5,\n backgroundImage: \"linear-gradient(to right, #0D1043 , #1B2064)\",\n },\n borderBottomColor: \"#e0e0e0\",\n boxShadowColour: \"#221421\",\n cssImportant: \" !important\",\n },\n layout: {\n sidebarWidth: 80,\n defaultPageSectionMaxWidth: 1440,\n scrollbarWidth: 7,\n toolBarHeight: 56,\n },\n typography: {\n // Base font size\n // fontSize: 16,\n h1: {\n ...fontTypes.bold,\n },\n h2: {\n ...fontTypes.bold,\n },\n h3: {\n ...fontTypes.bold,\n },\n h4: {\n ...fontTypes.bold,\n },\n h5: {\n ...fontTypes.bold,\n },\n h6: {\n ...fontTypes.bold,\n },\n subtitle1: {\n ...fontTypes.bold,\n },\n subtitle2: {\n ...fontTypes.bold,\n },\n body1: {\n ...fontTypes.regular,\n },\n body2: {\n ...fontTypes.regular,\n },\n p: {\n ...fontTypes.regular,\n },\n button: { ...fontTypes.bold, textTransform: \"none\" },\n caption: {\n ...fontTypes.regular,\n },\n overline: {\n ...fontTypes.regular,\n },\n },\n } as ThemeOptions)\n);\n\n// Extended darkTheme\nconst darkTheme: Theme = createTheme(baseTheme, {\n palette: {\n primary: {\n main: \"#131850\",\n dark: \"#040C1F\",\n light: \"#161A59\",\n contrastText: \"#F2F2F2\",\n },\n secondary: {\n main: \"#131850\",\n dark: \"#131850\",\n light: \"#B0B6F4\",\n contrastText: \"#F2F2F2\",\n },\n info: {\n main: \"#FF4747\",\n light: \"#B0B6F4\",\n dark: \"#161A59\",\n },\n // success: {},\n error: {\n main: \"#CB1F1F\",\n },\n // warning: {},\n background: {\n default: \"#0D1043\",\n paper: \"#1B2064\",\n },\n text: {\n primary: \"#FF4747\",\n secondary: \"#F2F2F2\",\n disabled: \"#B0B6F4\",\n },\n },\n styles: {\n dropdownBorder: \"#B0B6F4\",\n borderBottom: \"1px solid #B0B6F4\",\n leaderboardBorderBottom: `0.5px solid #131850`,\n transparentBg: \"#fff\",\n transparentButton: \"#0D1043\",\n popoverBackground: \"rgba(21, 22, 31, 0.6)\",\n },\n stats: {\n purple: \"#872ae6\",\n blue: \"#19caf8\",\n green: \"#75d054\",\n orange: \"#ff7800\",\n },\n overrides: {\n MuiListItemIcon: {\n root: {\n color: \"#F2F2F2\",\n },\n },\n MuiToolbar: {\n root: {\n height: layout.toolBarHeight,\n minHeight: layout.toolBarHeight + \"!important\",\n },\n },\n },\n});\n\n// Extended lightTheme\nconst lightTheme: Theme = createTheme(baseTheme, {\n palette: {\n primary: {\n main: \"#131850\",\n dark: \"#040C1F\",\n light: \"#E6E6E6\", // grey\n contrastText: \"#F2F2F2\",\n },\n secondary: {\n main: \"#E6E6E6\", // grey\n // main: \"#685767\",\n light: \"#EEEEEE\",\n dark: \"#040C1F\",\n contrastText: \"#685767\",\n },\n info: {\n main: \"#FF4747\",\n light: \"#685767\",\n dark: \"#161A59\",\n },\n // success: {},\n // error: {},\n // warning: {},\n background: {\n default: \"#0D1043\",\n paper: \"#F2F2F2\",\n },\n text: {\n primary: \"#040C1F\",\n // secondary: \"#131850\",\n secondary: \"#040C1F\",\n disabled: \"#685767\",\n },\n },\n styles: {\n dropdownBorder: \"#040C1F\",\n borderBottom: \"1px solid #E0E0E0\",\n leaderboardBorderBottom: `0.5px solid #E0E0E0`,\n transparentBg: \"#0D1043\",\n transparentButton: \"#fff\",\n },\n stats: {\n purple: \"#7400b8\",\n blue: \"#4ea8de\",\n orange: \"#e39b26\",\n green: \"#75D054\",\n },\n overrides: {\n MuiListItemIcon: {\n root: {\n color: \"F2F2F2\",\n },\n },\n MuiToolbar: {\n root: {\n height: layout.toolBarHeight,\n minHeight: layout.toolBarHeight + \"!important\",\n },\n },\n },\n});\n\nexport { lightTheme, darkTheme };\n\nexport type StyleGuideVariant = \"v1\" | \"v2\";\n\nconst grey = \"#1D2033\";\nconst richGrey = \"#272C40\";\nconst richBlack = \"#141724\";\nconst white = \"#FFFFFF\";\nconst whiteHover = \"#EAEAEA\";\nconst offWhite = \"#CCCCCC\";\nconst black = \"#000\";\nconst periwinkle = \"#C0C1DB\";\nconst coral = \"#FF4747\";\nconst coralHover = \"#DC2929\";\nconst blue = \"#3471E9\";\nconst blueHover = \"#1A53C4\";\nconst blueSelected = \"#2A62CE\";\nconst inputGrey = \"#797A9E\";\nconst inputBlack = \"#111427\";\nconst textDark = \"#141724\";\nconst darkerBlack = \"#0B0E15\";\nconst transparent = \"transparent\";\nconst disabledBg = \"#636270\";\nconst disabledText = \"#29292E\";\nconst gold = \"#DCBE55\";\nconst silver = \"#8A97A4\";\nconst bronze = \"#8C5D35\";\nconst red = \"#CB1F1F\";\nconst green = \"#5EC61B\";\nconst lightGreen = \"#75d054\";\nconst yellow = \"##FCEE21\";\n\nconst EADisplayFont = \"ElectronicArtsDisplay, Helvetica, sans-serif\";\nexport const EATextFont = \"ElectronicArtsText, Helvetica, sans-serif\";\n\nconst buttonStyles: IStyles = {\n fontFamily: EADisplayFont,\n fontWeight: 700,\n fontSize: 13,\n letterSpacing: 1.3,\n textTransform: \"uppercase\",\n margin: 0,\n cursor: \"pointer\",\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n lineHeight: 1,\n};\n\n//New style guide theme\nexport const styleGuide = {\n color: {\n grey: grey,\n richBlack: richBlack,\n richGrey: richGrey,\n white: white,\n whiteHover: whiteHover,\n black: black,\n periwinkle: periwinkle,\n coral: coral,\n coralHover: coralHover,\n blue: blue,\n blueHover: blueHover,\n blueSelected: blueSelected,\n inputGrey: inputGrey,\n textDark: textDark,\n inputBlack: inputBlack,\n darkerBlack: darkerBlack,\n transparent: transparent,\n disabledBg: disabledBg,\n disabledText: disabledText,\n paCar1Colour: paCar1Colour,\n paCar2Colour: paCar2Colour,\n gold: gold,\n silver: silver,\n bronze: bronze,\n red: red,\n green: green,\n lightGreen: lightGreen,\n offWhite: offWhite,\n yellow: yellow,\n },\n variant: {\n EADisabled: \"#908E97\",\n greenBg: \"#42ba2e\",\n yellowBg: \"#D0DA46\",\n },\n typography: {\n titleXL: {\n fontFamily: EADisplayFont,\n fontWeight: 700,\n fontSize: 56,\n color: white,\n lineHeight: 1.4,\n margin: 0,\n },\n title: {\n fontFamily: EADisplayFont,\n fontWeight: 700,\n fontSize: 40,\n color: white,\n lineHeight: 1.4,\n margin: 0,\n },\n heading: {\n fontFamily: EADisplayFont,\n fontWeight: 700,\n fontSize: 24,\n color: white,\n lineHeight: 1.1,\n margin: 0,\n },\n subHeading: {\n fontFamily: EADisplayFont,\n fontWeight: 700,\n fontSize: 20,\n color: white,\n lineHeight: 1.1,\n },\n heading3: {\n fontFamily: EATextFont,\n fontWeight: 400,\n fontSize: 20,\n color: white,\n lineHeight: 1.1,\n },\n copy: {\n fontFamily: EATextFont,\n fontWeight: 400,\n fontSize: 16,\n color: white,\n lineHeight: 1.1,\n },\n copyText: {\n fontFamily: EATextFont,\n fontWeight: 400,\n fontSize: 16,\n color: white,\n lineHeight: 1.2,\n },\n input: {\n fontFamily: EATextFont,\n fontWeight: 400,\n fontSize: 16,\n color: white,\n lineHeight: 1.1,\n },\n caption: {\n fontFamily: EATextFont,\n fontWeight: 400,\n fontSize: 12,\n color: white,\n lineHeight: 1.1,\n },\n button: {\n ...buttonStyles,\n },\n },\n breakpoints: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n },\n fontTypes: {\n bold: {\n fontWeight: 700,\n },\n regular: {\n fontWeight: 400,\n },\n },\n button: {\n regular: {\n default: {\n ...buttonStyles,\n backgroundColor: coral,\n color: white,\n height: 33,\n border: `2px solid ${coral}`,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: coral,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n height: 49,\n border: `2px solid ${coral}`,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: coral,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n height: 50,\n border: `2px solid ${coral}`,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: coralHover,\n color: \"#EAEAEA\",\n border: `2px solid ${coralHover}`,\n },\n inactive: {\n backgroundColor: \"#636270\",\n color: \"#29292E\",\n border: `2px solid #636270`,\n cursor: \"default\",\n },\n },\n outlinedPrimary: {\n default: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${coral}`,\n color: white,\n height: 33,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${coral}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 49,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${coral}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 50,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: coralHover,\n border: `2px solid ${coralHover}`,\n color: \"#EAEAEA\",\n },\n inactive: {\n backgroundColor: \"transparent\",\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n outlinedSecondary: {\n default: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${white}`,\n color: white,\n height: 33,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${white}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 49,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${white}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 50,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: white,\n border: `2px solid ${white}`,\n color: \"#14152E\",\n },\n inactive: {\n backgroundColor: \"transparent\",\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n outlinedBlue: {\n default: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${blue}`,\n color: white,\n height: 33,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 49,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 50,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n },\n inactive: {\n backgroundColor: \"transparent\",\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n segmented: {\n default: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n height: 33,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 49,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 50,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: blueHover,\n border: `2px solid ${blueHover}`,\n color: \"#EAEAEA\",\n },\n inactive: {\n backgroundColor: \"transparent\",\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n pill: {\n default: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n height: 33,\n borderRadius: 18,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 44,\n borderRadius: 25,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: blue,\n border: `2px solid ${blue}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 44,\n borderRadius: 25,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: blueHover,\n border: `2px solid ${blueHover}`,\n color: white,\n },\n inactive: {\n backgroundColor: blue,\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n dialogSelector: {\n default: {\n ...buttonStyles,\n backgroundColor: richBlack,\n border: `2px solid ${richBlack}`,\n color: white,\n height: 33,\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: richBlack,\n border: `2px solid ${richBlack}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 44,\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: richBlack,\n border: `2px solid ${richBlack}`,\n color: white,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n textTransform: \"uppercase\",\n height: 44,\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: white,\n border: `2px solid ${white}`,\n color: richBlack,\n boxShadow: `0 0 8px ${periwinkle}BF`,\n },\n inactive: {\n backgroundColor: richBlack,\n border: `2px solid #636270`,\n color: \"#636270\",\n cursor: \"default\",\n },\n },\n link: {\n default: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n color: coral,\n height: 33,\n border: \"none\",\n borderRadius: 8,\n minWidth: 140,\n padding: \"0 24px\",\n },\n jumbo: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n color: coral,\n fontFamily: EADisplayFont,\n fontSize: 18,\n fontWeight: 700,\n height: 49,\n border: \"none\",\n borderRadius: 8,\n minWidth: 220,\n padding: \"0 32px\",\n letterSpacing: 1,\n },\n mobile: {\n ...buttonStyles,\n backgroundColor: \"transparent\",\n color: coral,\n fontFamily: EADisplayFont,\n fontSize: 16,\n fontWeight: 700,\n height: 50,\n border: \"none\",\n borderRadius: 8,\n width: \"100%\",\n padding: \"0 12px\",\n letterSpacing: 0.8,\n },\n hover: {\n backgroundColor: \"none\",\n color: coralHover,\n border: \"none\",\n },\n inactive: {\n backgroundColor: \"none\",\n color: \"#29292E\",\n border: \"none\",\n cursor: \"default\",\n },\n },\n },\n popoverBackground: {\n backgroundColor: `${richBlack}80`, //50% opacity\n },\n borderRadius: 8,\n boxShadow: {\n white: `0 0 8px ${periwinkle}BF`,\n },\n transitions: {\n hoverEaseInOut: \"all .2s ease-in-out\",\n },\n spacing: (value: number = 1) => value * 8,\n};\n","import Platforms from \"common/enums/PlatformsEnum\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport { trimEndSlash } from \"utils/urlHelper\";\n\nexport const mobileAppUserAgent = \"RaceNetMobileApp\";\nexport const tabletAppUserAgent = \"RaceNetTabletApp\";\n\nconst getBasePath = () => {\n try {\n return document.getElementsByTagName(\"base\")[0].getAttribute(\"href\") ?? \"/\";\n } catch (e) {\n return \"/\";\n }\n};\n\nexport const MAX_SEARCH_FRIENDS_CHARACTERS = 15;\nexport const DEBOUNCE_SEARCH_MS = 900;\n\nconst origin = document.location.origin;\n\nexport const settings = {\n basePath: getBasePath(),\n appUrl: origin,\n apiUrl: \"/\",\n cachingDuration: 30,\n};\n\nexport const gameHubUrls = {\n dirtrally: \"/dirtRally\",\n dirtrally2: \"/dirtRally2\",\n dirt5: \"/dirt5\",\n f1_2021: \"/f1_2021\",\n f1_2022: \"/f1_22\",\n f1_2023: \"/f1_23\",\n f1_2024: \"/f1_24\",\n f1_2025: \"/f1_25\",\n gridLegends: \"/gridLegends\",\n wrc2023: \"/ea_sports_wrc\",\n};\n\nexport const dirtRallyLeaguesUrl = (websiteUrl: string) => `${trimEndSlash(websiteUrl)}/us/leagues`;\nexport const dirtRally2ClubsUrl = (websiteUrl: string) => `${trimEndSlash(websiteUrl)}/clubs`;\n\nexport const routingUrls = {\n landing: \"/\",\n landingWRC: \"/wrc\",\n landingF12023: \"/f12023\",\n appStoreRedirect: \"/app_store_redirect\",\n notificationCenter: \"/notifications\",\n home: \"/home\",\n profile: \"/profile\",\n activityFeed: \"/activityFeed\",\n friends: \"/friends\",\n gamesCoach: \"/gamesCoach\",\n preferences: \"/settings\",\n newsFeed: \"/newsFeed\",\n loggedOut: \"\",\n oauthCallback: \"/oauthCallback\",\n games: \"/gamesLibrary\",\n releaseNotes: \"/releaseNotes\",\n faq: \"/faq\",\n dirtRally: {\n root: gameHubUrls.dirtrally,\n community: `${gameHubUrls.dirtrally}/community`,\n events: `${gameHubUrls.dirtrally}/events`,\n telemetry: `${gameHubUrls.dirtrally}/telemetry`,\n friends: `${gameHubUrls.dirtrally}/friends`,\n stats: `${gameHubUrls.dirtrally}/stats`,\n gameInfo: `${gameHubUrls.dirtrally}/gameInfo`,\n },\n dirtRally2: {\n root: gameHubUrls.dirtrally2,\n community: `${gameHubUrls.dirtrally2}/community`,\n stats: `${gameHubUrls.dirtrally2}/stats`,\n friends: `${gameHubUrls.dirtrally2}/friends`,\n performanceAnalysis: `${gameHubUrls.dirtrally2}/performanceanalysis`,\n events: `${gameHubUrls.dirtrally2}/events`,\n gameInfo: `${gameHubUrls.dirtrally2}/gameInfo`,\n },\n dirt5: {\n root: gameHubUrls.dirt5,\n community: `${gameHubUrls.dirt5}/community`,\n friends: `${gameHubUrls.dirt5}/friends`,\n stats: `${gameHubUrls.dirt5}/stats`,\n gameInfo: `${gameHubUrls.dirt5}/info`,\n playgrounds: `${gameHubUrls.dirt5}/playgrounds`,\n },\n f1_2021: {\n root: gameHubUrls.f1_2021,\n stats: `${gameHubUrls.f1_2021}/stats`,\n news: `${gameHubUrls.f1_2021}/news`,\n photos: `${gameHubUrls.f1_2021}/photos`,\n previousEvents: `${gameHubUrls.f1_2021}/previousEvents`,\n currentEvent: `${gameHubUrls.f1_2021}/currentEvents`,\n friends: `${gameHubUrls.f1_2021}/friends`,\n leaderboards: `${gameHubUrls.f1_2021}/leaderboards`,\n performanceAnalysis: `${gameHubUrls.f1_2021}/performanceAnalysis`,\n gameInfo: `${gameHubUrls.f1_2021}/gameInfo`,\n leagues: `${gameHubUrls.f1_2021}/leagues`,\n leaguesSearch: `${gameHubUrls.f1_2021}/leagues/search`,\n league: `${gameHubUrls.f1_2021}/league`,\n leaguesEvents: `${gameHubUrls.f1_2021}/leagues/your_events`,\n yourLeagues: `${gameHubUrls.f1_2021}/leagues/your_leagues`,\n leaguesDiscover: `${gameHubUrls.f1_2021}/leagues/discover`,\n },\n f1_2022: {\n root: gameHubUrls.f1_2022,\n stats: `${gameHubUrls.f1_2022}/stats`,\n news: `${gameHubUrls.f1_2022}/news`,\n photos: `${gameHubUrls.f1_2022}/photos`,\n previousEvents: `${gameHubUrls.f1_2022}/previousEvents`,\n currentEvent: `${gameHubUrls.f1_2022}/currentEvents`,\n friends: `${gameHubUrls.f1_2022}/friends`,\n leaderboards: `${gameHubUrls.f1_2022}/leaderboards`,\n performanceAnalysis: `${gameHubUrls.f1_2022}/performanceAnalysis`,\n gameInfo: `${gameHubUrls.f1_2022}/gameInfo`,\n leagues: `${gameHubUrls.f1_2022}/leagues`,\n leaguesSearch: `${gameHubUrls.f1_2022}/leagues/search`,\n league: `${gameHubUrls.f1_2022}/league`,\n leaguesEvents: `${gameHubUrls.f1_2022}/leagues/your_events`,\n yourLeagues: `${gameHubUrls.f1_2022}/leagues/your_leagues`,\n leaguesDiscover: `${gameHubUrls.f1_2022}/leagues/discover`,\n },\n f1_2023: {\n root: gameHubUrls.f1_2023,\n friends: `${gameHubUrls.f1_2023}/friends`,\n stats: `${gameHubUrls.f1_2023}/stats`,\n performanceAnalysis: `${gameHubUrls.f1_2023}/performanceAnalysis`,\n leaderboards: `${gameHubUrls.f1_2023}/leaderboards`,\n news: `${gameHubUrls.f1_2023}/news`,\n leagues: `${gameHubUrls.f1_2023}/leagues`,\n league: `${gameHubUrls.f1_2023}/leagues/league`,\n leaguesDiscover: `${gameHubUrls.f1_2023}/leagues/discover`,\n leaguesPreferences: `${gameHubUrls.f1_2023}/leagues/preferences`,\n leaguesAdmin: `${gameHubUrls.f1_2023}/leagues/league`,\n leagueHelp: `${gameHubUrls.f1_2023}/leagues/help`,\n redbull: `${gameHubUrls.f1_2023}/red_bull`,\n },\n f1_2024: {\n root: gameHubUrls.f1_2024,\n fanzone: `${gameHubUrls.f1_2024}/fanzone`,\n fanzonesVote: `${gameHubUrls.f1_2024}/fanzone_vote`,\n friends: `${gameHubUrls.f1_2024}/friends`,\n news: `${gameHubUrls.f1_2024}/news`,\n leagues: `${gameHubUrls.f1_2024}/leagues`,\n league: `${gameHubUrls.f1_2024}/leagues/league`,\n leaguesDiscover: `${gameHubUrls.f1_2024}/leagues/discover`,\n leaguesPreferences: `${gameHubUrls.f1_2024}/leagues/preferences`,\n leaguesAdmin: `${gameHubUrls.f1_2024}/leagues/league`,\n leagueHelp: `${gameHubUrls.f1_2024}/leagues/help`,\n redbull: `${gameHubUrls.f1_2024}/red_bull`,\n timeTrial: `${gameHubUrls.f1_2024}/time_trial`,\n },\n f1_2025: {\n root: gameHubUrls.f1_2025,\n fanzone: `${gameHubUrls.f1_2025}/fanzone`,\n fanzonesVote: `${gameHubUrls.f1_2025}/fanzone_vote`,\n friends: `${gameHubUrls.f1_2025}/friends`,\n news: `${gameHubUrls.f1_2025}/news`,\n leagues: `${gameHubUrls.f1_2025}/leagues`,\n league: `${gameHubUrls.f1_2025}/leagues/league`,\n leaguesDiscover: `${gameHubUrls.f1_2025}/leagues/discover`,\n leaguesPreferences: `${gameHubUrls.f1_2025}/leagues/preferences`,\n leaguesAdmin: `${gameHubUrls.f1_2025}/leagues/league`,\n leagueHelp: `${gameHubUrls.f1_2025}/leagues/help`,\n timeTrial: `${gameHubUrls.f1_2025}/time_trial`,\n },\n grid21: {\n root: gameHubUrls.gridLegends,\n stats: `${gameHubUrls.gridLegends}/stats`,\n friends: `${gameHubUrls.gridLegends}/friends`,\n leaderboards: `${gameHubUrls.gridLegends}/leaderboards`,\n news: `${gameHubUrls.gridLegends}/news`,\n leagues: `${gameHubUrls.gridLegends}/leagues`,\n gameInfo: `${gameHubUrls.gridLegends}/gameInfo`,\n events: `${gameHubUrls.gridLegends}/events`,\n },\n wrc2023: {\n root: gameHubUrls.wrc2023,\n clubs: `${gameHubUrls.wrc2023}/clubs`,\n club: `${gameHubUrls.wrc2023}/clubs`,\n clubMembership: `${gameHubUrls.wrc2023}/clubs/membership`,\n friendsClubs: `${gameHubUrls.wrc2023}/clubs/friends`,\n leaderboards: `${gameHubUrls.wrc2023}/leaderboards`,\n friends: `${gameHubUrls.wrc2023}/friends`,\n performanceAnalysis: `${gameHubUrls.wrc2023}/performanceAnalysis`,\n playerStats: `${gameHubUrls.wrc2023}/statistics`,\n playerStatsCompare: `${gameHubUrls.wrc2023}/statistics/compare`,\n playerStatsCareer: `${gameHubUrls.wrc2023}/statistics/career`,\n playerStatsSolo: `${gameHubUrls.wrc2023}/statistics/solo`,\n playerStatsMultiplayer: `${gameHubUrls.wrc2023}/statistics/multiplayer`,\n playerStatsChampionship: `${gameHubUrls.wrc2023}/statistics/championship`,\n playerStatsTimetrial: `${gameHubUrls.wrc2023}/statistics/timetrial`,\n playerStatsMoments: `${gameHubUrls.wrc2023}/statistics/moments`,\n news: `${gameHubUrls.wrc2023}/news`,\n performanceAnalysisClubsMobile: `${gameHubUrls.wrc2023}/performanceAnalysisClubs`,\n },\n errorPages: {\n \"404\": \"/404\",\n },\n};\n\nexport const apiUrls = {\n getApplication: `${settings.apiUrl}api/application`,\n getAntiforgery: `${settings.apiUrl}api/application/antiforgery`,\n getIdentity: `${settings.apiUrl}api/identity`,\n getMobileIdentity: `${settings.apiUrl}api/identity/secured`,\n getGames: `${settings.apiUrl}api/profile/library`,\n gameLibraryAnnouncement: \"/announcements\",\n getStats: `${settings.apiUrl}api/profile/recentlyPlayedGames`,\n postPublicInfo: `${settings.apiUrl}api/preferences/publicInfo`,\n getProfile: `${settings.apiUrl}api/profile`,\n getSocialFeed: `${settings.apiUrl}api/feed/social`,\n getNewsFeed: `${settings.apiUrl}api/feed/news`,\n getReleaseNotes: `${settings.apiUrl}api/common/releaseNotes`,\n getFaq: `${settings.apiUrl}api/common/faq`,\n friends: {\n getFriends: `${settings.apiUrl}api/Friend`,\n getProfileFriends: `${settings.apiUrl}api/Friend/profile`,\n getFriendSearch: `${settings.apiUrl}api/Friend/search`,\n postFriendRequest: (ssid: string) => `${settings.apiUrl}api/Friend/request?friendSSID=${ssid}`,\n putBlockFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/block?friendSSID=${friendSsid}`,\n deleteCancelInviteFriend: (friendSsid: string) =>\n `${settings.apiUrl}api/Friend/cancelinvite?friendSSID=${friendSsid}`,\n putUnblockFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/unblock?friendSSID=${friendSsid}`,\n putAcceptFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/acceptinvite?friendSSID=${friendSsid}`,\n putDeclineFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/declineinvite?friendSSID=${friendSsid}`,\n deleteRemoveFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/remove?friendSSID=${friendSsid}`,\n deleteFriend: (friendSsid: string) => `${settings.apiUrl}api/Friend/remove?friendSSID=${friendSsid}`,\n bulkRequest: `${settings.apiUrl}api/Friend/request/bulk`,\n friendsRecommendations: `${settings.apiUrl}api/Friend/recommendations`,\n friendsByPlatform: `${settings.apiUrl}api/Friend/consolidated`,\n checkFriends: `${settings.apiUrl}api/Friend/checkFriends`,\n },\n identity: {\n getSecuredIdentity: `${settings.apiUrl}api/identity/secured`,\n getAccessToken: `${settings.apiUrl}api/identity/auth`,\n refreshTokens: `${settings.apiUrl}api/identity/refresh-auth`,\n logout: `${settings.apiUrl}api/identity/logout`,\n getWebAcceptanceText: `${settings.apiUrl}api/identity/acceptanceText`,\n postWebAcceptance: (acceptanceId: string) => `${settings.apiUrl}api/identity/acceptance/${acceptanceId}/submit`,\n postOnboarding: `${settings.apiUrl}api/identity/onboarding/submit`,\n postNotificationPreferences: `${settings.apiUrl}api/Identity/pushNotificationPreferences/submit`,\n getLmitedToken: `${settings.apiUrl}api/Identity/limitedToken`,\n },\n preferences: {\n getPreferences: `${settings.apiUrl}api/Preferences`,\n getProfilePictures: `${settings.apiUrl}api/common/profilePitures`,\n getCoverPhotosPictures: `${settings.apiUrl}api/common/coverPhotos`,\n getPlatforms: `${settings.apiUrl}api/common/platforms`,\n postProfilePicture: `${settings.apiUrl}api/preferences/profile-picture`,\n getProfilePicture: `${settings.apiUrl}api/preferences/profile-picture`,\n postCoverPhoto: `${settings.apiUrl}api/preferences/cover-photo`,\n },\n reporting: {\n reportLeagueName: `${settings.apiUrl}api/Reporting/proleagueName`,\n reportWrc2023ClubName: `${settings.apiUrl}api/Reporting/wrc2023ClubName`,\n reportLeagueDescription: `${settings.apiUrl}api/Reporting/proleagueDescription`,\n reportWrc2023ClubDescription: `${settings.apiUrl}api/Reporting/wrc2023ClubDescription`,\n reportPlayerName: `${settings.apiUrl}api/Reporting/playerName`,\n },\n dirtRally: {\n getPlayerStats: `${settings.apiUrl}api/statistics/rp11/player/stats`,\n getPlayerTrackResults: `${settings.apiUrl}api/statistics/rp11/player/trackResults`,\n getPlayerActivity: `${settings.apiUrl}api/statistics/rp11/player/recentActivity`,\n getPlayer: `${settings.apiUrl}api/statistics/rp11/player`,\n getPlayerRacedTrackLocationsWithDisciplines: `${settings.apiUrl}api/statistics/rp11/player/racedTracks`,\n getVehicleClasses: `${settings.apiUrl}api/statistics/rp11/vehicleClasses`, // *** TO DO ***\n getFriendsWithPlatforms: `${settings.apiUrl}api/statistics/rp11/platformFriends`,\n getFriends: `${settings.apiUrl}api/statistics/rp11/friends`,\n getCommunityStats: `${settings.apiUrl}api/statistics/rp11/community`,\n getfriendLeaderboard: `${settings.apiUrl}api/statistics/rp11/friendsLeaderboard`,\n getEvents: `${settings.apiUrl}api/statistics/rp11/events`,\n getEventLeaderboard: `${settings.apiUrl}api/statistics/rp11/events/leaderboard`,\n },\n dirt5: {\n getPlayer: `${settings.apiUrl}api/statistics/cp2/player`,\n getPlayerStats: `${settings.apiUrl}api/statistics/cp2/player/stats`,\n getFriendsWithPlatforms: `${settings.apiUrl}api/statistics/cp2/platformFriends`,\n getFriends: `${settings.apiUrl}api/statistics/cp2/friends`,\n getRecentActivity: `${settings.apiUrl}api/statistics/cp2/player/recentActivity`,\n getTracks: `${settings.apiUrl}api/statistics/cp2/tracks`,\n getRacedTracks: `${settings.apiUrl}api/statistics/cp2/player/racedTracks`,\n getRacedVehicleClasses: `${settings.apiUrl}api/statistics/cp2/player/racedClasses`,\n getVehicleClasses: `${settings.apiUrl}api/statistics/cp2/vehicleClasses`,\n getTrackResults: `${settings.apiUrl}api/statistics/cp2/trackResults`,\n getFriendsLeaderboard: `${settings.apiUrl}api/statistics/cp2/friendLeaderboards`,\n getCommunityStats: `${settings.apiUrl}api/statistics/cp2/community/stats`,\n getPlaygrounds: `${settings.apiUrl}api/statistics/cp2/playgrounds`,\n getPlayground: (playgroundId: string) => `${settings.apiUrl}api/statistics/cp2/playgrounds/${playgroundId}`,\n postPinPlayground: (playgroundId: string) =>\n `${settings.apiUrl}api/statistics/cp2/playgrounds/${playgroundId}/pin`,\n postUnpinPlayground: (playgroundId: string) =>\n `${settings.apiUrl}api/statistics/cp2/playgrounds/${playgroundId}/unpin`,\n getPlaygroundTags: `${settings.apiUrl}api/statistics/cp2/playgrounds/tags`,\n getRacenetRecommendedPlaygrounds: `${settings.apiUrl}api/statistics/cp2/playgrounds/recommended/racenet`,\n getSimilarPlaygrounds: `${settings.apiUrl}api/statistics/cp2/playgrounds/recommended/similar`,\n getGateCrasherRecommendedPlaygrounds: `${settings.apiUrl}api/statistics/cp2/playgrounds/recommended/gateCrasher`,\n getPlaygroundLeaderboard: (playgroundId: string) =>\n `${settings.apiUrl}api/statistics/cp2/playgrounds/leaderboard/${playgroundId}`,\n getPlaygroundAroundPlayerLeaderboard: (playgroundId: string) =>\n `${settings.apiUrl}api/statistics/cp2/playgrounds/leaderboard/${playgroundId}/aroundPlayer`,\n getPlaygroundCreativeIdeas: `${settings.apiUrl}api/statistics/cp2/playgrounds/creativeIdeas`,\n getPlayerPinnedPlaygrounds: `${settings.apiUrl}api/statistics/cp2/playgrounds/pinned`,\n },\n dirtRally2: {\n getPlayer: `${settings.apiUrl}api/statistics/rp17/player`,\n getPlayerStats: `${settings.apiUrl}api/statistics/rp17/player/stats`,\n getFriendsWithPlatforms: `${settings.apiUrl}api/statistics/rp17/platformFriends`,\n getFriends: `${settings.apiUrl}api/statistics/rp17/friends`,\n getRecentActivity: `${settings.apiUrl}api/statistics/rp17/player/recentActivity`,\n getCommunityStats: `${settings.apiUrl}api/statistics/rp17/community/stats`,\n getPlayerGarageStats: `${settings.apiUrl}api/statistics/rp17/player/garage`,\n getPlayerRacedTracks: `${settings.apiUrl}api/statistics/rp17/player/racedTracks`,\n getRacedVehicleClasses: `${settings.apiUrl}api/statistics/rp17/player/racedClasses`,\n getCommunityChallenges: `${settings.apiUrl}api/statistics/rp17/community/challenges`,\n getTrackResults: `${settings.apiUrl}api/statistics/rp17/player/trackResults`,\n getCombinedFriendsLeaderboard: `${settings.apiUrl}api/statistics/rp17/combinedFriendsLeaderboard`,\n getFriendsLeaderboard: `${settings.apiUrl}api/statistics/rp17/friendsLeaderboard`,\n getCommunityLeaderboard: `${settings.apiUrl}api/statistics/rp17/community/leaderboard`,\n },\n F12021: {\n getPlayer: `${settings.apiUrl}api/F12021Stats/player`,\n getFriendsWithPlatform: `${settings.apiUrl}api/F12021Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/F12021Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/F12021Stats/player/stats`,\n getValues: `${settings.apiUrl}api/F12021Stats/values`,\n getLeaderboard: `${settings.apiUrl}api/F12021Stats/leaderboard`,\n getLeaderboardSummary: `${settings.apiUrl}api/F12021Stats/leaderboardSummary`,\n getPlayerRacedTracks: `${settings.apiUrl}api/F12021Stats/player/racedTracks`,\n getEvents: `${settings.apiUrl}api/F12021Stats/events`,\n getEventLeaderboards: `${settings.apiUrl}api/F12021Stats/events/leaderboard/`,\n getPerformanceAnalysisPlayer: `${settings.apiUrl}api/F12021Stats/performanceAnalysis/player`,\n getPerformanceAnalysisFriends: `${settings.apiUrl}api/F12021Stats/performanceAnalysis/friends`,\n getPerformanceAnalysisSpline: `${settings.apiUrl}api/F12021Stats/performanceAnalysis/spline`,\n getPerformanceAnalysisGhost: `${settings.apiUrl}api/F12021Stats/performanceAnalysis/ghost`,\n getPhotosOfWeek: `${settings.apiUrl}api/F12021Stats/photosOfWeek`,\n getNews: `${settings.apiUrl}api/F12021Stats/news`,\n },\n F12022: {\n getPlayer: `${settings.apiUrl}api/F122Stats/player`,\n getFriendsWithPlatform: `${settings.apiUrl}api/F122Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/F122Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/F122Stats/player/stats`,\n getValues: `${settings.apiUrl}api/F122Stats/values`,\n getLeaderboard: `${settings.apiUrl}api/F122Stats/leaderboard`,\n getEvents: `${settings.apiUrl}api/F122Stats/events`,\n getEventLeaderboards: `${settings.apiUrl}api/F122Stats/events/leaderboard/`,\n getPhotosOfWeek: `${settings.apiUrl}api/F122Stats/photosOfWeek`,\n getNews: `${settings.apiUrl}api/F122Stats/news`,\n getPerformanceAnalysisPlayer: `${settings.apiUrl}api/F122Stats/performanceAnalysis/player`,\n getPerformanceAnalysisFriends: `${settings.apiUrl}api/F122Stats/performanceAnalysis/friends`,\n getPerformanceAnalysisSpline: `${settings.apiUrl}api/F122Stats/performanceAnalysis/spline`,\n getPerformanceAnalysisGhost: `${settings.apiUrl}api/F122Stats/performanceAnalysis/ghost`,\n getLeaderboardVersion: `${settings.apiUrl}api/F122Stats/leaderboard/version`,\n getPlayerRacedTracks: `${settings.apiUrl}api/F122Stats/player/racedTracks`,\n },\n F12023: {\n getPlayer: `${settings.apiUrl}api/F123Stats/player`,\n getFriendsWithPlatform: `${settings.apiUrl}api/F123Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/F123Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/F123Stats/player/stats`,\n getValues: `${settings.apiUrl}api/F123Stats/values`,\n getLeaderboard: `${settings.apiUrl}api/F123Stats/leaderboard`,\n getNews: `${settings.apiUrl}api/F123Stats/news`,\n getPerformanceAnalysisPlayer: `${settings.apiUrl}api/F123Stats/performanceAnalysis/player`,\n getPerformanceAnalysisFriends: `${settings.apiUrl}api/F123Stats/performanceAnalysis/friends`,\n getPerformanceAnalysisSpline: `${settings.apiUrl}api/F123Stats/performanceAnalysis/spline`,\n getPerformanceAnalysisGhost: `${settings.apiUrl}api/F123Stats/performanceAnalysis/ghost`,\n getLeaderboardVersion: `${settings.apiUrl}api/F123Stats/leaderboard/version`,\n getPlayerRacedTracks: `${settings.apiUrl}api/F123Stats/player/racedTracks`,\n getLeaderboardSummary: `${settings.apiUrl}api/F123Stats/player/leaderboardSummary`,\n getAnnouncements: `${settings.apiUrl}api/F123Stats/announcements`,\n },\n F12023Redbull: {\n getRedbullEventWinnersOfTheWeek: (weekId: string) =>\n `${settings.apiUrl}api/F123Stats/events/redbull/weeks/${weekId}/winners`,\n getRedbullEventWeeks: `${settings.apiUrl}api/F123Stats/events/redbull/weeks`,\n getRedbullEventLeaderboard: (weekId: string) =>\n `${settings.apiUrl}api/F123Stats/events/redbull/weeks/${weekId}/leaderboard`,\n getRedbullEventLeaderboardPlayerEntry: (weekId: string) =>\n `${settings.apiUrl}api/F123Stats/events/redbull/weeks/${weekId}/leaderboard/playerEntry`,\n postSignUpForRedbullEvent: `${settings.apiUrl}api/F123Stats/events/redbull/sign-up`,\n getIsUserSignedUp: `${settings.apiUrl}api/F123Stats/events/redbull/isSignedIn`,\n },\n F12023ProChallenges: {\n getProChallenges: `${settings.apiUrl}api/F123Stats/prochallenges`,\n getProChallengesGhostData: (id: number) => `${settings.apiUrl}api/F123Stats/prochallenges/${id}/ghostdata`,\n },\n F12024: {\n getPlayer: `${settings.apiUrl}api/F124Stats/player`,\n getFanzones: `${settings.apiUrl}api/F124Stats/fanzones`,\n getFanzonesVotes: `${settings.apiUrl}api/F124Stats/fanzones/votes`,\n fanzonesVote: (voteId: number) => `${settings.apiUrl}api/F124Stats/fanzones/votes/${voteId}`,\n getFriendsWithPlatform: `${settings.apiUrl}api/F124Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/F124Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/F124Stats/player/stats`,\n getValues: `${settings.apiUrl}api/F124Stats/values`,\n getLeaderboard: `${settings.apiUrl}api/F124Stats/leaderboard`,\n getNews: `${settings.apiUrl}api/F124Stats/news`,\n getPerformanceAnalysisPlayer: `${settings.apiUrl}api/F124Stats/performanceAnalysis/player`,\n getPerformanceAnalysisFriends: `${settings.apiUrl}api/F124Stats/performanceAnalysis/friends`,\n getPerformanceAnalysisSpline: `${settings.apiUrl}api/F124Stats/performanceAnalysis/spline`,\n getPerformanceAnalysisGhost: `${settings.apiUrl}api/F124Stats/performanceAnalysis/ghost`,\n getLeaderboardVersion: `${settings.apiUrl}api/F124Stats/leaderboard/version`,\n getPlayerRacedTracks: `${settings.apiUrl}api/F124Stats/player/racedTracks`,\n getLeaderboardSummary: `${settings.apiUrl}api/F124Stats/player/leaderboardSummary`,\n getAnnouncements: `${settings.apiUrl}api/F124Stats/announcements`,\n },\n F12024Redbull: {\n getRedbullEventWinnersOfTheWeek: (weekId: string) =>\n `${settings.apiUrl}api/F124Stats/events/redbull/weeks/${weekId}/winners`,\n getRedbullEventWeeks: `${settings.apiUrl}api/F124Stats/events/redbull/weeks`,\n getRedbullEventLeaderboard: (weekId: string) =>\n `${settings.apiUrl}api/F124Stats/events/redbull/weeks/${weekId}/leaderboard`,\n getRedbullEventLeaderboardPlayerEntry: (weekId: string) =>\n `${settings.apiUrl}api/F124Stats/events/redbull/weeks/${weekId}/leaderboard/playerEntry`,\n postSignUpForRedbullEvent: `${settings.apiUrl}api/F124Stats/events/redbull/sign-up`,\n getIsUserSignedUp: `${settings.apiUrl}api/F124Stats/events/redbull/isSignedIn`,\n },\n F12024ProChallenges: {\n getProChallenges: `${settings.apiUrl}api/F124Stats/prochallenges`,\n getProChallengesGhostData: (id: number) => `${settings.apiUrl}api/F124Stats/prochallenges/${id}/ghostdata`,\n },\n F12025: {\n getPlayer: `${settings.apiUrl}api/F125Stats/player`,\n getFanzones: `${settings.apiUrl}api/F125Stats/fanzones`,\n getFanzonesVotes: `${settings.apiUrl}api/F125Stats/fanzones/votes`,\n fanzonesVote: (voteId: number) => `${settings.apiUrl}api/F125Stats/fanzones/votes/${voteId}`,\n getFriendsWithPlatform: `${settings.apiUrl}api/F125Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/F125Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/F125Stats/player/stats`,\n getValues: `${settings.apiUrl}api/F125Stats/values`,\n getLeaderboard: `${settings.apiUrl}api/F125Stats/leaderboard`,\n getNews: `${settings.apiUrl}api/F125Stats/news`,\n getPerformanceAnalysisPlayer: `${settings.apiUrl}api/F125Stats/performanceAnalysis/player`,\n getPerformanceAnalysisFriends: `${settings.apiUrl}api/F125Stats/performanceAnalysis/friends`,\n getPerformanceAnalysisSpline: `${settings.apiUrl}api/F125Stats/performanceAnalysis/spline`,\n getPerformanceAnalysisGhost: `${settings.apiUrl}api/F125Stats/performanceAnalysis/ghost`,\n getLeaderboardVersion: `${settings.apiUrl}api/F125Stats/leaderboard/version`,\n getPlayerRacedTracks: `${settings.apiUrl}api/F125Stats/player/racedTracks`,\n getLeaderboardSummary: `${settings.apiUrl}api/F125Stats/player/leaderboardSummary`,\n getAnnouncements: `${settings.apiUrl}api/F125Stats/announcements`,\n },\n F12025ProChallenges: {\n getProChallenges: `${settings.apiUrl}api/F125Stats/prochallenges`,\n getProChallengesGhostData: (id: number) => `${settings.apiUrl}api/F125Stats/prochallenges/${id}/ghostdata`,\n },\n F12021InGameLeagues: {\n getMemberships: `${settings.apiUrl}api/F12021InGameLeagues/memberships`,\n getRecommendedLeagues: `${settings.apiUrl}api/F12021InGameLeagues/recommended-leagues`,\n getEvents: `${settings.apiUrl}api/F12021InGameLeagues/events`,\n searchLeagues: `${settings.apiUrl}api/F12021InGameLeagues/search-leagues`,\n getLeague: `${settings.apiUrl}api/F12021InGameLeagues/leagues`,\n getSeasonResults: `${settings.apiUrl}api/F12021InGameLeagues/season-results`,\n getFriendsLeagues: `${settings.apiUrl}api/F12021InGameLeagues/friend-leagues`,\n getBeginnerLeagues: `${settings.apiUrl}api/F12021InGameLeagues/leagues-beginner`,\n getIntermediateLeagues: `${settings.apiUrl}api/F12021InGameLeagues/leagues-intermediate`,\n getExpertLeagues: `${settings.apiUrl}api/F12021InGameLeagues/leagues-expert`,\n getBeginnerLeaguesDiscover: `${settings.apiUrl}api/F12021InGameLeagues/leagues-beginner-discover`,\n getIntermediateLeaguesDiscover: `${settings.apiUrl}api/F12021InGameLeagues/leagues-intermediate-discover`,\n getExpertLeaguesDiscover: `${settings.apiUrl}api/F12021InGameLeagues/leagues-expert-discover`,\n },\n F12022InGameLeagues: {\n getMemberships: `${settings.apiUrl}api/F122InGameLeagues/memberships`,\n getRecommendedLeagues: `${settings.apiUrl}api/F122InGameLeagues/recommended-leagues`,\n getEvents: `${settings.apiUrl}api/F122InGameLeagues/events`,\n searchLeagues: `${settings.apiUrl}api/F122InGameLeagues/search-leagues`,\n getLeague: `${settings.apiUrl}api/F122InGameLeagues/leagues`,\n getSeasonResults: `${settings.apiUrl}api/F122InGameLeagues/season-results`,\n getFriendsLeagues: `${settings.apiUrl}api/F122InGameLeagues/friend-leagues`,\n getBeginnerLeagues: `${settings.apiUrl}api/F122InGameLeagues/leagues-beginner`,\n getIntermediateLeagues: `${settings.apiUrl}api/F122InGameLeagues/leagues-intermediate`,\n getExpertLeagues: `${settings.apiUrl}api/F122InGameLeagues/leagues-expert`,\n getBeginnerLeaguesDiscover: `${settings.apiUrl}api/F122InGameLeagues/leagues-beginner-discover`,\n getIntermediateLeaguesDiscover: `${settings.apiUrl}api/F122InGameLeagues/leagues-intermediate-discover`,\n getExpertLeaguesDiscover: `${settings.apiUrl}api/F122InGameLeagues/leagues-expert-discover`,\n },\n proLeagues: {\n getValues: `${settings.apiUrl}api/ProLeagues/values`,\n createLeague: `${settings.apiUrl}api/Proleagues`,\n getMemberships: `${settings.apiUrl}api/ProLeagues/memberships`,\n getLeague: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}`,\n createSeason: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/seasons`,\n getTieringTracks: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/TieringTracks`,\n getTieringTimes: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/TieringTimes`,\n getUserPriorities: `${settings.apiUrl}api/ProLeagues/user/priorities`,\n editUserPriorities: `${settings.apiUrl}api/ProLeagues/user/priorities`,\n getAvailableDrivers: `${settings.apiUrl}api/ProLeagues/AvailableDrivers`,\n getCanUserVote: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/CanUserVote`,\n addUpvote: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/UpVote`,\n addDownvote: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/DownVote`,\n editLeagueSettings: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/editableSettings`,\n editLeagueSeasonSettings: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/seasonSettings`,\n searchLeagues: `${settings.apiUrl}api/ProLeagues/SearchLeagues`,\n joinLeague: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/join`,\n setTiers: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/tiers`,\n getTiersCount: (seasonId: number) => `${settings.apiUrl}api/ProLeagues/${seasonId}/tiersCount`,\n validateLeagueName: `${settings.apiUrl}api/ProLeagues/validateName`,\n validateLeagueDescription: `${settings.apiUrl}api/ProLeagues/validateDescription`,\n editWeekendStructure: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/weekendstructure`,\n getCurrentSeasonPastEvents: (leagueId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/currentSeason/pastEvents`,\n getCurrentSeasonUpcomingEvents: (leagueId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/currentSeason/upcomingEvents`,\n assistsProfile: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/assistsProfile`,\n assistsProfileById: `${settings.apiUrl}api/ProLeagues/member/assists`,\n seasonEnroll: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/currentSeason/enroll`,\n joinLeagueAndEnrollInSeason: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/joinandenroll`,\n getAssistsProfileByLevel: `${settings.apiUrl}api/ProLeagues/assistsProfileByLevel`,\n calculateAssistsProfile: `${settings.apiUrl}api/ProLeagues/calculateAssistsProfile`,\n getLeagueMembers: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members`,\n editMemberRole: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/updateRole`,\n editMemberPlatform: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/updatePlatform`,\n banMember: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/ban`,\n unbanMember: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/unban`,\n getTieringResults: (leagueId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/currentSeason/tieringResults`,\n warnMember: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/warn`,\n getSeasonStandings: (seasonId: number) => `${settings.apiUrl}api/ProLeagues/season/${seasonId}/standings`,\n getSeasonConstructorStandings: (seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/season/${seasonId}/constructorStandings`,\n getResults: (eventId: number) => `${settings.apiUrl}api/ProLeagues/events/${eventId}/results`,\n getQualifyingResults: (eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/events/${eventId}/qualifyingResults`,\n editMemberTier: (leagueId: number, seasonId: number, userId: string) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/seasons/${seasonId}/members/${userId}/tier`,\n swapMemberTiers: (leagueId: number, seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/seasons/${seasonId}/swapMemberTiers`,\n getSeasons: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/allSeasons`,\n getSeasonEvents: (seasonId: number) => `${settings.apiUrl}api/ProLeagues/season/${seasonId}/events`,\n rescheduleAvailable: (eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/events/${eventId}/rescheduleAvailable`,\n rescheduleEvent: (leagueId: number, eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/events/${eventId}/reschedule`,\n applyPenalty: (leagueId: number, eventId: number, leaderboardEntryId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/events/${eventId}/leaderboards/${leaderboardEntryId}/applyPenalty`,\n editResult: (leagueId: number, eventId: number, leaderboardId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/event/${eventId}/leaderboard/${leaderboardId}`,\n removeMember: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/currentSeason/members/remove`,\n canSeasonBeCreated: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/canSeasonBeCreated`,\n closeLeague: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/close`,\n closeCurrentSeason: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/closecurrentseason`,\n exportResults: (eventId: number) => `${settings.apiUrl}api/ProLeagues/events/${eventId}/results/export/csv`,\n exportQualifyingResults: (eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/events/${eventId}/qualifyingResults/export/csv`,\n exportStandngs: (seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/season/${seasonId}/standings/export/csv`,\n exportConstructorStandings: (seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/season/${seasonId}/constructorStandings/export/csv`,\n addSeasonEvent: (leagueId: number, seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/seasons${seasonId}/events`,\n deleteSeasonEvent: (leagueId: number, eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/events${eventId}`,\n leaveLeague: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/leave`,\n updateEvent: (leagueId: number, eventId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/events${eventId}/conditions`,\n getFriendsLeagues: `${settings.apiUrl}api/ProLeagues/friendsLeagues`,\n getRecommendedAllLeagues: `${settings.apiUrl}api/proleagues/recommendedall`,\n getRecommendedLeagues: `${settings.apiUrl}api/ProLeagues/recommendedByType`,\n getUserPlatform: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/members/current/platform`,\n getUserAvailability: (seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/seasons/${seasonId}/members/availability`,\n editUserAvailability: (seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/seasons/${seasonId}/member/availability`,\n deleteLeague: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}`,\n editBannerImage: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/bannerImage`,\n editSocialLinks: (leagueId: number) => `${settings.apiUrl}api/ProLeagues/${leagueId}/socialLinks`,\n deleteMember: (leagueId: number, memberId: string) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/members/${memberId}/delete`,\n getTakenTeams: (seasonId: number) => `${settings.apiUrl}api/ProLeagues/seasons/${seasonId}/takenteams`,\n editTeams: (leagueId: number, seasonId: number) =>\n `${settings.apiUrl}api/ProLeagues/${leagueId}/seasons/${seasonId}/team`,\n },\n grid21: {\n getPlayer: `${settings.apiUrl}api/RP19Stats/player`,\n getFriendsWithPlatform: `${settings.apiUrl}api/RP19Stats/platformFriends`,\n getFriends: `${settings.apiUrl}api/RP19Stats/friends`,\n getPlayerStats: `${settings.apiUrl}api/RP19Stats/player/stats`,\n getPlayerRacedTracks: `${settings.apiUrl}api/RP19Stats/player/racedTracks`,\n getPlayerRacedClasses: `${settings.apiUrl}api/RP19Stats/player/racedClasses`,\n getLeaderboard: `${settings.apiUrl}api/RP19Stats/leaderboard`,\n getEvents: `${settings.apiUrl}api/RP19Stats/events`,\n getEventLeaderboards: `${settings.apiUrl}api/RP19Stats/event/`,\n getWeather: `${settings.apiUrl}api/RP19Stats/weather`,\n getNews: `${settings.apiUrl}api/RP19Stats/news`,\n },\n wrc2023Clubs: {\n getClub: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}`,\n getClubByCode: (accessCode: string) => `${settings.apiUrl}api/wrc2023clubs/accessCode/${accessCode}`,\n getSearchClubMembers: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/search`,\n getClubMembership: `${settings.apiUrl}api/wrc2023clubs/memberships/active`,\n getOfficialClubs: `${settings.apiUrl}api/wrc2023clubs/official`,\n getPartneredClubs: `${settings.apiUrl}api/wrc2023clubs/partnered`,\n getChampionship: (championshipId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/championships/${championshipId}`,\n getSearchClubs: `${settings.apiUrl}api/wrc2023clubs/search`,\n postClub: `${settings.apiUrl}api/wrc2023clubs`,\n getClubChampionshipPointsLeaderboard: (clubId: string, championshipId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/championship/points/${championshipId}`,\n getClubChampionshipEventPointsLeaderboard: (clubId: string, eventId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/event/points/${eventId}`,\n getClubChampionshipTimetrialLeaderboard: (clubId: string, leaderboardId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/leaderboard/${leaderboardId}`,\n postClubReaction: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/reaction`,\n postTransferClubOwnership: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/transferOwnership`,\n postLeaveClub: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/leave`,\n postCloseClub: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/close`,\n getFriendsClubs: `${settings.apiUrl}api/wrc2023clubs/friendClubs`,\n postJoinClubByAccessCode: (clubId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/application/byAccessCode`,\n postJoinClubById: (clubId: string) => `${settings.apiUrl}api/wrc2023clubs/${clubId}/application`,\n getClubImages: `${settings.apiUrl}api/wrc2023clubs/imageCatalogue`,\n postBanClubMember: (clubId: string, userId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/${userId}/ban`,\n postUnbanClubMember: (clubId: string, userId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/${userId}/unban`,\n postkickClubMember: (clubId: string, userId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/${userId}/kick`,\n postPromoteClubMemberToAdmin: (clubId: string, userId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/${userId}/promote/toAdmin`,\n postDemoteClubMemberToMember: (clubId: string, userId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/members/${userId}/demote/toMember`,\n postValidateClubName: `${settings.apiUrl}api/wrc2023clubs/validation/name`,\n postValidateClubDescription: `${settings.apiUrl}api/wrc2023clubs/validation/description`,\n getExportStageLeaderboard: (clubId: string, leaderboardId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/leaderboard/${leaderboardId}/export`,\n getExportEventLeaderboard: (clubId: string, eventId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/event/points/${eventId}/export`,\n getExportChampionshipLeaderboard: (clubId: string, championshipId: string) =>\n `${settings.apiUrl}api/wrc2023clubs/${clubId}/championship/points/${championshipId}/export`,\n redeemCode: (eventID: number) => `${settings.apiUrl}api/wrc2023clubs/event/code/${eventID}`,\n },\n wrc2023: {\n getValues: `${settings.apiUrl}api/wrc2023Stats/values`,\n getPlayer: `${settings.apiUrl}api/wrc2023Stats/player`,\n getGhost: `${settings.apiUrl}api/wrc2023Stats/performanceAnalysis/ghost`,\n getPlayerStats: `${settings.apiUrl}api/wrc2023Stats/player/stats`,\n getFriends: `${settings.apiUrl}api/wrc2023Stats/friends`,\n getFriendsWithPlatform: `${settings.apiUrl}api/wrc2023Stats/platformFriends`,\n getTimetrialStageInfo: `${settings.apiUrl}api/wrc2023Stats/timetrialStageInfo`,\n getTimetrialLeaderboard: (route: string, vehicleClass: string, surfaceCondition: string) =>\n `${settings.apiUrl}api/wrc2023Stats/leaderboard/${route}/${vehicleClass}/${surfaceCondition}`,\n getFriendsTimetrialLeaderboard: (route: string, vehicleClass: string, surfaceCondition: string) =>\n `${settings.apiUrl}api/wrc2023Stats/leaderboard/${route}/${vehicleClass}/${surfaceCondition}/friends`,\n getNews: `${settings.apiUrl}api/wrc2023Stats/news`,\n getAnnouncements: `${settings.apiUrl}api/WRC2023Stats/announcements`,\n },\n putActivityFeedReaction: (activityId: string) => `${settings.apiUrl}api/activityFeed/activity/${activityId}/react`,\n getActivityFeed: `${settings.apiUrl}api/activityFeed`,\n deleteActivityFeed: (activityId: string) => `${settings.apiUrl}api/activityFeed/activity/${activityId}`,\n getNotificationFeed: `${settings.apiUrl}api/notifications`,\n getNotifications: `${settings.apiUrl}api/notification`,\n};\n\nexport const externalSiteUrls = {\n codemasters: {\n termsAndConditions: \"https://www.ea.com/terms-of-service.\",\n privacyPolicy: \"https://tos.ea.com/legalapp/WEBPRIVACY/US/en/PC/\",\n },\n socials: {\n facebook: \"https://www.facebook.com/codemasters/\",\n twitter: \"https://twitter.com/Codemasters\",\n },\n shareUrls: {\n facebook: \"https://www.facebook.com/sharer.php\",\n twitter: \"https://twitter.com/intent/tweet\",\n whatsapp: \"https://api.whatsapp.com/send?text=\",\n discord: \"https://discord.com/\",\n },\n terms: {\n discord: \"https://discord.com/terms\",\n youtube: \"https://www.youtube.com/static?gl=GB&template=terms\",\n },\n racenetAccess:\n \"https://forms.office.com/Pages/ResponsePage.aspx?id=dE0qnimjb0CjBbnEr1ACa7AK4oSBA_lKukJAF2hbdGhUMTYzTjFYWElESEJCR0pFMFVaNUxFNFVEVS4u\",\n};\n\nexport const icons = {\n raceNetIcon: `${settings.basePath}icons/maskable_icon-192x192.png`,\n};\n\nexport const images = {\n defaultCover: `${settings.basePath}images/default_cover.jpg`,\n defaultAvatar: `${settings.basePath}images/default_avatar.jpg`, //require(\"./assets/images/avatars/default_avatar.jpg\"),\n};\n\nexport const EAPaths = {\n index: \"/aboutme/index\",\n linkedPlatforms: \"/connectaccounts/index\",\n};\n\nconst dirtRallyCdnPath = \"/RP11\";\nconst dirt5CdnPath = \"/Dirt5\";\nconst dirtRally2CdnPath = \"/RP17\";\nconst grid21CdnPath = \"/RP19\";\nconst F12021CdnPath = \"/F12021\";\nconst F12022CdnPath = \"/F12022\";\nconst F12023CdnPath = \"/F12023\";\nconst WRC2023CdnPath = \"/WRC2023\";\nconst F12024CdnPath = \"/F12024\";\nconst F12025CdnPath = \"/F12025\";\n\nexport const cdnPaths = {\n dirtRally: {\n vehicles: `${dirtRallyCdnPath}/Vehicles`,\n splines: `${dirtRallyCdnPath}/splines`,\n tracks: `${dirtRallyCdnPath}/tracks`,\n locations: `${dirtRallyCdnPath}/locations`,\n nationalities: `${dirtRallyCdnPath}/nationalities`,\n gameInfo: `${dirtRallyCdnPath}/gameInfo`,\n },\n dirt5: {\n eventTypes: `${dirt5CdnPath}/eventTypes`,\n locations: `${dirt5CdnPath}/locations`,\n vehicleClasses: `${dirt5CdnPath}/vehicleClasses`,\n vehicles: `${dirt5CdnPath}/vehicles`,\n gameInfo: `${dirt5CdnPath}/gameInfo`,\n hub: `${dirt5CdnPath}/hub`,\n },\n dirtRally2: {\n vehicles: `${dirtRally2CdnPath}/vehicles`,\n liveries: `${dirtRally2CdnPath}/liveries`,\n locations: `${dirtRally2CdnPath}/locations`,\n flags: `${dirtRally2CdnPath}/flags`,\n nationalities: `${dirtRally2CdnPath}/nationalities`,\n gameInfo: `${dirtRally2CdnPath}/gameInfo`,\n },\n f1_2021: {\n assists: `${F12021CdnPath}/assist_pngs`,\n backgrounds: `${F12021CdnPath}/card_bg_jpgs`,\n leagueAttendance: `${F12021CdnPath}/leagueattendance_pngs`,\n leagueResultsTile: `${F12021CdnPath}/league_results_tile`,\n leagueTile: `${F12021CdnPath}/league_tile`,\n leagueTileFlag: `${F12021CdnPath}/league_tile_flag`,\n locationCovers: `${F12021CdnPath}/location_header_bg`,\n leagues: `${F12021CdnPath}/leagues`,\n ranks: `${F12021CdnPath}/rank_pngs`,\n safety: `${F12021CdnPath}/safety_pngs`,\n trophies: `${F12021CdnPath}/trophy_pngs`,\n eventLocationsHub: `${F12021CdnPath}/event_location_hub`,\n nationalities: `${F12021CdnPath}/nationalities`,\n gameInfo: `${F12021CdnPath}/gameInfo`,\n },\n f1_2022: {\n assists: `${F12022CdnPath}/assist_pngs`,\n backgrounds: `${F12022CdnPath}/card_bg_jpgs`,\n leagueAttendance: `${F12022CdnPath}/leagueattendance_pngs`,\n leagueResultsTile: `${F12022CdnPath}/league_results_tile`,\n leagueTile: `${F12022CdnPath}/league_tile`,\n leagueTileFlag: `${F12022CdnPath}/league_tile_flag`,\n locationCovers: `${F12022CdnPath}/location_header_bg`,\n ranks: `${F12022CdnPath}/rank_pngs`,\n safety: `${F12022CdnPath}/safety_pngs`,\n trophies: `${F12022CdnPath}/trophy_pngs`,\n eventLocationsHub: `${F12022CdnPath}/event_location_hub`,\n nationalities: `${F12022CdnPath}/nationalities`,\n gameInfo: `${F12022CdnPath}/gameInfo`,\n leagues: `${F12022CdnPath}/leagues`,\n },\n f1_2023: {\n leagues: `${F12023CdnPath}/leagues`,\n leagueTile: `${F12023CdnPath}/league_tile`,\n leagueTileFlag: `${F12023CdnPath}/league_tile_flag`,\n leagueResultsTile: `${F12023CdnPath}/league_results_tile`,\n leagueCoverPhotos: `${F12023CdnPath}/league_cover_photos`,\n leagueCoverPhotosMobile: `${F12023CdnPath}/league_cover_photos_mobile`,\n eventLocationsHub: `${F12023CdnPath}/event_location_hub`,\n locationCovers: `${F12023CdnPath}/location_header_bg`,\n backgrounds: `${F12023CdnPath}/card_bg_jpgs`,\n ranks: `${F12023CdnPath}/rank_pngs`,\n leagueAttendance: `${F12023CdnPath}/leagueattendance_pngs`,\n safety: `${F12023CdnPath}/safety_pngs`,\n trophies: `${F12023CdnPath}/trophy_pngs`,\n nationalities: `${F12023CdnPath}/nationalities`,\n smallCovers: `${F12023CdnPath}/games_small_covers`,\n featuredLaps: `${F12023CdnPath}/featured_laps`,\n proChallenges: `${F12023CdnPath}/pro_challenges`,\n proChallengesMobile: `${F12023CdnPath}/pro_challenges_mobile`,\n proChallengesAvatars: `${F12023CdnPath}/pro_challenges_avatars`,\n onboarding: `${F12023CdnPath}/onboarding`,\n redbull: `${F12023CdnPath}/red_bull`,\n },\n grid21: {\n gameInfo: `${grid21CdnPath}/gameInfo`,\n hub: `${grid21CdnPath}/hub`,\n playerStats: `${grid21CdnPath}/playerStats`,\n chapters: `${grid21CdnPath}/chapters`,\n vehicles: `${grid21CdnPath}/vehicles`,\n locations: `${grid21CdnPath}/locations`,\n routes: `${grid21CdnPath}/routes`,\n nationalities: `${grid21CdnPath}/nationalities`,\n eventPanelLandscape: `${grid21CdnPath}/event_panel_landscape`,\n eventHubPanel: `${grid21CdnPath}/event_hub_panel`,\n classBadges: `${grid21CdnPath}/class_badges`,\n categoryBadges: `${grid21CdnPath}/category_badges`,\n disciplines: `${grid21CdnPath}/disciplines`,\n },\n wrc2023: {\n eventLocations: `${WRC2023CdnPath}/event_locations`,\n clubCoverPhotos: `${WRC2023CdnPath}/clubs/cover_images`,\n images: `${WRC2023CdnPath}/clubs/images`,\n timetrialLocations: `${WRC2023CdnPath}/timetrial_locations`,\n hubImages: `${WRC2023CdnPath}/hub_images`,\n statsLocationsDesktop: `${WRC2023CdnPath}/stats/locations_desktop`,\n statsLocationsMobile: `${WRC2023CdnPath}/stats/locations_mobile`,\n statsEventLocationsLogo: `${WRC2023CdnPath}/stats/event_location_logos`,\n vehicles: `${WRC2023CdnPath}/stats/vehicles`,\n statsIcons: `${WRC2023CdnPath}/stats/misc`,\n vehicleClasses: `${WRC2023CdnPath}/vehicle_classes`,\n rallyTVConfig: `${WRC2023CdnPath}/promo_events/rally_tv_23`,\n },\n f1_2024: {\n driverNumbers: `${F12024CdnPath}/driver_numbers`,\n constructorLogos: `${F12024CdnPath}/constructor_logo`,\n fanzones: `${F12024CdnPath}/fanzones`,\n fanzoneCoverConstructorLarge: `${F12024CdnPath}/fanzone_cover_constructor_large`,\n fanzoneCoverDriverLarge: `${F12024CdnPath}/fanzone_cover_driver_large`,\n fanzoneCoverConstructorSmall: `${F12024CdnPath}/fanzone_cover_constructor_small`,\n fanzoneCoverDriverSmall: `${F12024CdnPath}/fanzone_cover_driver_small`,\n fanzoneNavConstructorMobile: `${F12024CdnPath}/fanzone_nav_constructor_mobile`,\n fanzoneNavDriverMobile: `${F12024CdnPath}/fanzone_nav_driver_mobile`,\n fanzoneCoverConstructorMobile: `${F12024CdnPath}/fanzone_cover_constructor_mobile`,\n fanzoneCoverDriverMobile: `${F12024CdnPath}/fanzone_cover_driver_mobile`,\n fanzoneBackgroundConstructorDesktop: `${F12024CdnPath}/fanzone_background_constructor_desktop`,\n fanzoneBackgroundDriverDesktop: `${F12024CdnPath}/fanzone_background_driver_desktop`,\n fanzonesOnboarding: `${F12024CdnPath}/fanzones_onboarding`,\n fanzoneVoteDriver: `${F12024CdnPath}/fanzone_vote_driver`,\n fanzoneVoteConstructor: `${F12024CdnPath}/fanzone_vote_constructor`,\n fanzoneVoteEsports: `${F12024CdnPath}/fanzone_vote_esports`,\n fanzoneVoteEsportsConstructor: `${F12024CdnPath}/fanzone_vote_esports_constructor`,\n leagues: `${F12024CdnPath}/leagues`,\n leagueTileFlag: `${F12024CdnPath}/league_tile_flag`,\n leagueCoverPhotos: `${F12024CdnPath}/league_cover_photos`,\n leagueCoverPhotosMobile: `${F12024CdnPath}/league_cover_photos_mobile`,\n eventLocationsHub: `${F12024CdnPath}/event_location_hub`,\n backgrounds: `${F12024CdnPath}/card_bg_jpgs`,\n ranks: `${F12024CdnPath}/rank_pngs`,\n leagueAttendance: `${F12024CdnPath}/leagueattendance_pngs`,\n safety: `${F12024CdnPath}/safety_pngs`,\n trophies: `${F12024CdnPath}/trophy_pngs`,\n nationalities: `${F12024CdnPath}/nationalities`,\n smallCovers: `${F12024CdnPath}/games_small_covers`,\n featuredLaps: `${F12024CdnPath}/featured_laps`,\n proChallenges: `${F12024CdnPath}/pro_challenges`,\n proChallengesMobile: `${F12024CdnPath}/pro_challenges_mobile`,\n proChallengesAvatars: `${F12024CdnPath}/pro_challenges_avatars`,\n onboarding: `${F12024CdnPath}/onboarding`,\n redbull: `${F12024CdnPath}/red_bull`,\n },\n f1_2025: {\n driverNumbers: `${F12025CdnPath}/driver_numbers`,\n constructorLogos: `${F12025CdnPath}/constructor_logo`,\n fanzones: `${F12025CdnPath}/fanzones`,\n fanzoneCoverConstructorLarge: `${F12025CdnPath}/fanzone_cover_constructor_large`,\n fanzoneCoverDriverLarge: `${F12025CdnPath}/fanzone_cover_driver_large`,\n fanzoneCoverConstructorSmall: `${F12025CdnPath}/fanzone_cover_constructor_small`,\n fanzoneCoverDriverSmall: `${F12025CdnPath}/fanzone_cover_driver_small`,\n fanzoneNavConstructorMobile: `${F12025CdnPath}/fanzone_nav_constructor_mobile`,\n fanzoneNavDriverMobile: `${F12025CdnPath}/fanzone_nav_driver_mobile`,\n fanzoneCoverConstructorMobile: `${F12025CdnPath}/fanzone_cover_constructor_mobile`,\n fanzoneCoverDriverMobile: `${F12025CdnPath}/fanzone_cover_driver_mobile`,\n fanzoneBackgroundConstructorDesktop: `${F12025CdnPath}/fanzone_background_constructor_desktop`,\n fanzoneBackgroundDriverDesktop: `${F12025CdnPath}/fanzone_background_driver_desktop`,\n fanzonesOnboarding: `${F12025CdnPath}/fanzones_onboarding`,\n fanzoneVoteDriver: `${F12025CdnPath}/fanzone_vote_driver`,\n fanzoneVoteConstructor: `${F12025CdnPath}/fanzone_vote_constructor`,\n fanzoneVoteEsports: `${F12025CdnPath}/fanzone_vote_esports`,\n fanzoneVoteEsportsConstructor: `${F12025CdnPath}/fanzone_vote_esports_constructor`,\n leagues: `${F12025CdnPath}/leagues`,\n leagueTileFlag: `${F12025CdnPath}/league_tile_flag`,\n leagueCoverPhotos: `${F12025CdnPath}/league_cover_photos`,\n leagueCoverPhotosMobile: `${F12025CdnPath}/league_cover_photos_mobile`,\n eventLocationsHub: `${F12025CdnPath}/event_location_hub`,\n backgrounds: `${F12025CdnPath}/card_bg_jpgs`,\n ranks: `${F12025CdnPath}/rank_pngs`,\n leagueAttendance: `${F12025CdnPath}/leagueattendance_pngs`,\n safety: `${F12025CdnPath}/safety_pngs`,\n trophies: `${F12025CdnPath}/trophy_pngs`,\n nationalities: `${F12025CdnPath}/nationalities`,\n smallCovers: `${F12025CdnPath}/games_small_covers`,\n featuredLaps: `${F12025CdnPath}/featured_laps`,\n proChallenges: `${F12025CdnPath}/pro_challenges`,\n proChallengesMobile: `${F12025CdnPath}/pro_challenges_mobile`,\n proChallengesAvatars: `${F12025CdnPath}/pro_challenges_avatars`,\n onboarding: `${F12025CdnPath}/onboarding`,\n redbull: `${F12025CdnPath}/red_bull`,\n },\n activityGamePackshots: \"/Common/activity_games_packshots\",\n gamePackshots: \"/Common/games_packshots\",\n gameMiniHeroes: \"/Common/games_mini_heros\",\n landing: \"/Common/landing\",\n gameSmallCovers: \"/Common/games_small_covers\",\n nationalities_flags: \"/Common/nationalities_flags\",\n qrCodes: \"/Common/qr\",\n gamesLibrary: \"/Common/games_library\",\n};\n\ninterface IGameSetting {\n gameId: GamesEnum;\n route?: string;\n activityFeedEnabled: boolean;\n}\n\n// If there is no route, will be undefined & there will be no hub!\n\n//TODO : Review supported platorms per game\nexport const gameSettings: IGameSetting[] = [\n {\n gameId: GamesEnum.DirtRally,\n route: routingUrls.dirtRally.root,\n activityFeedEnabled: true,\n },\n {\n gameId: GamesEnum.DirtRally2,\n route: routingUrls.dirtRally2.root,\n activityFeedEnabled: true,\n },\n {\n gameId: GamesEnum.Dirt4,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.Dirt5,\n route: routingUrls.dirt5.root,\n activityFeedEnabled: true,\n },\n {\n gameId: GamesEnum.Grid,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.Grid2021,\n route: routingUrls.grid21.root,\n activityFeedEnabled: true,\n },\n {\n gameId: GamesEnum.F12020,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.F12021,\n route: routingUrls.f1_2021.root,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.F12022,\n route: routingUrls.f1_2022.root,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.F12023,\n route: routingUrls.f1_2023.root,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.F12024,\n route: routingUrls.f1_2024.root,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.F12025,\n route: routingUrls.f1_2025.root,\n activityFeedEnabled: false,\n },\n {\n gameId: GamesEnum.WRC2023,\n route: routingUrls.wrc2023.root,\n activityFeedEnabled: false,\n },\n];\n\nexport const Dirt5SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.Stadia,\n];\n\nexport const DirtRallySupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.Oculus,\n];\n\nexport const DirtRally2SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.Oculus,\n Platforms.WindowsStore,\n];\n\nexport const F12021SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n];\n\nexport const F12022SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.EAPlay,\n];\n\nexport const F12023SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.EAPlay,\n];\n\nexport const F12024SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.EAPlay,\n];\n\nexport const F12025SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.EAPlay,\n];\n\nexport const GRID21SupportedPlatforms: Platforms[] = [\n Platforms.Steam,\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.EAPlay,\n];\n\nexport const WRC2023SupportedPlatforms: Platforms[] = [\n Platforms.MicrosoftLive,\n Platforms.PlaystationNetwork,\n Platforms.PC,\n];\n\nexport const PlatformNames = {\n [Platforms.None]: \"Cross-Platform\",\n [Platforms.Stadia]: \"Stadia\",\n [Platforms.Steam]: \"Steam\",\n [Platforms.MicrosoftLive]: \"Xbox\",\n [Platforms.PlaystationNetwork]: \"PlayStation\",\n [Platforms.Oculus]: \"Oculus\",\n [Platforms.EAPlay]: \"EA App\",\n [Platforms.WindowsStore]: \"Windows\",\n [Platforms.PC]: \"PC\",\n};\n\nexport const ShortPlatformNames = {\n [Platforms.None]: \"X-Pl\",\n [Platforms.Stadia]: \"Stadia\",\n [Platforms.Steam]: \"Steam\",\n [Platforms.MicrosoftLive]: \"Xbox\",\n [Platforms.PlaystationNetwork]: \"PSN\",\n [Platforms.Oculus]: \"Oculus\",\n [Platforms.EAPlay]: \"EA App\",\n [Platforms.WindowsStore]: \"Windows\",\n [Platforms.PC]: \"PC\",\n};\n\nexport const analyticsIds = {\n gameHubVideo: \"g-game-hub-trailer\",\n identitySsid: \"identity-ssid\",\n};\n\nexport const TabTitle = {\n RaceNet: \"Racenet\",\n Hub: \"Hub\",\n Stats: \"Stats\",\n Info: \"Info\",\n Friends: \"Friends\",\n Community: \"Community\",\n PerformanceAnalysis: \"PA\",\n Events: \"Events\",\n News: \"News\",\n NotFound: \"Not found\",\n Profile: \"Profile\",\n GameLib: \"Games library\",\n Settings: \"Settings\",\n ReleaseNotes: \"Release notes\",\n Playgrounds: \"Playgrounds\",\n PlaygroundPage: \"Playground\",\n Timetrial: \"Timetrial\",\n Leagues: \"Leagues\",\n League: \"League\",\n LeagueHelp: \"League Racing - User Guide\",\n LeaguesSearch: \"Leagues search\",\n Photos: \"Photos\",\n Faq: \"FAQ\",\n Clubs: \"Clubs\",\n Club: \"Club\",\n ClubMembers: \"Club's members\",\n CLubMembership: \"Your clubs\",\n FriendsClubs: \"Friends clubs\",\n F123RedbullPage: \"Red Bull Event\",\n F124RedbullPage: \"Red Bull Event\",\n Fanzone: \"Fanzone\",\n};\n\nexport const proLeaguesConfig = {\n f1PlayerUserId: \"42\",\n MAX_SEASON_LENGTH: 30,\n F123_PRO_LEAGUES_VERSION: 1,\n F124_PRO_LEAGUES_VERSION: 2,\n F125_PRO_LEAGUES_VERSION: 3,\n F123_COVER_PHOTOS_NUMBER: 24,\n F124_COVER_PHOTOS_NUMBER: 20,\n F125_COVER_PHOTOS_NUMBER: 20,\n ONDEMAND_MAX_MEMBER_COUNT: 20,\n SCHEDULED_MAX_MEMBER_COUNT: 1000,\n maxAiLevel: 110,\n F123_REPORTING_YEAR: 23,\n F124_REPORTING_YEAR: 24,\n F125_REPORTING_YEAR: 25,\n};\n\nexport const f124FanzonesConfig = {\n MAX_ROOM_COUNT: 50,\n};\n\nexport const f125FanzonesConfig = {\n MAX_ROOM_COUNT: 50,\n};\n\nexport const legalMessage = \"Includes in-game purchases (includes random items).\";\n","import { WebViewEnum } from \"common/enums/WebViewEventsEnum\";\nimport { mobileAppUserAgent, tabletAppUserAgent } from \"settings\";\n\nexport const isRaceNetMobileApp = window.navigator.userAgent === mobileAppUserAgent;\nexport const isRaceNetTabletApp = window.navigator.userAgent === tabletAppUserAgent;\n\nexport const webViewPostMessage = (message: string) => {\n if (isRaceNetMobileApp || tabletAppUserAgent) {\n try {\n //@ts-ignore\n window.ReactNativeWebView?.postMessage(message);\n } catch (error) {\n console.log(\"Error sending the ReactNativeWebView post message\", error);\n }\n }\n};\n\nexport const webViewRouteToNative = (routeInApp: string, params: string) => {\n webViewPostMessage(\n WebViewEnum.NativeRoute +\n `{ \n \"route\" : \"${routeInApp}\",\n \"params\" : \"${params}\"\n }`\n );\n};\n","enum Platforms {\n None = 0,\n MicrosoftLive = 1,\n PlaystationNetwork = 2,\n Steam = 3,\n //iPad = 4,\n Stadia = 6,\n Oculus = 7,\n //Rail = 8,\n //Twitch = 9,\n //Feral = 10,\n //NetEase = 11,\n EAPlay = 14,\n WindowsStore = 65,\n PC = 128,\n}\n\nexport default Platforms;\n","import { HTMLAttributes } from \"react\";\nimport { useTheme } from \"@material-ui/core/styles\";\n\ninterface IProps extends HTMLAttributes {\n size?: number;\n disableTheme?: boolean;\n}\n\nconst Spacer = (props: IProps) => {\n const theme = useTheme();\n const { size = 1, disableTheme = false, style, ...rest } = props;\n\n const dimension = disableTheme ? size : theme.spacing(size);\n\n return
;\n};\n\nexport default Spacer;\n","enum ResponseStatusEnum {\n Pending = 1,\n Ok = 200,\n Created = 201,\n NoContent = 204,\n MultipleChoices = 300,\n BadRequest = 400,\n Unauthorized = 401,\n Forbidden = 403,\n NotFound = 404,\n Conflict = 409,\n Error = 500,\n}\n\nexport default ResponseStatusEnum;\n","type QueryParameterType = string | number | boolean;\n\nexport default class QueryParameter {\n readonly name: string;\n readonly value: QueryParameterType | undefined;\n\n constructor(name: string, value?: QueryParameterType | undefined) {\n this.name = name;\n this.value = value;\n }\n\n public buildParamString = () => {\n return this.getParamString(this.name, this.value).trim();\n };\n\n private getParamString = (name: string, value?: string | number | boolean) => {\n if (typeof value === \"string\" && value.length > 0) return `${name}=${value}`;\n else if (typeof value === \"number\") return `${name}=${value.toString()}`;\n else if (typeof value === \"boolean\") return `${name}=${value.toString()}`;\n\n return \"\";\n };\n}\n\nexport function constructQueryParameterString(params?: QueryParameter[]): string {\n if (typeof params === \"undefined\" || params.length === 0) return \"\";\n\n let builtParams: string[] = [];\n params.forEach((param) => {\n const builtParam = param.buildParamString();\n\n if (builtParam.length === 0) return;\n\n builtParams.push(builtParam);\n });\n\n if (builtParams.length === 0) return \"\";\n\n return `?${builtParams.join(\"&\").trim()}`;\n}\n","enum GamesEnum {\n DirtRally = 1,\n Dirt4 = 3,\n DirtRally2 = 7,\n Grid = 9,\n F12020 = 10,\n Dirt5 = 11,\n DirtRally3 = 12,\n Grid2021 = 13,\n F12021 = 14,\n F12022 = 15,\n F12023 = 21,\n F12024 = 22,\n F12025 = 23,\n FastAndFuriousCC = 16,\n WRC2023 = 20,\n}\n\nexport default GamesEnum;\n","export const trimEndSlash = (url: string) => {\n const isSlash = url !== null && url.lastIndexOf(\"/\") === url.length - 1;\n if (isSlash) {\n return url.substring(0, url.length - 1);\n }\n return url;\n};\n\nexport const getQueryParams = (search: string) => {\n search = search.replace(\"?\", \"\");\n\n let parsedObject = JSON.parse(\n '{\"' + decodeURI(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}'\n );\n\n return parsedObject;\n};\n\nexport const escapeUrl = (url: string) => url.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n","import useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport { useTheme } from \"@material-ui/core\";\nimport { isMobile, isTablet } from \"react-device-detect\";\n\nconst useIsMobile = () => {\n const theme = useTheme();\n return useMediaQuery(theme.breakpoints.down(\"xs\")) || (isMobile && !isTablet);\n};\n\nexport default useIsMobile;\n","import { markAsRead, removeNotifications } from \"apiServices/notifications/NotificationsApiService\";\nimport INotification from \"common/components/notifications/interfaces/INotification\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport { INotificationStore } from \"../NotificationContextStore\";\nimport {\n dispatchFetchNewNotifications,\n dispatchSetIsNotificationsLastPage,\n dispatchSetNewNotifications,\n dispatchSetNewNotificationsCount,\n} from \"./NewNotificationActions\";\nimport {\n dispatchFetchOldNotifications,\n dispatchSetOldNotifications,\n dispatchSetOldNotificationsIsLastPage,\n} from \"./OldNotificationActions\";\nimport { NotificationType } from \"common/enums/NotificationTypeEnum\";\n\nexport enum NotificationTypes {\n AddActedFriendRequestSsid = \"ADD_ACTED_FRIEND_REQUEST_SSID\",\n AddReceivedFriendRequestSsid = \"ADD_RECEIEVED_FRIEND_REQUEST_SSID\",\n HandleTray = \"HANDLE_TRAY\",\n}\n\ntype NotificationTypePayload = {\n [NotificationTypes.AddActedFriendRequestSsid]: string[];\n [NotificationTypes.AddReceivedFriendRequestSsid]: string[];\n [NotificationTypes.HandleTray]: boolean;\n};\n\nexport type NotificationActions = ActionMap[keyof ActionMap];\n\nexport const getNotificiationIds = (notification: INotification): string[] => {\n let notificationIds: string[] = [];\n\n notificationIds.push(notification.notificationID);\n\n return notificationIds;\n};\n\nexport const getNotificationsIds = (notifications: INotification[]): string[] => {\n let notificationIds: string[] = [];\n\n notifications.forEach((notification) => {\n notificationIds = [...notificationIds, ...getNotificiationIds(notification)];\n });\n\n return notificationIds;\n};\n\nexport const dispatchFetchAllNotifications = async (\n dispatch: React.Dispatch,\n oldNotifications: INotification[],\n newNotifications: INotification[],\n newNextPageCursor?: string,\n oldNextPageCursor?: string\n) => {\n await Promise.all([\n dispatchFetchOldNotifications(dispatch, oldNotifications, oldNextPageCursor),\n dispatchFetchNewNotifications(dispatch, newNotifications, newNextPageCursor),\n ]);\n};\n\nexport const dispatchAddActedFriendRequestSsid = (dispatch: React.Dispatch, actedFriendRequestSsids: string[]) => {\n dispatch({\n type: NotificationTypes.AddActedFriendRequestSsid,\n payload: actedFriendRequestSsids,\n });\n};\n\nexport const dispatchAddReceivedFriendRequestSsid = (\n dispatch: React.Dispatch,\n receivedFriendRequestSsids: string[]\n) => {\n dispatch({\n type: NotificationTypes.AddReceivedFriendRequestSsid,\n payload: receivedFriendRequestSsids,\n });\n};\n\nexport const dispatchSetSkip = (\n dispatch: React.Dispatch,\n notificationId: string,\n isRead: boolean,\n oldNotifications: INotification[],\n newNotifications: INotification[]\n) => {\n if (isRead) {\n const filteredOldNotifications = oldNotifications.map((n: INotification) => {\n return n.notificationID === notificationId ? { ...n, skip: true } : n;\n });\n dispatchSetOldNotifications(dispatch, filteredOldNotifications);\n } else {\n const filteredNewNotifications = newNotifications.map((n: INotification) => {\n return n.notificationID === notificationId ? { ...n, skip: true } : n;\n });\n dispatchSetNewNotifications(dispatch, filteredNewNotifications);\n }\n};\n\nexport const dispatchAddReceivedFriendRequestsSsid = (\n dispatch: React.Dispatch,\n ssid: string,\n receivedFriendRequestSsids: string[]\n) => {\n dispatchAddReceivedFriendRequestSsid(dispatch, [...receivedFriendRequestSsids, ssid]);\n};\n\nexport const dispatchAddActedFriendRequestsSsid = (\n dispatch: React.Dispatch,\n ssid: string,\n actedFriendRequestSsids: string[]\n) => {\n dispatchAddActedFriendRequestSsid(dispatch, [...actedFriendRequestSsids, ssid]);\n};\n\nexport const dispatchClearAllNotifications = async (\n dispatch: React.Dispatch,\n newNotifications: INotification[],\n oldNotifications: INotification[]\n) => {\n removeNotifications(getNotificationsIds([...newNotifications, ...oldNotifications]));\n\n dispatchSetNewNotifications(dispatch, []);\n dispatchSetNewNotificationsCount(dispatch, 0);\n dispatchSetIsNotificationsLastPage(dispatch, true);\n\n dispatchSetOldNotifications(dispatch, []);\n dispatchSetOldNotificationsIsLastPage(dispatch, true);\n};\n\nexport const dispatchMarkNewNotificationsAsRead = (\n dispatch: React.Dispatch,\n newNotifications: INotification[],\n oldNotifications: INotification[]\n) => {\n const filteredNotifications = newNotifications /*.filter(n => (n?.skip ?? false) !== true)*/\n .map((n) => {\n return { ...n, isRead: true };\n });\n\n const updatedOldNotifications = [...filteredNotifications, ...oldNotifications];\n dispatchSetOldNotifications(dispatch, updatedOldNotifications);\n\n dispatchSetNewNotifications(dispatch, []);\n dispatchSetNewNotificationsCount(dispatch, 0);\n dispatchSetIsNotificationsLastPage(dispatch, true);\n\n let newNotificationIds = getNotificationsIds(newNotifications);\n\n if (newNotificationIds.length === 0) return;\n\n markAsRead(newNotificationIds);\n};\n\nexport const dispatchRemoveNotification = async (\n dispatch: React.Dispatch,\n oldNotifications: INotification[],\n newNotifications: INotification[],\n notificationId: string,\n isRead: boolean\n) => {\n if (isRead) {\n const filteredOldNotifications = oldNotifications.filter((n) => n.notificationID !== notificationId);\n dispatchSetOldNotifications(dispatch, filteredOldNotifications);\n } else {\n const filteredNewNotifications = newNotifications.filter((n) => n.notificationID !== notificationId);\n dispatchSetNewNotifications(dispatch, filteredNewNotifications);\n }\n\n await removeNotifications([notificationId]);\n};\n\nexport const dispatchHandleTray = (dispatch: React.Dispatch) => {\n dispatch({\n type: NotificationTypes.HandleTray,\n });\n};\n\nexport const notificationReducer = (state: INotificationStore, action: NotificationActions): INotificationStore => {\n switch (action.type) {\n case NotificationTypes.AddActedFriendRequestSsid:\n return {\n ...state,\n actedFriendRequestSsids: action.payload,\n };\n case NotificationTypes.AddReceivedFriendRequestSsid:\n return {\n ...state,\n receivedFriendRequestSsids: action.payload,\n };\n case NotificationTypes.HandleTray:\n return {\n ...state,\n openTray: !state.openTray,\n };\n default:\n return state;\n }\n};\n","import { ImgHTMLAttributes, HTMLAttributes } from \"react\";\nimport { makeStyles, createStyles, Theme, useTheme } from \"@material-ui/core/styles\";\nimport LazyLoad from \"react-lazyload\";\nimport ProgressiveImage from \"react-progressive-image\";\nimport calculateAspectRatio from \"utils/calculateAspectRatio\";\nimport calculateAspectRatioPaddingTopPercentage from \"utils/calculateAspectRatioPaddingTopPercentage\";\nimport clsx from \"clsx\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\nimport { ITheme } from \"@material-ui/core\";\n\nconst useStyles = (hoverState: boolean) =>\n makeStyles((theme: Theme) => {\n const zoomPercentageAmount = 5;\n\n const hoverableImageHoverStateStyles = {\n height: `${100 + zoomPercentageAmount}%`,\n width: `${100 + zoomPercentageAmount}%`,\n top: `-${zoomPercentageAmount / 2}%`,\n left: `-${zoomPercentageAmount / 2}%`,\n };\n\n const getBackgroundImageTransitions = (properties: string[]) =>\n properties.map((property) => theme.transitions.create(property)).join(\", \");\n\n return createStyles({\n root: {\n overflow: \"hidden\",\n display: \"flex\",\n position: \"relative\",\n \"& .lazyload-wrapper\": {\n display: \"flex\",\n flex: \"1\",\n },\n },\n hoverable: {\n \"@media (hover: hover) and (pointer: fine)\": {\n \"&:hover\": {\n \"& $hoverableImage\": {\n ...hoverableImageHoverStateStyles,\n },\n },\n },\n },\n absoluteFull: {\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n top: 0,\n left: 0,\n },\n imageContainer: {\n display: \"flex\",\n transition: getBackgroundImageTransitions([\"height\", \"width\", \"top\", \"left\"]),\n },\n hoverableImage: hoverState\n ? {\n ...hoverableImageHoverStateStyles,\n }\n : {},\n });\n });\n\ntype ImagePropsTypes = Omit<\n Omit<\n Omit<\n Omit, \"src\">, \"placeholder\">, \"alt\">, \"height\">,\n \"width\"\n >,\n \"srcSet\"\n >,\n \"sizes\"\n>;\n\ntype objectFit = \"cover\" | \"contain\";\n\nexport interface IImgProps extends HTMLAttributes {\n src: string;\n height: number;\n width: number;\n placeholder?: string;\n alt?: string;\n srcSet?: string;\n sizes?: string;\n loading?: boolean;\n imageProps?: ImagePropsTypes;\n loadingOpacity?: number;\n hoverable?: boolean;\n hoverState?: boolean;\n progressiveImageDelay?: number;\n disableLazyLoad?: boolean;\n lazyLoadOffset?: number;\n objectFit?: objectFit;\n objectPosition?: string;\n}\n\nexport default function Img(props: IImgProps) {\n const {\n src,\n placeholder = \"\",\n alt,\n srcSet = \"\",\n sizes = \"\",\n width,\n height,\n loading,\n imageProps = {},\n loadingOpacity = 0.8,\n hoverable,\n hoverState = false,\n progressiveImageDelay = 0,\n disableLazyLoad,\n lazyLoadOffset = 500,\n children,\n className,\n objectFit = \"cover\",\n objectPosition = \"unset\",\n ...rest\n } = props;\n\n const classes = useStyles(hoverState)();\n const theme: ITheme = useTheme();\n\n const { style: imageStyle, className: imageClassName, ...imagePropsRest } = imageProps;\n\n const aspectRatio = calculateAspectRatio({ height, width });\n\n const paddingTopPercentage = calculateAspectRatioPaddingTopPercentage({\n width: aspectRatio,\n height: 1,\n });\n\n const placeholderComponent = (\n \n );\n\n const loadingStyles = (_loading: boolean) => {\n const opacityImageTransition = theme.transitions.create(\"all\", {\n duration: 150,\n easing: theme.transitions.easing.easeInOut,\n });\n\n return {\n opacity: _loading ? loadingOpacity : 1,\n filter: `blur(${_loading ? 10 : 0}px)`,\n transition: opacityImageTransition,\n };\n };\n\n const imageContent = (\n \n {(_src: string, _loading: boolean, srcSetData: { srcSet: string; sizes: string }) => (\n \n \n
\n )}\n \n );\n\n return (\n \n
\n {loading ? (\n placeholderComponent\n ) : disableLazyLoad ? (\n imageContent\n ) : (\n \n {imageContent}\n \n )}\n
\n \n );\n}\n","interface IProps {\n height: number;\n width: number;\n}\n\nexport default function calculateAspectRatio(props: IProps): number {\n const { height, width } = props;\n\n return width / height;\n}\n","import INotification from \"common/components/notifications/interfaces/INotification\";\n\nexport interface INewNotificationStore {\n notifications: INotification[];\n isLastPage: boolean;\n loading: boolean;\n count: number;\n refreshable: boolean;\n nextPageCursor?: string;\n}\n\nexport interface IOldNotificationStore {\n notifications: INotification[];\n isLastPage: boolean;\n loading: boolean;\n nextPageCursor?: string;\n}\n\nexport interface INotificationStore {\n actedFriendRequestSsids: string[];\n receivedFriendRequestSsids: string[];\n openTray: boolean;\n}\n\nexport interface INotificationContextStore {\n newNotificationStore: INewNotificationStore;\n oldNotificationStore: IOldNotificationStore;\n notificationStore: INotificationStore;\n}\n\nexport const defaultNotificationContext: INotificationContextStore = {\n newNotificationStore: {\n notifications: [],\n isLastPage: true,\n loading: false,\n count: 0,\n refreshable: false,\n },\n oldNotificationStore: {\n notifications: [],\n isLastPage: true,\n loading: false,\n },\n notificationStore: {\n actedFriendRequestSsids: [],\n receivedFriendRequestSsids: [],\n openTray: false,\n },\n};\n","import { NewNotificationActions, newNotificationReducer } from \"./actions/NewNotificationActions\";\nimport { NotificationActions, notificationReducer } from \"./actions/NotificationActions\";\nimport { OldNotificationActions, oldNotificationReducer } from \"./actions/OldNotificationActions\";\nimport { INotificationContextStore } from \"./NotificationContextStore\";\n\nexport const reducer = (\n { newNotificationStore, oldNotificationStore, notificationStore }: INotificationContextStore,\n action: OldNotificationActions | NewNotificationActions | NotificationActions\n): INotificationContextStore => ({\n newNotificationStore: newNotificationReducer(newNotificationStore, action as NewNotificationActions),\n oldNotificationStore: oldNotificationReducer(oldNotificationStore, action as OldNotificationActions),\n notificationStore: notificationReducer(notificationStore, action as NotificationActions),\n});\n","import React, { createContext, FunctionComponent, useEffect, useRef, useContext, useReducer } from \"react\";\nimport { HubConnectionBuilder } from \"@microsoft/signalr\";\nimport { defaultNotificationContext, INotificationContextStore } from \"./NotificationContextStore\";\nimport { reducer } from \"./NotificationReducer\";\nimport {\n dispatchSetNewNotificationsCount,\n dispatchSetNewNotificationsRefreshable,\n} from \"./actions/NewNotificationActions\";\n\nimport { dispatchFetchAllNotifications } from \"./actions/NotificationActions\";\nimport { useConfig } from \"contexts/configuration/ConfigurationContext\";\nimport { useIdentityContext } from \"../identity/IdentityContext\";\n\nconst NotificationContext = createContext<{ state: INotificationContextStore; dispatch: React.Dispatch }>({\n state: defaultNotificationContext,\n dispatch: () => null,\n});\n\nexport const NotificationContextProvider: FunctionComponent = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, defaultNotificationContext);\n const config = useConfig();\n const identityContext = useIdentityContext();\n\n const latestNotificationCount = useRef(0);\n latestNotificationCount.current = state.newNotificationStore.count;\n\n useEffect(() => {}, [state.oldNotificationStore.notifications]);\n\n useEffect(() => {\n const connection = new HubConnectionBuilder()\n .withUrl(config.notificationHubUrl, {\n accessTokenFactory(): string {\n return identityContext.state.jwtTokens.tokens.accessToken;\n },\n })\n .withAutomaticReconnect()\n .build();\n\n connection\n .start()\n .then(() => {\n connection.on(\"SendNotificationUpdate\", () => {\n dispatchSetNewNotificationsCount(dispatch, latestNotificationCount.current + 1);\n dispatchSetNewNotificationsRefreshable(dispatch, true);\n });\n })\n .catch((e) => console.log(\"Connection failed: \", e));\n\n return function cleanUp() {\n connection.stop();\n };\n }, []);\n\n useEffect(() => {\n dispatchFetchAllNotifications(\n dispatch,\n state.oldNotificationStore.notifications,\n state.newNotificationStore.notifications\n );\n }, []);\n\n return {children};\n};\n\nexport const useNotificationContext = () => useContext(NotificationContext);\n","import useIsMobile from \"hooks/useIsMobile\";\nimport React, { createContext, useContext, useEffect, useLayoutEffect, useMemo, useState } from \"react\";\nimport { isIOS, isMacOs, isTablet } from \"react-device-detect\";\nimport { useLocation } from \"react-router-dom\";\n\nexport enum ScrollItems {\n Popover = 0,\n Dialog = 1,\n Select = 2,\n}\n\ninterface IScrollContext {\n disableScroll: boolean;\n handleDisableScroll: (item: number) => void;\n handleEnableScroll: (item: number) => void;\n handleInitialLoad: (load: boolean) => void;\n scrollItems: number[];\n}\n\nconst ScrollContext = createContext({\n disableScroll: false,\n handleDisableScroll: () => {},\n handleEnableScroll: () => {},\n handleInitialLoad: () => {},\n scrollItems: [],\n});\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nexport const ScrollContextProvider = ({ children }: IProps) => {\n const isMobile = useIsMobile();\n const location = useLocation();\n const [disableScroll, setDisableScroll] = useState(false);\n const [scrollItems, setScrollItems] = useState([]);\n const [initialLoad, setInitialLoad] = useState(false);\n\n const handleDisableScroll = (item: number) => {\n setDisableScroll(true);\n\n setScrollItems((prev) => [...prev, item]);\n };\n\n const handleEnableScroll = (item: number) => {\n setDisableScroll(false);\n\n setScrollItems((prev) => prev.filter((a) => a !== item));\n };\n\n const handleInitialLoad = (load: boolean) => {\n setInitialLoad(load);\n };\n\n useLayoutEffect(() => {\n if (location) {\n setScrollItems([]);\n setDisableScroll(false);\n }\n }, [location]);\n\n const isExternalMouse = useMemo((): boolean => {\n const scrollDiv = document.createElement(\"div\");\n scrollDiv.style.width = \"100px\";\n scrollDiv.style.height = \"100px\";\n scrollDiv.style.overflow = \"scroll\";\n scrollDiv.style.position = \"absolute\";\n scrollDiv.style.top = \"-9999px\";\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n\n if (scrollbarWidth > 0) {\n return true;\n } else {\n return false;\n }\n }, []);\n\n function useBodyScrollable() {\n const [bodyScrollable, setBodyScrollable] = useState(document.body.scrollHeight > window.innerHeight);\n useEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n setBodyScrollable(document.body.scrollHeight > window.innerHeight);\n });\n resizeObserver.observe(document.body);\n return () => {\n resizeObserver.unobserve(document.body);\n };\n }, []);\n return bodyScrollable;\n }\n\n const bodyScrollable = useBodyScrollable();\n\n useEffect(() => {\n if (bodyScrollable === false && initialLoad === false) return;\n\n const settingsDropdown = document.getElementById(\"settings-dropdown\");\n\n if (disableScroll) {\n document.body.style.overflow = \"hidden\";\n document.body.style.touchAction = \"none\";\n\n if (scrollItems.includes(ScrollItems.Popover)) {\n document.body.style.position = \"fixed\";\n document.body.style.height = \"100%\";\n document.body.style.width = \"100%\";\n }\n\n if (!isMobile && !isTablet) {\n if (!isExternalMouse && isMacOs) return;\n\n document.body.style.paddingRight = isMacOs ? \"15px\" : \"17px\";\n if (settingsDropdown) {\n settingsDropdown.style.paddingRight = isMacOs ? \"15px\" : \"17px\";\n }\n }\n } else if (disableScroll === false) {\n setTimeout(() => {\n document.body.style.overflow = \"unset\";\n document.body.style.touchAction = \"unset\";\n\n document.body.style.position = \"unset\";\n\n if (!isIOS) {\n document.body.style.paddingRight = \"unset\";\n if (settingsDropdown) {\n settingsDropdown.style.paddingRight = \"unset\";\n }\n }\n }, 300);\n }\n }, [disableScroll, initialLoad]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useScrollContext = () => useContext(ScrollContext);\n","import IFetch from \"common/interfaces/IFetch\";\nimport IPreference from \"pages/preferences/interfaces/IPreference\";\nimport { images } from \"settings\";\nimport IIdentity from \"common/interfaces/IIdentity\";\nimport IPlatform from \"common/interfaces/IPlatform\";\nimport { OnboardingType } from \"apiServices/identity/types/OnboardingTypes\";\nimport { IPostNotificationPreferencesRequestBody } from \"apiServices/identity/requests/IPostNotificationPreferencesRequest\";\n\nexport interface IIdentityStore {\n identity: IUserIdentityStore;\n preferences: IUserPreferencesStore;\n jwtTokens: IJwtTokensStore;\n completedOnboardings: OnboardingType[];\n pushNotificationPreferences: IPostNotificationPreferencesRequestBody;\n}\n\nexport interface IUserIdentityStore extends IIdentity, IFetch {}\n\nexport interface IUserPreferencesStore extends IFetch {\n userPreferences: IPreference;\n preferencesValues: {\n coverPhotos: string[];\n profileImages: string[];\n providers: IPlatform[];\n };\n}\n\nexport interface IJwtTokens {\n accessToken: string;\n refreshToken: string;\n}\n\nexport interface IJwtTokensStore extends IFetch {\n tokens: IJwtTokens;\n}\n\nconst defaultPreferences: IUserPreferencesStore = {\n userPreferences: {\n coverPhotoUrl: images.defaultCover,\n privacyLevelId: 1,\n profileImageUrl: images.defaultAvatar,\n providers: [],\n },\n preferencesValues: {\n coverPhotos: [],\n profileImages: [],\n providers: [],\n },\n hasFetched: false,\n loading: false,\n};\n\nconst defaultJwtTokens: IJwtTokensStore = {\n tokens: {\n accessToken: \"\",\n refreshToken: \"\",\n },\n hasFetched: false,\n loading: false,\n};\n\nexport const defaultIdentity: IIdentityStore = {\n identity: {\n ssid: \"\",\n isAuthenticated: false,\n displayName: \"\",\n isNewProfile: false,\n isTermsAccepted: false,\n hasFetched: false,\n loading: false,\n countryCode: \"\",\n },\n preferences: defaultPreferences,\n jwtTokens: defaultJwtTokens,\n completedOnboardings: [],\n pushNotificationPreferences: {\n f123: false,\n friendRequests: false,\n },\n};\n","import { IdentityActions, identityReducer } from \"./actions/IdentityActions\";\nimport { PreferencesActions, preferencesReducer } from \"./actions/PreferencesActions\";\nimport { IIdentityStore } from \"./IdentityStore\";\nimport { JwtActions, jwtTokensReducer } from \"./actions/JwtActions\";\nimport { CompletedOnboardingActions, identityCompletedOnboardingReducer } from \"./actions/OnboardingActions\";\nimport {\n NotificationPreferencesActions,\n notificationsPreferencesReducer,\n} from \"./actions/NotificationPreferencesActions\";\n\nexport const reducer = (\n { identity, preferences, jwtTokens, completedOnboardings, pushNotificationPreferences }: IIdentityStore,\n action:\n | IdentityActions\n | PreferencesActions\n | JwtActions\n | CompletedOnboardingActions\n | NotificationPreferencesActions\n): IIdentityStore => ({\n identity: identityReducer(identity, action as IdentityActions),\n preferences: preferencesReducer(preferences, action as PreferencesActions),\n jwtTokens: jwtTokensReducer(jwtTokens, action as JwtActions),\n completedOnboardings: identityCompletedOnboardingReducer(\n completedOnboardings,\n action as CompletedOnboardingActions\n ),\n pushNotificationPreferences: notificationsPreferencesReducer(\n pushNotificationPreferences,\n action as NotificationPreferencesActions\n ),\n});\n","import React, { createContext, FunctionComponent, useContext, useEffect, useReducer, useState } from \"react\";\nimport Loader from \"common/components/Loader\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport InternalServerErrorPage from \"pages/errorPages/InternalServerErrorPage\";\nimport { defaultIdentity, IIdentityStore } from \"./IdentityStore\";\nimport { reducer } from \"./IdentityReducer\";\nimport { setUserId } from \"firebase/analytics\";\nimport { analytics } from \"index\";\nimport { useConfig } from \"../configuration/ConfigurationContext\";\nimport { IFetchAccessTokenRequest } from \"../../apiServices/identity/requests/IFetchAccessTokenRequest\";\nimport { isAuthorized } from \"../../utils/axiosTools\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp, webViewPostMessage } from \"utils/webViewTools\";\nimport { dispatchFetchIdentity } from \"./actions/IdentityActions\";\nimport axios from \"axios\";\nimport { useCookieContext } from \"common/components/cookieConsent/CookieContext\";\nimport ErrorPage from \"pages/errorPages/ErrorPage\";\n\nconst IdentityContext = createContext<{ state: IIdentityStore; dispatch: React.Dispatch }>({\n state: defaultIdentity,\n dispatch: () => null,\n});\n\nexport const IdentityContextProvider: FunctionComponent = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, defaultIdentity);\n const [responseStatus, setResponseStatus] = useState(ResponseStatusEnum.Pending);\n\n const config = useConfig();\n const cookieContext = useCookieContext();\n\n const handleRNmessage = async (event: any) => {\n try {\n // webViewPostMessage(\"Web received: \" + event.data);\n if (event.data && JSON.stringify(event.data).includes(\"Bearer\")) {\n // After receiving the JWT sets the axios header then fetch the Identity\n axios.defaults.headers.authorization = event.data;\n await dispatchFetchIdentity(dispatch);\n setResponseStatus(ResponseStatusEnum.Ok);\n }\n } catch (error) {\n console.log(\"error\");\n setResponseStatus(ResponseStatusEnum.Error);\n }\n };\n\n useEffect(() => {\n // Mobile app JWT token handler to log in webviews\n if (isRaceNetMobileApp || isRaceNetTabletApp) {\n document.addEventListener(\"RaceNetApp\", handleRNmessage);\n webViewPostMessage(\"requestToken\");\n }\n\n if (responseStatus === ResponseStatusEnum.Pending && !(isRaceNetMobileApp || isRaceNetTabletApp)) {\n const authRequest: IFetchAccessTokenRequest = {\n clientId: config.jwtConfig.clientId,\n grantType: config.jwtConfig.refresh_grant_type,\n refreshToken: \"\",\n redirectUri: config.jwtConfig.redirectUri,\n authCode: \"\",\n codeVerifier: \"\",\n };\n\n isAuthorized(dispatch, authRequest)\n .then((response) => {\n setResponseStatus(ResponseStatusEnum.Ok);\n })\n .catch((error) => {\n console.log(\"Error isAuthorised\", error);\n setResponseStatus(ResponseStatusEnum.Error);\n });\n }\n return () => document.removeEventListener(\"RaceNetApp\", handleRNmessage);\n }, [responseStatus]);\n\n const getContent = (status: ResponseStatusEnum) => {\n switch (status) {\n case ResponseStatusEnum.Pending:\n return !isRaceNetMobileApp && !isRaceNetTabletApp && ;\n case ResponseStatusEnum.Error:\n return ;\n case ResponseStatusEnum.Forbidden:\n return (\n \n );\n case ResponseStatusEnum.Ok:\n typeof analytics !== \"undefined\" && setUserId(analytics, state.identity.ssid);\n\n return {children};\n }\n };\n\n return <>{getContent(responseStatus)};\n};\n\nexport const useIdentityContext = () => useContext(IdentityContext);\n","import { ConfigurationActions, configurationReducer } from \"./actions/ConfigurationActions\";\nimport { IConfigurationStore } from \"./ConfigurationStore\";\n\nexport const reducer = (store: IConfigurationStore, action: ConfigurationActions): IConfigurationStore =>\n configurationReducer(store, action);\n","//TODO: maybe move all the settings url in this store ?\n\nimport IFetch from \"common/interfaces/IFetch\";\n\nexport interface IConfigurationStore extends IFetch {\n apiUrl: string;\n notificationHubUrl: string;\n authUrls: {\n login: string;\n loginJwt: string;\n logout: string;\n link: string;\n };\n jwtConfig: {\n clientId: string;\n redirectUri: string;\n response_type: string;\n grant_type: string;\n logoutRedirectUri: string;\n refresh_grant_type: string;\n };\n googleOptimize: {\n experiments: {\n landingPage?: string;\n };\n };\n DR2CarOfWeekVideo: { videoId: string; title: string };\n features: string[];\n redbullContent: {\n title: string;\n logo: string;\n coverMobile: string;\n coverDesktop: string;\n website?: string;\n description: string[];\n steps: string[];\n prizes: { title: string; description: string; coverMobile: string; cover: string }[];\n termsConditionsUrl: string;\n footer: string[];\n knockoutDates: { wheel: string; controller: string };\n finalDates: { wheel: string; controller: string };\n };\n redbullLeaderboardVersion: number;\n wrc2023Esports: {\n terms: {\n preText?: string;\n linkText: string;\n termsLink: string;\n postText?: string;\n };\n };\n}\n\nexport const defaultConfigurationStore: IConfigurationStore = {\n apiUrl: \"\",\n notificationHubUrl: \"\",\n authUrls: {\n login: \"\",\n loginJwt: \"\",\n logout: \"\",\n link: \"\",\n },\n jwtConfig: {\n clientId: \"\",\n redirectUri: \"\",\n response_type: \"\",\n grant_type: \"\",\n refresh_grant_type: \"\",\n logoutRedirectUri: \"\",\n },\n googleOptimize: {\n experiments: {\n landingPage: undefined,\n },\n },\n loading: false,\n hasFetched: false,\n DR2CarOfWeekVideo: { videoId: \"GAvqSOMqawU\", title: \"Volkswagen Polo GTI R5\" },\n features: [],\n redbullContent: {\n title: \"\",\n logo: \"\",\n coverMobile: \"\",\n coverDesktop: \"\",\n description: [],\n steps: [],\n prizes: [],\n termsConditionsUrl: \"\",\n footer: [],\n knockoutDates: { wheel: \"\", controller: \"\" },\n finalDates: { wheel: \"\", controller: \"\" },\n },\n redbullLeaderboardVersion: 0,\n wrc2023Esports: {\n terms: {\n linkText: \"\",\n termsLink: \"\",\n },\n },\n};\n","import axios from \"axios\";\nimport Loader from \"common/components/Loader\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport InternalServerErrorPage from \"pages/errorPages/InternalServerErrorPage\";\nimport React, { createContext, FunctionComponent, useContext, useEffect, useReducer, useState } from \"react\";\nimport { dispatchFetchConfiguration } from \"./actions/ConfigurationActions\";\nimport { reducer } from \"./ConfigurationReducer\";\nimport { IConfigurationStore, defaultConfigurationStore } from \"./ConfigurationStore\";\n\nconst ConfigurationContext = createContext<{ state: IConfigurationStore; dispatch: React.Dispatch }>({\n state: defaultConfigurationStore,\n dispatch: () => null,\n});\n\nexport const ConfigurationContextProvider: FunctionComponent = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, defaultConfigurationStore);\n const [responseStatus, setResponseStatus] = useState(ResponseStatusEnum.Pending);\n\n useEffect(() => {\n dispatchFetchConfiguration(dispatch)\n .then((configJson) => {\n axios.defaults.baseURL = configJson.apiUrl;\n axios.defaults.withCredentials = true;\n setResponseStatus(ResponseStatusEnum.Ok);\n })\n .catch(() => {\n setResponseStatus(ResponseStatusEnum.Error);\n });\n }, []);\n\n const getContent = (status: ResponseStatusEnum) => {\n switch (status) {\n case ResponseStatusEnum.Pending:\n return ;\n case ResponseStatusEnum.Error:\n return ;\n case ResponseStatusEnum.Ok:\n return (\n \n {children}\n \n );\n }\n };\n\n return <>{getContent(responseStatus)};\n};\n\nexport const useConfig = () => useContext(ConfigurationContext).state;\nexport const useConfigDispatch = () => useContext(ConfigurationContext).dispatch;\n","import Img from \"common/components/img/Img\";\n\ninterface IProps {\n laptopImg: string;\n mobileImg: string;\n sm?: boolean;\n}\n\nconst HeroImageDesktop = ({ laptopImg, mobileImg, sm }: IProps) => {\n return (\n \n \n \n \n );\n};\n\nexport default HeroImageDesktop;\n","import { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { ReactComponent as RNLogo } from \"assets/images/logos/racenet/icon_racenetlogofull.svg\";\nimport { styleGuide } from \"theme\";\nimport NewLoginSignupButton from \"containers/navigation/anonymous/NewLoginSignupButton\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"common/components/Spacer\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport HeroImageDesktop from \"./HeroImageDesktop\";\nimport { ITheme, useMediaQuery } from \"@material-ui/core\";\nimport { useTheme } from \"@material-ui/core\";\nimport SectionRacenetApp from \"../sections/SectionRacenetApp\";\nimport Sticky from \"react-sticky-el\";\n\ninterface IProps {\n id: string;\n cdnPath: string;\n title: string;\n description: string;\n appDescription: string;\n game: GamesEnum;\n nav: { id: string; label: string; action: (id: string) => void }[];\n iOsUrl: string;\n playStoreUrl: string;\n}\n\nexport const SET_SELECTED_MENU_EVENT = \"racenet_selected_landing_menu\";\nexport const SCROLL_OFFSET = 5;\n\nconst HeroDesktop = forwardRef(\n ({ cdnPath, title, description, game, nav, iOsUrl, playStoreUrl, appDescription, id }: IProps, ref: any) => {\n const theme: ITheme = useTheme();\n const sm = useMediaQuery(theme.breakpoints.down(\"sm\"));\n\n const [selected, setSelected] = useState(nav[0].id);\n\n const heroImage = useMemo(() => {\n switch (game) {\n case GamesEnum.WRC2023:\n return {\n laptopImg: `${cdnPath}/Desktop_HeroWRCLaptop.png`,\n mobileImg: `${cdnPath}/Desktop_HeroWRCMob.png`,\n sm: sm,\n };\n default:\n return {\n laptopImg: `${cdnPath}/Desktop_HeroF1Laptop.png`,\n mobileImg: `${cdnPath}/Desktop_HeroMob.png`,\n sm: sm,\n };\n }\n }, [game]);\n\n useEffect(() => {\n const setSelectedMenu = (event: any) => {\n setSelected(event.detail);\n };\n\n window.addEventListener(SET_SELECTED_MENU_EVENT, setSelectedMenu);\n\n return () => window.removeEventListener(SET_SELECTED_MENU_EVENT, setSelectedMenu);\n }, []);\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight) {\n setSelected(id);\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n
\n \n
\n \n
\n \n \n \n {title}\n \n \n {description}\n \n \n {/* */}\n \n
\n \n
\n \n
\n \n \n \n \n {nav.map((i) => (\n {\n //setSelected(i.id);\n i.action(i.id);\n }}\n >\n \n {i.label}\n \n \n ))}\n \n \n \n\n \n \n \n \n \n );\n }\n);\n\nexport default HeroDesktop;\n","import { getNotifications } from \"apiServices/notifications/NotificationsApiService\";\nimport { NotificationFilter } from \"apiServices/notifications/requests/INotificationsRequest\";\nimport INotification from \"common/components/notifications/interfaces/INotification\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport { INewNotificationStore } from \"../NotificationContextStore\";\n\nexport enum NewNotificationTypes {\n FetchNewNotifications = \"FETCH_NEW_NOTIFICATIONS\",\n FetchNewNotificationsCompleted = \"FETCH_NEW_NOTIFICATIONS_COMPLETED\",\n SetNewNotifications = \"SET_NEW_NOTIFICATIONS\",\n SetNewNotificationsCount = \"SET_NEW_NOTIFICATIONS_COUNT\",\n SetNewNotificationsLoading = \"SET_NEW_NOTIFICATIONS_LOADING\",\n SetNewNotificationsRefreshable = \"SET_NEW_NOTIFICATIONS_REFRESHABLE\",\n SetNewNotificationsIsLastPage = \"SET_NEW_NOTIFICATIONS_IS_LAST_PAGE\",\n SetNextPageCursor = \"SET_NEXT_PAGE_CURSOR\",\n}\n\ntype NewNotificationTypePayload = {\n [NewNotificationTypes.FetchNewNotifications]: INotification[];\n [NewNotificationTypes.FetchNewNotificationsCompleted]: INotification[];\n [NewNotificationTypes.SetNewNotifications]: INotification[];\n [NewNotificationTypes.SetNewNotificationsCount]: number;\n [NewNotificationTypes.SetNewNotificationsLoading]: boolean;\n [NewNotificationTypes.SetNewNotificationsRefreshable]: boolean;\n [NewNotificationTypes.SetNewNotificationsIsLastPage]: boolean;\n [NewNotificationTypes.SetNextPageCursor]: string;\n};\n\nexport type NewNotificationActions = ActionMap[keyof ActionMap];\n\nconst numberOfNotificationsPerPage = 10;\n\nexport const dispatchFetchNewNotifications = async (\n dispatch: React.Dispatch,\n newNotifications: INotification[],\n cursor?: string\n) => {\n dispatch({\n type: NewNotificationTypes.FetchNewNotifications,\n });\n\n const response = await getNotifications({\n cursor: cursor,\n take: numberOfNotificationsPerPage,\n filter: NotificationFilter.UnRead,\n });\n\n const filteredArr: INotification[] = [];\n const uniqueIds = new Set();\n\n newNotifications.forEach((item) => {\n if (!uniqueIds.has(item.notificationID)) {\n uniqueIds.add(item.notificationID);\n filteredArr.push(item);\n }\n });\n\n response.notifications.forEach((item) => {\n if (!uniqueIds.has(item.notificationID)) {\n uniqueIds.add(item.notificationID);\n\n filteredArr.push(item);\n }\n });\n\n const sortedByDateArray = filteredArr.sort(\n (a, b) => new Date(b.datePosted as string).valueOf() - new Date(a.datePosted as string).valueOf()\n );\n\n dispatchSetNewNotifications(dispatch, sortedByDateArray);\n dispatchSetNextPageCursor(dispatch, response.nextPageCursor);\n dispatchSetIsNotificationsLastPage(dispatch, !response.loadMore);\n dispatchSetNewNotificationsCount(dispatch, response.notifications.length);\n\n return response.notifications;\n};\n\nexport const dispatchSetNewNotifications = (dispatch: React.Dispatch, notifications: INotification[]) => {\n dispatch({\n type: NewNotificationTypes.SetNewNotifications,\n payload: notifications,\n });\n};\n\nexport const dispatchSetNewNotificationsCount = (dispatch: React.Dispatch, count: number) => {\n dispatch({\n type: NewNotificationTypes.SetNewNotificationsCount,\n payload: count,\n });\n};\n\nexport const dispatchSetNewNotificationsRefreshable = (dispatch: React.Dispatch, refreshable: boolean) => {\n dispatch({\n type: NewNotificationTypes.SetNewNotificationsRefreshable,\n payload: refreshable,\n });\n};\n\nexport const dispatchSetIsNotificationsLastPage = (dispatch: React.Dispatch, isLastPage: boolean) => {\n dispatch({\n type: NewNotificationTypes.SetNewNotificationsIsLastPage,\n payload: isLastPage,\n });\n};\n\nexport const dispatchSetNextPageCursor = (dispatch: React.Dispatch, cursor?: string) => {\n dispatch({\n type: NewNotificationTypes.SetNextPageCursor,\n payload: cursor,\n });\n\n return cursor;\n};\n\nexport const newNotificationReducer = (\n state: INewNotificationStore,\n action: NewNotificationActions\n): INewNotificationStore => {\n switch (action.type) {\n case NewNotificationTypes.SetNewNotifications:\n return {\n ...state,\n notifications: action.payload,\n };\n case NewNotificationTypes.SetNewNotificationsCount:\n return {\n ...state,\n count: action.payload,\n };\n case NewNotificationTypes.SetNewNotificationsLoading:\n return {\n ...state,\n loading: action.payload,\n };\n case NewNotificationTypes.SetNewNotificationsRefreshable:\n return {\n ...state,\n refreshable: action.payload,\n };\n case NewNotificationTypes.SetNewNotificationsIsLastPage:\n return {\n ...state,\n isLastPage: action.payload,\n };\n case NewNotificationTypes.SetNextPageCursor:\n return {\n ...state,\n nextPageCursor: action.payload,\n };\n default:\n return state;\n }\n};\n","import { ActionMap } from \"common/types/ActionMapType\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport { IApplicationStore } from \"./ApplicationContextStore\";\nimport { getApplication } from \"apiServices/application/ApplicationApiService\";\nimport { EAPaths, gameSettings } from \"settings\";\nimport IGameSettingsResponse from \"apiServices/application/response/IGameSettingsResponse\";\nimport { IGameSettings } from \"common/interfaces/IApplication\";\nimport { trimEndSlash } from \"utils/urlHelper\";\n\nenum ApplicationTypes {\n FetchApplication = \"FETCH_APPLICATION\",\n FetchApplicationCompleted = \"FETCH_APPLICATION_COMPLETED\",\n UpdateAxiosHeader = \"UPDATE_AXIOS_HEADER\",\n}\n\ntype ApplicationTypePayload = {\n [ApplicationTypes.FetchApplication]: IApplicationStore;\n [ApplicationTypes.FetchApplicationCompleted]: IApplicationStore;\n};\n\nexport type ApplicationActions = ActionMap[keyof ActionMap];\n\nconst resolveSupportedGames = (games: IGameSettingsResponse[]): IGameSettings[] => {\n let supportedGames: IGameSettings[] = [];\n\n games?.map((g) => {\n const gameSetting = gameSettings.find((f) => f.gameId === g.gameId);\n const game = {\n ...g,\n route: gameSetting?.route,\n activityFeedEnabled: gameSetting?.activityFeedEnabled ?? false,\n };\n supportedGames.push(game);\n });\n\n return supportedGames;\n};\n\nexport const dispatchFetchApplication = async (dispatch: React.Dispatch) => {\n dispatch({\n type: ApplicationTypes.FetchApplication,\n });\n\n const response = await getApplication();\n\n if (response.status === ResponseStatusEnum.Error) throw new Error(\"Error while fetching identity data!\");\n\n dispatch({\n type: ApplicationTypes.FetchApplicationCompleted,\n payload: {\n minSearchFriendCharacters: response.data.minSearchFriendCharacters,\n youtubeFeedVideoId: response.data.youtubeFeedVideoId,\n surveyUrl: response.data.surveyUrl,\n gameStatsSurveyUrl: response.data.gameStatsSurveyUrl,\n accountWeb: `${trimEndSlash(response.data.accountWeb)}/${EAPaths.index}`,\n registerWeb: response.data.registerWeb,\n platformsWeb: `${trimEndSlash(response.data.accountWeb)}/${EAPaths.linkedPlatforms}`,\n hasFetchedData: true,\n cdnUrl: response.data.cdnUrl,\n supportedGames: resolveSupportedGames(response.data.supportedGames),\n registrationOpen: response.data.registrationOpen,\n registrationLimit: response.data.registrationLimit,\n racenetLegacyUrl: response.data.racenetLegacyUrl,\n version: {\n major: response.data.version.major,\n minor: response.data.version.minor,\n patch: response.data.version.patch,\n version: response.data.version.version,\n },\n iosUrl: response.data.iosUrl,\n playStoreUrl: response.data.playStoreUrl,\n },\n });\n return response;\n};\n\nexport const applicationReducer = (state: IApplicationStore, action: ApplicationActions): IApplicationStore => {\n switch (action.type) {\n case ApplicationTypes.FetchApplication:\n return {\n ...state,\n loading: true,\n };\n case ApplicationTypes.FetchApplicationCompleted:\n return {\n ...action.payload,\n loading: false,\n hasFetched: true,\n };\n default:\n return state;\n }\n};\n","import IApplication from \"common/interfaces/IApplication\";\nimport IFetch from \"common/interfaces/IFetch\";\n\nexport interface IApplicationStore extends IApplication, IFetch {\n platformsWeb: string;\n}\n\nexport interface IApplicationContextStore {\n applicationStore: IApplicationStore;\n}\n\nexport const defaultApplicationContext: IApplicationContextStore = {\n applicationStore: {\n hasFetchedData: false,\n minSearchFriendCharacters: 3,\n youtubeFeedVideoId: \"\",\n surveyUrl: \"\",\n gameStatsSurveyUrl: \"\",\n accountWeb: \"\",\n registerWeb: \"\",\n platformsWeb: \"\",\n cdnUrl: \"\",\n supportedGames: [],\n loading: false,\n hasFetched: false,\n registrationOpen: false,\n registrationLimit: 0,\n racenetLegacyUrl: \"\",\n version: {\n major: 0,\n minor: 0,\n patch: 0,\n version: \"\",\n },\n iosUrl: \"\",\n playStoreUrl: \"\",\n },\n};\n","import axios from \"axios\";\nimport { apiUrls } from \"settings\";\nimport { trimEndSlash } from \"utils/urlHelper\";\n\nexport const getApplication = async () => {\n const response = await axios.get(trimEndSlash(apiUrls.getApplication));\n\n return response;\n};\n","import { ApplicationActions, applicationReducer } from \"./ApplicationActions\";\nimport { IApplicationContextStore } from \"./ApplicationContextStore\";\n\nexport const reducer = (\n { applicationStore }: IApplicationContextStore,\n action: ApplicationActions\n): IApplicationContextStore => ({\n applicationStore: applicationReducer(applicationStore, action as ApplicationActions),\n});\n","import React, { useState, createContext, useEffect, useContext, FunctionComponent, useReducer } from \"react\";\nimport Loader from \"common/components/Loader\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport InternalServerErrorPage from \"pages/errorPages/InternalServerErrorPage\";\nimport { IApplicationStore, defaultApplicationContext, IApplicationContextStore } from \"./ApplicationContextStore\";\nimport { dispatchFetchApplication } from \"./ApplicationActions\";\nimport axios, { AxiosResponse } from \"axios\";\nimport { reducer } from \"./ApplicationReducer\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport { useConfigDispatch } from \"contexts/configuration/ConfigurationContext\";\nimport { dispatchFetchFeatures } from \"contexts/configuration/actions/ConfigurationActions\";\n\nconst ApplicationContext = createContext<{ state: IApplicationContextStore; dispatch: React.Dispatch }>({\n state: defaultApplicationContext,\n dispatch: () => null,\n});\n\nexport const ApplicationContextProvider: FunctionComponent = ({ children }) => {\n const configurationDispatch = useConfigDispatch();\n const [state, dispatch] = useReducer(reducer, defaultApplicationContext);\n const [responseStatus, setResponseStatus] = useState(ResponseStatusEnum.Pending);\n\n const setAxios = (response: AxiosResponse) => {\n if (isRaceNetMobileApp || isRaceNetTabletApp) return;\n axios.interceptors.response.use(\n (response) => {\n return response;\n },\n (error) => {\n if (axios.isCancel(error)) {\n return response;\n } else if (error.response.status === ResponseStatusEnum.Forbidden) {\n console.log(\"Forbiden: Access for restricted users only\");\n setResponseStatus(ResponseStatusEnum.Forbidden);\n }\n return Promise.reject(error);\n }\n );\n };\n\n useEffect(() => {\n if (responseStatus === ResponseStatusEnum.Pending) {\n dispatchFetchApplication(dispatch)\n .then((response) => {\n setResponseStatus(ResponseStatusEnum.Ok);\n return response;\n })\n .then((response) => {\n dispatchFetchFeatures(configurationDispatch, response.data.cdnUrl);\n setAxios(response);\n })\n .catch((e) => {\n console.log(\"Error fetching application\", e);\n setResponseStatus(ResponseStatusEnum.Error);\n });\n }\n }, [responseStatus]);\n\n const getContent = (status: ResponseStatusEnum) => {\n switch (status) {\n case ResponseStatusEnum.Pending:\n return !isRaceNetMobileApp && !isRaceNetTabletApp && ;\n case ResponseStatusEnum.Error:\n return ;\n case ResponseStatusEnum.Ok:\n return (\n {children}\n );\n }\n };\n\n return <>{getContent(responseStatus)};\n};\n\nexport const useApplicationContext = () => useContext(ApplicationContext);\n","import Button, { ButtonProps } from \"@material-ui/core/Button\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport { fontTypes, paCar2Colour, styleGuide } from \"theme\";\nimport clsx from \"clsx\";\nimport { CSSProperties } from \"@material-ui/core/styles/withStyles\";\nimport { ITheme } from \"@material-ui/core\";\n\nexport const largeButtonFontSize = \"1.1rem\";\nconst buttonBorderRadius = 4;\n\nexport function getButtonBorder(colour: string) {\n return `2px solid ${colour}`;\n}\n\ntype IButtonStyle = {\n [key in StyledButtonVariant]: { highlighted: CSSProperties; default: CSSProperties };\n};\n\nexport function getButtonStyles(theme: ITheme): IButtonStyle {\n return {\n primary: {\n default: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.primary.main + theme.styles.cssImportant,\n },\n },\n primaryWithBorder: {\n default: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.main),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.primary.main + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.main),\n },\n },\n secondary: {\n default: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText + theme.styles.cssImportant,\n },\n highlighted: {\n backgroundColor: theme.palette.secondary.contrastText,\n color: theme.palette.secondary.main + theme.styles.cssImportant,\n },\n },\n secondaryLight: {\n default: {\n backgroundColor: theme.palette.secondary.light,\n color: \"#fff\" + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.secondary.light),\n },\n highlighted: {\n backgroundColor: theme.palette.secondary.contrastText,\n color: theme.palette.secondary.light + theme.styles.cssImportant,\n },\n },\n transparent: {\n default: {\n backgroundColor: theme.variants.transparentColour,\n color: theme.styles.transparentBg + theme.styles.cssImportant,\n border: getButtonBorder(theme.styles.transparentBg),\n },\n highlighted: {\n backgroundColor: theme.styles.transparentBg,\n color: theme.styles.transparentButton + theme.styles.cssImportant,\n border: getButtonBorder(theme.styles.transparentBg),\n },\n },\n transparentLight: {\n default: {\n backgroundColor: theme.variants.transparentColour,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.contrastText),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.primary.main + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.contrastText),\n },\n },\n transparentInfo: {\n default: {\n backgroundColor: theme.variants.transparentColour,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.contrastText),\n },\n highlighted: {\n backgroundColor: theme.palette.info.main,\n color: styleGuide.color.white + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.info.main),\n },\n },\n transparentDark: {\n default: {\n backgroundColor: theme.variants.transparentColour,\n color: theme.palette.background.default + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.background.default),\n },\n highlighted: {\n backgroundColor: theme.palette.background.default,\n color: styleGuide.color.white + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.background.default),\n },\n },\n infoPrimary: {\n default: {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.common.black + theme.styles.cssImportant,\n },\n },\n infoLight: {\n default: {\n backgroundColor: theme.palette.info.light,\n color: theme.palette.primary.dark + theme.styles.cssImportant,\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.common.black + theme.styles.cssImportant,\n },\n },\n infoLightTransparent: {\n default: {\n backgroundColor: theme.palette.background.default,\n color: theme.palette.info.light + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.info.light),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.common.black + theme.styles.cssImportant,\n border: getButtonBorder(styleGuide.color.white),\n },\n },\n infoSecondary: {\n default: {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.info.main),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.common.black + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.info.main),\n },\n },\n whitePrimary: {\n default: {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.primary.main + theme.styles.cssImportant,\n border: getButtonBorder(styleGuide.color.white),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.main,\n color: styleGuide.color.white + theme.styles.cssImportant,\n border: getButtonBorder(styleGuide.color.white),\n },\n },\n whiteSecondary: {\n default: {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.secondary.main + theme.styles.cssImportant,\n border: getButtonBorder(styleGuide.color.white),\n },\n highlighted: {\n backgroundColor: theme.palette.secondary.main,\n color: styleGuide.color.white + theme.styles.cssImportant,\n border: getButtonBorder(styleGuide.color.white),\n },\n },\n link: {\n default: {\n backgroundColor: \"transparent\",\n color: theme.palette.secondary.main + theme.styles.cssImportant,\n textDecoration: \"underline\",\n ...fontTypes.mediumItalic,\n },\n highlighted: {\n backgroundColor: \"transparent\",\n color: styleGuide.color.white + theme.styles.cssImportant,\n textDecoration: \"underline\",\n },\n },\n infoTransparent: {\n default: {\n backgroundColor: theme.variants.transparentColour,\n color: theme.palette.primary.contrastText + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.info.main),\n },\n highlighted: {\n backgroundColor: theme.palette.primary.contrastText,\n color: theme.palette.primary.main + theme.styles.cssImportant,\n border: getButtonBorder(theme.palette.primary.contrastText),\n },\n },\n paCompare: {\n default: {\n backgroundColor: \"transparent\",\n color: paCar2Colour,\n textDecoration: \"underline\",\n ...fontTypes.mediumItalic,\n },\n highlighted: {\n backgroundColor: \"transparent\",\n color: \"#F2F2F2\",\n textDecoration: \"underline\",\n },\n },\n linkInfo: {\n default: {\n backgroundColor: \"transparent\",\n color: \"#B0B6F4\",\n textDecoration: \"underline\",\n ...fontTypes.mediumItalic,\n },\n highlighted: {\n backgroundColor: \"transparent\",\n color: \"#F2F2F2\",\n textDecoration: \"underline\",\n },\n },\n EAAccount: {\n default: {\n backgroundColor: \"#276afc\",\n color: styleGuide.color.white + theme.styles.cssImportant,\n },\n highlighted: {\n backgroundColor: \"#276afc\",\n color: styleGuide.color.white + theme.styles.cssImportant,\n },\n },\n };\n}\n\ninterface IStylesOptions {\n highlighted: boolean;\n textCase: StyledButtonCase;\n disableDefaultWidth: boolean;\n}\n\nexport const useStyledButtonStyles = (options: IStylesOptions) =>\n makeStyles((theme: ITheme) => {\n const { highlighted, textCase, disableDefaultWidth } = options;\n\n const buttonStyles = getButtonStyles(theme);\n\n const primaryTheme = highlighted ? buttonStyles.primary.highlighted : buttonStyles.primary.default;\n\n const primaryWithBorderTheme = highlighted\n ? buttonStyles.primaryWithBorder.highlighted\n : buttonStyles.primaryWithBorder.default;\n\n const secondaryTheme = highlighted ? buttonStyles.secondary.highlighted : buttonStyles.secondary.default;\n\n const secondaryLightTheme = highlighted\n ? buttonStyles.secondaryLight.highlighted\n : buttonStyles.secondaryLight.default;\n\n const transparentTheme = highlighted ? buttonStyles.transparent.highlighted : buttonStyles.transparent.default;\n\n const transparentLightTheme = highlighted\n ? buttonStyles.transparentLight.highlighted\n : buttonStyles.transparentLight.default;\n\n const transparentInfoTheme = highlighted\n ? buttonStyles.transparentInfo.highlighted\n : buttonStyles.transparentInfo.default;\n\n const transparentDarkTheme = highlighted\n ? buttonStyles.transparentDark.highlighted\n : buttonStyles.transparentDark.default;\n\n const infoPrimaryTheme = highlighted ? buttonStyles.infoPrimary.highlighted : buttonStyles.infoPrimary.default;\n\n const infoLightTheme = highlighted ? buttonStyles.infoLight.highlighted : buttonStyles.infoLight.default;\n\n const infoLightTransparentTheme = highlighted\n ? buttonStyles.infoLightTransparent.highlighted\n : buttonStyles.infoLightTransparent.default;\n\n const infoSecondaryTheme = highlighted\n ? buttonStyles.infoSecondary.highlighted\n : buttonStyles.infoSecondary.default;\n\n const whitePrimaryTheme = highlighted\n ? buttonStyles.whitePrimary.highlighted\n : buttonStyles.whitePrimary.default;\n\n const whiteSecondaryTheme = highlighted\n ? buttonStyles.whiteSecondary.highlighted\n : buttonStyles.whiteSecondary.default;\n\n const linkTheme = highlighted ? buttonStyles.link.highlighted : buttonStyles.link.default;\n\n const infoTransparentTheme = highlighted\n ? buttonStyles.infoTransparent.highlighted\n : buttonStyles.infoTransparent.default;\n\n const paCompareTheme = highlighted ? buttonStyles.paCompare.highlighted : buttonStyles.paCompare.default;\n\n const linkInfoTheme = highlighted ? buttonStyles.linkInfo.highlighted : buttonStyles.linkInfo.default;\n\n const eaAccountTheme = buttonStyles.EAAccount.default;\n\n const getMinWidth = (minWidth: number) => {\n return disableDefaultWidth ? \"unset\" : minWidth;\n };\n\n return createStyles({\n root: {\n boxShadow: \"none\",\n textTransform: textCase,\n transition: theme.transitions.create(\"all\", {\n duration: theme.transitions.duration.standard,\n easing: theme.transitions.easing.easeInOut,\n }),\n padding: `4px 24px`,\n border: getButtonBorder(theme.variants.transparentColour),\n whiteSpace: \"nowrap\",\n borderRadius: buttonBorderRadius,\n minWidth: getMinWidth(150),\n letterSpacing: 2.4,\n },\n sizeSmall: {\n padding: theme.spacing(0.4, 1),\n minWidth: getMinWidth(100),\n },\n sizeLarge: {\n padding: theme.spacing(0.4, 4),\n fontSize: largeButtonFontSize,\n minWidth: getMinWidth(200),\n },\n primary: {\n ...primaryTheme,\n \"&:hover\": { ...buttonStyles.primary.highlighted },\n },\n primaryWithBorder: {\n ...primaryWithBorderTheme,\n \"&:hover\": { ...buttonStyles.primaryWithBorder.highlighted },\n },\n secondary: {\n ...secondaryTheme,\n \"&:hover\": { ...buttonStyles.secondary.highlighted },\n },\n secondaryLight: {\n ...secondaryLightTheme,\n \"&:hover\": { ...buttonStyles.secondaryLight.highlighted },\n },\n transparent: {\n ...transparentTheme,\n \"&:hover\": { ...buttonStyles.transparent.highlighted },\n },\n transparentLight: {\n ...transparentLightTheme,\n \"&:hover\": { ...buttonStyles.transparentLight.highlighted },\n },\n transparentInfo: {\n ...transparentInfoTheme,\n \"&:hover\": { ...buttonStyles.transparentInfo.highlighted },\n },\n transparentDark: {\n ...transparentDarkTheme,\n \"&:hover\": { ...buttonStyles.transparentDark.highlighted },\n },\n infoPrimary: {\n ...infoPrimaryTheme,\n \"&:hover\": { ...buttonStyles.infoPrimary.highlighted },\n },\n infoLight: {\n ...infoLightTheme,\n \"&:hover\": { ...buttonStyles.infoLight.highlighted },\n },\n infoLightTransparent: {\n ...infoLightTransparentTheme,\n \"&:hover\": { ...buttonStyles.infoLightTransparent.highlighted },\n },\n infoSecondary: {\n ...infoSecondaryTheme,\n \"&:hover\": { ...buttonStyles.infoSecondary.highlighted },\n },\n whitePrimary: {\n ...whitePrimaryTheme,\n \"&:hover\": { ...buttonStyles.whitePrimary.highlighted },\n },\n whiteSecondary: {\n ...whiteSecondaryTheme,\n \"&:hover\": { ...buttonStyles.whiteSecondary.highlighted },\n },\n link: {\n ...linkTheme,\n \"&:hover\": { ...buttonStyles.link.highlighted },\n },\n infoTransparent: {\n ...infoTransparentTheme,\n \"&:hover\": { ...buttonStyles.infoTransparent.highlighted },\n },\n paCompare: {\n ...paCompareTheme,\n \"&:hover\": { ...buttonStyles.paCompare.highlighted },\n \"&:visited\": { ...buttonStyles.paCompare.default },\n },\n linkInfo: {\n ...linkInfoTheme,\n \"&:hover\": { ...buttonStyles.linkInfo.highlighted },\n \"&:visited\": { ...buttonStyles.linkInfo.default },\n },\n disabled: {\n backgroundColor: \"#343647 \" + theme.styles.cssImportant,\n border: getButtonBorder(theme.variants.transparentColour) + theme.styles.cssImportant,\n color: theme.variants.EADisabled + theme.styles.cssImportant,\n opacity: 0.85,\n },\n EAAccount: {\n ...eaAccountTheme,\n \"&:hover\": { ...buttonStyles.EAAccount.highlighted },\n \"&:visited\": { ...buttonStyles.EAAccount.default },\n },\n });\n });\n\nexport type StyledButtonVariant =\n | \"primary\"\n | \"primaryWithBorder\"\n | \"secondary\"\n | \"secondaryLight\"\n | \"transparent\"\n | \"transparentLight\"\n | \"transparentInfo\"\n | \"transparentDark\"\n | \"infoPrimary\"\n | \"infoLight\"\n | \"infoLightTransparent\"\n | \"infoSecondary\"\n | \"whitePrimary\"\n | \"whiteSecondary\"\n | \"infoTransparent\"\n | \"link\"\n | \"paCompare\"\n | \"linkInfo\"\n | \"EAAccount\";\n\ntype StyledButtonCase = \"none\" | \"capitalize\" | \"uppercase\" | \"lowercase\";\n\nexport interface IStyledButtonProps extends Omit {\n variant?: StyledButtonVariant;\n highlighted?: boolean;\n disableDefaultWidth?: boolean;\n textCase?: StyledButtonCase;\n}\n\nexport default function StyledButton(props: IStyledButtonProps) {\n const {\n children,\n className,\n variant = \"primary\",\n highlighted = false,\n textCase = \"uppercase\",\n disabled = false,\n disableDefaultWidth = false,\n ...rest\n } = props;\n const classes = useStyledButtonStyles({ highlighted, textCase, disableDefaultWidth })();\n\n return (\n \n {children}\n \n );\n}\n","import axios from \"axios\";\nimport { apiUrls } from \"settings\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport IIdentityResponse from \"./responses/IIdentityResponse\";\nimport { IFetchAccessTokenRequest } from \"./requests/IFetchAccessTokenRequest\";\nimport { defaultTokenResponse, IAccessTokenResponse } from \"./responses/IAccessTokenResponse\";\nimport IWebAccpetanceTextResponse from \"./responses/IWebAcceptanceTextResponse\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport { OnboardingType } from \"./types/OnboardingTypes\";\nimport QueryParameter, { constructQueryParameterString } from \"apiServices/QueryParameter\";\nimport { IPostNotificationPreferencesRequestBody } from \"./requests/IPostNotificationPreferencesRequest\";\nimport { IPostNotificationPreferencesResponse } from \"./responses/IPostNotificationPreferences\";\n\nexport const fetchIdentity = async (): Promise => {\n const response = await axios\n .get(`${isRaceNetMobileApp || isRaceNetTabletApp ? apiUrls.getMobileIdentity : apiUrls.getIdentity}`, {\n withCredentials: true,\n })\n .then((response) => {\n return response;\n })\n .catch((error) => {\n console.log(\"Error\", error);\n return error;\n });\n\n return {\n responseStatus: response.status,\n identity: response.data,\n };\n};\n\nexport const fetchSecureIdentity = async (): Promise => {\n let url = axios.defaults.headers.authorization ? apiUrls.identity.getSecuredIdentity : apiUrls.getIdentity;\n const response = await axios.get(`${url}`);\n\n return {\n responseStatus: response.status,\n identity: { ...response.data, isBetaUser: true },\n };\n};\n\nexport const fetchAccessToken = async (request: IFetchAccessTokenRequest): Promise => {\n const response = await axios.post(apiUrls.identity.getAccessToken, request, {\n withCredentials: true,\n });\n\n return response.data;\n};\n\nexport const refreshAccessToken = async (request: IFetchAccessTokenRequest): Promise => {\n const response = await axios.post(apiUrls.identity.refreshTokens, request, {\n withCredentials: true,\n });\n\n if (response.status === 204) {\n return defaultTokenResponse;\n }\n\n return response.data;\n};\n\nexport const logoutUser = async (): Promise => {\n const response = await axios.post(\n apiUrls.identity.logout,\n {},\n {\n withCredentials: true,\n }\n );\n};\n\nexport const fetchWebAcceptanceText = async (): Promise => {\n const response = await axios.get(apiUrls.identity.getWebAcceptanceText, {\n validateStatus: function (status) {\n return status < 500;\n },\n });\n\n if (response.status === ResponseStatusEnum.Ok) return response.data;\n\n return undefined;\n};\n\nexport const postWebAcceptance = async (acceptanceId: string): Promise => {\n const response = await axios.post(apiUrls.identity.postWebAcceptance(acceptanceId), undefined, {\n validateStatus: function (status) {\n return status < 500;\n },\n });\n\n if (response.status === ResponseStatusEnum.NoContent) return true;\n\n return false;\n};\n\nexport const postOnboarding = async (onboardingTypeId: OnboardingType): Promise => {\n const queryParams: QueryParameter[] = [new QueryParameter(\"onboardingTypeId\", onboardingTypeId)];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.post(\n `${apiUrls.identity.postOnboarding}${queryParamString}`,\n {},\n {\n validateStatus: function (status) {\n return status < 500; // Resolve only if the status code is less than 500\n },\n }\n );\n\n if (response.status === ResponseStatusEnum.NoContent) return true;\n\n return false;\n};\n\nexport const postNotificationPreferences = async (\n data: IPostNotificationPreferencesRequestBody\n): Promise => {\n const response = await axios.post(apiUrls.identity.postNotificationPreferences, data, {\n headers: {\n \"content-type\": \"application/json\",\n },\n });\n\n return {\n data: response.data,\n status: response.status,\n };\n};\n\nexport const fetchLimitedToken = async (): Promise => {\n const response = await axios.get(apiUrls.identity.getLmitedToken);\n\n return response.data;\n};\n","import { getNotifications } from \"apiServices/notifications/NotificationsApiService\";\nimport { NotificationFilter } from \"apiServices/notifications/requests/INotificationsRequest\";\nimport INotification from \"common/components/notifications/interfaces/INotification\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport { IOldNotificationStore } from \"../NotificationContextStore\";\n\nexport enum OldNotificationTypes {\n FetchOldNotifications = \"FETCH_OLD_NOTIFICATIONS\",\n FetchOldNotificationsCompleted = \"FETCH_OLD_NOTIFICATIONS_COMPLETED\",\n SetOldNotifications = \"SET_OLD_NOTFICATIONS\",\n SetOldNotificationsIsLastPage = \"SET_OLD_NOTFICATIONS_IS_LAST_PAGE\",\n SetOldNotificationsLoading = \"SET_OLD_NOTFICATIONS_IS_LOADING\",\n SetOldNotificationsNextPageCursor = \"SET_NOTIFICATIONS_NEXT_PAGE_CURSOR\",\n}\n\ntype OldNotificationTypePayload = {\n [OldNotificationTypes.FetchOldNotifications]: INotification[];\n [OldNotificationTypes.FetchOldNotificationsCompleted]: INotification[];\n [OldNotificationTypes.SetOldNotifications]: INotification[];\n [OldNotificationTypes.SetOldNotificationsIsLastPage]: boolean;\n [OldNotificationTypes.SetOldNotificationsLoading]: boolean;\n [OldNotificationTypes.SetOldNotificationsNextPageCursor]: string;\n};\n\nexport type OldNotificationActions = ActionMap[keyof ActionMap];\n\nconst numberOfNotificationsPerPage = 10;\n\nexport const dispatchFetchOldNotifications = async (\n dispatch: React.Dispatch,\n oldNotifications: INotification[],\n oldNextPageCursor?: string\n) => {\n dispatch({\n type: OldNotificationTypes.FetchOldNotifications,\n });\n\n dispatchSetOldNotificationsLoading(dispatch, true);\n\n const response = await getNotifications({\n cursor: oldNextPageCursor,\n take: numberOfNotificationsPerPage,\n filter: NotificationFilter.Read,\n });\n\n dispatchSetOldNotifications(dispatch, oldNotifications.concat(response.notifications));\n dispatchSetNextPageCursor(dispatch, response.nextPageCursor);\n dispatchSetOldNotificationsIsLastPage(dispatch, !response.loadMore);\n dispatchSetOldNotificationsLoading(dispatch, false);\n\n return response.notifications;\n};\n\nexport const dispatchSetOldNotifications = (dispatch: React.Dispatch, oldNotifications: INotification[]) => {\n dispatch({\n type: OldNotificationTypes.SetOldNotifications,\n payload: oldNotifications,\n });\n};\n\nexport const dispatchSetOldNotificationsIsLastPage = (dispatch: React.Dispatch, isLastPage: boolean) => {\n dispatch({\n typye: OldNotificationTypes.SetOldNotificationsIsLastPage,\n payload: isLastPage,\n });\n};\n\nexport const dispatchSetOldNotificationsLoading = (dispatch: React.Dispatch, loading: boolean) => {\n dispatch({\n type: OldNotificationTypes.SetOldNotificationsLoading,\n payload: loading,\n });\n};\n\nexport const dispatchSetNextPageCursor = (dispatch: React.Dispatch, cursor?: string) => {\n dispatch({\n type: OldNotificationTypes.SetOldNotificationsNextPageCursor,\n payload: cursor,\n });\n\n return cursor;\n};\n\nexport const oldNotificationReducer = (\n state: IOldNotificationStore,\n action: OldNotificationActions\n): IOldNotificationStore => {\n switch (action.type) {\n case OldNotificationTypes.SetOldNotifications:\n return {\n ...state,\n notifications: action.payload,\n };\n case OldNotificationTypes.SetOldNotificationsIsLastPage:\n return {\n ...state,\n isLastPage: action.payload,\n };\n case OldNotificationTypes.SetOldNotificationsLoading:\n return {\n ...state,\n loading: action.payload,\n };\n case OldNotificationTypes.SetOldNotificationsNextPageCursor:\n return {\n ...state,\n nextPageCursor: action.payload,\n };\n default:\n return state;\n }\n};\n","import React, { ReactNode } from \"react\";\nimport StyledButton, { IStyledButtonProps } from \"./StyledButton\";\nimport RouterLink from \"common/components/links/RouterLink\";\n\ninterface IProps extends IStyledButtonProps {\n children?: ReactNode;\n to: string;\n}\n\nexport default function RouterLinkButton(props: IProps) {\n const { children, to, ...rest } = props;\n\n return (\n \n {children}\n \n );\n}\n","import { useContext } from \"react\";\nimport TrainTrackContext from \"./TrainTrackContext\";\n\nexport default function useTrainTracks() {\n return useContext(TrainTrackContext);\n}\n","import { createContext, ReactNode, useContext, useEffect, useState } from \"react\";\nimport { getCookiePreferences } from \"./CookiePreferenceStorageService\";\nimport ICookiePreferences from \"./ICookiePreferences\";\n\ninterface IProps {\n children: ReactNode;\n onPreferencesUpdate: (preferences: ICookiePreferences) => void;\n}\n\nexport interface ICookieContext {\n cookieBannerIsOpen: boolean;\n preferences?: ICookiePreferences;\n onCloseOverlay: () => void;\n savePreferences: (preferences: ICookiePreferences) => void;\n}\n\nconst defaultCookieContext: ICookieContext = {\n cookieBannerIsOpen: false,\n preferences: undefined,\n onCloseOverlay: () => {},\n savePreferences: () => {},\n};\n\nconst CookieContext = createContext(defaultCookieContext);\n\nexport const CookieContextProvider = (props: IProps) => {\n const { onPreferencesUpdate, children } = props;\n\n const localStoragePreferences = getCookiePreferences();\n\n const [preferences, setPreferences] = useState(localStoragePreferences);\n\n const [cookieBannerIsOpen, setCookieBannerIsOpen] = useState(typeof preferences === \"undefined\");\n\n const onCloseOverlay = () => {\n setCookieBannerIsOpen(false);\n };\n\n const savePreferences = (_preferences: ICookiePreferences) => {\n setPreferences(_preferences);\n onPreferencesUpdate(_preferences);\n };\n\n const cookieStore: ICookieContext = {\n cookieBannerIsOpen: cookieBannerIsOpen,\n preferences: preferences,\n onCloseOverlay: onCloseOverlay,\n savePreferences: savePreferences,\n };\n\n useEffect(() => {\n if (typeof preferences === \"undefined\") return;\n\n onPreferencesUpdate(preferences);\n }, [preferences]);\n\n useEffect(() => {\n document.body.addEventListener(\"truste-consent\", () => onCloseOverlay());\n\n return () => {\n document.body.removeEventListener(\"truste-consent\", () => {});\n };\n }, [cookieBannerIsOpen]);\n\n return {children};\n};\n\nexport const useCookieContext = () => useContext(CookieContext);\n","export const validateSsid = (ssid: string) => {\n if (ssid.length === 0) {\n throw new Error(\"ssid is required\");\n }\n};\n\nexport const validateTrackId = (trackId: number) => {\n if (trackId <= 0) {\n throw new Error(\"a track id is required\");\n }\n};\n","import { isRaceNetMobileApp, isRaceNetTabletApp, webViewPostMessage } from \"./webViewTools\";\n\nexport const postAnalyticsEvent = (eventName: string, data?: any) => {\n if (isRaceNetMobileApp || isRaceNetTabletApp) {\n const messageData = JSON.stringify(data);\n webViewPostMessage(`#${eventName}${messageData?.length > 0 ? \"#\" + messageData : \"\"}`);\n return;\n }\n //@ts-ignore\n if (typeof dataLayer === \"undefined\") return;\n\n if (data) {\n //@ts-ignore\n dataLayer.push({\n event: eventName,\n custom_event_value: data,\n });\n } else {\n //@ts-ignore\n dataLayer.push({\n event: eventName,\n });\n }\n};\n","import { fetchIdentity, fetchSecureIdentity } from \"apiServices/identity/IdentityApiService\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport { dispatchSetIdentityPreferences } from \"./PreferencesActions\";\nimport { IUserIdentityStore } from \"../IdentityStore\";\nimport { dispatchSetCompletedOnboarding } from \"./OnboardingActions\";\nimport { dispatchSetNotificationPreferences } from \"./NotificationPreferencesActions\";\n\nexport enum IdentityTypes {\n FetchIdentity = \"FETCH_IDENTITY\",\n FetchIdentityCompleted = \"FETCH_IDENTITY_COMPLETED\",\n}\n\ntype IdentityTypePayload = {\n [IdentityTypes.FetchIdentity]: IUserIdentityStore;\n [IdentityTypes.FetchIdentityCompleted]: IUserIdentityStore;\n};\n\nexport type IdentityActions = ActionMap[keyof ActionMap];\n\nexport const dispatchFetchIdentity = async (dispatch: React.Dispatch) => {\n dispatch({\n type: IdentityTypes.FetchIdentity,\n });\n\n const response = await fetchSecureIdentity();\n\n if (response.responseStatus === ResponseStatusEnum.Error) throw new Error(\"Error while fetching identity data!\");\n\n dispatchSetIdentityPreferences(dispatch, response.identity?.preferences);\n dispatchSetCompletedOnboarding(dispatch, response.identity?.completedOnboardings ?? []);\n dispatchSetNotificationPreferences(\n dispatch,\n response.identity?.pushNotificationPreferences ?? { f123: false, friendRequests: false }\n );\n\n dispatch({\n type: IdentityTypes.FetchIdentityCompleted,\n payload: {\n displayName: response.identity?.displayName,\n ssid: response.identity?.ssid,\n isAuthenticated: response.identity?.isAuthenticated,\n isNewProfile: response.identity?.isNewProfile,\n isTermsAccepted: response.identity?.isTermsAccepted,\n countryCode: response.identity.countryCode,\n },\n });\n\n return response.responseStatus;\n};\n\nexport const identityReducer = (state: IUserIdentityStore, action: IdentityActions): IUserIdentityStore => {\n switch (action.type) {\n case IdentityTypes.FetchIdentity:\n return {\n ...state,\n loading: true,\n };\n case IdentityTypes.FetchIdentityCompleted:\n return {\n ...action.payload,\n loading: false,\n hasFetched: true,\n };\n default:\n return state;\n }\n};\n","import { createContext } from \"react\";\nimport { TrainTrackLayer } from \"./TrainTrackLayer\";\n\nexport interface ITrainTrack {\n borderRadius: number;\n padding: number;\n}\n\nexport type ITrainTracks = {\n [key in TrainTrackLayer]: ITrainTrack;\n};\n\nconst TrainTrackContext = createContext({\n \"0\": {\n borderRadius: 0,\n padding: 0,\n },\n \"1\": {\n borderRadius: 0,\n padding: 0,\n },\n \"2\": {\n borderRadius: 0,\n padding: 0,\n },\n});\n\nexport default TrainTrackContext;\n","import { HTMLAttributes } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport StyledCircularProgress, { IStyledCircularProgressProps } from \"./StyledCircularProgress\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n pageCircularProgress: {\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n margin: theme.spacing(2, 0),\n },\n primary: {\n color: theme.palette.info.main,\n },\n });\n});\n\ninterface IProps extends HTMLAttributes {\n circularProgressProps?: IStyledCircularProgressProps;\n}\n\nexport default function PageCircularProgress(props: IProps) {\n const { className, circularProgressProps, ...rest } = props;\n\n const classes = useStyles(props);\n\n return (\n
\n \n
\n );\n}\n","export enum WebViewEnum {\n AppVersion = \"appVersion\",\n GoBack = \"goBackToNative\",\n PApage = \"perfAnalysis\",\n PALoaded = \"PALoaded\",\n FAQ = \"faq\",\n GoToLeaderboards = \"goToLeaderboard\",\n Error = \"error\",\n Ready = \"ready\",\n GetToken = \"getToken\",\n TrackChanged = \"trackChanged\",\n WebMessage = \"webMessage\",\n Cookies = \"pwebViewReferenceCookies\",\n Headers = \"PAnativeMessageHeaders\",\n openPopup = \"openPopup\",\n topInset = \"topInset\",\n hideBackButton = \"hideBackButton\",\n fullScreen = \"fullScreen\",\n ProfilePage = \"Profile:\",\n Share = \"share:\",\n NativeRoute = \"NativeRoute\",\n Social = \"ExternalSocialLink\",\n}\n","import axios from \"axios\";\nimport { apiUrls } from \"settings\";\nimport QueryParameter, { constructQueryParameterString } from \"apiServices/QueryParameter\";\nimport INotificationRequests from \"./requests/INotificationsRequest\";\nimport INotificationsResponse from \"./responses/INotificationsResponse\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\n\nexport async function getNotifications(request: INotificationRequests): Promise {\n const queryParams: QueryParameter[] = [\n new QueryParameter(\"cursor\", request.cursor),\n new QueryParameter(\"take\", request.take),\n new QueryParameter(\"filter\", request.filter),\n ];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.getNotifications}${queryParamString}`, {\n validateStatus: function (status) {\n return status <= 500;\n },\n });\n\n if (response.status !== ResponseStatusEnum.Ok)\n return {\n notifications: [],\n loadMore: false,\n };\n\n return response.data;\n}\n\nexport async function markAsRead(notificationIds: string[]): Promise {\n await axios.post(apiUrls.getNotifications, notificationIds);\n}\n\nexport async function removeNotifications(notificationIds: string[]): Promise {\n const queryParams: QueryParameter[] = [];\n\n notificationIds.forEach((id) => {\n queryParams.push(new QueryParameter(\"notificationIds\", id));\n });\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n await axios.delete(`${apiUrls.getNotifications}${queryParamString}`);\n}\n","import SvgIcon from \"@material-ui/core/SvgIcon\";\nimport { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nconst CloseIcon = (props: SvgIconProps) => (\n \n \n \n \n \n);\n\nexport default CloseIcon;\n","import { IIdentityStore, IJwtTokens, IJwtTokensStore, IUserIdentityStore } from \"../IdentityStore\";\nimport { ActionMap } from \"../../../common/types/ActionMapType\";\nimport { Dispatch } from \"react\";\nimport { IFetchAccessTokenRequest } from \"../../../apiServices/identity/requests/IFetchAccessTokenRequest\";\nimport { fetchAccessToken, refreshAccessToken } from \"../../../apiServices/identity/IdentityApiService\";\n\nexport enum JwtTypes {\n FetchTokens = \"FETCH_TOKENS\",\n FetchTokensCompleted = \"FETCH_TOKENS_COMPLETED\",\n RefreshTokens = \"REFRESH_TOKENS\",\n RefreshTokensCompleted = \"REFRESH_TOKENS_COMPLETED\",\n}\n\ntype JwtTypePayload = {\n [JwtTypes.FetchTokens]: IJwtTokensStore;\n [JwtTypes.FetchTokensCompleted]: IJwtTokensStore;\n [JwtTypes.RefreshTokens]: IJwtTokensStore;\n [JwtTypes.RefreshTokensCompleted]: IJwtTokensStore;\n};\n\nexport type JwtActions = ActionMap[keyof ActionMap];\n\nexport const dispatchFetchTokens = async (\n dispatch: Dispatch,\n request: IFetchAccessTokenRequest\n): Promise => {\n dispatch({\n type: JwtTypes.FetchTokens,\n });\n\n const response = await fetchAccessToken(request);\n\n dispatch({\n type: JwtTypes.FetchTokensCompleted,\n payload: {\n tokens: {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n },\n },\n });\n\n return {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n };\n};\n\nexport const dispatchRefreshTokens = async (\n dispatch: Dispatch,\n request: IFetchAccessTokenRequest\n): Promise => {\n dispatch({\n type: JwtTypes.RefreshTokens,\n });\n\n const response = await refreshAccessToken(request);\n if (!response) {\n throw new Error(\"Error which retrieving refresh token\");\n }\n\n dispatch({\n type: JwtTypes.RefreshTokensCompleted,\n payload: {\n tokens: {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n },\n },\n });\n\n return {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n };\n};\n\nexport const jwtTokensReducer = (state: IJwtTokensStore, action: JwtActions): IJwtTokensStore => {\n switch (action.type) {\n case JwtTypes.FetchTokens:\n return {\n ...state,\n loading: true,\n };\n case JwtTypes.FetchTokensCompleted:\n return {\n ...action.payload,\n loading: false,\n hasFetched: true,\n };\n case JwtTypes.RefreshTokens:\n return {\n ...state,\n loading: true,\n };\n case JwtTypes.RefreshTokensCompleted:\n return {\n ...action.payload,\n loading: false,\n hasFetched: true,\n };\n default:\n return state;\n }\n};\n","import { ReactNode, useState, useEffect } from \"react\";\nimport { IStyles, styleGuide } from \"theme\";\n\nexport type ButtonVariant =\n | \"regular\"\n | \"outlinedPrimary\"\n | \"outlinedSecondary\"\n | \"outlinedBlue\"\n | \"segmented\"\n | \"pill\"\n | \"dialogSelector\"\n | \"link\";\nexport type ButtonSize = \"standard\" | \"jumbo\";\ntype ButtonType = \"button\" | \"submit\";\ntype ButtonMode = \"button\" | \"toggle\";\n\nexport interface IButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children: ReactNode;\n onClick?: (e: any) => void;\n disabled?: boolean;\n isMobile?: boolean;\n customStyles?: IStyles;\n endIcon?: ReactNode;\n startIcon?: ReactNode;\n type?: ButtonType;\n id?: string;\n mode?: ButtonMode;\n toggled?: boolean;\n}\n\nconst Button = ({\n variant = \"regular\",\n size = \"standard\",\n children,\n onClick,\n disabled = false,\n isMobile = false,\n customStyles,\n endIcon,\n startIcon,\n type = \"button\",\n id,\n mode = \"button\",\n toggled = false,\n}: IButtonProps) => {\n const [highlighted, setHightlighted] = useState(false);\n\n const { regular, outlinedPrimary, outlinedSecondary, segmented, outlinedBlue, pill, dialogSelector, link } =\n styleGuide.button;\n\n const styles = {\n regular: {\n default: isMobile ? regular.mobile : size === \"jumbo\" ? regular.jumbo : regular.default,\n highlighted: {\n ...regular.hover,\n },\n jumbo: {\n ...regular.jumbo,\n },\n disabled: {\n ...regular.inactive,\n },\n },\n outlinedPrimary: {\n default: isMobile\n ? outlinedPrimary.mobile\n : size === \"jumbo\"\n ? outlinedPrimary.jumbo\n : outlinedPrimary.default,\n highlighted: {\n ...outlinedPrimary.hover,\n },\n jumbo: {\n ...outlinedPrimary.jumbo,\n },\n disabled: {\n ...outlinedPrimary.inactive,\n },\n },\n outlinedSecondary: {\n default: isMobile\n ? outlinedSecondary.mobile\n : size === \"jumbo\"\n ? outlinedSecondary.jumbo\n : outlinedSecondary.default,\n highlighted: {\n ...outlinedSecondary.hover,\n },\n jumbo: {\n ...outlinedSecondary.jumbo,\n },\n disabled: {\n ...outlinedSecondary.inactive,\n },\n },\n outlinedBlue: {\n default: isMobile ? outlinedBlue.mobile : size === \"jumbo\" ? outlinedBlue.jumbo : outlinedBlue.default,\n highlighted: {\n ...outlinedBlue.hover,\n },\n jumbo: {\n ...outlinedBlue.jumbo,\n },\n disabled: {\n ...outlinedBlue.inactive,\n },\n },\n segmented: {\n default: isMobile ? segmented.mobile : size === \"jumbo\" ? segmented.jumbo : segmented.default,\n highlighted: {\n ...segmented.hover,\n },\n jumbo: {\n ...segmented.jumbo,\n },\n disabled: {\n ...segmented.inactive,\n },\n },\n pill: {\n default: isMobile ? pill.mobile : size === \"jumbo\" ? pill.jumbo : pill.default,\n highlighted: {\n ...pill.hover,\n },\n jumbo: {\n ...pill.jumbo,\n },\n disabled: {\n ...pill.inactive,\n },\n },\n dialogSelector: {\n default: isMobile\n ? dialogSelector.mobile\n : size === \"jumbo\"\n ? dialogSelector.jumbo\n : dialogSelector.default,\n highlighted: {\n ...dialogSelector.hover,\n },\n jumbo: {\n ...dialogSelector.jumbo,\n },\n disabled: {\n ...dialogSelector.inactive,\n },\n },\n link: {\n default: isMobile ? link.mobile : size === \"jumbo\" ? link.jumbo : link.default,\n highlighted: {\n ...link.hover,\n },\n jumbo: {\n ...link.jumbo,\n },\n disabled: {\n ...link.inactive,\n },\n },\n };\n\n const iconStyles: IStyles = {\n display: \"flex\",\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n padding: styleGuide.spacing(),\n };\n\n const getStyles = (variant: ButtonVariant) => {\n switch (variant) {\n case \"outlinedPrimary\":\n return styles.outlinedPrimary;\n case \"outlinedSecondary\":\n return styles.outlinedSecondary;\n case \"segmented\":\n return styles.segmented;\n case \"outlinedBlue\":\n return styles.outlinedBlue;\n case \"pill\":\n return styles.pill;\n case \"dialogSelector\":\n return styles.dialogSelector;\n case \"link\":\n return styles.link;\n default:\n return styles.regular;\n }\n };\n\n const buttonStyles = getStyles(variant);\n\n const handleOnMouseEnter = () => {\n // TODO Add animation for button click mobile\n if (isMobile || mode === \"toggle\") return;\n\n setHightlighted(true);\n };\n\n const handleOnMouseLeave = () => {\n // TODO Add animation for button click mobile\n if (isMobile || mode === \"toggle\") return;\n\n setHightlighted(false);\n };\n\n useEffect(() => {\n if (mode !== \"toggle\") return;\n\n if (toggled) {\n setHightlighted(true);\n } else {\n setHightlighted(false);\n }\n }, [toggled]);\n\n return (\n \n {startIcon && {startIcon}}\n\n {children}\n {endIcon && {endIcon}}\n \n );\n};\n\nexport default Button;\n","import { HTMLAttributes } from \"react\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst setBacgroundColor = (props: IProps) => {\n if (props.noBackground) {\n return \"rgba(0,0,0,0)\";\n }\n if (props.backgroundColor) {\n return props.backgroundColor;\n }\n\n return isRaceNetMobileApp || isRaceNetTabletApp ? \"#0D1043\" : \"rgba(0,0,0,.8)\";\n};\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n container: (props: IProps) => ({\n width: \"100%\",\n height: \"100%\",\n position: props.contained ? \"relative\" : \"fixed\",\n top: 0,\n left: 0,\n backgroundColor: setBacgroundColor(props),\n zIndex: props.noBackground ? \"auto\" : 2000,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }),\n loader: {\n color: theme.palette.info.main,\n },\n })\n);\n\nexport enum SizeEnum {\n small = 25,\n medium = 40,\n large = 60,\n}\n\ninterface IProps extends HTMLAttributes {\n backgroundColor?: string;\n noBackground?: boolean;\n contained?: boolean;\n size?: SizeEnum;\n}\n\nconst Loader = (props: IProps) => {\n const { className, size, noBackground, ...rest } = props;\n\n const classes = useStyles(props);\n\n return (\n
\n
\n \n
\n
\n );\n};\n\nexport default Loader;\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport useTrainTracks, { TrainTrackLayer } from \"./useTrainTracks\";\n\nconst useStyles = (paddingSize: number) =>\n makeStyles((theme: Theme) => {\n return createStyles({\n responsivePadding: {\n padding: paddingSize,\n },\n });\n });\n\ninterface IProps {\n layer?: TrainTrackLayer;\n}\n\nexport default function useResponsivePaddingClass(props: IProps = {}) {\n const { layer = \"0\" } = props;\n\n const trainTracks = useTrainTracks();\n\n const classes = useStyles(trainTracks[layer].padding)();\n\n return classes.responsivePadding;\n}\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Avatar, { AvatarProps } from \"@material-ui/core/Avatar\";\nimport { images } from \"settings\";\nimport clsx from \"clsx\";\nimport { useHistory } from \"react-router\";\nimport { styleGuide } from \"theme\";\n\nconst getProfileAvatarBorder = (colour: string) => {\n return `solid 2px ${colour}`;\n};\n\ninterface IStylesOptions {\n borderColor?: string;\n}\n\nexport type AvatarVariant = \"circle\" | \"circular\" | \"rounded\" | \"square\";\n\nconst useStyles = (options: IStylesOptions) =>\n makeStyles((theme: Theme) => {\n const { borderColor = styleGuide.color.white } = options;\n\n return createStyles({\n root: {\n border: getProfileAvatarBorder(borderColor),\n color: styleGuide.color.white,\n },\n clickable: {\n cursor: \"pointer\",\n },\n });\n });\n\nexport interface IProfileAvatarProps extends AvatarProps {\n imageSrc?: string;\n borderColor?: string;\n to?: string;\n customVariant?: AvatarVariant;\n borderRadius?: number;\n}\n\nexport default function ProfileAvatar(props: IProfileAvatarProps) {\n const { borderColor, imageSrc, to, className, onClick, customVariant = \"circle\", ...rest } = props;\n const classes = useStyles({ borderColor })();\n\n const history = useHistory();\n\n return (\n {\n if (onClick !== undefined) {\n onClick(event);\n }\n\n if (to !== undefined) {\n history.push(to);\n }\n }}\n {...rest}\n />\n );\n}\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport { Link, LinkProps } from \"react-router-dom\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: { color: \"inherit\" },\n underlineNone: {\n textDecoration: \"none\",\n },\n underlineHover: {\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n underlineAlways: {\n textDecoration: \"underline\",\n },\n })\n);\ninterface IProps extends LinkProps {\n underline?: \"none\" | \"hover\" | \"always\";\n}\n\nexport default function RouterLink(props: IProps) {\n const classes = useStyles();\n const { children, underline = \"none\", className, ...rest } = props;\n return (\n \n {children}\n \n );\n}\n","import { useState, useLayoutEffect, ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface IProps {\n children: ReactNode;\n wrapperId: string;\n}\n\nconst createWrapperAndAppendToBody = (wrapperId: string) => {\n const wrapperElement = document.createElement(\"div\");\n wrapperElement.setAttribute(\"id\", wrapperId);\n document.body.appendChild(wrapperElement);\n return wrapperElement;\n};\n\nconst Portal = ({ children, wrapperId }: IProps) => {\n const [wrapperElement, setWrapperElement] = useState(null);\n\n useLayoutEffect(() => {\n let element = document.getElementById(wrapperId) as HTMLElement;\n let systemCreated = false;\n\n // if element is not found with wrapperId or wrapperId is not provided, create and append to body\n if (!element) {\n systemCreated = true;\n element = createWrapperAndAppendToBody(wrapperId);\n }\n setWrapperElement(element);\n\n return () => {\n if (systemCreated && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n }, [wrapperId]);\n\n if (wrapperElement === null) return null;\n\n return createPortal(children, wrapperElement);\n};\n\nexport default Portal;\n","import { OnboardingType } from \"apiServices/identity/types/OnboardingTypes\";\nimport { ActionMap } from \"common/types/ActionMapType\";\n\nenum CompletedOnboardingTypes {\n SetOnboarding = \"SET_IDENTITY_ONBOARDING\",\n AddOnboarding = \"ADD_IDENTITY_ONBOARDING\",\n}\n\ntype OnboardingTypePayload = {\n [CompletedOnboardingTypes.AddOnboarding]: OnboardingType;\n [CompletedOnboardingTypes.SetOnboarding]: OnboardingType[];\n};\n\nexport type CompletedOnboardingActions = ActionMap[keyof ActionMap];\n\nexport const dispatchAddCompletedOnboarding = (dispatch: React.Dispatch, onboardingType: OnboardingType) => {\n dispatch({\n type: CompletedOnboardingTypes.AddOnboarding,\n payload: onboardingType,\n });\n\n return onboardingType;\n};\n\nexport const dispatchSetCompletedOnboarding = (dispatch: React.Dispatch, onboardingTypes: OnboardingType[]) => {\n dispatch({\n type: CompletedOnboardingTypes.SetOnboarding,\n payload: onboardingTypes,\n });\n\n return onboardingTypes;\n};\n\nexport const identityCompletedOnboardingReducer = (\n state: OnboardingType[],\n action: CompletedOnboardingActions\n): OnboardingType[] => {\n switch (action.type) {\n case CompletedOnboardingTypes.AddOnboarding:\n return [...state, action.payload];\n case CompletedOnboardingTypes.SetOnboarding:\n return action.payload;\n default:\n return state;\n }\n};\n","var _g, _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconRacenetlogofull(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 192.37 50\",\n style: {\n enableBackground: \"new 0 0 192.37 50\"\n },\n xmlSpace: \"preserve\",\n fill: \"#f2f2f2\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.21,26.41l9.04,9.31h-6.04l-8.8-9.48v9.48H60.7V11.84h10.68c4.64,0,7.98,3.14,7.98,7.44c0,4.16-3.38,7.13-8.09,7.13 H71.21z M65.41,16.04v6.82h5.53c2.29,0,3.75-1.33,3.75-3.41c0-2.08-1.47-3.41-3.75-3.41H65.41z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M79.4,27.2c0-5.08,4.03-8.77,8.46-8.77c2.05,0,3.92,0.82,5.25,2.25V18.7h4.33v17.02h-4.33v-1.98 c-1.4,1.4-3.31,2.22-5.42,2.22C83.36,35.96,79.4,32.28,79.4,27.2z M93.19,27.2c0-2.9-2.08-4.91-4.74-4.91 c-2.63,0-4.74,2.01-4.74,4.91s2.12,4.91,4.74,4.91C91.1,32.11,93.19,30.1,93.19,27.2z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99.7,27.23c0-5.15,3.99-8.87,8.9-8.87c4.23,0,7.78,2.9,8.6,7.03h-4.4c-0.68-1.84-2.29-3-4.2-3 c-2.56,0-4.61,1.98-4.61,4.91c0,2.87,2.05,4.88,4.61,4.88c1.91,0,3.51-1.16,4.2-3h4.4c-0.82,4.13-4.37,6.89-8.6,6.89 C103.7,36.07,99.7,32.35,99.7,27.23z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.89,36.07c-5.12,0-9.28-3.75-9.28-8.87c0-5.15,3.96-8.87,8.84-8.87c4.23,0,8.87,3.1,8.87,9.66 c0,0.2-0.03,0.41-0.03,0.65h-13.13c0.58,2.15,2.49,3.58,4.81,3.58c1.33,0,2.56-0.51,3.28-1.57h4.81 C134.75,33.92,131.67,36.07,127.89,36.07z M123.18,25.52h8.43c-0.38-2.01-2.15-3.41-4.16-3.41 C125.43,22.11,123.76,23.44,123.18,25.52z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.9,20.82c1.02-1.53,2.9-2.49,5.08-2.49c4.06,0,6.35,2.93,6.35,6.93v10.47H150V25.59c0-2.22-1.47-3.72-3.55-3.72 c-2.01,0-3.55,1.57-3.55,3.55v10.3h-4.33V18.7h4.33V20.82z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M165.86,36.07c-5.12,0-9.28-3.75-9.28-8.87c0-5.15,3.96-8.87,8.84-8.87c4.23,0,8.87,3.1,8.87,9.66 c0,0.2-0.03,0.41-0.03,0.65h-13.13c0.58,2.15,2.49,3.58,4.81,3.58c1.33,0,2.56-0.51,3.28-1.57h4.81 C172.72,33.92,169.65,36.07,165.86,36.07z M161.16,25.52h8.43c-0.38-2.01-2.15-3.41-4.16-3.41 C163.41,22.11,161.74,23.44,161.16,25.52z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M178.35,22.39h-3.92V18.7h3.92v-3.62l4.26-1.36v4.98h4.95v3.69h-4.95v7.74c0,1.13,0.61,1.74,1.95,1.74h3v3.86h-4.23 c-3.14,0-4.98-1.77-4.98-4.4V22.39z\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25,0C11.19,0,0,11.19,0,25s11.19,25,25,25s25-11.19,25-25S38.81,0,25,0z M12.9,18.54c0.65-1.04,1.3-2.08,1.94-3.12 c0.09-0.14,0.19-0.19,0.35-0.19c4.63,0,9.25,0,13.88,0c0.07,0,0.15,0,0.26,0c-0.05,0.1-0.08,0.16-0.12,0.21 c-0.65,1.05-1.31,2.09-1.95,3.14c-0.08,0.13-0.17,0.18-0.32,0.17c-4.63,0-9.27,0-13.9,0c-0.07,0-0.15-0.01-0.25-0.01 C12.84,18.66,12.87,18.6,12.9,18.54z M39.13,32.69c-0.16,0-0.25-0.06-0.33-0.19c-0.64-1.03-1.28-2.05-1.92-3.08 c-0.09-0.15-0.19-0.2-0.37-0.2c-1.94,0.01-3.88,0-5.82,0c-0.09,0-0.19-0.01-0.32-0.02c0.06-0.1,0.09-0.16,0.13-0.22 c0.65-1.04,1.31-2.09,1.96-3.13c0.08-0.12,0.16-0.17,0.3-0.16c0.57,0.01,1.15,0,1.78,0c-0.8-1.28-1.58-2.53-2.38-3.8 c-0.06,0.09-0.11,0.16-0.15,0.22c-2.16,3.45-4.32,6.9-6.47,10.36c-0.11,0.17-0.22,0.24-0.43,0.24c-5.84-0.01-11.68-0.01-17.52-0.01 c-0.09,0-0.18,0-0.33,0c1.46-2.33,2.89-4.62,4.34-6.94c-1.06,0-2.09,0-3.17,0c0.05-0.1,0.08-0.17,0.11-0.23 c0.65-1.05,1.31-2.1,1.96-3.15c0.07-0.12,0.16-0.17,0.3-0.17c4.52,0,9.05,0,13.57,0c0.07,0,0.13,0.01,0.23,0.02 c-0.05,0.09-0.08,0.16-0.12,0.22c-0.64,1.03-1.29,2.07-1.93,3.1c-0.09,0.15-0.19,0.2-0.37,0.2c-2.06-0.01-4.13,0-6.19-0.01 c-0.17,0-0.27,0.05-0.36,0.2c-0.63,1.02-1.27,2.03-1.9,3.05c-0.03,0.05-0.06,0.1-0.1,0.18c0.1,0,0.16,0,0.23,0c3.11,0,6.22,0,9.33,0 c0.17,0,0.27-0.05,0.36-0.2c2.8-4.49,5.6-8.97,8.4-13.45c0.05-0.09,0.11-0.17,0.19-0.3c3.64,5.83,7.26,11.62,10.91,17.45 c-0.11,0.01-0.17,0.02-0.24,0.02C41.59,32.68,40.36,32.68,39.13,32.69z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconRacenetlogofull);\nexport default __webpack_public_path__ + \"static/media/icon_racenetlogofull.20b5f2f7.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/error.3ba3c2fc.jpg\";","import { ReactNode } from \"react\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"common/components/Spacer\";\nimport background from \"assets/images/backgrounds/error.jpg\";\nimport { ITheme } from \"@material-ui/core\";\nimport useResponsivePaddingClass from \"hooks/useResponsivePaddingClass\";\nimport clsx from \"clsx\";\nimport { styleGuide } from \"theme\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp, webViewPostMessage } from \"utils/webViewTools\";\nimport StyledButton from \"common/components/buttons/StyledButton\";\nimport { WebViewEnum } from \"common/enums/WebViewEventsEnum\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n root: {\n background: theme.palette.background.default,\n width: \"100%\",\n height: \"100vh\",\n display: \"grid\",\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n header: {\n color: theme.variants.lightWhite,\n },\n row: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundImage: `url(${background})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center center\",\n },\n title: {\n color: theme.palette.info.main,\n },\n text: {\n fontWeight: \"normal\",\n color: styleGuide.color.white,\n },\n })\n);\n\ninterface IProps {\n title?: string;\n text?: string;\n action?: ReactNode;\n}\n\nexport default function ErrorPage(props: IProps) {\n const { title, text, action } = props;\n const paddingClass = useResponsivePaddingClass({ layer: \"0\" });\n const classes = useStyles();\n\n const nativeBackButton = (\n webViewPostMessage(WebViewEnum.GoBack)}>\n Go back\n \n );\n\n return (\n
\n
\n \n EA Racenet\n \n
\n
\n {title === undefined ? null : (\n \n {title}\n \n )}\n {text === undefined ? null : (\n \n {text}\n \n )}\n {isRaceNetMobileApp || isRaceNetTabletApp ? (\n nativeBackButton\n ) : action === undefined ? null : (\n <>\n \n {action}\n \n )}\n
\n
\n );\n}\n","import ErrorPage from \"./ErrorPage\";\n\nexport default function InternalServerErrorPage() {\n return (\n \n );\n}\n","import axios from \"axios\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport React from \"react\";\nimport { settings } from \"settings\";\nimport { IConfigurationStore } from \"../ConfigurationStore\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport { getFeaturesConfig } from \"apiServices/cdn/CdnApiService\";\nimport { IFeeatureCdnConfigResponse } from \"apiServices/cdn/responses/IFeatureCdnConfigResponse\";\n\nexport enum ConfigurationTypes {\n FetchConfiguration = \"FETCH_CONFIGURATION\",\n FetchConfigurationCompleted = \"FETCH_CONFIGURATION_COMPLETED\",\n FetchFeatures = \"FETCH_FEATURES\",\n FetchFeaturesCompleted = \"FETCH_FEATURES_COMPLETED\",\n}\n\ntype ConfigurationPayload = {\n [ConfigurationTypes.FetchConfiguration]: IConfigurationStore;\n [ConfigurationTypes.FetchConfigurationCompleted]: IConfigurationStore;\n [ConfigurationTypes.FetchFeatures]: IFeeatureCdnConfigResponse;\n [ConfigurationTypes.FetchFeaturesCompleted]: IFeeatureCdnConfigResponse;\n};\n\nexport type ConfigurationActions = ActionMap[keyof ActionMap];\n\nexport const dispatchFetchConfiguration = async (dispatch: React.Dispatch) => {\n dispatch({\n type: ConfigurationTypes.FetchConfiguration,\n });\n\n try {\n const config = await axios.get(\n `${settings.appUrl}/${\n process.env.NODE_ENV === \"production\" ? \"config.json\" : process.env.REACT_APP_WEB_API_CONFIG\n }`\n );\n\n dispatch({\n type: ConfigurationTypes.FetchConfigurationCompleted,\n payload: config.data,\n });\n\n return config.data;\n } catch {\n throw Error(\"Something went wrong while trying to retrieve the configuration file\");\n }\n};\n\nexport const dispatchFetchFeatures = async (dispatch: React.Dispatch, cdnUrl: string) => {\n dispatch({\n type: ConfigurationTypes.FetchConfiguration,\n });\n\n const configPath =\n process.env.NODE_ENV === \"production\"\n ? `${trimEndSlash(cdnUrl)}/features.json`\n : `${process.env.REACT_APP_FEATURES_CONFIG_TYPE === \"local\" ? settings.appUrl : trimEndSlash(cdnUrl)}/${\n process.env.REACT_APP_FEATURES_CONFIG ?? \"features.json\"\n }`;\n\n try {\n const config = await getFeaturesConfig(configPath);\n\n dispatch({\n type: ConfigurationTypes.FetchFeaturesCompleted,\n payload: config,\n });\n\n return config;\n } catch {\n throw Error(\"Something went wrong while trying to retrieve the features file\");\n }\n};\n\nexport const configurationReducer = (state: IConfigurationStore, action: ConfigurationActions) => {\n switch (action.type) {\n case ConfigurationTypes.FetchConfiguration:\n case ConfigurationTypes.FetchFeatures: {\n return {\n ...state,\n loading: true,\n };\n }\n case ConfigurationTypes.FetchConfigurationCompleted: {\n return {\n ...action.payload,\n authUrls: {\n ...action.payload.authUrls,\n login: `${action.payload.authUrls.login}${settings.appUrl}`,\n logout: `${action.payload.authUrls.logout}${settings.appUrl}`,\n },\n loading: false,\n hasFetched: true,\n };\n }\n case ConfigurationTypes.FetchFeaturesCompleted:\n return {\n ...state,\n features: action.payload?.features ?? [],\n loading: false,\n hasFetched: true,\n };\n default:\n return state;\n }\n};\n","import axios from \"axios\";\nimport ResponseStatusEnum from \"../common/enums/ResponseStatusEnum\";\nimport { routingUrls } from \"../settings\";\nimport { dispatchRefreshTokens } from \"../contexts/identity/actions/JwtActions\";\nimport { IFetchAccessTokenRequest } from \"../apiServices/identity/requests/IFetchAccessTokenRequest\";\nimport { defaultTokenResponse } from \"../apiServices/identity/responses/IAccessTokenResponse\";\nimport { dispatchFetchIdentity } from \"../contexts/identity/actions/IdentityActions\";\nimport React from \"react\";\n\nexport const setTokenAndUnauthorizedInterceptorIntoAxiosDefaults = (\n accessToken: string,\n dispatch: React.Dispatch,\n refreshRequest: IFetchAccessTokenRequest\n) => {\n axios.defaults.headers.authorization = `Bearer ${accessToken}`;\n\n axios.interceptors.response.use(\n (response) => {\n return response;\n },\n (error) => {\n if (error.response.status === ResponseStatusEnum.Unauthorized) {\n console.log(\"Unauthorized: Trying refresh scenario\");\n\n dispatchRefreshTokens(dispatch, refreshRequest)\n .then((response) => {\n if (response.accessToken != defaultTokenResponse.access_token) {\n axios.defaults.headers.authorization = `Bearer ${response.accessToken}`;\n\n dispatchFetchIdentity(dispatch);\n } else {\n window.location.href = `${routingUrls.landing}`;\n }\n })\n .catch((reason) => {\n console.log(`Refresh token failed, reason ${reason}`);\n window.location.href = `${routingUrls.landing}`;\n });\n }\n }\n );\n};\n\nexport const isAuthorized = async (\n dispatch: React.Dispatch,\n request: IFetchAccessTokenRequest\n): Promise => {\n let authorized = false;\n\n const tokenResponse = await dispatchRefreshTokens(dispatch, request);\n\n if (tokenResponse.accessToken !== defaultTokenResponse.access_token) {\n setTokenAndUnauthorizedInterceptorIntoAxiosDefaults(tokenResponse.accessToken, dispatch, request);\n authorized = true;\n }\n await dispatchFetchIdentity(dispatch);\n return authorized;\n};\n","import Badge, { BadgeProps } from \"@material-ui/core/Badge\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport clsx from \"clsx\";\nimport { ITheme } from \"@material-ui/core\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme: ITheme) => {\n return createStyles({\n badge: {},\n primary: {\n backgroundColor: theme.palette.primary.main,\n color: styleGuide.color.white,\n border: `1px solid ${styleGuide.color.white}`,\n },\n secondary: {\n backgroundColor: theme.palette.primary.dark,\n color: styleGuide.color.white,\n border: `1px solid ${styleGuide.color.white}`,\n },\n white: {\n backgroundColor: theme.variants.lightWhite,\n color: theme.palette.primary.main,\n border: `1px solid ${theme.palette.primary.main}`,\n },\n });\n});\n\ntype Variant = \"primary\" | \"secondary\" | \"white\";\n\ninterface IProps extends Omit {\n variant?: Variant;\n}\n\nexport default function NotificationsBadge({ variant = \"primary\", classes: overrideClasses, ...rest }: IProps) {\n const classes = useStyles();\n\n const notificationContext = useNotificationContext();\n\n return (\n \n );\n}\n","import { ITheme, makeStyles, createStyles, Typography, useTheme } from \"@material-ui/core\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { HTMLAttributes } from \"react\";\n\nconst useStyles = (isMobile: boolean, backgroundColor: string, margin: number) =>\n makeStyles((theme: ITheme) =>\n createStyles({\n // Animation\n \"@keyframes pulse\": {\n \" 0%\": {\n transform: \"scale(.99)\",\n opacity: 0.4,\n },\n \"100%\": {\n transform: \"scale(1)\",\n opacity: 1,\n },\n },\n root: {\n display: \"block\",\n backgroundColor: backgroundColor ? backgroundColor : theme.palette.primary.light,\n animation: \"$pulse 0.75s alternate infinite\",\n marginBottom: theme.spacing(margin),\n },\n })\n );\n\nexport type SkeletonVariant = \"title\" | \"box\" | \"circle\";\n\ninterface IProps extends HTMLAttributes {\n skeletonType: SkeletonVariant;\n height?: number | string;\n width?: number | string;\n backgroundColor?: string;\n margin?: number;\n}\n\nconst SkeletonElement = ({ skeletonType, height, width, backgroundColor = \"\", margin = 1.5, ...rest }: IProps) => {\n const isMobile = useIsMobile();\n const theme: ITheme = useTheme();\n const classes = useStyles(isMobile, backgroundColor, margin)();\n\n const styles = {\n title: {\n height: height ? height : isMobile ? 15 : 20,\n width: width ? width : \"100%\",\n borderRadius: theme.styles.borderRadiusXs,\n },\n box: {\n height: height ? height : isMobile ? 120 : 150,\n width: width ? width : \"100%\",\n borderRadius: theme.styles.borderRadiusXs,\n },\n circle: {\n height: height ? height : isMobile ? 30 : 50,\n width: width ? width : isMobile ? 30 : 50,\n borderRadius: \"100%\",\n },\n };\n\n const getStyles = (skeletonType: SkeletonVariant) => {\n switch (skeletonType) {\n case \"title\":\n return styles.title;\n case \"box\":\n return styles.box;\n case \"circle\":\n return styles.circle;\n }\n };\n\n const skeletonStyles = getStyles(skeletonType);\n\n return (\n \n );\n};\n\nexport default SkeletonElement;\n","export interface IAccessTokenResponse {\n access_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n id_token: null;\n}\n\nexport const defaultTokenResponse: IAccessTokenResponse = {\n access_token: \"\",\n refresh_token: \"\",\n expires_in: 0,\n token_type: \"\",\n id_token: null,\n};\n","import { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport RefreshButton from \"common/components/RefreshButton\";\nimport MoreActionsMenu from \"../MoreActionsMenu\";\nimport {\n dispatchClearAllNotifications,\n dispatchFetchAllNotifications,\n} from \"contexts/notification/actions/NotificationActions\";\n\nexport default function NotificationsActions() {\n const notificationContext = useNotificationContext();\n\n const refreshing =\n notificationContext.state.newNotificationStore.loading ||\n notificationContext.state.oldNotificationStore.loading;\n\n const clearNotifications = () => {\n dispatchClearAllNotifications(\n notificationContext.dispatch,\n notificationContext.state.newNotificationStore.notifications,\n notificationContext.state.oldNotificationStore.notifications\n );\n };\n\n return (\n
\n \n \n dispatchFetchAllNotifications(\n notificationContext.dispatch,\n notificationContext.state.oldNotificationStore.notifications,\n notificationContext.state.newNotificationStore.notifications\n )\n }\n disabled={!notificationContext.state.newNotificationStore.refreshable}\n size=\"small\"\n />\n
\n );\n}\n","import { HTMLAttributes } from \"react\";\nimport useTrainTracks, { TrainTrackLayer } from \"hooks/useTrainTracks\";\nimport Spacer from \"./Spacer\";\n\ninterface IProps extends HTMLAttributes {\n layer?: TrainTrackLayer;\n}\n\nexport default function ResponsiveSpacer(props: IProps) {\n const trainTracks = useTrainTracks();\n\n const { layer = \"0\", ...rest } = props;\n\n return ;\n}\n","import useTrainTracks, { TrainTrackLayer } from \"./useTrainTracks\";\n\ninterface IProps {\n layer?: TrainTrackLayer;\n}\n\nexport default function useResponsivePadding(props: IProps = {}) {\n const { layer = \"0\" } = props;\n\n const trainTracks = useTrainTracks();\n\n return trainTracks[layer].padding;\n}\n","import { Dispatch, SetStateAction, useState } from \"react\";\n\nfunction useLocalStorage(key: string, initialValue: T) {\n type SetValue = Dispatch>;\n\n const [storedValue, setStoredValue] = useState(() => {\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (e) {\n console.log(\"error localstorage\", e);\n return initialValue;\n }\n });\n\n const setValue: SetValue = (value) => {\n try {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n } catch (e) {\n console.log(\"localStorage set values\", e);\n }\n };\n return [storedValue, setValue];\n}\n\nexport default useLocalStorage;\n","import React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { ThemeProvider } from \"@material-ui/core\";\nimport { lightTheme, darkTheme } from \"theme\";\nimport useLocalStorage from \"hooks/useLocalStorage\";\n\ninterface IThemeContextProps {\n darkMode: boolean;\n setDarkMode(darkMode: boolean): void;\n topInset?: number;\n setTopInset: (value: number) => void;\n appVersion?: string;\n setAppVersion: (version: string) => void;\n}\n\nconst CustomThemeContext = createContext({\n darkMode: false,\n setDarkMode: () => {},\n topInset: undefined,\n setTopInset: () => {},\n appVersion: undefined,\n setAppVersion: () => {},\n});\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst CustomThemeProvider = ({ children }: IProps) => {\n const [darkMode, setDarkMode] = useLocalStorage(\"darkMode\", false);\n const [topInset, setInset] = useState();\n const [appVersion, setVersion] = useState();\n\n const theme = useMemo(() => (darkMode ? darkTheme : lightTheme), [darkMode]);\n\n const setTopInset = (value: number) => setInset(value);\n const setAppVersion = (value: string) => setVersion(value);\n\n return (\n \n {/* */}\n \n {children}\n \n \n );\n};\n\nexport const useDarkTheme = () => useContext(CustomThemeContext);\n\nexport const useNativeAppProps = () => {\n const { setTopInset, topInset, appVersion, setAppVersion } = useDarkTheme();\n return {\n topInset,\n setTopInset,\n appVersion,\n setAppVersion,\n };\n};\n\nexport { CustomThemeContext, CustomThemeProvider };\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default function FriendsIcon(props: SvgIconProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import Link, { LinkProps } from \"@material-ui/core/Link\";\n\nexport interface INewTabLinkProps extends LinkProps {}\n\nexport default function NewTabLink(props: INewTabLinkProps) {\n const { children, ...rest } = props;\n\n return (\n \n {children}\n \n );\n}\n","export enum PreferencesValues {\n Required = 0,\n Functional = 1,\n Advertising = 2,\n}\n\nexport default interface ICookiePreferences {\n expires: number;\n name: string;\n path: string;\n value: string;\n}\n","import ICookiePreferences from \"./ICookiePreferences\";\n\nconst cookiePreferenceLocalStorageKey = \"truste.eu.cookie.notice_gdpr_prefs\";\n\nexport function getCookiePreferences(): ICookiePreferences | undefined {\n const item = localStorage.getItem(cookiePreferenceLocalStorageKey);\n\n if (item == null) return undefined;\n\n return JSON.parse(item);\n}\n","import { useEffect, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { isIOS } from \"react-device-detect\";\n\n// To be completed - Adds a bottom space for all screen mobile devices like iPhone X\n// and newer to avoid the devices bottom line call to action\n// https://github.com/MauriceConrad/detect-ios-address-bar\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n bottomNavSpacerCollapsed: {\n minHeight: 0,\n transition: \"min-height .1s linear\",\n },\n bottomNavSpacerExpanded: {\n transition: \"min-height .4s linear\",\n minHeight: 14,\n },\n })\n);\n\nexport default function MobileBottomNavSpacer() {\n const classes = useStyles();\n const [deviceHeight, setDeviceHeight] = useState(window.innerHeight);\n const [addSpacing, setAddSpacing] = useState(false);\n\n const isInStandaloneMode: boolean =\n (window.matchMedia(\"(display-mode: standalone)\").matches ||\n /*@ts-ignore*/\n window.navigator.standalone) ??\n false;\n\n const allScreenDevice = isIOS && deviceHeight > 630;\n\n useEffect(() => {\n const al = () => {\n if (isIOS && deviceHeight)\n if (window.innerHeight > deviceHeight) {\n setAddSpacing(true);\n return;\n }\n setAddSpacing(false);\n };\n window.addEventListener(\"resize\", al);\n return () => window.removeEventListener(\"resize\", al, false);\n }, []);\n\n return allScreenDevice ? (\n \n ) : null;\n}\n","import axios from \"axios\";\nimport { apiUrls } from \"settings\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport IPlatformResponse from \"apiServices/preferences/responses/IPlatformResponse\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport QueryParameter, { constructQueryParameterString } from \"apiServices/QueryParameter\";\n\nexport const fetchCoverPhotos = async (): Promise => {\n const response = await axios.get(apiUrls.preferences.getCoverPhotosPictures);\n\n return response.data;\n};\n\nexport const saveCoverPhoto = async (url: string) => {\n await axios.post(apiUrls.preferences.postCoverPhoto, { url: url });\n};\n\nexport const fetchProviders = async (): Promise => {\n const response = await axios.get(trimEndSlash(apiUrls.preferences.getPlatforms));\n\n return response.data;\n};\n\nexport const fetchProfilePictureForUser = async (ssid: string): Promise => {\n const queryParams: QueryParameter[] = [new QueryParameter(\"ssid\", ssid)];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get<{ ssid: string; profileImageUrl: string }>(\n `${apiUrls.preferences.getProfilePicture}${queryParamString}`\n );\n\n if (response.status === ResponseStatusEnum.NoContent) return \"\";\n\n return response.data.profileImageUrl ?? \"\";\n};\n","import { ActionMap } from \"common/types/ActionMapType\";\nimport { saveCoverPhoto, fetchCoverPhotos, fetchProviders } from \"apiServices/preferences/PreferenceApiService\";\nimport IPreference from \"pages/preferences/interfaces/IPreference\";\nimport IAccountProviders from \"pages/preferences/interfaces/IAccountProviders\";\nimport { images } from \"settings\";\nimport { IUserPreferencesStore } from \"contexts/identity/IdentityStore\";\nimport IPlatform from \"common/interfaces/IPlatform\";\n\nexport enum PreferencesTypes {\n SaveIdentityCoverPhoto = \"SET_IDENTITY_COVER_PHOTO\",\n SaveIdentityCoverPhotoCompleted = \"SET_IDENTITY_COVER_PHOTO_COMPLETED\",\n SaveIdentityProfilePicture = \"SET_IDENTITY_PROFILE_PICTURE\",\n SaveIdentityProfilePictureCompleted = \"SET_IDENTITY_PROFILE_PICTURE_COMPLETED\",\n LinkIdentityProvider = \"LINK_IDENTITY_PROVIDER\",\n LinkIdentityProviderCompleted = \"LINK_IDENTITY_PROVIDER_COMPLETED\",\n FetchIdentityPreferences = \"FETCH_IDENTITY_PREFERENCES\",\n FetchIdentityPreferencesCompleted = \"FETCH_IDENTITY_PREFERENCES_COMPLETED\",\n FetchCoverPhotos = \"FETCH_COVER_PHOTOS\",\n FetchCoverPhotosCompleted = \"FETCH_COVER_PHOTOS_COMPLETED\",\n FetchProfilePictures = \"FETCH_PROFILE_PICTURES\",\n FetchProfilePicturesCompleted = \"FETCH_PROFILE_PICTURES_COMPLETED\",\n FetchProviders = \"FETCH_PROVIDERS\",\n FetchProvidersCompleted = \"FETCH_PROVIDERS_COMPLETED\",\n}\n\ntype PreferencesTypePayload = {\n [PreferencesTypes.SaveIdentityCoverPhoto]: string;\n [PreferencesTypes.SaveIdentityCoverPhotoCompleted]: string;\n [PreferencesTypes.SaveIdentityProfilePicture]: string;\n [PreferencesTypes.SaveIdentityProfilePictureCompleted]: string;\n [PreferencesTypes.LinkIdentityProvider]: IAccountProviders[];\n [PreferencesTypes.LinkIdentityProviderCompleted]: IAccountProviders[];\n [PreferencesTypes.FetchIdentityPreferences]: IPreference;\n [PreferencesTypes.FetchIdentityPreferencesCompleted]: IPreference;\n [PreferencesTypes.FetchCoverPhotos]: string[];\n [PreferencesTypes.FetchCoverPhotosCompleted]: string[];\n [PreferencesTypes.FetchProfilePictures]: string[];\n [PreferencesTypes.FetchProfilePicturesCompleted]: string[];\n [PreferencesTypes.FetchProviders]: IPlatform[];\n [PreferencesTypes.FetchProvidersCompleted]: IPlatform[];\n};\n\nexport type PreferencesActions = ActionMap[keyof ActionMap];\n\nconst handleSetCoverPhoto = (coverPhoto: string) =>\n coverPhoto !== null && coverPhoto !== \"\" ? coverPhoto : images.defaultCover;\n\nconst handleSetProfilePicture = (profilePicture: string) =>\n profilePicture !== null && profilePicture !== \"\" ? profilePicture : images.defaultAvatar;\n\nexport const dispatchSaveIdentityCoverPhoto = async (\n dispatch: React.Dispatch,\n coverPhotoUrl: string\n): Promise => {\n dispatch({\n type: PreferencesTypes.SaveIdentityCoverPhoto,\n });\n\n await saveCoverPhoto(coverPhotoUrl);\n\n dispatch({\n type: PreferencesTypes.SaveIdentityCoverPhotoCompleted,\n payload: handleSetCoverPhoto(coverPhotoUrl),\n });\n\n return coverPhotoUrl;\n};\n\nexport const dispatchSetIdentityPreferences = (dispatch: React.Dispatch, preferences: IPreference) => {\n dispatch({\n type: PreferencesTypes.FetchIdentityPreferencesCompleted,\n payload: {\n coverPhotoUrl: handleSetCoverPhoto(preferences?.coverPhotoUrl),\n privacyLevelId: preferences?.privacyLevelId,\n profileImageUrl: handleSetProfilePicture(preferences?.profileImageUrl),\n providers: preferences?.providers,\n },\n });\n\n return preferences;\n};\n\nexport const dispatchFetchCoverPhotos = async (dispatch: React.Dispatch): Promise => {\n dispatch({\n type: PreferencesTypes.FetchCoverPhotos,\n });\n\n const result = await fetchCoverPhotos();\n\n dispatch({\n type: PreferencesTypes.FetchCoverPhotosCompleted,\n payload: result,\n });\n\n return result;\n};\n\nexport const dispatchFetchProviders = async (dispatch: React.Dispatch): Promise => {\n dispatch({\n type: PreferencesTypes.FetchProviders,\n });\n\n const result = await fetchProviders();\n\n dispatch({\n type: PreferencesTypes.FetchProvidersCompleted,\n payload: result,\n });\n\n return result;\n};\n\nexport const preferencesReducer = (state: IUserPreferencesStore, action: PreferencesActions): IUserPreferencesStore => {\n switch (action.type) {\n case PreferencesTypes.SaveIdentityCoverPhoto:\n case PreferencesTypes.SaveIdentityProfilePicture:\n case PreferencesTypes.FetchIdentityPreferences:\n case PreferencesTypes.FetchCoverPhotos:\n case PreferencesTypes.FetchProfilePictures:\n case PreferencesTypes.FetchProviders:\n case PreferencesTypes.LinkIdentityProvider:\n return {\n ...state,\n loading: true,\n };\n case PreferencesTypes.SaveIdentityCoverPhotoCompleted:\n return {\n ...state,\n userPreferences: {\n ...state.userPreferences,\n coverPhotoUrl: action.payload,\n },\n loading: false,\n };\n case PreferencesTypes.SaveIdentityProfilePictureCompleted:\n return {\n ...state,\n userPreferences: {\n ...state.userPreferences,\n profileImageUrl: action.payload,\n },\n loading: false,\n };\n case PreferencesTypes.LinkIdentityProviderCompleted:\n return {\n ...state,\n userPreferences: {\n ...state.userPreferences,\n providers: action.payload,\n },\n };\n case PreferencesTypes.FetchIdentityPreferencesCompleted:\n return {\n ...state,\n userPreferences: action.payload,\n loading: false,\n };\n case PreferencesTypes.FetchCoverPhotosCompleted:\n return {\n ...state,\n preferencesValues: {\n ...state.preferencesValues,\n coverPhotos: action.payload,\n },\n loading: false,\n };\n case PreferencesTypes.FetchProfilePicturesCompleted:\n return {\n ...state,\n preferencesValues: {\n ...state.preferencesValues,\n profileImages: action.payload,\n },\n loading: false,\n };\n case PreferencesTypes.FetchProvidersCompleted:\n return {\n ...state,\n preferencesValues: {\n ...state.preferencesValues,\n providers: action.payload,\n },\n loading: false,\n };\n default:\n return state;\n }\n};\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default function GamePadIcon(props: SvgIconProps) {\n return (\n \n \n \n );\n}\n","import { IPostNotificationPreferencesRequestBody } from \"apiServices/identity/requests/IPostNotificationPreferencesRequest\";\nimport { ActionMap } from \"common/types/ActionMapType\";\n\nenum NotificationPreferencesTypes {\n SetPreferences = \"SET_PREFERENCES\",\n}\n\ntype NotificationPreferencesPayload = {\n [NotificationPreferencesTypes.SetPreferences]: IPostNotificationPreferencesRequestBody;\n};\n\nexport type NotificationPreferencesActions =\n ActionMap[keyof ActionMap];\n\nexport const dispatchSetNotificationPreferences = (\n dispatch: React.Dispatch,\n preferences: IPostNotificationPreferencesRequestBody\n) => {\n dispatch({\n type: NotificationPreferencesTypes.SetPreferences,\n payload: preferences,\n });\n\n return preferences;\n};\n\nexport const notificationsPreferencesReducer = (\n state: IPostNotificationPreferencesRequestBody,\n action: NotificationPreferencesActions\n): IPostNotificationPreferencesRequestBody => {\n switch (action.type) {\n case NotificationPreferencesTypes.SetPreferences:\n return {\n ...state,\n f123: action.payload.f123,\n friendRequests: action.payload.friendRequests,\n };\n default:\n return state;\n }\n};\n","import axios from \"axios\";\nimport { ILandingPageCdnConfig } from \"./responses/ILandigPageCdnConfigResponse\";\nimport { IFeeatureCdnConfigResponse } from \"./responses/IFeatureCdnConfigResponse\";\nimport IWRCRallyTVConfigResponse from \"./responses/IWRCRallyTVConfigResponse\";\nimport { cdnPaths } from \"settings\";\n\nconst instance = axios.create();\n\nexport const getLandingCdnConfig = async (cdnBaseUrl: string): Promise =>\n (await instance.get(`${cdnBaseUrl}/Landing_Page/landing_content.json`))?.data;\n\nexport const getFeaturesConfig = async (filePath: string): Promise =>\n (await instance.get(filePath))?.data;\n\nexport const getRallyTVConfig = async (cdnBaseUrl: string): Promise =>\n (await instance.get(`${cdnBaseUrl}/${cdnPaths.wrc2023.rallyTVConfig}/rally-tv.json`))\n ?.data;\n","import React, { ReactNode } from \"react\";\nimport IconButton, { IconButtonProps } from \"@material-ui/core/IconButton\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { ITheme, useTheme } from \"@material-ui/core\";\nimport Spacer from \"./Spacer\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n paper: {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.common.black,\n border: `1px solid ${theme.palette.info.light}`,\n },\n })\n);\n\nexport interface IMoreActionsMenuAction {\n label: ReactNode;\n onClick: () => void;\n}\n\ninterface IProps {\n actions: IMoreActionsMenuAction[];\n iconButtonProps?: IconButtonProps;\n}\n\nexport default function MoreActionsMenu({ actions, iconButtonProps }: IProps) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const theme: ITheme = useTheme();\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n \n \n \n {actions.length > 0 && (\n \n {actions.map((action, i) => (\n <>\n {\n action.onClick();\n handleClose();\n }}\n dense\n >\n {action.label}\n \n {i < actions.length - 1 && }\n \n ))}\n \n )}\n \n );\n}\n","export default interface INotificationRequests {\n cursor?: string;\n take: number | undefined;\n filter: NotificationFilter;\n}\n\nexport enum NotificationFilter {\n UnRead,\n Read,\n All,\n}\n","import React, { CSSProperties } from \"react\";\n\nimport { Fragment } from \"react\";\nimport { HTMLAttributes } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n \"@global\": {\n \"::selection\": {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.primary.main,\n },\n },\n });\n});\n\nexport default function GlobalCss(props: HTMLAttributes) {\n useStyles();\n return ;\n}\n\nexport function customScrollbar(theme: Theme) {\n const scrollBarColor = theme.palette.info.light;\n const scrollBarTrackColor = styleGuide.color.white;\n const thickness = 7;\n\n return {\n \"&::-webkit-scrollbar\": { width: thickness },\n \"&::-webkit-scrollbar-track\": { background: scrollBarTrackColor },\n \"&::-webkit-scrollbar-thumb\": {\n background: scrollBarColor,\n borderRadius: thickness,\n },\n scrollbarWidth: \"thin\",\n scrollbarColor: `${scrollBarColor} ${scrollBarTrackColor}`,\n } as CSSProperties;\n}\n","import React, { useEffect } from \"react\";\n\nfunction useClickOutside(ref: React.MutableRefObject, handler: (e: MouseEvent | TouchEvent) => void) {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) {\n return;\n }\n handler(e);\n };\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [handler, ref]);\n}\n\nexport { useClickOutside };\n","import { fetchWebAcceptanceText, postWebAcceptance } from \"apiServices/identity/IdentityApiService\";\nimport { ActionMap } from \"common/types/ActionMapType\";\nimport { IWebAcceptanceStore, IWebAcceptanceText } from \"./WebAcceptanceStore\";\n\nenum WebAcceptanceType {\n FetchAcceptanceText = \"FETCH_WEB_ACCEPTANCE_TEXT\",\n SetWebAcceptance = \"SET_WEB_ACCEPTANCE\",\n SubmitWebAcceptance = \"SUBMIT_WEB_ACCEPTANCE\",\n}\n\ntype WebAcceptanceTypePayload = {\n [WebAcceptanceType.FetchAcceptanceText]: IWebAcceptanceText | undefined;\n [WebAcceptanceType.SetWebAcceptance]: boolean;\n [WebAcceptanceType.SubmitWebAcceptance]: boolean;\n};\n\ntype WebAcceptanceActions = ActionMap[keyof ActionMap];\n\nexport const dispatchFetchWebAcceptanceText = async (\n dispatch: React.Dispatch\n): Promise => {\n const response = await fetchWebAcceptanceText();\n\n dispatch({\n type: WebAcceptanceType.FetchAcceptanceText,\n payload: response,\n });\n\n return response;\n};\n\nexport const dispatchSetWebAcceptance = (dispatch: React.Dispatch, hasAccepted: boolean): boolean => {\n dispatch({\n type: WebAcceptanceType.SetWebAcceptance,\n payload: hasAccepted,\n });\n\n return hasAccepted;\n};\n\nexport const dipatchPostWebAcceptance = async (\n dispatch: React.Dispatch,\n acceptanceId: string\n): Promise => {\n const response = await postWebAcceptance(acceptanceId);\n\n dispatch({\n type: WebAcceptanceType.SubmitWebAcceptance,\n payload: response,\n });\n\n return response;\n};\n\nexport const webAcceptanceReducer = (state: IWebAcceptanceStore, action: WebAcceptanceActions): IWebAcceptanceStore => {\n switch (action.type) {\n case WebAcceptanceType.FetchAcceptanceText:\n return {\n ...state,\n acceptanceText: action.payload,\n };\n case WebAcceptanceType.SetWebAcceptance:\n case WebAcceptanceType.SubmitWebAcceptance:\n return {\n ...state,\n hasAcceptedTerms: action.payload,\n };\n default:\n return state;\n }\n};\n","import { useEffect } from \"react\";\nimport { useLocation, withRouter } from \"react-router-dom\";\n\nconst ScrollToTop = () => {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scroll({\n top: 1, //fixes the blank issue on iOs app\n left: 0,\n behavior: \"smooth\",\n });\n }, [pathname]);\n\n return null;\n};\n\nexport default withRouter(ScrollToTop);\n","import { useEffect, useState } from \"react\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useHistory } from \"react-router-dom\";\nimport NotificationsContent from \"common/components/notifications/NotificationsContent\";\nimport PageSection from \"containers/layout/PageSection\";\nimport NotificationsActions from \"common/components/notifications/NotificationsActions\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport { dispatchMarkNewNotificationsAsRead } from \"contexts/notification/actions/NotificationActions\";\nimport { Popover } from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { ITheme } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n root: {\n backgroundColor: theme.palette.background.paper,\n flex: 1,\n color: theme.palette.text.secondary,\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: theme.palette.text.primary,\n borderBottom: `2px solid ${theme.palette.info.light}`,\n marginBottom: theme.spacing(1),\n },\n popoverPaper: {\n width: \"100%\",\n height: \"100%\",\n top: 0 + theme.styles.cssImportant,\n left: 0 + theme.styles.cssImportant,\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n borderRadius: 0,\n },\n closeIcon: {\n color: theme.palette.text.secondary,\n },\n })\n);\n\ninterface IProps {\n open: boolean;\n}\n\nexport default function NotificationsPage({ open }: IProps) {\n const classes = useStyles();\n const history = useHistory();\n\n const [isOpen, setIsOpen] = useState(true);\n const notificationContext = useNotificationContext();\n\n const markAsRead = () => {\n dispatchMarkNewNotificationsAsRead(\n notificationContext.dispatch,\n notificationContext.state.newNotificationStore.notifications,\n notificationContext.state.oldNotificationStore.notifications\n );\n };\n\n useEffect(() => {\n // if(notificationContext.state.notificationStore.openTray || open) {\n // setIsOpen(!isOpen)\n // } else {\n // setIsOpen(false);\n // }\n setIsOpen(!isOpen);\n }, [open, notificationContext.state.notificationStore.openTray]);\n\n return (\n {\n markAsRead();\n // history.goBack();\n }}\n >\n
\n \n
\n setIsOpen(false)}>\n \n \n \n Notification centre\n \n \n
\n \n
\n
\n \n );\n}\n","import { ITheme, useTheme } from \"@material-ui/core\";\nimport ArrowLeftIconV2 from \"assets/icons/ArrowLeftIconV2\";\nimport useResponsivePadding from \"hooks/useResponsivePadding\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport { routingUrls } from \"settings\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { escapeUrl } from \"utils/urlHelper\";\n\ninterface IProps {\n disabled?: boolean;\n}\n\nconst HubV3MobileBackButton = ({ disabled }: IProps) => {\n const theme: ITheme = useTheme();\n const responsivePadding = useResponsivePadding();\n const history = useHistory();\n const location = useLocation();\n\n const handleGoBack = () => {\n //WRC Hub\n if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.root)})$`).test(location.pathname)) {\n history.push(routingUrls.games);\n }\n //WRC Stats\n else if (\n new RegExp(`(${escapeUrl(routingUrls.wrc2023.playerStatsCompare)}\\/[0-9]+\\/[0-9]\\/[a-zA-Z]+)$`).test(\n location.pathname\n )\n ) {\n history.push(location.pathname.substring(0, location.pathname.lastIndexOf(\"/\")));\n } else if (\n new RegExp(`(${escapeUrl(routingUrls.wrc2023.playerStatsCompare)}\\/[0-9]+\\/[0-9])$`).test(location.pathname)\n ) {\n history.push(routingUrls.wrc2023.root);\n } else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.playerStats)}\\/[a-zA-Z]+)$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.playerStats);\n } else if (new RegExp(escapeUrl(routingUrls.wrc2023.playerStats)).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n } else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.playerStatsCompare)})$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n }\n //WRC leaderboard\n else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.leaderboards)})`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n }\n //WRC Clubs\n else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.club)})$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n } else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.club)}\\/[0-9]+)$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.club);\n } else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.club)}\\/[0-9]+\\/members)$`).test(location.pathname)) {\n history.push(location.pathname.substring(0, location.pathname.lastIndexOf(\"/\")));\n }\n // PA\n else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.performanceAnalysis)})$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n }\n //News\n else if (new RegExp(`(${escapeUrl(routingUrls.wrc2023.news)})$`).test(location.pathname)) {\n history.push(routingUrls.wrc2023.root);\n } else {\n history.goBack();\n }\n };\n\n const styles: IStyles = {\n root: {\n opacity: disabled ? 0.4 : 1,\n zIndex: 1,\n pointerEvents: \"all\",\n backgroundColor: \"rgba(4, 12, 30, 0.8)\",\n border: \"none\",\n borderRadius: \"50%\",\n display: \"flex\",\n margin: 0,\n padding: responsivePadding * 1.25,\n },\n icon: { display: \"flex\", color: styleGuide.color.white },\n };\n\n return (\n \n );\n};\n\nexport default HubV3MobileBackButton;\n","import { useRef, useState } from \"react\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport INavigationItem from \"../INavigationItem\";\nimport { Link } from \"react-router-dom\";\nimport { fontTypes, layout, styleGuide } from \"theme\";\nimport NotificationsBadge from \"common/components/notifications/NotificationsBadge\";\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport RouterLinkButton from \"common/components/buttons/RouterLinkButton\";\nimport StyledButton from \"common/components/buttons/StyledButton\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport { routingUrls, settings } from \"settings\";\nimport { Button } from \"@material-ui/core\";\nimport clsx from \"clsx\";\nimport NotificationsPage from \"pages/notifications/NotificationsPage\";\nimport { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport NewTabLinkButton from \"common/components/buttons/NewTabLinkButton\";\nimport { ITheme } from \"@material-ui/core\";\nimport { logoutUser } from \"../../../../apiServices/identity/IdentityApiService\";\nimport { useConfig } from \"../../../../contexts/configuration/ConfigurationContext\";\nimport ProfileAvatar from \"common/components/ProfileAvatar\";\nimport FriendIconNoCircle from \"assets/icons/FriendIconNoCircle\";\nimport GamePadIcon from \"assets/icons/navBar/GamePadIcon\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport { isIOS, isMobile } from \"react-device-detect\";\nimport { postAnalyticsEvent } from \"utils/analyticsHelper\";\nimport MobileBottomNavSpacer from \"./MobileBottomNavSpacer\";\nimport HubV3MobileBackButton from \"pages/gamesStats/layout/HubV3MobileBackButton\";\nimport useResponsivePadding from \"hooks/useResponsivePadding\";\nimport Drawer from \"common/components/uiComponents/drawers/Drawer\";\n\nexport const topBarHeight = 44;\n\nconst useStyles = makeStyles((theme: ITheme) => {\n const dropdownLabelZindex = theme.zIndex.appBar;\n const iconSize = theme.spacing(5);\n\n return createStyles({\n appBar: {\n backgroundColor: styleGuide.color.richBlack,\n height: topBarHeight,\n padding: \"0 8px\",\n },\n title: {\n ...fontTypes.bold,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n topToolbar: {\n height: topBarHeight,\n minHeight: topBarHeight,\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n bottomToolbar: {\n height: layout.toolBarHeight,\n minHeight: layout.toolBarHeight,\n display: \"flex\",\n justifyContent: \"space-around\",\n },\n iconButton: {\n height: iconSize,\n width: iconSize,\n },\n badge: {\n top: theme.spacing() / 2,\n },\n bottomNav: {\n position: \"fixed\",\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: dropdownLabelZindex,\n backgroundColor: styleGuide.color.richBlack,\n },\n buttonContainer: {\n flex: 1,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: isIOS && isMobile ? \"4px 0\" : \"8px 0\",\n color: theme.sidebar.color,\n },\n selected: {\n // ...theme.styles.navSelected,\n },\n bottomItem: {\n display: \"flex\",\n height: 40,\n width: 40,\n minWidth: \"unset\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.sidebar.color,\n },\n bottmItemSelected: {\n // boxShadow: `0 0 6px 0 ${theme.variants.offWhite}`,\n color: theme.variants.offWhite,\n borderRadius: \"100%\",\n overflow: \"hidden\",\n },\n popover: {\n display: \"flex\",\n padding: theme.spacing(),\n flexDirection: \"column\",\n backgroundColor: theme.sidebar.backgroundColor,\n right: 0,\n },\n versioning: {\n color: theme.sidebar.color,\n textAlign: \"center\",\n },\n caption: {\n lineHeight: 1,\n },\n });\n});\n\ninterface IProps {\n getTitle?: (title: string) => {};\n}\n\nexport default function MobileNavigation(props: IProps) {\n const classes = useStyles();\n const config = useConfig();\n const applicationContext = useApplicationContext();\n const userAvatar = useIdentityContext().state.preferences.userPreferences.profileImageUrl;\n const navbarRef = useRef(null);\n const [selected, setSelected] = useState(2);\n const theme = useTheme();\n const responsivePadding = useResponsivePadding();\n\n const handleClose = () => {\n setDropdownIsOpen(false);\n };\n\n const [dropdownIsOpen, setDropdownIsOpen] = useState(false);\n\n const handleLogout = () => {\n logoutUser().then((res) => {\n window.location.href = `${config.authUrls.logout}${trimEndSlash(settings.basePath)}${\n routingUrls.loggedOut\n }`;\n });\n };\n\n const buttonVariant = \"transparentLight\";\n const feedbackUrl = applicationContext.state.applicationStore.surveyUrl;\n\n const dropdownContent = (\n \n \n Feedback\n \n \n Settings\n \n \n Release notes\n \n \n FAQ\n \n \n Log out\n \n {`v${applicationContext.state.applicationStore.version.version}`}\n \n );\n\n const [openNotification, setOpenNotification] = useState(false);\n\n const toggleNotification = () => {\n postAnalyticsEvent(\"notification.click\");\n setOpenNotification(!openNotification);\n };\n\n const toggleDropdown = () => {\n setDropdownIsOpen(!dropdownIsOpen);\n // setSelected(mobileNavigationItems.length + 1);\n };\n\n const mobileNavigationItems: INavigationItem[] = [\n {\n icon: (\n \n ),\n href: routingUrls.games,\n matchExactPath: true,\n },\n {\n icon: (\n \n ),\n href: routingUrls.friends,\n matchExactPath: true,\n },\n {\n icon: (\n \n ),\n href: \"#\",\n },\n {\n icon: (\n \n ),\n href: routingUrls.profile,\n matchExactPath: true,\n },\n {\n icon: (\n \n ),\n href: \"#\",\n matchExactPath: false,\n },\n // {\n // icon: (\n // \n // ),\n // label: \"News\",\n // href: routingUrls.newsFeed,\n // matchExactPath: true,\n // },\n ];\n\n return (\n <>\n \n \n \n \n
\n \n {mobileNavigationItems.map((item, index) => (\n
\n setSelected((prevState) => (index === 2 ? prevState : index))}\n to={item.href}\n className={classes.bottomItem}\n style={{\n padding: item.label === \"Profile\" ? 1 : 2,\n marginTop: item.label === \"Profile\" ? 1 : \"unset\",\n }}\n >\n {item.icon}\n \n {item.label && (\n \n {item.label}\n \n )}\n
\n ))}\n
\n \n
\n \n {dropdownContent}\n \n \n );\n}\n","import { ReactNode, HTMLAttributes } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n stickyFooterRoot: {\n display: \"flex\",\n flex: \"1 1 auto\",\n flexDirection: \"column\",\n minHeight: \"100vh\",\n color: styleGuide.color.white,\n minWidth: 0,\n },\n content: {\n flex: \"1 0 auto\", // This was 1 1 auto limiting the content to grow on safari.\n display: \"flex\",\n position: \"relative\",\n minWidth: 0,\n },\n })\n);\n\ninterface IStickyFooterProps extends HTMLAttributes {\n footer: ReactNode;\n}\n\nexport default function StickyFooter(props: IStickyFooterProps) {\n const classes = useStyles();\n const { children, footer, className, ...rest } = props;\n\n return (\n
\n
{children}
\n {footer}\n
\n );\n}\n","import React from \"react\";\nimport StickyFooter from \"./StickyFooter\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport Spacer from \"common/components/Spacer\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: {},\n childContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1 1 auto\",\n minWidth: 0,\n },\n });\n});\n\ninterface IProps extends React.HTMLAttributes {}\n\nexport default function PageLayout(props: IProps) {\n const { children, className, ...rest } = props;\n const isMobile = useIsMobile();\n\n const classes = useStyles();\n\n return (\n }\n {...rest}\n >\n
{children}
\n \n );\n}\n","import { HTMLAttributes } from \"react\";\nimport { routingUrls } from \"settings\";\nimport ProfileIcon from \"assets/icons/navBar/ProfileIcon\";\nimport GamePadIcon from \"assets/icons/navBar/GamePadIcon\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport INavigationItem from \"./INavigationItem\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport DesktopNavigation from \"./desktop/DesktopNavigation\";\nimport MobileNavigation from \"./mobile/MobileNavigation\";\nimport clsx from \"clsx\";\nimport PageLayout from \"containers/layout/PageLayout\";\nimport FriendsIcon from \"assets/icons/profileStats/FriendsIcon\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: {\n display: \"flex\",\n position: \"relative\",\n minWidth: 0,\n },\n });\n});\n\ninterface IProps extends HTMLAttributes {}\n\nexport default function AuthorisedNavigationBar(props: IProps) {\n const { className, children, ...rest } = props;\n const classes = useStyles();\n const isMobile = useIsMobile();\n\n const navItemIconFontSize = \"inherit\";\n const navigationItems: INavigationItem[] = [\n {\n icon: ,\n label: \"Games\",\n href: routingUrls.games,\n matchExactPath: true,\n },\n {\n icon: ,\n label: \"Friends\",\n href: routingUrls.friends,\n matchExactPath: true,\n },\n {\n icon: ,\n label: \"Profile\",\n href: routingUrls.profile,\n matchExactPath: true,\n },\n ];\n\n return (\n
\n {isRaceNetMobileApp || isRaceNetTabletApp ? null : isMobile ? (\n \n ) : (\n \n )}\n \n {/* {!isRaceNetMobileApp && isMobile && } */}\n {children}\n \n
\n );\n}\n","export default __webpack_public_path__ + \"static/media/playStore.5f2a4bb0.png\";","export default \"data:image/png;base64,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\"","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n );\n};\n","import { ReactNode, useEffect, useState } from \"react\";\nimport { useCookieContext } from \"../cookieConsent/CookieContext\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"../Spacer\";\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport FriendsIcon from \"assets/icons/profileStats/FriendsIcon\";\nimport TrophyIcon from \"assets/icons/redbull/TrophyIcon\";\nimport { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport { cdnPaths } from \"settings\";\nimport Img from \"../img/Img\";\nimport Popover from \"../popover/Popover\";\nimport playStore from \"assets/images/appStore/playStore.png\";\nimport appStore from \"assets/images/appStore/appStore.png\";\nimport useBreakpoint from \"hooks/useBreakpoint\";\nimport ProgressIcon from \"assets/icons/onboarding/ProgressIcon\";\nimport { postOnboarding } from \"apiServices/identity/IdentityApiService\";\nimport { dispatchAddCompletedOnboarding } from \"contexts/identity/actions/OnboardingActions\";\nimport { ScrollItems, useScrollContext } from \"contexts/scroll/ScrollContext\";\n\nconst currentOnboarding = \"Racenet_mobile_app\";\n\ninterface IInfo {\n icon: ReactNode;\n text: string;\n}\n\nexport default () => {\n //Cookie context tells us if the cookie banner is already opened or not in which case\n //we need to wait for this one to be closed in order to open the onboarding popup\n const cookieContext = useCookieContext();\n const identityContext = useIdentityContext();\n const applicationContext = useApplicationContext();\n const [open, setOpen] = useState(\n identityContext.state.completedOnboardings.find((o) => o === currentOnboarding) === undefined\n );\n const md = useBreakpoint(860, \"down\");\n const { handleInitialLoad, handleDisableScroll } = useScrollContext();\n\n const styles: IStyles = {\n icon: {\n color: styleGuide.color.white,\n height: 37,\n width: 37,\n },\n contentContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n zIndex: 2,\n position: \"relative\",\n // marginTop: -styleGuide.spacing(4),\n height: \"100%\",\n },\n background: {\n position: \"absolute\",\n left: -styleGuide.spacing(5),\n right: -styleGuide.spacing(5),\n top: 100,\n zIndex: 0,\n },\n list: {\n listStyle: \"none\",\n padding: 0,\n margin: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: styleGuide.spacing(3),\n paddingTop: styleGuide.spacing(2),\n },\n listItem: {\n display: \"flex\",\n gap: styleGuide.spacing(2),\n alignItems: \"center\",\n height: \"max-content\",\n },\n qr: {\n width: 130,\n height: \"auto\",\n },\n qrContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: styleGuide.spacing(2),\n padding: styleGuide.spacing(2),\n backgroundColor: styleGuide.color.richBlack,\n borderRadius: styleGuide.borderRadius,\n },\n mockImg: {\n width: 570,\n height: \"auto\",\n zIndex: 2,\n minHeight: 342.8,\n flex: 1,\n },\n swoosh: {\n height: 170,\n position: \"absolute\",\n top: md ? 100 : 120,\n right: 0,\n left: 0,\n zIndex: -1,\n },\n title: {\n ...styleGuide.typography.title,\n marginTop: -styleGuide.spacing(2),\n },\n row: {\n display: \"flex\",\n gap: styleGuide.spacing(3),\n padding: `${styleGuide.spacing(2)}px ${styleGuide.spacing(4)}px`,\n },\n };\n\n const cdnPathQrCodes = `${trimEndSlash(applicationContext.state.applicationStore.cdnUrl)}/${trimEndSlash(\n cdnPaths.qrCodes\n )}`;\n const playStoreUrl = applicationContext.state.applicationStore.playStoreUrl;\n const iOSUrl = applicationContext.state.applicationStore.iosUrl;\n\n const handleClose = async () => {\n setOpen(false);\n\n await postOnboarding(currentOnboarding);\n dispatchAddCompletedOnboarding(identityContext.dispatch, currentOnboarding);\n };\n\n useEffect(() => {\n if (open && !cookieContext.cookieBannerIsOpen) {\n handleInitialLoad(true);\n handleDisableScroll(ScrollItems.Popover);\n }\n }, [open]);\n\n const openState = open && !cookieContext.cookieBannerIsOpen;\n\n const info: IInfo[] = [\n {\n icon: ,\n text: \"Connect with your friends, comparing your stats & laps on the go.\",\n },\n {\n icon: ,\n text: \"Receive real time notifications for new events and competitions.\",\n },\n {\n icon: ,\n text: \"Analyse your racing telemetry wherever you are.\",\n },\n {\n icon: ,\n text: \"Never miss a F1® 23 League race again with our range of League Racing push notifications.\",\n },\n ];\n\n const qrContainer = (\n
\n \"qr-code\"\n \n \n \"app-store\"\n \n \n \n \"app-store\"\n \n \n
\n );\n\n const content = (\n
\n \n \n \n \n \n Introducing the EA Racenet App\n \n \n \n Our EA Racenet app is now here on iOS and Android.\n \n \n
\n
    \n {info.map((item: IInfo, index: number) => {\n return (\n
  • \n {item.icon}\n {item.text}\n
  • \n );\n })}\n
\n {qrContainer}\n
\n
\n );\n\n return (\n \n {content}\n \n );\n};\n","import { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport Snackbar, { SnackbarProps } from \"@material-ui/core/Snackbar\";\nimport { ITheme } from \"@material-ui/core\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme: ITheme) => {\n return createStyles({\n root: {\n backgroundColor: styleGuide.color.white,\n border: `solid 3px ${theme.palette.info.dark}`,\n borderRadius: theme.styles.borderRadiusSm,\n },\n content: {\n color: theme.palette.secondary.dark,\n flex: 1,\n },\n });\n});\n\nexport interface IStyledSnackbarProps extends SnackbarProps {}\n\nexport default function StyledSnackbar(props: IStyledSnackbarProps) {\n const classes = useStyles();\n const { className, children, ...rest } = props;\n\n return (\n \n
\n {children}\n
\n
\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { makeStyles, createStyles, useTheme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport { isIOS } from \"react-device-detect\";\nimport { icons } from \"settings\";\nimport StyledSnackbar, { IStyledSnackbarProps } from \"common/components/StyledSnackbar\";\nimport Spacer from \"common/components/Spacer\";\nimport { ITheme } from \"@material-ui/core\";\nimport CloseIcon from \"assets/icons/CloseIcon\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n root: {\n position: \"fixed\",\n width: \"100%\",\n left: 0,\n right: 0,\n overflow: \"hidden\",\n top: 0,\n backgroundColor: theme.palette.common.white,\n maxHeight: 65,\n transition: \"top 0.3s\",\n },\n hide: {\n top: -65,\n },\n show: {\n top: 0,\n },\n snackbar: {\n display: \"flex\",\n // alignItems: \"center\",\n height: \"100%\",\n },\n contentLink: {\n flexDirection: \"row\",\n display: \"flex\",\n alignItems: \"center\",\n padding: 4,\n borderRadius: theme.styles.borderRadiusXs,\n width: \"100%\",\n },\n openApp: {\n backgroundColor: theme.palette.info.main,\n borderRadius: 4,\n padding: \"4px 12px\",\n },\n })\n);\n\ninterface IProps extends IStyledSnackbarProps {\n onClose?: () => void;\n handleClose: (showAgain: boolean) => void;\n}\n\nexport default function InstallAppSnackbar(props: IProps) {\n const { onClose, handleClose, open, ...rest } = props;\n const classes = useStyles();\n const [timeOpen, setTimeOpen] = useState(true);\n const theme: ITheme = useTheme();\n const [isAppInstalled, setIsAppInstalled] = useState();\n\n const playStoreUrl = \"https://play.google.com/store/apps/details?id=com.ea.gp.racenet&pli=1\";\n const nativeAppLink = \"racenetapp://\";\n\n const installAppMessage = (\n <>\n EA Racenet\n \n Download now on the Play Store.\n \n \n );\n\n const openNativeApp = (\n <>\n EA Racenet\n \n Open in the EA Racenet app.\n \n \n );\n\n const isInStandaloneMode = () => {\n if (!isIOS) {\n return (\n window.matchMedia(\"(display-mode: standalone)\").matches ||\n \"standalone\" in window.navigator ||\n //@ts-ignore\n window.navigator.standalone ||\n //@ts-ignore\n window.clientInformation.standalone\n );\n }\n return (\n window.matchMedia(\"(display-mode: standalone)\").matches ||\n //@ts-ignore\n window.navigator.standalone ||\n //@ts-ignore\n window.clientInformation.standalone\n );\n };\n\n const installedApp = async () => {\n try {\n //@ts-ignore\n const apps = await navigator.getInstalledRelatedApps();\n\n // window.alert(\"Installed apps: \" + JSON.stringify(apps));\n // console.log('Installed apps', apps);\n\n if (apps.length > 0) {\n const nativeApp = apps.find((app: { id: string }) => app.id === \"com.ea.gp.racenet\");\n if (nativeApp) {\n setIsAppInstalled(true);\n } else {\n setIsAppInstalled(false);\n }\n }\n } catch (err) {\n console.log(\"Error getting installed apps\", err);\n }\n };\n\n const [scrollDirection, setScrollDirection] = useState<\"down\" | \"up\">();\n\n useEffect(() => {\n installedApp();\n }, []);\n\n useEffect(() => {\n let lastScrollY = window.pageYOffset;\n\n const updateScrollDirection = () => {\n const scrollY = window.scrollY;\n const direction = scrollY > lastScrollY ? \"down\" : \"up\";\n if (direction !== scrollDirection && (scrollY - lastScrollY > 10 || scrollY - lastScrollY < -10)) {\n setScrollDirection(direction);\n }\n lastScrollY = scrollY > 0 ? scrollY : 0;\n };\n window.addEventListener(\"scroll\", updateScrollDirection); // add event listener\n return () => {\n window.removeEventListener(\"scroll\", updateScrollDirection); // clean up\n };\n }, [scrollDirection]);\n\n return !isInStandaloneMode() && !isIOS ? (\n <>\n \n \n
\n handleClose && handleClose(false)}\n color=\"default\"\n style={{ width: 30, minHeight: \"100%\" }}\n >\n \n \n {/* */}\n
\n
\n \n
\n\n \n\n
\n {isAppInstalled ? openNativeApp : installAppMessage}\n
\n\n \n\n handleClose(true)}\n >\n \n {isAppInstalled ? \"OPEN\" : \"VIEW\"}\n \n \n \n
\n
\n \n \n ) : null;\n}\n","import { HTMLAttributes, useEffect, useState } from \"react\";\n\ninterface IProps extends HTMLAttributes {\n delay: number;\n}\n\nexport default function DelayRender(props: IProps) {\n const { delay, children, ...rest } = props;\n\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n let timeout = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n return () => clearTimeout(timeout);\n }, []);\n\n return isVisible ?
{children}
: null;\n}\n","import { useEffect, useState } from \"react\";\nimport InstallAppSnackbar from \"./dialogs/InstallAppSnackbar\";\nimport DelayRender from \"common/components/DelayRender\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport { isMobileSafari } from \"react-device-detect\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport useIsLandscape from \"hooks/useIsLandscape\";\n\nfunction getDoNotShowAgain(storageId: string) {\n return {\n localStorage: localStorage.getItem(storageId) === \"true\",\n setLocalStorage: (value: boolean) => localStorage.setItem(storageId, value.toString()),\n sessionStorage: sessionStorage.getItem(storageId) === \"true\",\n setSessionStorage: (value: boolean) => sessionStorage.setItem(storageId, value.toString()),\n };\n}\n\nexport default function LaunchDialogsController() {\n const isMobile = useIsMobile();\n const [showInstallAppSnackbar, setShowInstallAppSnackbar] = useState(true);\n const isLandscape = useIsLandscape();\n const storageIds = {\n installAppBanner: {\n doNotShowAgain: \"doNotShowIntallAppBannerAgain\",\n },\n };\n\n const doNotShowInstallAppBanner = getDoNotShowAgain(storageIds.installAppBanner.doNotShowAgain);\n useEffect(() => {\n if (doNotShowInstallAppBanner.sessionStorage) return;\n\n setShowInstallAppSnackbar(true);\n }, []);\n\n const onInstallAppSnackBarClose = (showAgain: boolean) => {\n !showAgain && doNotShowInstallAppBanner.setSessionStorage(true);\n setShowInstallAppSnackbar(false);\n };\n\n return (\n // It only shows on Android devices\n !isLandscape &&\n isMobile &&\n !isRaceNetMobileApp &&\n !isRaceNetTabletApp &&\n !isMobileSafari &&\n !doNotShowInstallAppBanner.sessionStorage ? (\n \n \n \n ) : null\n );\n}\n","import { lazy, Suspense } from \"react\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { analyticsIds, routingUrls, TabTitle } from \"settings\";\nimport ScrollToTop from \"./ScrollToTop\";\nimport { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport { NotificationContextProvider } from \"contexts/notification/NotificationContext\";\nimport AuthorisedNavigationBar from \"containers/navigation/authorised/AuthorisedNavigationBar\";\nimport PageCircularProgress from \"common/components/loaders/PageCircularProgress\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport { Helmet } from \"react-helmet\";\nimport OnboardingDialog from \"common/components/OnboardingDialog/OnboardingDialog\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport { useConfig } from \"../contexts/configuration/ConfigurationContext\";\nimport LaunchDialogsController from \"common/components/launchDialogs/LaunchDialogsController\";\nimport useIsMobile from \"hooks/useIsMobile\";\n\nconst Games = lazy(() => import(\"../pages/games/GamesPage\"));\nconst LoggedInNotFoundPage = lazy(() => import(\"../pages/errorPages/LoggedInNotFoundPage\"));\nconst ProfileRoutes = lazy(() => import(\"../pages/profile/routes\"));\nconst Friends = lazy(() => import(\"../pages/friends\"));\nconst Preferences = lazy(() => import(\"../pages/preferences\"));\nconst News = lazy(() => import(\"../pages/newsFeed/NewsRoutes\"));\nconst ReleaseNotes = lazy(() => import(\"../pages/releaseNotes/ReleaseNotes\"));\nconst Faq = lazy(() => import(\"../pages/faq/FaqPage\"));\n\nconst DRRoutes = lazy(() => import(\"../pages/gamesStats/dirtRally/DRRoutes\"));\nconst DR2Routes = lazy(() => import(\"../pages/gamesStats/dirtRally2/DR2Routes\"));\nconst D5Routes = lazy(() => import(\"../pages/gamesStats/dirt5/D5Routes\"));\nconst GRID21Routes = lazy(() => import(\"../pages/gamesStats/GRID21/GRID21Routes\"));\nconst F121Routes = lazy(() => import(\"../pages/gamesStats/F12021/F12021Routes\"));\nconst F122Routes = lazy(() => import(\"../pages/gamesStats/F12022/F12022Routes\"));\nconst F123Routes = lazy(() => import(\"../pages/gamesStats/F12023/F12023Routes\"));\nconst F124Routes = lazy(() => import(\"../pages/gamesStats/F12024/F12024Routes\"));\nconst F125Routes = lazy(() => import(\"../pages/gamesStats/F12025/F12025Routes\"));\nconst WRC2023Routes = lazy(() => import(\"../pages/gamesStats/WRC2023/WRC2023Routes\"));\nconst UnderConstruction = lazy(() => import(\"../pages/gamesStats/components/UnderConstruction\"));\n\nexport default function AuthorisedRoutes() {\n const isMobile = useIsMobile();\n const identityContext = useIdentityContext();\n const applicationContext = useApplicationContext();\n const showInstallAppBanner = useConfig().features?.find((f) => f === \"mobile_app_install\");\n\n const gameStatsRoutes = applicationContext.state.applicationStore.supportedGames.map(\n ({ route, gameId, isRacenetEnabled, title }) => {\n if (!isRacenetEnabled || route === undefined || route === \"\") return null;\n\n let children = (\n \n );\n\n if (gameId === GamesEnum.DirtRally) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.DirtRally2) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.Dirt5) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.Grid2021) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.F12021) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.F12022) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.F12023) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.WRC2023) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.F12024) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n } else if (gameId === GamesEnum.F12025) {\n children = (\n <>\n \n {`${TabTitle.RaceNet} - ${title}`}\n \n \n \n );\n }\n\n return (\n \n {children}\n \n );\n }\n );\n\n return (\n <>\n {showInstallAppBanner && }\n \n \n \n {!isRaceNetMobileApp && !isRaceNetTabletApp && !isMobile && }\n }>\n \n {/* NAVIGATION BAR ROUTES */}\n \n \n {`${TabTitle.RaceNet} - ${TabTitle.Profile}`}\n \n \n \n \n \n {`${TabTitle.RaceNet} - ${TabTitle.GameLib}`}\n \n \n \n {/* MISC ROUTES */}\n \n \n {`${TabTitle.RaceNet} - ${TabTitle.Friends}`}\n \n \n \n\n {gameStatsRoutes}\n\n \n \n {`${TabTitle.RaceNet} - ${TabTitle.Settings}`}\n \n \n \n \n \n EA Racenet - News\n \n \n \n \n \n {`${TabTitle.RaceNet} - ${TabTitle.ReleaseNotes}`}\n \n \n \n \n \n {`${TabTitle.RaceNet} - ${TabTitle.Faq}`}\n \n \n \n \n (\n <>\n \n {`${TabTitle.RaceNet} - ${TabTitle.NotFound}`}\n \n \n \n )}\n />\n (\n <>\n \n {`${TabTitle.RaceNet} - ${TabTitle.NotFound}`}\n \n \n \n )}\n />\n \n \n \n \n\n {/*For analytics to retrieve the ssid*/}\n \n \n );\n}\n","import Typography from \"@material-ui/core/Typography\";\nimport { forwardRef, useEffect, useMemo } from \"react\";\nimport { styleGuide } from \"theme\";\nimport { SCROLL_OFFSET, SET_SELECTED_MENU_EVENT } from \"../hero/HeroDesktop\";\nimport { ITheme, useMediaQuery, useTheme } from \"@material-ui/core\";\n\ninterface IProps {\n cdnPath: string;\n isMobile: boolean;\n title: string;\n description: string;\n id: string;\n}\n\nconst SectionF1LeagueSimple = forwardRef(({ cdnPath, isMobile, title, description, id }: IProps, ref: any) => {\n const theme: ITheme = useTheme();\n const sm = useMediaQuery(theme.breakpoints.down(\"sm\"));\n\n const background = useMemo(() => {\n return isMobile\n ? `${cdnPath}/banner_league_mobile.jpg`\n : sm\n ? `${cdnPath}/banner_league_tab.jpg`\n : `${cdnPath}/banner_league.jpg`;\n }, [isMobile, sm]);\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (\n window.scrollY + SCROLL_OFFSET >= ref.current.offsetTop &&\n window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight\n ) {\n window.dispatchEvent(new CustomEvent(SET_SELECTED_MENU_EVENT, { detail: id, bubbles: false }));\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n {title}\n \n \n {description}\n \n \n \n );\n});\n\nexport default SectionF1LeagueSimple;\n","import Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"common/components/Spacer\";\nimport Img from \"common/components/img/Img\";\nimport { forwardRef, useEffect } from \"react\";\nimport { styleGuide } from \"theme\";\nimport { SCROLL_OFFSET, SET_SELECTED_MENU_EVENT } from \"../hero/HeroDesktop\";\n\ninterface IProps {\n isMobile: boolean;\n cdnPath: string;\n title: string;\n description: string;\n id: string;\n}\n\nconst SectionWrcClubs = forwardRef(({ isMobile, cdnPath, title, description, id }: IProps, ref: any) => {\n const image = `${cdnPath}/screens_clubs.png`;\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (\n window.scrollY + SCROLL_OFFSET >= ref.current.offsetTop &&\n window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight\n ) {\n window.dispatchEvent(new CustomEvent(SET_SELECTED_MENU_EVENT, { detail: id, bubbles: false }));\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n
\n \n {title}\n \n \n \n {description}\n \n
\n \n \n );\n});\n\nexport default SectionWrcClubs;\n","import Typography from \"@material-ui/core/Typography\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport { forwardRef, useEffect, useMemo } from \"react\";\nimport { styleGuide } from \"theme\";\nimport { SCROLL_OFFSET, SET_SELECTED_MENU_EVENT } from \"../hero/HeroDesktop\";\nimport { ITheme, useMediaQuery, useTheme } from \"@material-ui/core\";\n\ninterface IProps {\n isMobile: boolean;\n cdnPath: string;\n title: string;\n description: string;\n game: GamesEnum;\n id: string;\n}\n\nconst SectionTimetrialAnalysis = forwardRef(({ isMobile, cdnPath, title, description, game, id }: IProps, ref: any) => {\n const theme: ITheme = useTheme();\n const sm = useMediaQuery(theme.breakpoints.down(\"sm\"));\n\n const background = useMemo(() => {\n if (game === GamesEnum.WRC2023)\n return isMobile\n ? `${cdnPath}/analysis_wrc_mobile.jpg`\n : sm\n ? `${cdnPath}/analysis_wrc_tab.jpg`\n : `${cdnPath}/analysis_wrc.jpg`;\n\n return isMobile\n ? `${cdnPath}/analysis_f1_mobile.jpg`\n : sm\n ? `${cdnPath}/analysis_f1_tab.jpg`\n : `${cdnPath}/analysis_f1.jpg`;\n }, [isMobile, sm, game]);\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (\n window.scrollY + SCROLL_OFFSET >= ref.current.offsetTop &&\n window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight\n ) {\n window.dispatchEvent(new CustomEvent(SET_SELECTED_MENU_EVENT, { detail: id, bubbles: false }));\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n {title}\n \n \n {description}\n \n \n \n );\n});\n\nexport default SectionTimetrialAnalysis;\n","import Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"common/components/Spacer\";\nimport Img from \"common/components/img/Img\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport { forwardRef, useEffect, useMemo } from \"react\";\nimport { styleGuide } from \"theme\";\nimport { SCROLL_OFFSET, SET_SELECTED_MENU_EVENT } from \"../hero/HeroDesktop\";\n\ninterface IProps {\n isMobile: boolean;\n cdnPath: string;\n game: GamesEnum;\n playStore: string;\n iOsUrl: string;\n title: string;\n description: string;\n id: string;\n}\n\nconst SectionRacenetAppFooter = forwardRef(\n ({ isMobile, cdnPath, game, playStore, iOsUrl, title, description, id }: IProps, ref: any) => {\n const handleRedirectToPlayStore = () => {\n window.open(playStore, \"_blank\");\n };\n\n const handleRedirectToAppStore = () => {\n window.open(iOsUrl, \"_blank\");\n };\n\n const image = useMemo(() => {\n if (game === GamesEnum.WRC2023) return `${cdnPath}/appscreens_wrc.png`;\n\n return `${cdnPath}/appscreens_f1.png`;\n }, [game]);\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (\n window.scrollY >= ref.current.offsetTop - (isMobile ? 0 : ref.current.clientHeight / 2) &&\n window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight\n ) {\n window.dispatchEvent(new CustomEvent(SET_SELECTED_MENU_EVENT, { detail: id, bubbles: false }));\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n \n \n {title}\n \n \n \n {description}\n \n \n \n \n \n \n \n );\n }\n);\n\nexport default SectionRacenetAppFooter;\n","import { IStyles, styleGuide } from \"theme\";\nimport { ReactComponent as RNLogo } from \"assets/images/logos/racenet/icon_racenetlogofull.svg\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useEffect } from \"react\";\nimport { loadTrustArcScript } from \"utils/loadTrustArcScript\";\nimport { ITheme, useMediaQuery, useTheme } from \"@material-ui/core\";\n\ninterface IProps {\n isMobile: boolean;\n termsUrl: string;\n policyUrl: string;\n}\n\nconst Footer = ({ isMobile, termsUrl, policyUrl }: IProps) => {\n const theme: ITheme = useTheme();\n const sm = useMediaQuery(theme.breakpoints.down(\"sm\"));\n\n useEffect(() => {\n loadTrustArcScript();\n }, []);\n\n const styles: IStyles = {\n text: {\n ...styleGuide.typography.copy,\n ...styleGuide.fontTypes.bold,\n color: styleGuide.color.coral,\n textTransform: \"uppercase\",\n textAlign: \"center\",\n },\n };\n\n return (\n \n \n \n \n TERMS & CONDITIONS\n \n \n PRIVACY POLICY\n \n \n
\n
\n \n \n );\n};\n\nexport default Footer;\n","import Typography from \"@material-ui/core/Typography\";\nimport Spacer from \"common/components/Spacer\";\nimport Img from \"common/components/img/Img\";\nimport { forwardRef, useEffect } from \"react\";\nimport { styleGuide } from \"theme\";\nimport { SCROLL_OFFSET, SET_SELECTED_MENU_EVENT } from \"../hero/HeroDesktop\";\n\ninterface IProps {\n isMobile: boolean;\n cdnPath: string;\n title: string;\n description: string;\n id: string;\n}\n\nconst SectionF12023Leagues = forwardRef(({ isMobile, cdnPath, title, description, id }: IProps, ref: any) => {\n const image = `${cdnPath}/screens_leagues.png`;\n\n useEffect(() => {\n const sendSelectedMenu = () => {\n if (\n window.scrollY + SCROLL_OFFSET >= ref.current.offsetTop &&\n window.scrollY + SCROLL_OFFSET < ref.current.offsetTop + ref.current.clientHeight\n ) {\n window.dispatchEvent(new CustomEvent(SET_SELECTED_MENU_EVENT, { detail: id, bubbles: false }));\n }\n };\n\n window.addEventListener(\"scroll\", sendSelectedMenu);\n\n return () => window.removeEventListener(\"scroll\", sendSelectedMenu);\n }, [ref]);\n\n return (\n \n \n \n
\n \n {title}\n \n \n \n {description}\n \n
\n \n \n );\n});\n\nexport default SectionF12023Leagues;\n","import useIsMobile from \"hooks/useIsMobile\";\nimport PageCircularProgress from \"common/components/loaders/PageCircularProgress\";\nimport { Suspense, createRef, lazy, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport { ILandingPageCdnConfig } from \"apiServices/cdn/responses/ILandigPageCdnConfigResponse\";\nimport { getLandingCdnConfig } from \"apiServices/cdn/CdnApiService\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport GamesEnum from \"common/enums/GamesEnum\";\nimport SectionF1LeagueSimple from \"./components/sections/SectionF1LeagueSimple\";\nimport SectionWrcClubs from \"./components/sections/SectionWrcClubs\";\nimport SectionTimetrialAnalysis from \"./components/sections/SectionTimetrialAnalysis\";\nimport SectionRacenetAppFooter from \"./components/sections/SectionRacenetAppFooter\";\nimport Footer from \"./components/footer/Footer\";\nimport classes from \"./landing.module.scss\";\nimport SectionF12023Leagues from \"./components/sections/SectionF12023Leagues\";\n\nconst HeroDesktop = lazy(() => import(\"./components/hero/HeroDesktop\"));\nconst HeroMobile = lazy(() => import(\"./components/hero/HeroMobile\"));\nconst SectionSupportedGamesDesktop = lazy(() => import(\"./components/sections/SectionSupportedGamesDesktop\"));\nconst SectionSupportedGamesMobile = lazy(() => import(\"./components/sections/SectionSupportedGamesMobile\"));\n\nconst landingPagePath = \"/Landing_Page\";\n\ntype LandingType = \"f12023\" | \"wrc\";\n\ninterface IProps {\n variant?: LandingType;\n}\n\nexport default function LandingPage({ variant }: IProps) {\n const applicationStore = useApplicationContext().state.applicationStore;\n const cdnBaseUrl = applicationStore.cdnUrl;\n const supportedGames = applicationStore.supportedGames;\n const playStoreUrl = applicationStore.playStoreUrl;\n const iOsUrl = applicationStore.iosUrl;\n const isMobile = useIsMobile();\n\n const [loader, setLoader] = useState(false);\n const [cdnConfig, setCdnConfig] = useState();\n\n const elementRefs = {\n hero: createRef(),\n supportedGames: createRef(),\n leagueRacing: createRef(),\n F12023LeagueRacing: createRef(),\n WRCClubs: createRef(),\n timetrial: createRef(),\n racenetAppFooter: createRef(),\n };\n\n const resolveGameParam = useMemo(() => {\n if (variant === \"wrc\") return GamesEnum.WRC2023;\n if (variant === \"f12023\") return GamesEnum.F12023;\n\n return undefined;\n }, [variant]);\n\n const [selectedGame] = useState(resolveGameParam);\n\n useEffect(() => {\n setLoader(true);\n getLandingCdnConfig(cdnBaseUrl)\n .then((r) => {\n setCdnConfig(r);\n })\n .finally(() => {\n setLoader(false);\n });\n }, []);\n\n const cdnPath = `${trimEndSlash(cdnBaseUrl)}${landingPagePath}`;\n const game = selectedGame ?? GamesEnum.F12024;\n\n const handleNavTo = (id: string) => {\n if (id === navItems.gettingStarted.id && elementRefs.hero.current !== null) {\n elementRefs.hero.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.supportedGames.id && elementRefs.supportedGames.current !== null) {\n elementRefs.supportedGames.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.leagueRacing.id && elementRefs.leagueRacing.current !== null) {\n elementRefs.leagueRacing.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.f12023LeagueRacing.id && elementRefs.F12023LeagueRacing.current !== null) {\n elementRefs.F12023LeagueRacing.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.wrcClubs.id && elementRefs.WRCClubs.current !== null) {\n elementRefs.WRCClubs.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.timetrialAnalysis.id && elementRefs.timetrial.current !== null) {\n elementRefs.timetrial.current.scrollIntoView({ behavior: \"smooth\" });\n } else if (id === navItems.racenetAppFooter.id && elementRefs.racenetAppFooter.current !== null) {\n elementRefs.racenetAppFooter.current.scrollIntoView({ behavior: \"smooth\" });\n }\n };\n\n const navItems = {\n gettingStarted: { id: \"started\", label: cdnConfig?.hero?.menu ?? \"\", action: handleNavTo },\n supportedGames: { id: \"supported\", label: cdnConfig?.supportedGameSection?.menu ?? \"\", action: handleNavTo },\n leagueRacing: { id: \"league\", label: cdnConfig?.leagueRacingSection?.menu ?? \"\", action: handleNavTo },\n f12023LeagueRacing: {\n id: \"f12023-league-racing\",\n label: cdnConfig?.f12023LeagueRacingSection?.menu ?? \"\",\n action: handleNavTo,\n },\n wrcClubs: { id: \"wrc-clubs\", label: cdnConfig?.wrc2023ClubSection?.menu ?? \"\", action: handleNavTo },\n timetrialAnalysis: {\n id: \"timetrial-analysis\",\n label: cdnConfig?.timetrialSection?.menu ?? \"\",\n action: handleNavTo,\n },\n racenetAppFooter: {\n id: \"racenet-app\",\n label: cdnConfig?.mobileAppFooterSection?.menu ?? \"\",\n action: handleNavTo,\n },\n };\n\n const nav = useCallback(() => {\n if (selectedGame === GamesEnum.WRC2023)\n return [\n navItems.gettingStarted,\n navItems.supportedGames,\n navItems.timetrialAnalysis,\n navItems.wrcClubs,\n navItems.leagueRacing,\n navItems.racenetAppFooter,\n ];\n\n if (selectedGame === GamesEnum.F12023)\n return [\n navItems.gettingStarted,\n navItems.supportedGames,\n navItems.f12023LeagueRacing,\n navItems.timetrialAnalysis,\n navItems.wrcClubs,\n navItems.racenetAppFooter,\n ];\n\n return [\n navItems.gettingStarted,\n navItems.supportedGames,\n navItems.leagueRacing,\n navItems.wrcClubs,\n navItems.timetrialAnalysis,\n navItems.racenetAppFooter,\n ];\n }, [selectedGame, loader]);\n\n const heroSection = isMobile ? (\n \n ) : (\n \n );\n\n const supportedGamesSection = isMobile ? (\n \n ) : (\n \n );\n\n const leagueRacingSection = (\n \n );\n\n const wrcClubsSection = (\n \n );\n\n const f12023LeagueSection = (\n \n );\n\n const timetrialAnalysisSection = (\n \n );\n\n const racenetAppFooterSection = (\n \n );\n\n const sections = useCallback(() => {\n if (selectedGame === GamesEnum.WRC2023)\n return [\n heroSection,\n supportedGamesSection,\n timetrialAnalysisSection,\n wrcClubsSection,\n leagueRacingSection,\n racenetAppFooterSection,\n ];\n\n if (selectedGame === GamesEnum.F12023)\n return [\n heroSection,\n supportedGamesSection,\n f12023LeagueSection,\n timetrialAnalysisSection,\n wrcClubsSection,\n racenetAppFooterSection,\n ];\n\n return [\n heroSection,\n supportedGamesSection,\n leagueRacingSection,\n wrcClubsSection,\n timetrialAnalysisSection,\n racenetAppFooterSection,\n ];\n }, [selectedGame, loader]);\n\n if (loader) return ;\n\n return (\n
\n }>\n {sections().map((s) => s)}\n \n {/* */}\n \n
\n );\n}\n","enum StorageKeyEnum {\n GameLibrary = 1,\n ProfilePictures = 2,\n CoverPhotos = 3,\n Countries = 4,\n Platforms = 5,\n PrivacyLevels = 6,\n RssFeed = 7,\n NewsFeed = 8,\n SocialFeed = 9,\n Advertisements = 10,\n // DirtRallyTracks = 11, // old tracks\n DirtRallyTracks = 13,\n DirtRallyVehicleClasses = 14,\n D5Tracks = 15,\n OriginalRouteDestination = \"racenet_destination_link\",\n}\n\nexport default StorageKeyEnum;\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { getQueryParams, trimEndSlash } from \"../../../utils/urlHelper\";\nimport { IFetchAccessTokenRequest } from \"../../../apiServices/identity/requests/IFetchAccessTokenRequest\";\nimport { useConfig } from \"../../../contexts/configuration/ConfigurationContext\";\nimport { routingUrls } from \"../../../settings\";\nimport { useIdentityContext } from \"../../../contexts/identity/IdentityContext\";\nimport { dispatchFetchTokens } from \"../../../contexts/identity/actions/JwtActions\";\nimport { useHistory } from \"react-router-dom\";\nimport { dispatchFetchIdentity } from \"../../../contexts/identity/actions/IdentityActions\";\nimport { setTokenAndUnauthorizedInterceptorIntoAxiosDefaults } from \"../../../utils/axiosTools\";\nimport StorageKeyEnum from \"../../../common/enums/StorageKeyEnum\";\nimport useIsMobile from \"hooks/useIsMobile\";\n\nconst OauthCallback = () => {\n const location = useLocation();\n const config = useConfig();\n const { state, dispatch } = useIdentityContext();\n const history = useHistory();\n const destinationPath = localStorage.getItem(StorageKeyEnum.OriginalRouteDestination);\n const isMobile = useIsMobile();\n\n const handleMobilePlatformRedirect = async () => {\n if (window.location.pathname === routingUrls.preferences && isMobile) {\n const search = window.location.search;\n const platform = new URLSearchParams(search).get(\"platform\");\n const isUserAuthorized = state.identity.isAuthenticated;\n if (isUserAuthorized) {\n const destination = `${trimEndSlash(config.authUrls.link)}${platform}`;\n window.location.replace(destination);\n history.push(destination);\n localStorage.setItem(StorageKeyEnum.OriginalRouteDestination, destination);\n }\n }\n };\n\n useEffect(() => {\n const authorizeUserAsync = async () => {\n const search = location.search;\n\n if (!search) window.location.href = routingUrls.landing;\n\n const queryParams = getQueryParams(search);\n if (!queryParams) {\n window.location.href = routingUrls.landing;\n }\n\n const authCode = queryParams[\"code\"];\n if (!authCode) {\n window.location.href = routingUrls.landing;\n }\n\n const request: IFetchAccessTokenRequest = {\n authCode: authCode,\n clientId: config.jwtConfig.clientId,\n grantType: config.jwtConfig.grant_type,\n codeVerifier: \"\",\n redirectUri: config.jwtConfig.redirectUri,\n refreshToken: \"\",\n };\n\n try {\n const tokens = await dispatchFetchTokens(dispatch, request);\n\n setTokenAndUnauthorizedInterceptorIntoAxiosDefaults(tokens.accessToken, dispatch, {\n ...request,\n grantType: config.jwtConfig.refresh_grant_type,\n authCode: \"\",\n });\n\n await dispatchFetchIdentity(dispatch);\n\n const path = destinationPath ? destinationPath : routingUrls.games;\n history.push(path);\n localStorage.removeItem(StorageKeyEnum.OriginalRouteDestination);\n handleMobilePlatformRedirect();\n } catch (e) {\n console.log(`Error during user authorization ${e}`);\n window.location.href = routingUrls.landing;\n }\n };\n\n authorizeUserAsync();\n }, []);\n\n return <>;\n};\n\nexport default OauthCallback;\n","import { routingUrls } from \"settings\";\n\nexport const isAuthorizedRoute = (path: string) => {\n let isRoute = false;\n\n Object.values(routingUrls).every((v) => {\n if (typeof v === \"string\") {\n if (v === path) {\n isRoute = true;\n return false;\n }\n\n return true;\n }\n\n if (typeof v === \"object\") {\n Object.values(v).every((vv) => {\n if (path.indexOf(vv) > -1) {\n isRoute = true;\n return false;\n }\n\n return true;\n });\n\n if (isRoute) return false;\n\n return true;\n }\n });\n\n return isRoute;\n};\n","import { useEffect, useState } from \"react\";\nimport { Switch, Route, Redirect } from \"react-router-dom\";\nimport LandingPage from \"pages/landing/LandingPage\";\nimport { routingUrls } from \"settings\";\nimport { useConfig } from \"contexts/configuration/ConfigurationContext\";\nimport OauthCallback from \"../pages/oauth/pages/OauthCallback\";\nimport { useHistory } from \"react-router-dom\";\nimport { useIdentityContext } from \"../contexts/identity/IdentityContext\";\nimport { isAuthorized } from \"../utils/axiosTools\";\nimport { IFetchAccessTokenRequest } from \"../apiServices/identity/requests/IFetchAccessTokenRequest\";\nimport StorageKeyEnum from \"../common/enums/StorageKeyEnum\";\nimport { isAuthorizedRoute } from \"utils/routeHelper\";\n\nexport default function AnonymousRoutes() {\n const config = useConfig();\n const history = useHistory();\n const identityContext = useIdentityContext();\n\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const authRequest: IFetchAccessTokenRequest = {\n clientId: config.jwtConfig.clientId,\n grantType: config.jwtConfig.refresh_grant_type,\n refreshToken: \"\",\n redirectUri: config.jwtConfig.redirectUri,\n authCode: \"\",\n codeVerifier: \"\",\n };\n\n const checkIsAuthorized = async () => {\n if (\n window.location.pathname !== routingUrls.landing &&\n window.location.pathname !== routingUrls.landingWRC &&\n window.location.pathname !== routingUrls.landingF12023 &&\n window.location.pathname !== routingUrls.oauthCallback &&\n window.location.pathname !== routingUrls.loggedOut &&\n isAuthorizedRoute(window.location.pathname)\n ) {\n localStorage.setItem(\n StorageKeyEnum.OriginalRouteDestination,\n window.location.pathname + window.location.hash\n );\n const isUserAuthorized = await isAuthorized(identityContext.dispatch, authRequest);\n if (isUserAuthorized) {\n const destination =\n localStorage.getItem(StorageKeyEnum.OriginalRouteDestination) ?? routingUrls.profile;\n history.push(destination);\n localStorage.removeItem(StorageKeyEnum.OriginalRouteDestination);\n }\n }\n };\n\n checkIsAuthorized().finally(() => setIsLoading(false));\n }, []);\n\n return (\n <>\n {!isLoading && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n}\n","import { Typography } from \"@material-ui/core\";\nimport Spacer from \"common/components/Spacer\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { isAndroid, isIOS, isMobile } from \"react-device-detect\";\nimport { useEffect } from \"react\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport playStore from \"assets/images/appStore/playStore.png\";\nimport appStore from \"assets/images/appStore/appStore.png\";\nimport Img from \"common/components/img/Img\";\nimport { ReactComponent as RNLogo } from \"assets/images/logos/racenet/icon_racenetlogofull.svg\";\n\nconst AppStoreRedirect = () => {\n const applicationContext = useApplicationContext();\n\n const styles: IStyles = {\n root: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minHeight: \"100vh\",\n height: \"100%\",\n width: \"100%\",\n padding: styleGuide.spacing(3),\n margin: 0,\n },\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n text: {\n color: styleGuide.color.white,\n },\n row: {\n display: \"flex\",\n flexDirection: isMobile ? \"column\" : \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n };\n\n const playStoreUrl = applicationContext.state.applicationStore.playStoreUrl;\n const iOSUrl = applicationContext.state.applicationStore.iosUrl;\n\n useEffect(() => {\n if (isIOS && isMobile) {\n window.location.href = iOSUrl;\n } else if (isAndroid && isMobile) {\n window.location.href = playStoreUrl;\n }\n }, []);\n\n return (\n
\n
\n \n \n \n Our EA Racenet app is now here on iOS and Android.\n \n \n \n \n \"app-store\"\n \n \n \n \"app-store\"\n \n \n
\n
\n );\n};\n\nexport default AppStoreRedirect;\n","import { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport AuthorisedRoutes from \"./AuthorisedRoutes\";\nimport AnonymousRoutes from \"./AnonymousRoutes\";\nimport { WebAcceptanceContextProvider } from \"contexts/webAcceptance/WebAcceptanceContext\";\nimport { useLocation } from \"react-router-dom\";\nimport { routingUrls } from \"settings\";\nimport AppStoreRedirect from \"pages/appStoreRedirect/AppStoreRedirect\";\n\nexport default function Routing() {\n const location = useLocation().pathname;\n const identityContext = useIdentityContext();\n\n return location === routingUrls.appStoreRedirect ? (\n \n ) : identityContext.state.identity.isAuthenticated ? (\n \n \n \n ) : (\n \n );\n}\n","import { useState, useEffect } from \"react\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport IconButton from \"@material-ui/core/IconButton/IconButton\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport { styleGuide } from \"theme\";\n\nconst OfflineBanner = () => {\n const [banner, setBanner] = useState(false);\n const [onlineStatus, setOnlineStatus] = useState(true);\n const theme = useTheme();\n const handleClose = () => {\n setBanner(true);\n };\n const closeButton = (\n \n \n \n );\n\n useEffect(() => {\n window.addEventListener(\"online\", () => setOnlineStatus(true));\n window.addEventListener(\"offline\", () => setOnlineStatus(false));\n\n return function cleanup() {\n window.removeEventListener(\"online\", () => {});\n window.removeEventListener(\"offline\", () => {});\n };\n }, []);\n\n return (\n <>\n \n {!onlineStatus && banner && (\n \n Offline\n \n )}\n \n );\n};\nexport default OfflineBanner;\n","import { useEffect } from \"react\";\nimport Routing from \"routing/Routing\";\nimport { IdentityContextProvider } from \"contexts/identity/IdentityContext\";\nimport { ApplicationContextProvider } from \"contexts/application/ApplicationContext\";\nimport ErrorPage from \"pages/errorPages/ErrorPage\";\nimport OfflineBanner from \"common/components/OfflineBanner\";\nimport { useCookieContext } from \"common/components/cookieConsent/CookieContext\";\nimport { getCookiePreferences } from \"common/components/cookieConsent/CookiePreferenceStorageService\";\nimport { PreferencesValues } from \"common/components/cookieConsent/ICookiePreferences\";\nimport { ScrollContextProvider } from \"contexts/scroll/ScrollContext\";\nimport AppSnackbar from \"common/components/AppSnackbar\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst App = () => {\n const cookieContext = useCookieContext();\n\n const validIosVersion = () => {\n let userOS;\n let userOSver;\n let ua = navigator.userAgent;\n let uaindex;\n if (ua.match(/iPad/i) || ua.match(/iPhone/i)) {\n userOS = \"iOS\";\n uaindex = ua.indexOf(\"OS \");\n }\n //@ts-ignore\n if (userOS === \"iOS\" && uaindex > -1) {\n //@ts-ignore\n userOSver = ua.substr(uaindex + 3, 2).replace(\"_\", \".\");\n }\n //@ts-ignore\n if (userOS === \"iOS\" && Number(userOSver) <= 10) {\n return false;\n }\n\n return true;\n };\n\n useEffect(() => {\n const prefsChange = () => {\n const localStoragePreferences = getCookiePreferences();\n\n if (localStoragePreferences) {\n cookieContext.savePreferences(localStoragePreferences);\n\n if (!localStoragePreferences.value.includes(PreferencesValues.Functional.toString())) {\n window.location.reload();\n }\n }\n };\n\n document.body.addEventListener(\"truste-consent\", () => prefsChange());\n\n return () => {\n document.body.removeEventListener(\"truste-consent\", () => {});\n };\n }, []);\n\n return (\n <>\n {validIosVersion() ? (\n <>\n \n {!isRaceNetMobileApp && !isRaceNetTabletApp && }\n \n \n \n \n \n \n \n \n ) : (\n \n )}\n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // console.log(\"Check if the service worker can be found. If it can't reload the page.\");\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // console.log('Ensure service worker exists, and that we really are getting a JS file.');\n const contentType = response.headers.get(\"content-type\");\n if (response.status === 404 || (contentType != null && contentType.indexOf(\"javascript\") === -1)) {\n // console.log('No service worker found. Probably a different app. Reload the page');\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // console.log(\"Service worker found. Proceed as normal.\");\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","interface IProps {\n open: boolean;\n}\n\nconst CookieBanner = ({ open }: IProps) => {\n return open ? (\n \n ) : (\n <>\n );\n};\n\nexport default CookieBanner;\n","import { useCookieContext } from \"./CookieContext\";\nimport CookieBanner from \"./banner/CookieBanner\";\nimport { useEffect } from \"react\";\n\nexport default function CookieConsent() {\n const cookieContext = useCookieContext();\n\n useEffect(() => {\n document.body.addEventListener(\"truste-consent\", () => cookieContext.onCloseOverlay());\n\n return () => {\n document.body.removeEventListener(\"truste-consent\", () => {});\n };\n }, [cookieContext.cookieBannerIsOpen]);\n\n return ;\n}\n","interface ICalculateBorderRadiusProps {\n padding: number;\n outerBorderThickness?: number;\n innerBorderThickness?: number;\n}\n\ninterface ICalculateOuterBorderRadiusProps extends ICalculateBorderRadiusProps {\n innerBorderRadius: number;\n}\n\nexport interface ICalculateInnerBorderRadiusProps extends ICalculateBorderRadiusProps {\n outerBorderRadius: number;\n}\n\nexport function calculateInnerBorderRadius(props: ICalculateInnerBorderRadiusProps) {\n const { padding, outerBorderRadius, outerBorderThickness = 0, innerBorderThickness = 0 } = props;\n\n return outerBorderRadius - padding - (outerBorderThickness - innerBorderThickness) / 2;\n}\n","import React, { ReactNode } from \"react\";\nimport { Breakpoint } from \"@material-ui/core/styles/createBreakpoints\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport { calculateInnerBorderRadius, ICalculateInnerBorderRadiusProps } from \"./calculateBorderRadius\";\nimport TrainTrackContext, { ITrainTrack } from \"./TrainTrackContext\";\n\ntype BreakpointObject = {\n [key in Breakpoint]: T;\n};\n\ninterface IProps {\n children: ReactNode;\n}\n\nexport default React.memo(function TrainTrackProvider(props: IProps) {\n const { children } = props;\n const theme = useTheme();\n\n const xs = useMediaQuery(theme.breakpoints.only(\"xs\"));\n const sm = useMediaQuery(theme.breakpoints.only(\"sm\"));\n const md = useMediaQuery(theme.breakpoints.only(\"md\"));\n const lg = useMediaQuery(theme.breakpoints.only(\"lg\"));\n const xl = useMediaQuery(theme.breakpoints.only(\"xl\"));\n\n const layer0: BreakpointObject = {\n xs: {\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(1),\n },\n sm: {\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(2),\n },\n md: {\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(3),\n },\n lg: {\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(4),\n },\n xl: {\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(5),\n },\n };\n\n const layer1Padding = {\n xs: theme.spacing(1),\n sm: theme.spacing(2),\n md: theme.spacing(2),\n lg: theme.spacing(2),\n xl: theme.spacing(2),\n };\n const layer1MinBorderRadius = {\n xs: theme.spacing(0.5),\n sm: theme.spacing(0.5),\n md: theme.spacing(0.5),\n lg: theme.spacing(0.5),\n xl: theme.spacing(0.5),\n };\n const layer1 = getNextLayer(layer0, layer1Padding, layer1MinBorderRadius);\n\n const layer2Padding = {\n xs: theme.spacing(1),\n sm: theme.spacing(1),\n md: theme.spacing(1),\n lg: theme.spacing(1),\n xl: theme.spacing(1),\n };\n const layer2MinBorderRadius = {\n xs: theme.spacing(1),\n sm: theme.spacing(1),\n md: theme.spacing(1),\n lg: theme.spacing(1),\n xl: theme.spacing(1),\n };\n const layer2 = getNextLayer(layer1, layer2Padding, layer2MinBorderRadius);\n\n if (xs) {\n return (\n \n {children}\n \n );\n }\n if (sm) {\n return (\n \n {children}\n \n );\n }\n if (md) {\n return (\n \n {children}\n \n );\n }\n if (lg) {\n return (\n \n {children}\n \n );\n }\n if (xl) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n});\n\nfunction getNextLayer(\n previousLayer: BreakpointObject,\n padding: BreakpointObject,\n minBorderRadius: BreakpointObject\n): BreakpointObject {\n return {\n xs: {\n borderRadius: getNextLayerBorderRadius(\n {\n outerBorderRadius: previousLayer.xs.borderRadius,\n padding: previousLayer.xs.padding,\n },\n minBorderRadius.xs\n ),\n padding: padding.xs,\n },\n sm: {\n borderRadius: getNextLayerBorderRadius(\n {\n outerBorderRadius: previousLayer.sm.borderRadius,\n padding: previousLayer.sm.padding,\n },\n minBorderRadius.sm\n ),\n padding: padding.sm,\n },\n md: {\n borderRadius: getNextLayerBorderRadius(\n {\n outerBorderRadius: previousLayer.md.borderRadius,\n padding: previousLayer.md.padding,\n },\n minBorderRadius.md\n ),\n padding: padding.md,\n },\n lg: {\n borderRadius: getNextLayerBorderRadius(\n {\n outerBorderRadius: previousLayer.lg.borderRadius,\n padding: previousLayer.lg.padding,\n },\n minBorderRadius.lg\n ),\n padding: padding.lg,\n },\n xl: {\n borderRadius: getNextLayerBorderRadius(\n {\n outerBorderRadius: previousLayer.xl.borderRadius,\n padding: previousLayer.xl.padding,\n },\n minBorderRadius.xl\n ),\n padding: padding.xl,\n },\n };\n}\n\nfunction getNextLayerBorderRadius(props: ICalculateInnerBorderRadiusProps, minBorderRadius = 4) {\n const calculatedBorderRadius = calculateInnerBorderRadius(props);\n\n return calculatedBorderRadius < minBorderRadius ? minBorderRadius : calculatedBorderRadius;\n}\n","import \"./common/polyfills/DragDropTouch\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport { analyticsIds, settings } from \"settings\";\nimport GlobalCss from \"./GlobalCss\";\nimport CookieConsent from \"common/components/cookieConsent/CookieConsent\";\nimport TrainTrackProvider from \"hooks/useTrainTracks/TrainTrackProvider\";\nimport { CustomThemeProvider } from \"contexts/theme/ThemeContext\";\nimport { FirebaseApp, initializeApp } from \"firebase/app\";\nimport { getAnalytics, Analytics, setUserId } from \"firebase/analytics\";\nimport { ConfigurationContextProvider } from \"contexts/configuration/ConfigurationContext\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport { CookieContextProvider } from \"common/components/cookieConsent/CookieContext\";\nimport { PreferencesValues } from \"common/components/cookieConsent/ICookiePreferences\";\n\nconst firebaseConfig = {\n apiKey: \"AIzaSyCmnihukNeRSP3t4M-SNhJvDzWmu0Wjkls\",\n authDomain: \"racenet-app.firebaseapp.com\",\n projectId: \"racenet-app\",\n storageBucket: \"racenet-app.appspot.com\",\n messagingSenderId: \"295842656078\",\n appId: \"1:295842656078:web:8d911d110f2d7c71a1b81f\",\n measurementId: \"G-VEGXVNQ9M9\",\n};\n\nexport let analytics: Analytics;\n\nexport let firebaseApp: FirebaseApp;\n\nexport const initialiseFirebase = () => {\n if (!firebaseApp) {\n firebaseApp = initializeApp(firebaseConfig);\n }\n\n analytics = getAnalytics(firebaseApp);\n\n //@ts-ignore\n const ssid = document.getElementById(analyticsIds.identitySsid)?.value;\n if (analytics !== undefined && ssid !== undefined) {\n setUserId(analytics, ssid);\n }\n\n //@ts-ignore\n window.dataLayer = window.dataLayer || [];\n};\n\nconst app = (\n \n \n \n \n {\n if (preferences?.value.includes(PreferencesValues.Functional.toString())) {\n initialiseFirebase();\n }\n }}\n >\n {!isRaceNetMobileApp && !isRaceNetTabletApp && }\n \n \n \n \n \n \n \n \n);\n\nReactDOM.render(app, document.getElementById(\"root\"));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export enum NotificationType {\n None = 0,\n FriendRequested = 2,\n FriendRequestAccepted = 3,\n ClubLiked = 4,\n ClubOwnershipTransferred = 5,\n ClubRoleChangedToAdmin = 6,\n ClubMemberUnbanned = 7,\n ClubMemberBanned = 8,\n ClubAccessLevelChanged = 9,\n ClubNameChanged = 10,\n ClubMemberJoined = 11,\n ClubPlatformChanged = 12,\n ClubEventStartingSoon = 13,\n ClubChampionshipCreated = 14,\n ClubChampionshipFinished = 15,\n ClubChampionshipCancelled = 16,\n ProLeagueLeagueLiked = 17,\n ProLeagueCreated = 18,\n ProLeagueSeasonCreated = 19,\n ProLeagueMemberJoined = 20,\n ProLeagueMemberPromotedToAdmin = 21,\n ProLeagueEventStartingSoon = 22,\n ProLeagueNameChanged = 23,\n ProLeagueMemberBanned = 24,\n ProLeagueBanLifted = 25,\n ProLeagueMemberEnroled = 26,\n ProLeaguePlatformChanged = 27,\n ProLeaguePrivacyLevelChanged = 28,\n ProLeagueTieringComplete = 29,\n ProLeagueWarningApplied = 30,\n ProLeagueResultsReceived = 31,\n ProLeaguePenaltyApplied = 32,\n ProLeagueRemovedFromSeason = 33,\n ProLeagueMemberUpdatedAvailability = 34,\n ProLeagueReserveSubbed = 35,\n ProLeagueDriverReplaced = 36,\n ProLeagueEventLobbyOpened = 37,\n ProLeagueTieringFailed = 38,\n}\n","import { HTMLAttributes, ReactNode } from \"react\";\nimport { makeStyles, createStyles, useTheme } from \"@material-ui/core/styles\";\nimport MoreActionsMenu, { IMoreActionsMenuAction } from \"common/components/MoreActionsMenu\";\nimport Typography from \"@material-ui/core/Typography\";\nimport useCardBorderRadiusClass from \"hooks/useCardBorderRadiusClass\";\nimport useResponsivePaddingClass from \"hooks/useResponsivePaddingClass\";\nimport clsx from \"clsx\";\nimport Spacer from \"common/components/Spacer\";\nimport ProfileAvatar, { IProfileAvatarProps } from \"common/components/ProfileAvatar\";\nimport HideableCard from \"common/components/HideableCard\";\nimport INotification from \"../../interfaces/INotification\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport { dispatchRemoveNotification } from \"contexts/notification/actions/NotificationActions\";\nimport { ITheme } from \"@material-ui/core\";\nimport { postAnalyticsEvent } from \"utils/analyticsHelper\";\nimport { NotificationType } from \"common/enums/NotificationTypeEnum\";\nimport { styleGuide } from \"theme\";\nimport { getTimeDifferenceInUTC } from \"utils/dateTools\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n root: {\n position: \"relative\",\n zIndex: 0,\n display: \"flex\",\n alignItems: \"center\",\n border: `solid 1px ${theme.palette.info.light}`,\n width: \"100%\",\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n backgroundColor: theme.variants.EALightBlue,\n },\n text: {\n flex: 1,\n display: \"-webkit-box\",\n margin: \"0 auto\",\n WebkitLineClamp: 3,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n actionButtonRoot: {\n backgroundColor: styleGuide.color.white,\n },\n })\n);\n\ninterface IProps extends HTMLAttributes {\n profileAvatarProps?: IProfileAvatarProps;\n notification: INotification;\n title?: string;\n text: ReactNode;\n actions?: IMoreActionsMenuAction[];\n onClick?: () => void;\n}\n\nexport default function NotificationCard(props: IProps) {\n const { profileAvatarProps, notification, text, actions = [] } = props;\n const classes = useStyles();\n const theme = useTheme();\n const notificationContext = useNotificationContext();\n\n const borderRadiusClassName = useCardBorderRadiusClass({ layer: \"1\" });\n const paddingClassName = useResponsivePaddingClass({ layer: \"2\" });\n\n const commonActions: IMoreActionsMenuAction[] = [\n {\n label: \"Remove notification\",\n onClick: () => {\n notification.notificationType === NotificationType.FriendRequested &&\n postAnalyticsEvent(\"notification.friend_request.remove\");\n dispatchRemoveNotification(\n notificationContext.dispatch,\n notificationContext.state.oldNotificationStore.notifications,\n notificationContext.state.newNotificationStore.notifications,\n notification.notificationID,\n notification.read\n );\n },\n },\n ];\n\n return (\n \n );\n}\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport RouterLink from \"common/components/links/RouterLink\";\nimport { routingUrls } from \"settings\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n fontWeight: \"bold\",\n },\n })\n);\n\ninterface IProps {\n displayName: string;\n ssid: string;\n onClick?: () => void;\n}\n\nexport default function DisplayNameLink(props: IProps) {\n const { displayName, ssid } = props;\n const classes = useStyles();\n\n const friendProfileLink = `${routingUrls.profile}/${ssid}`;\n\n return (\n \n {displayName}\n \n );\n}\n","import { useEffect, useState } from \"react\";\nimport INotification from \"../../interfaces/INotification\";\nimport NotificationCard from \"./NotificationCard\";\nimport DisplayNameLink from \"./components/DisplayNameLink\";\nimport { routingUrls } from \"settings\";\nimport * as friendsApiService from \"apiServices/friends/FriendsApiService\";\nimport {\n dispatchAddActedFriendRequestsSsid,\n dispatchAddReceivedFriendRequestsSsid,\n dispatchHandleTray,\n dispatchSetSkip,\n} from \"contexts/notification/actions/NotificationActions\";\nimport { postAnalyticsEvent } from \"utils/analyticsHelper\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\n\ntype Status = \"pending\" | \"accepted\" | \"rejected\";\n\nconst FriendRequestCard = (notification: INotification) => {\n const { state, dispatch } = useNotificationContext();\n\n useEffect(() => {\n dispatchAddReceivedFriendRequestsSsid(\n dispatch,\n notification.senderSSID!,\n state.notificationStore.actedFriendRequestSsids\n );\n }, []);\n\n const [status, setStatus] = useState(\"pending\");\n\n useEffect(() => {\n if (status === \"accepted\" || status === \"rejected\") {\n dispatchSetSkip(\n dispatch,\n notification.notificationID,\n notification.read,\n // Old must come before new!\n state.oldNotificationStore.notifications,\n state.newNotificationStore.notifications\n );\n }\n }, [status]);\n\n return (\n \n You accepted{\" \"}\n dispatchHandleTray(dispatch)}\n />\n 's friend request\n \n ) : status === \"rejected\" || notification.skip ? (\n <>\n You declined{\" \"}\n dispatchHandleTray(dispatch)}\n />\n 's friend request\n \n ) : (\n <>\n dispatchHandleTray(dispatch)}\n />{\" \"}\n has sent you a friend request\n \n )\n }\n actions={\n status === \"pending\" && !notification.skip\n ? [\n {\n label: \"Accept\",\n onClick: () => {\n setStatus(\"accepted\");\n postAnalyticsEvent(\"notification.friend_request.accept\");\n friendsApiService\n .acceptFriendRequest(notification.senderSSID!)\n .then(() =>\n dispatchAddActedFriendRequestsSsid(\n dispatch,\n notification.senderSSID!,\n state.notificationStore.actedFriendRequestSsids\n )\n );\n },\n },\n {\n label: \"Reject\",\n onClick: () => {\n setStatus(\"rejected\");\n postAnalyticsEvent(\"notification.friend_request.reject\");\n friendsApiService\n .declineFriendRequest(notification.senderSSID!)\n .then(() =>\n dispatchAddActedFriendRequestsSsid(\n dispatch,\n notification.senderSSID!,\n state.notificationStore.actedFriendRequestSsids\n )\n );\n },\n },\n ]\n : []\n }\n />\n );\n};\n\nexport default FriendRequestCard;\n","import { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport INotification from \"../../interfaces/INotification\";\nimport NotificationCard from \"./NotificationCard\";\nimport DisplayNameLink from \"./components/DisplayNameLink\";\nimport { routingUrls } from \"settings\";\nimport { dispatchHandleTray } from \"contexts/notification/actions/NotificationActions\";\n\nconst FriendRequestAcceptedCard = (notification: INotification) => {\n const { dispatch } = useNotificationContext();\n return (\n \n dispatchHandleTray(dispatch)}\n />{\" \"}\n has accepted your friend request\n \n }\n />\n );\n};\n\nexport default FriendRequestAcceptedCard;\n","import NotificationCard from \"./NotificationCard\";\nimport INotification from \"../../interfaces/INotification\";\nimport { useHistory } from \"react-router-dom\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport { dispatchHandleTray } from \"contexts/notification/actions/NotificationActions\";\n\nexport default function LeagueNotificationCard(notification: INotification) {\n const history = useHistory();\n const { dispatch } = useNotificationContext();\n\n return (\n {\n history.push(`/f1_23/leagues/league/leagueID=${notification.entityID}`);\n dispatchHandleTray(dispatch);\n }}\n />\n );\n}\n","import INotification from \"../interfaces/INotification\";\nimport FriendRequestCard from \"./cards/FriendRequestCard\";\nimport FriendRequestAcceptedCard from \"./cards/FriendRequestAcceptedCard\";\nimport { NotificationType } from \"common/enums/NotificationTypeEnum\";\nimport NotificationCard from \"./cards/NotificationCard\";\nimport LeagueNotificationCard from \"./cards/LeagueNotificationCard\";\n\nexport default function NotificationsCardResolver(notification: INotification) {\n switch (notification.notificationType) {\n case NotificationType.FriendRequested:\n return ;\n case NotificationType.FriendRequestAccepted:\n return ;\n case NotificationType.ProLeagueLeagueLiked:\n case NotificationType.ProLeagueCreated:\n case NotificationType.ProLeagueSeasonCreated:\n case NotificationType.ProLeagueMemberJoined:\n case NotificationType.ProLeagueMemberPromotedToAdmin:\n case NotificationType.ProLeagueEventStartingSoon:\n case NotificationType.ProLeagueNameChanged:\n case NotificationType.ProLeagueMemberBanned:\n case NotificationType.ProLeagueBanLifted:\n case NotificationType.ProLeagueMemberEnroled:\n case NotificationType.ProLeaguePlatformChanged:\n case NotificationType.ProLeaguePrivacyLevelChanged:\n case NotificationType.ProLeagueTieringComplete:\n case NotificationType.ProLeagueWarningApplied:\n case NotificationType.ProLeagueResultsReceived:\n case NotificationType.ProLeaguePenaltyApplied:\n case NotificationType.ProLeagueRemovedFromSeason:\n case NotificationType.ProLeagueMemberUpdatedAvailability:\n case NotificationType.ProLeagueReserveSubbed:\n case NotificationType.ProLeagueEventLobbyOpened:\n case NotificationType.ProLeagueTieringFailed:\n return ;\n case NotificationType.ClubLiked:\n case NotificationType.ClubOwnershipTransferred:\n case NotificationType.ClubRoleChangedToAdmin:\n case NotificationType.ClubMemberUnbanned:\n case NotificationType.ClubMemberBanned:\n case NotificationType.ClubAccessLevelChanged:\n case NotificationType.ClubNameChanged:\n case NotificationType.ClubMemberJoined:\n case NotificationType.ClubPlatformChanged:\n case NotificationType.ClubEventStartingSoon:\n case NotificationType.ClubChampionshipCreated:\n case NotificationType.ClubChampionshipFinished:\n case NotificationType.ClubChampionshipCancelled:\n return ;\n default:\n return ;\n }\n}\n","import { useEffect, ReactNode } from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport NotificationsCardResolver from \"common/components/notifications/cardResolver/NotificationsCardResolver\";\nimport INotification from \"./interfaces/INotification\";\nimport LoadableButton from \"../buttons/LoadableButton\";\nimport ResponsiveSpacer from \"../ResponsiveSpacer\";\nimport NotificationsActions from \"./NotificationsActions\";\nimport {\n dispatchFetchNewNotifications,\n dispatchSetNewNotificationsCount,\n} from \"contexts/notification/actions/NewNotificationActions\";\nimport { dispatchFetchOldNotifications } from \"contexts/notification/actions/OldNotificationActions\";\nimport { ITheme, useTheme } from \"@material-ui/core\";\n\ninterface IProps {\n disableActions?: boolean;\n}\n\nexport default function NotificationsContent({ disableActions = false }: IProps) {\n const { state, dispatch } = useNotificationContext();\n const theme: ITheme = useTheme();\n\n useEffect(() => {\n dispatchFetchNewNotifications(\n dispatch,\n state.newNotificationStore.notifications,\n state.newNotificationStore.nextPageCursor\n ).then(() => {\n dispatchSetNewNotificationsCount(dispatch, state.newNotificationStore.count);\n });\n }, []);\n\n return (\n <>\n {state.newNotificationStore.notifications.length === 0 &&\n state.oldNotificationStore.notifications.length === 0 && (\n \n You don't have any notifications.\n \n )}\n\n {state.newNotificationStore.notifications.length > 0 && (\n \n dispatchFetchNewNotifications(\n dispatch,\n state.newNotificationStore.notifications,\n state.newNotificationStore.nextPageCursor\n )\n }\n loading={state.newNotificationStore.loading}\n titleSuffix={disableActions ? undefined : }\n />\n )}\n\n {state.newNotificationStore.notifications.length > 0 &&\n state.oldNotificationStore.notifications.length > 0 && }\n\n {state.oldNotificationStore.notifications.length > 0 && (\n \n dispatchFetchOldNotifications(\n dispatch,\n state.oldNotificationStore.notifications,\n state.oldNotificationStore.nextPageCursor\n )\n }\n loading={state.oldNotificationStore.loading}\n titleSuffix={\n disableActions || state.newNotificationStore.notifications.length > 0 ? undefined : (\n \n )\n }\n />\n )}\n \n );\n}\n\ninterface INotificationsSectionProps {\n title: string;\n notifications: INotification[];\n isLastPage: boolean;\n loadMore: () => void;\n loading: boolean;\n titleSuffix?: ReactNode;\n}\n\nconst NotificationsSection = (props: INotificationsSectionProps) => {\n const { title, notifications, isLastPage, loadMore, loading, titleSuffix } = props;\n const theme: ITheme = useTheme();\n\n return (\n <>\n
\n \n {title}\n \n {titleSuffix}\n
\n {notifications.map((notification) => (\n \n ))}\n {!isLastPage && (\n
\n \n Load more\n \n
\n )}\n \n );\n};\n","import { ReactNode, useEffect, useRef } from \"react\";\nimport { createStyles, ITheme, makeStyles, Typography } from \"@material-ui/core\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { useClickOutside } from \"hooks/useClickOutside\";\nimport Portal from \"../uiComponents/dialogs/Portal\";\nimport { Transition, TransitionStatus } from \"react-transition-group\";\nimport Spacer from \"../Spacer\";\nimport CloseIcon from \"assets/icons/CloseIcon\";\nimport StyledButton, { StyledButtonVariant } from \"../buttons/StyledButton\";\nimport { ScrollItems, useScrollContext } from \"contexts/scroll/ScrollContext\";\nimport { styleGuide } from \"theme\";\n\nexport const rootZIndex: number = 3001;\n\nexport type DialogBorderVariant = \"single\" | \"double\";\n\nconst useStyles = (\n isMobile: boolean,\n backgroundColorAction: string,\n saving: boolean,\n maxWidth?: number,\n borderVariant?: DialogBorderVariant\n) =>\n makeStyles((theme: ITheme) =>\n createStyles({\n root: {\n backgroundColor: theme.styles.popoverBackground,\n position: \"fixed\",\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: rootZIndex + 2,\n },\n dialog: {\n position: \"relative\",\n maxWidth: isMobile && !maxWidth ? 500 : maxWidth ? maxWidth : 600,\n width: \"100%\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n maxHeight: \"calc(100vh - 150px)\",\n gridArea: \"1/1\",\n placeSelf: \"center center\",\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.text.secondary,\n boxShadow:\n borderVariant === \"double\"\n ? `0px 0px 0 2px ${theme.palette.info.main}, -8px 8px 0 0px ${theme.palette.info.main}`\n : \"none\",\n border: borderVariant === \"double\" ? \"none\" : `2px solid ${theme.palette.info.main}`,\n borderRadius: theme.styles.borderRadiusXs,\n padding: isMobile ? theme.spacing(2) : theme.spacing(4),\n margin: isMobile ? theme.spacing(2) : theme.spacing(3),\n display: \"flex\",\n flexDirection: \"column\",\n },\n children: {},\n dialogButton: {\n opacity: saving ? 0.4 : 1,\n position: \"absolute\",\n padding: theme.spacing(1),\n right: \"-2px\",\n top: \"-2px\",\n fontWeight: \"bold\",\n color: theme.variants.lightWhite,\n backgroundColor: theme.palette.info.main,\n border: \"none\",\n borderRadius: theme.styles.borderRadiusXxs,\n cursor: \"pointer\",\n display: \"flex\",\n transition: theme.styles.hoverEaseInOut + theme.styles.cssImportant,\n \"&:hover\": {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.info.main,\n },\n },\n actionContainer: {\n backgroundColor: backgroundColorAction ? backgroundColorAction : theme.palette.primary.main,\n color: theme.palette.info.main,\n borderRadius: theme.styles.borderRadiusSm,\n padding: backgroundColorAction ? 0 : isMobile ? theme.spacing(1.5) : theme.spacing(3),\n flex: 2,\n overflowY: \"auto\",\n },\n actionChildren: {\n marginTop: isMobile ? theme.spacing(2) : theme.spacing(3),\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n [theme.breakpoints.down(400)]: {\n flexDirection: \"column\",\n },\n },\n header: {\n color: theme.palette.info.main,\n marginBottom: isMobile ? theme.spacing(2) : theme.spacing(3),\n },\n label: {\n color: styleGuide.color.white,\n },\n })\n );\n\ninterface IProps {\n children: ReactNode;\n childrenAction?: ReactNode;\n backgroundColorAction?: string;\n infoBoxChildren?: ReactNode;\n isOpen: boolean;\n handleClose?: () => void;\n setOpen?: (open: boolean) => void;\n loader?: boolean;\n buttonVariant?: StyledButtonVariant | undefined;\n buttonText?: string;\n saving?: boolean;\n header?: string;\n maxWidth?: number;\n width?: string;\n borderVariant?: DialogBorderVariant;\n disabled?: boolean;\n}\n\nconst Dialog = ({\n children,\n childrenAction,\n infoBoxChildren,\n isOpen,\n handleClose,\n setOpen,\n buttonVariant = \"infoPrimary\",\n buttonText,\n backgroundColorAction = \"\",\n loader = false,\n saving = false,\n header,\n maxWidth,\n width,\n borderVariant = \"double\",\n}: IProps) => {\n const node = useRef(null!);\n const { disableScroll, handleDisableScroll, handleEnableScroll, scrollItems } = useScrollContext();\n const isMobile = useIsMobile();\n const classes = useStyles(isMobile, backgroundColorAction, saving, maxWidth, borderVariant)();\n\n useClickOutside(node, () => {\n if (saving) return;\n\n if (handleClose) {\n handleClose();\n } else if (setOpen) {\n setOpen(false);\n }\n });\n\n const handleOnClose = () => {\n if (saving) return;\n\n if (handleClose) {\n handleClose();\n } else if (setOpen) {\n setOpen(false);\n }\n };\n\n useEffect(() => {\n if (scrollItems.includes(ScrollItems.Popover)) return;\n\n if (isOpen) {\n handleDisableScroll(ScrollItems.Dialog);\n }\n\n if (isOpen === false) {\n handleEnableScroll(ScrollItems.Dialog);\n }\n }, [isOpen]);\n\n const defaultStyle = {\n transition: `opacity 0.2ms ease-in-out`,\n opacity: 0,\n backdropFilter: \"blur(0px)\",\n };\n\n const transitionStyles = {\n entering: {},\n entered: scrollItems.includes(ScrollItems.Popover)\n ? { opacity: 1, transition: \"opacity 0.2s ease-in\" }\n : { opacity: 1, transition: \"opacity 0.2s ease-in\", backdropFilter: \"blur(8px)\" },\n exiting: { opacity: 0, backdropFilter: \"unset\", transition: \"opacity 0.2s ease-out\" },\n exited: {},\n unmounted: {},\n };\n\n return (\n \n \n {(state: TransitionStatus) => (\n <>\n {childrenAction ? (\n \n
\n \n \n {header}\n \n \n {children}\n {childrenAction}\n
\n \n ) : (\n \n
\n \n {infoBoxChildren && (\n <>\n {infoBoxChildren}\n \n \n )}\n {children}\n \n {buttonText && (\n \n {buttonText}\n \n )}\n
\n \n )}\n \n )}\n
\n
\n );\n};\n\nexport default Dialog;\n","import axios, { CancelToken, AxiosResponse } from \"axios\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\nimport { IFriendResponse } from \"pages/friends/IFriend\";\nimport { apiUrls } from \"settings\";\nimport QueryParameter, { constructQueryParameterString } from \"../QueryParameter\";\nimport { validateSsid } from \"../ApiServiceBase\";\nimport { IFriendsRecommendationsResponse } from \"./Responses/IFriendsRecommendationResponse\";\nimport {\n defaultConsolidatedFriendsResponse,\n IFriendsConsolidatedResponse,\n} from \"./Responses/IFriendsByPlatformResponse\";\nimport { IBulkRequestResponse } from \"./Responses/IFriendsBulkRequestResponse\";\nimport Platforms from \"common/enums/PlatformsEnum\";\nimport { IFriendsResponse } from \"apiServices/common/response/IFriendsResponse\";\n\nexport async function sendFriendRequest(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.post(apiUrls.friends.postFriendRequest(ssid));\n}\n\nexport async function revokeFriendRequest(ssid: string): Promise {\n validateSsid(ssid);\n\n // TODO: Revoke sent request just blocks the user. There should be a proper revoke request endpoint\n return await axios.put(apiUrls.friends.putDeclineFriend(ssid));\n}\n\nexport async function acceptFriendRequest(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.put(apiUrls.friends.putAcceptFriend(ssid));\n}\n\nexport async function declineFriendRequest(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.put(apiUrls.friends.putDeclineFriend(ssid));\n}\n\nexport async function cancelFriendRequest(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.delete(apiUrls.friends.deleteCancelInviteFriend(ssid));\n}\n\nexport async function blockFriend(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.put(apiUrls.friends.putBlockFriend(ssid));\n}\n\nexport async function blockFriendWithErr(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.put(apiUrls.friends.putBlockFriend(ssid)).catch((error) => {\n return error;\n });\n}\n\nexport async function unblockFriend(ssid: string): Promise {\n validateSsid(ssid);\n\n // TODO: Unblock currently makes the users not friends. Should keep them as friends\n return await axios.put(apiUrls.friends.putUnblockFriend(ssid));\n}\n\nexport async function removeFriend(ssid: string): Promise {\n validateSsid(ssid);\n\n return await axios.delete(apiUrls.friends.deleteFriend(ssid));\n}\n\nexport async function bulkRequestFriends(data: string[]): Promise {\n const response = await axios.post(apiUrls.friends.bulkRequest, data, {\n headers: {\n \"content-type\": \"application/json\",\n },\n validateStatus: () => true,\n });\n\n return response.data;\n}\n\nexport async function getFriendsRecommendations(pageSize: number): Promise {\n const queryParams: QueryParameter[] = [new QueryParameter(\"pageSize\", pageSize)];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.friendsRecommendations}${queryParamString}`);\n\n return response.data;\n}\n\nexport async function getFriendsByPlatform(platform: Platforms): Promise {\n const queryParams: QueryParameter[] = [new QueryParameter(\"platform\", platform)];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.friendsByPlatform}${queryParamString}`, {\n validateStatus: () => true,\n });\n\n if (response.status === ResponseStatusEnum.BadRequest) {\n return {\n ...defaultConsolidatedFriendsResponse,\n operationStatus: response.status,\n error: response.data,\n };\n } else if (response.status === ResponseStatusEnum.NoContent) {\n return {\n ...defaultConsolidatedFriendsResponse,\n operationStatus: response.status,\n error: {\n requestedPlatform: \"\",\n message: \"\",\n },\n };\n }\n return {\n ...response.data,\n operationStatus: response.status,\n };\n}\n\nconst defaultPageSize = 20;\n\nconst defaultFriendResponse: IFriendResponse = {\n pageCount: 0,\n pageNumber: 1,\n totalFriends: 0,\n friends: [],\n};\n\ninterface IFetchFriendsOptions {\n searchTerm?: string;\n pageSize?: number;\n pageNumber?: number;\n includePreferences?: boolean;\n existingFriends?: boolean;\n cancelToken?: CancelToken;\n}\n\nexport async function fetchExistingFriends(options: IFetchFriendsOptions): Promise {\n const {\n searchTerm = \"\",\n pageSize = defaultPageSize,\n pageNumber = 1,\n includePreferences = false,\n cancelToken,\n } = options;\n\n const queryParams = [\n new QueryParameter(\"searchTerm\", searchTerm),\n new QueryParameter(\"pageNumber\", pageNumber),\n new QueryParameter(\"pageSize\", pageSize),\n new QueryParameter(\"includePreferences\", includePreferences),\n ];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.getProfileFriends}${queryParamString}`, {\n cancelToken: cancelToken,\n });\n\n if (response.status !== ResponseStatusEnum.Ok) return defaultFriendResponse;\n\n return response.data;\n}\n\nexport async function fetchFriends(options: IFetchFriendsOptions): Promise {\n const {\n searchTerm = \"\",\n pageSize = defaultPageSize,\n pageNumber = 1,\n includePreferences = false,\n cancelToken,\n } = options;\n\n if (searchTerm.length === 0) return defaultFriendResponse;\n\n const queryParams = [\n new QueryParameter(\"searchTerm\", searchTerm),\n new QueryParameter(\"pageNumber\", pageNumber),\n new QueryParameter(\"pageSize\", pageSize),\n new QueryParameter(\"includePreferences\", includePreferences),\n ];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const url = apiUrls.friends.getFriendSearch + queryParamString;\n\n const response = await axios.get(url, {\n cancelToken: cancelToken,\n });\n\n if (response.status !== ResponseStatusEnum.Ok) return defaultFriendResponse;\n\n return response.data;\n}\n\nexport async function fetchPendingFriends(options: IFetchFriendsOptions): Promise {\n const {\n searchTerm = \"\",\n pageSize = defaultPageSize,\n pageNumber = 1,\n includePreferences = false,\n cancelToken,\n } = options;\n\n const queryParams = [\n new QueryParameter(\"searchTerm\", searchTerm),\n new QueryParameter(\"pageNumber\", pageNumber),\n new QueryParameter(\"pageSize\", pageSize),\n new QueryParameter(\"filter\", \"Pending\"),\n new QueryParameter(\"includePreferences\", includePreferences),\n ];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.getFriends}${queryParamString}`, {\n cancelToken: cancelToken,\n });\n\n if (response.status !== ResponseStatusEnum.Ok) return defaultFriendResponse;\n\n return response.data;\n}\n\nexport async function checkFriends(userSsid: string): Promise {\n const queryParams = [new QueryParameter(\"userSsid\", userSsid)];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.checkFriends}${queryParamString}`);\n\n return response.data;\n}\n\nexport async function getFriendProfile(pageNumber: number, pageSize: number, ssid: string): Promise {\n const queryParams = [\n new QueryParameter(\"pageNumber\", pageNumber),\n new QueryParameter(\"pageSize\", pageSize),\n new QueryParameter(\"ssid\", ssid),\n ];\n\n const queryParamString = constructQueryParameterString(queryParams);\n\n const response = await axios.get(`${apiUrls.friends.getProfileFriends}${queryParamString}`);\n\n return response.data;\n}\n","import { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { ITheme, useTheme } from \"@material-ui/core\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { isTablet } from \"react-device-detect\";\n\nexport const scrollBarWidth = 10;\n\ninterface IProps {\n children: ReactNode;\n scrollConfig?: {\n disableButtons?: boolean;\n currentStep?: number;\n disableShadow?: boolean;\n customHeight?: string;\n mobileShadowHeight?: string;\n shadowHeight?: string;\n color?: string;\n gradientHeight?: string;\n };\n mobileShadowHeight?: string;\n shadowHeight?: string;\n}\n\nconst CustomScroll = ({ children, scrollConfig, shadowHeight = \"40%\", mobileShadowHeight = \"50%\" }: IProps) => {\n const theme: ITheme = useTheme();\n const [onScrollHover, setScrollHover] = useState(true);\n const [bottomReached, setIsBottomReached] = useState(false);\n const [listScrollHeight, setListScrollHeight] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(0);\n const listRef = useRef(null!);\n const ref = useRef(null!);\n const isMobile = useIsMobile();\n\n const disableButtons = scrollConfig?.disableButtons ? scrollConfig?.disableButtons : false;\n const currentStep = scrollConfig?.currentStep ? scrollConfig.currentStep : 0;\n const disableShadow = scrollConfig?.disableShadow ? scrollConfig.disableShadow : false;\n const customHeight = scrollConfig?.customHeight ? scrollConfig.customHeight : \"100%\";\n const color = scrollConfig?.color ? scrollConfig.color : styleGuide.color.grey;\n const gradientHeight = scrollConfig?.gradientHeight ? scrollConfig.gradientHeight : \"10%\";\n\n const styles: IStyles = {\n children: {\n transition: isMobile ? \"none\" : theme.styles.hoverEaseInOut,\n height: customHeight,\n overflow: disableButtons ? \"hidden\" : isMobile || isTablet || onScrollHover ? \"auto\" : \"hidden\",\n scrollbarGutter: \"stable\",\n overflowX: \"hidden\",\n paddingRight: isMobile ? scrollBarWidth : scrollBarWidth,\n },\n blur: {\n transition: theme.styles.hoverEaseInOut,\n position: \"absolute\",\n width: \"100%\",\n zIndex: 2,\n bottom: 0,\n right: 0,\n height: isMobile ? 300 : 500,\n pointerEvents: \"none\",\n background: isMobile\n ? `linear-gradient(0deg, ${color} ${\n scrollConfig?.mobileShadowHeight ? scrollConfig.mobileShadowHeight : mobileShadowHeight\n }, rgba(0, 0, 0, 0) 90%)`\n : `linear-gradient(0deg, ${color} ${gradientHeight}, rgba(0, 0, 0, 0) ${\n scrollConfig?.shadowHeight ? scrollConfig.shadowHeight : shadowHeight\n })`,\n },\n listItem: {\n overflow: \"auto\",\n height: \"100%\",\n marginRight: isMobile ? -scrollBarWidth : -scrollBarWidth * 1.5,\n },\n };\n\n useEffect(() => {\n if (!ref.current) return;\n\n const resizeObserver = new ResizeObserver(() => {\n setScrollHeight(Number(ref?.current?.scrollHeight));\n });\n\n resizeObserver.observe(ref.current);\n return () => resizeObserver.disconnect();\n }, [currentStep]);\n\n useEffect(() => {\n if (!listRef.current) return;\n\n const listResizeObserver = new ResizeObserver(() => {\n setListScrollHeight(Number(listRef?.current?.scrollHeight));\n });\n\n listResizeObserver.observe(listRef.current);\n return () => listResizeObserver.disconnect();\n }, [currentStep]);\n\n useEffect(() => {\n if (listRef) {\n const divElement = listRef?.current;\n\n if (divElement) {\n const handleInitialHover = () => {\n setScrollHover(true);\n };\n\n divElement.addEventListener(\"mouseover\", handleInitialHover);\n\n return () => {\n divElement.removeEventListener(\"mouseover\", handleInitialHover);\n };\n }\n }\n }, [listRef?.current]);\n\n const isScroll = !disableShadow && scrollHeight > listScrollHeight;\n\n const handleReachBottom = (e: React.UIEvent) => {\n const bottomOffset = 12;\n\n const bottom =\n e.currentTarget.scrollHeight - e.currentTarget.scrollTop <= e.currentTarget.clientHeight + bottomOffset;\n\n if (bottom) {\n setIsBottomReached(true);\n } else setIsBottomReached(false);\n };\n\n return (\n setScrollHover(true)}\n onMouseLeave={() => setScrollHover(false)}\n onTouchStart={(e) => e.preventDefault()}\n >\n
\n {children}\n {isScroll && !bottomReached && !disableShadow &&
}\n
\n
\n );\n};\n\nexport default CustomScroll;\n","import { IFriendsResponse } from \"apiServices/common/response/IFriendsResponse\";\nimport Platforms from \"common/enums/PlatformsEnum\";\nimport RelationshipEnum from \"common/enums/RelationshipEnum\";\nimport ResponseStatusEnum from \"common/enums/ResponseStatusEnum\";\n\nexport interface ISearchResults {\n existing: IFriendsResponse;\n search: IFriendsResponse;\n}\n\nexport interface IFriendsConsolidatedResponse {\n pageCount: string;\n totalSize: string;\n platform: Platforms;\n entries: IFriendsByPlatformEntryResponse[];\n operationStatus?: ResponseStatusEnum;\n error: IError;\n}\n\ninterface IError {\n requestedPlatform?: string;\n message?: string;\n}\n\nexport interface IFriendsByPlatformFailedResponse {\n requestedPlatform: string;\n message: string;\n}\n\nexport interface IFriendsByPlatformResponse {\n pageCount: string;\n totalSize: string;\n platform: Platforms;\n entries: IFriendsByPlatformEntryResponse[];\n}\n\nexport interface IFriendsByPlatformEntryResponse {\n ssid: string;\n displayName: string;\n isEAFriend: boolean;\n isPlatformFriend: boolean;\n platformDisplayName: string;\n profileImageUrl: string;\n relationshipType?: string;\n friendRelationship?: RelationshipEnum | string;\n}\n\nexport const defaultConsolidatedFriendsResponse: IFriendsByPlatformResponse = {\n pageCount: \"\",\n totalSize: \"\",\n platform: Platforms.None,\n entries: [],\n};\n\nexport const defaultConsolidatedFriendsErrorResponse: IFriendsByPlatformFailedResponse = {\n requestedPlatform: \"\",\n message: \"\",\n};\n","import { useConfig } from \"contexts/configuration/ConfigurationContext\";\nimport Button from \"common/components/uiComponents/buttons/Button\";\nimport { IStyles } from \"theme\";\n\ninterface IProps {\n isMobile: boolean;\n style?: IStyles;\n text?: string;\n}\n\nconst NewLoginSignupButton = ({ isMobile, style, text = \"SIGN IN\" }: IProps) => {\n const config = useConfig();\n\n const handleLogin = () => {\n let jwtConfig = config.jwtConfig;\n\n let url =\n `${config.authUrls.loginJwt}client_id=${jwtConfig.clientId}&` +\n `response_type=${jwtConfig.response_type}&` +\n `redirect_uri=${jwtConfig.redirectUri}`;\n\n window.location.href = url;\n };\n\n return (\n <>\n \n \n );\n};\n\nexport default NewLoginSignupButton;\n","import { ReactNode, useEffect, useRef } from \"react\";\nimport Portal from \"./Portal\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { Transition, TransitionStatus } from \"react-transition-group\";\nimport { ScrollItems, useScrollContext } from \"contexts/scroll/ScrollContext\";\nimport { useClickOutside } from \"hooks/useClickOutside\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"../buttons/Button\";\nimport NewTabButton from \"../buttons/NewTabButton\";\n\ninterface IProps {\n title?: string;\n children: ReactNode;\n actions?: {\n label: string;\n onClick: () => void;\n type: \"primary\" | \"secondary\";\n disabled?: boolean;\n actionType?: \"button\" | \"externalLink\";\n href?: string;\n }[];\n isMobile: boolean;\n open: boolean;\n onClose: () => void;\n loader?: boolean;\n disabled?: boolean;\n styleConfig?: {\n backgroundColor?: string;\n maxWidth?: number;\n width?: string;\n padding?: string | number;\n margin?: string | number;\n titleAlignement?: \"left\" | \"right\" | \"center\";\n };\n}\n\nexport const rootZIndex: number = 3001;\n\nconst PortalDialog = ({ title, children, actions, isMobile, open, onClose, loader = false, styleConfig }: IProps) => {\n const node = useRef(null!);\n const { handleDisableScroll, handleEnableScroll, scrollItems } = useScrollContext();\n\n const defaultStyleConfig = {\n ...styleConfig,\n backgroundColor: styleGuide.color.richGrey,\n };\n\n useClickOutside(node, () => {\n if (loader) return;\n\n onClose();\n });\n\n useEffect(() => {\n if (scrollItems.includes(ScrollItems.Popover)) return;\n\n if (open) {\n handleDisableScroll(ScrollItems.Dialog);\n }\n\n if (open === false) {\n handleEnableScroll(ScrollItems.Dialog);\n }\n }, [open]);\n\n const styles: IStyles = {\n root: {\n ...styleGuide.popoverBackground,\n position: \"fixed\",\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: rootZIndex + 2,\n },\n dialog: {\n backgroundColor: defaultStyleConfig.backgroundColor,\n display: \"flex\",\n flexDirection: \"column\",\n padding: defaultStyleConfig.padding ? defaultStyleConfig.padding : `${isMobile ? 56 : 40}px 24px 24px 24px`,\n maxHeight: \"calc(100vh - 150px)\",\n gridArea: \"1/1\",\n placeSelf: \"center center\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n width: defaultStyleConfig.width ?? \"100%\",\n maxWidth: defaultStyleConfig.maxWidth ?? 500,\n borderRadius: styleGuide.borderRadius,\n margin: defaultStyleConfig.margin ?? isMobile ? styleGuide.spacing(2) : 0,\n },\n title: {\n display: \"flex\",\n justifyContent: defaultStyleConfig.titleAlignement\n ? defaultStyleConfig.titleAlignement\n : isMobile\n ? \"center\"\n : \"flex-start\",\n paddingBottom: 24,\n },\n children: {},\n actions: {\n display: \"flex\",\n gap: isMobile ? 12 : 16,\n paddingTop: 56,\n justifyContent: isMobile ? \"center\" : \"flex-end\",\n flexWrap: \"wrap\",\n visibility: loader ? \"hidden\" : \"initial\",\n flexDirection: isMobile ? \"column-reverse\" : \"row\",\n },\n };\n\n const defaultStyle = {\n transition: `opacity 0.2ms ease-in-out`,\n opacity: 0,\n backdropFilter: \"blur(0px)\",\n };\n\n const transitionStyles = {\n entering: {},\n entered: scrollItems.includes(ScrollItems.Popover)\n ? { opacity: 1, transition: \"opacity 0.2s ease-in\" }\n : { opacity: 1, transition: \"opacity 0.2s ease-in\", backdropFilter: \"blur(8px)\" },\n exiting: { opacity: 0, backdropFilter: \"unset\", transition: \"opacity 0.2s ease-out\" },\n exited: {},\n unmounted: {},\n };\n\n return (\n \n \n {(state: TransitionStatus) => (\n \n
\n {title && (\n
\n {title}\n
\n )}\n
{children}
\n {actions && (\n
\n {actions.map((a, index) =>\n a.actionType === undefined || a.actionType === \"button\" ? (\n {\n a.onClick();\n }}\n disabled={a.disabled}\n isMobile={isMobile}\n customStyles={isMobile ? { width: \"100%\" } : {}}\n >\n {a.label}\n \n ) : (\n \n {a.label}\n \n )\n )}\n
\n )}\n
\n \n )}\n
\n
\n );\n};\n\nexport default PortalDialog;\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport useTrainTracks, { TrainTrackLayer } from \"./useTrainTracks\";\n\nconst useStyles = (borderRadius: number) =>\n makeStyles((theme: Theme) => {\n return createStyles({\n cardBorderRadius: {\n borderRadius: borderRadius,\n },\n });\n });\n\ninterface IProps {\n layer?: TrainTrackLayer;\n}\n\nexport default function useCardBorderRadiusClass(props: IProps = {}) {\n const { layer = \"0\" } = props;\n\n const trainTracks = useTrainTracks();\n\n const classes = useStyles(trainTracks[layer].borderRadius)();\n\n return classes.cardBorderRadius;\n}\n","import moment, { Moment } from \"moment\";\n\nconst getLongDate = (date: string | Date) => {\n if (moment().diff(date, \"days\") < 7) {\n return \"MMMM Do YYYY\";\n } else if (moment().diff(date, \"weeks\", true) < 4) {\n return `[${moment().diff(date, \"weeks\")}w]`;\n } else {\n return `[${moment().diff(date, \"months\")}m]`;\n }\n};\n\nexport const getLocalDate = (date: string | Date | number) => {\n const locale = navigator.language;\n const d = new Date(date);\n const localFormat = new Intl.DateTimeFormat(locale).format;\n return localFormat(d);\n};\n\nexport const getUserTimeZone = () => {\n // Get user timezone, if not best guess: https://stackoverflow.com/questions/40401543/get-timezone-from-users-browser-using-momenttimezone-js\n const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (userTimeZone) {\n return userTimeZone;\n }\n};\n\nexport const getLocalDateWithDash = (date: string | Date | number) => {\n const locale = navigator.language;\n const d = new Date(date);\n const localFormat = new Intl.DateTimeFormat(locale).format;\n const regEx = /\\//g;\n\n return localFormat(d).replace(regEx, \"-\");\n};\n\nexport const getLocalDefaultDate = (utcDate: string | Date | number) => {\n const localDate = moment.utc(utcDate).local().format(\"YYYY-MM-DD\");\n return localDate;\n};\n\nexport const getLocalDefaultDateWithSlash = (utcDate: string | Date | number) => {\n const locale = navigator.language;\n\n const localDate = moment.utc(utcDate).local().format(\"L\");\n const d = moment(localDate).toDate();\n const regEx = /\\//g;\n const localFormat = new Intl.DateTimeFormat(locale).format;\n return localFormat(d).replace(regEx, \"-\");\n};\n\nexport const getLocalDefaultDateWithMinutes = (utcDate: string | Date | number) => {\n const localDate = moment.utc(utcDate).local().format(\"YYYY-MM-DD HH:mm\");\n return localDate;\n};\n\nexport const getLocalDefaultDateWithTime = (utcDate: string | Date | number) => {\n const localDate = moment.utc(utcDate).local().format(\"YYYY-MM-DD HH:mm:ss\");\n return localDate;\n};\n\nexport const getLocalDefaultDateWithTimeMinutesAndSeconds = (utcDate: string | Date | number) => {\n const localDate = moment.utc(utcDate).local().format(\"YYYY-MM-DDTHH:mm:ss.SSS\");\n return localDate;\n};\n\n//function above and below do the same thing, needs to cleanup\n\nexport const getLocalShortDateFromUTC = (utcTime: string | Date | number) => {\n const localDate = moment.utc(utcTime).local().format(\"MMM Do\");\n return localDate;\n};\n\nexport const getLocalShortNoAbvDateFromUTC = (utcTime: string | Date | number) => {\n const localDate = moment.utc(utcTime).local().format(\"MMM D\");\n return localDate;\n};\n\nexport const getLocalShortNoAbvDateWithTimeFromUTC = (utcTime: string | Date | number) => {\n const localDate = moment.utc(utcTime).local().format(\"MMM D, h:mma\");\n return localDate;\n};\n\nexport const getLocalDateFromUTC = (utcTime: string | Date | number) => {\n const localDate = moment.utc(utcTime).local().format(\"MMM D, YYYY\");\n return localDate;\n};\n\n// Format Mar 8, 2022\nexport const getLocalShortDateWithYearFromUTC = (utcTime: string | Date | number) => {\n const localDate = moment.utc(utcTime).local().format(\"MMM D, YYYY\");\n return localDate;\n};\n\nexport const getLocalTimefromUTC = (utcTime: string | Date | number) => {\n const localTime = moment.utc(utcTime).local().format(\"h:mma\");\n return localTime;\n};\n\nexport const getEventRangeDate = (start: string, end: string) => {\n if (moment(start) > moment(end)) return \"\";\n\n const startDate = moment(start).format(\"Do MMMM\");\n const endDate = moment(end).format(\"Do MMMM\");\n\n return startDate + \" - \" + endDate;\n};\n\nexport const getEventStartDate = (date: string | Date, textOverride?: string) => {\n return moment(date).calendar(null, {\n sameDay: `[${textOverride ? textOverride : \"Event\"} starts today]`,\n nextDay: `[${textOverride ? textOverride : \"Event\"} starts tomorrow]`,\n nextWeek: `[${textOverride ? textOverride : \"Event\"} starts on] dddd`,\n lastDay: `[${textOverride ? textOverride : \"Event\"} started yesterday]`,\n lastWeek: \"dddd\",\n sameElse: \"[on] MMM D, YYYY\",\n });\n};\n\nexport const getActivityFeedDate = (date: string | Date) => {\n if (moment().diff(date, \"days\") < 0) return;\n return moment(date).calendar(null, {\n sameDay: \"[Today]\",\n nextDay: \"[Tomorrow]\",\n nextWeek: \"dddd\",\n lastDay: \"[Yesterday]\",\n lastWeek: getLongDate(date),\n sameElse: getLongDate(date),\n });\n};\n\nexport const getLastPlayedDate = (date: string | Date) => {\n return moment(date).calendar(null, {\n sameDay: \"[Today]\",\n nextDay: \"[Tomorrow]\",\n nextWeek: \"dddd\",\n lastDay: \"[Yesterday]\",\n lastWeek: \"dddd\",\n sameElse: \"MMM D, YYYY\",\n });\n};\n\nexport const getShortMonthName = (date: string | Date) => moment(date).format(\"MMM\");\n\nexport const getDayNumber = (date: string | Date) => moment(date).date();\n\nexport const isUTCDateBeforeNow = (date: string | Date) => {\n const now = moment().utc();\n const utcDate = moment(date).utc();\n\n return utcDate.isBefore(now);\n};\n\nexport const isUTCDateAfterNow = (date: string | Date) => {\n const now = moment().utc();\n const utcDate = moment(date).utc();\n\n return utcDate.isAfter(now);\n};\n\n// 22 minutes/ a few seconds ago...\nexport const getTimeDifferenceInUTC = (date: string | Date) => {\n const timeNow = moment().utc();\n const diff = timeNow.diff(moment(date));\n const duration = moment.duration(diff);\n\n return duration.humanize();\n};\n\n// 1s, 2m, 3h, 4d...\nexport const calculateFormattedTimeDifference = (date: string, maxDays?: number): string => {\n const max = maxDays ? maxDays : 365;\n\n const timeNow = moment.utc();\n const diff = timeNow.diff(moment(date));\n const duration = moment.duration(diff);\n\n if (duration.asSeconds() < 60) {\n return `${Math.floor(duration.asSeconds())}s`;\n } else if (duration.asMinutes() < 60) {\n return `${Math.floor(duration.asMinutes())}m`;\n } else if (duration.asHours() < 24) {\n return `${Math.floor(duration.asHours())}h`;\n } else if (duration.asDays() <= max) {\n return `${Math.floor(duration.asDays())}d`;\n } else {\n return `+${max}d`;\n }\n};\n","import { FormEventHandler, ReactNode, useEffect, useState } from \"react\";\nimport { ITheme, useTheme } from \"@material-ui/core\";\nimport { IStyles, styleGuide } from \"theme\";\nimport Portal from \"../uiComponents/dialogs/Portal\";\nimport { Transition, TransitionStatus } from \"react-transition-group\";\nimport CloseIcon from \"assets/icons/CloseIcon\";\nimport { useHistory } from \"react-router-dom\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { rootZIndex } from \"../dialogs/Dialog\";\nimport classes from \"./popover.module.scss\";\nimport { ScrollItems, useScrollContext } from \"contexts/scroll/ScrollContext\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp, webViewPostMessage } from \"utils/webViewTools\";\nimport { useNativeAppProps } from \"contexts/theme/ThemeContext\";\nimport { WebViewEnum } from \"common/enums/WebViewEventsEnum\";\nimport CustomScroll from \"../scroll/CustomScroll\";\nimport Spacer from \"../Spacer\";\n\nconst MAX_HEIGHT: number = 1020;\n\ninterface IProps {\n headerChildren?: ReactNode;\n headerChildrenAction?: ReactNode;\n contentHeaderChildren?: ReactNode;\n children: ReactNode;\n actionChildren?: ReactNode[];\n isOpen: boolean;\n setOpen?: (open: boolean) => void;\n onClose?: () => void;\n heightOverride?: string;\n maxWidth?: number;\n title?: string;\n scrollConfig?: {\n disableButtons?: boolean;\n currentStep?: number;\n disableShadow?: boolean;\n customHeight?: string;\n mobileShadowHeight?: string;\n shadowHeight?: string;\n color?: string;\n gradientHeight?: string;\n };\n onboarding?: ReactNode;\n onSubmit?: FormEventHandler;\n padding?: number;\n noPaddingTop?: boolean;\n wrapperId?: string;\n}\n\nconst Popover = ({\n headerChildren,\n headerChildrenAction,\n children,\n isOpen,\n setOpen,\n onClose,\n heightOverride,\n maxWidth = 600,\n onboarding,\n title,\n contentHeaderChildren,\n actionChildren,\n scrollConfig,\n onSubmit,\n padding,\n noPaddingTop = false,\n wrapperId = \"popover-container\",\n}: IProps) => {\n const theme: ITheme = useTheme();\n const nativeAppProps = useNativeAppProps();\n const nativeAppReturnValue = nativeAppProps.appVersion ? true : false;\n const isFirefox = navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\n const history = useHistory();\n const isMobile = useIsMobile();\n\n const { handleDisableScroll, handleEnableScroll } = useScrollContext();\n const [hover, setHover] = useState(false);\n\n const styles: IStyles = {\n root: {\n padding: 0,\n backgroundColor: styleGuide.color.grey,\n position: \"fixed\",\n overflow: isFirefox && !isMobile ? \"unset\" : \"hidden\",\n height: \"100%\",\n width: \"100%\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n display: \"flex\",\n flexDirection: \"column\",\n zIndex: rootZIndex + 1,\n },\n desktopRoot: {\n position: \"fixed\",\n overflow: isFirefox && !isMobile ? \"unset\" : \"hidden\",\n height: \"100%\",\n width: \"100%\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: rootZIndex + 1,\n display: \"grid\",\n },\n headerContent: {\n display: \"flex\",\n justifyContent: isMobile && headerChildren ? \"space-between\" : isMobile ? \"flex-end\" : \"center\",\n gap: styleGuide.spacing(),\n alignItems: \"center\",\n flex: 1,\n position: \"relative\",\n },\n backgroundEffect: {\n gridArea: \"1/1\",\n backgroundColor: theme.styles.popoverBackground,\n },\n desktopContainer: {\n gridArea: \"1/1\",\n placeSelf: \"center\",\n width: \"100%\",\n height: heightOverride ? heightOverride : \"100%\",\n maxHeight: isMobile ? \"100%\" : MAX_HEIGHT,\n minHeight: 500,\n padding: styleGuide.spacing(4),\n overflow: !isMobile && isFirefox ? \"hidden\" : null,\n },\n desktopContent: {\n backgroundColor: styleGuide.color.grey,\n margin: \"0 auto\",\n maxWidth: maxWidth,\n height: \"100%\",\n borderRadius: styleGuide.borderRadius,\n padding: padding ?? styleGuide.spacing(5),\n boxShadow: `1px 1px 5px #000`,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: !isMobile && isFirefox ? \"hidden\" : null,\n },\n desktopScrollContainer: {\n padding: 0,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n position: !isMobile && isFirefox ? null : \"relative\",\n zIndex: 1,\n },\n actionChildren: {\n backgroundColor: styleGuide.color.grey,\n display: \"flex\",\n flexDirection: isMobile ? \"column-reverse\" : \"row\",\n gap: styleGuide.spacing(2),\n justifyContent: \"flex-end\",\n paddingTop: styleGuide.spacing(2),\n flex: 1,\n zIndex: 3,\n },\n closeButton: {\n position: isMobile ? \"initial\" : \"absolute\",\n top: 0,\n right: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: isMobile ? 44 : 30,\n width: isMobile ? 44 : 30,\n fontWeight: \"bold\",\n color: hover ? styleGuide.color.coral : styleGuide.color.white,\n backgroundColor: hover ? styleGuide.color.white : styleGuide.color.transparent,\n border: `2px solid ${styleGuide.color.coral}`,\n borderRadius: styleGuide.borderRadius,\n cursor: \"pointer\",\n transition: theme.styles.hoverEaseInOut + theme.styles.cssImportant,\n zIndex: 3,\n },\n headerChildrenContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n mobileContent: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n padding: styleGuide.spacing(2),\n paddingTop:\n (isRaceNetMobileApp || isRaceNetTabletApp) && nativeAppProps.topInset\n ? noPaddingTop\n ? nativeAppProps.topInset - 38\n : nativeAppProps.topInset\n : styleGuide.spacing(2),\n },\n form: {\n overflowY: \"visible\",\n overflowX: \"hidden\",\n height: \"100%\",\n display: isMobile ? \"block\" : \"grid\",\n },\n };\n\n const defaultStyle = {\n transition: `opacity 0.2ms ease-in-out`,\n opacity: 0,\n backdropFilter: \"blur(0px)\",\n };\n\n const transitionStyles = {\n entering: {},\n entered: {\n opacity: 1,\n backdropFilter: \"blur(8px)\",\n transition: \"opacity 0.2s ease-in\",\n },\n exiting: {\n opacity: 0,\n backdropFilter: \"unset\",\n transition: \"opacity 0.2s ease-out\",\n },\n exited: {},\n unmounted: {},\n };\n\n const handleOnClose = (e: React.MouseEvent) => {\n e.preventDefault();\n\n setOpen && setOpen(!isOpen);\n setHover(false);\n\n // window.alert(nativeAppReturnValue);\n\n isRaceNetMobileApp && webViewPostMessage(`${WebViewEnum.hideBackButton}:${!nativeAppReturnValue}`); //false Mobile re-enable\n\n if (onClose) {\n onClose();\n } else history.goBack();\n };\n\n useEffect(() => {\n if (isOpen) {\n handleDisableScroll(ScrollItems.Popover);\n isRaceNetMobileApp && webViewPostMessage(`${WebViewEnum.hideBackButton}:${nativeAppReturnValue}`); //true Mobile re-enable\n } else {\n handleEnableScroll(ScrollItems.Popover);\n }\n return () => webViewPostMessage(`${WebViewEnum.hideBackButton}:${!nativeAppReturnValue}`);\n }, [isOpen]);\n\n const headerContent = (\n
\n {headerChildren && headerChildren}\n {headerChildrenAction ? (\n headerChildrenAction\n ) : (\n setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={(e) => handleOnClose(e)}\n >\n \n \n )}\n
\n );\n\n const titleContent = title ? (\n isMobile ? (\n

{title}

\n ) : (\n \n {title}\n \n )\n ) : undefined;\n\n const mobileContent = (\n
\n {headerContent}\n \n {titleContent && titleContent}\n {titleContent && contentHeaderChildren && }\n {contentHeaderChildren && (\n <>\n \n
{contentHeaderChildren}
\n \n )}\n \n \n {children}\n \n {actionChildren && actionChildren.length > 0 && (\n
{actionChildren?.map((a) => a)}
\n )}\n
\n );\n\n const desktopContent = (\n <>\n
\n
\n \n
\n {headerContent}\n {titleContent}\n {contentHeaderChildren && (\n <>\n \n
{contentHeaderChildren}
\n \n )}\n \n {children}\n {actionChildren && actionChildren.length > 0 && (\n {actionChildren?.map((a) => a)}\n )}\n
\n
\n
\n \n );\n\n return (\n \n \n {(state: TransitionStatus) => (\n <>\n \n {onboarding}\n {onSubmit ? (\n
\n {isMobile ? mobileContent : desktopContent}\n
\n ) : isMobile ? (\n mobileContent\n ) : (\n desktopContent\n )}\n
\n \n )}\n \n \n );\n};\n\nexport default Popover;\n","import { useState, useEffect } from \"react\";\n\ntype ComparisonType = \"up\" | \"down\" | \"equal\";\n\nconst useBreakpoint = (value: number, comparisonType: ComparisonType): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const handleBreakpointChange = (event: MediaQueryListEvent): void => {\n setMatches(event.matches);\n };\n\n const mediaQueryList =\n comparisonType === \"up\"\n ? window.matchMedia(`(min-width: ${value}px)`)\n : comparisonType === \"down\"\n ? window.matchMedia(`(max-width: ${value}px)`)\n : window.matchMedia(`(width: ${value}px)`);\n\n setMatches(mediaQueryList.matches);\n mediaQueryList.addEventListener(\"change\", handleBreakpointChange);\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", handleBreakpointChange);\n };\n }, [value, comparisonType]);\n\n return matches;\n};\n\nexport default useBreakpoint;\n","import React, { ReactNode } from \"react\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport { layout } from \"theme\";\nimport clsx from \"clsx\";\nimport useResponsivePaddingClass from \"hooks/useResponsivePaddingClass\";\n\nconst useStyles = (maxWidth: number | \"unset\") =>\n makeStyles(() => {\n return createStyles({\n pageSection: {\n flex: \"1 1 auto\",\n display: \"flex\",\n justifyContent: \"center\",\n minWidth: 0,\n },\n maxWidthContainer: {\n minWidth: 0,\n flex: \"1 1 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n maxWidth: maxWidth,\n },\n });\n });\n\ntype IClasses = Partial>>;\n\ninterface IPageSectionProps extends React.HTMLAttributes {\n children?: ReactNode;\n noPadding?: boolean;\n maxWidth?: number | \"unset\";\n classes?: IClasses;\n}\n\nexport default function PageSection(props: IPageSectionProps) {\n const {\n children,\n className,\n noPadding = false,\n maxWidth = layout.defaultPageSectionMaxWidth,\n classes: overrideClasses,\n ...rest\n } = props;\n const classes = useStyles(maxWidth)();\n const responsivePaddingClassName = useResponsivePaddingClass();\n\n return (\n
\n \n {children}\n
\n \n );\n}\n","import useIsMobile from \"./useIsMobile\";\nimport { useEffect, useState } from \"react\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst useIsLandscape = () => {\n const [width, setWidth] = useState(window.innerWidth);\n const [height, setHeight] = useState(window.innerHeight);\n\n const mobile = useIsMobile() || isRaceNetMobileApp || isRaceNetTabletApp;\n const isLandscape = mobile && width > height;\n\n const update = () => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n };\n useEffect(() => {\n window.addEventListener(\"resize\", update);\n return () => window.removeEventListener(\"resize\", update);\n });\n\n return isLandscape;\n};\nexport default useIsLandscape;\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nconst ArrowLeftIconV2 = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default ArrowLeftIconV2;\n","import { ReactNode } from \"react\";\nimport StyledButton, { IStyledButtonProps } from \"./StyledButton\";\nimport NewTabLink from \"common/components/links/NewTabLink\";\n\ninterface IProps extends IStyledButtonProps {\n children?: ReactNode;\n href: string;\n}\n\nexport default function NewTabLinkButton(props: IProps) {\n const { children, href, ...rest } = props;\n\n return (\n \n {children}\n \n );\n}\n","import Spacer from \"common/components/Spacer\";\nimport SkeletonElement from \"common/components/skeleton/SkeletonElement\";\nimport { styleGuide } from \"theme\";\n\ninterface IProps {\n isMobile?: boolean;\n}\n\nconst ProfileDrawerSkeleton = ({ isMobile = false }: IProps) => {\n return isMobile ? (\n <>\n \n \n \n \n ) : (\n
\n \n \n
\n );\n};\n\nexport default ProfileDrawerSkeleton;\n","import { SwipeableDrawer, withStyles } from \"@material-ui/core\";\nimport Spacer from \"common/components/Spacer\";\nimport { ReactNode } from \"react\";\nimport ProfileDrawerSkeleton from \"./ProfileDrawerSkeleton\";\nimport { IStyles, styleGuide } from \"theme\";\nimport { rootZIndex } from \"../dialogs/PortalDialog\";\nimport MobileBottomNavSpacer from \"containers/navigation/authorised/mobile/MobileBottomNavSpacer\";\n\ninterface IProps {\n loader?: boolean;\n open: boolean;\n children: ReactNode;\n isMobile?: boolean;\n anchor: \"bottom\" | \"top\";\n setOpen: (open: boolean) => void;\n handleClose?: () => void;\n}\n\nconst Drawer = ({ loader = false, open, children, isMobile = false, anchor, setOpen, handleClose }: IProps) => {\n const styles: IStyles = {\n drawer: {\n zIndex: rootZIndex + 1,\n backgroundColor: \"transparent\",\n transition: styleGuide.transitions.hoverEaseInOut,\n backdropFilter: \"blur(8px)\",\n borderTopLeftRadius: styleGuide.borderRadius,\n borderTopRightRadius: styleGuide.borderRadius,\n },\n notch: {\n width: 64,\n height: 8,\n borderRadius: styleGuide.borderRadius,\n background: styleGuide.color.periwinkle,\n margin: \"0 auto\",\n },\n children: {\n display: \"flex\",\n flexDirection: \"column\",\n borderTopLeftRadius: styleGuide.borderRadius,\n borderTopRightRadius: styleGuide.borderRadius,\n backgroundColor: styleGuide.color.richGrey,\n },\n };\n\n const drawerChildren = loader ? (\n \n ) : (\n <>\n
\n \n
\n {children}\n \n \n
\n \n );\n\n const CustomSwipeableDrawer = withStyles({\n paper: {\n backgroundColor: styleGuide.color.transparent,\n },\n })(SwipeableDrawer);\n\n const onClose = () => {\n if (handleClose) {\n handleClose();\n } else {\n setOpen(false);\n }\n };\n\n return (\n {\n setOpen(true);\n }}\n onClose={onClose}\n style={styles.drawer}\n >\n {drawerChildren}\n \n );\n};\n\nexport default Drawer;\n","import clsx from \"clsx\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport IconButton, { IconButtonProps } from \"@material-ui/core/IconButton\";\nimport PlayCircleFilledIcon from \"@material-ui/icons/PlayCircleFilled\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: {},\n icon: {\n transform: \"rotate(90deg)\",\n transition: theme.transitions.create(\"transform\"),\n },\n closeIcon: {\n transform: \"rotate(270deg)\",\n },\n });\n});\n\ninterface IProps extends IconButtonProps {\n isOpen?: boolean;\n iconSize?: \"inherit\" | \"medium\" | \"small\" | \"large\";\n isDisabled?: boolean;\n}\n\nexport default function DropDownToggleButton(props: IProps) {\n const { className, size, iconSize = \"medium\", isOpen = false, isDisabled, ...rest } = props;\n const classes = useStyles(props);\n\n return (\n \n \n \n );\n}\n","// https://css-tricks.com/aspect-ratio-boxes/#article-header-id-3\ninterface IProps {\n height: number;\n width: number;\n}\n\nexport default function calculateAspectRatioPaddingTopPercentage(props: IProps): string {\n const { height, width } = props;\n\n return `${(height / width) * 100}%`;\n}\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default function FeedbackIcon(props: SvgIconProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { HTMLAttributes } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { routingUrls, settings } from \"settings\";\nimport RouterLinkButton from \"common/components/buttons/RouterLinkButton\";\nimport StyledButton from \"common/components/buttons/StyledButton\";\nimport NotificationsBadge from \"common/components/notifications/NotificationsBadge\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport { useConfig } from \"contexts/configuration/ConfigurationContext\";\nimport { logoutUser } from \"../../../../apiServices/identity/IdentityApiService\";\nimport { trimEndSlash } from \"utils/urlHelper\";\nimport { Typography } from \"@material-ui/core\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: {\n padding: theme.spacing(2),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n \"& > *\": {\n marginBottom: theme.spacing(2),\n },\n \"& > *:last-child\": {\n marginBottom: 0,\n },\n },\n buttonItem: { width: \"100%\" },\n badge: {\n right: 5,\n top: 5,\n },\n });\n});\n\ninterface IProps extends HTMLAttributes {\n setClose?: () => void;\n}\n\nexport default function SettingsDropdownContents(props: IProps) {\n const { className, children, setClose, ...rest } = props;\n const isMobile = useIsMobile();\n const classes = useStyles();\n const config = useConfig();\n const { state } = useApplicationContext();\n\n const handleLogout = () => {\n logoutUser().then((res) => {\n //window.location.href = `${routingUrls.loggedOut}`;\n window.location.href = `${config.authUrls.logout}${trimEndSlash(settings.basePath)}${\n routingUrls.loggedOut\n }`;\n });\n };\n\n const closeDropdown = () => typeof setClose !== \"undefined\" && setClose();\n\n const buttonVariant = \"transparentLight\";\n\n return (\n
\n {isMobile && (\n \n \n Notifications\n \n \n )}\n \n Profile\n \n\n \n Settings\n \n \n Release notes\n \n \n FAQ\n \n \n Log out\n \n\n {`v${state.applicationStore.version.version}`}\n
\n );\n}\n","import { HTMLAttributes, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport ClickAwayListener from \"@material-ui/core/ClickAwayListener\";\nimport SettingsDropdownContents from \"../common/SettingsDropdownContents\";\nimport DropDownToggleButton from \"common/components/buttons/DropDownToggleButton\";\nimport { fontTypes, styleGuide } from \"theme\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport ProfileAvatar from \"common/components/ProfileAvatar\";\nimport RouterLink from \"common/components/links/RouterLink\";\nimport { routingUrls } from \"settings\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport { ITheme } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: ITheme) => {\n const dropdownLabelZindex = theme.zIndex.appBar;\n\n const profileIconSize = theme.spacing(4);\n const profileIconMargin = theme.spacing(1);\n\n const borderRadius = profileIconSize / 2 + profileIconMargin;\n\n const _transition = theme.transitions.create(\"all\");\n\n return createStyles({\n root: {\n position: \"relative\",\n backgroundColor: theme.palette.info.main,\n color: styleGuide.color.white,\n borderRadius: borderRadius,\n zIndex: dropdownLabelZindex,\n boxShadow: theme.styles.defaultBoxShadow,\n cursor: \"pointer\",\n },\n dropdownLabel: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n position: \"relative\",\n },\n dropdownHoverEffect: {\n \"& $dropdownToggleButton\": {\n opacity: theme.styles.defaultHoverOpacity,\n },\n },\n dropdownLabelOpen: {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n dropdownContentsContainer: {\n zIndex: dropdownLabelZindex - 1,\n position: \"relative\",\n overflow: \"hidden\",\n },\n dropdownContentsPlaceholder: {\n visibility: \"hidden\",\n },\n dropdownContents: {\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n top: \"-100%\",\n left: 0,\n backgroundColor: theme.palette.info.main,\n color: styleGuide.color.white,\n transition: _transition,\n borderBottomLeftRadius: borderRadius,\n borderBottomRightRadius: borderRadius,\n pointerEvents: \"all\",\n opacity: 0,\n },\n showDropdownContents: {\n top: 0,\n opacity: 1,\n pointerEvents: \"all\",\n },\n profileIcon: {\n margin: profileIconMargin,\n \"&:hover\": {\n opacity: theme.styles.defaultHoverOpacity,\n },\n },\n avatar: { width: profileIconSize, height: profileIconSize },\n dropdownToggleButton: {},\n userName: {\n ...fontTypes.mediumItalic,\n },\n });\n});\n\ninterface IProps extends HTMLAttributes {}\n\nexport default function DesktopDropDown(props: IProps) {\n const { className, children, ...rest } = props;\n\n const classes = useStyles();\n\n const identityContext = useIdentityContext();\n\n const [dropdownIsOpen, setDropdownIsOpen] = useState(false);\n const [showDropDownHoverState, setShowDropDownHoverState] = useState(false);\n\n const closeDropDown = () => {\n setDropdownIsOpen(false);\n };\n\n const dropdownContent = ;\n\n const toggleDropDown = () => {\n setDropdownIsOpen(!dropdownIsOpen);\n };\n\n return (\n \n \n setShowDropDownHoverState(true)}\n onMouseLeave={() => setShowDropDownHoverState(false)}\n onClick={toggleDropDown}\n >\n setShowDropDownHoverState(false)}\n onMouseLeave={() => setShowDropDownHoverState(true)}\n >\n \n \n
\n \n {identityContext.state.identity.displayName}\n \n
\n \n
\n
\n \n
{dropdownContent}
\n
\n \n {dropdownContent}\n
\n \n \n \n );\n}\n","import { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport Popover from \"@material-ui/core/Popover\";\nimport useTrainTracks from \"hooks/useTrainTracks\";\nimport { ITrainTracks } from \"hooks/useTrainTracks/TrainTrackContext\";\nimport NotificationsContent from \"common/components/notifications/NotificationsContent\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport { customScrollbar } from \"GlobalCss\";\nimport { dispatchMarkNewNotificationsAsRead } from \"contexts/notification/actions/NotificationActions\";\nimport { ITheme } from \"@material-ui/core\";\n\nconst useStyles = (trainTracks: ITrainTracks) =>\n makeStyles((theme: ITheme) => {\n const arrowSize = 12;\n const paperBackgroundColor = theme.palette.background.paper;\n\n const padding = trainTracks[1].padding;\n\n return createStyles({\n paperRoot: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n backgroundColor: paperBackgroundColor,\n borderRadius: trainTracks[1].borderRadius,\n padding: padding,\n paddingRight: padding / 2,\n [theme.breakpoints.up(\"xs\")]: {\n marginRight: \"24px\",\n },\n overflow: \"unset\",\n marginTop: arrowSize + theme.spacing(1),\n color: theme.variants.grey,\n },\n //@ts-ignore\n notifications: {\n width: 450,\n overflowY: \"auto\",\n maxHeight: \"40vh\",\n paddingRight: padding / 2,\n ...customScrollbar(theme),\n },\n notificationTopArrow: {\n position: \"absolute\",\n top: -arrowSize,\n left: \"calc(50% - 12px)\",\n width: 0,\n height: 0,\n borderLeft: `${arrowSize}px solid transparent`,\n borderRight: `${arrowSize}px solid transparent`,\n borderBottom: `${arrowSize}px solid ${paperBackgroundColor}`,\n },\n });\n });\n\ninterface IProps {\n open: boolean;\n anchorEl: HTMLButtonElement | null;\n onClose: () => void;\n}\n\nexport default function NotificationsPopover({ open, anchorEl, onClose }: IProps) {\n const trainTracks = useTrainTracks();\n const notificationContext = useNotificationContext();\n\n const classes = useStyles(trainTracks)();\n\n const markAsRead = () => {\n dispatchMarkNewNotificationsAsRead(\n notificationContext.dispatch,\n notificationContext.state.newNotificationStore.notifications,\n notificationContext.state.oldNotificationStore.notifications\n );\n };\n\n return (\n {\n onClose();\n markAsRead();\n }}\n // onExited={markAsRead} *** deprecated ***\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\",\n }}\n classes={{\n paper: classes.paperRoot,\n }}\n disableScrollLock\n >\n
\n\n
\n \n
\n \n );\n}\n","import React, { useEffect } from \"react\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport NotificationsPopover from \"./NotificationsPopover\";\nimport NotificationsBadge from \"common/components/notifications/NotificationsBadge\";\nimport { ITheme } from \"@material-ui/core\";\nimport { postAnalyticsEvent } from \"utils/analyticsHelper\";\nimport { useNotificationContext } from \"contexts/notification/NotificationContext\";\nimport { dispatchHandleTray } from \"contexts/notification/actions/NotificationActions\";\nimport { styleGuide } from \"theme\";\n\nconst useStyles = makeStyles((theme: ITheme) => {\n return createStyles({\n notificationIcon: {\n backgroundColor: styleGuide.color.white,\n color: theme.palette.info.main,\n boxShadow: theme.styles.defaultBoxShadow,\n \"&:hover\": {\n backgroundColor: theme.palette.info.main,\n color: styleGuide.color.white,\n },\n },\n badge: {\n right: -4,\n top: -4,\n },\n });\n});\n\nexport default function Notifications() {\n const classes = useStyles();\n const { state, dispatch } = useNotificationContext();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const handleOpenNotification = (event: React.MouseEvent) => {\n postAnalyticsEvent(\"notification.click\");\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n const open = Boolean(anchorEl);\n\n useEffect(() => {\n if (!state.notificationStore.openTray) {\n handleClose();\n }\n }, [state.notificationStore.openTray]);\n\n return (\n <>\n {\n handleOpenNotification(e);\n !state.notificationStore.openTray && dispatchHandleTray(dispatch);\n }}\n color=\"inherit\"\n disableFocusRipple\n >\n \n \n \n \n \n \n );\n}\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default function RacenetEAIcon(props: SvgIconProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { NavLink } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport List from \"@material-ui/core/List\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { routingUrls } from \"settings\";\nimport FeedbackIcon from \"assets/icons/navBar/FeedbackIcon\";\nimport { getDesktopToolbarSpacing, layout, styleGuide } from \"theme\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useApplicationContext } from \"contexts/application/ApplicationContext\";\nimport NewTabLink from \"common/components/links/NewTabLink\";\nimport INavigationItem from \"../INavigationItem\";\nimport DesktopDropDown from \"./DesktopDropDown\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport Notifications from \"./notifications/Notifications\";\nimport ResponsiveSpacer from \"common/components/ResponsiveSpacer\";\nimport { AppBar, ITheme } from \"@material-ui/core\";\nimport RacenetEAIcon from \"assets/icons/RacenetEAIcon\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\n\nconst useStyles = makeStyles((theme: ITheme) => {\n const linkSelectionWidth = 4;\n\n const bodyContainerZIndex = theme.zIndex.drawer + 1;\n\n const desktopToolbarSpacing = getDesktopToolbarSpacing(theme);\n\n const heightMediaQueries = {\n downMd: \"@media (max-height: 620px)\",\n downSm: \"@media (max-height: 520px)\",\n };\n\n return createStyles({\n drawer: {\n width: layout.sidebarWidth,\n \"& > *::-webkit-scrollbar\": {\n display: \"none\",\n },\n \"& -ms-overflow-style\": {\n display: \"none\",\n scrollbarWidth: \"none\",\n },\n \"& > *\": {\n scrollbarWidth: \"none\",\n },\n },\n drawerPaper: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n width: layout.sidebarWidth,\n border: \"none\",\n //backgroundColor: theme.sidebar.backgroundColor,\n backgroundColor: styleGuide.color.richBlack,\n color: styleGuide.color.white,\n },\n bracketNavItem: {\n marginTop: theme.spacing(2),\n flexShrink: 0,\n [heightMediaQueries.downMd]: {\n marginTop: theme.spacing(1),\n },\n [heightMediaQueries.downSm]: {\n marginTop: theme.spacing(0.5),\n },\n },\n feedback: {\n marginBottom: theme.spacing(2) + theme.styles.cssImportant,\n flexShrink: 0,\n [heightMediaQueries.downMd]: {\n marginBottom: theme.spacing(1) + theme.styles.cssImportant,\n },\n [heightMediaQueries.downSm]: {\n marginBottom: theme.spacing(0.5) + theme.styles.cssImportant,\n },\n [heightMediaQueries.downMd]: {\n fontSize: \"0.75rem\",\n },\n color: styleGuide.color.white,\n },\n feedbackIcon: {\n color: styleGuide.color.white,\n },\n list: {\n paddingTop: 0,\n paddingBottom: 0,\n \"& $navItem\": {\n transition: theme.styles.hoverEaseInOut,\n \"&:hover\": {\n backgroundColor: styleGuide.color.richGrey,\n },\n },\n },\n navItem: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n \"&:hover\": {\n \"&$bracketNavItem\": {\n opacity: theme.styles.defaultHoverOpacity,\n },\n },\n fontSize: \"1.8rem\",\n padding: `${theme.spacing(2)}px ${theme.spacing(1.75)}px`,\n [theme.breakpoints.down(\"md\")]: {\n fontSize: \"1.7rem\",\n padding: `${theme.spacing(1.5)}px ${theme.spacing(1.25)}px`,\n },\n [theme.breakpoints.down(\"sm\")]: {\n padding: `${theme.spacing(1.25)}px ${theme.spacing(1)}px`,\n fontSize: \"1.7rem\",\n },\n },\n navItemIconContainer: {\n transition: theme.transitions.create(\"all\", {\n duration: theme.transitions.duration.standard,\n easing: theme.transitions.easing.easeInOut,\n }),\n borderRadius: theme.styles.borderRadiusXs,\n display: \"flex\",\n },\n navItemText: {\n [heightMediaQueries.downMd]: {\n fontSize: \"0.75rem\",\n },\n },\n icon: {\n color: theme.sidebar.logoColor,\n },\n info: {\n color: theme.palette.info.main,\n },\n activeNavLink: {\n background: styleGuide.color.periwinkle,\n color: `${styleGuide.color.richBlack} !important`,\n backgroundSize: \"100%\",\n \"&:hover\": {\n backgroundColor: `${styleGuide.color.periwinkle} !important`,\n },\n },\n linkSelector: {\n width: linkSelectionWidth * 2,\n height: \"100%\",\n backgroundColor: theme.palette.primary.contrastText,\n position: \"absolute\",\n left: -linkSelectionWidth * 2,\n top: 0,\n borderBottomRightRadius: linkSelectionWidth,\n borderTopRightRadius: linkSelectionWidth,\n },\n settingsDropdown: {\n display: \"flex\",\n flexDirection: \"row\",\n boxShadow: \"none\",\n top: desktopToolbarSpacing.horizontal,\n right: desktopToolbarSpacing.vertical + layout.scrollbarWidth,\n zIndex: bodyContainerZIndex + 2,\n minWidth: 200,\n width: \"unset\",\n border: \"none\",\n },\n });\n});\n\ninterface IProps {\n items: INavigationItem[];\n}\n\nexport default function DesktopNavigation(props: IProps) {\n const { items } = props;\n const classes = useStyles();\n\n const applicationContext = useApplicationContext();\n\n const navList = (\n \n {items.map((item, i) => {\n const { href, icon, label, matchExactPath = false } = item;\n return (\n \n
\n
{icon}
\n \n {label}\n \n \n );\n })}\n \n );\n\n return (\n
\n \n
\n \n \n \n {navList}\n
\n {typeof applicationContext?.state.applicationStore.surveyUrl === \"undefined\" ||\n applicationContext.state.applicationStore.surveyUrl === \"\" ? (\n
\n ) : (\n \n \n \n Feedback\n \n \n )}\n \n \n
\n \n
\n \n \n
\n
\n );\n}\n\nexport const DesktopNavigationToolbar = () => {\n const isMobile = useIsMobile() || isRaceNetMobileApp || isRaceNetTabletApp;\n const theme = useTheme();\n const desktopToolbarSpacing = getDesktopToolbarSpacing(theme);\n\n return isMobile ? null : (\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"popover_root__1LkRj\"};","import CircularProgress, { CircularProgressProps } from \"@material-ui/core/CircularProgress\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core\";\n\nexport interface IStyledCircularProgressProps extends CircularProgressProps {}\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: {\n color: theme.palette.info.main,\n },\n });\n});\n\nexport default function StyledCircularProgress(props: IStyledCircularProgressProps) {\n const classes = useStyles();\n\n return ;\n}\n","import LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport { Theme, createStyles, makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport ExclamationIcon from \"assets/icons/ExclamationIcon\";\nimport useIsMobile from \"hooks/useIsMobile\";\nimport TickIcon from \"pages/gamesStats/WRC2023/components/rallyTV/icons/TickIcon\";\nimport { useEffect, useState } from \"react\";\nimport { layout, styleGuide } from \"theme\";\n\nexport const snackbarNotificationEventName = \"racenet_app_snackbar_notification_event\";\nexport type AppSnackbarType = \"success\" | \"error\";\n\nexport interface IAppEventDetails {\n content: any;\n callback?: Function;\n snackbarDurationMs?: number;\n type?: AppSnackbarType;\n minHeight?: number;\n}\n\nconst useStyles = (isMobile: boolean) =>\n makeStyles((theme: Theme) =>\n createStyles({\n root: {\n left: isMobile ? styleGuide.spacing(2) : layout.sidebarWidth + styleGuide.spacing(2),\n right: isMobile ? styleGuide.spacing(2) : \"inherit\",\n bottom: styleGuide.spacing(2),\n minWidth: 200,\n borderRadius: styleGuide.spacing(),\n overflow: \"hidden\",\n backgroundColor: \"transparent\",\n },\n })\n );\n\nconst SnackbarDurationMs = 3000;\nconst Interval = 500;\n\nconst AppSnackbar = () => {\n const isMobile = useIsMobile();\n const classes = useStyles(isMobile)();\n\n const [showSnackbar, setShowSnackbar] = useState(false);\n const [eventContent, setEventContent] = useState();\n const [progress, setProgress] = useState(0);\n\n const CustomLinearProgress = withStyles((theme) => ({\n root: {\n backgroundColor: eventContent?.type === \"error\" ? styleGuide.color.richBlack : \"#75D05466\",\n },\n bar: {\n backgroundColor: eventContent?.type === \"error\" ? styleGuide.color.red : \"#75D054\",\n },\n }))(LinearProgress);\n\n const handleClose = () => {\n setShowSnackbar(false);\n if (eventContent?.callback) {\n eventContent.callback();\n }\n };\n\n useEffect(() => {\n window.addEventListener(snackbarNotificationEventName, (event) => {\n setEventContent((event as CustomEvent)?.detail);\n event.stopPropagation();\n setShowSnackbar(true);\n });\n\n return function cleanup() {\n window.removeEventListener(snackbarNotificationEventName, () => {});\n };\n }, []);\n\n useEffect(() => {\n if (!showSnackbar) {\n setProgress(0);\n return;\n }\n\n const step = Math.ceil((Interval * 100) / (eventContent?.snackbarDurationMs ?? SnackbarDurationMs));\n const timer = setInterval(() => {\n setProgress((oldProgress) => {\n if (oldProgress >= 100) {\n return 0;\n }\n return Math.min(oldProgress + step, 100);\n });\n }, Interval);\n\n return () => {\n clearInterval(timer);\n };\n }, [showSnackbar]);\n\n return (\n \n \n \n
\n {eventContent?.type === \"error\" ? (\n \n ) : (\n \n )}\n {eventContent?.content}\n
\n
\n \n
\n
\n \n );\n};\n\nexport default AppSnackbar;\n","import Button, { IButtonProps } from \"./Button\";\n\ninterface IProps extends IButtonProps {\n href: string;\n}\n\nconst NewTabButton = ({\n variant = \"regular\",\n size = \"standard\",\n children,\n onClick,\n disabled = false,\n isMobile = false,\n customStyles,\n endIcon,\n startIcon,\n href,\n id,\n}: IProps) => {\n return (\n \n null}\n isMobile={isMobile}\n disabled={disabled}\n customStyles={customStyles}\n endIcon={endIcon}\n startIcon={startIcon}\n id={id}\n >\n {children}\n \n \n );\n};\n\nexport default NewTabButton;\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nexport default function ProfileIcon(props: SvgIconProps) {\n return (\n \n \n \n \n \n \n );\n}\n","import { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport IconButton, { IconButtonProps } from \"@material-ui/core/IconButton\";\nimport clsx from \"clsx\";\nimport CachedIcon from \"@material-ui/icons/Cached\";\nimport { ITheme } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: ITheme) =>\n createStyles({\n \"@keyframes spin\": {\n from: { transform: \"rotate(0deg)\" },\n to: { transform: \"rotate(-360deg)\" },\n },\n rotate: {\n animation: \"$spin 1s infinite linear\",\n },\n buttonColor: {\n color: theme.palette.text.secondary,\n },\n disabled: {\n color: theme.palette.info.light + theme.styles.cssImportant,\n },\n })\n);\n\ninterface IProps extends IconButtonProps {\n loading: boolean;\n}\n\nexport default function RefreshButton({ onClick, loading, disabled = false, ...rest }: IProps) {\n const classes = useStyles();\n\n return (\n \n \n \n );\n}\n","import { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport StyledButton, { IStyledButtonProps } from \"./StyledButton\";\nimport clsx from \"clsx\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst useStyles = makeStyles((theme: Theme) => {\n return createStyles({\n root: { position: \"relative\" },\n buttonProgress: {\n color: theme.palette.primary.main,\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n marginTop: -12,\n marginLeft: -12,\n },\n });\n});\n\ninterface IProps extends IStyledButtonProps {\n isLoading: boolean;\n}\n\nexport default function LoadableButton(props: IProps) {\n const classes = useStyles();\n const { children, isLoading, disabled, className, ...rest } = props;\n\n return (\n \n {children}\n {isLoading && }\n \n );\n}\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nconst TrophyIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TrophyIcon;\n","import Typography from \"@material-ui/core/Typography\";\nimport Img from \"common/components/img/Img\";\nimport { forwardRef } from \"react\";\nimport { styleGuide } from \"theme\";\n\ninterface IProps {\n isMobile: boolean;\n cdnPath: string;\n playStore: string;\n iOsUrl: string;\n description: string;\n id: string;\n}\n\nconst SectionRacenetApp = forwardRef(({ isMobile, cdnPath, iOsUrl, playStore, description, id }: IProps, ref: any) => {\n const handleRedirectToPlayStore = () => {\n window.open(playStore, \"_blank\");\n };\n\n const handleRedirectToAppStore = () => {\n window.open(iOsUrl, \"_blank\");\n };\n\n return (\n \n \n {isMobile && (\n \n {description}\n \n )}\n {!isMobile && (\n \n {description}\n \n )}\n \n \n \n
\n \n \n );\n});\n\nexport default SectionRacenetApp;\n","import { ReactElement } from \"react\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport Fade from \"@material-ui/core/Fade\";\n\ninterface IProps {\n hidden?: boolean;\n children: ReactElement;\n}\n\nexport default function HideableCard(props: IProps) {\n const { hidden, children } = props;\n\n const transitionTimeout = 800;\n\n return (\n \n \n {children}\n \n \n );\n}\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\nconst FriendIconNoCircle = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default FriendIconNoCircle;\n","export const loadTrustArcScript = () => {\n var elm, head;\n\n if (navigator.userAgent.indexOf(\"RaceNetMobileApp\") === -1) {\n head = document.getElementsByTagName(\"head\")[0] || document.body || document.documentElement;\n\n elm = document.createElement(\"script\");\n elm.src = \"//consent.trustarc.com/notice?domain=ea.com&c=teconsent&js=nj¬iceType=bb&text=true>m=1&pcookie\";\n head.appendChild(elm);\n }\n};\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nconst ExclamationIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ExclamationIcon;\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\n\nconst TickIcon = (props: SvgIconProps) => {\n return (\n \n \n \n );\n};\n\nexport default TickIcon;\n","import IWebAccpetanceTextResponse from \"apiServices/identity/responses/IWebAcceptanceTextResponse\";\n\nexport interface IWebAcceptanceText extends IWebAccpetanceTextResponse {}\n\nexport interface IWebAcceptanceStore {\n hasAcceptedTerms: boolean;\n acceptanceText?: IWebAcceptanceText;\n}\n\nexport const defaultWebAcceptanceStore: IWebAcceptanceStore = {\n hasAcceptedTerms: false,\n};\n","import PageCircularProgress from \"common/components/loaders/PageCircularProgress\";\nimport { useIdentityContext } from \"contexts/identity/IdentityContext\";\nimport React, { createContext, FunctionComponent, useContext, useEffect, useReducer, useState } from \"react\";\nimport { isRaceNetMobileApp, isRaceNetTabletApp } from \"utils/webViewTools\";\nimport { dispatchFetchWebAcceptanceText, dispatchSetWebAcceptance, webAcceptanceReducer } from \"./WebAcceptanceActions\";\nimport { defaultWebAcceptanceStore, IWebAcceptanceStore } from \"./WebAcceptanceStore\";\n\nconst WebAcceptancePage = React.lazy(() => import(\"pages/webAcceptance/WebAcceptancePage\"));\n\nconst WebAcceptanceContext = createContext<{ state: IWebAcceptanceStore; dispatch: React.Dispatch }>({\n state: defaultWebAcceptanceStore,\n dispatch: () => null,\n});\n\nexport const WebAcceptanceContextProvider: FunctionComponent = ({ children }) => {\n const identityWebAcceptance = useIdentityContext().state.identity.isTermsAccepted;\n\n const [state, dispatch] = useReducer(webAcceptanceReducer, defaultWebAcceptanceStore);\n const [loader, setLoader] = useState(true);\n\n useEffect(() => {\n if (isRaceNetMobileApp || isRaceNetTabletApp) {\n setLoader(false);\n return;\n }\n if (identityWebAcceptance === true) {\n dispatchSetWebAcceptance(dispatch, identityWebAcceptance);\n setLoader(false);\n return;\n }\n\n dispatchFetchWebAcceptanceText(dispatch).finally(() => {\n setLoader(false);\n });\n }, [identityWebAcceptance]);\n\n if (loader) return ;\n\n return (\n \n {state.hasAcceptedTerms || isRaceNetMobileApp || isRaceNetTabletApp ? (\n children\n ) : (\n }>\n \n \n )}\n \n );\n};\n\nexport const useWebAcceptanceContext = () => useContext(WebAcceptanceContext);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"scroll\":\"landing_scroll__34ygy\"};","var DragDropTouch;\n(function (DragDropTouch_1) {\n \"use strict\";\n /**\n * Object used to hold the data that is being dragged during drag and drop operations.\n *\n * It may hold one or more data items of different types. For more information about\n * drag and drop operations and data transfer objects, see\n * HTML Drag and Drop API.\n *\n * This object is created automatically by the @see:DragDropTouch singleton and is\n * accessible through the @see:dataTransfer property of all drag events.\n */\n var DataTransfer = (function () {\n function DataTransfer() {\n this._dropEffect = \"move\";\n this._effectAllowed = \"all\";\n this._data = {};\n }\n Object.defineProperty(DataTransfer.prototype, \"dropEffect\", {\n /**\n * Gets or sets the type of drag-and-drop operation currently selected.\n * The value must be 'none', 'copy', 'link', or 'move'.\n */\n get: function () {\n return this._dropEffect;\n },\n set: function (value) {\n this._dropEffect = value;\n },\n enumerable: true,\n configurable: true,\n });\n Object.defineProperty(DataTransfer.prototype, \"effectAllowed\", {\n /**\n * Gets or sets the types of operations that are possible.\n * Must be one of 'none', 'copy', 'copyLink', 'copyMove', 'link',\n * 'linkMove', 'move', 'all' or 'uninitialized'.\n */\n get: function () {\n return this._effectAllowed;\n },\n set: function (value) {\n this._effectAllowed = value;\n },\n enumerable: true,\n configurable: true,\n });\n Object.defineProperty(DataTransfer.prototype, \"types\", {\n /**\n * Gets an array of strings giving the formats that were set in the @see:dragstart event.\n */\n get: function () {\n return Object.keys(this._data);\n },\n enumerable: true,\n configurable: true,\n });\n /**\n * Removes the data associated with a given type.\n *\n * The type argument is optional. If the type is empty or not specified, the data\n * associated with all types is removed. If data for the specified type does not exist,\n * or the data transfer contains no data, this method will have no effect.\n *\n * @param type Type of data to remove.\n */\n DataTransfer.prototype.clearData = function (type) {\n if (type != null) {\n delete this._data[type.toLowerCase()];\n } else {\n this._data = {};\n }\n };\n /**\n * Retrieves the data for a given type, or an empty string if data for that type does\n * not exist or the data transfer contains no data.\n *\n * @param type Type of data to retrieve.\n */\n DataTransfer.prototype.getData = function (type) {\n return this._data[type.toLowerCase()] || \"\";\n };\n /**\n * Set the data for a given type.\n *\n * For a list of recommended drag types, please see\n * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types.\n *\n * @param type Type of data to add.\n * @param value Data to add.\n */\n DataTransfer.prototype.setData = function (type, value) {\n this._data[type.toLowerCase()] = value;\n };\n /**\n * Set the image to be used for dragging if a custom one is desired.\n *\n * @param img An image element to use as the drag feedback image.\n * @param offsetX The horizontal offset within the image.\n * @param offsetY The vertical offset within the image.\n */\n DataTransfer.prototype.setDragImage = function (img, offsetX, offsetY) {\n var ddt = DragDropTouch._instance;\n ddt._imgCustom = img;\n ddt._imgOffset = { x: offsetX, y: offsetY };\n };\n return DataTransfer;\n })();\n DragDropTouch_1.DataTransfer = DataTransfer;\n /**\n * Defines a class that adds support for touch-based HTML5 drag/drop operations.\n *\n * The @see:DragDropTouch class listens to touch events and raises the\n * appropriate HTML5 drag/drop events as if the events had been caused\n * by mouse actions.\n *\n * The purpose of this class is to enable using existing, standard HTML5\n * drag/drop code on mobile devices running IOS or Android.\n *\n * To use, include the DragDropTouch.js file on the page. The class will\n * automatically start monitoring touch events and will raise the HTML5\n * drag drop events (dragstart, dragenter, dragleave, drop, dragend) which\n * should be handled by the application.\n *\n * For details and examples on HTML drag and drop, see\n * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations.\n */\n var DragDropTouch = (function () {\n /**\n * Initializes the single instance of the @see:DragDropTouch class.\n */\n function DragDropTouch() {\n this._lastClick = 0;\n // enforce singleton pattern\n if (DragDropTouch._instance) {\n throw \"DragDropTouch instance already created.\";\n }\n // detect passive event support\n // https://github.com/Modernizr/Modernizr/issues/1894\n var supportsPassive = false;\n document.addEventListener(\"test\", function () {}, {\n get passive() {\n supportsPassive = true;\n return true;\n },\n });\n // listen to touch events\n if (navigator.maxTouchPoints) {\n var d = document,\n ts = this._touchstart.bind(this),\n tm = this._touchmove.bind(this),\n te = this._touchend.bind(this),\n opt = supportsPassive ? { passive: false, capture: false } : false;\n d.addEventListener(\"touchstart\", ts, opt);\n d.addEventListener(\"touchmove\", tm, opt);\n d.addEventListener(\"touchend\", te);\n d.addEventListener(\"touchcancel\", te);\n }\n }\n /**\n * Gets a reference to the @see:DragDropTouch singleton.\n */\n DragDropTouch.getInstance = function () {\n return DragDropTouch._instance;\n };\n // ** event handlers\n DragDropTouch.prototype._touchstart = function (e) {\n var _this = this;\n if (this._shouldHandle(e)) {\n // raise double-click and prevent zooming\n if (Date.now() - this._lastClick < DragDropTouch._DBLCLICK) {\n if (this._dispatchEvent(e, \"dblclick\", e.target)) {\n e.preventDefault();\n this._reset();\n return;\n }\n }\n // clear all variables\n this._reset();\n // get nearest draggable element\n var src = this._closestDraggable(e.target);\n if (src) {\n // give caller a chance to handle the hover/move events\n if (\n !this._dispatchEvent(e, \"mousemove\", e.target) &&\n !this._dispatchEvent(e, \"mousedown\", e.target)\n ) {\n // get ready to start dragging\n this._dragSource = src;\n this._ptDown = this._getPoint(e);\n this._lastTouch = e;\n e.preventDefault();\n // show context menu if the user hasn't started dragging after a while\n setTimeout(function () {\n if (_this._dragSource == src && _this._img == null) {\n if (_this._dispatchEvent(e, \"contextmenu\", src)) {\n _this._reset();\n }\n }\n }, DragDropTouch._CTXMENU);\n if (DragDropTouch._ISPRESSHOLDMODE) {\n this._pressHoldInterval = setTimeout(function () {\n _this._isDragEnabled = true;\n _this._touchmove(e);\n }, DragDropTouch._PRESSHOLDAWAIT);\n }\n }\n }\n }\n };\n DragDropTouch.prototype._touchmove = function (e) {\n if (this._shouldCancelPressHoldMove(e)) {\n this._reset();\n return;\n }\n if (this._shouldHandleMove(e) || this._shouldHandlePressHoldMove(e)) {\n // see if target wants to handle move\n var target = this._getTarget(e);\n if (this._dispatchEvent(e, \"mousemove\", target)) {\n this._lastTouch = e;\n e.preventDefault();\n return;\n }\n // start dragging\n if (this._dragSource && !this._img && this._shouldStartDragging(e)) {\n this._dispatchEvent(e, \"dragstart\", this._dragSource);\n this._createImage(e);\n this._dispatchEvent(e, \"dragenter\", target);\n }\n // continue dragging\n if (this._img) {\n this._lastTouch = e;\n e.preventDefault(); // prevent scrolling\n this._dispatchEvent(e, \"drag\", this._dragSource);\n if (target != this._lastTarget) {\n this._dispatchEvent(this._lastTouch, \"dragleave\", this._lastTarget);\n this._dispatchEvent(e, \"dragenter\", target);\n this._lastTarget = target;\n }\n this._moveImage(e);\n this._isDropZone = this._dispatchEvent(e, \"dragover\", target);\n }\n }\n };\n DragDropTouch.prototype._touchend = function (e) {\n if (this._shouldHandle(e)) {\n // see if target wants to handle up\n if (this._dispatchEvent(this._lastTouch, \"mouseup\", e.target)) {\n e.preventDefault();\n return;\n }\n // user clicked the element but didn't drag, so clear the source and simulate a click\n if (!this._img) {\n this._dragSource = null;\n this._dispatchEvent(this._lastTouch, \"click\", e.target);\n this._lastClick = Date.now();\n }\n // finish dragging\n this._destroyImage();\n if (this._dragSource) {\n if (e.type.indexOf(\"cancel\") < 0 && this._isDropZone) {\n this._dispatchEvent(this._lastTouch, \"drop\", this._lastTarget);\n }\n this._dispatchEvent(this._lastTouch, \"dragend\", this._dragSource);\n this._reset();\n }\n }\n };\n // ** utilities\n // ignore events that have been handled or that involve more than one touch\n DragDropTouch.prototype._shouldHandle = function (e) {\n return e && !e.defaultPrevented && e.touches && e.touches.length < 2;\n };\n\n // use regular condition outside of press & hold mode\n DragDropTouch.prototype._shouldHandleMove = function (e) {\n return !DragDropTouch._ISPRESSHOLDMODE && this._shouldHandle(e);\n };\n\n // allow to handle moves that involve many touches for press & hold\n DragDropTouch.prototype._shouldHandlePressHoldMove = function (e) {\n return DragDropTouch._ISPRESSHOLDMODE && this._isDragEnabled && e && e.touches && e.touches.length;\n };\n\n // reset data if user drags without pressing & holding\n DragDropTouch.prototype._shouldCancelPressHoldMove = function (e) {\n return (\n DragDropTouch._ISPRESSHOLDMODE &&\n !this._isDragEnabled &&\n this._getDelta(e) > DragDropTouch._PRESSHOLDMARGIN\n );\n };\n\n // start dragging when specified delta is detected\n DragDropTouch.prototype._shouldStartDragging = function (e) {\n var delta = this._getDelta(e);\n return (\n delta > DragDropTouch._THRESHOLD ||\n (DragDropTouch._ISPRESSHOLDMODE && delta >= DragDropTouch._PRESSHOLDTHRESHOLD)\n );\n };\n\n // clear all members\n DragDropTouch.prototype._reset = function () {\n this._destroyImage();\n this._dragSource = null;\n this._lastTouch = null;\n this._lastTarget = null;\n this._ptDown = null;\n this._isDragEnabled = false;\n this._isDropZone = false;\n this._dataTransfer = new DataTransfer();\n clearInterval(this._pressHoldInterval);\n };\n // get point for a touch event\n DragDropTouch.prototype._getPoint = function (e, page) {\n if (e && e.touches) {\n e = e.touches[0];\n }\n return { x: page ? e.pageX : e.clientX, y: page ? e.pageY : e.clientY };\n };\n // get distance between the current touch event and the first one\n DragDropTouch.prototype._getDelta = function (e) {\n if (DragDropTouch._ISPRESSHOLDMODE && !this._ptDown) {\n return 0;\n }\n var p = this._getPoint(e);\n return Math.abs(p.x - this._ptDown.x) + Math.abs(p.y - this._ptDown.y);\n };\n // get the element at a given touch event\n DragDropTouch.prototype._getTarget = function (e) {\n var pt = this._getPoint(e),\n el = document.elementFromPoint(pt.x, pt.y);\n while (el && getComputedStyle(el).pointerEvents == \"none\") {\n el = el.parentElement;\n }\n return el;\n };\n // create drag image from source element\n DragDropTouch.prototype._createImage = function (e) {\n // just in case...\n if (this._img) {\n this._destroyImage();\n }\n // create drag image from custom element or drag source\n var src = this._imgCustom || this._dragSource;\n this._img = src.cloneNode(true);\n this._copyStyle(src, this._img);\n this._img.style.top = this._img.style.left = \"-9999px\";\n // if creating from drag source, apply offset and opacity\n if (!this._imgCustom) {\n var rc = src.getBoundingClientRect(),\n pt = this._getPoint(e);\n this._imgOffset = { x: pt.x - rc.left, y: pt.y - rc.top };\n this._img.style.opacity = DragDropTouch._OPACITY.toString();\n }\n // add image to document\n this._moveImage(e);\n document.body.appendChild(this._img);\n };\n // dispose of drag image element\n DragDropTouch.prototype._destroyImage = function () {\n if (this._img && this._img.parentElement) {\n this._img.parentElement.removeChild(this._img);\n }\n this._img = null;\n this._imgCustom = null;\n };\n // move the drag image element\n DragDropTouch.prototype._moveImage = function (e) {\n var _this = this;\n requestAnimationFrame(function () {\n if (_this._img) {\n var pt = _this._getPoint(e, true),\n s = _this._img.style;\n s.position = \"absolute\";\n s.pointerEvents = \"none\";\n s.zIndex = \"999999\";\n s.left = Math.round(pt.x - _this._imgOffset.x) + \"px\";\n s.top = Math.round(pt.y - _this._imgOffset.y) + \"px\";\n }\n });\n };\n // copy properties from an object to another\n DragDropTouch.prototype._copyProps = function (dst, src, props) {\n for (var i = 0; i < props.length; i++) {\n var p = props[i];\n dst[p] = src[p];\n }\n };\n DragDropTouch.prototype._copyStyle = function (src, dst) {\n // remove potentially troublesome attributes\n DragDropTouch._rmvAtts.forEach(function (att) {\n dst.removeAttribute(att);\n });\n // copy canvas content\n if (src instanceof HTMLCanvasElement) {\n var cSrc = src,\n cDst = dst;\n cDst.width = cSrc.width;\n cDst.height = cSrc.height;\n cDst.getContext(\"2d\").drawImage(cSrc, 0, 0);\n }\n // copy style (without transitions)\n var cs = getComputedStyle(src);\n for (var i = 0; i < cs.length; i++) {\n var key = cs[i];\n if (key.indexOf(\"transition\") < 0) {\n dst.style[key] = cs[key];\n }\n }\n dst.style.pointerEvents = \"none\";\n // and repeat for all children\n for (var i = 0; i < src.children.length; i++) {\n this._copyStyle(src.children[i], dst.children[i]);\n }\n };\n DragDropTouch.prototype._dispatchEvent = function (e, type, target) {\n if (e && target) {\n var evt = document.createEvent(\"Event\"),\n t = e.touches ? e.touches[0] : e;\n evt.initEvent(type, true, true);\n evt.button = 0;\n evt.which = evt.buttons = 1;\n this._copyProps(evt, e, DragDropTouch._kbdProps);\n this._copyProps(evt, t, DragDropTouch._ptProps);\n evt.dataTransfer = this._dataTransfer;\n target.dispatchEvent(evt);\n return evt.defaultPrevented;\n }\n return false;\n };\n // gets an element's closest draggable ancestor\n DragDropTouch.prototype._closestDraggable = function (e) {\n for (; e; e = e.parentElement) {\n if (e.hasAttribute(\"draggable\") && e.draggable) {\n return e;\n }\n }\n return null;\n };\n return DragDropTouch;\n })();\n /*private*/ DragDropTouch._instance = new DragDropTouch(); // singleton\n // constants\n DragDropTouch._THRESHOLD = 5; // pixels to move before drag starts\n DragDropTouch._OPACITY = 0.5; // drag image opacity\n DragDropTouch._DBLCLICK = 500; // max ms between clicks in a double click\n DragDropTouch._CTXMENU = 900; // ms to hold before raising 'contextmenu' event\n DragDropTouch._ISPRESSHOLDMODE = false; // decides of press & hold mode presence\n DragDropTouch._PRESSHOLDAWAIT = 400; // ms to wait before press & hold is detected\n DragDropTouch._PRESSHOLDMARGIN = 25; // pixels that finger might shiver while pressing\n DragDropTouch._PRESSHOLDTHRESHOLD = 0; // pixels to move before drag starts\n // copy styles/attributes from drag source to drag image element\n DragDropTouch._rmvAtts = \"id,class,style,draggable\".split(\",\");\n // synthesize and dispatch an event\n // returns true if the event has been handled (e.preventDefault == true)\n DragDropTouch._kbdProps = \"altKey,ctrlKey,metaKey,shiftKey\".split(\",\");\n DragDropTouch._ptProps = \"pageX,pageY,clientX,clientY,screenX,screenY,offsetX,offsetY\".split(\",\");\n DragDropTouch_1.DragDropTouch = DragDropTouch;\n})(DragDropTouch || (DragDropTouch = {}));\n"],"sourceRoot":""}