{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/app/components/ui/Image.js","webpack:///./src/app/components/WeatherWidget.js","webpack:///./assets/images/social-media/instagram-menu.svg","webpack:///./src/app/App.js","webpack:///./src/store/author.js","webpack:///./src/app/components/ui/Tabs.style.js","webpack:///./src/app/components/ui/Tabs.js","webpack:///./src/app/components/ui/CSSAccordion.js","webpack:///./assets/images/icons/search-ico.svg","webpack:///../common/lib/ion-article/distribution/ion-article.js","webpack:///./src/lib/useScrollDirection.js","webpack:///./src/app/shell/CommercialNav.js","webpack:///./src/app/components/NotificationsBell.js","webpack:///./src/app/shell/SiteHeader.js","webpack:///./src/app/shell/NavBar.js","webpack:///./src/app/components/ui/NavLink.js","webpack:///./src/app/shell/MobileSearchBar.js","webpack:///./src/app/shell/MobileHeader.js","webpack:///./src/app/shell/MobileArticleHeader.js","webpack:///./src/app/components/ui/Drawer.js","webpack:///./src/app/shell/HamburgerNav.js","webpack:///./src/app/shell/Header.js","webpack:///../common/components/ion-navchevron/distribution/navPath.js","webpack:///../common/components/ion-popup/distribution/Popup.js","webpack:///./src/app/components/ui/utils.js","webpack:///../common/lib/ion-util/distribution/ion-util.js","webpack:///./assets/images/general/push-notifications.svg","webpack:///./assets/images/social-media/facebook-wht.svg","webpack:///./assets/images/weather/pcloudy.svg","webpack:///./assets/images/social-media/linkedin-menu.svg","webpack:///./assets/images/general/iol-wht.svg","webpack:///./assets/images/icons/weather.svg","webpack:///../common/lib/redux-beacon-Chartbeat/distribution/index.js","webpack:///../common/components/ion-navchevron/distribution/NavLink.js","webpack:///./assets/images/weather/thunder.svg","webpack:///./src/lib/articleUtils.js","webpack:///./assets/images/general/no-image.png","webpack:///./assets/images/social-media/youtube-menu.svg","webpack:///./src/store/digiserts.js","webpack:///./src/app/components/Ad.js","webpack:///./src/lib/cache.js","webpack:///./src/store/user.js","webpack:///./assets/images/weather/cloudy.svg","webpack:///./src/app/components/NewsletterSubscribePopup.js","webpack:///../common/lib/ion-sections/distribution/ion-sections.js","webpack:///./src/store/articles.js","webpack:///../common/lib/ion-article/distribution/parse-article.js","webpack:///./src/store/otherPublications.js","webpack:///./src/client/client-cache.js","webpack:///./src/store/events.js","webpack:///./src/store/weather.js","webpack:///./src/store/rootReducer.js","webpack:///./src/store/createStore.js","webpack:///./src/store/sagas.js","webpack:///./src/client/index.js","webpack:///./src/store/app.js","webpack:///../common/lib/redux-beacon-IONAnalytics/distribution/index.js","webpack:///../common/components/ion-navchevron/distribution/NavChevron.js","webpack:///./assets/images/weather/sunrise.svg","webpack:///./src/app/components/AdFormats.js","webpack:///./assets/images/icons/arrow-up.svg","webpack:///./assets/images/general/iol-logo.svg","webpack:///./assets/images/social-media/share.svg","webpack:///./assets/images/icons/notifications-ico.svg","webpack:///../common/lib/ion-cache/distribution/src/memory-cache.js","webpack:///./src/app/components/ui/cssfxUnderline.js","webpack:///./assets/images/social-media/facebook.svg","webpack:///../common/lib/ion-cache/distribution/src/cache.js","webpack:///./assets/images/icons/bookmarked-ico.svg","webpack:///./assets/images/weather/windy.svg","webpack:///./src/theme/default.js","webpack:///./src/lib/ionPostAnalytics.js","webpack:///./assets/images/weather/rain.svg","webpack:///../common/lib/ion-article/distribution/BaobabParagraphs.js","webpack:///./assets/images/icons/tiktok.svg","webpack:///./src/store/article.js","webpack:///./src/app/components/PushPrompt.js","webpack:///../common/components/ion-ads/distribution/useHasMounted.js","webpack:///./assets/images/social-media/facebook-menu.svg","webpack:///./assets/images/weather/sunny.svg","webpack:///../common/lib/ion-betaDates/distribution/ion-betaDates.js","webpack:///./assets/images/icons/menu-ico.svg","webpack:///./src/store/staticPage.js","webpack:///./src/store/editorsChoice.js","webpack:///./assets/images/general/iol.svg","webpack:///./src/store/mostReadArticles.js","webpack:///./src/store/subscribe.js","webpack:///./src/lib/useHasMounted.js","webpack:///./src/app/pages/ErrorBoundaryErrorPage.js","webpack:///./assets/images/social-media/rss-wht.svg","webpack:///./src/store/authors.js","webpack:///./src/client/db.js","webpack:///../common/components/ion-media/distribution/Media.js","webpack:///./assets/images/social-media/instagram-wht.svg","webpack:///./src/app/components/ui/Link.js","webpack:///./src/lib/deepCompare.js","webpack:///./src/store/trends.js","webpack:///./src/app/components/MobileArticleShare.js","webpack:///./src/app/shell/Footer.js","webpack:///./assets/images/icons/close-btn.svg","webpack:///./assets/images/social-media/rss-menu.svg","webpack:///./assets/images/icons/app-store.svg","webpack:///./src/store/trendingArticles.js","webpack:///./assets/images/social-media/x.svg","webpack:///./src/store/feedback.js","webpack:///./src/app/ServiceWorker.js","webpack:///../common/lib/ion-cache/distribution/cache.js","webpack:///./assets/images/icons/search-input-wht-ico.svg","webpack:///./src/app/components/Skeletons.js","webpack:///./assets/images/icons/bookmark-ico.svg","webpack:///../common/components/ion-ads/distribution/Ads.js","webpack:///./assets/images/social-media/youtube-wht.svg","webpack:///./assets/images/icons/google-play.svg","webpack:///./src/app/components/election/municipalitiesMapping.js","webpack:///./src/store/elections.js","webpack:///./src/theme/GlobalStyle.js","webpack:///./assets/images/icons/arrow-left-ltgrey.svg","webpack:///./assets/images/social-media/x-wht.svg","webpack:///../common/lib/redux-beacon-postIONAnalytics/distribution/index.js","webpack:///../common/components/ion-image/distribution/ion-image.js","webpack:///./src/app/components/ui/ScrollToTop.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","11","exports","module","l","e","promises","Promise","resolve","reject","href","fullhref","p","existingLinkTags","document","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","jsonpScriptSrc","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","head","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","StyledImage","styled","props","lazy","system","pictures","sunny","windy","cloudy","pcloudy","rain","thunder","getAffix","number","toString","WeatherDay","forecast","day","dateString","Date","Intl","DateTimeFormat","weekday","format","getDate","getDay","div","className","borderWidth","sm","lg","borderStyle","borderColor","wAdD","article","gridColumn","mb","display","alignItems","justifyContent","img","Day","Weather","Picture","title","Description","mr","w","text","textAlign","Temperature","Max","Min","ComboBox","locations","setLocation","useState","items","setItems","useEffect","useCombobox","itemToString","item","StationName","onSelectedItemChange","changes","selectedItem","onInputValueChange","inputValue","filter","toLowerCase","startsWith","isOpen","getToggleButtonProps","getMenuProps","getInputProps","getComboboxProps","getItemProps","highlightedIndex","position","my","border","input","placeholder","button","right","aria-label","ul","top","h","overflow","bg","zIndex","map","index","li","backgroundColor","_","hover","WeatherWidget","Forecast","useCookie","manualLocation","setManualLocation","location","setLocations","weather","setWeather","newLocation","slug","axios","resp","maxWidth","mx","mt","pb","flexDirection","h1","gridTemplateColumns","pt","fontWeight","Forecasts","ForecastDay0","pr","Visibility","Precipitation","ForecastDay1","ForecastDay2","ForecastDay3","ForecastDay4","ForecastDay5","ForecastDay6","sunrise","strong","Astrological","SunRise","span","Sunset","Home","loadable","fallback","DefaultSection","Article","MyNewsPage","StaticPage","SearchPage","CookieForm","AuthorSectionPage","VideoPage","BrandstoriesPage","TrendsPage","Feedback","NewslettersPage","Digiserts","NewspapersPage","AuthorsPage","BookmarksPage","PushNotificationsManagementPage","ErrorBoundary","state","hasError","errorInfo","this","children","React","Component","App","scrolling","setScrolling","toggleScrolling","isHydrated","useHasMounted","pageView","pathname","visitorId","theme","Theme","defaultTitle","process","lang","sizes","color","content","itemprop","logo","exact","path","render","thanksMessage","component","adPath","shareId","URLSearchParams","search","url","contentKey","query","twitterName","titleTemplate","page","match","params","description","sectionLabel","section","mostReadSection","authorSlug","author","strict","to","sessionId","enableSingleRequest","enableInterstitial","enableLazyLoad","enableMappings","enableAgeTarget","enableGenderTarget","enableArticleLevelTarget","enableSectionLevelTarget","mapStateToProps","app","getVisitorId","getSessionId","mapDispatchToProps","dispatch","bindActionCreators","withRouter","connect","watchFetchAuthor","cache","Cache","fetchAuthorAPI","response","set","log","fetchAuthorSaga","res","put","payload","takeLatest","fetchAuthor","isFetching","hasFetched","initialState","didInvalidate","lastFetch","is404","Reducer","assign","StyledSelectedTabButton","th","StyledTabButton","useTabState","selectedId","selected","setSelected","Tab","role","id","onTabChange","rest","ariaSelected","onClick","visible","AccordionItem","prefix","useRef","ref","label","borderRadius","htmlFor","current","checked","preventDefault","Accordion","_typeof","obj","iterator","constructor","parseArticle","_x","_parseArticle","arguments","_urlify","_interopRequireDefault","_parseArticle2","nodeInterop","_getRequireWildcardCache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","_interopRequireWildcard","_ionUtil","WeakMap","cacheBabelInterop","cacheNodeInterop","asyncGeneratorStep","gen","_next","_throw","arg","info","done","_asyncToGenerator","fn","self","args","_defineProperties","descriptor","configurable","writable","logger","urlify","addEToUmlauts","szToSs","spaces","nonPrintable","toLower","trim","TIMELINE_REGEX","instance","Constructor","TypeError","_classCallCheck","modified","toISOString","substring","published","bodyHTML","test","formatAbstract","relatedArticles","protoProps","staticProps","regex","string","other","replace","address","phone","phoneNumber","extractRegex","concat","externalUri","buildName","sectionId","category","warn","matcher","image","isEmpty","images","bodyLead","bodyMore","getImageObject","width","height","assert","headline","getSectionId","split","getUri","getName","_abstract","indexOf","endsWith","getAuthor","byline","credit","captions","Array","isArray","caption","formatImageCaption","formatImageCredit","youtube","youtubes","full","seconds","Math","floor","interval","formatDate","publishedString","parse","Number","isInteger","_short","toLocaleDateString","year","month","getCompetitionSlug","competitionSlug","competitionHTML","RegExp","timelineMatches","timelineSlugs","regeneratorRuntime","mark","_callee","rawArticle","wrap","_context","prev","next","abrupt","parseArticleData","stop","useScrollDirection","options","topDelay","scrollPos","direction","setDirection","handleScroll","cooldown","lastArgs","run","isOnCooldown","throttle","pageYOffset","abs","addEventListener","removeEventListener","CommercialNav","visibility","px","textTransform","fontSize","a","opacity","NotificationsBell","UnreadCount","setUnreadCount","NotificationsLastViewed","getCookie","db","messages","toArray","articles","timestamp","source","bellIcon","alt","lineHeight","HomeHeader","wallpaperActive","py","xl","flex","action","method","onSubmit","FormData","appearance","facebook","twitter","StyledNavBar","nav","user","useDown","borderTopWidth","borderBottomWidth","aria-haspopup","MyLink","isActive","locationUrl","_eventData","destinationUrl","referrerUrl","referrer","scrollDepth","scrollY","ionPostAnalytics","getPageType","SearchBar","closeHandler","searchRef","backGroundColor","formRef","handleFormFocusOut","useCallback","contains","relatedTarget","form","gridGap","searchGry","closeBtn","cursor","SearchBarPopup","searchOpened","left","__HeaderLink","activeColor","css","_HeaderLink","election","lastType","_MobileHeaderElements","mbElementsRef","clickSource","primarySection","secondarySection","navRef","scrollIntoView","HeaderLink","isExact","overflowX","whiteSpace","gap","borderRightWidth","borderRightStyle","borderRightColor","backArrow","MobileHeaderElements","memo","MobileHeader","setSearchOpened","searchBox","mbElements","focus","getElementsByClassName","behavior","block","inline","boxShadow","minWidth","titleLabel","getSectionLabel","searchIco","isNavOpen","pl","toggleFontSize","bookmarked","setBookmarked","bm","entry","uuid","count","val","spaceX","where","equals","add","below","handleBookmark","articleBookmarked","articleBookmark","MobileArticleShare","link","canonicalUri","transforms","bottom","placements","DrawerWrapper","size","open","DrawerOverlay","DrawerContent","Drawer","close","defaultProps","HamburgerNav","setIsNavOpen","drawer","setIsOpen","toggle","useDrawer","MenuLink","openHandler","menu","placement","ml","arrowLeftLtGrey","erRadius","menuFB","menuT","menuI","menuL","menuY","menuRSS","areStatesEqual","nextOwnProps","prevOwnProps","sectionTitle","isMobile","useLocation","scrollDirection","isArticlePage","header","minHeight","transitionProperty","transitionTimingFunction","transitionDuration","SiteHeader","updateNavPath","navigateTo","NAVIGATE_TO","SET_NAVPATH","navPath","_react","_reactDom","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_slicedToArray","arr","_arrayWithHoles","_i","_s","_e","_arr","_n","_d","_iterableToArrayLimit","minLen","_arrayLikeToArray","from","_unsupportedIterableToArray","_nonIterableRest","len","arr2","Portal","_ref","_ref$rootId","rootId","_ref$className","_ref$el","el","appRootEl","getElementById","container","classList","createPortal","IonOverlay","_ref2","style","background","transition","_default","_ref3","_ref3$overlay","overlay","_ref3$placement","margin","padding","noOverlayStyle","placementStyle","isBrowser","setCookie","useLayoutEffect","optionsWithDefaults","days","expires","now","toUTCString","cookie","encodeURIComponent","initialValue","reduce","v","parts","decodeURIComponent","setItem","processError","status","headers","send","config","_axios","eventType","pageType","userId","titleKey","eventData","screenWidth","screenHeight","browser","outerWidth","outerHeight","navigator","userAgent","post","JSON","stringify","firstCall","default","events","pSUPERFLY","virtualPageURL","virtualPage","sections","authors","NavLink","_redux","_reactRouter","_reactRouterDom","_reactRedux","_navPath","_extends","super","handleClick","Urlify","ImageSizes","hero","featured","primary","slider","normal","getCanonical","getImageSize","getImage","videos","thumbnailURL","thumbnail","getTeaser","teaserHeadline","fetchDigisertsSaga","watchFetchDigiserts","fetchDigisertsAPI","fetchDigiserts","canonical","digiserts","meta","adSlotRegistered","setPath","hasHydrated","refreshTime","onSlotRenderEnded","ad","onSlotRequested","slotId","targeting","slot","getTargetingKeys","getTargeting","join","getAdUnitPath","mappings","sizeMapping","onAdSlotRegistered","deepCompare","_cache","setCache","aCache","USER_SET_VISITORID","sanitizeUserId","paywalled","userToken","registerSuccess","registerError","handleChange","updateForm","newState","handleCheckboxChange","toggleNewsletterSubscription","validateName","verifyCallback","captchaVerified","handleSubscribe","email","firstName","lastName","listIds","subscribeNewsletter","validateEmail","output","subscribe","reinitialize","NewsletterSubscribeCallToAction","isSubmitting","hasSubmitted","h2","encType","required","onChange","sitekey","isVisible","isSubscribePopupOpen","setIsSubscribePopupOpen","handleSubmit","onSubscribed","lastname","includes","handleIgnoreSubscription","toTitleCase","str","txt","charAt","toUpperCase","substr","url2section","articleUrl2section","pop","getBaseSectionLabel","urlPath","watchFetchArticles","FETCH_ARTICLES_SUCCESS","fetchArticlesAPI","offset","limit","contents","max","urlFilter","SERVER_URL","fetchFullArticlesAPI","fetchArticleAPI","fetchArticlesSaga","sectionsLabels","hasMore","authorName","fetchFullArticlesSaga","fetchMoreArticlesSaga","select","getArticles","takeEvery","getAllArticles","fetchFullArticles","fetchArticles","fetchMoreArticles","setSectionTitle","newPayload","isFetchingMore","hasFetchedMore","checkCanonical","parseSectionName","_x2","_parseArticleData","getHeadline","getSummaryData","_x7","_getSummaryData","_BaobabParagraphs","_parseSectionName","stripCharacters","stripHeadline","stripTags","_callee4","paragraphs","sourceRelatedArticles","_context4","sent","getAbstract","byLine","formatPublished","publishDate","mediaContainer","mediaLists","_callee3","media","_context3","resources","_ref4","_callee2","resource","_resource$imageURL$ma","_resource$imageURL$ma2","videoObject","_context2","mediaType","imageURL","translateImageResource","translateVideoResource","_x9","_x8","getBodyHTML","getParagraphs","getBodyLead","getBodyMore","relatedContent","relatedArticle","externalUrl","abstrct","summaryAbstract","summaryAbstractHTML","abstractHTML","summaryHeadline","html","paragraph","_index","_x3","_translateVideoResource","_callee5","videoMediaSrc","urlToArray","_context5","Requests","json","siteProps","videoServiceUrl","imageWidth","imageHeight","cropWidth","crop","cropHeight","x","cropOffsetX","y","cropOffsetY","focalPointX","focalPoint","focalPointY","date","body","elements","element","oembedContent","concatBodyElementsHtml","_x4","_getBodyLead","_callee6","_context6","formatHtml","reconstructBody","_x5","_getBodyMore","_callee7","_context7","_x6","_reconstructBody","_callee8","inlineImageMatch","_context8","formatBaobabVideo","formatInlineImage","_callee9","summary","_context9","video","watchFetchOtherPublicationsArticles","publication","fetchOtherPublicationsArticlesSaga","fetchOtherPublicationsArticles","newspapertitles","DoNothingCache","eventsMap","SECTION_PAGE_VIEW","firstRender","STATIC_PAGE_VIEW","HOME_PAGE_VIEW","PAGE_VIEW","OOVVUU_ARTICLE_RENDER","FETCH_ARTICLE_SUCCESS","host","tags","contentLength","count_words","contentFormat","subSection","videoViews","count_video","SOCIAL_SHARE_PLATFORM","socialShare","platform","EXPERIMENT_WIN","experiment","variant","ERROR_PAGE_VIEW","AD_BLOCKER","fetchWeatherSaga","watchFetchWeather","fetchWeatherAPI","combineReducers","mostReadArticles","trendingArticles","trends","staticPage","feedback","editorsChoice","otherPublications","elections","gtm","GoogleTagManager","offlineStorage","OfflineWeb","isConnected","middleWareElements","createBeaconMiddleware","IONAnalytics","beaconMiddleware","isServer","postIONAnalytics","Chartbeat","rootSaga","watchFetchArticleContent","watchFetchArticle","watchPreviewArticle","watchFetchMostReadArticles","watchTrendingArticles","watchFetchTrendsList","watchNavChanges","watchFeedback","watchPrecache","watchFetchStaticPage","watchSubscribe","watchSubmitCompetition","watchfetchEditorsChoiceArticles","watchFetchAuthors","watchElections","store","sagaMiddleware","createSagaMiddleware","devToolsCompose","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","rootReducer","applyMiddleware","runSaga","END","__PRELOADED_STATE__","find","row","updateConnectivity","startPath","loadableReady","hydrate","ServiceWorker","prefetchSaga","transitionTo","hideMenuSaga","pingSaga","recordPingToStats","setSubscription","subscription","errorPageView","homePageView","sectionPageView","staticPageView","setWallPaperActive","active","clearSlots","wallpaperCont","delay","showLastSlotRegistered","performSingleRequest","spawn","_pageType","setPageType","defaultState","showMenu","showSearch","adBlockerDetected","renderBlock","mostReadTab","_axios2","customVisitorId","random","duration","timeNow","getTime","catch","createUrlAndSend","_NavLink","NavChevron","handleNavClick","navid","lastIndexOf","showMe","Fragment","FORMATS","thirdParty","desktop","tablet","mobile","leaderboard","mobileLeaderboardSticky","leaderboardtop","inarticleLeaderboard","mpu","mpu600","teads","mpu600and250","wingbanner","wallpaper","wallpaperTop","wallpaperWing","interstitial","MAPPINGS","Leaderboard","MPU","Gutter","Mapping6","Interstitial","_createClass","MemoryCache","_Cache","_this","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","_store","subClass","superClass","setPrototypeOf","_inherits","async","ttl","_ttl","clean","_this2","delete","cssfxUnderline","SweepIn","hoverBGColor","hoverColor","SweepOut","colors","defaultTheme","white","whiteAlpha","grey","mdGrey","ltGrey","vltGrey","red","redAlpha","redPuzzles","blue","blueAlpha","ltBlue","divider","advert","advertText","tab","menuBot","indyPlusAdBord","indyPlusAdBG","orange","orangeAlpha","black","fontWeights","regular","medium","semiBold","bold","transformers","rpxTransformers","states","after","space","5","6","8","10","15","20","30","50","80","screens","wAdM","md","texts","h3","h4","h5","h6","xxlarge","xlarge","large","small","xsmall","xxsmall","xxxsmall","dropdown","breadcrumb","footerH6","fontFamily","textDecordation","before","trendLink","trendLinkDarMode","trendBadge","opinionHeading","drawers","backdrop","popovers","zOrder","popups","closeButton","horizontal","vertical","carousels","navigation","bullet","tabs","buttons","accordions","wrapper","marginBottom","imageWidths","reversedParagraphs","reverse","para","reverseIndex","sourceParaRegex","afpIndex","HtmlParagraphFormatter","formatter","removeParas","embeddedLinkStyleMatch","embeddedWholeLinkStyleMatch","inlineStyleRemove","embeddedIolLinkStyleMatch","embeddedNewslettersLinkStyleMatch","embeddedFacebookLinkStyleMatch","embeddedTwitterLinkStyleMatch","embeddedLinkedInLinkStyleMatch","newspaperLabels","getNewspaperSectionId","formatEmbeddedLink","formatPlain","formatSVG","_svgI","siteHost","paragaph","matchTwitter","resizeImages","widths","calc","ImageCalculator","resizeURL","imageTag","parseInt","imgOffsetX","offsetx","imgOffsetY","offsety","imgCropWidth","cropwidth","imgCropHeight","crops","imageCrop","round","parseFloat","sources","defaultSrc","calcHeight","getCropCoordsForShape","buildImageUrl","webPSrc","hdSrc","isMax","pictureTag","fetchCompetition","submitCompetitionAPI","formData","getTags","primaryTag","secondaryTags","fetchTimelines","slugs","TIMELINE_SERVER_URL","timeline","cards","timelineCards","card","timelineMarker","cardTitle","cardUrl","cardSubtitle","cardDetailedText","cardMediaAsset","mediaSourceUrl","tempData","promisesArray","acc","fetchCanonicalURL","CANONICAL_FETCHER_URL","fetchIonArticle","fetchArticleContentSaga","fetchVisitorId","localStorage","getItem","fetchArticleSaga","IonArticle","getCanonicalUri","getTimelineSlugs","timelines","competition","competitionExpired","imageUrl","canonicalResult","sectionSlug","authorArticles","hasAuthorPage","youMayLikeArticles","videoSources","mp4","setPreviewArticleSaga","submitCompetitionSaga","success","errors","articleUrlVerified","fetchArticle","setPreviewArticle","submitCompetition","setProcessedArticle","oovvuuArticleView","getSocialSharePlatform","mapArticleFields","partialArticle","hasProcessed","previewArticle","socialSharePlatform","isFullArticle","displayTag","preloaded","hasErrorSubmit","PrivatePushPrompt","userHasVisited","promptLater","setPromptLater","havePrompted","setPrompted","helpPopupVisible","setHelpPopupVisible","registration","getRegistration","pushManager","getSubscription","sub","handleLater","handleAllow","userVisibleOnly","applicationServerKey","urlB64ToUint8Array","iolBlocks","PushPrompt","ClientOnly","_excluded","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_React$useState2","hasMounted","setHasMounted","delegated","BetaTimestamps","formatAgo","isNaN","monthNames","defaultValue","timeStamp","formatDateString","dd","mmm","yyyy","hh","mm","monthName","getFullMonthName","fetchStaticPageAPI","pageName","fetchStaticPageSaga","fetchStaticPage","fetchEditorsChoiceArticlesSaga","fetchEditorsChoiceArticles","editorschoice","fetchMostReadArticlesSaga","fetchMostReadArticles","subscribeAPI","contact_name","contact_lastname","lists","hp","addNewsletterListIdsAPI","listId","toggleNewsletterSubscriptionAPI","subscribeSaga","ReloadButton","errorRetry","setErrorRetry","reload","main","fetchAuthorsAPI","authorsSlug","fetchAuthorsSaga","fetchAuthors","Dexie","version","stores","setDefaultWidth","getDefaultWidth","defaultWidth","TabletMobile","Tablet","MobileElse","Mobile","HagDesktop","GqGlamDesktop","DesktopTablet","DesktopElse","Desktop","_reactResponsive","values","deviceWidth","StyledLink","dataAuthor","data-author","getCircularReplacer","seen","WeakSet","b","fetchTrendsListSaga","fetchTrendsListApi","fetchTrendsList","navigatorSharePresent","setNavigatorSharePresent","canShare","articleShare","share","Sticky","Footer","mapping","footer","alignContent","logoWht","facebookWht","twitterWht","instagramWht","tiktokGrey","youtubeWht","rssWht","googlePlay","appStore","flexWrap","fetchTrendingArticlesSaga","fetchTrendingArticles","trendingarticles","feedbackAPI","feedbackSaga","initialise","submitFeedback","fullName","enquiryType","_registration","base64String","base64","repeat","rawData","atob","outputArray","Uint8Array","charCodeAt","ServiceWorkerNotifications","wb","Workbox","isUpdate","updatedURL","register","_cache2","_memoryCache2","TvBoxSkeleton","shape","noImage","NoImage","MostReadArticlesSkeleton","fill","MostReadWidgetSkeleton","List","ariaLabel","Panel","HomepageSkeleton","aside","DefaultSectionPageSkeleton","DefaultSectionPageSkeletonWrapper","ArticleDeckSkeleton","animation","last","ThreeArticleDeckSkeleton","ArticleFourRowSkeleton","spaceY","SixArticleDeckSkeleton","TvBoxSectionPageSkeleton","TvBoxSectionPageSkeletonWrapper","WeatherPageSkeleton","TitleSectionPageSkeleton","AuthorPageSkeleton","FollowConceptSkeleton","BlankPageSkeleton","BasicPageSkeleton","TrendsPageSkeleton","AuthorSkeleton","ArticlePageSkeleton","ArticlePageSkeletonWrapper","IonAd","IonAdSlot","_googletag","googletag","cmd","pubads","destroySlots","slots","refreshingSlots","disableAgeTarget","disableAnchorAds","enableAnchorAds","disableArticleLevelTarget","disableGenderTarget","disableInterstitial","disableMappings","disableSectionLevelTarget","getSlots","isAnchorAdsEnabled","_useHasMounted","_ionMedia","anchor","collapseEmptyDiv","__onSlotRenderEnded","_targeting","getOwnPropertyNames","_sizes","elem","__slotRequested","targetingKeys","secondsToWait","refresh","idx","defineOutOfPageSlot","enums","OutOfPageFormat","TOP_ANCHOR","BOTTOM_ANCHOR","INTERSTITIAL","addService","setConfig","triggers","navBar","unhideWindow","defineSlot","defineSizeMapping","setCollapseEmptyDiv","setTargeting","fetchMarginPercent","renderMarginPercent","mobileScaling","enableServices","adNotice","mpudynamic","mpusection","inarticle","municipalitiesMapping","ProvinceID","MunicipalityID","Municipality","SHOW_PROVINCE","VOTER_DETAILS","provinceIdToName","1","2","3","4","7","9","provincesAbrevToName","EC","FS","GT","KZN","MP","NC","LIM","NW","WC","provincesNameToAbrev","Gauteng","Mpumalanga","Limpopo","centerCoordinates","National","center","zoom","fetchAndCache","getElectionsTypeResults","resultsType","eventId","fetchRegionResultsApi","provinceId","fetchMunicipalityResultsApi","municipalityId","fetchVoterDetailsApi","fetchNPESeatCalculationResultsApi","fetchNPEBallotResultsApi","swapProvinceAbrevName","province","mapMunicipalityId","inputProvinceId","inputMunicName","aMunicipality","getNPESeatCalculationResults","getBallotResults","mapType","provinceName","municipalityName","provincialResults","nationalResults","electionYear","idNumber","voterDetails","ballotResults","seatCalculationResults","formOutput","getElectionsResults","results","resultsTypes","electionsTypeResult","fetchRegionResults","fetchMunicipalityResults","fetchVoterDetails","fetchNPEBallotResults","fetchNPESeatCalculationResults","ProvinceName","municipality","errorMessage","municipalResults","wardResults","GlobalStyle","createGlobalStyle","_ionUtil2","calcNodeSrcUrl","calcImageSrcUrl","ImageOrNoImage","AmpImageOrNoImage","AmpImage","_propTypes","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","_toPropertyKey","hint","prim","toPrimitive","String","_toPrimitive","calcShapeHeight","ceil","canUseWebP","getContext","toDataURL","useWebP","_calc$getCropCoordsFo","getCropsForShape","cropheight","_calc$getCropCoordsFo2","Image","focalpointx","focalpointy","loading","layout","_getCropsForShape","resizeUrl","focalCoordinate","sideSize","pointStart","pointEnd","newCropHeight","newCropWidth","min","_Component","_super","webpSrc","srcset","resizeUrlSquare","resizeUrl16x9","_calc$getCropCoordsFo3","cur","srcSet","_Component2","_super2","_calc$getCropCoordsFo4","propTypes","isRequired","array","ScrollToTop","setIsVisible","toggleVisibility","he","scrollTo","arrowUp"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxBC,GAAI,GAMDlB,EAAkB,CACrBkB,GAAI,GAGDb,EAAkB,GAQtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU+B,QAGnC,IAAIC,EAASJ,EAAiB5B,GAAY,CACzCK,EAAGL,EACHiC,GAAG,EACHF,QAAS,IAUV,OANAjB,EAAQd,GAAUW,KAAKqB,EAAOD,QAASC,EAAQA,EAAOD,QAASL,GAG/DM,EAAOC,GAAI,EAGJD,EAAOD,QAKfL,EAAoBQ,EAAI,SAAuBjC,GAC9C,IAAIkC,EAAW,GAKZN,EAAmB5B,GAAUkC,EAAStB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAFX,CAAC,GAAK,GAEiCA,IACtDkC,EAAStB,KAAKgB,EAAmB5B,GAAW,IAAImC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,eAAiB,CAAC,EAAI,yBAAyB,EAAI,kBAAkB,EAAI,gBAAgB,EAAI,WAAW,EAAI,4BAA4B,EAAI,mBAAmB,GAAK,gCAAgC,GAAK,4BAA4B,GAAK,wBAAwB,GAAK,4BAA4B,GAAK,4BAA4B,GAAK,oBAAoB,GAAK,6BAA6B,GAAK,mBAAmB,GAAK,sBAAsB,GAAK,wBAAwB,GAAK,iCAAiC,GAAK,gBAAgB,GAAK,oBAAoB,GAAK,sBAAsB,GAAK,sBAAsB,GAAK,iBAAiB,GAAK,aAAa,GAAK,wBAAwB,GAAK,mBAAmB,GAAK,kBAAkB,GAAK,yBAAyB,GAAK,mBAAmB,GAAK,mBAAmB,GAAK,mBAAmB,GAAK,uBAAuB,GAAK,4BAA4B,GAAK,aAAa,GAAK,mBAAmB,GAAK,iBAAiB,GAAK,kBAAkB,GAAK,oBAAoB,GAAK,cAAc,GAAK,iBAAiB,GAAK,0BAA0B,GAAK,uBAAuB,GAAK,kBAAkB,GAAK,uBAAuB,GAAK,eAAe,GAAK,4BAA4B,GAAK,wBAAwB,GAAK,oBAAoB,GAAK,kBAAkB,GAAK,kBAAkB,GAAK,gBAAgB,GAAK,gBAAgB,GAAK,uBAAuB,GAAK,sCAAsC,GAAK,sCAAsC,GAAK,wCAAwCtC,IAAUA,GAAW,IAAM,CAAC,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,YAAYA,GAAW,aAC/9EuC,EAAWd,EAAoBe,EAAIF,EACnCG,EAAmBC,SAASC,qBAAqB,QAC7CvC,EAAI,EAAGA,EAAIqC,EAAiBnC,OAAQF,IAAK,CAChD,IACIwC,GADAC,EAAMJ,EAAiBrC,IACR0C,aAAa,cAAgBD,EAAIC,aAAa,QACjE,GAAe,eAAZD,EAAIE,MAAyBH,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIY,EAAoBN,SAASC,qBAAqB,SACtD,IAAQvC,EAAI,EAAGA,EAAI4C,EAAkB1C,OAAQF,IAAK,CACjD,IAAIyC,EAEJ,IADID,GADAC,EAAMG,EAAkB5C,IACT0C,aAAa,gBAChBR,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIa,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAAShB,EACjBa,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOlB,EACvDmB,EAAM,IAAIC,MAAM,qBAAuB3D,EAAU,cAAgBuD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP3B,EAAmB5B,GAC1BiD,EAAQY,WAAWC,YAAYb,GAC/BZ,EAAOqB,IAERT,EAAQX,KAAOC,EAEJG,SAASC,qBAAqB,QAAQ,GAC5CoB,YAAYd,MACfe,MAAK,WACPpC,EAAmB5B,GAAW,MAMhC,IAAIiE,EAAqBtD,EAAgBX,GACzC,GAA0B,IAAvBiE,EAGF,GAAGA,EACF/B,EAAStB,KAAKqD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBtD,EAAgBX,GAAW,CAACoC,EAASC,MAE3DH,EAAStB,KAAKqD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS1B,SAASQ,cAAc,UAGpCkB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb7C,EAAoB8C,IACvBH,EAAOI,aAAa,QAAS/C,EAAoB8C,IAElDH,EAAOX,IAnGV,SAAwBzD,GACvB,OAAOyB,EAAoBe,EAAI,cAAgB,CAAC,EAAI,yBAAyB,EAAI,kBAAkB,EAAI,gBAAgB,EAAI,WAAW,EAAI,4BAA4B,EAAI,mBAAmB,GAAK,gCAAgC,GAAK,4BAA4B,GAAK,wBAAwB,GAAK,4BAA4B,GAAK,4BAA4B,GAAK,oBAAoB,GAAK,6BAA6B,GAAK,mBAAmB,GAAK,sBAAsB,GAAK,wBAAwB,GAAK,iCAAiC,GAAK,gBAAgB,GAAK,oBAAoB,GAAK,sBAAsB,GAAK,sBAAsB,GAAK,iBAAiB,GAAK,aAAa,GAAK,wBAAwB,GAAK,mBAAmB,GAAK,kBAAkB,GAAK,yBAAyB,GAAK,mBAAmB,GAAK,mBAAmB,GAAK,mBAAmB,GAAK,uBAAuB,GAAK,4BAA4B,GAAK,aAAa,GAAK,mBAAmB,GAAK,iBAAiB,GAAK,kBAAkB,GAAK,oBAAoB,GAAK,cAAc,GAAK,iBAAiB,GAAK,0BAA0B,GAAK,uBAAuB,GAAK,kBAAkB,GAAK,uBAAuB,GAAK,eAAe,GAAK,4BAA4B,GAAK,wBAAwB,GAAK,oBAAoB,GAAK,kBAAkB,GAAK,kBAAkB,GAAK,gBAAgB,GAAK,gBAAgB,GAAK,uBAAuB,GAAK,sCAAsC,GAAK,sCAAsC,GAAK,wCAAwCxC,IAAUA,GAAW,IAAM,CAAC,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,YAAYA,GAAW,YAkGv+EyE,CAAezE,GAG5B,IAAI0E,EAAQ,IAAIf,MAChBQ,EAAmB,SAAUb,GAE5Bc,EAAOf,QAAUe,EAAOhB,OAAS,KACjCuB,aAAaL,GACb,IAAIM,EAAQjE,EAAgBX,GAC5B,GAAa,IAAV4E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmB/E,EAAU,cAAgB6E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEV/D,EAAgBX,QAAWiF,IAG7B,IAAIX,EAAUY,YAAW,WACxBf,EAAiB,CAAEhB,KAAM,UAAWK,OAAQY,MAC1C,MACHA,EAAOf,QAAUe,EAAOhB,OAASe,EACjCzB,SAASyC,KAAKpB,YAAYK,GAG5B,OAAOjC,QAAQiD,IAAIlD,IAIpBT,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASzD,EAASkD,EAAMQ,GAC3C/D,EAAoBgE,EAAE3D,EAASkD,IAClCzE,OAAOmF,eAAe5D,EAASkD,EAAM,CAAEW,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS/D,GACX,qBAAXgE,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe5D,EAASgE,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe5D,EAAS,aAAc,CAAEkE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASzE,GAChC,IAAIyD,EAASzD,GAAUA,EAAOoE,WAC7B,WAAwB,OAAOpE,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAN,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBe,EAAI,IAGxBf,EAAoBkF,GAAK,SAASjD,GAA2B,MAApBkD,QAAQlC,MAAMhB,GAAYA,GAEnE,IAAImD,EAAaC,OAAmC,2BAAIA,OAAmC,4BAAK,GAC5FC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,OAAO,EAAE,KAExBM,I,mICrQH+F,EAAcC,aAFK,SAACC,GAAK,OAAM,EAAC,iBAAc,aAACC,MAAI,GAAKD,OAElB,wEAAxBD,CAAwB,QACxCG,KAEWJ,O,qTCcTK,EAAW,CACf,MAAUC,IACV,MAAUC,IACV,OAAUC,IACV,gBAAmBC,IACnB,WAAcC,IACd,aAAgBA,IAChB,MAASA,IACT,QAAWC,KAMb,SAASC,EAASC,GAChB,OAAQA,EAAOC,WAAWf,OAAO,IAC/B,IAAK,IAAK,MAAO,KACjB,IAAK,IAAK,MAAO,KACjB,IAAK,IAAK,MAAO,KACjB,QAAS,MAAO,MAUpB,IAAMgB,EAAa,SAAH,GAAmB,IAAdC,EAAQ,EAARA,SACnB,GAAIA,EAAU,CACZ,IAAMC,EATV,SAAgBC,GACd,IAAMD,EAAM,IAAIE,KAAKD,GACrB,MAAO,CACL,IAAIE,KAAKC,eAAe,QAAS,CAACC,QAAS,UAAUC,OAAON,GAC5DA,EAAIO,UAAYZ,EAASK,EAAIO,YAKjBC,CAAOT,EAASG,MAC5B,OACE,EAAC,IAAEO,IAAG,CAACC,UAAU,eAAeC,YAAa,CAAEC,GAAI,cAAeC,GAAI,aAAeC,YAAY,QAAQC,YAAY,UAAUzG,EAAG,CAAEsG,GAAI,YAAaI,KAAM,cAAeC,QAAS,eAAiBC,WAAY,CAAEN,GAAI,QAASC,GAAI,UACjO,EAAC,IAAEvG,EAAC,CAAC6G,GAAI,IAAI,gBAASnB,EAAI,IAAY,IAAEA,EAAI,IAC5C,EAAC,IAAES,IAAG,CAACW,QAAQ,OAAOC,WAAW,SAASC,eAAe,iBACvD,EAAC,IAAEC,IAAG,CAAChG,IAAK6D,EAASW,EAASyB,IAAIC,QAAQC,SAAUC,MAAO5B,EAASyB,IAAIC,QAAQG,YAAaC,GAAI,CAAEjB,GAAI,OAAQI,KAAM,OAAQC,QAAS,QAAUa,EAAG,KACnJ,EAAC,IAAExH,EAAC,CAACyH,KAAK,SAASC,UAAU,SAAQ,gBAASjC,EAASkC,YAAYC,IAAG,QAAe,aAAOnC,EAASkC,YAAYE,IAAG,UAK5H,OAAO,GAEHC,EAAW,SAAH,GAAiC,IAA5BC,EAAS,EAATA,UAAWC,EAAW,EAAXA,YAC5B,EAA0BC,mBAASF,GAA5BG,EAAK,KAAEC,EAAQ,KACtBC,qBAAU,kBAAID,EAASJ,KAAY,CAACA,IACpC,MAQIM,YAAY,CACdH,MAAOA,EACPI,aAAc,SAAAC,GAAI,OAAIA,EAAKC,aAC3BC,qBAAsB,SAAAC,GAAO,OAAIV,EAAYU,EAAQC,eACrDC,mBAAoB,YAAkB,IAAhBC,EAAU,EAAVA,WACpBV,EACEJ,EAAUe,QAAO,SAAAP,GAAI,OACnBA,EAAKC,YAAYO,cAAcC,WAAWH,EAAWE,sBAd3DE,EAAM,EAANA,OACAC,EAAoB,EAApBA,qBACAC,EAAY,EAAZA,aACAC,EAAa,EAAbA,cACAC,EAAgB,EAAhBA,iBAEAC,GADgB,EAAhBC,iBACY,EAAZD,cAcF,OACE,EAAC,IAAEnD,IAAG,CAACqD,SAAS,WAAWC,GAAI,CAAEnD,GAAI,OAAQC,GAAI,MAC/C,EAAC,IAAEJ,IAAG,eAAKkD,IAAkB,CAAEK,OAAO,oBAAoB1J,EAAG,IAC3D,EAAC,IAAE2J,MAAK,eAAKP,IAAe,CAAEQ,YAAY,kBAAkBpC,EAAG,CAAElB,GAAI,OAAQC,GAAI,WACjF,EAAC,IAAEsD,OAAM,aACPlJ,KAAK,SACL6I,SAAS,WACTM,MAAO,GACHZ,IAAsB,CAC1Ba,aAAY,gBAAc,WAK9B,EAAC,IAAEC,GAAE,eAAKb,IAAc,CAAEK,SAAS,WAAWS,IAAI,OAAOC,EAAGjB,EAAS,QAAU,UAAWzB,EAAE,OAAO2C,SAAS,OAAOC,GAAG,UAAUC,OAAO,QACpIpB,GACCf,EAAMoC,KAAI,SAAC/B,EAAMgC,GAAK,OACpB,EAAC,IAAEC,GAAE,aAACxK,EAAG,EAAGyK,gBAAiB,CAAEC,EAAG,UAAYC,MAAO,WACnD7G,IAAG,UAAKyE,GAAI,OAAGgC,IACXjB,EAAa,CAACf,OAAMgC,WAEvBhC,EAAKC,mBAgGLoC,IAzFO,SAAAjG,GACpB,IAtFsBkG,EAsFtB,EAA4CC,YAAU,eAAgB,IAAG,mBAAlEC,EAAc,KAAEC,EAAiB,KACxC,EAAgC/C,mBAAS,IAAlCgD,EAAQ,KAAEjD,EAAW,KAC5B,EAAkCC,mBAAS,IAApCF,EAAS,KAAEmD,EAAY,KAC9B,EAA8BjD,oBAAS,GAAhCkD,EAAO,KAAEC,EAAU,KAqC1B,OA9BAhD,qBAAU,WACR,IAAMiD,EAActD,EAAUe,QAAQ,SAAAP,GACpC,OAAOA,EAAK+C,OAASP,KAEnBM,EAAYvN,QACdkK,EAAYqD,EAAY,MAEzB,CAACN,EAAgBhD,IAEpBK,qBAAU,WACH2C,GACHQ,IAAMnI,IAAI,mCACP5B,MAAK,SAAAgK,GAAI,OAAIA,EAAKlO,QAClBkE,MAAK,SAAAlE,GAAI,OAAI0K,EAAY1K,QAE7B,IACH8K,qBAAU,WACRmD,IAAMnI,IAAI,2BACP5B,MAAK,SAAAgK,GAAI,OAAIA,EAAKlO,QAClBkE,MAAK,SAAAlE,GAAI,OAAI4N,EAAa5N,QAC5B,IACH8K,qBAAU,WACJ6C,EAASK,MACXC,IAAMnI,IAAI,yBAAyB6H,EAASK,MACzC9J,MAAK,SAAAgK,GAAI,OAAIA,EAAKlO,QAClBkE,MAAK,SAAAlE,GACJ,OAAO8N,EAAW9N,EAAK,SAG5B,CAAC2N,IAEF,oBACE,EAAC,IAAE9E,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAOC,GAAI,GAAI9E,GAAI,IACpD,EAAC,IAAEV,IAAG,CAACE,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,GAAIC,QAAQ,OAAO+E,cAAe,CAAEvF,GAAI,SAAUC,GAAI,QACzI,EAAC,IAAEuF,GAAE,CAACrE,KAAK,KAAKF,GAAI,IAAK0D,EAASzC,YAAW,YAC7C,EAACV,EAAQ,CAACC,UAAWA,EAAWC,YAxCb,SAAAO,GACzBP,EAAYO,GACZyC,EAAkBzC,EAAK+C,UAwCnB,EAAC,IAAEnF,IAAG,CAACW,QAAQ,OAAOiF,oBAAqB,CAAExF,GAAI,6CAA+CF,YAAY,YAAYG,YAAY,QAAQC,YAAY,MAAMM,WAAW,YACvK,EAAC,IAAEZ,IAAG,CAACE,YAAa,CAAEC,GAAI,YAAaC,GAAI,aAAeC,YAAY,QAAQC,YAAY,UAAUzG,EAAG,CAAEsG,GAAI,YAAaI,KAAM,cAAeC,QAAS,eAAiBqF,GAAG,IAAIpF,WAAY,CAAEN,GAAI,aAAcC,GAAI,UAClN,EAAC,IAAEvG,EAAC,CAACyH,KAAK,QAAQwE,WAAW,YAAU,SACvC,EAAC,IAAE9F,IAAG,CAACwF,GAAI,GAAI7E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,UAAWC,GAAI,kCAAoCQ,WAAW,UACrH,EAAC,IAAEZ,IAAG,CAACE,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUK,QAAQ,OAAOC,WAAW,SAASC,eAAe,iBACvHmE,EAMA,oBACE,EAAC,IAAElE,IAAG,CAAChG,IAAK6D,EAASqG,EAAQe,UAAUC,aAAajF,IAAIC,QAAQC,SAAUC,MAAO8D,EAAQe,UAAUC,aAAajF,IAAIC,QAAQG,YAAaC,GAAI,CAAEjB,GAAI,OAAQI,KAAM,OAAQC,QAAS,QAAUa,EAAG,KAC/L,EAAC,IAAExH,EAAC,CAACyH,KAAK,QAAQ2E,GAAI,GAAI1E,UAAU,SAAQ,gBAASyD,EAAQe,UAAUC,aAAaxE,YAAYC,IAAG,QAAe,aAAOuD,EAAQe,UAAUC,aAAaxE,YAAYE,IAAG,SAPzK,oBACE,EAAC,IAAEZ,IAAG,CAAChG,IAAK8D,IAAOsC,MAAM,QAAQE,GAAI,CAAEjB,GAAI,OAAQI,KAAM,OAAQC,QAAS,QAAUa,EAAG,KACvF,EAAC,IAAExH,EAAC,CAACyH,KAAK,QAAQ2E,GAAI,GAAI1E,UAAU,SAAQ,0BAAwB,aAAM,YAShF,EAAC,IAAEvB,IAAG,CAACnG,EAAE,UACP,EAAC,IAAEA,EAAC,CAACyH,KAAK,SAAS0D,GAvJXN,EAuJoCM,EAAQe,UAAUC,aAAajF,KAtJzEC,QAAQG,YAAc,UAAYuD,EAAS1D,QAAQkF,WAAa,mBAAqBxB,EAASyB,cAAchF,aAAayB,cAsJzC,OAIvFoC,GACC,oBACE,EAAC3F,EAAU,CAACC,SAAU0F,EAAQe,UAAUK,eACxC,EAAC/G,EAAU,CAACC,SAAU0F,EAAQe,UAAUM,eACxC,EAAChH,EAAU,CAACC,SAAU0F,EAAQe,UAAUO,eACxC,EAACjH,EAAU,CAACC,SAAU0F,EAAQe,UAAUQ,eACxC,EAAClH,EAAU,CAACC,SAAU0F,EAAQe,UAAUS,eACxC,EAACnH,EAAU,CAACC,SAAU0F,EAAQe,UAAUU,iBAI9C,EAAC,IAAEzG,IAAG,CAACnG,EAAG,GAAI8G,QAAQ,OAAO+E,cAAc,MAAM9E,WAAW,SAASC,eAAe,SAClF,EAAC,IAAEC,IAAG,CAAChG,IAAK4L,IAAStF,GAAI,KAAM,EAAC,IAAEvH,EAAC,CAACyH,KAAK,UAAS,EAAC,IAAEqF,OAAM,CAACvF,GAAI,IAAG,WAAU4D,EAAUA,EAAQe,UAAUC,aAAaY,aAAaC,QAAU,SAAmB,EAAC,IAAEC,KAAI,eAAS9B,EAAUA,EAAQe,UAAUC,aAAaY,aAAaG,OAAS,e,uBCxMzP3N,EAAOD,QAAU,IAA0B,4C,ycCgCrC6N,EAAOC,YAAS,CAAD,kJAAC,kBAAM,uEAAsB,sPAAE,CAClDC,SAAU,EAAC,IAAgB,QAEvBC,EAAiBF,YAAS,CAAD,iKAAC,kBAAM,yDAAqC,sPAAE,CAC3EC,SAAU,EAAC,IAAiB,QAExBE,EAAUH,YAAS,CAAD,qJAAC,kBAAM,wEAAyB,sPAAE,CACxDC,SAAU,EAAC,IAAmB,QAG1BG,EAAaJ,YAAS,CAAD,wJAAC,kBAAM,wDAA4B,uPACxDK,EAAaL,YAAS,CAAD,wJAAC,kBAAM,mCAA4B,uPACxDM,EAAaN,YAAS,CAAD,wJAAC,kBAAM,+DAA4B,sPAAE,CAC9DC,SAAU,EAAC,IAAiB,QAExBM,EAA+DP,YAAS,CAAD,6JAAC,kBAAM,0DAAiC,uPAC/GQ,EAAoBR,YAAS,CAAD,wJAAC,kBAAM,+DAA4B,sPAAE,CACrEC,SAAU,EAAC,IAAkB,QAEzBQ,EAAYT,YAAS,CAAD,uJAAC,kBAAM,+DAA2B,uPACtDU,EAAmBV,YAAS,CAAD,8JAAC,kBAAM,+DAAkC,uPACpEW,EAAaX,YAAS,CAAD,wJAAC,kBAAM,+DAA4B,sPAAE,CAC9DC,SAAU,EAAC,IAAkB,QAEzBW,EAAWZ,YAAS,CAAD,sJAAC,kBAAM,mCAA0B,uPACpDa,EAAkBb,YAAS,CAAD,6JAAC,kBAAM,mCAAiC,uPAClEc,EAAYd,YAAS,CAAD,2JAAC,kBAAM,mCAA+B,uPAC1De,EAAiBf,YAAS,CAAD,4JAAC,kBAAM,+DAAgC,uPAChEgB,EAAchB,YAAS,CAAD,yJAAC,kBAAM,mCAA6B,uPAC1DiB,EAAgBjB,YAAS,CAAD,2JAAC,kBAAM,mCAA+B,uPAC9DkB,EAAkClB,YAAS,CAAD,6KAAC,kBAAM,wDAAiD,uPAElGmB,EAAa,kDACjB,WAAa5J,GAAO,MAEc,OAFd,qBAClB,cAAMA,IACD6J,MAAQ,CAAEC,UAAU,GAAO,EAMjC,OALA,8CAOD,SAAmBvM,EAAOwM,GAExBtK,QAAQlC,MAAMA,EAAOwM,KACtB,oBAED,WACE,OAAIC,KAAKH,MAAMC,SAGX,oBACE,EAAC,IAAsB,CAACvM,MAAOyM,KAAKH,MAAMtM,SAIzCyM,KAAKhK,MAAMiK,YACnB,uCApBD,SAAiC1M,GAE/B,MAAO,CAAEuM,UAAU,EAAMvM,aAC1B,EATgB,CAAS2M,IAAMC,WA6BrBC,GAAM,SAACpK,GAClB,MAAkCsD,oBAAS,GAApC+G,EAAS,KAAEC,EAAY,KACxBC,EAAkB,WAAH,OAASD,GAAcD,IACtCG,EAAaC,cAMnB,OALAhH,qBAAU,WACJ+G,GACFxK,EAAM0K,SAAS1K,EAAMsG,SAASqE,SAAU3K,EAAM4K,aAE/C,CAAC5K,EAAMsG,SAASqE,WAEjB,EAAC,IAAa,CAACE,MAAOC,KACpB,EAAC,IAAS,MACV,EAAC,IAAW,MACZ,EAAC,UAAM,CAACC,aAAcC,2CACpB,UAAMC,KAAK,OACX,UAAMrP,IAAI,mBAAmBsP,MAAM,UAAU/P,KAAK,kCAClD,UAAMS,IAAI,OAAOI,KAAK,YAAYkP,MAAM,QAAQ/P,KAAK,+BACrD,UAAMS,IAAI,OAAOI,KAAK,YAAYkP,MAAM,QAAQ/P,KAAK,+BACrD,UAAMS,IAAI,YAAYT,KAAK,iCAAiCgQ,MAAM,YAClE,UAAMtN,KAAK,0BAA0BuN,QAAQ,YAC7C,UAAMvN,KAAK,cAAcuN,QAAQ,YACjC,UAAMvN,KAAK,cAAcuN,QAASJ,qKAClC,UAAMnN,KAAK,gBAAgBuN,QAAQ,qCACnC,UAAM7L,SAAS,YAAY6L,QAASJ,oBACpC,UAAMzL,SAAS,UAAU6L,QAAQ,YACjC,UAAM7L,SAAS,WAAW6L,QAASJ,4CACnC,UAAMzL,SAAS,iBAAiB6L,QAASJ,qKACzC,UAAMzL,SAAS,WAAW8L,SAAS,QAAQD,QAASE,MACpD,UAAMD,SAAS,aAAaD,QAAQ,OACpC,UAAMC,SAAS,QAAQD,QAASE,MAChC,UAAMzN,KAAK,yBAAyBuN,QAAQ,QAC5C,UAAMvN,KAAK,2BAA2BuN,QAASJ,gDAC/C,UAAMK,SAAS,QAAQD,QAASE,MAChC,UAAMD,SAAS,eAAeD,QAASE,MACvC,UAAMzN,KAAK,eAAeuN,QAASJ,SACnC,UAAMnN,KAAK,kBAAkBuN,QAASJ,SACtC,UAAMnN,KAAK,eAAeuN,QAAQ,wBAClC,UAAMvN,KAAK,gBAAgBuN,QAASE,MACpC,UAAM/L,SAAS,WAAW6L,QAAQ,gBAClC,UAAMvN,KAAK,+BAA+BuN,QAASJ,mCACnD,UAAMnN,KAAK,oBAAoBuN,QAAQ,0BACvC,UAAM3J,UAAW4I,EAAY,GAAK,uBAEpC,EAAC,IAAW,MACZ,EAAC,IAAM,eAAKrK,EAAK,CAAEuK,gBAAiBA,KACpC,EAAC,SAAM,KACL,EAAC,QAAK,CAACgB,OAAK,EAACC,KAAK,qBAAqBC,OAAQ,kBAAM,EAACpC,EAAQ,CAACqC,cAAc,qEAC7E,EAAC,QAAK,CAACH,OAAK,EAACC,KAAK,YAAYG,UAAWtC,IACzC,EAAC,QAAK,CAACkC,OAAK,EAACC,KAAK,IAAIC,OAAQ,SAAApQ,GAAC,OAAI,EAACmN,EAASnN,MAC7C,EAAC,QAAK,CAACkQ,OAAK,EAACC,KAAK,QAAQC,OAAQ,SAAApQ,GAAC,OAAI,EAACmN,EAAI,aAACoD,OAAO,SAAYvQ,OAChE,EAAC,QAAK,CAACkQ,OAAK,EAACC,KAAK,SAASC,OAAQ,SAAApQ,GAAC,OAAI,EAACmN,EAAI,aAACoD,OAAO,UAAavQ,OAClE,EAAC,QAAK,CAACkQ,OAAK,EAACC,KAAK,SAASC,OAAQ,SAAApQ,GAAC,OAAI,EAACmN,EAAI,aAACoD,OAAO,UAAavQ,OAElE,EAAC,QAAK,CAACkQ,OAAK,EAACC,KAAK,WAAWC,OAAQ,kBAAM,8BAC3C,EAAC,QAAK,CAACF,OAAK,EAACC,KAAK,eAAeC,OAAQ,SAAApQ,GAAC,OAAI,EAACiO,EAAoBjO,MACnE,EAAC,QAAK,CAACmQ,KAAK,aAAaC,OAAQ,SAAApQ,GAAC,OAAI,EAACkO,EAAclO,MACrD,EAAC,QAAK,CACJmQ,KAAK,WAAWC,OAAQ,SAAApQ,GACtB,IACMwQ,EADe,IAAIC,gBAAgBzQ,EAAEiL,SAASyF,QACvBtN,IAAI,YACjC,OAAO,EAACmK,EAAO,eAAK5I,EAAW3E,EAAC,CAAE2Q,IAAI,UAAUC,WAAYJ,QAGhE,EAAC,QAAK,CACJN,OAAK,EAACC,KAAK,UAAUC,OAAQ,SAACpQ,GAC5B,OACE,EAAC0N,EAAU,eACL1N,EAAC,CACL6Q,MAAO7Q,EAAEiL,SAASyF,OAClBI,YAAanB,OACboB,cAAe,qDAKvB,EAAC,QAAK,CACJb,OAAK,EAACC,KAAK,+BAA+BC,OAAQ,SAAApQ,GAAC,OACjD,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,6BACN8J,YAAY,sHACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,yBAAyBC,OAAQ,SAAApQ,GAAC,OAC3C,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,wBACN8J,YAAY,gIACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oBAAoBC,OAAQ,SAAApQ,GAAC,OACtC,EAACyN,EAAU,aACTuD,KAAK,6BACL3J,MAAM,uCACN8J,YAAY,kJACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qBAAqBC,OAAQ,SAAApQ,GAAC,OACvC,EAACyN,EAAU,aACTuD,KAAK,2BACL3J,MAAM,uCACN8J,YAAY,kJACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,sBAAsBC,OAAQ,SAAApQ,GAAC,OACxC,EAACyN,EAAU,aACTuD,KAAK,+BACL3J,MAAM,uCACN8J,YAAY,kJACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,8BAA8BC,OAAQ,SAAApQ,GAAC,OAChD,EAACyN,EAAU,aACTuD,KAAK,uCACL3J,MAAM,6DACN8J,YAAY,kKACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,4BAA4BC,OAAQ,SAAApQ,GAAC,OAC9C,EAACyN,EAAU,aACTuD,KAAK,iCACL3J,MAAM,0BACN8J,YAAY,sBACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,0BACN8J,YAAY,sBACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qBAAqBC,OAAQ,SAAApQ,GAAC,OACvC,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,+CACN8J,YAAY,sHACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,eAAeC,OAAQ,SAAApQ,GAAC,OACjC,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,cACN8J,YAAY,2DACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qBAAqBC,OAAQ,SAAApQ,GAAC,OACvC,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,qCACN8J,YAAY,4JACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,sBAAsBC,OAAQ,SAAApQ,GAAC,OACxC,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,2BACN8J,YAAY,2JACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oCAAoCC,OAAQ,SAAApQ,GAAC,OACtD,EAACyN,EAAU,aACTuD,KAAM,6BAA+BhR,EAAEiR,MAAMC,OAAOF,KACpD3J,MAAM,qEACN8J,YAAY,6JACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,cAAcC,OAAQ,SAAApQ,GAAC,OAChC,EAACyN,EAAU,aACTuD,KAAM,gBAAkBhR,EAAEiR,MAAMC,OAAOF,KACvC3J,MAAM,mCACN8J,YAAY,8JACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,4CAA4CC,OAAQ,SAAApQ,GAAC,OAC9D,EAACyN,EAAU,aACTuD,KAAK,iDACL3J,MAAM,yDACN+J,aAAa,oBACbD,YAAY,8KACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,mCAAmCC,OAAQ,SAAApQ,GAAC,OACrD,EAACyN,EAAU,aACTuD,KAAK,wCACL3J,MAAM,6BACN8J,YAAY,iKACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qCAAqCC,OAAQ,SAAApQ,GAAC,OACvD,EAACyN,EAAU,aACTuD,KAAK,0CACL3J,MAAM,8CACN8J,YAAY,qHACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oCAAoCC,OAAQ,SAAApQ,GAAC,OACtD,EAACyN,EAAU,aACTuD,KAAK,yCACL3J,MAAM,8BACN8J,YAAY,sJACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,sCAAsCC,OAAQ,SAAApQ,GAAC,OACxD,EAACyN,EAAU,aACTuD,KAAK,2CACL3J,MAAM,gCACN8J,YAAY,+JACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,kDAAkDC,OAAQ,SAAApQ,GAAC,OACpE,EAACyN,EAAU,aACTuD,KAAK,uDACL3J,MAAM,gDACN+J,aAAa,iCACbD,YAAY,qGACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,wCAAwCC,OAAQ,SAAApQ,GAAC,OAC1D,EAACyN,EAAU,aACTuD,KAAK,6CACL3J,MAAM,sCACN+J,aAAa,eACbD,YAAY,sGACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6CAA6CC,OAAQ,SAAApQ,GAAC,OAC/D,EAACyN,EAAU,aACTuD,KAAK,kDACL3J,MAAM,2CACN+J,aAAa,oBACbD,YAAY,oHACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,uDAAuDC,OAAQ,SAAApQ,GAAC,OACzE,EAACyN,EAAU,aACTuD,KAAK,4DACL3J,MAAM,qDACN+J,aAAa,8BACbD,YAAY,qKACRnR,OAwBV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,4BAA4BC,OAAQ,SAAApQ,GAAC,OAC9C,EAACyN,EAAU,aACTuD,KAAK,iCACL3J,MAAM,sBACN+J,aAAa,sBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,8BAA8BC,OAAQ,SAAApQ,GAAC,OAChD,EAACyN,EAAU,aACTuD,KAAK,mCACL3J,MAAM,wBACN+J,aAAa,wBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+BAA+BC,OAAQ,SAAApQ,GAAC,OACjD,EAACyN,EAAU,aACTuD,KAAK,oCACL3J,MAAM,yBACN+J,aAAa,yBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,wBACN+J,aAAa,wBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+BAA+BC,OAAQ,SAAApQ,GAAC,OACjD,EAACyN,EAAU,aACTuD,KAAK,oCACL3J,MAAM,0BACN+J,aAAa,0BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+CAA+CC,OAAQ,SAAApQ,GAAC,OACjE,EAACyN,EAAU,aACTuD,KAAK,oDACL3J,MAAM,2BACN+J,aAAa,2BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,wBACN+J,aAAa,wBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+BAA+BC,OAAQ,SAAApQ,GAAC,OACjD,EAACyN,EAAU,aACTuD,KAAK,oCACL3J,MAAM,0BACN+J,aAAa,0BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+CAA+CC,OAAQ,SAAApQ,GAAC,OACjE,EAACyN,EAAU,aACTuD,KAAK,oDACL3J,MAAM,2BACN+J,aAAa,2BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,wBACN+J,aAAa,wBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+BAA+BC,OAAQ,SAAApQ,GAAC,OACjD,EAACyN,EAAU,aACTuD,KAAK,oCACL3J,MAAM,0BACN+J,aAAa,0BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,+CAA+CC,OAAQ,SAAApQ,GAAC,OACjE,EAACyN,EAAU,aACTuD,KAAK,oDACL3J,MAAM,2BACN+J,aAAa,2BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,2BAA2BC,OAAQ,SAAApQ,GAAC,OAC7C,EAACyN,EAAU,aACTuD,KAAK,gCACL3J,MAAM,yBACN+J,aAAa,yBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,2BACN+J,aAAa,2BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6CAA6CC,OAAQ,SAAApQ,GAAC,OAC/D,EAACyN,EAAU,aACTuD,KAAK,kDACL3J,MAAM,4BACN+J,aAAa,4BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,iCAAiCC,OAAQ,SAAApQ,GAAC,OACnD,EAACyN,EAAU,aACTuD,KAAK,sCACL3J,MAAM,2BACN+J,aAAa,2BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,mCAAmCC,OAAQ,SAAApQ,GAAC,OACrD,EAACyN,EAAU,aACTuD,KAAK,wCACL3J,MAAM,6BACN+J,aAAa,6BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oCAAoCC,OAAQ,SAAApQ,GAAC,OACtD,EAACyN,EAAU,aACTuD,KAAK,yCACL3J,MAAM,8BACN+J,aAAa,8BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oCAAoCC,OAAQ,SAAApQ,GAAC,OACtD,EAACyN,EAAU,aACTuD,KAAK,yCACL3J,MAAM,8BACN+J,aAAa,8BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,uBAAuBC,OAAQ,SAAApQ,GAAC,OACzC,EAACyN,EAAU,aACTuD,KAAK,4BACL3J,MAAM,yCACN+J,aAAa,yCACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,yBAAyBC,OAAQ,SAAApQ,GAAC,OAC3C,EAACyN,EAAU,aACTuD,KAAK,8BACL3J,MAAM,2CACN+J,aAAa,2CACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,0BAA0BC,OAAQ,SAAApQ,GAAC,OAC5C,EAACyN,EAAU,aACTuD,KAAK,+BACL3J,MAAM,4CACN+J,aAAa,4CACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,kCAAkCC,OAAQ,SAAApQ,GAAC,OACpD,EAACyN,EAAU,aACTuD,KAAK,uCACL3J,MAAM,4BACN+J,aAAa,4BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,oCAAoCC,OAAQ,SAAApQ,GAAC,OACtD,EAACyN,EAAU,aACTuD,KAAK,yCACL3J,MAAM,8BACN+J,aAAa,8BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qCAAqCC,OAAQ,SAAApQ,GAAC,OACvD,EAACyN,EAAU,aACTuD,KAAK,0CACL3J,MAAM,+BACN+J,aAAa,+BACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,qCAAqCC,OAAQ,SAAApQ,GAAC,OACvD,EAACyN,EAAU,aACTuD,KAAK,0CACL3J,MAAM,gCACN+J,aAAa,gCACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,uCAAuCC,OAAQ,SAAApQ,GAAC,OACzD,EAACyN,EAAU,aACTuD,KAAK,4CACL3J,MAAM,kCACN+J,aAAa,kCACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,wCAAwCC,OAAQ,SAAApQ,GAAC,OAC1D,EAACyN,EAAU,aACTuD,KAAK,6CACL3J,MAAM,mCACN+J,aAAa,mCACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6BAA6BC,OAAQ,SAAApQ,GAAC,OAC/C,EAACyN,EAAU,aACTuD,KAAK,kCACL3J,MAAM,wBACN+J,aAAa,wBACbD,YAAY,IACRnR,OAGV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,6CAA6CC,OAAQ,SAAApQ,GAAC,OAC/D,EAACyN,EAAU,aACTuD,KAAK,kDACL3J,MAAM,yBACN+J,aAAa,yBACbD,YAAY,IACRnR,OAeV,EAAC,QAAK,CACJkQ,OAAK,EAACC,KAAK,gBAAgBC,OAAQ,kBACjC,EAACtC,EAAgB,eACXnJ,EAAK,CACT0M,QAAQ,eACRC,gBAAgB,OAChBjK,MAAM,GACN8J,YAAY,SAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,UAAUC,OAAQ,kBAC3B,EAACrC,EAAU,eACLpJ,EAAK,CACT0M,QAAQ,SACRC,gBAAgB,OAChBjK,MAAM,aACN8J,YAAY,0DAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,oBAAoBC,OAAQ,kBACrC,EAAC9B,EAA+B,eAC1B3J,EAAK,CACT0M,QAAQ,OACRC,gBAAgB,OAChBjK,MAAM,2BACN8J,YAAY,iFAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,WAAWC,OAAQ,kBAC5B,EAAC5C,EAAU,eACL7I,EAAK,CACT0M,QAAQ,OACRC,gBAAgB,OAChBjK,MAAM,UACN8J,YAAY,oEAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,gBAAgBC,OAAQ,kBACjC,EAAC/B,EAAa,eACR1J,EAAK,CACT0M,QAAQ,OACRC,gBAAgB,OAChBjK,MAAM,YACN8J,YAAY,oEAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,cAAcC,OAAQ,kBAC/B,EAACjC,EAAc,eACTxJ,EAAK,CACT0M,QAAQ,aACRhK,MAAM,6DACN8J,YAAY,uKAIlB,EAAC,QAAK,CACJjB,OAAK,EAACC,KAAK,WAAWC,OAAQ,kBAC5B,EAAChC,EAAW,eACNzJ,EAAK,CACT0M,QAAQ,UACRC,gBAAgB,OAChBjK,MAAM,cACN8J,YAAY,4BAIlB,EAAC,QAAK,CACJhB,KAAK,+BAA+BC,OAAQ,SAACpQ,GAAC,OAC5C,EAAC4N,EAAiB,eAAKjJ,EAAW3E,EAAC,CAAEuR,WAAYvR,EAAEiR,MAAMC,OAAOM,aAEpE,EAAC,QAAK,CACJtB,OAAK,EAACC,KAAK,WAAWC,OAAQ,SAAApQ,GAAC,OAC7B,EAACyN,EAAU,aACTuD,KAAK,uBACL3J,MAAM,kBACN8J,YAAY,mDACRnR,OAIV,EAAC,QAAK,CAACmQ,KAAK,2HAA2HC,OAAQ,SAAApQ,GAAC,OAAI,EAACuN,EAAO,eAAKvN,EAAC,CAAE4Q,WAAY5Q,EAAEiR,MAAMC,OAAON,iBAC/L,EAAC,QAAK,CAACT,KAAK,0DAA0DC,OAAQ,SAAApQ,GAAC,OAAI,EAACuN,EAAO,eAAKvN,EAAC,CAAE4Q,WAAY5Q,EAAEiR,MAAMC,OAAON,iBAC9H,EAAC,QAAK,CAACT,KAAK,4FAA4FC,OAAQ,SAAApQ,GAAC,OAAI,EAACuN,EAAO,eAAKvN,EAAC,CAAE4Q,WAAY5Q,EAAEiR,MAAMC,OAAON,iBAChK,EAAC,QAAK,CAACT,KAAK,0BAA0BC,OAAQ,SAAApQ,GAAC,OAAI,EAACuN,EAAO,eAAKvN,EAAC,CAAE4Q,WAAY5Q,EAAEiR,MAAMC,OAAON,iBAC9F,EAAC,QAAK,CAACT,KAAK,4BAA4BsB,QAAM,EAACvB,OAAK,EAACE,OAAQ,SAAApQ,GAAC,OAAI,EAAC,WAAQ,CAAC0R,GAAI,IAAM1R,EAAEiR,MAAMC,OAAOG,aACrG,EAAC,QAAK,CAAClB,KAAK,2BAA2BC,OAAQ,SAAApQ,GAAC,OAAI,EAACsN,EAAc,eAAKtN,EAAC,CAAE8Q,YAAanB,cAE1F,EAAC,IAAM,CAACT,gBAAiBA,EAAiBmC,QAAS1M,EAAM0M,QAAS9B,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,YAC/G,EAAC,IAAU,CAACN,QAAS1M,EAAM0M,QAAS9B,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,YAG7E,EAAChE,EAAU,MACdgC,KAaPiC,gCAEAC,+BAEEC,2BAGAC,2BAMAC,4BAMAC,+BAMAC,qCAMAC,qCAKF,IAAMC,GAAkB,SAAC5D,GAAK,8CAAWA,EAAM6D,KAAQ,CAAE9C,UAAW+C,YAAa9D,KAAa,CAAEmD,UAAWY,YAAa/D,MAClHgE,GAAqB,SAACC,GAAQ,OAAKC,6BAAmB,CAAErD,cAAYoD,IAE3DE,yBAAWC,kBAAQR,GAAiBI,GAAzBI,CAA6C7D,M,wOC9zBrD8D,GA1BZC,EAAQC,cAEP,SAAeC,EAAc,kCAanC,sDAbM,WAA+BzB,GAAU,qFAC0B,OAAlEzN,EAAM,eAAkDyN,EAAU,SACnDuB,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAGU4M,IAAMnI,IAXkB,gBAWDU,GAAI,OAApC,OAARmP,EAAW,EAAH,uBACPH,EAAMI,IAAIpP,EAAKmP,EAAS3V,KAAM,OAAW,QAEH,MAFG,0BAEhD8G,QAAQ+O,IAAI,kBAAmB,KAAM5Q,SAAQ,gEAGhD,sBAED,SAAW6Q,EAAe,OAAI7B,EAAU,EAAVA,WAAU,yHAExB,OAFwB,kBAElBrT,YAAK8U,EAAgBzB,GAAW,OAClD,OADM8B,EAAM,EAAH,cACHC,YAAI,CAAE3S,KA1BoB,2BA0BQ4S,QAASF,IAAM,8BAEvD,OAFuD,mCAEjDC,YAAI,CAAE3S,KA3BkB,yBA2BQ4S,QAAS,KAAEhR,UAAU,uDALvB,GASjC,SAAWsQ,IAAgB,2EAChC,OADgC,SAC1BW,YAlCoB,mBAkCKJ,GAAgB,uCAG1C,IAAMK,EAAc,SAAClC,GAAU,MAAM,CAAE5Q,KArClB,mBAqCsC+S,YAAY,EAAMC,YAAY,EAAOpC,eAE1FqC,EAAe,CAC1BC,eAAe,EACfC,UAAW,EACXJ,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVsF,OAAO,EACP7R,MAAO,KACPsP,OAAQ,MAGGwC,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QACpD,OAAQ5S,GACN,IApDwB,mBAqDtB,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfH,YAAY,EACZC,YAAY,EACZI,OAAO,EACPtF,UAAU,EACVvM,MAAO,OAEX,IA1DkC,6BA2DhC,OAAOnE,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACPJ,YAAY,EACZD,YAAY,EACZG,eAAe,EACfrC,OAAQ,OAEZ,IApE8B,yBAqE5B,OAAOzT,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACP7R,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEnB,IA9EgC,2BA+E9B,OAAO9V,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BsF,UAAW,IAAIlO,KACf+N,YAAY,EACZD,YAAY,EACZG,eAAe,EACfrC,OAAQ+B,EACR9E,UAAU,EACVsF,OAAO,EACP7R,MAAO,OAEX,QACE,OAAOsM,K,iLC7FA0F,EAA0BxP,IAAOmF,OAAM,yFAAbnF,CAAa,SAChDyP,YAAG,0BAGMC,EAAkB1P,IAAOmF,OAAM,iFAAbnF,CAAa,SACtCyP,YAAG,wB,8GC2BF,IAAME,EAAc,SAAH,GAAqB,IAAhBC,EAAU,EAAVA,WAC3B,EAAgCrM,mBAASqM,GACzC,MAAO,CACLC,SAFa,KAEHC,YAFgB,OAMjBC,EAAM,CACnBA,KAhBA,SAAiB9P,GACf,OACE,EAAC,IAAEwB,IAAG,aAACuO,KAAK,WAAc/P,GACvBA,EAAMiK,WAcb6F,IAvCA,SAAmB,GAA6D,IAA5DF,EAAQ,EAARA,SAAUI,EAAE,EAAFA,GAAGH,EAAW,EAAXA,YAAaI,EAAW,EAAXA,YAAahG,EAAQ,EAARA,SAAaiG,EAAI,iBAC1E,OAAIN,IAAaI,EAEb,EAACT,EAAuB,aAACQ,KAAK,MAAMI,aAAa,OAAOH,GAAIA,GAAQE,GAAOjG,GAI7E,EAACwF,EAAe,aAACM,KAAK,MAAMI,aAAa,QAAQH,GAAIA,EAAII,QAAS,WAChEP,EAAYG,GACRC,GACFA,MAEGC,GAAOjG,IA4BlB6F,MAxBA,SAAkB,GAAmC,IAAlCF,EAAQ,EAARA,SAAUI,EAAE,EAAFA,GAAI/F,EAAQ,EAARA,SAAaiG,EAAI,iBAChD,OACE,EAAC,IAAE1O,IAAG,aAACuO,KAAK,WAAWM,QAAST,IAAaI,EAAK,OAAS,QAASA,GAAIA,EAAK,QAAYE,EAAI,CAAE/N,QAASyN,IAAaI,EAAK,QAAU,SAAS/F,M,6KCjB3IqG,EAAgB,SAAH,GAAwC,IAAnC5N,EAAK,EAALA,MAAO7E,EAAI,EAAJA,KAAM0S,EAAM,EAANA,OAAQtG,EAAQ,EAARA,SACrCjF,EAAQwL,iBAAO,MACrB,OACE,EAAC,IAAEhP,IAAG,CAACC,UAAU,OACf,EAAC,IAAEuD,MAAK,CAAChJ,KAAK,QAAQ6B,KAAMA,EAAMmS,GAAI,OAASO,EAAS7N,EAAO+N,IAAKzL,IACpE,EAAC,IAAE0L,MAAK,CAACjP,UAAU,YAAYkP,aAAc,EAAGtV,EAAE,YAAY6G,GAAI,EAAGuD,GAAG,UACtEtD,QAAQ,OAAO+E,cAAc,MAAM9E,WAAW,SAASC,eAAe,gBACtEiF,WAAW,MAAM6D,MAAM,UAAUyF,QAAS,OAASL,EAAS7N,EAAO0N,QAAS,SAACtV,GACzEkK,EAAM6L,QAAQC,UAChB9L,EAAM6L,QAAQC,SAAU,EACxBhW,EAAEiW,oBAECrO,GACP,EAAC,IAAElB,IAAG,CAACC,UAAU,eACdwI,KAMH+G,EAAY,SAAH,GAAmB,IAAd/G,EAAQ,EAARA,SAClB,OACE,SAAKxI,UAAU,QACZwI,K,uBC5BPrP,EAAOD,QAAU,IAA0B,wC,oCCE3C,SAASsW,EAAQC,GAAmV,OAAtOD,EAArD,oBAAXtS,QAAoD,kBAApBA,OAAOwS,SAAmC,SAAiBD,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXvS,QAAyBuS,EAAIE,cAAgBzS,QAAUuS,IAAQvS,OAAOtF,UAAY,gBAAkB6X,IAAyBA,GAEnX9X,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQ0W,aAugBR,SAAsBC,GACpB,OAAOC,EAAczX,MAAMkQ,KAAMwH,YAvgBnC7W,EAAiB,aAAI,EAErB,IAAI8W,EAAUC,EAAuB,EAAQ,SAMzCC,GAMJ,SAAiCT,EAAKU,GAAe,IAAKA,GAAeV,GAAOA,EAAIlS,WAAc,OAAOkS,EAAO,GAAY,OAARA,GAAiC,WAAjBD,EAAQC,IAAoC,oBAARA,EAAsB,MAAO,CAAE,QAAWA,GAAS,IAAI/C,EAAQ0D,EAAyBD,GAAc,GAAIzD,GAASA,EAAM2D,IAAIZ,GAAQ,OAAO/C,EAAM1P,IAAIyS,GAAQ,IAAIa,EAAS,GAAQC,EAAwB5Y,OAAOmF,gBAAkBnF,OAAO6Y,yBAA0B,IAAK,IAAI9S,KAAO+R,EAAO,GAAY,YAAR/R,GAAqB/F,OAAOC,UAAUC,eAAeC,KAAK2X,EAAK/R,GAAM,CAAE,IAAI+S,EAAOF,EAAwB5Y,OAAO6Y,yBAAyBf,EAAK/R,GAAO,KAAU+S,IAASA,EAAKzT,KAAOyT,EAAK3D,KAAQnV,OAAOmF,eAAewT,EAAQ5S,EAAK+S,GAAgBH,EAAO5S,GAAO+R,EAAI/R,GAAY4S,EAAgB,QAAIb,EAAS/C,GAASA,EAAMI,IAAI2C,EAAKa,GAVhwBI,CAAwB,EAAQ,SAE7BT,EAAuB,EAAQ,SAE7B,EAAQ,SAEzBU,EAAW,EAAQ,QAEvB,SAASP,EAAyBD,GAAe,GAAuB,oBAAZS,QAAwB,OAAO,KAAM,IAAIC,EAAoB,IAAID,QAAeE,EAAmB,IAAIF,QAAW,OAAQR,EAA2B,SAAkCD,GAAe,OAAOA,EAAcW,EAAmBD,IAAsBV,GAIhU,SAASF,EAAuBR,GAAO,OAAOA,GAAOA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAEzF,SAASsB,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQxT,EAAKyT,GAAO,IAAM,IAAIC,EAAOJ,EAAItT,GAAKyT,GAAU/T,EAAQgU,EAAKhU,MAAS,MAAOtB,GAAwB,YAAfrC,EAAOqC,GAAsBsV,EAAKC,KAAQ7X,EAAQ4D,GAAiB7D,QAAQC,QAAQ4D,GAAOhC,KAAK6V,EAAOC,GAE7P,SAASI,EAAkBC,GAAM,OAAO,WAAc,IAAIC,EAAOjJ,KAAMkJ,EAAO1B,UAAW,OAAO,IAAIxW,SAAQ,SAAUC,EAASC,GAAU,IAAIuX,EAAMO,EAAGlZ,MAAMmZ,EAAMC,GAAO,SAASR,EAAM7T,GAAS2T,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQ,OAAQ9T,GAAU,SAAS8T,EAAOpW,GAAOiW,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQ,QAASpW,GAAQmW,OAAM5U,OAIjX,SAASqV,EAAkB9W,EAAQ2D,GAAS,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAM7G,OAAQF,IAAK,CAAE,IAAIma,EAAapT,EAAM/G,GAAIma,EAAW5U,WAAa4U,EAAW5U,aAAc,EAAO4U,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMla,OAAOmF,eAAelC,EAAQ+W,EAAWjU,IAAKiU,IAI7S,IAAIG,EAAS9T,QAET+T,EAAS/B,EAAiB,QAAEvS,OAAO,CACrCuU,eAAe,EACfC,QAAQ,EACRC,OAAQ,IACRC,aAAc,GACdC,SAAS,EACTC,MAAM,IAQJC,EAAiB,0CAYrB,IAAInL,EAAuB,WACzB,SAASA,EAAQ5I,IAnCnB,SAAyBgU,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,qCAoC5GC,CAAgBnK,KAAMpB,GAEtBxP,OAAOkW,OAAOtF,KAAMhK,GAIhBgK,KAAKoK,SAAW,IAClBpK,KAAKoK,SAAW,IAAInT,KAAK+I,KAAKoK,UAAUC,cAAcC,UAAU,EAAG,KAGjEtK,KAAKuK,UAAY,IACnBvK,KAAKuK,UAAY,IAAItT,KAAK+I,KAAKuK,WAAWF,cAAcC,UAAU,EAAG,KAGlEtK,KAAKwK,UAEE,aAAaC,KAAKzK,KAAKwK,YADjCxK,KAAKwK,SAAW,IAKdxK,KAAe,UACjBA,KAAK0K,iBAGF1K,KAAK2K,kBACR3K,KAAK2K,gBAAkB,IAzD7B,IAAsBV,EAAaW,EAAYC,EAue7C,OAveoBZ,EA8DPrL,GA9DoBgM,EA8DX,CAAC,CACrBzV,IAAK,eACLN,MAAO,SAAsBiW,EAAOC,GAClC,IAAIzI,EAAQyI,EAAOzI,MAAMwI,GAEzB,GAAIxI,GAASA,EAAMnT,OAAS,EAC1B,OAAOmT,EAAM,KAGhB,CACDnN,IAAK,iBACLN,MAAO,WArDX,IAAuBiE,EAAMkS,EAsDvBhL,KAAe,SAAIA,KAAe,SAAEiL,QAAQ,OAAQ,IAEhDjL,KAAK6C,SAxDQ/J,EAyDGkH,KAAe,SAzDZgL,EAyDehL,KAAK6C,OAxD3C/J,GAAQkS,IACVlS,EAAOA,EAAKmS,QAAQ,MAAO,IAAI7Q,kBAC/B4Q,EAAQA,EAAMC,QAAQ,MAAO,IAAI7Q,iBAuD3B4F,KAAe,SAAI,KAMvB,IACIsC,EAAQtC,KAAe,SAAEsC,MADjB,gFAGZ,GAAIA,EAAO,CAIT,GAHAtC,KAAKkL,QAAU5I,EAAM,GACrBtC,KAAKmL,MAAQ7I,EAAM,IAEdtC,KAAKwK,SAAU,CAClB,IAAIY,EAAcpL,KAAKqL,aAAa,kBAAmBrL,KAAKmL,MAAMF,QAAQ,YAAa,KAEnFG,GAAsC,IAAvBA,EAAYjc,OAC7B6Q,KAAKwK,SAAW,onBAA6nBc,OAAOF,EAAa,MAAOE,OAAOtL,KAAKmL,MAAO,QAE3rBnL,KAAKwK,SAAW,mmBAA2mBc,OAAOtL,KAAKmL,OAGzoBnL,KAAKwK,UAAY,ugBAA+gBc,OAAOtL,KAAKkL,QAAS,OAGvjBlL,KAAe,SAAI,QAAUA,KAAKmL,WAElCnL,KAAe,SAAIA,KAAe,SAAEiL,QAAQ,OAAQ,IACpDjL,KAAe,SAAIA,KAAe,SAAEiL,QAAQ,SAAU,IACtDjL,KAAe,SAAIA,KAAe,SAAEiL,QAAQ,uBAAwB,IACpEjL,KAAe,SAAIA,KAAe,SAAEiL,QAAQ,MAAO,IAGhDjL,KAAKwK,WACRxK,KAAKwK,SAAWxK,KAAe,YAGlC,CACD7K,IAAK,kBACLN,MAAO,WACL,GAAImL,KAAKuL,YACP,OAAOvL,KAAKuL,YAGd,IAAI1X,EAAOmM,KAAKwL,YAChB3X,GAAQ,IAAMmM,KAAKiC,WACnB,IAAIwJ,EAAYzL,KAAK0L,UAAY1L,KAAK0C,QAEtC,OAAI+I,EACKA,EAAY,IAAM5X,GAEzB0V,EAAOoC,KAAK,mDAAoD3L,KAAKiC,YAC9DpO,KAGV,CACDsB,IAAK,WACLN,MAAO,SAAkB2M,GACvB,IAAIoK,EAAUpK,EAAKc,MAAM,qBAEzB,OAAIsJ,EACKA,EAAQ,GAERpK,IAGV,CACDrM,IAAK,iBACLN,MAAO,WACL,OAAImL,KAAK6L,MACA7L,KAAK6L,OACF,EAAIzD,EAAS0D,SAAS9L,KAAK+L,QAG9B,KAFA/L,KAAK+L,OAAO,KAKtB,CACD5W,IAAK,cACLN,MAAO,WACL,OAAImL,KAAKgM,SACAhM,KAAKgM,SAGP,KAER,CACD7W,IAAK,cACLN,MAAO,WACL,OAAImL,KAAKiM,SACAjM,KAAKiM,SAGP,KAER,CACD9W,IAAK,gBACLN,MAAO,WACL,IAAIgX,EAAQ7L,KAAKkM,iBAEjB,OAAIL,GAASA,EAAMM,MACVN,EAAMM,MAEN,KAGV,CACDhX,IAAK,iBACLN,MAAO,WACL,IAAIgX,EAAQ7L,KAAKkM,iBAEjB,OAAIL,GAASA,EAAMO,OACVP,EAAMO,OAEN,KAIV,CACDjX,IAAK,cACLN,MAAO,WAGL,OAFAwX,OAAOrM,KAAKsM,UAERtM,KAAKsM,SAASnd,OAAS,IAClB6Q,KAAKsM,SAASrB,QAAQ,sBAAuB,MAE7CjL,KAAKsM,WAOf,CACDnX,IAAK,eACLN,MAAO,WACL,OAAImL,KAAK0L,SACA1L,KAAK0L,SACH1L,KAAK0C,QACP1C,KAAK0C,SAEZ6G,EAAOoC,KAAK,qBAAsB3L,KAAKiC,YA7MhB,UAqN1B,CACD9M,IAAK,oBACLN,MAAO,WACL,IAAI4W,EAAYzL,KAAKuM,eAErB,GAAId,EACF,OAAOA,EAAUe,MAAM,KAAK,KAG/B,CACDrX,IAAK,UACLN,MAAO,WACL,MAAO,IAAMmL,KAAKyM,WAEnB,CACDtX,IAAK,SACLN,MAAO,WACL,IAAI4W,EAAYzL,KAAKuM,eAErB,OAAKd,EAGIA,EAAY,IAAMzL,KAAK0M,UAFvB1M,KAAK0M,YAKf,CACDvX,IAAK,UACLN,MAAO,WACL,OAAOmL,KAAKwL,YAAc,IAAMxL,KAAKiC,aAEtC,CACD9M,IAAK,YACLN,MAAO,WACL,OAAO2U,EAAOxJ,KAAKsM,SAASrB,QAAQ,MAAO,UAAUA,QAAQ,MAAO,OAErE,CACD9V,IAAK,cACLN,MAAO,WACL,GAAImL,KAAe,SAAG,CACpB,IAAI2M,EAAY3M,KAAe,SAAE8J,OAEjC,GAAI6C,EAAUxd,OAAS,IAAK,CAC1B,IAAIyM,EAAQ+Q,EAAUC,QAAQ,MAE1BhR,EAAQ,GAAKA,EAAQ,IACvB+Q,EAAYA,EAAUrC,UAAU,EAAG1O,EAAQ,IAE3CA,EAAQ+Q,EAAUrC,UAAU,KAAKsC,QAAQ,KACzCD,EAAYA,EAAUrC,UAAU,EAAG,IAAM1O,GAAS,aAE1C+Q,EAAUE,SAAS,KAE/B,OAAOF,KAGV,CACDxX,IAAK,eACLN,MAAO,WACL,IAAIgO,EAAS7C,KAAK8M,YAElB,OAAIjK,EACK,MAAQA,EAER,KAGV,CACD1N,IAAK,YACLN,MAAO,WACL,OAAKmL,KAGMA,KAAK6C,OACP7C,KAAK6C,OACH7C,KAAK+M,OACqB,IAA/B/M,KAAK+M,OAAOH,QAAQ,OACf5M,KAAK+M,OAAOzC,UAAU,GAEtBtK,KAAK+M,OAIP,KAXA,OAcV,CACD5X,IAAK,oBACLN,MAAO,SAA2B+G,GAEhC,OAAIoE,KAAK+L,QAAU/L,KAAK+L,OAAO5c,OAASyM,GAA8C,kBAA9BoE,KAAK+L,OAAOnQ,GAAOoR,OAClEhN,KAAK+L,OAAOnQ,GAAOoR,OAAO/B,QAAQ,MAAO,IAG3C,KAER,CACD9V,IAAK,qBACLN,MAAO,WACL,IACE,IAAIgX,EAAQ7L,KAAKkM,iBAEjB,GAAIL,EACF,OAAIA,EAAMoB,UAAYpB,EAAMoB,SAAS9d,OAC5B0c,EAAMoB,SAASnD,OAGpBoD,MAAMC,QAAQtB,EAAMuB,UAAYvB,EAAMuB,QAAQje,OACzC0c,EAAMuB,QAAQtD,OAGhB+B,EAAMuB,QAEf,MAAO7a,GACPgX,EAAOhW,MAAMhB,GAGf,MAAO,KAER,CACD4C,IAAK,2BACLN,MAAO,SAAkC+G,GACvC,IAAIwR,EAAUpN,KAAKqN,qBACfL,EAAShN,KAAKsN,kBAAkB,GAcpC,OAZK,EAAIlF,EAAS0D,SAASsB,IAQf,EAAIhF,EAAS0D,SAASkB,KAChCI,EAAU,WAAaJ,GARnBA,GAAUI,EAAQhT,cAAcwS,QAAQI,EAAO5S,eAAiB,IAC7DgT,EAAQP,SAAS,KAGpBO,GAAW,YAAcJ,EAFzBI,GAAW,aAAeJ,GASzBI,IAER,CACDjY,IAAK,sBACLN,MAAO,WACL,OAAImL,KAAKuN,QACA,6BAA+BvN,KAAKuN,QAAQvH,GAAK,UAGrD,EAAIoC,EAAS0D,SAAS9L,KAAKwN,eAAhC,EACS,6BAA+BxN,KAAKwN,SAAS,GAAGxH,GAAK,WAG/D,CACD7Q,IAAK,YACLN,MAAO,WACL,IAAI4Y,IAAOjG,UAAUrY,OAAS,QAAsB2E,IAAjB0T,UAAU,KAAmBA,UAAU,GAE1E,IACE,GAAIxH,KAAKuK,UAAW,CAClB,IAAIA,EAAY,IAAItT,KAAK+I,KAAKuK,WAC1BmD,EAAUC,KAAKC,OAAO,IAAI3W,KAASsT,GAAa,KAChDsD,EAAWF,KAAKC,MAAMF,EAAU,OAEpC,OAAIG,EAAW,EACN7N,KAAK8N,YAAW,IAGzBD,EAAWF,KAAKC,MAAMF,EAAU,QAEhB,EACPG,EAAW,KAAOJ,EAAO,OAAS,KAG3CI,EAAWF,KAAKC,MAAMF,EAAU,KAEjB,EACNG,EAAW,KAAOJ,EAAO,OAAS,IAGpCE,KAAKC,MAAMF,GAAW,KAAOD,EAAO,OAAS,IAC/C,GAAIzN,KAAK+N,gBACd,OAAO/N,KAAK+N,gBAGd,MAAOxb,GACPgX,EAAOhW,MAAMhB,EAAK,YAAayN,KAAKiC,WAAYjC,KAAKhK,OAGvD,MAAO,KAER,CACDb,IAAK,YACLN,MAAO,WACL,GAAImL,KAAKuK,WACP,GAA8B,kBAAnBvK,KAAKuK,WACd,GAA8B,KAA1BvK,KAAKuK,UAAUpb,OACjB,OAAO8H,KAAK+W,MAAMhO,KAAKuK,UAAY,UAEhC,GAAI0D,OAAOC,UAAUlO,KAAKuK,WAC/B,OAAO,IAAItT,KAAK+I,KAAKuK,gBAGvBhB,EAAOhW,MAAM,YAAayM,KAAKiC,WAAYjC,KAAKuK,aAGnD,CACDpV,IAAK,aACLN,MAAO,SAAoBsZ,GACzB,IACE,GAAInO,KAAKuK,UACP,OAAO,IAAItT,KAAK+I,KAAKuK,WAAW6D,mBAAmB,QAAS,CAC1DC,KAAM,UACNC,MAAOH,EAAS,QAAU,OAC1BpX,IAAK,YAEF,GAAIiJ,KAAK+N,gBACd,OAAO/N,KAAK+N,gBAEZxE,EAAOoC,KAAK,aAAc3L,KAAKiC,YAEjC,MAAO1P,GACPgX,EAAOhW,MAAMhB,EAAK,aAAcyN,KAAKiC,YAGvC,MAAO,KAER,CACD9M,IAAK,qBACLN,MAAO,WACL,IAAIyN,EAAQtC,KAAKwK,SAASlI,MApbR,6CAobgC2I,QAAQ,KArb/C,mBAubX,SAAI3I,GAASA,EAAMnT,OAAS,IACnBmT,EAAM,KAKhB,CACDnN,IAAK,qBACLN,MAAO,WACL,OAAqC,IAA9BmL,KAAKuO,uBAEb,CACDpZ,IAAK,iBACLN,MAAO,SAAwB2Z,EAAiBC,GAC9C,OAAOzO,KAAKwK,SAASS,QAAQ,IAAIyD,OApcf,6CAocwCzD,QAAQ,KAAMuD,IAAmBC,KAE5F,CACDtZ,IAAK,mBACLN,MAAO,WACL,IAAI8Z,EAAkB3O,KAAKwK,SAASlI,MAAMyH,GACtC6E,EAAoC,OAApBD,QAAgD,IAApBA,OAA6B,EAASA,EAAgBhT,KAAI,SAAU2G,GAClH,OAAOA,EAAMA,MAAM,0CAA0C,MAG/D,SAAIsM,GAAiBA,EAAczf,OAAS,IACnCyf,OAhe+DzF,EAAkBc,EAAY5a,UAAWub,GAAiBC,GAAa1B,EAAkBc,EAAaY,GAue3KjM,EAzckB,GAkd3B,SAAS2I,IAeP,OAdAA,EAAgBwB,EAAgC8F,mBAAmBC,MAAK,SAASC,EAAQC,GACvF,OAAOH,mBAAmBI,MAAK,SAAkBC,GAC/C,OACE,OAAQA,EAASC,KAAOD,EAASE,MAC/B,KAAK,EACH,OAAOF,EAASG,OAAO,UAAU,EAAI1H,EAAe2H,kBAAkBN,IAExE,KAAK,EACL,IAAK,MACH,OAAOE,EAASK,UAGrBR,QAEgBjf,MAAMkQ,KAAMwH,WArBnC7W,EAAiB,QAAIiO,G,qIC9dN4Q,MAzBf,SAA6BC,GAI3B,IAAMC,EAAWD,EAAQC,UAAY,EAC/BC,EAAYnJ,iBAAO,GACzB,EAAkClN,mBAAS,MAApCsW,EAAS,KAAEC,EAAY,KAgB9B,OAdApW,qBAAU,WACR,IAAMqW,EA5BV,SAAmB9G,EAAI+G,GACrB,IAAIC,EACEC,EAAM,WACND,IACFhH,EAAE,yBAAIgH,IACNA,OAAWlc,IAWf,OARkB,WACe,IAA/B,IAAMoc,IAAiBF,EAAQ,mBADX9G,EAAI,yBAAJA,EAAI,gBAExB8G,EAAW9G,EACPgH,GAGJva,OAAO5B,WAAWkc,EAAKF,IAcFI,EAAS,WACxBxa,OAAOya,YAAcV,GACvBG,EAAala,OAAOya,YAAcT,EAAU9I,QAAU,OAAS,MAC3D8G,KAAK0C,IAAI1a,OAAOya,YAAcT,EAAU9I,SAAW,MACrD8I,EAAU9I,QAAUlR,OAAOya,cAG7BP,EAAa,QAEd,KAEH,OADAte,SAAS+e,iBAAiB,SAAUR,GAC7B,kBAAMve,SAASgf,oBAAoB,SAAUT,MACnD,IACIF,G,oBCvBMY,EAhBO,SAACxa,GAAK,OAC1B,EAAC,IAAEwB,IAAG,CAACqB,EAAE,OAAOiD,gBAAgB,QAAQ2U,WAAY,CAAE9Y,GAAI,SAAUC,GAAI,WAAaO,QAAS,CAAER,GAAI,OAAQC,GAAI,QAAUS,eAAe,SAASqY,GAAI,IACpJ,EAAC,IAAElZ,IAAG,CAACqB,EAAE,OAAOiE,SAAS,SAAS3E,QAAQ,OAAOC,WAAW,UAC1D,EAAC,IAAEZ,IAAG,CAACqB,EAAE,MAAM8X,cAAc,YAAYC,SAAS,OAAO9V,GAAI,EAAG3C,QAAQ,OAAOC,WAAW,UACxF,EAAC,IAAEyY,EAAC,CAACC,QAAS,CAAE9U,MAAO,IAAO3J,OAAO,SAASlB,KAAK,6GAA6GyH,GAAI,GAAIE,KAAK,kBAAgB,eAI7L,EAAC,IAAE+X,EAAC,CAACC,QAAS,CAAE9U,MAAO,IAAO3J,OAAO,SAASlB,KAAK,iCAAiCyH,GAAI,GAAIE,KAAK,kBAAgB,oB,kGCoB1GiY,EAxBW,SAAC/a,GACzB,MAAwCsD,mBAAS,GAAzC0X,EAAW,KAAEC,EAAc,KAWnC,OATAxX,qBAAU,WACR,IAAMyX,EAA0BC,YAAU,2BAC1CC,IAAGC,SAASC,UAAUze,MAAK,SAAA0e,GAAQ,OACjCN,EAAgBM,EAASpX,QAAO,SAAAnC,GAAO,OACrCf,KAAK+W,MAAMhW,EAAQwZ,WAAava,KAAK+W,MAAMkD,MAA2B/hB,aAGzE,IAGD,EAAC,IAAU,CAAC4T,GAAG,oBAAoBnK,GAAI,GAAIF,MAAM,kCAAkCmC,SAAS,WAAW+F,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAX7I,qBAWkK/O,QAAS1M,EAAM0M,SACjM,EAAC,IAAEpK,IAAG,CAAChG,IAAKof,IAAUC,IAAK,QAAUX,EAAc,oCAClDA,EAAc,GACb,EAAC,IAAE1S,KAAI,CAAC7C,GAAG,MAAM5C,EAAE,OAAO0C,EAAE,OAAOoL,aAAc,IAAK9L,SAAS,WAAWS,KAAM,EAAGH,OAAQ,EAAGhD,QAAQ,OAAOC,WAAW,SAASC,eAAe,SAAS8I,MAAM,QAAQyQ,WAAY,EAAGhB,SAAU,GAC9L,EAAC,IAAEtS,KAAI,KAAE0S,M,wGCkBJa,EAhCI,SAAC7b,GAClB,IACM0M,EAAU1M,EAAM0M,SAAW,OACjC,OACE,EAAC,IAAElL,IAAG,CAACqB,EAAE,OAAO6C,OAAQ1F,EAAM8b,gBAAkB,IAAM,KAAMhV,SAAS,SAAS5I,EAAE,OAAO6d,GAAI,GAAIrB,GAAI,CAAE/Y,GAAI,OAAQqa,GAAI,KAAO7Z,QAAS,CAAER,GAAI,OAAQC,GAAI,QAAU6Y,WAAY,CAAE9Y,GAAI,SAAUC,GAAI,WAAaS,eAAe,SAASD,WAAW,UAC/O,EAAC,IAAEZ,IAAG,CAACya,KAAM,CAAEta,GAAI,OAAQC,GAAI,SAAWO,QAAQ,OAAOC,WAAW,SAASC,eAAgB,CAAEV,GAAI,SAAUC,GAAI,eAC/G,EAAC,IAAU,CAACmL,GAAG,IAAInC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAL7D,cAKkF/O,QAASA,GAAS,EAAC,IAAEpK,IAAG,CAAChG,IAAKgP,IAAMqQ,IAAI,qBAAqB7U,SAAS,YAExK,UAAMoV,OAAO,UAAUC,OAAO,MAAMC,SAAU,SAACthB,GAC5B,IAAIuhB,SAASvhB,EAAEuB,QAClBoC,IAAI,MAChB3D,EAAEiW,mBAGJ,EAAC,IAAEvP,IAAG,CAACya,KAAM,CAAEta,GAAI,OAAQC,GAAI,SAAWO,QAAQ,OAAOC,WAAW,SAASC,eAAe,UAC1F,EAAC,IAAE2C,MAAK,CAAChJ,KAAK,SAAS6B,KAAK,IAAI4H,GAAG,SAASpK,EAAG,GAAIyH,KAAK,SAASD,EAAG,IAAKyZ,WAAW,OAAO3L,aAAc,EAAG1L,YAAY,eACxH,EAAC,IAAEC,OAAM,CAACO,GAAG,OAAOzJ,KAAK,SAAS6G,EAAG,GAAI0C,EAAG,GAAIpD,QAAQ,OAAOC,WAAW,SAASC,eAAe,UAAS,EAAC,IAAEC,IAAG,CAAChG,IAAKyP,IAAQlJ,EAAG,QAGtI,EAAC,IAAErB,IAAG,CAACya,KAAK,QAAQtB,cAAc,YAAYC,SAAS,QAAQzY,QAAQ,OAAOC,WAAW,WAAWC,eAAe,SAAS6E,cAAc,SAASnE,UAAU,SAC3J,EAAC,IAAE1H,EAAC,CAACyH,KAAK,OAAOwE,WAAW,WAAW6D,MAAM,OAAOjJ,GAAI,KAAK,IAAIjB,MAAOmX,mBAAmB,QAAS,CAAEhX,QAAS,OAAQiX,KAAM,UAAWC,MAAO,OAAQvX,IAAK,aAC5J,EAAC,IAAES,IAAG,CAACW,QAAQ,OAAOE,eAAe,WAAW6E,cAAc,OAC5D,EAAC,EAAiB,CAAC0D,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAASA,IACpF,EAAC,IAAEmO,EAAC,CAAC1f,KAAK,mCAAmCkB,OAAO,SAASuG,GAAI,GAAIF,MAAM,uBAAsB,SAAKpG,IAAKigB,IAAUZ,IAAI,yBACzH,EAAC,IAAEd,EAAC,CAAC1f,KAAK,8BAA8BkB,OAAO,SAASuG,GAAI,GAAIF,MAAM,wBAAuB,EAAC,IAAEJ,IAAG,CAAChG,IAAKkgB,IAASb,IAAI,uBAAuBpW,EAAE,UAC/I,EAAC,IAAU,CAACwH,GAAG,gBAAgBnK,GAAI,GAAIF,MAAM,2BAA2BkI,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAxBpH,cAwByI/O,QAASA,GAAS,EAAC,IAAEpK,IAAG,CAAChG,IAAKkK,IAASmV,IAAI,kC,4CC5BpMc,EAAe1c,IAAO2c,IAAG,0EAAV3c,CAAU,+oFAgkBhBkO,qBAHS,SAACpE,GAAK,kCAAWA,EAAM8S,MAAI,IAAE/R,UAAW+C,YAAa9D,GAAQmD,UAAWY,YAAa/D,QAClF,SAACiE,GAAQ,OAAKC,6BAAmB,GAAID,KAEjDG,EAzXA,SAACjO,GACG4c,YAAQ,MAEzB,OACE,EAAC,IAAEpb,IAAG,CAACqB,EAAE,OAAOf,YAAY,OAAO+a,eAAe,IAAIC,kBAAkB,IAAIrC,WAAY,CAAE9Y,GAAI,SAAUC,GAAI,WAAaO,QAAS,CAAER,GAAI,OAAQC,GAAI,QAAUS,eAAe,SAASqY,GAAI,GAAI7V,SAAS,YACrM,EAAC,IAAErD,IAAG,CAACqB,EAAE,OAAOiE,SAAS,SAAS3E,QAAQ,OAAOC,WAAW,SAASC,eAAe,SAASuY,SAAS,UACpG,EAAC6B,EAAY,KACX,YACE,QAAIM,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,QAAQnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OANtH,WAM0I,QAClJ,YACE,QAAIsB,gBAAc,QAChB,EAAC,IAAU,CAAChQ,GAAG,qBAAqBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAThH,WASoI,gBACxI,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,kCAAkCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAZjI,WAYqJ,iBAEvJ,YACE,EAAC,IAAU,CAAC1O,GAAG,gCAAgCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAf/H,WAemJ,eAErJ,YACE,EAAC,IAAU,CAAC1O,GAAG,6BAA6BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAlB5H,WAkBgJ,YAElJ,YACE,EAAC,IAAU,CAAC1O,GAAG,mCAAmCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OArBlI,WAqBsJ,kBAExJ,YACE,EAAC,IAAU,CAAC1O,GAAG,6BAA6BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAxB5H,WAwBgJ,YAElJ,YACE,EAAC,IAAU,CAAC1O,GAAG,gCAAgCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3B/H,WA2BmJ,eAErJ,YACE,EAAC,IAAU,CAAC1O,GAAG,mCAAmCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9BlI,WA8BsJ,kBAExJ,YACE,EAAC,IAAU,CAAC1O,GAAG,gCAAgCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjC/H,WAiCmJ,eAErJ,YACE,EAAC,IAAU,CAAC1O,GAAG,kCAAkCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApCjI,WAoCqJ,mBAI3J,YAAI,EAAC,IAAU,CAAC1O,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAxC9G,WAwCkI,aACxI,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1CpH,WA0CwI,qBAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,cAAcnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7CzG,WA6C6H,UAEnI,YACE,EAAC,IAAU,CAAC1O,GAAG,eAAenC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhD1G,WAgD8H,WAEpI,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnDjH,WAmDqI,uBAgB3I,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApEpH,WAoEwI,UAE9I,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,kBAAkBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtEpI,WAsEwJ,aAC5J,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,iCAAiCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzEhI,WAyEoJ,mBAEtJ,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA5ExH,WA4E4I,WAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,+BAA+BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA/E9H,WA+EkJ,mBAIxJ,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApF/G,WAoFmI,gBAEzI,YACE,EAAC,IAAU,CAAC1O,GAAG,gBAAgBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvF3G,WAuF+H,YAErI,YACE,EAAC,IAAU,CAAC1O,GAAG,kBAAkBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1F7G,WA0FiI,cAEvI,YACE,EAAC,IAAU,CAAC1O,GAAG,eAAenC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7F1G,WA6F8H,aAIxI,QAAIsB,gBAAc,SAAQ,EAAC,IAAU,CAAChQ,GAAG,WAAWnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjG1H,WAiG8I,YAExJ,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,YAAYnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnG1H,WAmG8I,YACtJ,YACE,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,mBAAmBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OArGrI,WAqGyJ,mBAC7J,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,2BAA2BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAxG1H,WAwG8I,YAEhJ,YACE,EAAC,IAAU,CAAC1O,GAAG,2BAA2BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3G1H,WA2G8I,YAEhJ,YACE,EAAC,IAAU,CAAC1O,GAAG,iCAAiCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9GhI,WA8GoJ,kBAEtJ,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjHzH,WAiH6I,WAE/I,YACE,EAAC,IAAU,CAAC1O,GAAG,2BAA2BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApH1H,WAoH8I,YAEhJ,YACE,EAAC,IAAU,CAAC1O,GAAG,iCAAiCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvHhI,WAuHoJ,kBAEtJ,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1HxH,WA0H4I,UAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,2CAA2CnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7H1I,WA6H8J,sBAIpK,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjItI,WAiI0J,oBAC9J,YACE,QAAIsB,gBAAc,QAChB,EAAC,IAAU,CAAChQ,GAAG,6BAA6BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApI5H,WAoIgJ,aAElJ,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvIxH,WAuI4I,SAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,uCAAuCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1ItI,WA0I0J,uBAE5J,YACE,EAAC,IAAU,CAAC1O,GAAG,+BAA+BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7I9H,WA6IkJ,eAEpJ,QAAIsB,gBAAc,QAChB,EAAC,IAAU,CAAChQ,GAAG,gCAAgCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhJ/H,WAgJmJ,WAErJ,YACE,EAAC,IAAU,CAAC1O,GAAG,8BAA8BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnJ7H,WAmJiJ,cAEnJ,YACE,EAAC,IAAU,CAAC1O,GAAG,kCAAkCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtJjI,WAsJqJ,kBAEvJ,YACE,EAAC,IAAU,CAAC1O,GAAG,wBAAwBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzJvH,WAyJ2I,UAIjJ,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,YAAYnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7J9H,WA6JkJ,YACtJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhKtH,WAgK0I,eAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,wBAAwBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnKvH,WAmK2I,gBAE7I,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtKxH,WAsK4I,kBAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzKzH,WAyK6I,mBAInJ,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,cAAcnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7KhI,WA6KoJ,cACxJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhLzH,WAgL6I,gBAE/I,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnLrH,WAmLyI,YAE3I,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtLrH,WAsLyI,YAE3I,YACE,EAAC,IAAU,CAAC1O,GAAG,qBAAqBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzLpH,WAyLwI,WAE1I,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA5LtH,WA4L0I,aAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA/LrH,WA+LyI,YAE3I,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAlMtH,WAkM0I,eAIhJ,YACE,EAAC,IAAU,CAAC1O,GAAG,mBAAmBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvM9G,WAuMkI,WAExI,YACE,EAAC,IAAU,CAAC1O,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1M5G,WA0MgI,SAEtI,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7M/G,WA6MmI,YAEzI,YACE,EAAC,IAAU,CAAC1O,GAAG,2BAA2BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhNtH,WAgN0I,qBAIpJ,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,aAAanC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApN3H,WAoN+I,aACvJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,kCAAkCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvN7H,WAuNiJ,uBAEvJ,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1N/G,WA0NmI,WAEzI,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7NrH,WA6NyI,mBAE/I,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhO/G,WAgOmI,kBAEzI,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnOrH,WAmOyI,iBAE/I,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtOjH,WAsOqI,eAI/I,QAAIsB,gBAAc,QAChB,EAAC,IAAU,CAAChQ,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3OxG,WA2O4H,iBACpI,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9OlH,WA8OsI,UAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,wBAAwBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjPnH,WAiPuI,WAE7I,YACE,EAAC,IAAU,CAAC1O,GAAG,2BAA2BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApPtH,WAoP0I,cAEhJ,YACE,EAAC,IAAU,CAAC1O,GAAG,gCAAgCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvP3H,WAuP+I,cAErJ,YACE,EAAC,IAAU,CAAC1O,GAAG,wBAAwBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1PnH,WA0PuI,WAE7I,QAAIsB,gBAAc,QAChB,EAAC,IAAU,CAAChQ,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7PrH,WA6PyI,aAC7I,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,iCAAiCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhQhI,WAgQoJ,WAEtJ,YACE,EAAC,IAAU,CAAC1O,GAAG,iCAAiCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnQhI,WAmQoJ,WAEtJ,YACE,EAAC,IAAU,CAAC1O,GAAG,oCAAoCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtQnI,WAsQuJ,cAEzJ,YACE,EAAC,IAAU,CAAC1O,GAAG,mCAAmCnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzQlI,WAyQsJ,eAI5J,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9QlH,WA8QsI,UAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,wBAAwBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjRnH,WAiRuI,WAE7I,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApR/G,WAoRmI,SAI7I,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,SAASnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAxRvH,WAwR2I,SACnJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,yBAAyBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3RpH,WA2RwI,qBAE9I,YACE,EAAC,IAAU,CAAC1O,GAAG,gBAAgBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9R3G,WA8R+H,WAErI,YACE,EAAC,IAAU,CAAC1O,GAAG,oBAAoBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjS/G,WAiSmI,eAEzI,YACE,EAAC,IAAU,CAAC1O,GAAG,eAAenC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApS1G,WAoS8H,UAEpI,YACE,EAAC,IAAU,CAAC1O,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvS5G,WAuSgI,YAEtI,YACE,EAAC,IAAU,CAAC1O,GAAG,kBAAkBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1S7G,WA0SiI,YAEvI,QAAIsB,gBAAc,QAChB,yBACA,YACE,YACE,EAAC,IAAU,CAAChQ,GAAG,mBAAmBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhTlH,WAgTsI,cAExI,YACE,EAAC,IAAU,CAAC1O,GAAG,cAAcnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnT7G,WAmTiI,SAEnI,YACE,EAAC,IAAU,CAAC1O,GAAG,gBAAgBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtT/G,WAsTmI,WAErI,YACE,EAAC,IAAU,CAAC1O,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAzThH,WAyToI,YAEtI,YACE,EAAC,IAAU,CAAC1O,GAAG,4BAA4BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA5T3H,WA4T+I,uBAEjJ,YACE,EAAC,IAAU,CAAC1O,GAAG,aAAanC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA/T5G,WA+TgI,QAElI,YACE,EAAC,IAAU,CAAC1O,GAAG,sBAAsBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAlUrH,WAkUyI,qBAMnJ,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,UAAUnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAxUxH,WAwU4I,UACpJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3UlH,WA2UsI,iBAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,iBAAiBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA9U5G,WA8UgI,WAEtI,YACE,EAAC,IAAU,CAAC1O,GAAG,gBAAgBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAjV3G,WAiV+H,YAMzI,QAAIsB,gBAAc,QAAO,EAAC,IAAU,CAAChQ,GAAG,YAAYnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvV1H,WAuV8I,YACtJ,YACE,YACE,EAAC,IAAU,CAAC1O,GAAG,4BAA4BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA1VvH,WA0V2I,iBAEjJ,YACE,EAAC,IAAU,CAAC1O,GAAG,0BAA0BnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA7VrH,WA6VyI,kBAE/I,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAhWlH,WAgWsI,eAE5I,YACE,EAAC,IAAU,CAAC1O,GAAG,uBAAuBnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAnWlH,WAmWsI,iBAIhJ,EAAC,IAAE5V,GAAE,CAACxD,eAAe,YAClB2I,GAGC,EAAC,IAAU,CAAC+B,GAAG,eAAe5B,MAAM,QAAQ7D,WAAW,SAASyU,GAAI,EAAGrB,GAAI,GAAIjV,GAAI,CAAEM,EAAG,MAAOC,MAAO,QAAUpD,GAAI,EAAG+X,cAAc,YAAY/P,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OA3W3N,WA2W+O,qB,oEC/hBtPuB,EAzBA,SAAH,GAAgH,IAA1Gvb,EAAS,EAATA,UAAWuO,EAAE,EAAFA,GAAIjD,EAAE,EAAFA,GAAI5N,EAAG,EAAHA,IAAK8V,EAAO,EAAPA,QAAS7E,EAAO,EAAPA,QAAS6M,EAAQ,EAARA,SAAUhT,EAAQ,EAARA,SAAUW,EAAS,EAATA,UAAWoC,EAAS,EAATA,UAAWN,EAAO,EAAPA,QAAS+O,EAAM,EAANA,OAC7G,QAAgD3d,IAAX2d,EAAsB,CACzD,IAAMyB,EAAcvd,OAAO2G,SAASnL,KAI9BgiB,EAAa,CAAE1B,SAAQ2B,eAHNrQ,EAGsBsQ,YAFzB1d,OAAOpE,SAAS+hB,SAEsBC,YADtC5d,OAAO6d,SAEvB9Q,IACFyQ,EAAWzQ,QAAUA,GAQvB,OACE,EAAC,UAAO,CAACvN,IAAKA,EAAK8d,SAAUA,EAAUjN,GAAIA,EAAIjD,GAAIA,EAAIkI,QAASA,EAAS7E,QAPlD,WACvBqN,YAAiB,aAAcC,cAAe9S,EAAWI,MAA8BgC,EAAWkQ,EAAaC,GAC3G/M,GACFA,KAIkG3O,UAAWA,GAAYwI,GAG/H,OACE,EAAC,UAAO,CAAC9K,IAAKA,EAAK8d,SAAUA,EAAUjN,GAAIA,EAAIjD,GAAIA,EAAIkI,QAASA,EAAS7E,QAASA,EAAS3O,UAAWA,GAAYwI,I,yCCnBzG0T,EAAY,SAAH,GAAqD,IAA/CC,EAAY,EAAZA,aAAcC,EAAS,EAATA,UAAWC,EAAe,EAAfA,gBAC7CC,EAAUvN,sBAAO1S,GACjBkgB,EAAqBC,uBAAY,SAAC9hB,GAClCyhB,GAAgBG,EAAQlN,UACrBkN,EAAQlN,QAAQqN,SAAS/hB,EAAMgiB,gBAClCP,GAAa,OASnB,OALAna,qBAAU,WAER,OADAsa,EAAQlN,QAAQyJ,iBAAiB,WAAY0D,GACrC,kBAAMD,EAAQlN,QAAQ0J,oBAAoB,WAAYyD,MAC7D,CAACD,EAAQlN,UAGV,EAAC,IAAEuN,KAAI,CAAC3N,IAAKsN,EAAS7B,OAAO,UAAUC,OAAO,MAAMha,QAAQ,OAAOiF,oBAAoB,YAAYK,GAAI,GAAI4W,QAAS,EAAGxZ,SAAS,WAAWuX,SAAU,SAACthB,GACnI,IAAIuhB,SAASvhB,EAAEuB,QAClBoC,IAAI,MAChB3D,EAAEiW,mBAGJ,EAAC,IAAE/L,MAAK,CAAChJ,KAAK,SAASiJ,YAAY,aAAapH,KAAK,IAAIiI,gBAAiBgY,GAAmB,OAAQziB,EAAE,sBAAsBsV,aAAc,EAAG9N,EAAE,OAAO4N,IAAKoN,IAC5J,EAAC,IAAE3Y,OAAM,CAAClJ,KAAK,SAASkC,EAAG,EAAG7C,EAAG,EAAGwH,EAAG,GAAI4C,GAAG,QAAO,EAAC,IAAEnD,IAAG,CAAC6T,MAAO,GAAIC,OAAQ,GAAIrP,GAAG,OAAOzK,IAAKgiB,OACjGV,GACC,EAAC,IAAEtb,IAAG,CAAChG,IAAKiiB,IAAUnO,QAAS,kBAAMwN,GAAa,IAAQY,OAAO,UAAU3Z,SAAS,WAAW3G,EAAG,EAAGoH,IAAI,YAAYH,MAAM,UAAUgR,MAAO,GAAIC,OAAQ,OAcjJqI,EARe,SAAH,GAAkB,EAAZC,aAAsD,IAAxCd,EAAY,EAAZA,aAAcC,EAAS,EAATA,UAAW/W,EAAQ,EAARA,SACtE,OACE,EAAC,IAAEtF,IAAG,CAACqB,EAAE,OAAOxH,EAAG,GAAIwJ,SAAS,WAAWa,OAAO,QAAQJ,IAAI,OAAOqZ,KAAK,uDAAuDvc,WAAW,SAAS0D,gBAAgB,UAAUgB,SAAUA,GACvL,EAAC,EAAS,CAAC8W,aAAcA,EAAcC,UAAWA,M,iGC5BlDe,GAAe7e,YAAOid,GAAO,gFAAdjd,EACnB,gBAAG8e,EAAW,EAAXA,YAAW,OAAOC,YAAG,iIACxB5e,IAES2e,GAAe,cAcpBE,GAAc,SAAH,GAA4E,IAAtEhS,EAAE,EAAFA,GAAIkQ,EAAQ,EAARA,SAAUhT,EAAQ,EAARA,SAAUW,EAAS,EAATA,UAAWoC,EAAS,EAATA,UAAWN,EAAO,EAAPA,QAASsS,EAAQ,EAARA,SAC5E,OACU,GAACJ,GADPI,EACmB,CAACjS,GAAIA,EAAIkQ,SAAUA,EAAUtC,cAAc,YAAY7X,KAAK,QAAQF,GAAI,CAAEmD,EAAG,OAAQkZ,SAAU,KAAOvE,GAAI,EAAGqB,GAAI,EAAGtW,GAAI,CAAEM,EAAG,MAAOC,MAAO,SAAWmF,MAAO,CAAEpF,EAAG,QAASC,MAAO,QAAU6Y,YAAY,QAAQha,SAAS,WAAW+F,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,EAAS+O,OAAO,iBAE1S,CAAC1O,GAAIA,EAAIkQ,SAAUA,EAAUtC,cAAc,YAAY7X,KAAK,QAAQF,GAAI,CAAEmD,EAAG,OAAQkZ,SAAU,KAAO9T,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAASnB,SAAS,WAAW+F,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,EAAS+O,OAAO,iBAFwFxR,IAM7UiV,GAAwB,SAAH,GAAsE,IAAhExS,EAAO,EAAPA,QAASyS,EAAa,EAAbA,cAAeC,EAAW,EAAXA,YAAaxU,EAAS,EAATA,UAAWoC,EAAS,EAATA,UACzEqS,EAAiB3S,EAAQ8J,MAAM,KAAK,GACpC8I,EAAmB5S,EAAQ8J,MAAM,KAAK,IAAM9J,EAAQ8J,MAAM,KAAK,GAC/D+I,EAAS/O,mBACf/M,qBAAU,WACR1F,YAAW,WACLwhB,EAAO1O,SACT0O,EAAO1O,QAAQ2O,sBAGlB,CAAC9S,IACJ,IAAM+S,EAAa,SAAH,GAAkE,IAA5D1S,EAAE,EAAFA,GAAI9C,EAAQ,EAARA,SAAUW,EAAS,EAATA,UAAWoC,EAAS,EAATA,UAAWN,EAAO,EAAPA,QAASsS,EAAQ,EAARA,SACjE,OACU,GAACD,GADPC,EACkB,CAACjS,GAAIA,EAAIiS,UAAQ,EAACpU,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,EAASuQ,SAAU,SAAC3Q,EAAOhG,GACpH,QAAIgG,MACEA,EAAMoT,SAGFpT,EAAMN,MAAQ,IAAL,OAASqT,EAAc,YAAIC,MAK5B,CAACvS,GAAIA,EAAInC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,EAASuQ,SAAU,SAAC3Q,EAAOhG,GAC3G,QAAIgG,MACEA,EAAMoT,SAGFpT,EAAMN,MAAQ,IAAL,OAASqT,EAAc,YAAIC,MAP5CrV,IAcR,OAAQoV,GACN,IAAK,OACH,OACE,GAAC,IAAE7d,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,QAAQnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACpF,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACjG,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAC7F,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACrG,GAAC+S,EAAU,CAAC1S,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC1F,GAAC+S,EAAU,CAAC1S,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC3F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBAClG,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC9F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eAChG,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC5F,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC9F,GAAC+S,EAAU,CAAC1S,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAGjG,IAAK,YACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACzF,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAClG,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAChG,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAChG,GAAC+S,EAAU,CAAC1S,GAAG,kCAAkCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBAC9G,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACtG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACtG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAGxG,IAAK,gBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,MAChG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACpG,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACvG,GAAC+S,EAAU,CAAC1S,GAAG,gCAAgCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC5G,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACpG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACtG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAG1G,IAAK,SACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,UAAUnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACtF,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC7F,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACnG,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAGlG,IAAK,kBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAC/F,GAAC+S,EAAU,CAAC1S,GAAG,6BAA6BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACzG,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACvG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACtG,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACvG,GAAC+S,EAAU,CAAC1S,GAAG,iCAAiCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7G,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC7F,GAAC+S,EAAU,CAAC1S,GAAG,iCAAiCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7G,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACtG,GAAC+S,EAAU,CAAC1S,GAAG,2CAA2CnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAG7H,IAAK,mBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAChG,GAAC+S,EAAU,CAAC1S,GAAG,6BAA6BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACzG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACrG,GAAC+S,EAAU,CAAC1S,GAAG,uCAAuCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBACnH,GAAC+S,EAAU,CAAC1S,GAAG,kCAAkCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC9G,GAAC+S,EAAU,CAAC1S,GAAG,gCAAgCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eAC5G,GAAC+S,EAAU,CAAC1S,GAAG,8BAA8BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC1G,GAAC+S,EAAU,CAAC1S,GAAG,+BAA+BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAC3G,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAG1G,IAAK,WACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxF,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACnG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACpG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBACrG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAG5G,IAAK,aACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAC1F,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACtG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAClG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAClG,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACjG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACrG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACnG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAClG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAGzG,IAAK,QACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,SAASnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACrF,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBACrG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC/F,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC5F,GAAC+S,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,OACzF,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC7F,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC7F,GAAC+S,EAAU,CAAC1S,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC1F,GAAC+S,EAAU,CAAC1S,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC3F,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC5F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,OAChG,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC5F,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAGnG,IAAK,WACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxF,GAAC+S,EAAU,CAAC1S,GAAG,4BAA4BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACxG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACnG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,MACtG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACnG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBACtG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBAG1G,IAAK,UACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACvF,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC/F,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACrG,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACjG,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACvG,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAGnG,IAAK,YACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACzF,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC9F,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC/F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAClG,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACjG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACpG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACnG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBAG3G,IAAK,YACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACzF,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC9F,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACjG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACnG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC/F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAChG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAClG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACpG,GAAC+S,EAAU,CAAC1S,GAAG,iCAAiCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,wBAGnH,IAAK,gBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAClG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACrG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACpG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACpG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAG5G,IAAK,WACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxF,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC7F,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC9F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAClG,GAAC+S,EAAU,CAAC1S,GAAG,6BAA6BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBACzG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAGrG,IAAK,YACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACzF,GAAC+S,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC9F,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC/F,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACjG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACnG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC/F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAClG,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACjG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAClG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAClG,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAGxG,IAAK,gBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAClG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACvG,GAAC+S,EAAU,CAAC1S,GAAG,+BAA+BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC3G,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAG3G,IAAK,UACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACvF,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC5F,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC7F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAChG,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC7F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAChG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC/F,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC/F,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBAGzG,IAAK,iBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBAC9F,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACnG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACpG,GAAC+S,EAAU,CAAC1S,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACpG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACrG,GAAC+S,EAAU,CAAC1S,GAAG,4BAA4BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACxG,GAAC+S,EAAU,CAAC1S,GAAG,gCAAgCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC5G,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAG5G,IAAK,gBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7F,GAAC+S,EAAU,CAAC1S,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAClG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACrG,GAAC+S,EAAU,CAAC1S,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACnG,GAAC+S,EAAU,CAAC1S,GAAG,4BAA4BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACxG,GAAC+S,EAAU,CAAC1S,GAAG,iCAAiCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAC7G,GAAC+S,EAAU,CAAC1S,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAG7G,IAAK,oBACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBACjG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACtG,GAAC+S,EAAU,CAAC1S,GAAG,+BAA+BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAC3G,GAAC+S,EAAU,CAAC1S,GAAG,8BAA8BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAC1G,GAAC+S,EAAU,CAAC1S,GAAG,mCAAmCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC/G,GAAC+S,EAAU,CAAC1S,GAAG,8BAA8BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAGhH,IAAK,UACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACvF,GAAC+S,EAAU,CAAC1S,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QAC5F,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAC7F,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACjG,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC/F,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC/F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAChG,GAAC+S,EAAU,CAAC1S,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAG5G,IAAK,MACH,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAAC,IAAU,CAACpS,GAAG,IAAI4N,cAAc,YAAY7X,KAAK,QAAQF,GAAI,GAAIuI,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS7D,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,EAAGzd,WAAW,SAAS0d,iBAAkB,EAAGC,iBAAiB,QAAQC,iBAAiB,UAAUvY,GAAI,GAAImD,UAAWA,EAAWoC,UAAWA,EAAWyO,OAAQ2D,GAAa,GAAC,IAAE9c,IAAG,CAAChG,IAAK2jB,MAAa,uBAC5V,GAACR,EAAU,CAAC1S,GAAG,OAAOnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,2BACnF,GAAC+S,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACxF,GAAC+S,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACzF,GAAC+S,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACzF,GAAC+S,EAAU,CAAC1S,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC3F,GAAC+S,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACxF,GAAC+S,EAAU,CAAC1S,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAGvG,QACE,OACE,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOwd,UAAU,SAASC,WAAW,SAASlF,GAAI,GAAIqB,GAAI,GAAItL,IAAK0O,GAChF,GAACM,EAAU,CAAC1S,GAAG,QAAQnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,QACpF,GAAC+S,EAAU,CAAC1S,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACvF,GAAC+S,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxF,GAAC+S,EAAU,CAAC1S,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACzF,GAAC+S,EAAU,CAAC1S,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7F,GAAC+S,EAAU,CAAC1S,GAAG,UAAUnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACtF,GAAC+S,EAAU,CAAC1S,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAC/F,GAAC+S,EAAU,CAAC1S,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAChG,GAAC+S,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxF,GAAC+S,EAAU,CAAC1S,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAC1F,GAAC+S,EAAU,CAAC1S,GAAG,SAASnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SACrF,GAAC+S,EAAU,CAAC1S,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YAExF,GAAC+S,EAAU,CAAC1S,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBA6CvFwT,GAAuBC,eAAKjB,IAE1BkB,GAzCM,SAACpgB,GACpB,MAAwCsD,oBAAS,GAA1Cob,EAAY,KAAE2B,EAAe,KAC9BC,EAAY9P,iBAAO,MACnB+P,EAAa/P,iBAAO,MAiB1B,OAdA/M,qBAAU,WACJ6c,EAAUzP,SACZyP,EAAUzP,QAAQ2P,UAEnB,CAACF,EAAUzP,UACdpN,qBAAU,WACR,GAAI8c,EAAW1P,QAAS,CACtB,IAAMjB,EAAW2Q,EAAW1P,QAAQ4P,uBAAuB,UAAU,GACjE7Q,GACFA,EAAS4P,eAAe,CAAEkB,SAAU,OAAQC,MAAO,UAAWC,OAAQ,cAGzE,CAAC5gB,EAAM0M,QAAS6T,EAAW1P,UAG5B,GAAC,IAAErP,IAAG,CAACqB,EAAE,OAAO4X,WAAY,CAAE9Y,GAAI3B,EAAMqQ,QAAU,UAAY,SAAUzO,GAAI,UAAYO,QAAS,CAAER,GAAI3B,EAAMqQ,QAAU,OAAS,OAAQzO,GAAI,QAAUsF,cAAc,SAASrC,SAAS,WAAWiB,gBAAgB,QAAQ+a,UAAU,mCACjO,GAAC,IAAErf,IAAG,CAACqB,EAAE,QAAQV,QAAQ,OAAOC,WAAW,SAASyC,SAAS,WAAWuC,oBAAoB,iBAAiBsT,GAAI,GAAI1T,GAAI,IACvH,GAAC,IAAExF,IAAG,CAACW,QAAQ,OAAOC,WAAW,SAASgF,oBAAoB,aAAayY,IAAK,GAC9E,GAAC,IAAU,CAAC9S,GAAG,IAAIL,QAAS1M,EAAM0M,QAAS9B,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OApBvF,iBAoB4G,GAAC,IAAEnZ,IAAG,CAAChG,IAAKgP,IAAMqQ,IAAI,qBAAqBmF,SAAU,CAAElf,GAAI,QAAU2D,EAAG,CAAE5D,GAAI,QAAUiJ,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OApBpR,mBAqBXzb,EAAM0M,SACL,GAAC,IAAU,CAACK,GAAI,IAAM/M,EAAM0M,QAAQ8J,MAAM,KAAK,GAAI1T,KAAK,QAAQ8H,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAtBtI,iBAsB0J,MAAKzb,EAAM+gB,YAAcC,0BAAgBhhB,EAAM0M,QAAQ8J,MAAM,KAAK,MAE1O,GAAC,IAAEqE,EAAC,CAACzK,QAAS,WAAwC,OAAhCiQ,GAAiB3B,IAAsB,GAASF,OAAO,WAAU,GAAC,IAAElc,IAAG,CAAChG,IAAK2kB,KAAWtF,IAAI,iBAChH3b,EAAMkhB,WAAaxC,GAAgB,GAAC,EAAS,CAACA,aAAcA,EAAcd,aAAcyC,EAAiBxC,UAAWyC,IACtH,GAAC,IAAE9e,IAAG,CAAC2f,GAAI,GAAIhf,QAAQ,OAAOE,eAAe,SAASD,WAAW,UAC9DpC,EAAMiK,WAGX,GAACiW,GAAoB,CAACxT,QAAS1M,EAAM0M,QAASyS,cAAeoB,EAAY3V,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWoS,YA9BjH,oB,kFC5VtB,IAEenR,sBAFS,SAACpE,GAAK,MAAM,CAAEe,UAAW+C,YAAa9D,GAAQmD,UAAWY,YAAa/D,OACnE,SAACiE,GAAQ,OAAKC,6BAAmB,CAAEqT,oBAAkBtT,KACjEG,EAjDR,SAA8BjO,GACnC,MAAoCsD,oBAAS,GAAtC+d,EAAU,KAAEC,EAAa,KAChC,EAAwChe,oBAAS,GAA1Cob,EAAY,KAAE2B,EAAe,KAC9BC,EAAY9P,iBAAO,MAqBzB,OAnBA/M,qBAAU,WACJzD,EAAMgC,SACRuf,IAAGlG,SAASlX,QAAO,SAAAqd,GACjB,OAAOA,EAAMC,OAASzhB,EAAMgC,QAAQiK,cACnCyV,QAAQ7kB,MAAK,SAAA8kB,GACd,OACSL,IADLK,EAAM,SAMb,GAAC3hB,EAAMgC,SAAUhC,EAAMgC,QAAQiK,aAElCxI,qBAAU,WACJ6c,EAAUzP,SACZyP,EAAUzP,QAAQ2P,UAEnB,CAACF,EAAUzP,UAGZ,GAAC,IAAErP,IAAG,CAACqB,EAAE,OAAO4X,WAAY,CAAE9Y,GAAI3B,EAAMqQ,QAAU,UAAY,SAAUzO,GAAI,UAAYO,QAAS,CAAER,GAAI3B,EAAMqQ,QAAU,OAAS,OAAQzO,GAAI,QAAUsF,cAAc,SAASrC,SAAS,WAAWiB,gBAAgB,QAAQ+a,UAAU,mCACjO,GAAC,IAAErf,IAAG,CAACqB,EAAE,QAAQV,QAAQ,OAAOC,WAAW,SAASyC,SAAS,WAAWuC,oBAAoB,kBAAkB+Z,GAAI,GAAI1Z,GAAI,GAAIT,GAAI,IAChI,GAAC,IAAExF,IAAG,KACJ,GAAC,IAAU,CAACuL,GAAG,KAAI,GAAC,IAAEzK,IAAG,CAAChG,IAAKgP,IAAMqQ,IAAI,qBAAqBmF,SAAU,CAAElf,GAAI,QAAU2D,EAAG,CAAE5D,GAAI,QAAUiJ,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAxBvJ,wBAwB4K/O,QAAS1M,EAAM0M,YAEzM,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOE,eAAe,WAAWD,WAAW,SAASwf,OAAQ,IAC1E,GAAC,IAAE/G,EAAC,CAAC1f,KAAK,IAAIiV,QAAS,WAAmD,OA1C7D,SAACpO,EAASqf,GAE3BA,EACKE,IAAGlG,SAASwG,MAAM,QAAQC,OAAO9f,EAAQiK,YAAW,SAEpDsV,IAAGlG,SAAS0G,IAAI,CAAEN,KAAMzf,EAAQiK,WAAYjK,YAAWnF,MAAK,SAAAmT,GAAE,OACnEuR,IAAGlG,SAASwG,MAAM,MAAMG,MAAMhS,EAAK,GAAoB,YAoCpBiS,CAAejiB,EAAMgC,QAASqf,GAAoBC,GAAeD,KAC9F,GAAC,IAAE/e,IAAG,CAAChG,IAAK+kB,EAAaa,KAAoBC,KAAiBxG,IAAI,oCAEpE,GAACyG,GAAA,EAAkB,CAACC,KAAMriB,EAAMgC,QAAUhC,EAAMgC,QAAQsgB,aAAe,KACvE,GAAC,IAAEzH,EAAC,CAACzK,QAAS,WAAwC,OAAhCiQ,GAAiB3B,IAAsB,GAASF,OAAO,WAAU,GAAC,IAAElc,IAAG,CAAChG,IAAK2kB,KAAWtF,IAAI,iBAChH3b,EAAMkhB,WAAaxC,GAAgB,GAAC,EAAS,CAACA,aAAcA,EAAcd,aAAcyC,EAAiBxC,UAAWyC,KAExH,GAAC,IAAE9e,IAAG,CAAC2f,GAAI,GAAIhf,QAAQ,OAAOE,eAAe,SAASD,WAAW,UAC9DpC,EAAMiK,WAGX,GAACiW,GAAoB,CAACxT,QAAS1M,EAAMgC,SAAWhC,EAAMgC,QAAQ0K,QAAU1M,EAAMgC,QAAQ0K,QAAgB,S,kCCnEtG6V,GAAa,CACjBjd,IAAK,qBACLH,MAAO,oBACPqd,OAAQ,oBACR7D,KAAM,sBAEF8D,GAAa,CACjBnd,IAAK,CACHA,IAAK,EACLH,MAAO,EACPwZ,KAAM,GAERxZ,MAAO,CACLG,IAAK,EACLH,MAAO,EACPqd,OAAQ,GAEVA,OAAQ,CACNrd,MAAO,EACPqd,OAAQ,EACR7D,KAAM,GAERA,KAAM,CACJrZ,IAAK,EACLkd,OAAQ,EACR7D,KAAM,IAKJ+D,GAAgB3iB,IAAOyB,IAAG,2EAAVzB,CAAU,uBAE5B,SAAAC,GAAK,OAAI8e,YAAG,wCACiB,QAAnB9e,EAAM6E,UAAyC,WAAnB7E,EAAM6E,UAA0B7E,EAAM2iB,KAAO3iB,EAAM2iB,KAAO,OAClE,QAAnB3iB,EAAM6E,UAAyC,WAAnB7E,EAAM6E,WAA0B7E,EAAM2iB,KAAoB,OAAb3iB,EAAM2iB,KAC5E3iB,EAAM4iB,KAAoC,KAA7BL,GAAWviB,EAAM6E,cAK1Cge,GAAgB9iB,IAAOyB,IAAG,2EAAVzB,CAAU,sFAOnB,SAAAC,GAAK,OAAIA,EAAM4iB,KAAO,KAAO,SACtCpT,YAAG,qBAIDsT,GAAgB/iB,IAAOyB,IAAG,2EAAVzB,CAAU,qOAI5B,SAAAC,GAAK,OAAIyiB,GAAWziB,EAAM6E,aAEf,SAAA7E,GAAK,OAAKA,EAAM4iB,KAAoC,KAA7BL,GAAWviB,EAAM6E,YAOnD2K,YAAG,mBACHtP,KAgBG,IAAM6iB,GAAS,SAAH,GAA4E,IAAtEze,EAAM,EAANA,OAAQqe,EAAI,EAAJA,KAAMxM,EAAK,EAALA,MAAOtR,EAAQ,EAARA,SAAUme,EAAK,EAALA,MAAwB/Y,GAAF,EAAfnE,gBAAyB,EAARmE,UAC9E,OACE,GAACyY,GAAa,CAACE,KAAMte,EAAQqe,KAAMA,EAAM9d,SAAUA,GACjD,GAACge,GAAa,CAACD,KAAMte,EAAQ8L,QAAS4S,IACtC,GAACF,GAAa,CAACF,KAAMte,EAAQzB,EAAGsT,EAAOtR,SAAUA,GAC9CoF,KAaT8Y,GAAOE,aAAe,CACpB3e,QAAQ,EACRO,SAAU,OACVsR,MAAO,QAGM4M,I,kLCzFTG,GAAe,SAAH,GAAiF,IAA3E3S,EAAM,EAANA,OAAQhG,EAAe,EAAfA,gBAAiB4Y,EAAY,EAAZA,aAAcnW,EAAS,EAATA,UAAWpC,EAAS,EAATA,UAAW8B,EAAO,EAAPA,QAC7E0W,EDqDD,SAAmB3J,GACxB,IAAMmJ,EAAOnJ,KAAaA,EAAQmJ,KAClC,EAA4Btf,mBAASsf,GAA9Bte,EAAM,KAAE+e,EAAS,KACxB,MAAO,CACL/e,SACAse,KAAM,kBAAMS,GAAU,IACtBL,MAAO,kBAAMK,GAAU,IACvBC,OAAQ,kBAAMD,GAAW/e,KC5DZif,GAETC,EAAW,SAACxjB,GAChB,OAAQ,GAAC,IAAU,CAAC+M,GAAI/M,EAAM+M,GAAIjK,KAAK,gBAAgBzH,EAAG,EAAGoK,GAAI,CAAEO,MAAO,UAAYmF,MAAO,CAAEnF,MAAO,OAAS7D,QAAQ,QAAQiO,QAAS,WAAQgT,EAAOJ,QAASzY,KAAqBK,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAAO,gBAAgB/O,QAAS1M,EAAM0M,SAAU1M,EAAMiK,WAE/RwZ,EAAcxF,uBAAY,WAC9BmF,EAAOR,OACPrY,IACI4Y,GACFA,GAAa,MAGXvF,EAAeK,uBAAY,WAC/BmF,EAAOJ,QACPzY,IACI4Y,GACFA,GAAa,MAGjB,OACE,qBACE,GAAC,IAAEje,OAAM,CAACkL,QAASqT,EAAa3d,gBAAgB,QAAQqF,MAAM,OAAOpG,OAAO,IAAI1J,EAAG,EAAG8G,QAAQ,OAAOE,eAAe,SAASD,WAAW,UACtI,UAAK9F,IAAKonB,KAAM/H,IAAI,MAEtB,GAACoH,GAAM,gBAAKK,EAAM,CAAEO,UAAU,QAAQxN,MAAM,SAC1C,GAAC,IAAEjR,OAAM,CAACkL,QAASwN,EAAc9X,gBAAgB,QAAQzK,EAAG,GAAIiK,IAAK,EAAGH,MAAO,EAAGhD,QAAQ,OAAOC,WAAW,SAASC,eAAe,WAAWQ,EAAG,QAChJ,GAAC,IAAEP,IAAG,CAAChG,IAAKiiB,OAEd,GAAC,EAAS,CAACT,gBAAgB,YAC3B,GAAC,IAAEpB,IAAG,CAACzV,GAAI,IACT,GAAC,KAAS,KACR,GAAC,IAAU,CAAC8F,GAAG,IAAI5K,QAAQ,OAAOC,WAAW,SAAS2Z,GAAI,GAAI6H,GAAI,GAAIzY,MAAO,CAAEpF,EAAG,OAAQC,MAAO,OAAS2U,cAAc,YAAY7X,KAAK,SAAS8H,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,EAAS+O,OA9BtM,gBA8B2NrL,QAAS,WAAQgT,EAAOJ,QAASzY,MAAqB,GAAC,IAAEjI,IAAG,CAAChG,IAAKunB,MAAmB,aAC1T,GAAC,KAAa,CAACtT,OAAQA,EAAQ7N,MAAM,OAAO7E,KAAM,YAChD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,QAAQnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAChG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAC7G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACzG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,qBACjH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACtG,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACvG,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,uBAC9G,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACjH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAC1G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBAC5G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACxG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAC1G,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aAGnG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,UAAU7E,KAAK,YAClD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACnG,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAGvG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,WAAW7E,KAAK,YACnD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBACpG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAC3G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,qBAC5G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACpG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACtG,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAGrG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,YAAY7E,KAAK,YACpD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACrG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,kCAAkCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,uBAC1H,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAC5G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAClH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBAC5G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,iBAClH,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,sBAAsBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eAG1G,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,gBAAgB7E,KAAK,YACxD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBACzG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC/G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAChH,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,2BAA2BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACnH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,gCAAgCnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACxH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAChH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,0BAA0BnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cAClH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,uBAAuBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAC/G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WAChH,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,SAGxG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,QAAQ7E,KAAK,YAChD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,SAASnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACjG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,yBAAyBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,qBACjH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,gBAAgBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,WACxG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eAC5G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UACvG,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACzG,GAAC,IAAE7G,GAAE,CAACf,GAAI,IAAI,GAAC0e,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,YACzG,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eAGhG,GAAC,IAAU,CAACK,GAAG,UAAU+W,SAAU,EAAGzoB,EAAE,YAAY6G,GAAI,EAAGuD,GAAG,UAAUtD,QAAQ,QAAQmF,WAAW,MAAM6D,MAAM,UAAUiF,QAAS,WAAQgT,EAAOJ,QAASzY,KAAqBK,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,UAE5O,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,OAAO7E,KAAK,YAC/C,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACpG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACtG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACpG,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBAGtG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,aAAa7E,KAAK,YACrD,GAAC,IAAEwH,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACpG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACrG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACzG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACrG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACrG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gBACnG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACzG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,iBAAiBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kBACzG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,OAAOnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,gCAC/F,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAC1G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,qBAAqBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,uBAC7G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAAC,IAAE2Y,EAAC,CAAC1f,KAAK,yBAAyBkB,OAAO,SAASyG,KAAK,gBAAgBzH,EAAG,EAAGoK,GAAI,CAAEO,MAAO,UAAYmF,MAAO,CAAEnF,MAAO,OAAS7D,QAAQ,SAAO,QAC7J,GAAC,IAAE0D,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,WAAWnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACnG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAAC,IAAE2Y,EAAC,CAAC1f,KAAK,gCAAgCkB,OAAO,SAASyG,KAAK,gBAAgBzH,EAAG,EAAGoK,GAAI,CAAEO,MAAO,UAAYmF,MAAO,CAAEnF,MAAO,OAAS7D,QAAQ,SAAO,gBACpK,GAAC,IAAE0D,GAAE,CAAC3D,GAAI,IAAI,GAAC,IAAE2Y,EAAC,CAAC1f,KAAK,8BAA8BkB,OAAO,SAASyG,KAAK,gBAAgBzH,EAAG,EAAGoK,GAAI,CAAEO,MAAO,UAAYmF,MAAO,CAAEnF,MAAO,OAAS7D,QAAQ,SAAO,aAClK,GAAC,IAAE0D,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,mBAAmBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,oBAC3G,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,oBAAoBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,uBAGxG,GAAC,KAAa,CAAC6D,OAAQA,EAAQ7N,MAAM,YACnC,GAAC,IAAE2C,GAAE,KACH,GAAC,IAAEQ,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mCACtG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,kCACvG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,aAAanC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,cACrG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACtG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,eACtG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,kBAAkBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,mBAC1G,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,wBAAwBnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,uBAChH,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,eAAenC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,sBACvG,GAAC,IAAE7G,GAAE,CAAC3D,GAAI,IAAI,GAACshB,EAAQ,CAACzW,GAAG,YAAYnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,aACpG,GAAC,IAAE7G,GAAE,KAAC,GAAC2d,EAAQ,CAACzW,GAAG,cAAcnC,UAAWA,EAAWoC,UAAWA,EAAWN,QAASA,GAAQ,4BAIpG,GAAC,IAAElL,IAAG,CAACW,QAAQ,OAAOC,WAAW,SAAS2Z,GAAI,GAAI6H,GAAI,GAAIzY,MAAM,OAAOwP,cAAc,YAAY7X,KAAK,UAAQ,gBAC9G,GAAC,IAAE+X,EAAC,CAAC1f,KAAK,mCAAmCgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAKynB,KAAQnhB,GAAI,KAAM,aAC9L,GAAC,IAAEiY,EAAC,CAAC1f,KAAK,8BAA8BgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAK0nB,IAAOphB,GAAI,GAAI2C,EAAE,SAAS,YACjM,GAAC,IAAEsV,EAAC,CAAC1f,KAAK,oCAAoCgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAK2nB,KAAOrhB,GAAI,KAAM,cAC9L,GAAC,IAAEiY,EAAC,CAAC1f,KAAK,6CAA6CgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAK4nB,KAAOthB,GAAI,KAAM,aACvM,GAAC,IAAEiY,EAAC,CAAC1f,KAAK,2DAA2DgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAK6nB,KAAOvhB,GAAI,KAAM,YACrN,GAAC,IAAEiY,EAAC,CAAC1f,KAAK,OAAOgH,QAAQ,OAAOC,WAAW,SAAS0D,gBAAgB,UAAU5D,GAAI,EAAG7G,EAAE,YAAYsV,aAAc,EAAG7N,KAAK,YAAW,GAAC,IAAER,IAAG,CAAChG,IAAK8nB,KAASxhB,GAAI,KAAM,kBAO9Jud,kBAAK+C,I,qBCzILjV,uBAFS,SAACpE,GAAK,8CAAWA,EAAM7H,SAAY6H,EAAM0R,UAAQ,IAAE3Q,UAAW+C,YAAa9D,GAAQmD,UAAWY,YAAa/D,QACxG,SAACiE,GAAQ,OAAKC,6BAAmB,MACA,KAAM,CAChEsW,eAAgB,SAACjL,EAAMD,EAAMmL,EAAcC,GACzC,OAAQpL,EAAKnX,QAAQA,UAAYoX,EAAKpX,QAAQA,SAAamX,EAAKqL,eAAiBpL,EAAKoL,eAF3EvW,EA/BR,SAAiBjO,GACtB,MAAkCsD,oBAAS,GAApC4d,EAAS,KAAEiC,EAAY,KACxBsB,EAAW7H,YAAQ,QAAS,EAC5BtW,EAAWoe,wBACXC,EAAkBnL,EAAmB,CAAEE,SAAU,MACjDkL,IAAkBte,EAASqE,SAAS2B,MAAM,8FAChD,OACE,GAAC,IAAEuY,OAAM,CACPC,UAAW,GACXjgB,SAAW7E,EAAM8b,gBAAkB,SAAW,QAASxW,IAAKtF,EAAM8b,iBAA8C,OAApB6I,EAAR,MAA2C,QAASlf,GAAG,QAC3I5C,EAAG7C,EAAM8b,gBAAkB,SAAW,OAAQiJ,mBAAoB/kB,EAAM8b,gBAAkB,OAAS,MACnGpW,OAAQ1F,EAAM8b,gBAAkB,OAAQ,KACxC/U,GAAG,OAAOie,yBAAyB,+BAA+BC,mBAAmB,SAErF,GAAC,GAAmB,CAACjjB,QAAShC,EAAMgC,QAASqO,QAASoU,GAAYG,EAAe1D,UAAWA,GAC1F,GAAC,GAAY,CAAC3Q,OAAO,UAAUhG,gBAAiBvK,EAAMuK,gBAAiB4Y,aAAcA,EAAcvY,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,WAE5K,GAAC,GAAY,CAACA,QAASpG,EAASqE,SAASsK,QAAQ,KAAM,IAAK8L,WAAY/gB,EAAMwkB,aAAcnU,QAASoU,IAAaG,EAAe1D,UAAWA,EAAWtW,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,WAClM,GAAC,GAAY,CAACuD,OAAO,SAAShG,gBAAiBvK,EAAMuK,gBAAiB4Y,aAAcA,EAAcvY,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,WAE3K,GAAC,IAAElL,IAAG,CAACiZ,WAAYgK,EAAW,SAAW,WACvC,GAAC,EAAa,MACd,GAACS,EAAU,CAACta,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,UACnF,GAAC,EAAM,CAACoP,gBAAiB9b,EAAM8b,gBAAiBpP,QAAS1M,EAAM0M,gB,oCCrCvEtT,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQ0U,QAAU1U,EAAQwqB,cAAgBxqB,EAAQyqB,WAAazqB,EAAQ0qB,YAAc1qB,EAAQ2qB,iBAAc,EAE3G3qB,EAAQ2qB,YADY,cAGpB3qB,EAAQ0qB,YADY,cAQpB1qB,EAAQyqB,WALWG,IAAW,CAC5BvpB,KAJkB,cAKlB4S,QAAS2W,IAUX5qB,EAAQwqB,cALcI,IAAW,CAC/BvpB,KAbkB,cAclB4S,QAAS2W,IAyBX5qB,EAAQ0U,QApBQ,CAACxF,EAAQ,CACvB0b,QAAS,MAETvpB,OACA4S,cAEA,OAAQ5S,GACN,IAxBgB,cAyBhB,IA3BgB,cA4Bd,MAAO,IAAK6N,EAER0b,QAAS3W,GAIf,QACE,OAAO/E,K,oCCvCbzQ,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAiB,aAAI,EAErB,IAAI6qB,EAAS9T,EAAuB,EAAQ,SAExC+T,EAAY/T,EAAuB,EAAQ,SAE/C,SAASA,EAAuBR,GAAO,OAAOA,GAAOA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAEzF,SAASwU,EAAQpmB,EAAQqmB,GAAkB,IAAIC,EAAOxsB,OAAOwsB,KAAKtmB,GAAS,GAAIlG,OAAOysB,sBAAuB,CAAE,IAAIC,EAAU1sB,OAAOysB,sBAAsBvmB,GAASqmB,IAAmBG,EAAUA,EAAQ3hB,QAAO,SAAU4hB,GAAO,OAAO3sB,OAAO6Y,yBAAyB3S,EAAQymB,GAAKvnB,eAAiBonB,EAAKnsB,KAAKK,MAAM8rB,EAAME,GAAY,OAAOF,EAE9U,SAASI,EAAc3pB,GAAU,IAAK,IAAIpD,EAAI,EAAGA,EAAIuY,UAAUrY,OAAQF,IAAK,CAAE,IAAIwiB,EAAS,MAAQjK,UAAUvY,GAAKuY,UAAUvY,GAAK,GAAIA,EAAI,EAAIysB,EAAQtsB,OAAOqiB,IAAS,GAAIwK,SAAQ,SAAU9mB,GAAO+mB,EAAgB7pB,EAAQ8C,EAAKsc,EAAOtc,OAAY/F,OAAO+sB,0BAA4B/sB,OAAOgtB,iBAAiB/pB,EAAQjD,OAAO+sB,0BAA0B1K,IAAWiK,EAAQtsB,OAAOqiB,IAASwK,SAAQ,SAAU9mB,GAAO/F,OAAOmF,eAAelC,EAAQ8C,EAAK/F,OAAO6Y,yBAAyBwJ,EAAQtc,OAAa,OAAO9C,EAEjf,SAAS6pB,EAAgBhV,EAAK/R,EAAKN,GAAiK,OAApJM,KAAO+R,EAAO9X,OAAOmF,eAAe2S,EAAK/R,EAAK,CAAEN,MAAOA,EAAOL,YAAY,EAAM6U,cAAc,EAAMC,UAAU,IAAkBpC,EAAI/R,GAAON,EAAgBqS,EAE3M,SAASmV,EAAeC,EAAKrtB,GAAK,OAUlC,SAAyBqtB,GAAO,GAAIpP,MAAMC,QAAQmP,GAAM,OAAOA,EAVtBC,CAAgBD,IAQzD,SAA+BA,EAAKrtB,GAAK,IAAIutB,EAAY,MAAPF,EAAc,KAAyB,qBAAX3nB,QAA0B2nB,EAAI3nB,OAAOwS,WAAamV,EAAI,cAAe,GAAU,MAANE,EAAY,OAAQ,IAAkDC,EAAIC,EAAlDC,EAAO,GAAQC,GAAK,EAAUC,GAAK,EAAmB,IAAM,IAAKL,EAAKA,EAAGjtB,KAAK+sB,KAAQM,GAAMH,EAAKD,EAAGpN,QAAQtG,QAAoB6T,EAAKltB,KAAKgtB,EAAG5nB,QAAY5F,GAAK0tB,EAAKxtB,SAAWF,GAA3D2tB,GAAK,IAAoE,MAAOrqB,GAAOsqB,GAAK,EAAMH,EAAKnqB,EAAO,QAAU,IAAWqqB,GAAsB,MAAhBJ,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIK,EAAI,MAAMH,GAAQ,OAAOC,EARzbG,CAAsBR,EAAKrtB,IAI5F,SAAqCqF,EAAGyoB,GAAU,IAAKzoB,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAO0oB,EAAkB1oB,EAAGyoB,GAAS,IAAI1nB,EAAIjG,OAAOC,UAAUuH,SAASrH,KAAK+E,GAAGuB,MAAM,GAAI,GAAc,WAANR,GAAkBf,EAAE8S,cAAa/R,EAAIf,EAAE8S,YAAYvT,MAAM,GAAU,QAANwB,GAAqB,QAANA,EAAa,OAAO6X,MAAM+P,KAAK3oB,GAAI,GAAU,cAANe,GAAqB,2CAA2CoV,KAAKpV,GAAI,OAAO2nB,EAAkB1oB,EAAGyoB,GAJpTG,CAA4BZ,EAAKrtB,IAEnI,WAA8B,MAAM,IAAIib,UAAU,6IAFuFiT,GAMzI,SAASH,EAAkBV,EAAKc,IAAkB,MAAPA,GAAeA,EAAMd,EAAIntB,UAAQiuB,EAAMd,EAAIntB,QAAQ,IAAK,IAAIF,EAAI,EAAGouB,EAAO,IAAInQ,MAAMkQ,GAAMnuB,EAAImuB,EAAKnuB,IAAOouB,EAAKpuB,GAAKqtB,EAAIrtB,GAAM,OAAOouB,EAMhL,IAAIC,EAAS,SAAgBC,GAC3B,IAAItd,EAAWsd,EAAKtd,SAChBud,EAAcD,EAAKE,OACnBA,OAAyB,IAAhBD,EAAyB,OAASA,EAC3CE,EAAiBH,EAAK9lB,UACtBA,OAA+B,IAAnBimB,EAA4B,QAAUA,EAClDC,EAAUJ,EAAKK,GACfA,OAAiB,IAAZD,EAAqB,MAAQA,EAClCE,EAAYtsB,SAASusB,eAAeL,GAMpCM,EADmB1B,EAHDb,EAAgB,QAAEliB,UAAS,WAC/C,OAAO/H,SAASQ,cAAc6rB,MAEuB,GACtB,GAUjC,OARApC,EAAgB,QAAE/hB,WAAU,WAG1B,OAFAskB,EAAUC,UAAUjG,IAAItgB,GACxBomB,EAAUjrB,YAAYmrB,GACf,WACLF,EAAUlrB,YAAYorB,MAEvB,IAEiBtC,EAAmB,QAAEwC,aAAahe,EAAU8d,IAGlE,SAASG,EAAWC,GAClB,IAAI9X,EAAU8X,EAAM9X,QAChBpG,EAAWke,EAAMle,SACjBme,EAAQ,CACVvjB,SAAU,QACVS,IAAK,EACLkd,OAAQ,EACR7D,KAAM,EACNxZ,MAAO,EACPkjB,WAAY,qBACZC,WAAY,gBACZ5iB,OAAQ,IACR+U,WAAYpK,EAAU,UAAY,SAClCyK,QAASzK,EAAU,IAAM,KAE3B,OAAoBmV,EAAgB,QAAEzpB,cAAc,MAAO,CACzDqsB,MAAOA,GACNne,GAiFL,IAAIse,EA9EJ,SAAkBC,GAChB,IAAInY,EAAUmY,EAAMnY,QAChB5O,EAAY+mB,EAAM/mB,UAClBwI,EAAWue,EAAMve,SACjBwd,EAASe,EAAMf,OACfgB,EAAgBD,EAAME,QACtBA,OAA4B,IAAlBD,GAAkCA,EAC5CE,EAAkBH,EAAM7E,UACxBA,OAAgC,IAApBgF,EAA6B,MAAQA,EACjDP,EAAQ,CACVQ,OAAQ,cACRC,QAAS,OACTR,WAAY,OACZ1X,aAAc,MACd7J,SAAU,QACVqP,MAAO,MACPtR,SAAU,WACVyjB,WAAY,sBACZzH,UAAW,qCAGTiI,EAAiB9C,EAAcA,EAAc,GAAIoC,GAAQ,GAAI,CAC/D1iB,OAAQ,GACRb,SAAU,UAGZ,GAAI6jB,EACF,OAAoBlD,EAAgB,QAAEzpB,cAAcurB,EAAQ,CAC1DG,OAAQA,GACMjC,EAAgB,QAAEzpB,cAAcmsB,EAAY,CAC1D7X,QAASA,GACKmV,EAAgB,QAAEzpB,cAAc,MAAO,CACrDqsB,MAAOA,EACP3mB,UAAWA,GACVwI,KAEH,IAAI8e,EAAiB,GAErB,OAAQpF,GACN,IAAK,eACHoF,EAAiB,CACfvG,OAAQ,EACRrd,MAAO,GAET,MAEF,IAAK,cACH4jB,EAAiB,CACfvG,OAAQ,EACR7D,KAAM,GAER,MAEF,IAAK,WACHoK,EAAiB,CACfzjB,IAAK,EACLqZ,KAAM,GAER,MAEF,IAAK,YACL,QACEoK,EAAiB,CACfzjB,IAAK,EACLH,MAAO,GAKb,OAAoBqgB,EAAgB,QAAEzpB,cAAcurB,EAAQ,CAC1DG,OAAQA,GACMjC,EAAgB,QAAEzpB,cAAc,MAAO,CACrDqsB,MAAOpC,EAAcA,EAAc,GAAI8C,GAAiBC,GACxDtnB,UAAWA,GACVwI,KAKPtP,EAAiB,QAAI4tB,G,wMC3JRS,GAAY,EAGZC,GAF4BD,EAAYE,kBAAkBzlB,YAE9C,SAAC5F,EAAMgB,EAAO4a,GACrC,GAAKuP,EAAL,CAEA,IAAMG,EAAsB,aAC1BC,KAAM,EACN5d,KAAM,KACHiO,GAGL,GAAI0P,EAAoBC,KAAM,CAC5B,IAAMC,EAAU,IAAIpoB,KAClBA,KAAKqoB,MAAmC,MAA3BH,EAAoBC,MACjCG,cAEFhuB,SAASiuB,OACP3rB,EACA,IACA4rB,mBAAmB5qB,GACnB,aACAwqB,EACA,UACAF,EAAoB3d,UACb2d,EAAoBzR,QAC7Bnc,SAASiuB,OACP3rB,EACA,IACA4rB,mBAAmB5qB,GACnB,aACAsqB,EAAoBzR,QACpB,UACAyR,EAAoB3d,KAEtBjQ,SAASiuB,OACP3rB,EACA,IACA4rB,mBAAmB5qB,GACnB,UACAsqB,EAAoB3d,QAIb2P,EAAY,SAACtd,GAA4B,IAAtB6rB,EAAe,UAAH,6CAAG,GAC7C,OACGV,GACCztB,SAASiuB,OAAOhT,MAAM,MAAMmT,QAAO,SAACjrB,EAAGkrB,GACrC,IAAMC,EAAQD,EAAEpT,MAAM,KACtB,OAAOqT,EAAM,KAAOhsB,EAAOisB,mBAAmBD,EAAM,IAAMnrB,IACzD,KACLgrB,GAIG,SAASvjB,EAAUhH,EAAKuqB,GAC7B,MAAwBpmB,oBAAS,WAC/B,OAAO6X,EAAUhc,EAAKuqB,MADjB9lB,EAAI,KAAEmmB,EAAO,KASpB,MAAO,CAACnmB,EALW,SAAC/E,EAAO4a,GACzBsQ,EAAQlrB,GACRoqB,EAAU9pB,EAAKN,EAAO4a,O,oCC9D1BrgB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQmb,QAUR,SAAiBjX,GACf,YAAiBf,IAAVe,GAAiC,OAAVA,GAAqC,WAAnBoS,EAAQpS,IAAqD,IAA9BzF,OAAOwsB,KAAK/mB,GAAO1F,QAAiC,kBAAV0F,GAA8C,IAAxBA,EAAMiV,OAAO3a,QAV9JwB,EAAQqvB,aAaR,SAAsBtb,EAAKnR,GACrBA,EAAM+Q,UAGR7O,QAAQ+O,IAAIjR,EAAM+Q,SAAS3V,MAC3B8G,QAAQ+O,IAAIjR,EAAM+Q,SAAS2b,QAC3BxqB,QAAQ+O,IAAIjR,EAAM+Q,SAAS4b,SAC3Bxb,EAAIub,OAAO1sB,EAAM+Q,SAAS2b,QAAQE,KAAK5sB,EAAM+Q,SAAS3V,OAC7C4E,EAAMnB,SAIfqD,QAAQ+O,IAAI,gBAAiBjR,EAAMK,SACnC8Q,EAAIub,OAAO,KAAKE,KAAK5sB,EAAMK,WAG3B6B,QAAQ+O,IAAI,QAASjR,EAAMK,SAC3B8Q,EAAIub,OAAO,KAAKE,KAAK5sB,EAAMK,UAG7B6B,QAAQ+O,IAAIjR,EAAM6sB,SAhCpBzvB,EAAiB,aAAI,EAErB,IAEgCuW,EAF5BmZ,GAE4BnZ,EAFI,EAAQ,UAESA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAEzF,SAASD,EAAQC,GAAmV,OAAtOD,EAArD,oBAAXtS,QAAoD,kBAApBA,OAAOwS,SAAmC,SAAiBD,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXvS,QAAyBuS,EAAIE,cAAgBzS,QAAUuS,IAAQvS,OAAOtF,UAAY,gBAAkB6X,IAAyBA,GAyCnX,IA8CIqX,EA9CgB,SAAuB+B,EAAWC,EAAUC,EAAQC,EAAUzd,EAAWkQ,EAAawN,GACxG,IAAIlP,GAAY,IAAIva,MAAOoT,cACvBsW,EAAc,EACdC,EAAe,EACfC,EAAU,UAEQ,qBAAXlrB,SACTgrB,EAAchrB,OAAOmrB,WACrBF,EAAejrB,OAAOorB,aAEwB,GAA1CC,UAAUC,UAAUrU,QAAQ,UAC9BiU,EAAU,iBACyC,GAA1CG,UAAUC,UAAUrU,QAAQ,UACrCiU,EAAU,UAC0C,GAA3CG,UAAUC,UAAUrU,QAAQ,WACrCiU,EAAU,mBACuC,GAAxCG,UAAUC,UAAUrU,QAAQ,UAA6D,GAA5CoU,UAAUC,UAAUrU,QAAQ,YAClFiU,EAAU,qBACuC,GAAxCG,UAAUC,UAAUrU,QAAQ,UACrCiU,EAAU,mBAId,IAAI1N,EAAa/jB,OAAOkW,OAAO,CAC7Bgb,UAAWA,EACXC,SAAUA,EACVC,OAAQA,EACRC,SAAUA,EACVzd,UAAWA,EACXkQ,YAAaA,EACb1B,UAAWA,EACXmP,YAAaA,EACbC,aAAcA,EACdC,QAASA,GACRH,GAEH,OAAOL,EAAgB,QAAEa,KAAK,gEAA2CC,KAAKC,UAAUjO,GAAa,CACnG+M,QAAS,CACP,eAAgB,gBAEV,OAAE,SAAU3sB,GAEpB,MADAkC,QAAQlC,MAAM,wBAAyBA,EAAMK,SACvCL,MAKV5C,EAAiB,QAAI4tB,G,uBCrGrB3tB,EAAOD,QAAU,IAA0B,gD,uBCA3CC,EAAOD,QAAU,IAA0B,0C,qBCA3CC,EAAOD,QAAU,IAA0B,qC,qBCA3CC,EAAOD,QAAU,IAA0B,2C,qBCA3CC,EAAOD,QAAU,IAA0B,qC,qBCA3CC,EAAOD,QAAU,IAA0B,qC,oCCE3CvB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAIT,IAAIwsB,GAAY,EAwChB1wB,EAAQ2wB,QAtCQ,SAAmBC,GACX,qBAAX5rB,SAGP0rB,EACFA,GAAY,EAGkB,qBAArB1rB,OAAO6rB,UAChB/rB,QAAQlC,MAAM,6EAEdguB,EAAOtF,SAAQ,SAAU9pB,GACvB,OAAQA,EAAMA,OACZ,IAAK,kBACEA,EAAMsvB,eAAenf,MAAM,gFAC9B3M,OAAO6rB,UAAUE,YAAY,CAC3BC,SAAU,GACVC,QAAS,GACTpgB,KAAMrP,EAAMsvB,eACZ/oB,MAAO,KAGX,MACF,IAAK,kBACH/C,OAAO6rB,UAAUE,YAAY,CAC3BC,SAAUxvB,EAAMuQ,QAChBkf,QAASzvB,EAAM0Q,OACfrB,KAAMrP,EAAMqP,KACZ9I,MAAOvG,EAAMuG,e,kCCnCzBtJ,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQ2wB,QAAU3wB,EAAQkxB,aAAU,EAEpC,IAAIrG,EAcJ,SAAiCtU,GAAO,GAAIA,GAAOA,EAAIlS,WAAc,OAAOkS,EAAO,GAAY,OAARA,GAA+B,kBAARA,GAAmC,oBAARA,EAAsB,MAAO,CAAEoa,QAASpa,GAAS,IAAI/C,EAAQ0D,IAA4B,GAAI1D,GAASA,EAAM2D,IAAIZ,GAAQ,OAAO/C,EAAM1P,IAAIyS,GAAQ,IAAIa,EAAS,GAAQC,EAAwB5Y,OAAOmF,gBAAkBnF,OAAO6Y,yBAA0B,IAAK,IAAI9S,KAAO+R,EAAO,GAAI9X,OAAOC,UAAUC,eAAeC,KAAK2X,EAAK/R,GAAM,CAAE,IAAI+S,EAAOF,EAAwB5Y,OAAO6Y,yBAAyBf,EAAK/R,GAAO,KAAU+S,IAASA,EAAKzT,KAAOyT,EAAK3D,KAAQnV,OAAOmF,eAAewT,EAAQ5S,EAAK+S,GAAgBH,EAAO5S,GAAO+R,EAAI/R,GAAY4S,EAAOuZ,QAAUpa,EAAS/C,GAASA,EAAMI,IAAI2C,EAAKa,GAAW,OAAOA,EAdjtBI,CAAwB,EAAQ,SAEzC2Z,EAAS,EAAQ,QAEjBC,EAAe,EAAQ,QAEvBC,EAAkB,EAAQ,QAE1BC,EAAc,EAAQ,QAEtBC,EAAW,EAAQ,QAEvB,SAASra,IAA6B,GAAuB,oBAAZQ,QAAwB,OAAO,KAAM,IAAIlE,EAAQ,IAAIkE,QAAqE,OAA1DR,EAA2B,WAAc,OAAO1D,GAAiBA,EAIlL,SAASge,IAA2Q,OAA9PA,EAAW/yB,OAAOkW,QAAU,SAAUjT,GAAU,IAAK,IAAIpD,EAAI,EAAGA,EAAIuY,UAAUrY,OAAQF,IAAK,CAAE,IAAIwiB,EAASjK,UAAUvY,GAAI,IAAK,IAAIkG,KAAOsc,EAAcriB,OAAOC,UAAUC,eAAeC,KAAKkiB,EAAQtc,KAAQ9C,EAAO8C,GAAOsc,EAAOtc,IAAY,OAAO9C,IAA2BvC,MAAMkQ,KAAMwH,WAEhT,MAAMqa,UAAgBrG,EAAOrb,UAC3B,cACEiiB,QACApiB,KAAKqiB,YAAcriB,KAAKqiB,YAAYjtB,KAAK4K,MAG3C,cACEA,KAAKhK,MAAMolB,WAAWpb,KAAKhK,MAAM+M,IACjC/C,KAAKhK,MAAMmlB,cAAc,KAG3B,SACE,IAAInlB,EAAQ,GAWZ,OAVA5G,OAAOwsB,KAAK5b,KAAKhK,OAAO2F,IAAIxG,IACtB,YAAYsV,KAAKtV,KACnBa,EAAMb,GAAO6K,KAAKhK,MAAMb,MAIxB6K,KAAKhK,MAAMyB,YACbzB,EAAMyB,UAAYuI,KAAKhK,MAAMyB,WAGX+jB,EAAO8F,QAAQvvB,cAAciwB,EAAgBH,QAASM,EAAS,CACjF/b,QAASpG,KAAKqiB,aACbrsB,KAKPrF,EAAQkxB,QAAUA,EASlB,IAAItD,GAAW,EAAIwD,EAAa/d,aAAY,EAAIie,EAAYhe,SAPpCpE,GAASA,EAAM0b,QAEZzX,IAAY,EAAIge,EAAO/d,oBAAoB,CACpEoX,cAAe+G,EAAS/G,cACxBC,WAAY8G,EAAS9G,YACpBtX,GAEyC,CAA8D+d,IAE1GlxB,EAAQ2wB,QAAU/C,G,qBClElB3tB,EAAOD,QAAU,IAA0B,qC,kCCA3C,wJAEM6Y,EAFN,OAEe8Y,EAAOptB,OAAO,CAC3BuU,eAAe,EACfC,QAAQ,EACRC,OAAQ,IACRC,aAAc,GACdC,SAAS,EACTC,MAAM,IAGFyY,EAAa,CACjBC,KAAM,IACNC,SAAU,IACVC,QAAS,IACTC,OAAQ,IACRC,OAAQ,IACRnzB,KAAM,IAGD,SAASozB,EAAc7qB,GAC5B,OAAKA,EAAQsU,SAGNtU,EAAQ0K,QAAU,IAAM8G,EAAOxR,EAAQsU,SAASrB,QAAQ,KAAM,UAAUA,QAAQ,MAAO,KAAO,IAAMjT,EAAQiK,WAF1GjK,EAAQiK,WAKZ,SAAS6gB,EAAcnK,GAE5B,OADkB4J,EAAW5J,IAASA,EAIjC,SAASoK,EAAU/qB,GAAS,MAEjC,OADcA,EAAQ6T,OAAU7T,EAAQ+T,QAAU/T,EAAQ+T,OAAO,IAAQ/T,EAAQgrB,QAAU,CAAEhhB,KAAoC,QAA9B,EAAAhK,EAAQgrB,OAAO,GAAGC,oBAAY,aAA9B,EAAgCjhB,MAAOhK,EAAQgrB,OAAO,GAAGE,UAAUlhB,KASjK,SAASmhB,EAAWnrB,GACzB,OAAOA,EAAQorB,gBAAkBprB,EAAQsU,W,qBC3C3C1b,EAAOD,QAAU,0rD,qBCAjBC,EAAOD,QAAU,IAA0B,0C,gNCiBhC0yB,GAAkB,qBASXC,GAjBZC,EAAoB,WACxB,OAAO3mB,IAAMnI,IAAiB,oBAC3B5B,MAAK,SAAAyR,GAAQ,OAAIA,EAAS3V,QAAK,OACzB,SAAA4D,GACL,MAAMA,MAIZ,SAAW8wB,IAAkB,iFAEb,OAFa,kBAEP9zB,YAAKg0B,GAAkB,OACzC,OADM7e,EAAM,EAAH,cACHC,YAAI,CAAE3S,KAhBuB,8BAgBQ4S,QAASF,IAAM,8BAE1D,OAF0D,mCAEpDC,YAAI,CAAE3S,KAjBqB,4BAiBQ4S,QAAS,KAAEhR,UAAU,qDAI3D,SAAW0vB,IAAmB,2EACnC,OADmC,SAC7Bze,YAxBuB,sBAwBKwe,GAAmB,uCAIhD,IAAMG,EAAiB,WAAH,MAAU,CAAExxB,KA5BR,sBA4B+B+S,YAAY,EAAMC,YAAY,IAE/EC,EAAe,CAC1BE,UAAW,EACXD,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,KACPmwB,UAAW,MAGAre,EAAU,WAAmD,IAAlDxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAa,EAAJ+e,KAC7D,OAAQ3xB,GACN,IA3C2B,sBA4CzB,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,OAEX,IAlDiC,4BAmD/B,OAAOnE,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,EACfue,UAAW,OAEf,IA5DmC,8BA6DjC,OAAOr0B,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BsF,UAAW,IAAIlO,KACf+N,YAAY,EACZD,YAAY,EACZG,eAAe,EACfwe,UAAW9e,EAAQjW,KACnBmR,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,OAEX,QACE,OAAOsM,K,gNCREsW,mBAAKlS,mBAAQ,SAACpE,GAAK,MAAM,CAAE6D,IAAK7D,EAAM6D,IAAK9C,UAAW+C,YAAa9D,GAAQmD,UAAWY,YAAa/D,OAFvF,SAACiE,GAAQ,OAAKC,6BAAmB,CAAE6f,sBAAoB9f,KAE9DG,EAzDT,SAACjO,GACV,IAAMsG,EAAWoe,wBACjB,EAAwBphB,mBAASgD,EAASqE,UAAnCa,EAAI,KAAEqiB,EAAO,KACdljB,EAAWrE,EAASqE,SACpBmjB,EAAcrjB,cAqCpB,OALAhH,qBAAU,WACJ6C,EAASqE,WAAaa,GACxBqiB,EAAQvnB,EAASqE,YAElB,CAACA,IACkCa,IAASb,GAAamjB,EAI1D,EAAC,IAAK,aACJtiB,KAAI,WAAMR,mBAA2B,OAAGhL,EAAM4L,SAAoB,MAATJ,EAAe,YAAcA,IACtFuiB,YAAa,GACbC,kBA1BmB,SAAA7xB,GAErB,IAAM+gB,EAAcvd,OAAO2G,SAASnL,KAM9BgiB,EAAa,CAAEE,YALD1d,OAAOpE,SAAS+hB,SAKFC,YAJd5d,OAAO6d,QAIoByQ,GAHpC,CACT3f,SAAUnS,IAGZshB,YAAiB,WAAYC,cAAe1d,EAAM4K,UAAWI,MAA8BhL,EAAMgN,UAAWkQ,EAAaC,GACrHnd,EAAMguB,mBACRhuB,EAAMguB,kBAAkB7xB,KAgBpB6D,EAAK,CACTkuB,gBA7CoB,SAAA/xB,GAAS,UAEzB+gB,EAAcvd,OAAO2G,SAASnL,KAY9BgiB,EAAa,CAAEE,YAXD1d,OAAOpE,SAAS+hB,SAWFC,YAVd5d,OAAO6d,QAUoByQ,GATpC,CACT7xB,QAAS,CACP+xB,OAAQhyB,EAAMgyB,OACdC,UAAwC,QAA/B,EAAEjyB,EAAMkyB,KAAKC,0BAAkB,aAA7B,EAA+B3oB,KAAI,SAAAxG,GAAG,OAAIA,EAAM,IAAMhD,EAAMkyB,KAAKE,aAAapvB,MAAMqvB,KAAK,KACpGhjB,KAAMrP,EAAMkyB,KAAKI,gBACjBC,SAA2B,QAAnB,EAAEvyB,EAAMwyB,mBAAW,aAAjB,EAAmBhpB,KAAI,SAAAA,GAAG,MAAK,CAAEwQ,MAAOxQ,EAAI,GAAG,GAAIyQ,OAAQzQ,EAAI,GAAG,GAAIuF,MAAOvF,EAAI,OAAOxB,QAAO,SAAAwB,GAAG,OAAIA,EAAIuF,MAAM/R,UAC1H+R,MAAkB,QAAb,EAAE/O,EAAM+O,aAAK,aAAX,EAAavF,KAAI,SAAAA,GAAG,MAAK,CAAEwQ,MAAOxQ,EAAI,GAAIyQ,OAAQzQ,EAAI,UAIjE8X,YAAiB,YAAaC,cAAe1d,EAAM4K,UAAWI,MAA8BhL,EAAMgN,UAAWkQ,EAAaC,IA+BxHyR,mBAAoB5uB,EAAM4tB,oBATrB,QAe2IiB,M,kCCpEtJ,wEAAIC,GAAS,EACAC,EAAW,SAACC,GACvBvvB,QAAQ+O,IAAI,mBAAoBwgB,EAAO5d,YAAYvT,MACnDixB,EAASE,GAGI,SAAS5gB,IAAW,OAAO0gB,I,kJCK7BG,EAAqB,yBAK5BC,EAAiB,SAAC1E,GAAM,OAAKf,mBAAmBe,GAAQvV,QAAQ,UAAW,KAoE1E,IAQMhG,EAAe,CAC1BkgB,WAAW,EACXC,WAAW,GAGA/f,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QACpD,OAAQ5S,GACN,IA7F2B,sBA+FzB,OADAyD,QAAQ+O,IAAI,4CACLpV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BulB,WAAW,IAEf,IApG8B,yBAqG5B,OAAOh2B,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BulB,UAAWxgB,IAEf,IApGiC,4BAqG/B,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BwlB,iBAAiB,IAErB,IAvG+B,0BAwG7B,OAAOj2B,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BylB,cAAe1gB,IAEnB,KAAKqgB,EAEH,OADAxvB,QAAQ+O,IAAI,qBAAsBI,GAC3BxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9Be,UAAWskB,EAAetgB,KAE9B,IA5GqB,YA8GnB,OADAnP,QAAQ+O,IAAI,8CACLpV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BslB,WAAW,IAEf,QACE,OAAOtlB,K,qBC/HbjP,EAAOD,QAAU,IAA0B,oC,gSCW3C,SAAS40B,EAAcpzB,EAAOqzB,GAC5B,IAAMC,EAAW,GACjBA,EAAStzB,EAAME,OAAOwB,MAAQ1B,EAAME,OAAOwC,MAC3C2wB,EAAWC,GAGb,SAASC,EAAsBvzB,EAAOwzB,GACpCA,EAA6BxzB,EAAME,OAAOwC,OAQ5C,SAAS+wB,EAAc/xB,GAErB,OAAOA,EAAKyO,MADD,6QAIb,SAASujB,EAAgBL,GACvBA,EAAW,CAAEM,iBAAiB,IAGhC,SAASC,EAAiB5zB,EAAO,GAA2F,IAAzF6zB,EAAK,EAALA,MAAOC,EAAS,EAATA,UAAWC,EAAQ,EAARA,SAAUC,EAAO,EAAPA,QAASL,EAAe,EAAfA,gBAAiBN,EAAU,EAAVA,WAAYY,EAAmB,EAAnBA,oBAEnG,OADAj0B,EAAM4U,iBAfR,SAAwBif,GAEtB,OAAOA,EAAM1jB,MADF,sCAeN+jB,CAAcL,GAGRC,IAAcL,EAAaK,IACpCT,EAAW,CAAEc,OAAQ,qCACd,GACEJ,IAAaN,EAAaM,IACnCV,EAAW,CAAEc,OAAQ,oCACd,GACEH,EAAQh3B,OAAS,GAC1Bq2B,EAAW,CAAEc,OAAQ,2CACd,GACGR,GAIZM,EAAoBH,EAAWC,EAAUF,EAAOG,IACzC,IAJLX,EAAW,CAAEc,OAAQ,+DACd,IAbPd,EAAW,CAAEc,OAAQ,wCACd,GAkBX,IA0GM7iB,EAAkB,SAAC5D,GAAK,kCAAWA,EAAM0mB,WAAS,IAAEvjB,UAAWY,YAAa/D,GAAQe,UAAW+C,YAAa9D,MAC5GgE,EAAqB,SAACC,GAAQ,OAAKC,6BAAmB,CAAEqiB,wBAAqBI,iBAAchB,eAAYG,kCAAgC7hB,IAEhI2iB,EAAkCxiB,kBAAQR,EAAiBI,EAAzBI,EA7GJ,SAACjO,GAC1C,IAAMykB,EAAW7H,YAAQ,MACzB,OACE,qBACK5c,EAAM0wB,eAAiB1wB,EAAM2wB,cAC9B,EAAC,IAAEnvB,IAAG,CAACqB,EAAG4hB,EAAW,OAAS,MAAO3d,SAAU,KAAMC,GAAG,OAAOshB,WAAW,UAAUhtB,EAAG,GAAI0H,UAAU,SAAS4N,aAAc,EAAGxF,MAAM,SACnI,EAAC,IAAEylB,GAAE,CAAC9tB,KAAK,KAAKZ,GAAI,IAAG,qBACvB,EAAC,IAAEkc,KAAI,CAACjc,QAAQ,OAAO+E,cAAc,SAAS9E,WAAW,SAAS4N,GAAG,YAAYnS,KAAK,YAAYgzB,QAAQ,aAAazU,SAAU,SAACjgB,GAAK,OAAK4zB,EAAgB5zB,EAAO,eAAK6D,MACtK,EAAC,IAAE3E,EAAC,CAACuf,SAAU,GAAI1Y,GAAI,IAAG,oHAC1B,EAAC,IAAE7G,EAAC,CAACuf,SAAU,GAAI1Y,GAAI,IAAG,qBAC1B,EAAC,IAAE8C,MAAK,CAACmR,MAAM,OAAO9a,EAAG,GAAI6G,GAAI,GAAI6C,OAAO,iBAAiB4L,aAAc,EAAGX,GAAG,QAAQ/K,YAAY,mBAAmB6rB,SAAS,WAAW90B,KAAK,QAAQ6B,KAAK,QAAQgB,MAAOmB,EAAMgwB,MAAOe,SAAU,SAAC50B,GAAK,OAAKozB,EAAapzB,EAAO6D,EAAMwvB,eACzO,WAAOxf,GAAG,yBAAyBhU,KAAK,SAAS6C,MAAM,2BACvD,EAAC,IAAE2C,IAAG,CAACU,GAAI,IACT,EAAC,IAAS,CAAC8uB,QAAQ,2CAA2CD,SAAU,kBAAMlB,EAAe7vB,EAAMwvB,iBAElF,KAAjBxvB,EAAMswB,QAAiBtwB,EAAMzC,QAC7B,EAAC,IAAElC,EAAC,CAAC2L,GAAI,IAAG,UAAShH,EAAMswB,QAAUtwB,EAAMzC,OAC7C,EAAC,IAAEyH,MAAK,CAACc,gBAAiB,CAAEC,EAAG,UAAWC,MAAO,QAAUmF,MAAM,QAAQpG,OAAO,OAAO8jB,QAAQ,YAAYlY,aAAc,EAAGiK,SAAU,GAAI4D,OAAO,UAAU8J,WAAW,6BAA6BtY,GAAG,eAAehU,KAAK,SAAS6C,MAAM,cACzO,WAAO7C,KAAK,SAAS6B,KAAK,YAAYgB,MAAM,mBAAmBmR,GAAG,gBAGvEhQ,EAAM0wB,cACL,EAAC,IAAElvB,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO7E,GAAI,IAC5C,EAAC,IAAEiF,GAAE,CAACrE,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAAG,eACjG,EAAC,IAAE7G,EAAC,8CAEP2E,EAAM2wB,cACL,EAAC,IAAEnvB,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO7E,GAAI,IAC5C,EAAC,IAAEiF,GAAE,CAACrE,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAAG,mCACjG,EAAC,IAAE7G,EAAC,wEAiFC4S,4BAAQR,EAAiBI,EAAzBI,EA3EkB,SAACjO,GAChC,MAAwDsD,mBAAStD,EAAMixB,WAAhEC,EAAoB,KAAEC,EAAuB,KAC9C1M,EAAW7H,YAAQ,MAGnBwU,EAAenT,uBAAY,SAAC9hB,GAC5B4zB,EAAgB5zB,EAAO,eAAK6D,KAAYA,EAAMqxB,cAChDrxB,EAAMqxB,aAAarxB,MAGvB,OAAIykB,IAAayM,EACR,KAGP,qBACIzM,GACA,EAAC,IAAU,CAAC1X,GAAG,eAAeqD,QAAS,SAACjU,GAAYg1B,GAAyBD,GAAuB/0B,EAAM4U,kBAAqB5F,MAAM,QAAQ7D,WAAW,SAASyU,GAAI,EAAGrB,GAAI,GAAIjV,GAAI,CAAEM,EAAG,MAAOC,MAAO,QAAUpD,GAAI,EAAG+X,cAAc,YAAY/P,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWyO,OAb5R,mBAaiT/O,QAAS1M,EAAM0M,SAAQ,aACvVwkB,GACC,EAAC,IAAK,CAAC7gB,QAAS6gB,GACd,EAAC,IAAEhsB,OAAM,CAACE,aAAW,6BAA6BgL,QAAS,kBAAM+gB,GAAwB,IAAQrrB,gBAAgB,QAAQzK,EAAG,EAAGiK,IAAK,EAAGH,MAAO,EAAGhD,QAAQ,OAAOC,WAAW,SAASC,eAAe,WAAWQ,EAAE,QAC9M,EAAC,IAAEP,IAAG,CAAChG,IAAKiiB,QAEXve,EAAM0wB,eAAiB1wB,EAAM2wB,cAC9B,EAAC,IAAEnvB,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO7E,GAAI,GAAI8E,IAAK,IACrD,EAAC,IAAEG,GAAE,CAACrE,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAAG,cACjG,EAAC,IAAEkc,KAAI,CAACtX,SAAU,IAAK3E,QAAQ,OAAO+E,cAAc,SAAS8I,GAAG,YAAYnS,KAAK,YAAYgzB,QAAQ,aAAazU,SAAU,SAACjgB,GAAK,OAAKi1B,EAAaj1B,EAAO,eAAK6D,MAC9J,EAAC,IAAE3E,EAAC,CAACyH,KAAK,QAAQZ,GAAI,IAAKlC,EAAM8C,MAAQ,+DACzC,EAAC,IAAEkC,MAAK,CAAC9C,GAAI,GAAIuD,GAAG,SAASpK,EAAG,GAAIyH,KAAK,SAASkN,GAAG,YAAY/K,YAAY,aAAa6rB,SAAS,WAAW90B,KAAK,OAAO6B,KAAK,YAAYgB,MAAOmB,EAAMiwB,UAAWc,SAAU,SAAC50B,GAAK,OAAKozB,EAAapzB,EAAO6D,EAAMwvB,eAClN,EAAC,IAAExqB,MAAK,CAAC9C,GAAI,GAAIuD,GAAG,SAASpK,EAAG,GAAIyH,KAAK,SAASkN,GAAG,WAAW/K,YAAY,YAAY6rB,SAAS,WAAW90B,KAAK,OAAO6B,KAAK,WAAWgB,MAAOmB,EAAMsxB,SAAUP,SAAU,SAAC50B,GAAK,OAAKozB,EAAapzB,EAAO6D,EAAMwvB,eAC9M,EAAC,IAAExqB,MAAK,CAAC9C,GAAI,GAAIuD,GAAG,SAASpK,EAAG,GAAIyH,KAAK,SAASkN,GAAG,QAAQ/K,YAAY,mBAAmB6rB,SAAS,WAAW90B,KAAK,QAAQ6B,KAAK,QAAQgB,MAAOmB,EAAMgwB,MAAOe,SAAU,SAAC50B,GAAK,OAAKozB,EAAapzB,EAAO6D,EAAMwvB,eAC7M,EAAC,IAAEhuB,IAAG,CAACC,UAAU,aAAaU,QAAQ,OAAOiF,oBAAoB,qCAAqCyY,IAAI,UACxG,WAAO7P,GAAG,yBAAyBhU,KAAK,WAAW6C,MAAM,yBAAyBkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,4BAA6B,WAAO3gB,QAAQ,0BAAyB,eAAQ,aACrR,WAAOZ,GAAG,yBAAyBhU,KAAK,WAAW6C,MAAM,yBAAyBkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,4BAA6B,WAAO3gB,QAAQ,0BAAyB,eAAQ,mBACrR,WAAOZ,GAAG,2BAA2BhU,KAAK,WAAW6C,MAAM,2BAA2BkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,8BAA+B,WAAO3gB,QAAQ,4BAA2B,eAAQ,SAC7R,WAAOZ,GAAG,yBAAyBhU,KAAK,WAAW6C,MAAM,yBAAyBkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,4BAA6B,WAAO3gB,QAAQ,0BAAyB,eAAQ,aACrR,WAAOZ,GAAG,yBAAyBhU,KAAK,WAAW6C,MAAM,yBAAyBkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,4BAA6B,WAAO3gB,QAAQ,0BAAyB,eAAQ,YACrR,WAAOZ,GAAG,2BAA2BhU,KAAK,WAAW6C,MAAM,2BAA2BkyB,SAAU,SAAC50B,GAAK,OAAKuzB,EAAqBvzB,EAAO6D,EAAM2vB,+BAA+B7e,QAAS9Q,EAAMmwB,QAAQoB,SAAS,8BAA+B,WAAO3gB,QAAQ,4BAA2B,eAAQ,kBAE/R,EAAC,IAAS,CAACogB,QAAQ,2CAA2CD,SAAU,kBAAMlB,EAAe7vB,EAAMwvB,gBAChF,KAAjBxvB,EAAMswB,QAAiBtwB,EAAMzC,QAC7B,EAAC,IAAElC,EAAC,CAAC2L,GAAI,IAAG,UAAShH,EAAMswB,QAAUtwB,EAAMzC,OAC7C,EAAC,IAAEiE,IAAG,CAACW,QAAQ,OAAO+E,cAAc,OAClC,EAAC,IAAElC,MAAK,CAACgC,GAAI,GAAIpE,GAAI,GAAIV,GAAI,GAAIuD,GAAG,MAAMpK,EAAG,GAAIyH,KAAK,SAASqI,MAAM,QAAQwP,cAAc,YAAYrT,WAAW,SAASzE,EAAG4hB,EAAW,MAAQ,MAAOzU,GAAG,eAAehU,KAAK,SAAS6C,MAAM,WAC7L4lB,GACC,EAAC,IAAEvf,OAAM,CACPE,aAAW,wCAAwC4B,GAAI,GAAI9E,GAAI,GAAI0hB,GAAI,GAAIne,GAAG,MAAMpK,EAAG,GAAIyH,KAAK,SAASqI,MAAM,QAAQwP,cAAc,YAAYrT,WAAW,SAASzE,EAAE,MAAMuN,QAAS,WACpLpQ,EAAMwxB,2BACNL,GAAwB,KACxB,qBAKR,WAAOn1B,KAAK,SAAS6B,KAAK,YAAYgB,MAAM,mBAAmBmR,GAAG,gBAGvEhQ,EAAM0wB,cACL,EAAC,IAAElvB,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO7E,GAAI,IAC5C,EAAC,IAAEiF,GAAE,CAACrE,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAAG,eACjG,EAAC,IAAE7G,EAAC,8CAEP2E,EAAM2wB,cACL,EAAC,IAAEnvB,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO7E,GAAI,IAC5C,EAAC,IAAEiF,GAAE,CAACrE,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAAG,mCACjG,EAAC,IAAE7G,EAAC,0E,kCClGlB,SAASo2B,EAAYC,GACnB,OAAOA,EAAIzc,QAAQ,UAAU,SAAU0c,GACrC,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIG,OAAO,GAAG1tB,iBA1DvDhL,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQo3B,YAYR,SAAqB/lB,GACnB,OAAOA,EAAIiJ,QAAQ,MAAO,IAAIA,QAAQ,MAAO,KAZ/Cta,EAAQq3B,mBAsBR,SAA4BhmB,GAC1B,OAAOA,EAAIiJ,QAAQ,MAAO,IAAIA,QAAQ,YAAa,KAtBrDta,EAAQqmB,gBAgCR,SAAyBvL,GAEvB,OAAOgc,EADOhc,EAAUe,MAAM,KAAKyb,MACRhd,QAAQ,KAAM,KAAK7Q,gBAjChDzJ,EAAQu3B,oBA2CR,SAA6BC,GAE3B,OAAOV,EADOU,EAAQ3b,MAAM,KAAK,GACNvB,QAAQ,IAAK,KAAK7Q,iB,8bC+E7BguB,GA9HLC,EAAyB,6BAgBhClkB,EAAQC,cAEP,SAAekkB,EAAgB,wCAwBrC,sDAxBM,WAAiC5lB,EAAS6lB,EAAQC,EAAOruB,GAAM,sFACrD,IAAXouB,EAAY,gCACOpkB,EAAM1P,IAAIiO,GAAQ,OAA3B,MAAN1S,EAAS,EAAH,OACEA,EAAOy4B,UAAYz4B,EAAOy4B,SAASt5B,QAAUq5B,GAAK,gBAEb,OAAjDx4B,EAAOy4B,SAAWz4B,EAAOy4B,SAAS5yB,MAAM,EAAG2yB,GAAM,kBAC1Cx4B,GAAM,OAEfw4B,EAAQ7a,KAAK+a,IAAI,GAAIF,GAAM,OAG7B,OADMG,EAAYxuB,EAAS,WAAaA,EAAS,GACjD,kBACOyC,IAAMnI,IAAIm0B,gCAAmEL,EAAS,IAAMC,EAAQ,IAAM9lB,EAAUimB,GACxH91B,MAAK,SAAAyR,GACJ,OAAe,IAAXikB,EACKpkB,EAAMI,IAAI7B,EAAS4B,EAAS3V,KAAM,MAElCqC,QAAQC,QAAQqT,EAAS3V,SAElC,OACK,SAAA4D,GAEL,MAAMA,MACN,6CACL,sBAEM,SAAes2B,EAAoB,wCAGzC,sDAHM,WAAqCnmB,EAAS6lB,EAAQC,EAAOruB,GAAM,oGACjEmuB,EAAiB5lB,EAAS6lB,EAAQC,EAAOruB,GAC7CtH,MAAK,SAAA0e,GAAQ,OAAIvgB,QAAQiD,IAAIsd,EAASkX,SAAS9sB,KAAI,SAAA3D,GAAO,OAAI8wB,YAAgB9wB,EAAQiK,oBAAc,4CACxG,sBAED,SAAW8mB,EAAiB,OAAIrmB,EAAO,EAAPA,QAAS6lB,EAAM,EAANA,OAAQC,EAAK,EAALA,MAAOruB,EAAM,EAANA,OAAM,2HAG9C,OAH8C,kBAGxC5K,YAAK+4B,EAAkB5lB,EAAS6lB,EAAQC,EAAQ,EAAGruB,GAAO,OAY5E,OAZMuK,EAAM,EAAH,KAELE,EAAU,GACVF,EAAI+jB,WACN7jB,EAAU,CACRO,UAAW,IAAIlO,KACf+xB,eAAgBtkB,EAAIskB,eACpBC,QAASvkB,EAAI+jB,SAASt5B,OAASq5B,EAC/BjX,SAAU7M,EAAI+jB,SAAS5yB,MAAM,EAAG2yB,GAChCU,WAAYxkB,EAAI,eAAiBA,EAAI,eAAiB,OAEzD,SACKC,YAAI,CAAE3S,KAAMq2B,EAAwBzjB,UAASlC,YAAU,6DAEzD,KAAE4B,UAAkC,MAAtB,KAAEA,SAAS2b,OAAc,iBACzC,OADyC,UACnCtb,YAAI,CAAE3S,KAjEqB,8BAiEU0Q,UAAS9O,QAAS,KAAEA,UAAU,gCAEzE,OAFyE,UAEnE+Q,YAAI,CAAE3S,KApEkB,2BAoEU0Q,UAAS9O,QAAS,KAAEA,UAAU,wDApBd,GAyB9D,SAAWu1B,EAAqB,OAAIzmB,EAAO,EAAPA,QAAS6lB,EAAM,EAANA,OAAQC,EAAK,EAALA,MAAOruB,EAAM,EAANA,OAAM,2HAGlD,OAHkD,kBAG5C5K,YAAKs5B,EAAsBnmB,EAAS6lB,EAAQC,EAAQ,EAAGruB,GAAO,OAWhF,OAXMuK,EAAM,EAAH,KAELE,EAAU,GACVF,IACFE,EAAU,CACRO,UAAW,IAAIlO,KACfgyB,QAASvkB,EAAIvV,OAASq5B,EACtBjX,SAAU7M,EAAI7O,MAAM,EAAG2yB,GACvBU,WAAY,OAEf,SACKvkB,YAAI,CAAE3S,KAnF2B,kCAmFQ4S,UAASlC,YAAU,+BAEZ,GAFY,0BAElEjN,QAAQlC,MAAM,+BAAgCmP,IAC1C,KAAE4B,UAAkC,MAAtB,KAAEA,SAAS2b,OAAc,iBACzC,OADyC,UACnCtb,YAAI,CAAE3S,KArF0B,mCAqFU0Q,UAAS9O,QAAS,KAAEA,UAAU,gCAE9E,OAF8E,UAExE+Q,YAAI,CAAE3S,KAxFuB,gCAwFU0Q,UAAS9O,QAAS,KAAEA,UAAU,wDApBf,GAyBlE,SAAWw1B,EAAqB,OAAI1mB,EAAO,EAAPA,QAAS6lB,EAAM,EAANA,OAAQC,EAAK,EAALA,MAAK,2HAG3C,OAH2C,kBAGrCa,YAAOC,EAAa5mB,GAAQ,OAArC,MAAJ/T,EAAO,EAAH,MACC4iB,SAASpiB,OAASo5B,EAASC,GAAK,iBAC3B,OAD2B,SACrBj5B,YAAK+4B,EAAkB5lB,EAAS/T,EAAK4iB,SAASpiB,OAAQq5B,EAAQ,GAAE,OAA5E9jB,EAAM,EAAH,KACT/V,EAAO,CACL+T,UACAumB,QAASvkB,EAAI+jB,SAASt5B,OAASq5B,EAC/BQ,eAAgBtkB,EAAIskB,eACpBzX,SAAU5iB,EAAK4iB,SAASjG,OAAO5G,EAAI+jB,SAAS5yB,MAAM,EAAG2yB,KACtD,wBAED75B,EAAO,CACL+T,UACAumB,SAAS,EACTD,eAAgB,GAChBzX,SAAU5iB,EAAK4iB,UAChB,QAEH,OAFG,UAEG5M,YAAI,CAAE3S,KA7G2B,kCA6GQ4S,QAASjW,IAAO,gCAG/D,OAH+D,0BAE/D8G,QAAQlC,MAAM,+BAAgCmP,EAAS,QAAS,KAAE9O,SAAQ,UACpE+Q,YAAI,CAAE3S,KA/GyB,gCA+GQ4S,QAAS,CAAElC,UAAS9O,QAAS,KAAEA,WAAY,wDAvBlC,GA2BnD,SAAWw0B,IAAkB,2EAClC,OADkC,SAC5BmB,YAhIsB,qBAgIIR,GAAkB,OAClD,OADkD,SAC5ClkB,YAvH2B,0BAuHKukB,GAAsB,OAC5D,OAD4D,SACtDG,YA7H2B,0BA6HIJ,GAAsB,uCAItD,IAAMG,EAAc,SAACzpB,EAAO6C,GAAO,OAAK7C,EAAM0R,SAAS7O,IACjD8mB,EAAiB,SAAC3pB,EAAO6C,GAAO,OAAK7C,EAAM0R,UAC3CkY,EAAoB,SAAC/mB,EAAS6lB,EAAQC,EAAOruB,GAAM,MAAM,CAAEnI,KAnIrC,0BAmIgE0Q,UAAS6lB,SAAQC,QAAOruB,WAC9GuvB,EAAgB,SAAChnB,EAAS6lB,EAAQC,EAAOruB,GAAM,MAAM,CAAEnI,KAzItC,qBAyI4D0Q,UAAS6lB,SAAQC,QAAOruB,WACrGwvB,EAAoB,SAACjnB,EAAS6lB,EAAQC,GAAK,MAAM,CAAEx2B,KAhI7B,0BAgIwD0Q,UAAS6lB,SAAQC,UAC/FoB,EAAkB,SAAChlB,GAAO,MAAM,CAAE5S,KA7Hd,wBA6HuC4S,YAE3DS,EAAU,WAA2D,IAA1DxF,EAAQ,UAAH,6CAAG,GAAE,yCAAI7N,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAS+e,EAAI,EAAJA,KAAMjhB,EAAO,EAAPA,QAAS9O,EAAO,EAAPA,QAC5Di2B,EAAa,GAEnB,OAAQ73B,GACN,IAvI+B,0BAwI/B,IAlJ0B,qBAmJ1B,IA9I+B,0BAyJ7B,OAVA63B,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDwC,eAAe,EACfH,YAAY,EACZ+kB,eA7I2B,4BA6IX93B,EAChB+3B,gBAAgB,EAChB/kB,YAAY,EACZlF,UAAU,EACVsF,OAAO,EACP7R,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA5JmC,8BA6JnC,IAxJwC,mCAkKtC,OATAA,EAAWnnB,GAAW,CACpB5C,UAAU,EACVsF,OAAO,EACPJ,YAAY,EACZD,YAAY,EACZG,eAAe,EACf8kB,gBAAgB,EAChBvG,UAAW,MAENr0B,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAzKgC,2BA0KhC,IArKqC,gCAsKrC,IAjKqC,gCA2KnC,OATAp0B,QAAQ+O,IAAI,oBAAqBxS,EAAM4S,EAAS+e,EAAMjhB,EAAS9O,GAC/Di2B,EAAWnnB,GAAW,CACpB5C,UAAU,EACVsF,OAAO,EACP7R,MAAOK,EACPoR,YAAY,EACZD,YAAY,EACZG,eAAe,GAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA7KuC,kCA0LrC,OAZAA,EAAWjlB,EAAQlC,SAAW,CAC5BsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACf4kB,gBAAgB,EAChBC,gBAAgB,EAChBxY,SAAU3M,EAAQ2M,SAClB0X,QAASrkB,EAAQqkB,QACjB9jB,UAAWP,EAAQO,UACnB+jB,WAAYtkB,EAAQskB,WACpBF,eAAgBpkB,EAAQokB,gBAEnB55B,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAhMuC,kCAiMvC,KAAKxB,EAWH,OAVAwB,EAAWnnB,GAAW,CACpBsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACfqM,SAAU3M,EAAQ2M,SAClB0X,QAASrkB,EAAQqkB,QACjB9jB,UAAWP,EAAQO,UACnB+jB,WAAYtkB,EAAQskB,WACpBF,eAAgBpkB,EAAQokB,gBAEnB55B,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IArM6B,wBAsM3B,OAAOz6B,OAAOkW,OAAO,GAAIzF,EAAO,CAAE2a,aAAc5V,IAClD,QACE,OAAO/E,K,oCCzNbzQ,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQs5B,iBAAmBA,EAC3Bt5B,EAAQ2e,iBAmER,SAA0B4a,GACxB,OAAOC,EAAkBr6B,MAAMkQ,KAAMwH,YAnEvC7W,EAAQy5B,YAAcA,EACtBz5B,EAAQ05B,eA8kBR,SAAwBC,GACtB,OAAOC,EAAgBz6B,MAAMkQ,KAAMwH,YA7kBrC,IAAIgjB,EAAoB,EAAQ,QAE5BpiB,EAAW,EAAQ,QAEvB,SAASiU,EAAeC,EAAKrtB,GAAK,OAUlC,SAAyBqtB,GAAO,GAAIpP,MAAMC,QAAQmP,GAAM,OAAOA,EAVtBC,CAAgBD,IAQzD,SAA+BA,EAAKrtB,GAAK,IAAIutB,EAAY,MAAPF,EAAc,KAAyB,qBAAX3nB,QAA0B2nB,EAAI3nB,OAAOwS,WAAamV,EAAI,cAAe,GAAU,MAANE,EAAY,OAAQ,IAAkDC,EAAIC,EAAlDC,EAAO,GAAQC,GAAK,EAAUC,GAAK,EAAmB,IAAM,IAAKL,EAAKA,EAAGjtB,KAAK+sB,KAAQM,GAAMH,EAAKD,EAAGpN,QAAQtG,QAAoB6T,EAAKltB,KAAKgtB,EAAG5nB,QAAY5F,GAAK0tB,EAAKxtB,SAAWF,GAA3D2tB,GAAK,IAAoE,MAAOrqB,GAAOsqB,GAAK,EAAMH,EAAKnqB,EAAO,QAAU,IAAWqqB,GAAsB,MAAhBJ,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIK,EAAI,MAAMH,GAAQ,OAAOC,EARzbG,CAAsBR,EAAKrtB,IAI5F,SAAqCqF,EAAGyoB,GAAU,IAAKzoB,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAO0oB,EAAkB1oB,EAAGyoB,GAAS,IAAI1nB,EAAIjG,OAAOC,UAAUuH,SAASrH,KAAK+E,GAAGuB,MAAM,GAAI,GAAc,WAANR,GAAkBf,EAAE8S,cAAa/R,EAAIf,EAAE8S,YAAYvT,MAAM,GAAU,QAANwB,GAAqB,QAANA,EAAa,OAAO6X,MAAM+P,KAAK3oB,GAAI,GAAU,cAANe,GAAqB,2CAA2CoV,KAAKpV,GAAI,OAAO2nB,EAAkB1oB,EAAGyoB,GAJpTG,CAA4BZ,EAAKrtB,IAEnI,WAA8B,MAAM,IAAIib,UAAU,6IAFuFiT,GAMzI,SAASH,EAAkBV,EAAKc,IAAkB,MAAPA,GAAeA,EAAMd,EAAIntB,UAAQiuB,EAAMd,EAAIntB,QAAQ,IAAK,IAAIF,EAAI,EAAGouB,EAAO,IAAInQ,MAAMkQ,GAAMnuB,EAAImuB,EAAKnuB,IAAOouB,EAAKpuB,GAAKqtB,EAAIrtB,GAAM,OAAOouB,EAMhL,SAAS7U,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQxT,EAAKyT,GAAO,IAAM,IAAIC,EAAOJ,EAAItT,GAAKyT,GAAU/T,EAAQgU,EAAKhU,MAAS,MAAOtB,GAAwB,YAAfrC,EAAOqC,GAAsBsV,EAAKC,KAAQ7X,EAAQ4D,GAAiB7D,QAAQC,QAAQ4D,GAAOhC,KAAK6V,EAAOC,GAE7P,SAASI,EAAkBC,GAAM,OAAO,WAAc,IAAIC,EAAOjJ,KAAMkJ,EAAO1B,UAAW,OAAO,IAAIxW,SAAQ,SAAUC,EAASC,GAAU,IAAIuX,EAAMO,EAAGlZ,MAAMmZ,EAAMC,GAAO,SAASR,EAAM7T,GAAS2T,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQ,OAAQ9T,GAAU,SAAS8T,EAAOpW,GAAOiW,EAAmBC,EAAKxX,EAASC,EAAQwX,EAAOC,EAAQ,QAASpW,GAAQmW,OAAM5U,OAEjX,SAASm2B,EAAiB3iB,GACxB,OAAOmjB,EAAkB36B,MAAMkQ,KAAMwH,WAGvC,SAASijB,IAiBP,OAhBAA,EAAoB1hB,EAAgC8F,mBAAmBC,MAAK,SAASC,EAAQrI,GAC3F,IAAI7S,EACJ,OAAOgb,mBAAmBI,MAAK,SAAkBC,GAC/C,OACE,OAAQA,EAASC,KAAOD,EAASE,MAC/B,KAAK,EAEH,OADAvb,EAAO6S,EAAMuE,QAAQ,eAAgB,IAAIA,QAAQ,UAAW,IACrDiE,EAASG,OAAO,SAAUxb,EAAKuG,cAAc6Q,QAAQ,KAAM,IAAIA,QAAQ,WAAY,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,KAAM,KAAKA,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAAIA,QAAQ,OAAQ,KAE9L,KAAK,EACL,IAAK,MACH,OAAOiE,EAASK,UAGrBR,QAEoBjf,MAAMkQ,KAAMwH,WAGvC,SAASkjB,EAAgBtpB,GACvB,OAAOA,EAAQ6J,QAAQ,WAAY,KAAKA,QAAQ,WAAY,KAAKA,QAAQ,WAAY,KAAKA,QAAQ,WAAY,KAAKA,QAAQ,SAAU,KAAKA,QAAQ,eAAgB,KAAMA,QAAQ,eAAgB,KAAMA,QAAQ,eAAgB,KAAKA,QAAQ,eAAgB,KAAKA,QAAQ,eAAgB,KAAKA,QAAQ,cAAe,QAAKA,QAAQ,cAAe,QAAKA,QAAQ,cAAe,QAAKA,QAAQ,UAAW,QAAKA,QAAQ,UAAW,QAAKA,QAAQ,UAAW,QAAKA,QAAQ,WAAY,OAAOA,QAAQ,UAAW,UAGze,SAAS0f,EAAcre,GAMrB,OALIA,IAEFA,GADAA,EAAWse,EAAUte,IACDrB,QAAQ,OAAQ,MAG/BqB,EAGT,SAASse,EAAU7f,GACjB,GAAIA,EACF,OAAOA,EAAOE,QAAQ,cAAe,IAQzC,SAASkf,IAsLP,OArLAA,EAAoBphB,EAAgC8F,mBAAmBC,MAAK,SAAS+b,EAASzpB,GAC5F,IAAIpJ,EAASsU,EAAUK,EAAWZ,EAAQiX,EAAQxV,EAAUhD,EAAUsgB,EAAYngB,EAAiBogB,EAEnG,OAAOlc,mBAAmBI,MAAK,SAAmB+b,GAChD,OACE,OAAQA,EAAU7b,KAAO6b,EAAU5b,MACjC,KAAK,EAIH,IAHApX,EAAU,IACU,WAAIoJ,EAAQa,YAE3Bb,EAAQiU,eAAgB,CAC3B2V,EAAU5b,KAAO,EACjB,MAIF,OADA4b,EAAU5b,KAAO,EACV6a,EAAiB7oB,EAAQiU,eAAepK,QAAQ,YAAa,KAEtE,KAAK,EACHjT,EAAiB,QAAIgzB,EAAUC,KAC/BjzB,EAAkB,SAAIoJ,EAAQiU,eAAe7I,MAAM,MAAM,GAE3D,KAAK,EAmBH,GAlBAF,EAAW8d,EAAYhpB,GACvBpJ,EAAkB,SAAI0yB,EAAgBpe,IACtCK,EAAYue,EAAY9pB,MAGtBuL,EAAY+d,EAAgB/d,GAC5B3U,EAAkB,SAAI2U,EAAU1B,QAAQ,4BAA6B,IAAIA,QAAQ,yBAA0B,IAAIA,QAAQ,WAAY,IAAIA,QAAQ,aAAc,IAAIA,QAAQ,6BAA8B,IAAIA,QAAQ,6BAA8B,IAAIA,QAAQ,6BAA8B,IAAIA,QAAQ,6BAA8B,IAAIA,QAAQ,8BAA+B,IAAIA,QAAQ,uBAAwB,IAAIA,QAAQ,MAAO,IAAIA,QAAQ,SAAU,KAG3b7J,EAAQ+pB,SACVnzB,EAAgB,OAAI4yB,EAAUxpB,EAAQ+pB,SAGxCnzB,EAAmB,UAAIozB,EAAgBhqB,EAAQiqB,aAC/Ctf,EAAS,GACTiX,EAAS,GACTxV,EAAW,IAENpM,EAAQkqB,eAAgB,CAC3BN,EAAU5b,KAAO,GACjB,MAIF,OADA4b,EAAU5b,KAAO,GACVpe,QAAQiD,IAAImN,EAAQkqB,eAAeC,WAAW5vB,IAAkB,WACrE,IAAI6iB,EAAQzV,EAAgC8F,mBAAmBC,MAAK,SAAS0c,EAASC,GACpF,OAAO5c,mBAAmBI,MAAK,SAAmByc,GAChD,OACE,OAAQA,EAAUvc,KAAOuc,EAAUtc,MACjC,KAAK,EAEH,OADAsc,EAAUtc,KAAO,EACVpe,QAAQiD,IAAIw3B,EAAME,UAAUhwB,IAAkB,WACnD,IAAIiwB,EAAQ7iB,EAAgC8F,mBAAmBC,MAAK,SAAS+c,EAASC,GACpF,IAAIC,EAAuBC,EAA6BhmB,EAAIimB,EAE5D,OAAOpd,mBAAmBI,MAAK,SAAmBid,GAChD,OACE,OAAQA,EAAU/c,KAAO+c,EAAU9c,MACjC,KAAK,EACH,GAA0B,UAApBqc,EAAMU,YAAyBL,EAASM,SAAW,CACvDF,EAAU9c,KAAO,EACjB,MAGE0c,EAASM,SAAS9pB,MAAM,gBAC1BypB,EAAwBD,EAASM,SAAS9pB,MAAM,2BAA4B0pB,EAAyB3P,EAAe0P,EAAuB,GAAUC,EAAuB,GAAIhmB,EAAKgmB,EAAuB,GAC5Mxe,EAAS/d,KAAK,CACZuS,IAAK8pB,EAASM,SACdpmB,GAAIA,EAAGiF,QAAQ,iBAAkB,OAGnCc,EAAOtc,KAAK48B,EAAuBP,IAGrCI,EAAU9c,KAAO,GACjB,MAEF,KAAK,EACH,GAA0B,UAApBqc,EAAMU,YAAyBL,EAAS9pB,IAAM,CAClDkqB,EAAU9c,KAAO,GACjB,MAIF,OADA8c,EAAU9c,KAAO,EACVkd,EAAuBR,GAEhC,KAAK,EACHG,EAAcC,EAAUjB,KACxBjI,EAAOvzB,KAAKw8B,GACZC,EAAU9c,KAAO,GACjB,MAEF,KAAK,GACH3Z,QAAQkW,KAAK,YAAavK,EAAQa,WAAY6pB,GAEhD,KAAK,GACL,IAAK,MACH,OAAOI,EAAU3c,UAGtBsc,OAGL,OAAO,SAAUU,GACf,OAAOX,EAAM97B,MAAMkQ,KAAMwH,YArDwB,KAyDvD,KAAK,EACL,IAAK,MACH,OAAOkkB,EAAUnc,UAGtBic,OAGL,OAAO,SAAUgB,GACf,OAAOhO,EAAM1uB,MAAMkQ,KAAMwH,YAzE0C,KA6EzE,KAAK,GAwBH,OAvBIpG,EAAQ6hB,cACVlX,EAAOtc,KAAK,CACVuS,IAAKZ,EAAQ6hB,gBAIZ,EAAI7a,EAAS0D,SAASC,KACzB/T,EAAgB,OAAI+T,GAGlBiX,EAAO7zB,SACT6I,EAAgB,OAAIgrB,GAGlBxV,EAASre,SACX6I,EAAkB,SAAIwV,GAIxBhD,EAAWkgB,EADXlgB,EAAWiiB,EAAYrrB,IAEvBpJ,EAAkB,SAAIwS,EACtBsgB,EAAa4B,EAAcliB,GAC3BwgB,EAAU5b,KAAO,GACVud,EAAY7B,GAErB,KAAK,GAGH,OAFA9yB,EAAkB,SAAIgzB,EAAUC,KAChCD,EAAU5b,KAAO,GACVwd,EAAY9B,GAErB,KAAK,GAiBH,OAhBA9yB,EAAkB,SAAIgzB,EAAUC,KAChCtgB,EAAkB,IAClBogB,EAAwB3pB,EAAQyrB,gBAAkBzrB,EAAQuJ,iBAAmB,IAEnDxb,OAAS,IACjC47B,EAAsB9O,SAAQ,SAAU6Q,GAClCA,EAAeC,aACjBpiB,EAAgBlb,KAAKq9B,MAIrBniB,EAAgBxb,OAAS,IAC3B6I,EAAyB,gBAAI2S,IAI1BqgB,EAAU3b,OAAO,SAAUrX,GAEpC,KAAK,GACL,IAAK,MACH,OAAOgzB,EAAUzb,UAGtBsb,QAEoB/6B,MAAMkQ,KAAMwH,WAGvC,SAAS0jB,EAAY9pB,GACnB,OAAIA,EAAQ4rB,QACH5rB,EAAQ4rB,QAGb5rB,EAAQ6rB,gBACH7rB,EAAQ6rB,gBAGb7rB,EAAQ8rB,oBACH9rB,EAAQ8rB,oBAGb9rB,EAAQ+rB,aACH/rB,EAAQ+rB,cAGb/rB,EAAkB,UACpBA,EAAkB,SAGb,IAGT,SAASgpB,EAAYhpB,GACnB,OAAIA,EAAQkL,SACHqe,EAAcvpB,EAAQkL,UAG3BlL,EAAQgsB,gBACHzC,EAAcvpB,EAAQgsB,iBAG3BhsB,EAAQsF,MACHikB,EAAcvpB,EAAQsF,OAGxB,GAGT,SAASgmB,EAAcW,GAIrB,IAHA,IACIvC,EAAa,KAGf,GAAIuC,EAAKhzB,WAAW,MAAO,CACzB,IAAIuB,EAAQyxB,EAAKzgB,QAAQ,QAEzB,GAAIhR,EAAQ,EAEV,OADAkvB,EAAWr7B,KAAK49B,EAAO,QAChBvC,EAGTlvB,GAAS,EACT,IAAI0xB,EAAYD,EAAK/iB,UAbT,EAa8B1O,GAEtC0xB,EAAUn+B,QACZ27B,EAAWr7B,KAAK69B,GAGlBD,EAAOA,EAAK/iB,UAAU1O,OACjB,CACL,IAAI2xB,EAASF,EAAKzgB,QAAQ,MAE1B,GAAI2gB,EAAS,EAEX,OADAzC,EAAWr7B,KAAK49B,GACTvC,EAEPA,EAAWr7B,KAAK49B,EAAK/iB,UA3BX,EA2BgCijB,IAC1CF,EAAOA,EAAK/iB,UAAUijB,GAK5B,OAAOzC,EAiBT,SAASwB,EAAuBkB,GAC9B,OAAOC,EAAwB39B,MAAMkQ,KAAMwH,WAG7C,SAASimB,IAiCP,OAhCAA,EAA0B1kB,EAAgC8F,mBAAmBC,MAAK,SAAS4e,EAAS5B,GAClG,IAAI9pB,EAAK2rB,EAAeC,EACxB,OAAO/e,mBAAmBI,MAAK,SAAmB4e,GAChD,OACE,OAAQA,EAAU1e,KAAO0e,EAAUze,MACjC,KAAK,EAGH,OAFApN,EAAM8pB,EAAS9pB,IACf6rB,EAAUze,KAAO,EACV0e,SAASC,KAAK,CACnB/rB,IAAKgsB,UAAUC,gBAAkBjsB,EAAM,qBAG3C,KAAK,EAMH,OALA2rB,EAAgBE,EAAU5C,KAC1B2C,EAAa5rB,EAAIwK,MAAM,KAIhBqhB,EAAUxe,OAAO,SAAU,CAChCrJ,GAAI4nB,EAAWA,EAAWz+B,OAAS,GACnC6S,IAAKA,EACLihB,aAAc6I,EAAS7I,aACvBhwB,OAAQ06B,IAGZ,KAAK,EACL,IAAK,MACH,OAAOE,EAAUte,UAGtBme,QAE0B59B,MAAMkQ,KAAMwH,WAG7C,SAAS6kB,EAAuBP,GAC9B,IACI3N,EAAQ9B,EADDyP,EAASM,SAAS9pB,MAAM,8BAAgC,GAClC,GAC7BN,EAAMmc,EAAM,GAEZnY,GADOmY,EAAM,GACRA,EAAM,IAEf,IAAKnY,EACH,KAAM,0BAA4B8lB,EAASM,SAG7C,IAAIvgB,EAAQ,CACV7F,GAAIA,EACJhE,IAAKA,GAkCP,OA/BI8pB,EAAS1e,UACXvB,EAAMuB,QAAUsd,EAAgBoB,EAAS1e,UAGvC0e,EAASoC,aACXriB,EAAMM,MAAQ2f,EAASoC,WACvBriB,EAAMO,OAAS0f,EAASqC,YAQpBrC,EAASsC,YACXviB,EAAMwiB,KAAO,CACXx1B,EAAGizB,EAASsC,UACZ7yB,EAAGuwB,EAASwC,WACZC,EAAGzC,EAAS0C,aAAe,EAC3BC,EAAG3C,EAAS4C,aAAe,IAI3B5C,EAAS6C,cACX9iB,EAAM+iB,WAAa,CACjBL,EAAGzC,EAAS6C,YACZF,EAAG3C,EAAS+C,eAKXhjB,EAGT,SAASuf,EAAgB0D,GACvB,OAAIA,EAAa,IAAI73B,KAAK63B,GAAMzkB,cAAcC,UAAU,EAAG,IAClD,GAIX,SAASmiB,EAAYrrB,GACnB,GAAIA,EAAQoJ,SACV,OAAOpJ,EAAQoJ,SAEf,IACE,OAoHN,SAAgCpJ,GAC9B,IACIyB,EADAwqB,EAAO,GAGPjsB,EAAQ+pB,SACVtoB,EAASzB,EAAQ+pB,OAAOlgB,QAAQ,WAAY,KAoB9C,OAjBAoB,OAAOjL,EAAQ2tB,MAAQ3tB,EAAQ2tB,KAAKC,SAAU,yBAC9C5tB,EAAQ2tB,KAAKC,SAAS/S,SAAQ,SAAUgT,GACT,SAAzBA,EAAQ7tB,QAAQpP,MAClBqa,OAAO4iB,EAAQ7tB,QAAQisB,KAAM,gBAEzBxqB,GAAmD,IAAzCosB,EAAQ7tB,QAAQisB,KAAKzgB,QAAQ/J,GACzCwqB,GAAQ4B,EAAQ7tB,QAAQisB,KAAK/iB,UAAUzH,EAAO1T,QAE9Ck+B,GAAQ4B,EAAQ7tB,QAAQisB,MAEQ,iBAAzB4B,EAAQ7tB,QAAQpP,MACzBqa,OAAO4iB,EAAQ7tB,QAAQ8tB,cAAc7B,KAAM,6BAC3CA,GAAQ4B,EAAQ7tB,QAAQ8tB,cAAc7B,MAEtC53B,QAAQkW,KAAK,qBAAsBvK,EAAQa,WAAYgtB,EAAQj9B,KAAMi9B,MAGlE5B,EA7II8B,CAAuB/tB,GAC9B,MAAO7O,GAEP,MADAkD,QAAQkW,KAAKpZ,EAAK6O,EAAQa,YACpB,kBAAoBb,EAAQa,YAKxC,SAAS0qB,EAAYyC,GACnB,OAAOC,EAAav/B,MAAMkQ,KAAMwH,WAGlC,SAAS6nB,IAqBP,OApBAA,EAAetmB,EAAgC8F,mBAAmBC,MAAK,SAASwgB,EAASxE,GACvF,IAAIiE,EACJ,OAAOlgB,mBAAmBI,MAAK,SAAmBsgB,GAChD,OACE,OAAQA,EAAUpgB,KAAOogB,EAAUngB,MACjC,KAAK,EAGH,OAFA2f,GAAO,EAAIvE,EAAkBgF,YAAY1E,EAAWj1B,MAAM,EAAG,IAC7D05B,EAAUngB,KAAO,EACVqgB,EAAgBV,GAEzB,KAAK,EACH,OAAOQ,EAAUlgB,OAAO,SAAUkgB,EAAUtE,MAE9C,KAAK,EACL,IAAK,MACH,OAAOsE,EAAUhgB,UAGtB+f,QAEex/B,MAAMkQ,KAAMwH,WAGlC,SAASolB,EAAY8C,GACnB,OAAOC,EAAa7/B,MAAMkQ,KAAMwH,WAGlC,SAASmoB,IAqBP,OApBAA,EAAe5mB,EAAgC8F,mBAAmBC,MAAK,SAAS8gB,EAAS9E,GACvF,IAAIiE,EACJ,OAAOlgB,mBAAmBI,MAAK,SAAmB4gB,GAChD,OACE,OAAQA,EAAU1gB,KAAO0gB,EAAUzgB,MACjC,KAAK,EAGH,OAFA2f,GAAO,EAAIvE,EAAkBgF,YAAY1E,EAAWj1B,MAAM,EAAG,IAC7Dg6B,EAAUzgB,KAAO,EACVqgB,EAAgBV,GAEzB,KAAK,EACH,OAAOc,EAAUxgB,OAAO,SAAUwgB,EAAU5E,MAE9C,KAAK,EACL,IAAK,MACH,OAAO4E,EAAUtgB,UAGtBqgB,QAEe9/B,MAAMkQ,KAAMwH,WAGlC,SAASioB,EAAgBK,GACvB,OAAOC,EAAiBjgC,MAAMkQ,KAAMwH,WAGtC,SAASuoB,IA6CP,OA5CAA,EAAmBhnB,EAAgC8F,mBAAmBC,MAAK,SAASkhB,EAASjB,GAC3F,IAAoFkB,EACpF,OAAOphB,mBAAmBI,MAAK,SAAmBihB,GAChD,OACE,OAAQA,EAAU/gB,KAAO+gB,EAAU9gB,MACjC,KAAK,EAMH,GAJqB,oEACW,8EAChC6gB,EAAmB,8CAHW,sBAKGxlB,KAAKskB,GAAO,CAC3CmB,EAAU9gB,KAAO,EACjB,MAIF,OADA8gB,EAAU9gB,KAAO,EACV+gB,kBAAkBpB,GAE3B,KAAK,EACHA,EAAOmB,EAAUjF,KAEnB,KAAK,EACH,IAAKgF,EAAiBxlB,KAAKskB,GAAO,CAChCmB,EAAU9gB,KAAO,GACjB,MAIF,OADA8gB,EAAU9gB,KAAO,GACVghB,kBAAkBrB,GAE3B,KAAK,GACHA,EAAOmB,EAAUjF,KAEnB,KAAK,GACH,OAAOiF,EAAU7gB,OAAO,SAAU0f,GAEpC,KAAK,GACL,IAAK,MACH,OAAOmB,EAAU3gB,UAGtBygB,QAEmBlgC,MAAMkQ,KAAMwH,WAmCtC,SAAS+iB,IAsCP,OArCAA,EAAkBxhB,EAAgC8F,mBAAmBC,MAAK,SAASuhB,EAAS1hC,GAC1F,IAAI2hC,EACJ,OAAOzhB,mBAAmBI,MAAK,SAAmBshB,GAChD,OACE,OAAQA,EAAUphB,KAAOohB,EAAUnhB,MACjC,KAAK,EAuBH,OAtBAkhB,EAAU,CACRruB,WAAYtT,EAAKsT,WACjBS,QAAS/T,EAAK+T,QACd4J,SAAU3d,EAAK2d,SACf,SAAY3d,EAAe,SAC3BkU,OAAQlU,EAAKkU,OACb0H,UAAW5b,EAAK4b,UAChBkW,SAAU9xB,EAAK8xB,WAGZ,EAAIrY,EAAS0D,SAASnd,EAAKod,UAC9BukB,EAAQzkB,MAAQld,EAAKod,OAAO,KAGzB,EAAI3D,EAAS0D,SAASnd,EAAKq0B,UAC9BsN,EAAQE,MAAQ7hC,EAAKq0B,OAAO,KAGzB,EAAI5a,EAAS0D,SAASnd,EAAK6e,YAC9B8iB,EAAQ/iB,QAAU5e,EAAK6e,SAAS,IAG3B+iB,EAAUlhB,OAAO,SAAUihB,GAEpC,KAAK,EACL,IAAK,MACH,OAAOC,EAAUhhB,UAGtB8gB,QAEkBvgC,MAAMkQ,KAAMwH,a,sOCjlBnBipB,GArCZtsB,EAAQC,cAAO,SAENkkB,EAAgB,qDAwB9B,OAxB8B,kCAA/B,WAAiC5lB,EAAS6lB,EAAQC,EAAOruB,GAAM,oFAC9C,IAAXouB,EAAY,gCACOpkB,EAAM1P,IAAIiO,GAAQ,OAA3B,MAAN1S,EAAS,EAAH,OACEA,EAAOy4B,UAAYz4B,EAAOy4B,SAASt5B,QAAUq5B,GAAK,gBAEb,OAAjDx4B,EAAOy4B,SAAWz4B,EAAOy4B,SAAS5yB,MAAM,EAAG2yB,GAAM,kBAC1Cx4B,GAAM,OAEfw4B,EAAQ7a,KAAK+a,IAAI,GAAIF,GAAM,gCAEtB5rB,IAAMnI,IAAIm0B,4BAAmBL,EAAS,IAAe,EAARC,EAAa,IAAM9lB,GACpE7P,MAAK,SAAAyR,GACJ,IAAM3V,EAAO2V,EAAS3V,KAAKwL,QAAO,SAAAnC,GAAO,MAAK,gBAAiBA,GAAYmC,EAAOyS,QAAQ5U,EAAQ04B,cAAgB,KAAG76B,MAAM,EAAG2yB,GAE9H,OAAe,IAAXD,EACKpkB,EAAMI,IAAI7B,EAAS/T,GAEnBqC,QAAQC,QAAQqT,EAAS3V,SAElC,OACK,SAAA4D,GAEL,MAAMA,MACN,4CACL,sBAED,SAAWo+B,EAAkC,OAAIjuB,EAAO,EAAPA,QAAS6lB,EAAM,EAANA,OAAQC,EAAK,EAALA,MAAOruB,EAAM,EAANA,OAAM,yHAE/D,OAF+D,kBAEzD5K,YAAK+4B,EAAkB5lB,EAAS6lB,EAAQC,EAAQ,EAAGruB,GAAO,OAC5E,OADMuK,EAAM,EAAH,cACHC,YAAI,CAAE3S,KApCyC,gDAoCQ4S,QAASF,EAAKhC,YAAU,8BAErF,OAFqF,mCAE/EiC,YAAI,CAAE3S,KArCuC,8CAqCQ4S,QAAS,KAAEhR,QAAS8O,YAAU,uDALd,GASxE,SAAW+tB,IAAmC,2EACnD,OADmD,SAC7C5rB,YA5CyC,wCA4CK8rB,GAAmC,uCAIlF,IAAMC,EAAiC,SAACluB,EAAS6lB,EAAQC,EAAOruB,GAAM,MAAM,CAAEnI,KAhDpC,wCAgD6E0Q,QA3C/F,kBA2CgI6lB,SAAQC,QAAOruB,WAExK8K,EAAe,CACnB4rB,gBAAiB,CACf3rB,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,KACPge,SAAU,KAIDlM,EAAU,WAA4D,IAA3DxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAelC,GAAF,EAAJihB,KAAa,EAAPjhB,SAC7DmnB,EAAa,GACnB,OAAQ73B,GACN,IAhE6C,wCAwE3C,OAPA63B,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDwC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAvEmD,8CA+EjD,OAPAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtD5C,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAjFqD,gDAwFnD,OANAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACfqM,SAAU3M,IAELxV,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,QACE,OAAOhqB,K,iFC5FbklB,YAAS,IAAI+L,kB,6UCAP5L,EAAiB,SAAC1E,GAAM,OAAKf,mBAAmBe,GAAQvV,QAAQ,UAAW,KAGpE8lB,GAAS,mBACnBC,KAAoB,SAAC9e,GAAM,MAAM,CAChC/f,MAAO,kBACP8+B,YAAa/e,EAAO+e,YACpBxP,eAAgBvP,EAAOtN,QAAQpD,KAC/BkB,QAASwP,EAAOtN,QAAQlC,QACxB9B,UAAWskB,EAAehT,EAAOtR,WACjCoC,UAAWkP,EAAOlP,UAClByd,SAAUzf,UACV,cACDkwB,KAAmB,SAAChf,GAAM,MAAM,CAC/B/f,MAAO,iBACP8+B,YAAa/e,EAAO+e,YACpBxP,eAAgBvP,EAAOtN,QACvBhE,UAAWskB,EAAehT,EAAOtR,WACjCoC,UAAWkP,EAAOlP,UAClByd,SAAUzf,UACV,cACDmwB,KAAiB,SAACjf,GAAM,MAAM,CAC7B/f,MAAO,eACP8+B,YAAa/e,EAAO+e,YACpBxP,eAAgBvP,EAAOtN,QACvBhE,UAAWskB,EAAehT,EAAOtR,WACjCoC,UAAWkP,EAAOlP,UAClByd,SAAUzf,UACV,cACDowB,KAAY,SAAClf,GAAM,MAAM,CACxB/f,MAAO,kBACPsvB,eAAgBvP,EAAOtN,QACvBhE,UAAWskB,EAAehT,EAAOtR,WACjCoC,UAAWkP,EAAOlP,cAClB,cACDquB,KAAwB,SAACnf,GAAM,MAAM,CACpC/f,MAAO,aACPuQ,QAASwP,EAAOtN,QAAQ4H,MAAM,KAAK,OACnC,cACD8kB,KAAwB,SAACpf,GAAM,MAAM,CACpC/f,MAAO,kBACP8P,WAAYiQ,EAAOtN,QAAQ3C,WAC3BS,QAASwP,EAAOtN,QAAQlC,QAAQ8J,MAAM,KAAK,IAAM,GACjD3J,OAAQqP,EAAOtN,QAAQ/B,OACvBjC,UAAWskB,EAAehT,EAAOtN,QAAQhE,WACzCoC,UAAWkP,EAAOtN,QAAQ5B,UAC1BtK,MAAOwZ,EAAOtN,QAAQ0H,SACtBilB,KAAMvwB,wBACNQ,KAAM0Q,EAAO1Q,KACbif,SAAUvO,EAAOtN,QAAQ6b,SACzB+Q,KAAMtf,EAAOsf,KACbC,cAAevf,EAAOtN,QAAQ8sB,YAC9BC,cAAe,UACfC,WAAY1f,EAAOtN,QAAQlC,QAAQ8J,MAAM,KAAK,IAAM,GACpDqlB,WAAY3f,EAAOtN,QAAQktB,YAI3BrO,UAAWvR,EAAOtN,QAAQ0T,iBAC1B,cACDyZ,KAAwB,SAAC7f,GAAM,MAAM,CACpC/f,MAAO,cACP8P,WAAYiQ,EAAOtN,QAAQ3C,WAC3B+vB,YAAa9f,EAAOtN,QAAQqtB,SAC5BrxB,UAAWskB,EAAehT,EAAOtN,QAAQhE,WACzCoC,UAAWkP,EAAOtN,QAAQ5B,cAC1B,cACDkvB,KAAiB,SAAChgB,GAAM,MAAM,CAC7B/f,MAAO,SACPggC,WAAYjgB,EAAOtN,QACnBwtB,QAASlgB,EAAOkgB,YAChB,cACDC,KAAkB,SAACngB,GAAM,MAAM,CAC9B/f,MAAO,gBACPsvB,eAAgBvP,EAAOtN,QACvBhE,UAAWskB,EAAehT,EAAOtR,eACjC,cACD0xB,KAAa,SAACpgB,GAAM,MAAM,CACzB/f,MAAO,oBACPsvB,eAAgBvP,EAAOtN,QACvB2sB,KAAMvwB,4BACN,G,0LCzDOuxB,IAAgB,qBAUTC,IA5BZruB,EAAQC,cACRjP,GAAM,YAAW,SAERs9B,KAAe,8CAa7B,OAb6B,mCAA9B,8GACuBtuB,EAAM1P,IAAIU,IAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAAyB,mCACnC5B,MAAK,SAAAyR,GACJ,OAAOA,EAAS3V,QAChB,OACK,SAAA4D,GAEL,MAAMA,MACN,4CACL,sBAED,SAAWggC,KAAgB,iFAEX,OAFW,kBAELhjC,YAAKkjC,IAAgB,OAEvC,OAFM/tB,EAAM,EAAH,KACTP,EAAMI,IAAIpP,GAAKuP,GAAI,SACbC,YAAI,CAAE3S,KA1BqB,4BA0BQ4S,QAASF,IAAM,8BAExD,OAFwD,mCAElDC,YAAI,CAAE3S,KA3BmB,0BA2BQ4S,QAAS,KAAEhR,UAAU,qDAIzD,SAAW4+B,KAAiB,2EACjC,OADiC,SAC3BjJ,YAlCqB,oBAkCIgJ,IAAiB,uCAI3C,I,iECvBQG,6BAAgB,CAC7B16B,YACAuZ,aACAohB,qBACAC,qBACAC,WACAnvB,QACAovB,eACAC,aACAxM,cACAyM,kBACAC,sBACAz2B,QDaqB,WAAmC,IAAlCqD,EAAQ,UAAH,6CAAG,GAAE,yCAAI7N,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAC1C,OAAQ5S,GACN,IA1CyB,oBA4CvB,OAAO6N,EACT,IA3C+B,0BA4C7B,OAAOzQ,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkF,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVlM,QAASgR,IAEb,IAnDiC,4BAoD/B,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkF,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVtD,QAASoI,IAEb,QACE,OAAO/E,IChCX8S,UACA9P,YACA+e,aACA8B,eACAwP,iBCpBIC,GAAMC,MACNC,GAAiBC,IAAWC,KAC5BC,GAAqB,CACzBC,2BAAuB1C,EAAW2C,IAAc,CAAEL,qBAMpD,SAASM,GAAkBC,GACzB,OAAKA,EAGI,CACLH,2BAAuB1C,EAAW2C,KAClCD,2BAAuB1C,EAAW8C,MAJ7BL,GALsBA,GAAmB/jC,KAAKgkC,2BAAuB1C,EAAWoC,GAAK,CAAEE,qBAC3DG,GAAmB/jC,KAAKgkC,2BAAuB1C,EAAW+C,M,0BCLvEC,IAAX,SAAWA,KAAQ,2EAE9B,OAF8B,kBAExB9/B,YAAI,CACR+/B,cACAC,cACAC,cACA9L,cACA+L,cACAC,cACAC,cAEAC,cACAC,cACAC,cACAC,cACAC,cACAC,cACAC,cACAnE,cACA+B,KACAtuB,eACA2wB,eACAvR,eACAwR,iBACA,6BAEkC,MAFlC,yBAEFr/B,QAAQlC,MAAM,mBAAoB,EAAF,IAAI,0D,yBCfxC,IAAMwhC,GFOS,WAAuC,IAAZl1B,EAAQ,UAAH,6CAAG,GAC1Cm1B,EASFC,cAEEC,EAAoDv/B,OAAOw/B,sCAAyCC,UAEpGL,EAAQM,sBAAYC,GAAaz1B,EAAOq1B,EAAgBK,kBAAe,yBACxE5B,IAAiB,IAA8B,QAClDqB,OAcF,OAHAD,EAAMS,QAAUR,EAAe/kB,IAC/B8kB,EAAM/b,MAAQ,kBAAM+b,EAAMjxB,SAAS2xB,MAE5BV,EErCKM,CAAY,2BACrB1/B,OAAO+/B,qBACP,CACD/iB,KAAM,CACJ/R,UAfGrP,SAASiuB,OACbhT,MAAM,MACNmpB,MAAK,SAAAC,GAAG,OAAIA,EAAIv7B,WAAW,iBAC3BmS,MAAM,KAAK,GAaVxJ,UAVGzR,SAASiuB,OACbhT,MAAM,MACNmpB,MAAK,SAAAC,GAAG,OAAIA,EAAIv7B,WAAW,iBAC3BmS,MAAM,KAAK,OAYhBuoB,GAAMS,QAAQzB,IAEdp+B,OAAO2a,iBAAiB,WAAW,WACjCykB,GAAMjxB,SAAS+xB,aAAmB,OAGpClgC,OAAO2a,iBAAiB,UAAU,WAChCykB,GAAMjxB,SAAS+xB,aAAmB,OAGpClgC,OAAOmgC,UAAYngC,OAAO2G,SAASqE,SAEnCo1B,aAAc,WACZC,kBACE,GAAC,WAAQ,CAACjB,MAAOA,IACf,GAAC,IAAc,KACb,GAAC,gBAAa,KACZ,GAACkB,EAAA,EAAa,MACd,GAAC,IAAY,MACb,GAAC71B,EAAA,EAAgB,KACf,GAACA,EAAA,EAAG,UAKZ7O,SAASusB,eAAe,a,23BCNjBoY,GAAY,qBAOL1B,GAAa,qBAIpB2B,GAAY,qBAgBZC,GAAY,qBAIZC,GAAQ,qBAiBRC,GAAiB,qBAQVhC,GArGLpC,EAAiB,iBACjBd,EAAY,YACZiB,EAAkB,kBAClBlB,EAAiB,iBACjBH,EAAoB,oBACpBE,EAAmB,mBAKnBoB,EAAa,aAiBb1O,EAAmB,SAACO,GAAM,MAAM,CAAEnyB,KAbb,qBAauCmyB,WAE5D0R,EAAqB,SAACtC,GAAW,MAAM,CAAEvhC,KAvBnB,sBAuB8C4S,QAAS2uB,IAC7EgD,EAAkB,SAACC,GAAY,MAAM,CAAExkC,KAjBpB,mBAiB4C4S,QAAS4xB,IAGxE91B,EAAW,SAACc,EAAMZ,EAAWoC,GAAS,MAAM,CAAEhR,KAAMo/B,EAAWxsB,QAASpD,EAAMZ,YAAWoC,cACzFyzB,EAAgB,SAACj1B,EAAMZ,EAAWoC,GAAS,MAAM,CAAEhR,KAAMqgC,EAAiBztB,QAASpD,EAAMZ,YAAWoC,cACpG0zB,EAAe,SAACl1B,EAAMZ,EAAWoC,EAAWiuB,GAAW,MAAM,CAAEj/B,KAAMm/B,EAAgBvsB,QAASpD,EAAMZ,YAAWoC,YAAWiuB,gBAC1H0F,EAAkB,SAACn1B,EAAMkB,EAAS9B,EAAWoC,EAAWiuB,GAAW,MAAM,CAAEj/B,KAAMg/B,EAAmBpsB,QAAS,CAAEpD,OAAMkB,WAAW9B,YAAWoC,YAAWiuB,gBACtJ2F,EAAiB,SAACp1B,EAAMZ,EAAWoC,EAAWiuB,GAAW,MAAM,CAAEj/B,KAAMk/B,EAAkBtsB,QAASpD,EAAMZ,YAAWoC,YAAWiuB,gBAC9HsC,EAAc,SAAA1zB,GAAK,OAAIA,EAAM6D,IAAI6vB,aAGjCsD,EAAqB,SAACC,GAAM,MAAM,CAAE9kC,KA7BV,0BA6ByC4S,QAASkyB,IAIzF,SAAWZ,IAAY,mFACJ,OADI,SACE7M,YAAOG,KAAe,OAAvCjY,EAAW,EAAH,6BACQA,GAAQ,8CAC5B,OADS7O,EAAO,oBACViC,YAAI,CAAE3S,KAAMq2B,IAAwBzjB,QAAS2M,EAAS7O,GAAUA,YAAU,8DAI7E,SAAW8xB,IAAa,2EAC7B,OAD6B,SACvBjL,YAtCgB,WAsCI2M,GAAa,uCAGzC,SAAWC,EAAc30B,GAAI,iFAa3B,OAXAu1B,wBAKQC,EAAgBzlC,SAASusB,eAAe,8BAE5CkZ,EAActkC,WAAWC,YAAYqkC,GAExC,SAEKryB,YAAI,CAAE3S,KAzDyB,0BAyDM4S,SAAS,IAAQ,uCAG9D,SAAWwxB,IAAY,2EACrB,OADqB,SACfzxB,YAAI,CAAE3S,KA/EW,YA+EM4S,SAAS,IAAQ,uCAGhD,SAAWyxB,IAAQ,oFAGb,OADS,SACHY,YAAM,KAAK,OAEjB,OAFiB,SAEX1nC,YAAK+mC,GAAkB,6DAKnC,SAAWY,EAAsB,OAAI/S,EAAM,EAANA,OAAM,mHAGzC,OAHyC,SAGnC8S,YAAM,KAAI,OAChBE,+BAAqBhT,GAAO,yCAJa,GAO3C,SAAWmS,IAAiB,uFAIZ,OAHRpjB,EAAcvd,OAAO2G,SAASnL,KAC9BkiB,EAAc1d,OAAOpE,SAAS+hB,SAC9BC,EAAc5d,OAAO6d,QAAO,SACd6V,cAAQ,OAC5B,OADMxpB,EAAQ,EAAH,cACLtQ,YAAKkkB,IAAkB,OAAQC,IAAe7T,EAAM8S,KAAK/R,UAAWI,MAA8BnB,EAAM8S,KAAK3P,UAAWkQ,EAAa,CAAEG,cAAaE,gBAAc,uCAGnK,SAAW+gB,IAAe,2EAC/B,OAD+B,SACzB8C,YAAMf,GAAS,OACrB,OADqB,SACfxxB,YAAWusB,EAAW+E,GAAa,OACzC,OADyC,SACnCtxB,YAAWwW,cAAa+a,GAAa,OAC3C,OAD2C,SACrCvxB,YA3F0B,qBA2FKqyB,GAAuB,OAC5D,OAD4D,UACtDryB,YAnGkB,aAmGKyxB,GAAkB,wCAGjD,IAAIe,EAAY,UAET,SAASC,EAAa/W,GAC3B8W,EAAY9W,EAGP,SAAS7M,IACd,OAAO2jB,EAGT,IAAME,EAAe,CACnBC,UAAU,EACVC,YAAY,EACZlE,aAAa,EACbmE,mBAAmB,EACnBC,aAAa,EACb1G,aAAa,EACbzvB,KAAM,GACNo2B,YAAa,EACb9lB,iBAAiB,GAGNzM,EAAU,WAAmE,IAAlExF,EAAQ,UAAH,6CAAG03B,EAAY,yCAAIvlC,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAShE,EAAS,EAATA,UAAWoC,EAAS,EAATA,UACxE,OAAQhR,GACN,IAxH4B,mBAyH1B,OAAO,2BAAK6N,GAAU,CAAE22B,cAA2B,IAAZ5xB,GAA4Buc,KAAKC,UAAUxc,KACpF,IA3HmC,0BA4HjC,OAAO,2BAAK/E,GAAU,CAAEiS,gBAAiBlN,IAC3C,IAnI+B,sBAoI7B,OAAO,2BAAK/E,GAAU,CAAE0zB,YAAa3uB,IACvC,KAAKstB,EACH,OAAO,2BAAKryB,GAAU,CAAEsyB,WAAYvtB,EAAQutB,WAAYC,QAASxtB,EAAQwtB,UAC3E,KAAKhB,EACH,OAAO,2BAAKvxB,GAAU,CAAE2B,KAAMoD,EAAShE,YAAWoC,cACpD,IAlJuB,cAmJvB,IAlJuB,cAmJrB,OAAO,2BAAKnD,GAAU,CAAE43B,WAAY7yB,IACtC,IAnJyB,gBAoJvB,OAAO,2BAAK/E,GAAU,CAAE43B,YAAa53B,EAAM43B,aAC7C,IA5I8B,qBA6I5B,OAAO,2BAAK53B,GAAU,CAAEoxB,aAAa,IACvC,IA3JqB,YA4JrB,IA7JqB,YA8JnB,OAAO,2BAAKpxB,GAAU,CAAE23B,SAAU5yB,IACpC,IA7JuB,cA8JrB,OAAO,2BAAK/E,GAAU,CAAE23B,UAAW33B,EAAM23B,WAC3C,IAlJgC,uBAmJ9B,OAAO,2BAAK33B,GAAU,CAAE+3B,YAAahzB,IACvC,KAAK0tB,EACH,OAAO,2BAAKzyB,GAAU,CAAE63B,mBAAmB,EAAMl2B,KAAMoD,IACzD,IApJwB,eAqJtB,OAAO,2BAAK/E,GAAU,CAAE83B,aAAa,IACvC,QACE,OAAO93B,K,kCC7KbzQ,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAGT,IAIgCqS,EAJ5BmZ,EAAS,EAAQ,QAEjBwX,GAE4B3wB,EAFKmZ,IAEgBnZ,EAAIlS,WAAakS,EAAM,CAAEoa,QAASpa,GAkCvFvW,EAAQ2wB,QAhCW,SAAsBC,GACvCA,EAAOtF,SAAQ,SAAU9pB,GACvB,OAAQA,EAAMA,OACZ,IAAK,kBACH,KAaR,SAA0B0tB,EAAOjf,GAC/B,IAAIk3B,EAAkBl3B,GAAa+M,KAAKoqB,SAASnhC,SAAS,IAAIkxB,OAAO,EAAG,GACpEkQ,EAAW/gC,KAAKqoB,MAChB2Y,GAAU,IAAIhhC,MAAOihC,UACrBl2B,EAAM,wBAA0B6d,EAAM2E,KAAK,KAEzB,qBAAX7uB,OACTqM,GAAO,MAAQrM,OAAOmrB,WAAa,MAAQnrB,OAAOorB,YAAc,MAAQ+W,EAAkB,MAAQE,EAAW,OAASC,EAEtHj2B,GAAO,cAAgB81B,EAAkB,MAAQE,EAAW,OAASC,EAEvEJ,EAAQvW,QAAQ7sB,IAAIuN,GAAKm2B,OAAM,SAAU5kC,GACvCkC,QAAQkW,KAAK,wBAA0BpY,GAASA,EAAM0sB,QAAU,aAAcje,MAvBxEo2B,CAAiB,CADNjmC,EAAMo/B,KAAK/kB,MAAM,MAAM,GAAGA,MAAM,KAAK,GACxB,IAAKra,EAAM8P,WAAY9P,EAAMuQ,SAAUvQ,EAAMyO,WACrE,MAAOrN,GACPkC,QAAQ+O,IAAIjR,U,kCClBtBnE,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETzF,OAAOmF,eAAe5D,EAAS,UAAW,CACxC6D,YAAY,EACZC,IAAK,WACH,OAAO4jC,EAAS/W,WAGpBlyB,OAAOmF,eAAe5D,EAAS,gBAAiB,CAC9C6D,YAAY,EACZC,IAAK,WACH,OAAOytB,EAAS/G,iBAGpB/rB,OAAOmF,eAAe5D,EAAS,cAAe,CAC5C6D,YAAY,EACZC,IAAK,WACH,OAAOytB,EAAS5G,eAGpBlsB,OAAOmF,eAAe5D,EAAS,cAAe,CAC5C6D,YAAY,EACZC,IAAK,WACH,OAAOytB,EAAS7G,eAGpBjsB,OAAOmF,eAAe5D,EAAS,UAAW,CACxC6D,YAAY,EACZC,IAAK,WACH,OAAOytB,EAAS7c,WAGpB1U,EAAQ2wB,QAAU3wB,EAAQ2nC,gBAAa,EAEvC,IAUgCpxB,EAV5BsU,EAcJ,SAAiCtU,GAAO,GAAIA,GAAOA,EAAIlS,WAAc,OAAOkS,EAAO,GAAY,OAARA,GAA+B,kBAARA,GAAmC,oBAARA,EAAsB,MAAO,CAAEoa,QAASpa,GAAS,IAAI/C,EAAQ0D,IAA4B,GAAI1D,GAASA,EAAM2D,IAAIZ,GAAQ,OAAO/C,EAAM1P,IAAIyS,GAAQ,IAAIa,EAAS,GAAQC,EAAwB5Y,OAAOmF,gBAAkBnF,OAAO6Y,yBAA0B,IAAK,IAAI9S,KAAO+R,EAAO,GAAI9X,OAAOC,UAAUC,eAAeC,KAAK2X,EAAK/R,GAAM,CAAE,IAAI+S,EAAOF,EAAwB5Y,OAAO6Y,yBAAyBf,EAAK/R,GAAO,KAAU+S,IAASA,EAAKzT,KAAOyT,EAAK3D,KAAQnV,OAAOmF,eAAewT,EAAQ5S,EAAK+S,GAAgBH,EAAO5S,GAAO+R,EAAI/R,GAAY4S,EAAOuZ,QAAUpa,EAAS/C,GAASA,EAAMI,IAAI2C,EAAKa,GAAW,OAAOA,EAdjtBI,CAAwB,EAAQ,SAEzC2Z,EAAS,EAAQ,QAEjBuW,GAM4BnxB,EANM,EAAQ,UAMOA,EAAIlS,WAAakS,EAAM,CAAEoa,QAASpa,GAJnF+a,EAAc,EAAQ,QAEtBC,EAAW,EAAQ,QAIvB,SAASra,IAA6B,GAAuB,oBAAZQ,QAAwB,OAAO,KAAM,IAAIlE,EAAQ,IAAIkE,QAAqE,OAA1DR,EAA2B,WAAc,OAAO1D,GAAiBA,EAIlL,MAAMm0B,UAAmB9c,EAAOrb,UAC9B,cACEiiB,QACApiB,KAAKqiB,YAAcriB,KAAKqiB,YAAYjtB,KAAK4K,MACzCA,KAAKu4B,eAAiBv4B,KAAKu4B,eAAenjC,KAAK4K,MAGjD,iBACEA,KAAKhK,MAAMmlB,cAAc,KAG3B,cACMnb,KAAKhK,MAAMulB,QAAQlhB,WAAW2F,KAAKhK,MAAMwiC,OAC3Cx4B,KAAKhK,MAAMmlB,cAAcnb,KAAKhK,MAAMwiC,MAAM1Q,OAAO,EAAG9nB,KAAKhK,MAAMwiC,MAAMC,YAAY,OAEjFz4B,KAAKhK,MAAMmlB,cAAcnb,KAAKhK,MAAMwiC,OAIxC,SACE,IAAIE,EAAS14B,KAAKhK,MAAMulB,QAAQlhB,WAAW2F,KAAKhK,MAAMwiC,OACtD,OAAoBhd,EAAO8F,QAAQvvB,cAAcypB,EAAOmd,SAAU,KAAmBnd,EAAO8F,QAAQvvB,cAAcsmC,EAAS/W,QAAS,CAClIve,GAAI/C,KAAKhK,MAAMwiC,MACf,gBAAiB,QAChBx4B,KAAKhK,MAAMoX,SAAuBoO,EAAO8F,QAAQvvB,cAAc,OAAQ,CACxE0F,UAAWihC,EAAS,WAAa,GACjCtyB,QAASpG,KAAKqiB,cACC7G,EAAO8F,QAAQvvB,cAAc,KAAM,CAClD0F,UAAWihC,EAAS,WAAa,GACjC,cAAe,OACf,aAAc,WACb14B,KAAKhK,MAAMiK,YAKlBtP,EAAQ2nC,WAAaA,EAQrB,IAAI/Z,GAAW,EAAI0D,EAAYhe,SANPpE,GAASA,EAAM0b,QAEZzX,IAAY,EAAIge,EAAO/d,oBAAoB,CACpEoX,cAAe+G,EAAS/G,eACvBrX,GAEY,CAA8Dw0B,GAG7E3nC,EAAQ2wB,QAAU/C,G,qBCpGlB3tB,EAAOD,QAAU,IAA0B,qC,kCCA3C,oEAAO,IAAMioC,EAAU,CACrBC,WAAY,CACVC,QAAS,CAAC,CAAC,EAAG,IACdC,OAAQ,CAAC,CAAC,EAAG,IACbC,OAAQ,CAAC,CAAC,EAAG,KAEfC,YAAa,CACXH,QAAS,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,MACtCC,OAAQ,CAAC,CAAC,IAAK,KACfC,OAAQ,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,MAE5BE,wBAAyB,CACvBJ,QAAS,GACTC,OAAQ,GACRC,OAAQ,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,OAEnDG,eAAgB,CACdL,QAAS,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,KAC3BC,OAAQ,CAAC,CAAC,IAAK,KACfC,OAAQ,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,MAE5BI,qBAAsB,CACpBN,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,MAEjBK,IAAK,CACHP,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,OAE7BM,OAAQ,CACNR,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,OAEjBO,MAAO,CACLT,QAAS,CAAC,CAAC,EAAG,GAAI,CAAC,IAAK,MACxBC,OAAQ,CAAC,CAAC,EAAG,GAAI,CAAC,IAAK,MACvBC,OAAQ,CAAC,CAAC,EAAG,GAAI,CAAC,IAAK,KAAM,CAAC,IAAK,OAErCQ,aAAc,CACZV,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,OAEjBS,WAAY,CACVX,QAAS,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,MAC5BC,OAAQ,GACRC,OAAQ,IAEVU,UAAW,CACTZ,QAAS,CAAC,CAAC,EAAG,IACdC,OAAQ,GACRC,OAAQ,IAEVW,aAAc,CACZb,QAAS,CAAC,CAAC,KAAM,MACjBC,OAAQ,GACRC,OAAQ,IAEVY,cAAe,CACbd,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,GACRC,OAAQ,IAEVa,aAAc,CACZf,QAAS,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MACpDC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MACvCC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,QAI9Bc,EAAW,CACtB,cAAe,CACb,CAAC,CAAC,KAAM,GAAI,CAAC,EAAG,IAChB,CAAC,CAAC,KAAM,GAAI,CAAC,EAAG,IAChB,CAAC,CAAC,IAAM,GAAI,CAAC,EAAG,IAChB,CAAC,CAAC,IAAK,GAAI,CAAC,EAAG,IACf,CAAC,CAAC,IAAK,GAAI,CAAC,EAAG,IACf,CAAC,CAAC,IAAK,GAAI,CAAC,EAAG,IACf,CAAC,CAAC,EAAG,GAAI,KAEX,mBAAoB,CAClB,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAM,KAAM,CAAC,IAAM,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,UACxE,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAM,KAAM,CAAC,IAAM,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,UACxE,CAAC,CAAC,IAAM,GAAI,CAAC,CAAC,IAAM,KAAM,CAAC,IAAM,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,UACxE,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,UAChF,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,UACrE,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,UAC1D,CAAC,CAAC,EAAG,GAAI,KAEXC,YAAa,CACX,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UAC3D,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UAC3D,CAAC,CAAC,IAAM,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,UAClF,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACzG,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACzG,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UAC1G,CAAC,CAAC,EAAG,GAAI,KAEXC,IAAK,CACH,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACrF,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACrF,CAAC,CAAC,IAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACjD,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,EAAG,GAAI,KAEXC,OAAQ,CACN,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACrF,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACrC,CAAC,CAAC,IAAM,GAAI,IACZ,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,EAAG,GAAI,KAEXC,SAAU,CACR,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACjD,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,UACjD,CAAC,CAAC,IAAM,GAAI,CAAC,CAAC,IAAK,KAAM,UACzB,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,IAAK,GAAI,IACX,CAAC,CAAC,EAAG,GAAI,KAEXC,aAAc,CACZ,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OACvD,CAAC,CAAC,KAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OACvD,CAAC,CAAC,IAAM,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OACvD,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OAC1C,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OAC1C,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OAC1C,CAAC,CAAC,EAAG,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,SAI7BvB,O,qBC3IfhoC,EAAOD,QAAU,IAA0B,sC,qBCA3CC,EAAOD,QAAU,IAA0B,sC,qBCA3CC,EAAOD,QAAU,IAA0B,mC,qBCA3CC,EAAOD,QAAU,IAA0B,+C,kCCE3CvB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAGT,IAMgCqS,EAN5BkzB,EAAe,WAAc,SAAShe,EAAiB/pB,EAAQ2D,GAAS,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAM7G,OAAQF,IAAK,CAAE,IAAIma,EAAapT,EAAM/G,GAAIma,EAAW5U,WAAa4U,EAAW5U,aAAc,EAAO4U,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMla,OAAOmF,eAAelC,EAAQ+W,EAAWjU,IAAKiU,IAAiB,OAAO,SAAUa,EAAaW,EAAYC,GAAiJ,OAA9HD,GAAYwR,EAAiBnS,EAAY5a,UAAWub,GAAiBC,GAAauR,EAAiBnS,EAAaY,GAAqBZ,GAA7gB,GAEf6a,EAAS,EAAQ,QAgBrB,IAAIuV,EAAc,SAAUC,GAG1B,SAASD,EAAY5qB,IAbvB,SAAyBzF,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,qCAc5GC,CAAgBnK,KAAMq6B,GAEtB,IAAIE,EAdR,SAAoCtxB,EAAM1Z,GAAQ,IAAK0Z,EAAQ,MAAM,IAAIuxB,eAAe,6DAAgE,OAAOjrC,GAAyB,kBAATA,GAAqC,oBAATA,EAA8B0Z,EAAP1Z,EAclNkrC,CAA2Bz6B,MAAOq6B,EAAYK,WAAatrC,OAAOurC,eAAeN,IAAc9qC,KAAKyQ,KAAMyP,IAGtH,OADA8qB,EAAMK,OAAS,GACRL,EAqDT,OApEF,SAAmBM,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI5wB,UAAU,kEAAoE4wB,GAAeD,EAASxrC,UAAYD,OAAO8F,OAAO4lC,GAAcA,EAAWzrC,UAAW,CAAE+X,YAAa,CAAEvS,MAAOgmC,EAAUrmC,YAAY,EAAO8U,UAAU,EAAMD,cAAc,KAAeyxB,IAAY1rC,OAAO2rC,eAAiB3rC,OAAO2rC,eAAeF,EAAUC,GAAcD,EAASH,UAAYI,GAO/dE,CAAUX,EAAaC,GAavBF,EAAaC,EAAa,CAAC,CACzBllC,IAAK,MACLN,MAAOomC,eAAmB9lC,EAAKN,EAAOqmC,GAMpC,OALKA,IACHA,EAAMl7B,KAAKm7B,MAEbn7B,KAAK46B,OAAOzlC,GAAO,CAAEN,MAAOA,EAAOwqB,SAAS,IAAIpoB,MAAOihC,UAAYgD,GACnEl7B,KAAKo7B,QACEpqC,QAAQC,QAAQ4D,KAIxB,CACDM,IAAK,QACLN,MAAOomC,iBACL,IAAII,EAASr7B,KAETsf,GAAM,IAAIroB,MAAOihC,UACjBnnC,EAAW3B,OAAOwsB,KAAK5b,KAAK46B,QAAQj/B,KAAI,SAAUxG,GACpD,GAAImqB,EAAM+b,EAAOT,OAAOzlC,GAAKkqB,QAC3B,OAAOgc,EAAOC,OAAOnmC,MAGzB,OAAOnE,QAAQC,QAAQF,KAIxB,CACDoE,IAAK,SACLN,MAAOomC,eAAuB9lC,GAE5B,cADO6K,KAAK46B,OAAOzlC,GACZnE,QAAQC,SAAQ,KAIxB,CACDkE,IAAK,MACLN,MAAOomC,eAAmB9lC,GACxB6K,KAAKo7B,QACL,IAAIvmC,EAAQmL,KAAK46B,OAAOzlC,GACxB,OAAIN,EACK7D,QAAQC,QAAQ4D,EAAMA,OAGxB7D,QAAQC,SAAQ,OAIpBopC,EA9DS,GAZcnzB,EAFK4d,IAEgB5d,EAAIlS,WAAakS,EAAM,CAAEoa,QAASpa,IA2E7Eoa,SAEV3wB,EAAQ2wB,QAAU+Y,G,kCCzFlB,4BAmDMkB,EAAiB,CACrBC,QAjDqBzlC,IAAOuI,KAAI,6EAAXvI,CAAW,0SAUV,SAAAC,GAAK,OAAIwP,IAAGrE,MAAMnL,EAAMylC,iBAMnC,SAAAzlC,GAAK,OAAIwP,IAAGrE,MAAMnL,EAAM0lC,eAkCnCC,SA1BsB5lC,IAAOuI,KAAI,8EAAXvI,CAAW,oTAUX,SAAAC,GAAK,OAAIwP,IAAGrE,MAAMnL,EAAMylC,iBAMnC,SAAAzlC,GAAK,OAAIwP,IAAGrE,MAAMnL,EAAM0lC,gBAatBH,O,uBCxDf3qC,EAAOD,QAAU,IAA0B,sC,kCCE3CvB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAGT,IAAIulC,EAAe,WAAc,SAAShe,EAAiB/pB,EAAQ2D,GAAS,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAM7G,OAAQF,IAAK,CAAE,IAAIma,EAAapT,EAAM/G,GAAIma,EAAW5U,WAAa4U,EAAW5U,aAAc,EAAO4U,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMla,OAAOmF,eAAelC,EAAQ+W,EAAWjU,IAAKiU,IAAiB,OAAO,SAAUa,EAAaW,EAAYC,GAAiJ,OAA9HD,GAAYwR,EAAiBnS,EAAY5a,UAAWub,GAAiBC,GAAauR,EAAiBnS,EAAaY,GAAqBZ,GAA7gB,GASnB,IAAI7F,EAAQ,WACV,SAASA,EAAMqL,IARjB,SAAyBzF,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,qCAS5GC,CAAgBnK,KAAMoE,GAEtBpE,KAAKm7B,KAAO,IACR1rB,GACEA,EAAQyrB,MACVl7B,KAAKk7B,IAAMzrB,EAAQyrB,KA4BzB,OArBAd,EAAah2B,EAAO,CAAC,CACnBjP,IAAK,MACLN,MAAOomC,eAAmB9lC,EAAKN,EAAOqmC,GACpC,OAAOlqC,QAAQC,QAAQ4D,KAIxB,CACDM,IAAK,SACLN,MAAOomC,eAAuB9lC,GAC5B,OAAO,IAIR,CACDA,IAAK,MACLN,MAAOomC,eAAmB9lC,GACxB,OAAO,MAIJiP,EAnCG,GAsCZzT,EAAQ2wB,QAAUld,G,4CCrDlBxT,EAAOD,QAAU,IAA0B,4C,qBCA3CC,EAAOD,QAAU,IAA0B,mC,8DCErCirC,EAAS,2BACVC,IAAaD,QAAM,IACtBE,MAAO,UACPC,WAAY,0BACZC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAS,UACTC,IAAK,UACLC,SAAU,wBACVC,WAAY,UACZC,KAAM,UACNC,UAAW,0BACXC,OAAQ,UACRC,QAAS,UACT/Y,KAAM,UACNgZ,OAAQ,UACRC,WAAY,UACZC,IAAK,UACLC,QAAS,UACTC,eAAgB,UAChBC,aAAc,UACdC,OAAQ,UACRC,YAAa,yBACbC,MAAO,YAGHC,EAAc,CAClBC,QAAS,MACTC,OAAQ,MACRC,SAAU,MACVC,KAAM,OAGK38B,EAAQ,2BAChBg7B,KAAY,IACf4B,aAAc,eACTC,KAELC,OAAQ,2BACH9B,IAAa8B,QAAM,IACtB1oB,SAAU,iBACV2oB,MAAO,aAETR,cACAxB,SACAiC,MAAO,CACLntB,GAAI,MACJotB,EAAG,GAAF,OAAK,EAAI,GAAE,OACZC,EAAG,GAAF,OAAK,EAAI,GAAE,OACZC,EAAG,GAAF,OAAK,GAAM,OACZC,GAAI,GAAF,OAAK,KAAO,OACdC,GAAI,GAAF,OAAK,GAAK,GAAE,OACdC,GAAI,GAAF,OAAK,KAAO,OACdC,GAAI,GAAF,OAAK,MAAO,OACdC,GAAI,GAAF,OAAK,MAAO,OACdC,GAAI,GAAF,OAAK,EAAO,QAEhBC,QAAS,2BACJ1C,IAAa0C,SAAO,IACvB5mC,GAAI,EACJ6mC,KAAM,EACNzF,OAAQ,IACR0F,GAAI,KACJ7mC,GAAI,KACJoa,GAAI,KACJja,KAAM,KACNC,QAAS,OAEX0mC,MAAO,CACLvhC,GAAI,CACFyT,SAAU,CACRhZ,GAAI,GAAF,OAAK,KAAO,OACdD,GAAI,GAAF,OAAK,MAAO,SAGlBivB,GAAI,CACFhW,SAAU,CACRhZ,GAAI,GAAF,OAAK,KAAO,OACdD,GAAI,GAAF,OAAK,MAAO,SAGlBgnC,GAAI,CACF/tB,SAAU,GAAF,OAAK,MAAO,QAEtBguB,GAAI,CACFhuB,SAAU,GAAF,OAAK,MAAO,QAEtBiuB,GAAI,CACFjuB,SAAU,GAAF,OAAK,GAAK,GAAE,QAEtBkuB,GAAI,CACFluB,SAAU,GAAF,OAAK,EAAO,QAEtBmuB,QAAS,CACPnuB,SAAU,GAAF,OAAK,MAAO,QAEtBouB,OAAQ,CACNpuB,SAAU,GAAF,OAAK,KAAO,QAEtBquB,MAAO,CACLruB,SAAU,GAAF,OAAK,GAAK,GAAE,QAEtB0sB,OAAQ,CACN1sB,SAAU,GAAF,OAAK,EAAO,QAEtBsuB,MAAO,CACLtuB,SAAU,GAAF,OAAK,KAAO,QAEtBuuB,OAAQ,CACNvuB,SAAU,GAAF,OAAK,IAAO,QAEtBwuB,QAAS,CACPxuB,SAAU,GAAF,OAAK,KAAO,QAEtByuB,SAAU,CACRzuB,SAAU,GAAF,OAAK,GAAM,QAErB+S,KAAM,CACJ/S,SAAU,GAAF,OAAK,IAAO,OACpBzP,MAAOy6B,EAAOjY,MAEhBgZ,OAAQ,CACN/rB,SAAU,GAAF,OAAK,KAAO,OACpBzP,MAAOy6B,EAAOgB,YAEhB1hC,OAAQ,CACN0V,SAAU,GAAF,OAAK,KAAO,QAEtB0uB,SAAU,CACR1uB,SAAU,GAAF,OAAK,KAAO,OACpBtT,WAAY8/B,EAAYG,UAE1B,YAAa,CACX3sB,SAAU,GAAF,OAAK,EAAO,OACpBzP,MAAO,yBACP7D,WAAY8/B,EAAYG,SACxB3rB,WAAY,IAEd,gBAAiB,CACfhB,SAAU,GAAF,OAAK,KAAO,OACpBtT,WAAY8/B,EAAYG,SACxB5sB,cAAe,aAEjB4uB,WAAY,CACV3uB,SAAU,GAAF,OAAK,IAAO,OACpBD,cAAe,YACfxP,MAAO,CACLpF,EAAG6/B,EAAOqB,OACVjhC,MAAO4/B,EAAOqB,SAGlBuC,SAAU,CACR5uB,SAAU,GAAF,OAAK,KAAO,OACpBzP,MAAO,QACP7D,WAAY8/B,EAAYG,SACxB5sB,cAAe,YACf8uB,WAAY,2BAEd,aAAc,CACZ7uB,SAAU,GAAF,OAAK,KAAO,OACpBzP,MAAO,CACLpF,EAAG6/B,EAAOE,MACV9/B,MAAO4/B,EAAOa,SAGlB,iBAAkB,CAChB7rB,SAAU,GAAF,OAAK,IAAO,OACpBD,cAAe,YACfxP,MAAOy6B,EAAOE,MACdhrB,QAAS,CACP/U,EAAG,EACHC,MAAO,KAGX,cAAe,CACb4U,SAAU,GAAF,OAAK,IAAO,OACpBzP,MAAOy6B,EAAOW,KACd5rB,cAAe,aAEjBjf,IAAK,CACHkf,SAAU,GAAF,OAAK,KAAO,OACpBD,cAAe,YACf+uB,gBAAiB,OACjBv+B,MAAO,CACLpF,EAAG6/B,EAAOI,KACVhgC,MAAO4/B,EAAOW,MAEhBzgC,gBAAiB,CACfC,EAAG,UACHC,MAAO,UACP2jC,OAAQ,YAGZC,UAAW,CACThvB,SAAU,GAAF,OAAK,KAAO,OACpBD,cAAe,YACfxP,MAAO,CACLpF,EAAG6/B,EAAOI,KACVhgC,MAAO4/B,EAAOQ,MAGlByD,iBAAkB,CAChBjvB,SAAU,GAAF,OAAK,KAAO,OACpBD,cAAe,YACfxP,MAAO,CACLpF,EAAG6/B,EAAOE,MACV9/B,MAAO4/B,EAAOQ,MAGlB0D,WAAY,CACVlvB,SAAU,GAAF,OAAK,IAAO,OACpBD,cAAe,YACfxP,MAAOy6B,EAAOqB,QAEhB8C,eAAgB,CACdnvB,SAAU,CACRhZ,GAAI,GAAF,OAAK,EAAO,OACdD,GAAI,GAAF,OAAK,IAAO,UAIpBqoC,QAAS,CACPC,SAAU,CACRnkC,gBAAiB,sBACjBJ,OAAQ,KAEV4lB,QAAS,CACPxlB,gBAAiB8/B,EAAOE,MACxBpgC,OAAQ,KAEV0F,QAAS,CACPtF,gBAAiB8/B,EAAOE,MACxBjd,QAAS,KAGbqhB,SAAU,CACR9+B,QAAS,GAGTkgB,QAAS,CACPxlB,gBAAiB8/B,EAAOE,MACxBqE,OAAQ,IAEVznC,MAAO,IAIT0nC,OAAQ,CACNC,YAAa,CACXxlC,SAAU,WACV2Z,OAAQ,UACRlZ,IAAK,MACLH,MAAO,OAETmmB,QAAS,CACPxlB,gBAAiB8/B,EAAOM,OACxBxgC,OAAQ,KAEVwF,MAAO,CACLo/B,WAAY,CACV3oC,GAAI,CACFmf,SAAU,IACVha,SAAU,KAEZ2hC,GAAI,CACFtyB,MAAO,KAETvU,GAAI,CACFuU,MAAO,MAGXo0B,SAAU,CACR5oC,GAAI,CACFyU,OAAQ,KAEVqyB,GAAI,CACFryB,OAAQ,KAEVxU,GAAI,CACFwU,OAAQ,QAKhBo0B,UAAW,CACTC,WAAY,CACVC,OAAQ,CACN5J,OAAQ,CACNh7B,gBAAiB8/B,EAAOM,QAE1B5a,QAAS,CACPxQ,QAAS,SAKjB6vB,KAAM,CACJC,QAAS,CACPh7B,SAAU,CACRgL,SAAU,GAAF,OAAK,KAAO,OACpB6uB,WAAY,oBACZ3jC,gBAAiB8/B,EAAOE,MACxB36B,MAAOy6B,EAAOI,KACdnd,QAAS,WACTlO,cAAe,aAEjBiS,OAAQ,CACNhS,SAAU,GAAF,OAAK,KAAO,OACpB6uB,WAAY,oBACZ3jC,gBAAiB8/B,EAAOM,OACxB/6B,MAAOy6B,EAAOiB,IACdhe,QAAS,WACTlO,cAAe,aAEjB3U,MAAO,CACLmF,MAAOy6B,EAAOI,QAIpB6E,WAAY,CACVhiB,QAAS,GAAF,OAAK,KAAO,OACnBiiB,QAAS,CACPhlC,gBAAiB,QACjBf,OAAQ,QAEVqG,QAAS,CACPwP,SAAU,GAAF,OAAK,KAAO,QAEtBlY,MAAO,CACLmmB,QAAS,YACT1d,MAAOy6B,EAAOI,KACdprB,SAAU,GAAF,OAAK,GAAK,GAAE,OACpBtT,WAAY8/B,EAAYG,SACxBkC,WAAY,0BACZ94B,aAAc,MACdvO,WAAY,SACZC,eAAgB,gBAChB0oC,aAAc,MACdjlC,gBAAiB8/B,EAAOO,UAG5B6E,YAAa,CACXxe,KAAM,IACNC,SAAU,IACVC,QAAS,IACTC,OAAQ,IACRC,OAAQ,OAIG/hB,O,kCCjWf,4CAEe,SAAS4S,EAAkB6M,EAAWC,EAAUC,EAAQC,EAAUzd,EAAWkQ,EAAawN,GACnG1f,I,qBCHNpQ,EAAOD,QAAU,IAA0B,kC,kCCS3C,SAASwY,EAAkB9W,EAAQ2D,GAAS,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAM7G,OAAQF,IAAK,CAAE,IAAIma,EAAapT,EAAM/G,GAAIma,EAAW5U,WAAa4U,EAAW5U,aAAc,EAAO4U,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMla,OAAOmF,eAAelC,EAAQ+W,EAAWjU,IAAKiU,IAP7Sha,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQ6+B,WAoBR,SAAoB1E,GAGdA,EAAW37B,QAC6B,SAAtC27B,EAAWA,EAAW37B,OAAS,KACjC27B,EAAaA,EAAWj1B,MAAM,EAAGi1B,EAAW37B,OAAS,IAIzD,IAAI8xC,EAAqBnW,EAAWj1B,MAAM,GAAGqrC,UAE7CD,EAAmBtL,MAAK,SAAUwL,EAAMC,GACtC,IAAIxlC,EAAQkvB,EAAW37B,OAAS,EAAIiyC,EAEpC,QAAIC,EAAgB52B,KAAK02B,KACTvlC,GACP,MAKX,IACI0lC,EADAz4B,GAAO,EAEXo4B,EAAmBhlB,SAAQ,SAAUqR,EAAW8T,GAC9C,IAAIxlC,EAAQkvB,EAAW37B,OAAS,EAAIiyC,EAEhCv4B,EACE,YAAY4B,KAAK6iB,KACnBzkB,GAAO,GAEA,UAAU4B,KAAK6iB,GACpBxC,EAAW37B,OAAS,IAAMiyC,EAAe,IAC3CtW,EAAWlvB,GAAS0xB,EAAUriB,QAAQ,YAAa,YAE5C,cAAcR,KAAK6iB,IACxBxC,EAAW37B,OAAS,IAAMiyC,EAAe,IAC3CtW,EAAWlvB,GAAS0xB,EAAUriB,QAAQ,SAAU,YAIhD,4BAAuBR,KAAK6iB,KAC9BxC,EAAWlvB,GAAS0xB,EAAUriB,QAAQ,4BAAwB,IAC9Dq2B,EAAW1lC,MAIX0lC,GACFxW,EAAWz6B,OAAOixC,EAAW,EAAG,EAAG,OAGrC,OAAOxW,EAAWnvB,KAAI,SAAU2xB,GAC9B,OAAO,IAAIiU,EAAuBjU,MACjCnzB,QAAO,SAAUqnC,GAClB,OAAOA,EAAUrnC,YAChBwB,KAAI,SAAU6lC,GACf,IACE,IAAInU,EAAOmU,EAAUnqC,SAQrB,OANKg2B,GACCmU,EAAUlU,YACZD,EAAO,MAAQmU,EAAUlU,UAAY,QAIlCD,EACP,MAAO96B,GACP,MAAO,MAAQivC,EAAUlU,UAAY,WAEtCz4B,QAAQ2vB,KAAK,OAhFlB,IAAIid,EAAc,GACdC,EAAyB,6BACzBC,EAA8B,sCAC9BC,EAAoB,oBACpBC,EAA4B,wDAC5BC,EAAoC,0FACpCC,EAAiC,2DACjCC,EAAgC,yDAChCC,EAAiC,iFACjCZ,EAAkB,2GAClBa,EAAkB,GAyEtB,SAASC,EAAsBz7B,GAC7B,GAAI,2CAA2C+D,KAAK/D,GAClD,MAAO,MACF,GAAI,eAAe+D,KAAK/D,GAC7B,MAAO,MACF,GAAI,oBAAoB+D,KAAK/D,GAClC,MAAO,gBACF,GAAI,0BAA0B+D,KAAK/D,GACxC,MAAO,oBAGT,IAAIhE,EAAUw/B,EAAgBx7B,EAAMtM,eAEpC,OAAIsI,EACKA,EAAQgJ,cADjB,EAKF,IAAI61B,EAAsC,WACxC,SAASA,EAAuBjU,IA5GlC,SAAyBtjB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,qCA6G5GC,CAAgBnK,KAAMuhC,GAEtBvhC,KAAKmhC,KAAO7T,EACZttB,KAAKmhC,KAAOnhC,KAAKmhC,KAAKr3B,OACtB9J,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,eAAgB,SAC9CjL,KAAKlH,KAAOkH,KAAKmhC,KAAKl2B,QAAQ,gBAAiB,IAAInB,OA9GvD,IAAsBG,EAAaW,EAAYC,EAwZ7C,OAxZoBZ,EAiHPs3B,GAjHoB32B,EAiHI,CAAC,CACpCzV,IAAK,SACLN,MAAO,WACL,QAAI,kBAAkB4V,KAAKzK,KAAKmhC,QAErBM,EAAYla,SAASvnB,KAAKlH,UAE1BgpC,EAAkCr3B,KAAKzK,KAAKmhC,QAG5C,mBAAmB12B,KAAKzK,KAAKmhC,UAE7B,KAAK12B,KAAKzK,KAAKmhC,QAEf,WAAW12B,KAAKzK,KAAKlH,SAErBkH,KAAKlH,KAAK3J,QAAU,GAAK6Q,KAAKlH,KAAK3J,QAAU,OAMzD,CACDgG,IAAK,SACLN,MAAO,WA2BL,GA1BAmL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,wBAAyB,OAEvDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,yBAA0B,yBACxDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,mDAAoD,IAElFjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,6BAA8B,IAE5DjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,2BAA4B,IAE1DjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,YAAa,QAE3CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,kDAAmD,kCAE7EjL,KAAKmhC,KAAK5Z,SAAS,aACrBvnB,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,UAAW,sCACzCjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,YAAa,oBAGzCy2B,EAAuBj3B,KAAKzK,KAAKmhC,MACnCnhC,KAAKoiC,qBAELpiC,KAAKqiC,cAGIriC,KAAKsiC,YAEZtiC,KAAKoe,MAAO,CACd,IAAImkB,EAAQviC,KAAKsiC,YAEjB,MAAO,uBAAwBh3B,OAAOtL,KAAKoe,MAAO,MAAO9S,OAAOi3B,EAAQ,IAAMviC,KAAKmhC,KAAM,QAEzF,OAAOnhC,KAAKmhC,OAGf,CACDhsC,IAAK,YACLN,MAAO,WACL,OAAQmL,KAAKoe,OACX,IAAK,QACH,MAAO,wfAET,IAAK,cACH,MAAO,ufAET,IAAK,WACH,MAAO,klCAET,IAAK,YACH,MAAO,gcAET,IAAK,WACH,MAAO,gNAET,IAAK,UACH,MAAO,0cAET,IAAK,WACH,MAAO,sZAET,IAAK,QACH,MAAO,ggCAET,IAAK,UACH,MAAO,m0BAET,IAAK,YACH,MAAO,mpCAET,IAAK,OACH,MAAO,kYAET,IAAK,OAGL,IAAK,SACH,MAAO,GAET,QACE,OAAO,KAGZ,CACDjpB,IAAK,qBACLN,MAAO,WACLmL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,QAAS,KACvCjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,oCAAqC,MAE/D22B,EAAkBn3B,KAAKzK,KAAKmhC,QAC9BnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ22B,EAAmB,IACjD5hC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,sBAAuB,IACrDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKr3B,QAGxB9J,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,0BAA2B,mBACzDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,uBAAwB,mBAEtDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,yBAA0B,MACxDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,oCAAqC,qBACnEjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,qCAAsC,qBACpEjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,oCAAqC,OACnEjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,2BAA4B,8BAC1DjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,2BAA4B,8BAEtD,+BAA+BR,KAAKzK,KAAKmhC,MAC3CnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,iCAAkC,aACvD,wBAAwBR,KAAKzK,KAAKlH,QAC3CkH,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,eAAgB,IAC9CjL,KAAKoe,MAAQ,SAGfpe,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,aAAc,WAC5CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,qBAAiB,eAC/CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,UAAM,KACpCjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,YAAa,WAC3CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,KAAM,KACpCjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,cAAe,oBAC7CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,kCAAmC,iCACjEjL,KAAKlH,KAAOkH,KAAKmhC,KAAKl2B,QAAQ,gBAAiB,IAAInB,OAE/Cg4B,EAAkCr3B,KAAKzK,KAAKmhC,MAC9CnhC,KAAKoe,MAAQ,cACJyjB,EAA0Bp3B,KAAKzK,KAAKmhC,OAC7CnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,oBAAqB,KAE/C,qBAAqBR,KAAKzK,KAAKmhC,QACjCnhC,KAAKoe,MAAQ,QAGX,OAAO3T,KAAKujB,UAAUwU,YACxBxiC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,wBAAyB,sBAEhD82B,EAA+Bt3B,KAAKzK,KAAKmhC,MAClDnhC,KAAKoe,MAAQ,WACJ4jB,EAA8Bv3B,KAAKzK,KAAKmhC,OACjDnhC,KAAKoe,MAAQ,UAET,gDAAgD3T,KAAKzK,KAAKmhC,QAC5DnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,oCAAqC,6CAE5Dg3B,EAA+Bx3B,KAAKzK,KAAKmhC,MAClDnhC,KAAKoe,MAAQ,WACJujB,EAA4Bl3B,KAAKzK,KAAKmhC,OAC3C,6CAA6C12B,KAAKzK,KAAKmhC,OAAS,0BAA0B12B,KAAKzK,KAAKlH,QACtGkH,KAAKmhC,KAAOnhC,KAAKlH,KAAKmS,QAAQ,iBAAkB,yEAChDjL,KAAKoe,MAAQ,SAGfpe,KAAKoe,MAAQpe,KAAKoe,OAAS,WAClB,eAAe3T,KAAKzK,KAAKlH,QAClCkH,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,0BAA2B,MACzDjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,8BAA+B,MAEzD,YAAYR,KAAKzK,KAAKlH,MACxBkH,KAAKoe,MAAQpe,KAAKoe,OAAS,YAE3Bpe,KAAKoe,MAAQpe,KAAKoe,OAAS,aAIhC,CACDjpB,IAAK,cACLN,MAAO,WACL,GAAkB,gBAAdmL,KAAKlH,KAGP,OAFAkH,KAAKmhC,KAAO,+CACZnhC,KAAKoe,MAAQ,QAIf,GAAkB,QAAdpe,KAAKlH,KAGP,OAFAkH,KAAKoe,MAAQ,YACbpe,KAAKmhC,KAAO,uBAIVS,EAAkBn3B,KAAKzK,KAAKmhC,QAC9BnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ22B,EAAmB,KAGnD,IAAIzyC,EAAS6Q,KAAKmhC,KAAKhyC,OACvB6Q,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,+BAAgC,+BAE1DjL,KAAKmhC,KAAKhyC,SAAWA,IACvB6Q,KAAKoe,MAAQ,SAGfpe,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,uCAAwC,0CACtEjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,0BAA2B,kBAErD,oBAAoBR,KAAKzK,KAAKmhC,QAChCnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,0BAA2B,qDACzDjL,KAAKoe,MAAQ,WAGX,6CAA6C3T,KAAKzK,KAAKmhC,QACzDnhC,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,0BAA2B,+CACzDjL,KAAKoe,MAAQ,WAGf,IAAIiP,EAAOrtB,KAAKmhC,KAAKl2B,QAAQ,4BAA6B,MAG1D,GAAI,SAASR,KAAK4iB,SAAe,GAAI,WAAW5iB,KAAK4iB,GACnDrtB,KAAKoe,MAAQpe,KAAKoe,OAAS,SAC3Bpe,KAAKmhC,KAAO9T,EAAKpiB,QAAQ,WAAY,SAChC,GAAI,QAAQR,KAAK4iB,GACtBrtB,KAAKoe,MAAQpe,KAAKoe,OAAS,OAC3Bpe,KAAKmhC,KAAO9T,EAAKpiB,QAAQ,QAAS,IAE9B,SAASR,KAAKzK,KAAKmhC,QACrBnhC,KAAKyL,UAAY02B,EAAsBniC,KAAKmhC,YAEzC,GAAI,oCAAoC12B,KAAKzK,KAAKlH,MACvDkH,KAAKoe,MAAQpe,KAAKoe,OAAS,OAC3Bpe,KAAKmhC,KAAOnhC,KAAKlH,KAAKmS,QAAQ,UAAW,SACpC,GAAI,OAAOR,KAAKzK,KAAKmhC,MAC1BnhC,KAAKoe,MAAQpe,KAAKoe,OAAS,OAC3Bpe,KAAKmhC,KAAOnhC,KAAKmhC,KAAK72B,UAAU,QAC3B,GAAI,sBAAsBG,KAAKzK,KAAKlH,MAAO,CAChDkH,KAAKoe,MAAQ,UACb,IAAIvqB,EAAOmM,KAAKlH,KAAKwR,UAAU,GAAGR,OAClC9J,KAAKmhC,KAAO,gCAAiC71B,OAAOzX,EAAM,OAAQyX,OAAOzX,EAAM,YACtE,wBAAwB4W,KAAKzK,KAAKlH,OAC3CkH,KAAKoe,MAAQ,UACbpe,KAAKmhC,KAAO,gDAAkD71B,OAAOtL,KAAKlH,KAAM,SACvE,aAAa2R,KAAKzK,KAAKlH,OAChCkH,KAAKoe,MAAQ,WACbpe,KAAKmhC,KAAO,WACH,cAAc12B,KAAKzK,KAAKlH,OACjCkH,KAAKoe,MAAQ,WACbpe,KAAKmhC,KAAO,aACH,wHAAwH12B,KAAKzK,KAAKlH,OAC3IkH,KAAKoe,MAAQ,WACbpe,KAAKmhC,KAAOnhC,KAAKlH,MACR,yBAAyB2R,KAAKzK,KAAKlH,MAC5CkH,KAAKoe,MAAQpe,KAAKoe,OAAS,OAClB,wCAAwC3T,KAAKzK,KAAKlH,OAC3DkH,KAAKoe,MAAQ,OACbpe,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,eAAgB,IAC9CjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,UAAW,IACzCjL,KAAKmhC,KAAOnhC,KAAKmhC,KAAKl2B,QAAQ,yBAA0B,0EAC/C,oBAAoBR,KAAKzK,KAAKlH,OACvCkH,KAAKoe,MAAQ,OACbpe,KAAKmhC,KAAO,+CAAiD71B,OAAOtL,KAAKmhC,KAAM,SACtE,oBAAoB12B,KAAKzK,KAAKlH,OACvCkH,KAAKoe,MAAQ,QACbpe,KAAKyiC,SAAW,mBAAoBn3B,OAAOtL,KAAKlH,KAAM,MAAOwS,OAAOtL,KAAKmhC,KAAM,SAE/EnhC,KAAKyL,UAAY02B,EAAsBniC,KAAKlH,MAG1CkH,KAAKyL,WACPzL,KAAKoe,MAAQ,YACbpe,KAAKmhC,KAAO,aAAc71B,OAAOtL,KAAKyL,UAAW,MAAOH,OAAOtL,KAAKlH,KAAM,SAE1EkH,KAAK0iC,iBAGR,CACDvtC,IAAK,eACLN,MAAO,WACL,IAAIyN,EAAQtC,KAAKmhC,KAAK7+B,MAAM,qCAE5B,GAAIA,EAAO,CACT,IAAIzO,EAAOyO,EAAM,GACjBtC,KAAKoe,MAAQ,UACbpe,KAAKmhC,KAAOnhC,KAAKmhC,KAAK72B,UAAU,EAAGhI,EAAM1G,OAAS,0CAA2C0P,OAAOzX,EAAM,OAAQyX,OAAOzX,EAAM,cAnZzDsV,EAAkBc,EAAY5a,UAAWub,GAAiBC,GAAa1B,EAAkBc,EAAaY,GAwZ3K02B,EAjTiC,I,qBClH1C3wC,EAAOD,QAAU,IAA0B,oC,g1BCoPzBqjC,GAAwB,qBAmIxBC,GAAiB,qBAoEjBC,GAAmB,qBAInBS,GAnbLrD,EAAwB,4BAWxBD,EAAwB,4BAIxBU,EAAwB,4BAE/BnJ,EAA6C,gBAG7CzkB,EAAQC,cAERu+B,EAAe,SAACC,EAAQp4B,GAC5B,IAAMuB,EAASvB,EAASlI,MAAM,gBAC9B,GAAIyJ,EAAQ,CACV,IAI6B,EAJvB82B,EAAO,IAAIC,kBAEXC,EAAY/hC,sCAA6B,cAExB+K,GAAM,IAA7B,IAAK,EAAL,qBAA+B,KAApBi3B,EAAQ,QACXn3B,EAAQsV,KAAKnT,MAAMg1B,EACtB/3B,QAAQ,YAAa,MACrBA,QAAQ,wBAAyB,WACjCA,QAAQ,UAAW,KACnBA,QAAQ,WAAY,MAGvB,IAAIY,EAAMM,OAAmC,IAA1B82B,SAASp3B,EAAMM,SAChCN,EAAMO,QAAqC,IAA3B62B,SAASp3B,EAAMO,QADjC,CAIA,IAAI82B,EAAaD,SAASp3B,EAAMs3B,UAAY,EACxCC,EAAaH,SAASp3B,EAAMw3B,UAAY,EACxCC,EAAeL,SAASp3B,EAAM03B,YAAc,EAC5CC,EAAgBP,SAASp3B,EAAM03B,YAAc,EAC3CrV,EAAa+U,SAASp3B,EAAMqiB,YAC5BC,EAAc8U,SAASp3B,EAAMsiB,aACnC,GAAI,cAAetiB,EAAO,CACxB,IAAM43B,EAAQ53B,EAAM63B,UAAUl3B,MAAM,KACpC02B,EAAav1B,KAAKg2B,OAAOC,WAAWH,EAAM,KAAO,GAAKvV,GACtDkV,EAAaz1B,KAAKg2B,OAAOC,WAAWH,EAAM,KAAO,GAAKtV,GACtDmV,EAAe31B,KAAKg2B,OAAOC,WAAWH,EAAM,KAAO,GAAKvV,GACxDsV,EAAgB71B,KAAKg2B,OAAOC,WAAWH,EAAM,KAAO,GAAKtV,GAI3D,IAFA,IAAM0V,EAAU,GACZC,EAAa,GACR70C,EAAI,EAAGA,EAAI2zC,EAAOzzC,OAAQF,IAAK,CACtC,IAAMkd,EAAQy2B,EAAO3zC,GAAGi/B,WAClB9hB,EAASy2B,EAAKkB,WAhCV,WAgC4B53B,IAAkB,IAARA,EAChD,EAAoD02B,EAAKmB,sBAjC/C,WAkCR73B,EAAOC,EAAQ8hB,EAAYC,EAC3B+U,EAAYE,EAAYE,EAAcE,EACtC,EAAG,GAHGL,EAAO,EAAPA,QAASE,EAAO,EAAPA,QAASjV,EAAS,EAATA,UAAWE,EAAU,EAAVA,WAI/Bh8B,EAAMuwC,EAAKoB,cAAclB,EAAW,GAAI52B,EAAOC,EAAQP,EAAMvZ,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GAC5GwV,IACHA,EAAaxxC,GAEf,IAAM4xC,EAAUrB,EAAKoB,cAAclB,EAAW,GAAI52B,EAAOC,EAAQP,EAAMvZ,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GAC/G6V,EAAQtB,EAAKoB,cAAclB,EAAW,GAAY,EAAR52B,EAAoB,EAATC,EAAYP,EAAMvZ,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GACrH3N,EAAciiB,EAAO3zC,GAAG0xB,YAAciiB,EAAO3zC,GAAG0xB,YAAciiB,EAAO3zC,EAAI,GAAG0xB,YAAc,EAC1FyjB,EAAQzjB,IAAgBiiB,EAAO3zC,GAAG0xB,YACxCkjB,EAAQp0C,KACN,4CAAqC20C,EAAQ,MAAQ,MAAK,mBAAWzjB,EAAW,wBAAgBujB,EAAO,oDAClEE,EAAQ,MAAQ,MAAK,mBAAWzjB,EAAW,wBAAgBwjB,EAAK,aAAW,4CAC3EC,EAAQ,MAAQ,MAAK,mBAAWzjB,EAAW,wBAAgBruB,EAAG,SAGvG,IAAM+xC,EACN,YACER,EAAQrf,KAAK,IAAG,yBACE3Y,EAAK,MAAM,iBAASi4B,EAAU,uBAClD,aACAt5B,EAAWA,EAASS,QAAQ+3B,EAAUqB,KACvC,+BAEH,OAAO75B,GAGF,SAAese,EAAe,kCAepC,sDAfM,WAAgC7mB,GAAU,mFACX,OAA9B9M,EAAM,YAAc8M,EAAU,SACfkC,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IACJnI,IAAIm0B,EAAazzB,GACjBtC,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAAIpP,EAAKmP,EAAS3V,KAAM,QACrC,OACK,SAAA4E,GAEL,MADAkC,QAAQlC,MAAM,iBAAkBq1B,EAAazzB,EAAK,IAAK5B,EAAMK,SACvDL,MACN,4CACL,+BAEc8Q,EAAc,+CAa5B,OAb4B,kCAA7B,WAA+BpC,GAAU,qFACiC,OAAlE9M,EAAM,eAAkD8M,EAAU,SACnDkC,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAGU4M,IAAMnI,IAAIm0B,EAAazzB,GAAI,OAApC,OAARmP,EAAW,EAAH,uBACPH,EAAMI,IAAIpP,EAAKmP,EAAS3V,KAAM,OAAW,QAEqB,MAFrB,0BAEhD8G,QAAQlC,MAAM,iBAAkBq1B,EAAazzB,EAAK,IAAK,KAAMvB,SAAQ,gEAGxE,sBAG4E,SAE9D0wC,EAAgB,+CAa9B,OAb8B,kCAA/B,WAAiC91B,GAAe,mFACD,OAAvCrZ,EAAM,gBAAkBqZ,EAAe,SACxBrK,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IACJnI,IAA6B,qBAAuB+Z,GACpD3b,MAAK,SAAAyR,GAAQ,OAAIH,EAAMI,IAAIpP,EAAKmP,EAAS3V,KAAM,QAAO,OAChD,SAAA4E,GAEL,MADAkC,QAAQlC,MAAM,iBAA2C,qBAAuBib,EAAiB,IAAKjb,EAAMK,SACtGL,MACN,4CACL,sBAED,IAAMgxC,EAAuB,SAAAC,GAC3B,OAAO5nC,IACJskB,KAA8B,oBAAqBsjB,GACnD3xC,MAAK,SAAAlE,GAAI,OAAIA,EAAKA,QAAK,OACjB,SAAA4E,GAAK,OAAIkC,QAAQlC,MAAM,mBAA6C,qBAAsB,IAAKA,EAAMK,aAMhH,SAAS6wC,EAASC,EAAYC,GAC5B,IAAMnT,EAAO,GAOb,OANImT,GAAiBA,EAAcx1C,OAAS,GAC1Cw1C,EAAchpC,KAAI,SAAAjK,GAAG,OAAI8/B,EAAK/hC,KAAKiC,EAAIgV,UAErCg+B,GAAcA,EAAWv1C,OAAS,GACpCu1C,EAAW/oC,KAAI,SAAAjK,GAAG,OAAI8/B,EAAK/hC,KAAKiC,EAAIgV,UAE/B8qB,EACR,SAEcoT,EAAc,+CAyC5B,OAzC4B,kCAA7B,WAA+BC,GAAK,oGAC3B7zC,QAAQiD,IAAI4wC,EAAMlpC,KAAI,SAAAgB,GAC3B,OAAOC,IAAMnI,IAAIqwC,mBAA4BnoC,GAC1C9J,MAAK,SAAAlE,GAAQ,QACNo2C,EAAW,GACjBA,EAASrsC,MAAiB,QAAZ,EAAG/J,EAAKA,YAAI,aAAT,EAAW+J,MAC5BqsC,EAASC,MAAiB,QAAZ,EAAGr2C,EAAKA,YAAI,aAAT,EAAWs2C,cAActpC,KAAI,SAAAupC,GAC5C,IAAMtrC,EAAO,GAcb,OAbAA,EAAKlB,MAAQwsC,EAAKC,eAClBvrC,EAAKwrC,UAAYF,EAAKE,UAClBF,EAAKG,UAAWzrC,EAAKoI,IAAMkjC,EAAKG,SACpCzrC,EAAK0rC,aAAeJ,EAAKI,aACzB1rC,EAAK2rC,iBAAmBL,EAAKK,kBACzBL,EAAKM,gBAAkBN,EAAKO,kBAC9B7rC,EAAK6xB,MAAQ,CACXz5B,KAAMkzC,EAAK/Y,WAAa,QACxB1a,OAAQ,CACNzP,IAAKkjC,EAAKM,gBAAkBN,EAAKO,kBAIhC7rC,KAET,IAAM8rC,EAAW,GAEjB,OADAA,EAAS/oC,GAAQooC,EAASC,MACnBU,KACP,OACK,SAAAnyC,GAEL,OADAkC,QAAQlC,MAAM,wBAAyBA,EAAMK,SACtC,YAGVf,MAAK,SAAC8yC,GAOL,OANuBA,EAAcxrC,QAAO,SAAAP,GAAI,OAAIA,KAChB+lB,QAAO,SAACimB,EAAK1+B,GAC/C,IAAM/R,EAAM/F,OAAOwsB,KAAK1U,GAAK,GAE7B,OADA0+B,EAAIzwC,GAAO+R,EAAI/R,GACRywC,IACN,QAEH,4CACL,+BAEcC,EAAiB,+CAO/B,OAP+B,kCAAhC,WAAkC5jC,GAAU,oGACnCrF,IACJnI,IAAIqxC,mBAA8B7jC,GAAW,OACvC,SAAA1O,GAEL,MADAkC,QAAQlC,MAAM,iBAAkBuyC,mBAA8B7jC,EAAY,IAAK1O,EAAMK,SAC/EL,MACN,4CACL,+BAEcwyC,EAAe,+CAU7B,OAV6B,kCAA9B,WAAgC3kC,GAAO,oGAC9BxE,IACJnI,IAAIm0B,EAAa,YAAcxnB,GAC/BvO,MAAK,SAAAyR,GACJ,OAAOA,EAAS3V,QAChB,OACK,SAAA4E,GAEL,MADAkC,QAAQlC,MAAM,iBAAkBq1B,EAAa,YAAcxnB,EAAS,IAAK7N,EAAMK,SACzEL,MACN,4CACL,sBAED,SAAWyyC,EAAuB,OAAI/jC,EAAU,EAAVA,WAAU,yHAEhC,OAFgC,kBAE1B1S,YAAKu5B,EAAiB7mB,GAAW,OACnD,OADMyC,EAAM,EAAH,cACHC,YAAI,CAAE3S,KArO6B,oCAqOQ4S,QAASF,IAAM,8BAEhE,OAFgE,mCAE1DC,YAAI,CAAE3S,KAtO2B,kCAsOQ4S,QAAS,KAAEhR,UAAU,uDALxB,GASzC,SAAWogC,IAAwB,2EACxC,OADwC,SAClCnvB,YA7O6B,4BA6OKmhC,GAAwB,uCAGlE,SAASC,IACP,IAAIj2C,GAAS,EAUb,OATqC2F,OAAOuwC,eAC1Cl2C,EAAS2F,OAAOuwC,aAAaC,QAAQ,cAElCn2C,IACHA,EAAS2d,KAAKoqB,SAASnhC,SAAS,IAAIkxB,OAAO,EAAG,GACTnyB,OAAOuwC,cAC1CvwC,OAAOuwC,aAAanmB,QAAQ,YAAa/vB,IAGtCA,EAGT,SAAWo2C,EAAgB,OAAInkC,EAAU,EAAVA,WAAU,qJAEzB,OAFyB,kBAEnB1S,YAAKu5B,EAAiB7mB,GAAW,OAIH,GAJ1CyC,EAAM,EAAH,MACH1M,EAAU,IAAIquC,IAAW3hC,IACvB4T,aAAe,IAAMtgB,EAAQsuC,kBAC/B93B,EAAkBxW,EAAQuW,uBAC1BK,EAAgB5W,EAAQuuC,oBACX,CAAF,gBACG,OADH,UACSh3C,YAAKq1C,EAAgBh2B,GAAc,QAArD43B,EAAY,EAAH,KACfxuC,EAAQwuC,UAAYA,EAAS,YAE3Bh4B,EAAiB,CAAF,gBAEO,OAFP,oBAEajf,YAAK+0C,EAAkB91B,GAAgB,QAAnExW,EAAQyuC,YAAc,EAAH,KACnBzuC,EAAQ0uC,oBAAqB,EAAK,mDAElC1uC,EAAQ0uC,oBAAqB,EAAI,QAYnC,GATF1uC,EAAQ2S,gBAAkB3S,EAAQ2S,gBAAgBhP,KAAI,SAAAmxB,GAQpD,OAPAA,EAAejhB,MAAQ,GACvBihB,EAAejhB,MAAMM,MAAQ2gB,EAAeoB,WAC5CpB,EAAejhB,MAAMO,OAAS0gB,EAAeqB,YAC7CrB,EAAejhB,MAAMwiB,KAAOvB,EAAeuB,KAC3CvB,EAAejhB,MAAM43B,MAAQ3W,EAAe2W,MAC5C3W,EAAejhB,MAAM7J,IAAM8qB,EAAe6Z,SAC1C7Z,EAAejhB,MAAMkhB,YAAcD,EAAeC,YAC3CD,KAEgB9rB,QAArBhJ,EAAQyoB,SAAyC,iBAC3B,OAD2B,UACrBlxB,YAAKs2C,EAAmB5jC,GAAW,QAA3D2kC,EAAkB,EAAH,KACrB5uC,EAAQsgB,aAAesuB,EAAgBj4C,KAAKqT,IAAG,QAE3C2iC,EAAgB,GAAE,cACR3sC,EAAQ2sC,eAAiB,IAAE,IAA3C,IAAK,EAAL,qBAAW7zC,EAAC,QACV6zC,EAAc7zC,EAAE6L,MAAQ,CACtBkqC,YAAa/1C,EAAE+1C,YACfpvB,KAAM3mB,EAAE2mB,KACR/Q,MAAO5V,EAAE4V,OAEZ,8BAED,IAAW5V,KADXkH,EAAQ2sC,cAAgB,GACRA,EACd3sC,EAAQ2sC,cAAcl1C,KAAK,CACzBkN,KAAM7L,EACN+1C,YAAalC,EAAc7zC,GAAG+1C,YAC9BpvB,KAAMktB,EAAc7zC,GAAG2mB,KACvB/Q,MAAOi+B,EAAc7zC,GAAG4V,QAIb,GADXogC,EAAiB,GACjBjkC,EAAS,KACT7K,EAAQ4pB,SAAW5pB,EAAQ4pB,QAAQ,IAAM5pB,EAAQ4pB,QAAQ,GAAGmlB,eAAa,iBAExD,OAFwD,oBAElDx3C,YAAK+4B,IAAkBtwB,EAAQ4pB,QAAQ,GAAGjlB,KAAM,EAAG,GAAE,QAA9D,GAAdmqC,EAAiB,EAAH,MACV9uC,EAAQ4pB,QAAQ,GAAGnK,KAAM,CAAF,gBAEhB,OAFgB,UAEVloB,YAAK8U,EAAgBrM,EAAQ4pB,QAAQ,GAAGnK,KAAKxM,QAAQ,WAAY,KAAI,QAApFpI,EAAS,EAAH,6BAEG,OAFH,UAEStT,YAAK8U,EAAgBrM,EAAQ4pB,QAAQ,GAAG/tB,MAAK,QAA5DgP,EAAS,EAAH,gEAGRpN,QAAQlC,MAAM,oCAAqCyE,EAAQ4pB,QAAQ,GAAGjlB,KAAM,IAAK,KAAE/I,SAAQ,QAMxE,OAFnBozC,EAAqB,GAAE,oBAEEz3C,YAAK+4B,IAAkBtwB,EAAQ0K,QAAS,EAAG,GAAE,QAAxEskC,EAAqB,EAAH,wDAElBvxC,QAAQlC,MAAM,wCAAyCyE,EAAQ6uC,YAAa,IAAK,KAAEjzC,SAAQ,QAezE,OAZpBoE,EAAQwS,SAAWm4B,EAAa,CAAC,CAAEzU,WAAY,IAAKvN,YAAa,KAAO,CAAEuN,WAAY,IAAKvN,aAAa,IAAU3oB,EAAQwS,UAC1HxS,EAAQwS,SAAWxS,EAAQwS,SAASS,QAAQ,2BAAsB,cAClEjT,EAAQwS,SAAW,mBAAexS,EAAQwS,SAAW,oBAErDxS,EAAQivC,aAAe,GACnBjvC,EAAQgrB,QAAUhrB,EAAQgrB,OAAO,GAAG6gB,UAChCA,EAAU7rC,EAAQgrB,OAAO,GAAG6gB,QAClC7rC,EAAQivC,aAAe73C,OAAOwsB,KAAKioB,GAASloC,KAAI,SAAAxG,GAC9C,MAAO,CAAE7C,IAAKuxC,EAAQ1uC,GAAK6M,KAAO6hC,EAAQ1uC,GAAK+xC,IAAIllC,IAAKhQ,KAAM6xC,EAAQ1uC,GAAKnD,MAAQ,YAAa0U,MAAOvR,OAE1G,UAEyBk0B,YAAO1lB,GAAa,QAC1B,OADpB3L,EAAQ4I,UAAY,EAAH,eACSyoB,YAAOzlB,GAAa,QAA7B,GAAjB5L,EAAQgL,UAAY,EAAH,KACZhL,EAAQ4I,UAAW,CAAF,gBAEpB,OADA5I,EAAQ4I,UAAYqlC,IAAgB,UAC9BthC,YAAI,CAAE3S,KAAMizB,IAAoBrgB,QAAS5M,EAAQ4I,YAAY,QAErE,OAFqE,UAE/D+D,YAAI,CACR3S,KAAMs/B,EACN1sB,QAAS5M,EACT8uC,eAAgBA,EAAere,SAC/Bue,mBAAoBA,EAAmBve,SACvC5lB,SACArB,KAAMxJ,EAAQsgB,aACdlO,SAAUpS,EAAQoS,SAClBxJ,UAAW5I,EAAQ4I,UACnBoC,UAAWhL,EAAQgL,UACnBwuB,KAAMiT,EAAQzsC,EAAQ0sC,WAAY1sC,EAAQ2sC,iBAC1C,8DAEE,KAAErgC,UAAkC,MAAtB,KAAEA,SAAS2b,OAAc,iBACzC,OADyC,UACnCtb,YAAI,CAAE3S,KAhWqB,8BAgWU4S,QAAS,KAAEhR,UAAU,gCAGhE,OADA6B,QAAQlC,MAAM,6BAA8B0O,EAAY,IAAK,KAAErO,SAAQ,UACjE+Q,YAAI,CAAE3S,KApWiB,0BAoWU4S,QAAS,KAAEhR,UAAU,gFA5GzB,GAiHlC,SAAWqgC,IAAiB,2EACjC,OADiC,SAC3BpvB,YA7WqB,oBA6WKuhC,GAAiB,uCAGnD,SAAWe,EAAqB,OAAIviC,EAAO,EAAPA,QAAO,iIAE3B,OAF2B,kBAErBrV,YAAKw2C,EAAiBnhC,GAAQ,OAKmF,GAL7HF,EAAM,EAAH,KACH1M,EAAU,IAAIquC,IAAW3hC,GAC3BoiC,EAAiB,GACjBE,EAAqB,GACrBnkC,EAAS,GACb7K,EAAQwS,SAAWm4B,EAAa,CAAC,CAAEzU,WAAY,IAAKvN,YAAa,KAAO,CAAEuN,WAAY,IAAKvN,aAAa,IAAU3oB,EAAQwS,YACtHxS,EAAQ4pB,SAAW5pB,EAAQ4pB,QAAQ,IAAM5pB,EAAQ4pB,QAAQ,GAAGmlB,eAAa,iBAExD,OAFwD,oBAElDx3C,YAAK+4B,IAAkBtwB,EAAQ4pB,QAAQ,GAAGjlB,KAAM,EAAG,GAAE,QAA9D,GAAdmqC,EAAiB,EAAH,MACV9uC,EAAQ4pB,QAAQ,GAAGnK,KAAM,CAAF,gBAChB,OADgB,UACVloB,YAAK8U,EAAgBrM,EAAQ4pB,QAAQ,GAAGnK,MAAK,QAA5D5U,EAAS,EAAH,6BAEG,OAFH,UAEStT,YAAK8U,EAAgBrM,EAAQ4pB,QAAQ,GAAG/tB,MAAK,QAA5DgP,EAAS,EAAH,gEAGRpN,QAAQlC,MAAM,iCAAkC,KAAEK,SAAQ,QAIvC,OAJuC,oBAIjCrE,YAAK+4B,IAAkBtwB,EAAQ0K,QAAS,EAAG,GAAE,QAAxEskC,EAAqB,EAAH,wDAElBvxC,QAAQlC,MAAM,wCAAyCyE,EAAQ6uC,YAAa,IAAK,KAAEjzC,SAAQ,QAE7F,OAF6F,UAEvF+Q,YAAI,CACR3S,KAAMs/B,EACN1sB,QAAS5M,EACT8uC,eAAgBA,EAAere,SAC/Bue,mBAAoBA,EAAmBve,SACvC5lB,SACArB,KAAMxJ,EAAQsgB,aACdlO,SAAUpS,EAAQoS,SAClBxJ,UAAW5I,EAAQ4I,UACnBoC,UAAWhL,EAAQgL,UACnBwuB,KAAMiT,EAAQzsC,EAAQ0sC,WAAY1sC,EAAQ2sC,iBAC1C,gCAGF,OAHE,0BAEFlvC,QAAQlC,MAAM,8BAA+B,KAAEK,SAAQ,UACjD+Q,YAAI,CAAE3S,KApZmB,0BAoZQ4S,QAAS,KAAEhR,UAAU,wEAvCrB,GA2C3C,SAAWwzC,EAAqB,OAAIxiC,EAAO,EAAPA,QAAO,2HAG3B,OAFR4/B,EAAW5/B,EAAO,kBAEJrV,YAAKg1C,EAAsBC,GAAS,OAA7C,KAAH9/B,EAAM,EAAH,MACD2iC,QAAS,CAAF,gBACb,OADa,SACP1iC,YAAI,CAAE3S,KAtZwB,mCAsZW,+BAE/C,OAF+C,UAEzC2S,YAAI,CAAE3S,KAvZsB,+BAuZU4S,QAASF,EAAI4iC,SAAS,gCAOpE,OAPoE,0BAMpE7xC,QAAQlC,MAAM,wCAAyC,KAAEK,SAAQ,UAC3D+Q,YAAI,CACR3S,KA/ZkC,+BAgalC4S,QAAS,CAAEhR,QAAS,KAAEA,WACtB,wDAjBqC,GAqBpC,SAAWsgC,IAAmB,2EACnC,OADmC,SAC7BrvB,YA5a2B,0BA4aKsiC,GAAsB,uCAGvD,SAAWxS,IAAsB,2EACtC,OADsC,SAChCpL,YA5a0B,yBA4aI6d,GAAsB,uCAIrD,IAAMzjC,EAAe,SAAA9D,GAAK,OAAIA,EAAM8S,KAAK/R,WACnCgD,EAAe,SAAA/D,GAAK,OAAIA,EAAM8S,KAAK3P,WAGnCukC,EAAqB,WAAH,MAAU,CAAEv1C,KA3bD,mCA4b7Bw1C,EAAe,SAAAvlC,GAAU,MAAK,CAAEjQ,KA9bhB,oBA8bqC+S,YAAY,EAAMC,YAAY,EAAO/C,eAC1FwlC,EAAoB,SAAA94C,GAAI,MAAK,CAAEqD,KA1bT,0BA0boC4S,QAASjW,IAEnE+4C,EAAoB,SAAA/4C,GAAI,MAAK,CAAEqD,KAxbV,yBAwboC4S,QAASjW,IAClEg5C,GAAsB,WAAH,MAAU,CAAE31C,KA3bP,8BA4bxB41C,GAAoB,SAAAhjC,GAAO,MAAK,CAAE5S,KAAMq/B,EAAuBzsB,YAC/DwS,GAAiB,WAAH,MAAU,CAAEplB,KAtbP,6BAubnB61C,GAAyB,SAACl5C,GAAI,MAAM,CAAEqD,KAAM+/B,EAAuBntB,QAASjW,IAEzF,SAASm5C,GAAkB9vC,GAEzB,IAAM+vC,EAAiB5mB,KAAKnT,MAAMmT,KAAKC,UAAUppB,IAIjD,OAHA+vC,EAAeh8B,OAAS,CAAC/T,EAAQ6T,OACjCk8B,EAAc,SAAY/vC,EAAQwS,gBAC3Bu9B,EAAev9B,SACfu9B,EAGF,IAAM9iC,GAAe,CAC1BE,UAAW,EACXyL,SAAU,GACV1L,eAAe,EACfH,YAAY,EACZC,YAAY,EACZgjC,cAAc,EACdloC,UAAU,EACVsF,OAAO,EACP4kB,gBAAgB,EAChB5f,SAAU,KACVqZ,UAAW,KACXlwB,MAAO,KACPyE,QAAS,KACTiwC,gBAAgB,EAChBnB,eAAgB,GAChBE,mBAAoB,GACpBxV,KAAM,GACN0W,oBAAqB,MAGV7iC,GAAU,WAGlB,IAFHxF,EAAQ,UAAH,6CAAGoF,GAAY,yCAClBjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAS/B,EAAM,EAANA,OAAQikC,EAAc,EAAdA,eAAgBtlC,EAAI,EAAJA,KAAM4I,EAAQ,EAARA,SAAgB48B,GAAF,EAAJrjB,KAAwB,EAAlBqjB,oBAAoBxV,EAAI,EAAJA,KAEnF,OAAQx/B,GACN,IAre+B,0BAse7B,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BooC,gBAAgB,IAEpB,IAxewB,mBAweL,MACXE,GAAiBvjC,EAAQwjC,WAC/B,OAAiB,QAAb,EAAAvoC,EAAM7H,eAAO,aAAb,EAAeiK,cAAe2C,EAAQ3C,WACjCpC,EAEFzQ,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfH,YAAaojC,EACbnjC,WAAYmjC,EACZH,cAAc,EACdloC,UAAU,EACVsF,OAAO,EACP4kB,gBAAgB,EAChB5f,SAAU,KACVqZ,UAAW,KACXlwB,MAAO,KACPyE,QAASmwC,EAAgBvjC,EAAUkjC,GAAiBljC,GACpD/B,OAAQslC,OAAgBr0C,EAAY8Q,EAAQ/B,OAC5CwlC,WAAW,EACXJ,gBAAgB,IAGpB,IA7fiC,4BA8f/B,OAAO74C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BmoC,cAAc,IAElB,IAtgBsC,iCAugBpC,OAAO54C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BmqB,gBAAgB,IAEpB,IA/gBiC,4BAihB/B,OAAOnqB,EACT,IA/gByB,oBAghBvB,OAAOzQ,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfH,YAAY,EACZC,YAAY,EACZI,OAAO,EACPtF,UAAU,EACVkqB,gBAAgB,EAChBvG,UAAW,KACXlwB,MAAO,OAEX,IA3hBuC,kCA6hBrC,OAAOsM,EACT,IAzhBmC,8BA0hBjC,OAAOzQ,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACPJ,YAAY,EACZD,YAAY,EACZG,eAAe,EACf8kB,gBAAgB,EAChBvG,UAAW,OAEf,IApiB+B,0BAqiB7B,OAAOr0B,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACP7R,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,EACf8kB,gBAAgB,EAChBvG,UAAW,OAEf,IApjByC,oCAsjBvC,OAAO5jB,EACT,KAAKyxB,EACH,OAAOliC,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BsF,UAAW,IAAIlO,KACf+N,YAAY,EACZgjC,cAAc,EACdK,WAAW,EACXtjC,YAAY,EACZG,eAAe,EACflN,QAAS4M,EACTkiC,iBACAE,qBACAhd,gBAAgB,EAChB5f,WACAqZ,UAAWjiB,EACXqB,SACA2uB,OACA1xB,UAAU,EACVsF,OAAO,EACP7R,MAAO,OAEX,KAAKw+B,EACH,OAAO3iC,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqoC,oBAAqBtjC,IAEzB,IApkB8B,yBAqkB5B,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B6mB,cAAc,EACdC,cAAc,EACd2hB,gBAAgB,EAChB9D,SAAU5/B,IAEd,IA1kBsC,iCA2kBpC,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B6mB,cAAc,EACdC,cAAc,EACd2hB,gBAAgB,IAEpB,IA/kBoC,+BAglBlC,OAAOl5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B6mB,cAAc,EACdC,cAAc,EACd2hB,gBAAgB,EAChB10C,QAASgR,IAEb,IAnlB4B,2BAolB1B,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B+Q,SAA6B,KAAnB/Q,EAAM+Q,SAAkB,GAAK/Q,EAAM+Q,SAAW,IAE5D,QACE,OAAO/Q,K,sNC/lBP0oC,EAAoB,SAACvyC,GACzB,IAAM8tB,EAAcrjB,cACpB,EAAyBtE,YAAU,cAAe,KAA3CqsC,EAA+C,iBAAjC,GACrB,EAAsCrsC,YAAU,eAAe,GAAM,mBAA9DssC,EAAW,KAAEC,EAAc,KAClC,EAAoCpvC,oBAAS,GAAtCqvC,EAAY,KAAEC,EAAW,KAChC,EAAgDtvC,oBAAS,GAAlDuvC,EAAgB,KAAEC,EAAmB,KACtCtS,EAAehwB,kBAAO,GAGtBuiC,EAAeC,cACrBvvC,qBAAU,WACJsvC,GAAgBA,EAAaE,aAC/BF,EAAaE,YAAYC,kBACtBr2C,MAAK,SAAAs2C,GACJ3S,EAAa3vB,QAAUsiC,EAErBP,KADGO,GAAOX,GAAkC,SAAhBC,OAK9B,OACK,SAACl2C,GACNkD,QAAQlC,MAAM,mCAAD,OAAoChB,SAGtD,CAACw2C,IAEJ,IAAMK,EAAclpC,IAAM+T,aAAY,WACpCy0B,GAAe,EAAM,CAACtpB,KAAM,IAC5BwpB,GAAY,MAERS,EAAcnpC,IAAM+T,aAAY,WACpCy0B,GAAe,EAAM,CAACtpB,KAAM,IAC5BwpB,GAAY,IACPpS,EAAa3vB,SAAWkiC,GAAgBA,EAAaE,aACxDF,EAAaE,YAAY1iB,UAAU,CACjC+iB,iBAAiB,EACjBC,qBAAsBC,YAAmBxoC,6FAExCnO,MAAK,SAAUs2C,GAGd,OAFA1zC,QAAQ+O,IAAI,2BACZgyB,EAAa3vB,QAAUsiC,EAChBvsC,IAAMskB,KAAKlgB,+BAA+CmgB,KAAKC,UAAU,CAAEoV,aAAc2S,EAAK1oB,SAAUzf,QAAiC,CAC9Ikf,QAAS,CACP,eAAgB,yBAIrBrtB,MAAK,SAAA6R,GACJkkC,GAAY,MACZ,OACK,SAAUr2C,GACfkD,QAAQ+O,IAAI,iCAAkCjS,GAC9Cu2C,GAAoB,GACpBtS,EAAa3vB,SAAU,QAK/B,OAAKid,GAAgC,SAAhB2kB,GAA+C,MAAnBD,EAG7CG,IAAiBE,EACZ,KAGP,oBACGA,GACC,EAAC,IAAK,CAACxiC,SAAO,GACZ,EAAC,IAAE7O,IAAG,CAACW,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,IACzD,EAAC,IAAEre,IAAG,KACJ,EAAC,IAAEc,IAAG,CAAChG,IAAKm3C,IAAW93B,IAAI,MAAM9Y,EAAG,MAEtC,EAAC,IAAErB,IAAG,CAAC2J,MAAM,QACX,EAAC,IAAE9P,EAAC,CAACyH,KAAK,SAASwE,WAAW,UAAQ,mBACtC,EAAC,IAAEjM,EAAC,CAAC2L,GAAI,GAAE,sDACX,EAAC,IAAE3L,EAAC,CAAC6G,GAAI,IAAG,oFACZ,EAAC,IAAEV,IAAG,CAACW,QAAQ,OAAOE,eAAe,YACnC,EAAC,IAAU,CAAC+N,QAAS,kBAAM0iC,GAAoB,IAAQ/lC,GAAI,QAASnC,UAAW5K,EAAM4K,UAAWoC,UAAWhN,EAAMgN,UAAWN,QAAS1M,EAAM0M,QAAS+O,OAvE9I,eAuEmK,EAAC,IAAEpgB,EAAC,CAAC2L,GAAI,EAAGpE,GAAI,IAAG,SAC5L,EAAC,IAAEsC,OAAM,CAACkL,QAAS,kBAAM0iC,GAAoB,IAAQrtC,GAAG,UAAU0F,MAAM,QAAQ9P,EAAE,WAAWsV,aAAc,EAAGiT,GAAI,GAAE,WAM5HivB,GACA,EAAC,IAAK,CAACxiC,SAAO,GACZ,EAAC,IAAE7O,IAAG,CAACW,QAAQ,OAAOiF,oBAAoB,YAAYyY,IAAK,IACzD,EAAC,IAAEre,IAAG,KACJ,EAAC,IAAEc,IAAG,CAAChG,IAAKm3C,IAAW93B,IAAI,MAAM9Y,EAAG,MAEtC,EAAC,IAAErB,IAAG,CAAC2J,MAAM,QACX,EAAC,IAAE9P,EAAC,CAAC2L,GAAI,GAAE,8DACX,EAAC,IAAE3L,EAAC,CAAC6G,GAAI,IAAG,uCACZ,EAAC,IAAEV,IAAG,CAACW,QAAQ,OAAOE,eAAe,YACnC,EAAC,IAAE6C,OAAM,CAACkL,QAASgjC,EAAa3tC,GAAG,UAAU0F,MAAM,OAAO9P,EAAE,WAAWsV,aAAc,GAAE,SACvF,EAAC,IAAEzL,OAAM,CAACkL,QAASijC,EAAa5tC,GAAG,UAAU0F,MAAM,QAAQ9P,EAAE,WAAWsV,aAAc,EAAGiT,GAAI,GAAE,cApCpG,MA8CI8vB,IAjHI,WACjB,OAAK1qB,KAAe,gBAAiBrpB,OAG9B,EAAC4yC,EAAiB,MAFhB,O,kCCXXn5C,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQg5C,WAAaA,EACrBh5C,EAAiB,aAAI,EACrBA,EAAQ8P,cAAgBA,EAExB,IAIgCyG,EAJ5BsU,GAI4BtU,EAJI,EAAQ,UAISA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAFrF0iC,EAAY,CAAC,YAIjB,SAASC,EAAyBp4B,EAAQq4B,GAAY,GAAc,MAAVr4B,EAAgB,MAAO,GAAI,IAAkEtc,EAAKlG,EAAnEoD,EAEzF,SAAuCof,EAAQq4B,GAAY,GAAc,MAAVr4B,EAAgB,MAAO,GAAI,IAA2Dtc,EAAKlG,EAA5DoD,EAAS,GAAQ03C,EAAa36C,OAAOwsB,KAAKnK,GAAqB,IAAKxiB,EAAI,EAAGA,EAAI86C,EAAW56C,OAAQF,IAAOkG,EAAM40C,EAAW96C,GAAQ66C,EAASl9B,QAAQzX,IAAQ,IAAa9C,EAAO8C,GAAOsc,EAAOtc,IAAQ,OAAO9C,EAFxM23C,CAA8Bv4B,EAAQq4B,GAAuB,GAAI16C,OAAOysB,sBAAuB,CAAE,IAAIouB,EAAmB76C,OAAOysB,sBAAsBpK,GAAS,IAAKxiB,EAAI,EAAGA,EAAIg7C,EAAiB96C,OAAQF,IAAOkG,EAAM80C,EAAiBh7C,GAAQ66C,EAASl9B,QAAQzX,IAAQ,GAAkB/F,OAAOC,UAAU66C,qBAAqB36C,KAAKkiB,EAAQtc,KAAgB9C,EAAO8C,GAAOsc,EAAOtc,IAAU,OAAO9C,EAIne,SAASgqB,EAAeC,EAAKrtB,GAAK,OAUlC,SAAyBqtB,GAAO,GAAIpP,MAAMC,QAAQmP,GAAM,OAAOA,EAVtBC,CAAgBD,IAQzD,SAA+BA,EAAKrtB,GAAK,IAAIutB,EAAY,MAAPF,EAAc,KAAyB,qBAAX3nB,QAA0B2nB,EAAI3nB,OAAOwS,WAAamV,EAAI,cAAe,GAAU,MAANE,EAAY,OAAQ,IAAkDC,EAAIC,EAAlDC,EAAO,GAAQC,GAAK,EAAUC,GAAK,EAAmB,IAAM,IAAKL,EAAKA,EAAGjtB,KAAK+sB,KAAQM,GAAMH,EAAKD,EAAGpN,QAAQtG,QAAoB6T,EAAKltB,KAAKgtB,EAAG5nB,QAAY5F,GAAK0tB,EAAKxtB,SAAWF,GAA3D2tB,GAAK,IAAoE,MAAOrqB,GAAOsqB,GAAK,EAAMH,EAAKnqB,EAAO,QAAU,IAAWqqB,GAAsB,MAAhBJ,EAAW,QAAWA,EAAW,SAAO,QAAU,GAAIK,EAAI,MAAMH,GAAQ,OAAOC,EARzbG,CAAsBR,EAAKrtB,IAI5F,SAAqCqF,EAAGyoB,GAAU,IAAKzoB,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAO0oB,EAAkB1oB,EAAGyoB,GAAS,IAAI1nB,EAAIjG,OAAOC,UAAUuH,SAASrH,KAAK+E,GAAGuB,MAAM,GAAI,GAAc,WAANR,GAAkBf,EAAE8S,cAAa/R,EAAIf,EAAE8S,YAAYvT,MAAM,GAAU,QAANwB,GAAqB,QAANA,EAAa,OAAO6X,MAAM+P,KAAK3oB,GAAI,GAAU,cAANe,GAAqB,2CAA2CoV,KAAKpV,GAAI,OAAO2nB,EAAkB1oB,EAAGyoB,GAJpTG,CAA4BZ,EAAKrtB,IAEnI,WAA8B,MAAM,IAAIib,UAAU,6IAFuFiT,GAMzI,SAASH,EAAkBV,EAAKc,IAAkB,MAAPA,GAAeA,EAAMd,EAAIntB,UAAQiuB,EAAMd,EAAIntB,QAAQ,IAAK,IAAIF,EAAI,EAAGouB,EAAO,IAAInQ,MAAMkQ,GAAMnuB,EAAImuB,EAAKnuB,IAAOouB,EAAKpuB,GAAKqtB,EAAIrtB,GAAM,OAAOouB,EAMhL,SAAS5c,IACP,IACI0pC,EAAmB9tB,EADDb,EAAgB,QAAEliB,UAAS,GACM,GACnD8wC,EAAaD,EAAiB,GAC9BE,EAAgBF,EAAiB,GAMrC,OAJA3uB,EAAgB,QAAE/hB,WAAU,WAC1B4wC,GAAc,KACb,IAEID,EAGT,SAAST,EAAWpsB,GAClB,IAAItd,EAAWsd,EAAKtd,SAChBqqC,EAAYT,EAAyBtsB,EAAMqsB,GAI/C,OAFiBnpC,IAMG+a,EAAgB,QAAEzpB,cAAc,MAAOu4C,EAAWrqC,GAH7D,KAMX,IAAIse,EAAWorB,EACfh5C,EAAiB,QAAI4tB,G,qBC1DrB3tB,EAAOD,QAAU,IAA0B,2C,qBCA3CC,EAAOD,QAAU,IAA0B,mC,kCCE3CvB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAGT,IAAIoS,EAA4B,oBAAXtS,QAAoD,kBAApBA,OAAOwS,SAAwB,SAAUD,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,oBAAXvS,QAAyBuS,EAAIE,cAAgBzS,QAAUuS,IAAQvS,OAAOtF,UAAY,gBAAkB6X,GAEtQvW,EAAQ45C,eAAiBA,EACzB55C,EAAQ65C,UAqDR,SAAmB1b,GACjB,GAAKA,EAEE,KAAK2b,MAAM3b,GAChB,OAAOyb,EAAezb,EAAMhhB,EAAWghB,GAAM,IACxC,GAAoB,kBAATA,EAAmB,CAEnC,OAAIA,EAAK3/B,OAAS,GAET2/B,EAOFyb,EANoB,KAAhBzb,EAAK3/B,OACF8H,KAAK+W,MAAM8gB,EAAO,KAElB73B,KAAK+W,MAAM8gB,GAGQhhB,EAAWghB,GAAM,YApEtDn+B,EAAQ2G,QA0ER,SAAiBw3B,GACf,GAAI7gB,OAAOC,UAAU4gB,GACnB,OAAO,IAAI73B,KAAK63B,GACX,GAAoB,kBAATA,EAChB,OAAoB,KAAhBA,EAAK3/B,OACA,IAAI8H,KAAK63B,EAAO,KAGhB,IAAI73B,KAAK63B,GAEb,GAAoE,YAA/C,qBAATA,EAAuB,YAAc7nB,EAAQ6nB,IAC9D,OAAOA,EAEPvlB,EAAOoC,KAAK,aAA8B,qBAATmjB,EAAuB,YAAc7nB,EAAQ6nB,KAtFlFn+B,EAAQmd,WAAaA,EACrBnd,EAAQqd,MAkJR,SAAejD,GACb,GAAsB,kBAAXA,EACT,OAAsB,KAAlBA,EAAO5b,OACF8H,KAAK+W,MAAMjD,EAAS,KAEpB9T,KAAK+W,MAAMjD,IArJxB,IAAIxB,EAAS9T,QAETi1C,EAAa,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAEhI,SAASH,EAAe/4B,EAAWm5B,GACjC,GAAIF,MAAMj5B,GAER,OAAOm5B,EAET,IACI3S,GADM,IAAI/gC,MAAOihC,UACA1mB,EAErB,OADAwmB,EAAWrqB,KAAKC,MAAMoqB,EAAW,OACjB,EACP,SAELA,EAAW,GACNA,EAAW,SAEpBA,EAAWrqB,KAAKC,MAAMoqB,EAAW,MACjB,EACP,SAELA,EAAW,GACNA,EAAW,SAKpBA,EAAWrqB,KAAKC,MAAMoqB,EAAW,MACjB,EACP,SAELA,EAAW,GAGXA,GAAY,GAFPA,EAAW,QAYb2S,EA0CT,SAAS78B,EAAWghB,EAAM8b,GACxB,GAAI38B,OAAOC,UAAU4gB,GACnB,OAAO+b,EAAiB,IAAI5zC,KAAK63B,GAAMl4B,WAAYg0C,GAC9C,GAAoB,kBAAT9b,EAAmB,CACnC,GAAqC,MAAjCA,EAAKhH,OAAOgH,EAAK3/B,OAAS,GAC5B,OAAO07C,EAAiB,IAAI5zC,KAAK63B,GAAMl4B,WAAYg0C,GAC9C,GAAoB,KAAhB9b,EAAK3/B,OACd,OAAO07C,EAAiB,IAAI5zC,KAAK63B,EAAO,KAAKl4B,WAAYg0C,GAEzDrhC,EAAOoC,KAAK,aAAcmjB,OAEvB,IAAoE,YAA/C,qBAATA,EAAuB,YAAc7nB,EAAQ6nB,IAC9D,OAAO+b,EAAiB/b,EAAKl4B,WAAYg0C,GAEzCrhC,EAAOoC,KAAK,aAA8B,qBAATmjB,EAAuB,YAAc7nB,EAAQ6nB,KAIlF,SAAS+b,EAAiB9/B,EAAQ6/B,GAChC,GAAI7/B,EAAO5b,QAAU,GAAI,CACvB,IAAI27C,EAAK//B,EAAOT,UAAU,EAAG,IACzBygC,EAAMhgC,EAAOT,UAAU,EAAG,GAC1B0gC,EAAOjgC,EAAOT,UAAU,GAAI,IAC5B2gC,EAAKlgC,EAAOT,UAAU,GAAI,IAC1B4gC,EAAKngC,EAAOT,UAAU,GAAI,IAC1B6gC,EA0BR,SAA0BpgC,GACxB,OAAO2/B,EAAWvwC,QAAO,SAAUtG,GACjC,OAAOA,EAAKi0B,OAAO,EAAG/c,EAAO5b,UAAY4b,KA5BzBqgC,CAAiBL,GACjC,GAAI9H,SAAS6H,GAAM,GAAK7H,SAAS6H,GAAM,IAAM7H,SAAS+H,GAAQ,KAAQ/H,SAAS+H,GAAQ,OAASG,EAE9F,OAAOpgC,EAEkB,MAAvB+/B,EAAGxgC,UAAU,EAAG,KAClBwgC,EAAKA,EAAGxgC,UAAU,IAEpB,IAAItT,EAAa8zC,EAAK,IAAMK,EAAY,IAAMH,EAW9C,OAVIJ,IACEK,EAAK,GAEPj0C,GAAc,MADdi0C,GAAM,IACoB,IAAMC,EAAK,KACX,KAAjBjI,SAASgI,GAClBj0C,GAAc,KAAOi0C,EAAK,IAAMC,EAAK,KAErCl0C,GAAc,KAAOi0C,EAAK,IAAMC,EAAK,MAGlCl0C,EAGP,OAAO+T,I,qBCpJXna,EAAOD,QAAU,IAA0B,sC,mOCsCzB8jC,GA5BZtwB,EAAQ,IAAIC,IAEZinC,EAAqB,SAACC,GAC1B,OAAOnnC,EAAM1P,IAAI62C,GACdz4C,MAAK,SAAA7C,GACJ,OAAKA,GACI4M,IAAMnI,IAAiB,gBAAkB62C,GAC7Cz4C,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAAI+mC,EAAUhnC,EAAS3V,KAAM,SAC1C,OACK,SAAA4D,GAEL,MAAMA,SAOlB,SAAWg5C,EAAmB,OAAI3mC,EAAO,EAAPA,QAAO,yHAEzB,OAFyB,kBAEnBrV,YAAK87C,EAAoBzmC,GAAQ,OACnD,OADMF,EAAM,EAAH,cACHC,YAAI,CAAE3S,KA3BwB,+BA2BQ4S,QAASF,IAAM,8BAE3D,OAF2D,mCAErDC,YAAI,CAAE3S,KA5BsB,6BA4BQ4S,QAAS,KAAEhR,UAAU,uDAL1B,GASlC,SAAW6gC,IAAoB,2EACpC,OADoC,SAC9B5vB,YAnCwB,uBAmCK0mC,GAAoB,uCAIlD,IAAMC,EAAkB,SAACF,GAAQ,MAAM,CAAEt5C,KAvChB,uBAuCwC4S,QAAS0mC,IAEpErmC,EAAe,CAC1BE,UAAW,EACXD,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,KACP+3C,SAAU,GACVxY,WAAY,MAGDztB,EAAU,WAAmD,IAAlDxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAAa,EAAJ+e,KAC7D,OAAQ3xB,GACN,IAvD4B,uBAwD1B,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9ByrC,SAAU1mC,EACVM,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,OAEX,IA/DkC,6BAgEhC,OAAOnE,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,EACfue,UAAW,OAEf,IAzEoC,+BA0ElC,OAAOr0B,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BsF,UAAW,IAAIlO,KACf+N,YAAY,EACZD,YAAY,EACZG,eAAe,EACf4tB,WAAYluB,EACZ9E,UAAU,EACV2jB,UAAW,KACXlwB,MAAO,OAEX,QACE,OAAOsM,K,sOC/DF4rC,GAA8B,qBAWvB7W,GA7BZlyB,EAAU,gBACVyB,EAAQC,cAAO,SAENkkB,IAAgB,4CAa9B,OAb8B,kCAA/B,8GACuBnkB,EAAM1P,IAAIiO,GAAQ,OAA3B,KAAN1S,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAToC,wBAU9C5B,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAAI7B,EAAS4B,EAAS3V,SACnC,OACK,SAAA4D,GAEL,MAAMA,MACN,4CACL,sBAED,SAAWk5C,IAA8B,mFAEzB,OAFyB,kBAEnBl8C,YAAK+4B,GAAiB,OAGxC,OAHM5jB,EAAM,EAAH,KACK,GACdE,EAAUF,EAAI+jB,SAAQ,SAChB9jB,YAAI,CAAE3S,KA3BqC,4CA2BQ4S,YAAU,+BAEnE,OAFmE,oCAE7DD,YAAI,CAAE3S,KA5BmC,0CA4BQ4S,QAAS,KAAEhR,UAAU,sDAIzE,SAAWghC,IAA+B,2EAC/C,OAD+C,SACzC/vB,YAnCqC,oCAmCK4mC,GAA+B,uCAI1E,IAAMC,EAA6B,SAAChpC,GAAO,MAAM,CAAE1Q,KAvCb,oCAuCkD0Q,YAEzFuC,EAAe,CACnB0mC,cAAe,CACbzmC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,KACPge,SAAU,KAIDlM,EAAU,WAAmD,IAAlDxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAC9CilB,GAD2D,EAAJlG,KAC1C,IACnB,OAAQ3xB,GACN,IAvDyC,oCA+DvC,OAPA63B,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDwC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA9D+C,0CAsE7C,OAPAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtD5C,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAxEiD,4CA+E/C,OANAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACfqM,SAAU3M,IAELxV,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,QACE,OAAOhqB,K,qBCtFbjP,EAAOD,QAAU,IAA0B,iC,sOC2CzBwjC,GAlCZhwB,EAAQC,cAAO,SAENkkB,EAAgB,+CAe9B,OAf8B,kCAA/B,WAAiC5lB,GAAO,mFACJ,OAA5BvN,EAAM,aAAeuN,EAAO,SACbyB,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,eAC8C,OAAtDyF,QAAQ+O,IAAI,oBAAqB,YAAa9B,GAAQ,kBAC/C1S,GAAM,gCAER4M,IAAMnI,IAAIm0B,kBAAmBlmB,GACjC7P,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAAIpP,EAAKmP,EAAS3V,SAC/B,OACK,SAAA4D,GAEL,MAAMA,MACN,4CACL,sBAED,SAAWq5C,EAAyB,OAAIlpC,EAAO,EAAPA,QAAO,2HAElB,OAFkB,kBAEZnT,YAAK+4B,EAAkB5lB,GAAQ,OAO9D,OAPMiwB,EAAmB,EAAH,KACR,GACd/tB,EAAU,CACRO,UAAW,IAAIlO,KACfgyB,SAAS,EACT1X,SAAUohB,GACX,SACKhuB,YAAI,CAAE3S,KAhCgC,uCAgCQ4S,UAASlC,YAAU,+BAEvE,OAFuE,oCAEjEiC,YAAI,CAAE3S,KAjC8B,qCAiCQ4S,QAAS,KAAEhR,UAAU,wDAX5B,GAexC,SAAWugC,IAA0B,2EAC1C,OAD0C,SACpCtvB,YAxCgC,+BAwCK+mC,GAA0B,uCAIhE,IAAMC,EAAwB,SAACnpC,EAAS8lB,GAAK,MAAM,CAAEx2B,KA5CpB,+BA4CoD0Q,UAAS8lB,UAE/FvjB,EAAe,GAERI,EAAU,WAA4D,IAA3DxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAASlC,EAAO,EAAPA,QACvDmnB,GADoE,EAAJlG,KACnD,IAEnB,OAAQ3xB,GACN,IApDoC,+BA4DlC,OAPA63B,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDwC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA3D0C,qCAmExC,OAPAA,EAAWnnB,GAAW,CACpB5C,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,GAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IArE4C,uCAgF1C,OAVAA,EAAWnnB,GAAW,CACpBsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACfqM,SAAU3M,EAAQ2M,SAClB0X,QAASrkB,EAAQqkB,QACjB9jB,UAAWP,EAAQO,UACnB+jB,WAAYtkB,EAAQskB,WACpBzmB,aAAcmC,EAAQnC,cAEjBrT,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,QACE,OAAOhqB,K,sTCrBK60B,GApDLoX,EAAe,SAACn9C,GAC3B,OAAOiO,IAAMskB,KAAkB,6BAA8B,CAC3D6qB,aAAcp9C,EAAKs3B,UACnB+lB,iBAAkBr9C,EAAKu3B,SACvBF,MAAOr3B,EAAKq3B,MACZimB,MAAOt9C,EAAKw3B,QACZ+lB,GAAI,GACJ34C,MAAO,KAENV,MAAK,SAAAyR,GAAQ,OAAIA,EAAS3V,QAAK,OACzB,SAAA4D,GAEL,MAAMA,MAIN45C,EAA0B,SAACtsC,EAAOsmB,GACtC,IAAMV,EAAWr2B,OAAOkW,OAAO,GAAIzF,GAQnC,OAPA4lB,EAASU,QAAUA,EAAQxqB,KAAI,SAACywC,GAC9B,OAAK3mB,EAASU,QAAQoB,SAAS6kB,GAGtB3mB,EAASU,QAFTjZ,MAAM5B,OAAOma,EAASU,QAAS,CAACimB,OAKpC3mB,GAGH4mB,EAAkC,SAACxsC,EAAOusC,GAC9C,IAAM3mB,EAAWr2B,OAAOkW,OAAO,GAAIzF,GAUnC,OATI4lB,EAASU,QAAQoB,SAAS6kB,GAE5B3mB,EAASU,QAAUV,EAASU,QAAQhsB,QAAO,SAAC80B,GAC1C,OAAOA,IAAYmd,KAIrB3mB,EAASU,QAAUV,EAASU,QAAQ7a,OAAO,CAAC8gC,IAEvC3mB,GAGT,SAAW6mB,EAAa,OAAI1nC,EAAO,EAAPA,QAAO,mHAE/B,OAF+B,kBAEzBrV,YAAKu8C,EAAclnC,GAAQ,OACjC,OADiC,SAC3BD,YAAI,CAAE3S,KAvDiB,0BAuDS,8BAGtC,OAHsC,yBAEtCyD,QAAQlC,MAAM,0BAA2B,KAAEK,SAAQ,UAC7C+Q,YAAI,CAAE3S,KAzDe,sBAyDQ4S,QAAS,CAAEhR,QAAS,KAAEA,WAAY,uDANtC,GAU5B,SAAW8gC,IAAc,2EAC9B,OAD8B,SACxBnL,YAhEiB,gBAgEI+iB,GAAc,uCAIpC,IAAMlmB,EAAsB,SAACH,EAAWC,EAAUF,EAAOG,GAAO,MAAM,CAAEn0B,KApEtD,gBAoEuE4S,QAAS,CAAEqhB,YAAWC,WAAUF,QAAOG,aAC1HR,EAA+B,SAACymB,GAAM,MAAM,CAAEp6C,KAjErB,6BAiEmD4S,QAASwnC,IAErF5mB,EAAa,SAAC72B,GAAI,MAAM,CAAEqD,KAhEZ,kBAgE+B4S,QAASjW,IACtD63B,EAAe,WAAH,MAAU,CAAEx0B,KArET,mBAqE6B4S,QAAS,KAE5D2yB,EAAe,CACnBtR,UAAW,GACXC,SAAU,GACVF,MAAO,GACPG,QAAS,CAAC,0BACVG,OAAQ,IAGGjhB,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAG03B,EAAY,yCAAIvlC,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QACpD,OAAQ5S,GACN,IAjFwB,mBAkFtB,OAAO5C,OAAOkW,OAAO,GAAIiyB,GAC3B,IAjFmC,8BAkFjC,OAAO4U,EAAwBtsC,EAAO+E,GACxC,IApFkC,6BAqFhC,OAAOynC,EAAgCxsC,EAAO+E,GAChD,IAnFuB,kBAoFrB,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO+E,GAClC,IA5FqB,gBA6FnB,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfwhB,cAAc,EACdC,cAAc,EACd7mB,UAAU,EACVvM,MAAO,KACP5E,KAAMiW,IAEV,IAnG2B,sBAoGzB,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAOqR,EAAQhR,QACf8yB,cAAc,EACdC,cAAc,EACdzhB,eAAe,IAEnB,IA5G6B,wBA6G3B,OAAO9V,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B6mB,cAAc,EACdC,cAAc,EACdzhB,eAAe,IAEnB,QACE,OAAOrF,K,uECzGEY,IARf,WACE,MAAoCP,IAAM5G,UAAS,GAAM,mBAAlD8wC,EAAU,KAAEC,EAAa,KAIhC,OAHAnqC,IAAMzG,WAAU,WACd4wC,GAAc,KACb,IACID,I,mKCHHmC,EAAex2C,IAAOmF,OAAM,2FAAbnF,CAAa,uJA6CnBkO,uBAHS,SAACpE,GAAK,OAAKA,KACR,SAACiE,GAAQ,OAAKC,6BAAmB,CAAE0yB,mBAAiB3yB,KAEhEG,EAhCgB,SAACjO,GAC9B,IAAMsG,EAAWoe,wBACjB,EAAoCve,YAAU,aAAc,GAAE,mBAAvDqwC,EAAU,KAAEC,EAAa,KAMhC,OAJAvsC,IAAMzG,WAAU,WACdzD,EAAMygC,cAAcn6B,EAASqE,YAC5B,IAECsiC,SAASuJ,GAAc,GACzBC,EAAcxJ,SAASuJ,GAAc,EAAG,CAAC9+B,QAAS,KAClD/X,OAAO2G,SAASowC,QAAO,GAChB,MAGP,oBACE,EAAC,IAAEC,KAAI,CAACt7C,EAAG,GAAI2L,GAAI,CAAErF,GAAI,OAAQC,GAAI,SAAWiB,EAAE,OAAOiE,SAAU,IAAKC,GAAG,OAAO5E,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAS3B,EAAE,SACpK,EAAC,IAAE4B,GAAE,CAACrE,KAAK,KAAKmE,GAAI,IAAG,SACvB,EAAC,IAAE0hC,GAAE,CAAC7lC,KAAK,KAAKmE,GAAI,GAAI/E,GAAI,IAAG,wBAC/B,EAAC,IAAE7G,EAAC,CAACyH,KAAK,IAAIZ,GAAI,GAAIa,UAAU,UAAU/C,EAAMzC,MAAMqD,YACtD,EAAC21C,EAAY,CAACnmC,QAAS,WACrB,OAAOzQ,OAAO2G,SAASowC,WACvB,qB,qBC1CV97C,EAAOD,QAAU,IAA0B,qC,sOCqCzBkkC,GAzBZ1wB,EAAQC,cAEP,SAAewoC,EAAe,kCAYpC,sDAZM,WAAgCC,GAAW,iGAC3B1oC,EAAM1P,IAJb,WAIyB,OAA3B,KAANzE,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAV4C,6BAWtD5B,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAVH,UAUgBD,EAAS3V,SACnC,OACK,SAAA4D,GACL,MAAMA,MACN,4CACL,sBAED,SAAWu6C,EAAgB,OAAID,EAAW,EAAXA,YAAW,yHAE1B,OAF0B,kBAEpBt9C,YAAKq9C,EAAiBC,GAAY,OACpD,OADMnoC,EAAM,EAAH,cACHC,YAAI,CAAE3S,KA1BqB,4BA0BQ4S,QAASF,IAAM,8BAExD,OAFwD,mCAElDC,YAAI,CAAE3S,KA3BmB,0BA2BQ4S,QAAS,KAAEhR,UAAU,uDALtB,GASnC,SAAWihC,IAAiB,2EACjC,OADiC,SAC3BhwB,YAlCqB,oBAkCKioC,GAAiB,uCAG5C,IAAMC,EAAe,SAACF,GAAW,MAAM,CAAE76C,KArCnB,oBAqCwC+S,YAAY,EAAMC,YAAY,EAAO6nC,gBAE7F5nC,EAAe,CAC1BC,eAAe,EACfC,UAAW,EACXJ,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVsF,OAAO,EACP7R,MAAO,KACPquB,QAAS,MAGEvc,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QACpD,OAAQ5S,GACN,IApDyB,oBAqDvB,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfH,YAAY,EACZC,YAAY,EACZI,OAAO,EACPtF,UAAU,EACVvM,MAAO,OAEX,IA1DmC,8BA2DjC,OAAOnE,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACPJ,YAAY,EACZD,YAAY,EACZG,eAAe,EACf0c,QAAS,OAEb,IApE+B,0BAqE7B,OAAOxyB,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVsF,OAAO,EACP7R,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEnB,IA9EiC,4BA+E/B,OAAO9V,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BsF,UAAW,IAAIlO,KACf+N,YAAY,EACZD,YAAY,EACZG,eAAe,EACf0c,QAAShd,EACT9E,UAAU,EACVsF,OAAO,EACP7R,MAAO,OAEX,QACE,OAAOsM,K,kCC/Fb,oFAEauR,EAAK,IAAI47B,IAAM,gBACfz1B,EAAK,IAAIy1B,IAAM,qBAE5B57B,EAAG67B,QAAQ,GAAGC,OAAO,CACnB77B,SAAU,0BAGZkG,EAAG01B,QAAQ,GAAGC,OAAO,CACnB77B,SAAU,yB,kCCRZjiB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQw8C,gBAAkBx8C,EAAQy8C,gBAAkBz8C,EAAQ08C,aAAe18C,EAAQ28C,aAAe38C,EAAQ48C,OAAS58C,EAAQ68C,WAAa78C,EAAQ88C,OAAS98C,EAAQ+8C,WAAa/8C,EAAQg9C,cAAgBh9C,EAAQi9C,cAAgBj9C,EAAQk9C,YAAcl9C,EAAQm9C,aAAU,EAEtQ,IAAItyB,EAAS9T,EAAuB,EAAQ,SAExCqmC,EAAmBrmC,EAAuB,EAAQ,SAEtD,SAASA,EAAuBR,GAAO,OAAOA,GAAOA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAEzF,SAASib,IAAiS,OAApRA,EAAW/yB,OAAOkW,OAASlW,OAAOkW,OAAOlQ,OAAS,SAAU/C,GAAU,IAAK,IAAIpD,EAAI,EAAGA,EAAIuY,UAAUrY,OAAQF,IAAK,CAAE,IAAIwiB,EAASjK,UAAUvY,GAAI,IAAK,IAAIkG,KAAOsc,EAAcriB,OAAOC,UAAUC,eAAeC,KAAKkiB,EAAQtc,KAAQ9C,EAAO8C,GAAOsc,EAAOtc,IAAY,OAAO9C,IAA2BvC,MAAMkQ,KAAMwH,WAGtU,IAAI6lC,EAAe,IACnB18C,EAAQ08C,aAAeA,EAMvB18C,EAAQw8C,gBAJc,SAAyBhhC,GAC7Cxb,EAAQ08C,aAAeA,EAAelhC,GASxCxb,EAAQy8C,gBAJc,WACpB,OAAOC,GAcT18C,EAAQm9C,QATM,SAAiB93C,GAC7B,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,IACVk3B,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQg9C,cATY,SAAuB33C,GACzC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,KACVk3B,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQ+8C,WATS,SAAoB13C,GACnC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,KACVk3B,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQi9C,cATY,SAAuB53C,GACzC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,IACVk3B,OAAQ,CACNC,YAAaZ,OAiBnB18C,EAAQ48C,OAVK,SAAgBv3C,GAC3B,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,IACVha,SAAU,IACVkxC,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQ28C,aATW,SAAsBt3C,GACvC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8G,SAAU,IACVkxC,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQ88C,OATK,SAAgBz3C,GAC3B,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8G,SAAU,IACVkxC,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQk9C,YATU,SAAqB73C,GACrC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8G,SAAU,IACVkxC,OAAQ,CACNC,YAAaZ,OAgBnB18C,EAAQ68C,WATS,SAAoBx3C,GACnC,OAAoBwlB,EAAgB,QAAEzpB,cAAcg8C,EAA0B,QAAG5rB,EAAS,GAAInsB,EAAO,CACnG8gB,SAAU,IACVk3B,OAAQ,CACNC,YAAaZ,Q,qBC5HnBz8C,EAAOD,QAAU,IAA0B,2C,2IC8BrCu9C,EAAan4C,aAzBJ,SAAH,GAAkH,IAA5G0B,EAAS,EAATA,UAAWuO,EAAE,EAAFA,GAAIjD,EAAE,EAAFA,GAAI5N,EAAG,EAAHA,IAAK8V,EAAO,EAAPA,QAAS7E,EAAO,EAAPA,QAASnG,EAAQ,EAARA,SAAUW,EAAS,EAATA,UAAWoC,EAAS,EAATA,UAAWN,EAAO,EAAPA,QAAS+O,EAAM,EAANA,OAAQ08B,EAAU,EAAVA,WAC3G,QAAgDr6C,IAAX2d,EAAsB,CACzD,IAAMyB,EAAcvd,OAAO2G,SAASnL,KAI9BgiB,EAAa,CAAE1B,SAAQ2B,eAHNrQ,EAGsBsQ,YAFzB1d,OAAOpE,SAAS+hB,SAEsBC,YADtC5d,OAAO6d,SAEvB9Q,IACFyQ,EAAWzQ,QAAUA,GAQvB,OACE,EAAC,OAAI,CAACvN,IAAKA,EAAK6Q,GAAIA,EAAIjD,GAAIA,EAAIkI,QAASA,EAAS7E,QAP3B,WACvBqN,YAAiB,aAAcC,cAAe9S,EAAWI,MAA8BgC,EAAWkQ,EAAaC,GAC3G/M,GACFA,KAI2E3O,UAAWA,EAAW22C,cAAaD,GAAaluC,GAGjI,OACE,EAAC,OAAI,CAAC9K,IAAKA,EAAK6Q,GAAIA,EAAIjD,GAAIA,EAAIkI,QAASA,EAAS7E,QAASA,EAAS3O,UAAWA,EAAW22C,cAAaD,GAAaluC,MAIvF,uEAAdlK,EACjB,gBAAGoL,EAAK,EAALA,MAAOu6B,EAAU,EAAVA,WAAU,OAAO5mB,YAAG,qKAC5B5e,IACSiL,GAAS,UAePu6B,GAAc,WAMdwS,O,kCCtDf,IAAMG,EAAsB,WAC1B,IAAMC,EAAO,IAAIC,QACjB,OAAO,SAACp5C,EAAKN,GACX,GAAqB,kBAAVA,GAAgC,OAAVA,EAAgB,CAC/C,GAAIy5C,EAAKxmC,IAAIjT,GACX,OAEFy5C,EAAKv2B,IAAIljB,GAEX,OAAOA,IAQIgwB,IAJR,SAAsBhU,EAAG29B,GAC9B,OAAOrtB,KAAKC,UAAUvQ,EAAGw9B,OAA2BltB,KAAKC,UAAUotB,EAAGH,O,sOCY7DI,GAAmB,qBAgBZpa,GAhCZlwB,EAAQC,cAAO,SAENsqC,IAAkB,4CAYhC,OAZgC,kCAAjC,8GACuBvqC,EAAM1P,IAJb,UAIyB,OAA3B,KAANzE,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAT2C,4BAUrD5B,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAVH,SAUgBD,EAAS3V,SACnC,OACK,SAAA4D,GACL,MAAMA,MACN,4CACL,sBAED,SAAWk8C,IAAmB,mFAEd,OAFc,kBAERl/C,YAAKm/C,GAAmB,OAQ1C,OARMhqC,EAAM,EAAH,KACLE,EAAU,GACVF,IACFE,EAAU,CACRO,UAAW,IAAIlO,KACf47B,OAAQnuB,IAEX,SACKC,YAAI,CAAE3S,KA/ByB,gCA+BQ4S,YAAU,+BAEvD,OAFuD,oCAEjDD,YAAI,CAAE3S,KAhCuB,8BAgCQ4S,QAAS,KAAEhR,UAAU,sDAI7D,SAAWygC,IAAoB,2EACpC,OADoC,SAC9BxvB,YAvCyB,wBAuCK4pC,GAAoB,uCAInD,IAAME,EAAkB,WAAH,MAAU,CAAE38C,KA3CP,0BA6C3BiT,EAAe,CACnBC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,KACPs/B,OAAQ,IAGGxtB,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAChDilB,EAAa,GACjB,OAAQ73B,GACN,IAzD6B,wBAiE3B,OAPA63B,EAAaz6B,OAAOkW,OAAO,GAAIzF,EAAa,OAAG,CAC7CqF,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IAhEmC,8BAwEjC,OAPAA,EAAaz6B,OAAOkW,OAAO,GAAIzF,EAAa,OAAG,CAC7CC,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA1EqC,gCAkFnC,OAPAA,EAAaz6B,OAAOkW,OAAO,GAAIzF,EAAa,OAAG,CAC7CmF,YAAY,EACZD,YAAY,EACZG,eAAe,EACf2tB,OAAQjuB,EAAQiuB,OAChB1tB,UAAWP,EAAQO,YAEd/V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,QACE,OAAOhqB,K,gHCxDEuY,IA5BY,SAAH,GAAqB,IAAhBC,EAAI,EAAJA,KAAMxf,EAAC,EAADA,EAAG0C,EAAC,EAADA,EACpC,EAA0DjC,oBAAS,GAA5Ds1C,EAAqB,KAAEC,EAAwB,KACtDp1C,qBAAU,WACJunB,UAAU8tB,UACZD,GAAyB,MAe7B,OACE,oBACGD,GACC,EAAC,IAAEt2C,IAAG,CAAChG,IAAKy8C,IAAcl2C,EAAGA,EAAG0C,EAAGA,EAAG6K,QAAS,kBAf1BpE,EAekDhB,wBAA8BqX,OAdzG2I,UACGguB,MAAM,CACLhtC,IAAKA,IAENnP,MAAK,WACJ4C,QAAQ+O,IAAI,0BACZ,OACK,WACL/O,QAAQ+O,IAAI,qBATQ,IAACxC,GAeuFtJ,MAAM,gBAAgBiZ,IAAI,qB,gWCRxIs9B,EAAS,CACb,CAAC,CAAC,KAAM,GAAI,IACZ,CAAC,CAAC,IAAK,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,UAC1D,CAAC,CAAC,EAAG,GAAI,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,WA6F3CC,IA1FA,SAACl5C,GACd,IAAMsG,EAAWoe,wBACXE,IAAkBte,EAASqE,SAAS2B,MAAM,8FAC1CV,EAAS,GAAH,OAAM5L,EAAM4L,SAAWgZ,EAAgBte,EAASqE,UAAmC,MAAtBrE,EAASqE,SAAmB,GAAKrE,EAASqE,UAAY,cAE/H,OACE,oBACE,EAAC,IAAEnJ,IAAG,CAACiE,GAAG,SAAS1C,UAAU,SAASZ,QAAS,CAAER,GAAI,OAAQqa,GAAI,QAAUvB,WAAY,CAAE9Y,GAAI,UAAWqa,GAAI,UAAY3Z,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAASrC,SAAS,QAAQ2d,OAAO,IAAI3f,EAAE,OAAOxH,EAAG,GAAIqK,OAAO,MAC5O,EAAC,IAAE,aAAC63B,YAAav9B,EAAMu9B,YAAa3xB,OAAQA,EAAQuiB,OAAO,4BAA4BC,UAAW,CAAE,qBAAsB,UAAY+qB,QAASF,EAAQx3C,UAAU,UAAamhC,IAAQM,2BAExL,EAAC,IAAEkW,OAAM,CAACv2C,EAAE,OAAOiD,gBAAgB,OAAO3D,QAAQ,OAAO+E,cAAc,SAAS9E,WAAW,SAASC,eAAe,SAAS0Z,GAAI,GAAIrB,GAAI,GAAIrT,GAAI,GAAIJ,GAAI,CAAEtF,GAAI,KAAMC,GAAI,MACtK,EAAC,IAAEJ,IAAG,CAACqB,EAAE,OAAOiE,SAAS,SAAS3E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,iBAAkBC,GAAI,uCAAyCie,IAAK,CAAEle,GAAI,IAAKC,GAAI,MAAQy3C,aAAa,SAASluC,MAAM,SACjM,EAAC,IAAE3J,IAAG,CAACqD,SAAS,WAAWpD,UAAU,uBAAuBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,KAAOM,GAAI,CAAEP,GAAI,OAAQC,GAAI,KAAOF,YAAa,CAAEC,GAAI,YAAaC,GAAI,KAAOC,YAAY,QAAQC,YAAY,aAAaG,WAAY,CAAEN,GAAI,aAAcC,GAAI,SAAWiB,EAAE,QAClQ,EAAC,IAAEP,IAAG,CAAChG,IAAKg9C,IAASz2C,EAAG,IAAKX,GAAI,GAAIyZ,IAAI,QACzC,EAAC,IAAEtgB,EAAC,CAACyH,KAAK,SAAO,oRAA6Q,EAAC,IAAU,CAACqI,MAAM,QAAQ4B,GAAG,aAAaC,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAV9Y,UAUma,EAAC,IAAekqB,SAAQ,CAACF,aAAa,SAASC,WAAW,UAAQ,eAC/e,EAAC,IAAElkC,IAAG,CAACW,QAAQ,OAAO+E,cAAc,MAAMF,GAAI,IAC5C,EAAC,IAAE6T,EAAC,CAAC1f,KAAK,mCAAmCkB,OAAO,SAASuG,GAAI,IAAI,SAAKtG,IAAKi9C,IAAa59B,IAAI,yBAChG,EAAC,IAAEd,EAAC,CAAC1f,KAAK,8BAA8BkB,OAAO,SAASuG,GAAI,IAAI,SAAKtG,IAAKk9C,IAAY79B,IAAI,0BAC1F,EAAC,IAAEd,EAAC,CAAC1f,KAAK,oCAAoCkB,OAAO,SAASuG,GAAI,IAAI,SAAKtG,IAAKm9C,IAAc99B,IAAI,4BAClG,EAAC,IAAEd,EAAC,CAAC1f,KAAK,kCAAkCkB,OAAO,SAASuG,GAAI,IAAI,SAAKtG,IAAKo9C,IAAY/9B,IAAI,yBAC9F,EAAC,IAAEd,EAAC,CAAC1f,KAAK,2DAA2DkB,OAAO,SAASuG,GAAI,IAAI,SAAKtG,IAAKq9C,IAAYh+B,IAAI,gCACvH,EAAC,IAAEd,EAAC,CAAC1f,KAAK,OAAOyH,GAAI,IAAI,SAAKtG,IAAKs9C,IAAQj+B,IAAI,kCAGnD,EAAC,IAAEna,IAAG,CAACqD,SAAS,WAAWpD,UAAU,uBAAuBqB,KAAK,QAAQpB,YAAa,CAAEC,GAAI,YAAaC,GAAI,KAAOC,YAAY,QAAQC,YAAY,aAAaG,WAAY,CAAEN,GAAI,QAASC,GAAI,SAAW6F,GAAI,GAAIvF,GAAI,IACrN,EAAC,IAAE4mC,GAAE,CAAChmC,KAAK,YAAU,mBACrB,EAAC,IAAE4Z,IAAG,CAAC3M,KAAK,aAAa3K,aAAW,kBAAkB4B,GAAI,IACxD,EAAC,IAAE3B,GAAE,KACH,EAAC,IAAEQ,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,QAAQjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAxB9I,UAwBkK,SACxK,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,aAAajK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAzBnJ,UAyBuK,cAC7K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,iBAAiBjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA1BvJ,UA0B2K,kBACjL,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,UAAUjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA3BhJ,UA2BoK,WAC1K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,YAAYjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA5BlJ,UA4BsK,aAC5K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,YAAYjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA7BlJ,UA6BsK,aAC5K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,SAASjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA9B/I,UA8BmK,UACzK,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,YAAYjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA/BlJ,UA+BsK,aAC5K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,WAAWjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAhCjJ,UAgCqK,eAKjL,EAAC,IAAEja,IAAG,CAACqD,SAAS,WAAWpD,UAAU,uBAAuBqB,KAAK,QAAQb,WAAY,CAAEN,GAAI,QAASC,GAAI,SAAWuf,GAAI,GAAIjf,GAAI,IAC7H,EAAC,IAAE4mC,GAAE,CAAChmC,KAAK,YAAU,eACrB,EAAC,IAAE4Z,IAAG,CAAC3M,KAAK,aAAa3K,aAAW,cAAc4B,GAAI,IACpD,EAAC,IAAE3B,GAAE,KACH,EAAC,IAAEQ,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,aAAajK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAzCnJ,UAyCuK,cAC7K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,cAAcjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA1CpJ,UA0CwK,eAC9K,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,gBAAgBjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA3CtJ,UA2C0K,YAChL,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,EAAGC,QAAS,CAAEP,GAAI,QAAU6Y,WAAY,CAAE7Y,GAAI,WAAY,EAAC,IAAU,CAACuJ,MAAM,QAAQ4B,GAAG,WAAWjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA5CxM,UA4C4N,YAClO,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,EAAGC,QAAS,CAAEP,GAAI,QAAU6Y,WAAY,CAAE7Y,GAAI,WAAY,EAAC,IAAU,CAACuJ,MAAM,QAAQ4B,GAAG,gBAAgBjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA7C7M,UA6CiO,cAGvO,EAAC,IAAE5V,GAAE,CAAC3D,GAAI,GAAG,EAAC,IAAU,CAACiJ,MAAM,QAAQ4B,GAAG,oBAAoBjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAhD1J,UAgD8K,+BAI1L,EAAC,IAAEja,IAAG,CAACsB,KAAK,QAAQzH,EAAG,CAAEsG,GAAI,WAAYC,GAAI,KAAOK,WAAY,CAAEN,GAAI,aAAcC,GAAI,SAAWF,YAAa,CAAEC,GAAI,YAAaC,GAAI,KAAOC,YAAY,QAAQC,YAAY,aAAaK,QAAS,CAAER,GAAI,OAAQC,GAAI,SAAWwF,oBAAqB,CAAEzF,GAAI,qCAAsCC,GAAI,QAAUie,IAAK,CAAEle,GAAI,KAAMC,GAAI,MACnU,EAAC,IAAEJ,IAAG,KACJ,EAAC,IAAEsnC,GAAE,CAAChmC,KAAK,YAAU,aACrB,EAAC,IAAE4Z,IAAG,CAAC3M,KAAK,aAAa3K,aAAW,YAAY4B,GAAI,IAClD,EAAC,IAAE3B,GAAE,KAEH,EAAC,IAAEQ,GAAE,KAAC,EAAC,IAAU,CAACsF,MAAM,QAAQ4B,GAAG,eAAejK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA1DhJ,UA0DoK,wBAI9K,EAAC,IAAEja,IAAG,CAACwF,GAAI,IACT,EAAC,IAAE6T,EAAC,CAAC1f,KAAK,4EAA4EkB,OAAO,UAAS,EAAC,IAAEiG,IAAG,CAAChG,IAAKu9C,IAAYl+B,IAAI,oCAClI,EAAC,IAAEd,EAAC,CAAC1f,KAAK,qDAAqDkB,OAAO,UAAS,EAAC,IAAEiG,IAAG,CAAChG,IAAKw9C,IAAUn+B,IAAI,mCAAmC3U,GAAI,SAItJ,EAAC,IAAExF,IAAG,CAACqB,EAAE,OAAOiE,SAAS,SAASE,GAAI,GAAI+U,GAAI,GAAI5Z,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,yDAA2Die,IAAK,CAAEje,GAAI,MAAQy3C,aAAa,SAASluC,MAAM,QAAQzJ,YAAY,YAAYG,YAAY,QAAQC,YAAY,cAChR,EAAC,IAAEN,IAAG,KACJ,EAAC,IAAEnG,EAAC,CAACyH,KAAK,UAAQ,SAAS,IAAI7B,MAAOmX,mBAAmB,QAAS,CAAEC,KAAM,YAAY,uEAExF,EAAC,IAAE7W,IAAG,CAACW,QAAQ,OAAOk3C,aAAa,SAASh3C,eAAgB,CAAET,GAAI,iBAAmBoF,GAAI,CAAErF,GAAI,OAAQC,GAAI,KAAOkB,KAAK,SAAS8e,OAAQ,CAAEhgB,GAAI,MAAQm4C,SAAU,CAAEp4C,GAAI,OAAQC,GAAI,WAChL,EAAC,IAAU,CAACuJ,MAAM,QAAQ4B,GAAG,cAAcjK,KAAK,aAAaF,GAAI,CAAEjB,GAAI,MAAQqL,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OAzErJ,UAyEyK,cACnL,EAAC,IAAU,CAACtQ,MAAM,QAAQ4B,GAAG,kBAAkBjK,KAAK,aAAaF,GAAI,CAAEjB,GAAI,MAAQqL,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA1EzJ,UA0E6K,kBACvL,EAAC,IAAU,CAACtQ,MAAM,QAAQ4B,GAAG,wBAAwBjK,KAAK,aAAaF,GAAI,CAAEjB,GAAI,MAAQqL,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA3E/J,UA2EmL,sBAC7L,EAAC,IAAU,CAACtQ,MAAM,QAAQ4B,GAAG,eAAejK,KAAK,aAAaF,GAAI,CAAEjB,GAAI,MAAQqL,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA5EtJ,UA4E0K,qBACpL,EAAC,IAAU,CAACtQ,MAAM,QAAQ4B,GAAG,YAAYjK,KAAK,aAAaF,GAAI,CAAEjB,GAAI,MAAQqL,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA7EnJ,UA6EuK,YACjL,EAAC,IAAU,CAACtQ,MAAM,QAAQ4B,GAAG,cAAcjK,KAAK,aAAakK,UAAWhN,EAAMgN,UAAWpC,UAAW5K,EAAM4K,UAAW8B,QAAS1M,EAAM0M,QAAS+O,OA9EnI,UA8EuJ,8B,uBC3G7K7gB,EAAOD,QAAU,IAA0B,uC,qBCA3CC,EAAOD,QAAU,IAA0B,sC,qBCA3CC,EAAOD,QAAU,IAA0B,uC,sOC0BhCq/C,GAAyB,qBAkBlB5b,GAnCZ1xB,EAAU,mBACVyB,EAAQC,cAAO,SAENkkB,IAAgB,4CAY9B,OAZ8B,kCAA/B,8GACuBnkB,EAAM1P,IAAIiO,GAAQ,OAA3B,KAAN1S,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAToC,+BAU9C5B,MAAK,SAAAyR,GACJ,OAAOH,EAAMI,IAAI7B,EAAS4B,EAAS3V,SACnC,OACK,SAAA4D,GACL,MAAMA,MACN,4CACL,sBAED,SAAWy9C,IAAyB,mFAEpB,OAFoB,kBAEdzgD,YAAK+4B,GAAiB,OAUxC,OAVM5jB,EAAM,EAAH,KACLE,EAAU,GACVF,IACFE,EAAU,CACRO,UAAW,IAAIlO,KACfgyB,SAAS,EACT1X,SAAU7M,EAAI+jB,SACdO,eAAgBtkB,EAAIskB,iBAEvB,SACKrkB,YAAI,CAAE3S,KAjC+B,sCAiCQ4S,YAAU,+BAE7D,OAF6D,oCAEvDD,YAAI,CAAE3S,KAlC6B,oCAkCQ4S,QAAS,KAAEhR,UAAU,sDAInE,SAAWwgC,IAAqB,2EACrC,OADqC,SAC/BvvB,YAzC+B,8BAyCKmrC,GAA0B,uCAI/D,IAAMC,EAAwB,WAAH,MAAU,CAAEj+C,KA7CP,gCA+CjCiT,EAAe,CACnBirC,iBAAkB,CAChBhrC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,KACPge,SAAU,GACVyX,eAAgB,KAIP3jB,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QAC9CilB,EAAa,GACnB,OAAQ73B,GACN,IA9DmC,8BAsEjC,OAPA63B,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDwC,eAAe,EACfH,YAAY,EACZC,YAAY,EACZlF,UAAU,EACVvM,MAAO,OAEFnE,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IArEyC,oCA6EvC,OAPAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtD5C,UAAU,EACVvM,MAAOqR,EACPI,YAAY,EACZD,YAAY,EACZG,eAAe,IAEV9V,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,IA/E2C,sCAyFzC,OATAA,EAAWnnB,GAAWtT,OAAOkW,OAAO,GAAIzF,EAAM6C,GAAU,CACtDsC,YAAY,EACZD,YAAY,EACZG,eAAe,EACfqM,SAAU3M,EAAQ2M,SAClB0X,QAASrkB,EAAQqkB,QACjB9jB,UAAWP,EAAQO,UACnB6jB,eAAgBpkB,EAAQokB,iBAEnB55B,OAAOkW,OAAO,GAAIzF,EAAOgqB,GAClC,QACE,OAAOhqB,K,qBChGbjP,EAAOD,QAAU,IAA0B,+B,kRC8BzB4jC,GAnBZ4b,EAAc,SAACxhD,GACnB,OAAOiO,IAAMskB,KAAkB,wBAAyBvyB,GACrDkE,MAAK,SAAAyR,GAAQ,OAAIA,EAAS3V,QAAK,OACzB,SAAA4D,GAEL,MAAMA,MAIZ,SAAW69C,EAAY,OAAIzhD,EAAI,EAAJA,KAAI,mHAE3B,OAF2B,kBAErBY,YAAK4gD,EAAaxhD,GAAK,OAC7B,OAD6B,SACvBgW,YAAI,CAAE3S,KAlBgB,yBAkBS,8BAGrC,OAHqC,yBAErCyD,QAAQlC,MAAM,yBAA0B,KAAEK,SAAQ,UAC5C+Q,YAAI,CAAE3S,KApBc,qBAoBQ4S,QAAS,CAAEhR,QAAS,KAAEA,WAAY,uDANzC,GAUxB,SAAW2gC,IAAa,2EAC7B,OAD6B,SACvBhL,YA3BgB,eA2BI6mB,GAAa,uCAIlC,IAAMC,EAAa,SAAC1hD,GAAI,MAAM,CAAEqD,KAhCb,iBAgC+BrD,SAC5C2hD,EAAiB,SAAC3hD,GAAI,MAAM,CAAEqD,KAhCnB,eAgCmCrD,SAC9C62B,EAAa,SAAC72B,GAAI,MAAM,CAAEqD,KA9BZ,kBA8B+B4S,QAASjW,IAEtDsW,EAAe,CAC1BsrC,SAAU,GACVplC,MAAO,GACP6a,MAAO,GACPwqB,YAAa,UACb58C,QAAS,GACT0yB,OAAQ,GACRR,iBAAiB,GAGNzgB,EAAU,WAA6C,IAA5CxF,EAAQ,UAAH,6CAAGoF,EAAY,yCAAIjT,EAAI,EAAJA,KAAM4S,EAAO,EAAPA,QACpD,OAAQ5S,GACN,IA5CuB,kBA6CrB,OAAO5C,OAAOkW,OAAO,GAAIzF,EAAO+E,GAClC,IAlDsB,iBAmDpB,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfwhB,cAAc,EACdC,cAAc,EACd7mB,UAAU,EACVvM,MAAO,OAEX,IAzDoB,eA0DlB,OAAOnE,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfwhB,cAAc,EACdC,cAAc,EACd7mB,UAAU,EACVvM,MAAO,KACP5E,KAAMiW,IAEV,IAhE0B,qBAiExB,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAOqR,EAAQhR,QACf+yB,cAAc,EACdD,cAAc,EACdxhB,eAAe,IAEnB,IAzE4B,uBA0E1B,OAAO9V,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B8mB,cAAc,EACdD,cAAc,EACdxhB,eAAe,IAEnB,QACE,OAAOrF,K,oOC/ET4wC,GAAgB,EAEb,SAASjH,EAAoBkH,GASlC,IARA,IACMC,GAAUD,EADA,IAAIE,QAAQ,EAAIF,EAAavhD,OAAS,GAAK,IAExD8b,QAAQ,KAAM,KACdA,QAAQ,KAAM,KAEX4lC,EAAUl7C,OAAOm7C,KAAKH,GACtBI,EAAc,IAAIC,WAAWH,EAAQ1hD,QAElCF,EAAI,EAAGA,EAAI4hD,EAAQ1hD,SAAUF,EACpC8hD,EAAY9hD,GAAK4hD,EAAQI,WAAWhiD,GAEtC,OAAO8hD,EAGT,IAAMG,EAA6B,SAAH,GAAyB,IAAnBC,EAAE,EAAFA,GAAOn7C,EAAK,iBA2ChD,OA1CAyD,qBAAU,WAC6B,kBAAmBunB,YACtDmwB,EAAK,IAAIC,IAAQ,UACjB37C,QAAQ+O,IAAI,uBACZ2sC,EAAG7gC,iBAAiB,aAAa,SAACne,GAChCsD,QAAQ+O,IAAI,qDAAsDrS,GAG7DA,EAAMk/C,SAQT57C,QAAQ+O,IAAI,yDAPZ/O,QAAQ+O,IAAI,yCAUhB2sC,EAAG7gC,iBAAiB,WAAW,SAACne,GAC9B,GAAwB,kBAApBA,EAAMxD,KAAKqD,KAA0B,CACvC,IAAQs/C,EAAen/C,EAAMxD,KAAKiW,QAA1B0sC,WACR77C,QAAQ+O,IAAI,+CAAD,OAAgD8sC,EAAU,uBAUzEH,EAAG7gC,iBAAiB,WAAW,SAACne,GAC9BsD,QAAQ+O,IAAI,kHAGd2sC,EAAGI,WAAW1+C,MAAK,SAAAk2C,GACjB0H,EAAgB1H,EAChB/yC,EAAMugC,iBAAgB,SAGzB,IACI,MAGF,SAASyS,IACd,OAAOyH,EAcMxsC,uBAHS,SAACpE,GAAK,OAAMA,EAAM6D,OACf,SAACI,GAAQ,OAAKC,6BAAmB,CAAEwyB,qBAAmBzyB,KAElEG,EATO,SAACjO,GACrB,OACE,EAACk7C,EAA0B,aAACC,QAJ5BA,GAIwCn7C,Q,kCC3E5C5G,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQmgC,oBAAiBh9B,EAEzB,IAEI09C,EAAU9pC,EAFD,EAAQ,SAMjB+pC,EAAgB/pC,EAFD,EAAQ,SAI3B,SAASA,EAAuBR,GAAO,OAAOA,GAAOA,EAAIlS,WAAakS,EAAM,CAAEoa,QAASpa,GAEvFvW,EAAQ2wB,QAAUmwB,EAAcnwB,QAChC3wB,EAAQmgC,eAAiB0gB,EAAQlwB,S,qBClBjC1wB,EAAOD,QAAU,IAA0B,kD,syBCO9B+gD,EAAgB,WAAH,OACxB,oBACE,EAAC,IAAEl6C,IAAG,CAACW,QAAQ,OAAO+E,cAAc,SAASrC,SAAS,WAAWpD,UAAU,gBAAgBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,KAAOF,YAAa,CAAEC,GAAI,YAAaC,GAAI,KAAOC,YAAY,QAAQC,YAAY,WACtM,EAAC,IAAEE,QAAO,CAACiF,GAAI,GAAIvF,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACzE,EAAC,IAAc,CAACqU,MAAO2W,YAAa,QAAS6uB,MAAM,OAAOz5C,GAAI,GAAI05C,QAASC,MAC3E,EAAC,IAAEr6C,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGE,GAAG,UAAUX,GAAI,IAC9B,EAAC,IAAEtD,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGE,GAAG,aAElB,EAAC,IAAEzD,QAAO,CAACqF,GAAI,GAAIlF,QAAQ,OAAOyf,OAAQ,CAAEjgB,GAAI,IAAKqa,GAAI,QAAU9U,cAAe,CAAEvF,GAAI,iBAAkBqa,GAAI,QAC5G,EAAC,IAAExa,IAAG,CAACya,KAAK,SACV,EAAC,IAAEza,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGE,GAAG,aAElB,EAAC,IAAEjE,IAAG,CAACU,GAAI,CAAEP,GAAI,KAAMqa,GAAI,MACzB,EAAC,IAAc,CAAC7F,MAAO2W,YAAa,WAAY6uB,MAAM,OAAOC,QAASC,SAI5E,EAAC,IAAEr6C,IAAG,CAACqD,SAAS,WAAWxJ,EAAG,CAAEsG,GAAI,SAAUC,GAAI,KAAOH,UAAU,gBAAgBC,YAAY,KAC7F,EAAC,IAAEM,QAAO,CAACiF,GAAI,GAAIvF,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUK,QAAQ,OAAOyf,OAAQ,IAC1G,EAAC,IAAEpgB,IAAG,CAACya,KAAK,SACV,EAAC,IAAEza,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,aAEzB,EAAC,IAAEjE,IAAG,KACJ,EAAC,IAAc,CAAC2U,MAAO2W,YAAa,UAAW6uB,MAAM,SAASC,QAASC,QAG3E,EAAC,IAAE75C,QAAO,CAAC+Z,GAAI,GAAIra,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUK,QAAQ,OAAOyf,OAAQ,IAC1G,EAAC,IAAEpgB,IAAG,CAACya,KAAK,SACV,EAAC,IAAEza,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,aAEzB,EAAC,IAAEjE,IAAG,KACJ,EAAC,IAAc,CAAC2U,MAAO2W,YAAa,UAAW6uB,MAAM,SAASC,QAASC,QAG3E,EAAC,IAAE75C,QAAO,CAAC+Z,GAAI,GAAIra,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACzE,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,aAEzB,EAAC,IAAEzD,QAAO,CAAC+Z,GAAI,GAAIra,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACzE,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,aAEzB,EAAC,IAAEzD,QAAO,CAAC+Z,GAAI,GAAIra,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACzE,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,aAEzB,EAAC,IAAEzD,QAAO,CAACqF,GAAI,IACb,EAAC,IAAE7F,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,gBAMlBq2C,EAA2B,SAAC97C,GAAK,OAC5CkX,MAAM,GAAG6kC,OAAOp2C,KAAI,SAACikB,EAAG3wB,GAAC,OACvB,EAAC,IAAE+I,QAAO,CAAC7C,IAAKlG,EAAGgO,GAAI,CAAElB,EAAG,OAAQkZ,SAAU,KAAO/c,GAAI,CAAE6D,EAAG,OAAQkZ,SAAU,KAAOvd,YAAa,CAAEqE,EAAG,YAAakZ,SAAU,KAAOpd,YAAY,QAAQC,YAAY,WACrK,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,iBAKjBu2C,EAAyB,WACpC,OACE,oBACE,EAAC,IAAIC,KAAI,CAACC,UAAU,OAAOz2C,GAAG,SAASiV,GAAI,GAAIqB,GAAI,EAAG7Z,GAAI,GAAIC,QAAQ,OAAOE,eAAe,gBAAgB03C,SAAS,UACnH,EAAC,IAAIjqC,IAAG,CAACE,GAAG,aAAW,aAGvB,EAAC,IAAIF,IAAG,CAACE,GAAG,kBAAgB,oBAI9B,EAAC,IAAImsC,MAAK,CAACnsC,GAAG,YAAY/I,GAAI,GAAI/E,GAAI,GAAIR,YAAY,YAAYG,YAAY,QAAQC,YAAY,WAChG,EAACg6C,EAAwB,OAE3B,EAAC,IAAIK,MAAK,CAACnsC,GAAG,iBAAiB/I,GAAI,GAAI/E,GAAI,GAAIR,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACrG,iBAMKs6C,EAAmB,WAC9B,OACE,oBACE,EAAC,IAAE56C,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO5E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,+DAAiEie,IAAK,CAAEje,GAAI,MAAQoF,GAAI,GAAI9E,GAAI,IAC9L,EAACw5C,EAAa,MACd,EAAC,IAAEW,MAAK,KACN,EAACL,EAAsB,MACvB,EAAC,IAAEx6C,IAAG,CAACuB,UAAU,SAASZ,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAS7L,EAAG,CAAEsG,GAAI,OAAQC,GAAI,MAC/H,EAAC,IAAEJ,IAAG,CAACqB,EAAG,IAAK0C,EAAG,IAAKE,GAAG,mBAiBzB62C,EAA6B,WACxC,OACE,oBACE,EAAC,IAAE96C,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO5E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,+DAAiEie,IAAK,CAAEje,GAAI,MAAQoF,GAAI,GAAI9E,GAAI,IAC9L,EAACw5C,EAAa,MACd,EAAC,IAAEW,MAAK,KACN,EAACL,EAAsB,MACvB,EAAC,IAAEx6C,IAAG,CAACuB,UAAU,SAASZ,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAS7L,EAAG,CAAEsG,GAAI,OAAQC,GAAI,MAC/H,EAAC,IAAEJ,IAAG,CAACqB,EAAG,IAAK0C,EAAG,IAAKE,GAAG,mBAiBzB82C,EAAoC,WAAH,OAC5C,EAAC,IAAE5F,KAAI,CAAC3vC,GAAI,CAAErF,GAAI,OAAQC,GAAI,SAAW8Y,GAAI,IAC3C,EAAC,IAAElZ,IAAG,CAAC+D,EAAG,IACV,EAAC+2C,EAA0B,QAIlBE,EAAsB,WACjC,OACE,EAAC,IAAEh7C,IAAG,CAACW,QAAS,CAAER,GAAI,GAAIC,GAAI,QAAU66C,UAAU,QAAQr1C,oBAAqB,CAAEzF,GAAI,GAAIC,GAAI,uCAAyCie,IAAK,CAAEje,GAAI,OAC9IsV,MAAM,GAAG6kC,OAAOp2C,KAAI,SAACikB,EAAG3wB,GAAC,OACxB,EAAC,IAAE+I,QAAO,CAAC7C,IAAKlG,EAAG4L,SAAS,WAAWpD,UAAU,gBAAgBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,IAAKqd,SAAU,KAAOvd,YAAa,CAAEC,GAAI,YAAaC,GAAI,IAAKqd,SAAU,KAAOpd,YAAY,QAAQC,YAAY,UAAUI,GAAI,CAAEP,GAAI,OAAQC,GAAI,IAAK86C,KAAM,MACrP,EAAC,IAAc,CAACvmC,MAAO2W,YAAa,UAAW6uB,MAAM,OAAOC,QAASC,MACrE,EAAC,IAAEr6C,IAAG,KACJ,EAAC,IAAEA,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,mBAQtBk3C,EAA2B,WACtC,OACE,EAAC,IAAEn7C,IAAG,CAACW,QAAS,CAAER,GAAI,GAAIC,GAAI,QAAU66C,UAAU,QAAQr1C,oBAAqB,CAAEzF,GAAI,GAAIC,GAAI,uCAAyCie,IAAK,CAAEje,GAAI,OAC9IsV,MAAM,GAAG6kC,OAAOp2C,KAAI,SAACikB,EAAG3wB,GAAC,OACxB,EAAC,IAAE+I,QAAO,CAAC7C,IAAKlG,EAAG4L,SAAS,WAAWpD,UAAU,gBAAgBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,IAAKqd,SAAU,KAAOvd,YAAa,CAAEC,GAAI,YAAaC,GAAI,IAAKqd,SAAU,KAAOpd,YAAY,QAAQC,YAAY,UAAUI,GAAI,CAAEP,GAAI,OAAQC,GAAI,IAAK86C,KAAM,MACrP,EAAC,IAAc,CAACvmC,MAAO2W,YAAa,UAAW6uB,MAAM,OAAOC,QAASC,MACrE,EAAC,IAAEr6C,IAAG,KACJ,EAAC,IAAEA,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,mBAQtBm3C,EAAyB,WACpC,OACE,EAAC,IAAEp7C,IAAG,CAACW,QAAS,CAAER,GAAI,GAAIC,GAAI,QAAUwF,oBAAqB,CAAEzF,GAAI,GAAIC,GAAI,uCAAyCie,IAAK,CAAEje,GAAI,MAAQM,GAAI,IACxIgV,MAAM,GAAG6kC,OAAOp2C,KAAI,SAACikB,EAAG3wB,GAAC,OACxB,EAAC,IAAE+I,QAAO,CAAC7C,IAAKlG,EAAG4L,SAAS,WAAWpD,UAAU,gBAAgBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,IAAKqd,SAAU,KAAOvd,YAAa,CAAEC,GAAI,YAAaC,GAAI,IAAKqd,SAAU,KAAOpd,YAAY,QAAQC,YAAY,UAAUI,GAAI,CAAEP,GAAI,OAAQC,GAAI,IAAK86C,KAAM,MACrP,EAAC,IAAEl7C,IAAG,CAACW,QAAQ,OAAO06C,OAAQ,GAAI31C,cAAc,UAC9C,EAAC,IAAE1F,IAAG,KACJ,EAAC,IAAc,CAACqB,EAAE,OAAOsT,MAAO2W,YAAa,UAAW6uB,MAAM,OAAOC,QAASC,OAEhF,EAAC,IAAEr6C,IAAG,KACJ,EAAC,IAAEA,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,oBASxBq3C,EAAyB,SAAC98C,GACrC,OACE,EAAC,IAAEwB,IAAG,CAACW,QAAS,CAAER,GAAI,GAAIC,GAAI,QAAU66C,UAAU,QAAQr1C,oBAAqB,CAAEzF,GAAI,GAAIC,GAAI,uCAAyCie,IAAK,CAAEje,GAAI,OAC9IsV,MAAM,GAAG6kC,OAAOp2C,KAAI,SAACikB,EAAG3wB,GAAC,OACxB,EAAC,IAAE+I,QAAO,CAAC7C,IAAKlG,EAAG4L,SAAS,WAAWpD,UAAU,gBAAgBpG,EAAG,CAAEsG,GAAI,aAAcC,GAAI,IAAKqd,SAAU,KAAOvd,YAAa,CAAEC,GAAI,YAAaC,GAAI,IAAKqd,SAAU,KAAOpd,YAAY,QAAQC,YAAY,UAAUI,GAAI,CAAEP,GAAI,OAAQC,GAAI,IAAK86C,KAAM,MACrP,EAAC,IAAc,CAACvmC,MAAO2W,YAAa,UAAW6uB,MAAM,OAAOC,QAASC,MACrE,EAAC,IAAEr6C,IAAG,KACJ,EAAC,IAAEA,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACsD,GAAI,EAAGS,EAAG,EAAGE,GAAG,mBAQtBs3C,EAA2B,WACtC,OACE,oBACE,EAAC,IAAEv7C,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO5E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,+DAAiEie,IAAK,CAAEje,GAAI,MAAQoF,GAAI,GAAI9E,GAAI,IAC9L,EAACw5C,EAAa,MACd,EAAC,IAAEW,MAAK,KACN,EAACL,EAAsB,MACvB,EAAC,IAAEx6C,IAAG,CAACuB,UAAU,SAASZ,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAS7L,EAAG,CAAEsG,GAAI,OAAQC,GAAI,MAC/H,EAAC,IAAEJ,IAAG,CAACqB,EAAG,IAAK0C,EAAG,IAAKE,GAAG,mBAiBzBu3C,EAAkC,WAAH,OAC1C,EAAC,IAAErG,KAAI,CAAC3vC,GAAI,CAAErF,GAAI,OAAQC,GAAI,SAAW8Y,GAAI,IAC3C,EAAC,IAAElZ,IAAG,CAAC+D,EAAG,IACV,EAACw3C,EAAwB,QAIhBE,EAAsB,WACjC,OACE,oBACE,EAAC,IAAEz7C,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO5E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,+DAAiEie,IAAK,CAAEje,GAAI,MAAQoF,GAAI,GAAI9E,GAAI,IAC9L,EAAC,IAAa,OAEhB,EAAC,IAAEV,IAAG,CAACua,GAAI,GAAIjX,GAAI,GAAIiC,IAAK,GAAIhE,UAAU,SAASZ,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,UAC1H,EAAC,IAAE1F,IAAG,CAACqB,EAAG,IAAK0C,EAAG,IAAKE,GAAG,eAE5B,EAAC,IAAEjE,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAAC81C,EAAsB,MACvB,EAACN,EAAmB,MACpB,EAACG,EAAwB,SAMpBO,EAA2B,WACtC,OACE,oBACE,EAAC,IAAE17C,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAO5E,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQC,GAAI,+DAAiEie,IAAK,CAAEje,GAAI,MAAQoF,GAAI,GAAI9E,GAAI,IAC9L,EAACw5C,EAAa,MACd,EAAC,IAAEW,MAAK,KACN,EAACL,EAAsB,MACvB,EAAC,IAAEx6C,IAAG,CAACuB,UAAU,SAASZ,QAAQ,OAAOE,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAS7L,EAAG,CAAEsG,GAAI,OAAQC,GAAI,MAC/H,EAAC,IAAEJ,IAAG,CAACqB,EAAG,IAAK0C,EAAG,IAAKE,GAAG,mBAiBzB03C,EAAqB,WAChC,OACE,oBACE,EAAC,IAAE37C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAAC,IAAExF,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAOjC,GAAI,GAAIpD,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACxG,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAG+E,GAAI,GAAIxB,GAAG,aAEjC,EAAC23C,EAAqB,MACtB,EAAC,IAAE57C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAACw1C,EAAmB,OAEtB,EAAC,IAAEh7C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAACw1C,EAAmB,UAOjBY,EAAwB,SAACp9C,GACpC,OACE,EAAC,IAAEwB,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAG+E,GAAI,GAAIxB,GAAG,aAItB43C,EAAoB,WAC/B,OACE,EAAC,IAAE77C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOxB,EAAG,KAAMyB,GAAI,MAK9Cs2C,EAAoB,WAC/B,OACE,oBACE,EAAC,IAAE97C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAAC,IAAExF,IAAG,CAACqB,EAAE,OAAOiE,SAAU,KAAMC,GAAG,OAAOjC,GAAI,GAAIpD,YAAY,YAAYG,YAAY,QAAQC,YAAY,WACxG,EAAC,IAAEN,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAG+E,GAAI,GAAIxB,GAAG,aAEjC,EAAC,IAAEjE,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAACw1C,EAAmB,OAEtB,EAAC,IAAEh7C,IAAG,CAACsF,SAAU,KAAMjE,EAAE,OAAOkE,GAAG,OAAOC,GAAI,IAC5C,EAACw1C,EAAmB,UAOjBe,EAAqB,WAAH,OAC7B,oBACE,EAAC,IAAE5G,KAAI,CAACj8B,GAAI,CAAE/Y,GAAI,OAAQI,KAAM,SAAWiF,GAAI,CAAErF,GAAI,OAAQC,GAAI,SAAWiB,EAAE,OAAOiE,SAAU,CAAEnF,GAAI,SAAUI,KAAM,UAAYgF,GAAG,OAAO7E,GAAI,IAC7I,EAAC,IAAEV,IAAG,CAACqD,SAAS,WAAWhC,EAAE,OAAOiE,SAAU,CAAEnF,GAAI,SAAUI,KAAM,UAAYgF,GAAG,QACjF,EAAC,IAAEvF,IAAG,CAACqB,EAAE,OAAOiE,SAAU,CAAEnF,GAAI,SAAUI,KAAM,UAAakF,GAAI,GAAInC,GAAI,GAAIiC,GAAG,OAAOrF,YAAY,YAAYG,YAAY,QAAQC,YAAY,WAC7I,EAAC,IAAEqF,GAAE,CAACrE,KAAK,KAAKF,GAAI,CAAEjB,GAAI,IAAKC,GAAI,QAAUM,GAAI,CAAEP,GAAI,KAAMC,GAAI,KAAOiB,EAAG,CAAElB,GAAI,OAAQC,GAAI,SAAS,oBAExG,EAAC,IAAEJ,IAAG,CAACqD,SAAS,WAAWhC,EAAE,OAAOiE,SAAU,CAAEnF,GAAI,SAAUI,KAAM,UAAYgF,GAAG,QACjF,EAAC,IAAE4hC,GAAE,CAAC7lC,KAAK,KAAKpB,YAAY,YAAYG,YAAY,QAAQC,YAAY,UAAUmF,GAAI,GAAI/E,GAAI,IAC5F,EAAC,IAAEV,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGW,EAAE,MAAM4C,GAAG,cAGnC,EAACm3C,EAAsB,UAMlBY,EAAiB,WAC5B,OACE,EAAC,IAAEh8C,IAAG,CAACW,QAAS,CAAER,GAAI,QAASC,GAAI,QAAUwF,oBAAqB,CAAEzF,GAAI,QAASC,GAAI,eACnF,EAAC,IAAEJ,IAAG,CAACqB,EAAG,CAAElB,GAAI,OAAQC,GAAI,SAAW2D,EAAG,CAAE5D,GAAI,OAAQC,GAAI,SAAW6D,GAAG,UAAUkL,aAAa,SACjG,EAAC,IAAEnP,IAAG,CAACoiB,GAAI,IACT,EAAC,IAAEvoB,EAAC,CAACyH,KAAK,QAAM,cAChB,EAAC,IAAEtB,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,YACvB,EAAC,IAAEjE,IAAG,CAACqB,EAAE,MAAM0C,EAAG,EAAGE,GAAG,YACxB,EAAC,IAAEjE,IAAG,CAACW,QAAQ,OAAOyf,OAAQ,GAAI5a,GAAI,GAAIvF,UAAU,iBAClD,EAAC,IAAED,IAAG,CAACqB,EAAG,GAAI0C,EAAG,GAAIE,GAAG,UAAUkL,aAAa,SAC/C,EAAC,IAAEnP,IAAG,CAACqB,EAAG,GAAI0C,EAAG,GAAIE,GAAG,UAAUkL,aAAa,SAC/C,EAAC,IAAEnP,IAAG,CAACqB,EAAG,GAAI0C,EAAG,GAAIE,GAAG,UAAUkL,aAAa,SAC/C,EAAC,IAAEnP,IAAG,CAACqB,EAAG,GAAI0C,EAAG,GAAIE,GAAG,UAAUkL,aAAa,aAO5C8sC,EAAsB,WAAH,OAC9B,EAAC,IAAEz7C,QAAO,CAACP,UAAU,eAAeoB,EAAE,OAAOiE,SAAS,SAAS5I,EAAE,QAC/D,EAAC,IAAEsD,IAAG,CAACW,QAAQ,OAAOiF,oBAAqB,CAAEzF,GAAI,OAAQqa,GAAI,oBAAsB6D,IAAK,CAAEle,GAAI,IAAKK,QAAS,MAAQI,WAAW,UAC7H,EAAC,IAAEi6C,MAAK,CAACl6C,QAAS,CAAER,GAAI,OAAQqa,GAAI,SAAWvB,WAAY,CAAE9Y,GAAI,SAAUqa,GAAI,YAC7E,EAACwhC,EAAc,OAEjB,EAAC,IAAEh8C,IAAG,CAACqB,EAAE,OAAOiE,SAAS,QAAQ5I,EAAE,UACjC,EAAC,IAAEsD,IAAG,CAACqB,EAAE,OAAOX,GAAI,GAAI8E,GAAI,CAAErF,GAAI,MAAOC,GAAI,QAAU2D,EAAG,GAAIE,GAAG,WACjE,EAAC,IAAEjE,IAAG,CAACqB,EAAE,OAAOX,GAAI,CAAEP,GAAI,OAAQC,GAAI,QAAU2D,EAAG,GAAIE,GAAG,WAC1D,EAAC,IAAc,CAAC0Q,MAAO2W,YAAa,YAAa6uB,MAAM,OAAO9lC,OAAO,EAAO+lC,QAASC,MACrF,EAAC,IAAEr6C,IAAG,CAACqB,EAAE,OAAOiE,SAAS,QAAQ5I,EAAE,QACjC,EAAC,IAAEsD,IAAG,CAACsB,KAAK,QAAQgC,GAAI,IAAI,YAAI,EAAC,IAAEtD,IAAG,CAACiE,GAAG,SAASF,EAAG,EAAG1C,EAAE,OAAO8N,cAAY,MAC9E,EAAC,IAAEnP,IAAG,CAAC+D,EAAG,EAAGrD,GAAI,EAAGuD,GAAG,cAG3B,EAAC,IAAE42C,MAAK,CAACx5C,EAAE,OAAOiE,SAAS,QAAQ5I,EAAE,OAAOgE,GAAI,GAAIC,QAAS,CAAER,GAAI,QAASK,QAAS,QAAUyY,WAAY,CAAE9Y,GAAI,UAAWK,QAAS,WACnI,EAACw7C,EAAc,OAEjB,EAAC,IAAEh8C,IAAG,CAACuB,UAAU,SAASV,eAAe,SAASD,WAAW,SAAS8E,cAAc,SAAShF,GAAI,GAAIC,QAAS,CAAER,GAAI,OAAQK,QAAS,QAAUyY,WAAY,CAAE9Y,GAAI,SAAUK,QAAS,YAClL,EAAC,IAAER,IAAG,CAACiE,GAAG,SAAS5C,EAAG,IAAK0C,EAAG,UAMzBm4C,EAA6B,WAAH,OACrC,EAAC,IAAE/G,KAAI,CAAC3vC,GAAI,CAAErF,GAAI,OAAQC,GAAI,SAAW8Y,GAAI,IAC3C,EAAC,IAAElZ,IAAG,CAAC+D,EAAG,IACV,EAACk4C,EAAmB,S,qBChbxB7iD,EAAOD,QAAU,IAA0B,0C,kCCE3C,SAASsW,EAAQC,GAAkC,OAAOD,EAAU,mBAAqBtS,QAAU,iBAAmBA,OAAOwS,SAAW,SAAUD,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBvS,QAAUuS,EAAIE,cAAgBzS,QAAUuS,IAAQvS,OAAOtF,UAAY,gBAAkB6X,IAAgBA,GAEzU9X,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAQioC,aAAU,EAClBjoC,EAAQgjD,MAAQA,EAChBhjD,EAAQijD,UAAYA,EACpBjjD,EAAQomC,WAuFR,WACE,GAAsB,qBAAXphC,OAAwB,CACjCF,QAAQkW,KAAK,iCACb,IACIkoC,EADUl+C,OACWm+C,UAEzBD,EAAWE,IAAItkD,MAAK,WAClB8xB,EAAOtF,SAAQ,SAAUriB,GACvB,OAAOi6C,EAAWG,SAASzjC,oBAAoB,kBAAmB3W,MAEpE2nB,EAAOtF,SAAQ,SAAUriB,GACvB,OAAOi6C,EAAWG,SAASzjC,oBAAoB,gBAAiB3W,MAGlEi6C,EAAWI,kBAGbC,EAAQ,GACRC,EAAkB,KAxGtBxjD,EAAiB,aAAI,EACrBA,EAAQyjD,iBAiKR,WACE3kC,EAAQpM,iBAAkB,GAjK5B1S,EAAQ0jD,iBAgIR,WACE5kC,EAAQ6kC,iBAAkB,GAhI5B3jD,EAAQ4jD,0BAuKR,WACE9kC,EAAQlM,0BAA2B,GAvKrC5S,EAAQ6jD,oBAsJR,WACE/kC,EAAQnM,oBAAqB,GAtJ/B3S,EAAQ8jD,oBA6IR,WACEhlC,EAAQvM,oBAAqB,GA7I/BvS,EAAQ+jD,gBAgIR,WACEjlC,EAAQrM,gBAAiB,GAhI3BzS,EAAQgkD,0BA2KR,WACEllC,EAAQjM,0BAA2B,GA3KrC7S,EAAQ0S,gBAsJR,WACEoM,EAAQpM,iBAAkB,GAtJ5B1S,EAAQ2jD,gBAiHR,WACE7kC,EAAQ6kC,iBAAkB,GAjH5B3jD,EAAQ4S,yBA4JR,WACEkM,EAAQlM,0BAA2B,GA5JrC5S,EAAQ2S,mBA2IR,WACEmM,EAAQnM,oBAAqB,GA3I/B3S,EAAQuS,mBAkIR,WACEuM,EAAQvM,oBAAqB,GAlI/BvS,EAAQwS,eAmGR,WACEsM,EAAQtM,gBAAiB,GAnG3BxS,EAAQyS,eAgHR,WACEqM,EAAQrM,gBAAiB,GAhH3BzS,EAAQ6S,yBA+JR,WACEiM,EAAQjM,0BAA2B,GA/JrC7S,EAAQsS,oBA4FR,WACEwM,EAAQxM,qBAAsB,GA5FhCtS,EAAQikD,SAqCR,WACE,OAAOV,GArCTvjD,EAAQkkD,mBAwHR,WACE,OAAOplC,EAAQ6kC,iBAxHjB3jD,EAAQwmC,qBAiGR,SAA8BhT,GAC5B2vB,UAAUC,IAAItkD,MAAK,WACjBqkD,UAAU37C,QAAQgsB,OAjGtB,IAMgCjd,EAN5BsU,EAUJ,SAAiCtU,EAAKU,GAAe,IAAKA,GAAeV,GAAOA,EAAIlS,WAAc,OAAOkS,EAAO,GAAY,OAARA,GAAiC,WAAjBD,EAAQC,IAAoC,oBAARA,EAAsB,MAAO,CAAE,QAAWA,GAAS,IAAI/C,EAAQ0D,EAAyBD,GAAc,GAAIzD,GAASA,EAAM2D,IAAIZ,GAAQ,OAAO/C,EAAM1P,IAAIyS,GAAQ,IAAIa,EAAS,GAAQC,EAAwB5Y,OAAOmF,gBAAkBnF,OAAO6Y,yBAA0B,IAAK,IAAI9S,KAAO+R,EAAO,GAAY,YAAR/R,GAAqB/F,OAAOC,UAAUC,eAAeC,KAAK2X,EAAK/R,GAAM,CAAE,IAAI+S,EAAOF,EAAwB5Y,OAAO6Y,yBAAyBf,EAAK/R,GAAO,KAAU+S,IAASA,EAAKzT,KAAOyT,EAAK3D,KAAQnV,OAAOmF,eAAewT,EAAQ5S,EAAK+S,GAAgBH,EAAO5S,GAAO+R,EAAI/R,GAAY4S,EAAgB,QAAIb,EAAS/C,GAASA,EAAMI,IAAI2C,EAAKa,GAAW,OAAOA,EAVrxBI,CAAwB,EAAQ,SAEzC2sC,GAI4B5tC,EAJY,EAAQ,UAICA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GAFrF6tC,EAAY,EAAQ,QAIxB,SAASltC,EAAyBD,GAAe,GAAuB,oBAAZS,QAAwB,OAAO,KAAM,IAAIC,EAAoB,IAAID,QAAeE,EAAmB,IAAIF,QAAW,OAAQR,EAA2B,SAAkCD,GAAe,OAAOA,EAAcW,EAAmBD,IAAsBV,GAIhU,IAAIssC,EAAQ,GACRC,EAAkB,GAClB5yB,EAAS,GACT9R,EAAU,CACZxM,qBAAqB,EACrBE,gBAAgB,EAChBmxC,iBAAiB,EACjBlxC,gBAAgB,EAChBF,oBAAoB,EACpBI,oBAAoB,EACpBD,iBAAiB,EACjBE,0BAA0B,EAC1BC,0BAA0B,GAGN,qBAAX7N,SACTA,OAAOm+C,UAAYn+C,OAAOm+C,WAAa,CACrCC,IAAK,KAoIT,SAASH,EAAUr2B,GACjB,IAAI4G,EAAS5G,EAAK4G,OACd3iB,EAAO+b,EAAK/b,KACZ4iB,EAAY7G,EAAK6G,UACjB3sB,EAAY8lB,EAAK9lB,UACjByJ,EAAQqc,EAAKrc,MACbiuC,EAAU5xB,EAAK4xB,QACf6F,EAASz3B,EAAKy3B,OACdjxB,EAAcxG,EAAKwG,YACnBkxB,EAAmB13B,EAAK03B,iBACxB/wB,EAAkB3G,EAAK2G,gBACvBF,EAAoBzG,EAAKyG,kBACzBY,EAAqBrH,EAAKqH,mBAwM9B,OAvMA,EAAIpJ,EAAO/hB,YAAW,WACpB,IACIq6C,EADWn+C,OACUm+C,UAErBoB,EAAsB,SAA6B/iD,GACrD,GAAIA,EAAMkyB,KAAM,CACd,IAAI8wB,EAAa,GAMjB,GAJAA,EAAW1lD,KAAKL,OAAOgmD,oBAAoBhxB,GAAW,IAEtD+wB,EAAW1lD,KAAK20B,EAAU+wB,EAAW,KAEjChjD,EAAMkyB,OAAS6vB,EAAM/vB,GAAS,CAChC,IAAIkxB,EAASn0C,EAAMvF,KAAI,SAAU25C,GAC/B,OAAOA,EAAK9wB,KAAK,QAChBA,KAAK,KAER/uB,QAAQ+O,IAAI,mBAAoB,aAAc2wC,EAAW3wB,KAAK,KAAM,QAAShjB,EAAM,SAAU6zC,EAAQ,WAAYlG,EAAS,WAAYh9C,EAAM2Z,QAAS,SAAU3Z,GAE3J6xB,GACFA,EAAkB7xB,MAMtBojD,EAAkB,SAAyBpjD,GACzCA,EAAMkyB,OAAS6vB,EAAM/vB,IAAWD,IAClC/xB,EAAM+O,MAAQA,EACd/O,EAAMwyB,YAAcwqB,EACpBh9C,EAAMgyB,OAASA,EACfD,EAAgB/xB,KAIpB2hD,EAAUC,IAAItkD,MAAK,WACjB8xB,EAAO9xB,KAAKylD,GACZ3zB,EAAO9xB,KAAK8lD,GACZzB,EAAUE,SAAS1jC,iBAAiB,kBAAmB4kC,GACvDpB,EAAUE,SAAS1jC,iBAAiB,gBAAiBilC,QAEtD,KACH,EAAI/5B,EAAO/hB,YAAW,WACpB,IACIq6C,EADWn+C,OACUm+C,UACzBA,EAAUC,IAAItkD,MAAK,WACjBqkD,EAAUE,SAAS1jC,iBAAiB,sBAAsB,SAAUne,GAClE,IAAIkyB,EAAOlyB,EAAMkyB,KAEjB,GAAIA,EAAKE,aAAa,WAAW3X,QAAQ,SAAW,EAAG,CACrD,IAAI4oC,EAAgBnxB,EAAKC,mBAEzB,GAAI6vB,EAAgBvnC,QAAQyX,GAAQ,EAAG,CACrC,IAAIoxB,EAAgBpxB,EAAKE,aAAa,eAAe,GACrD9uB,QAAQ+O,IAAI,iCAAkCixC,EAAe,YAAaD,EAAc,GAAI,IAAKnxB,EAAKE,aAAaixB,EAAc,KACjIrB,EAAgB1kD,KAAK40B,GACrBtwB,YAAW,WACT+/C,EAAUE,SAAS0B,QAAQ,CAACrxB,IAC5B,IAAIsxB,EAAMxB,EAAgBvnC,QAAQyX,GAE9BsxB,GAAO,GACTxB,EAAgB9jD,OAAOslD,EAAK,KAEb,IAAhBF,aAKV,KAEH,EAAIj6B,EAAO/hB,YAAW,WACpB,IACIq6C,EADWn+C,OACUm+C,UAEzB,IAAKI,EAAM/vB,GAAS,CAClB+vB,EAAM/vB,GAAU,UAChB,IAAIgxB,EAAa,GAEb/wB,IACF+wB,EAAW1lD,KAAKL,OAAOgmD,oBAAoBhxB,GAAW,IAEtD+wB,EAAW1lD,KAAK20B,EAAU+wB,EAAW,MAGvCrB,EAAUC,IAAItkD,MAAK,WACjB,IACE,IAAI40B,EAEJ,OAAQ2wB,GACN,IAAK,MACH3wB,EAAOyvB,EAAU8B,oBAAoBp0C,EAAMsyC,EAAU+B,MAAMC,gBAAgBC,YAC3E,MAEF,IAAK,SACH1xB,EAAOyvB,EAAU8B,oBAAoBp0C,EAAMsyC,EAAU+B,MAAMC,gBAAgBE,eAC3E,MAEF,IAAK,eACCvmC,EAAQvM,qBACVmhB,EAAOyvB,EAAU8B,oBAAoBp0C,EAAMsyC,EAAU+B,MAAMC,gBAAgBG,eACtEC,WAAWpC,EAAUE,UAAUmC,UAAU,CAC5Ctc,aAAc,CACZuc,SAAU,CACRC,QAAQ,EACRC,cAAc,MAMtB,MAEF,QACEjyB,EAAOyvB,EAAUyC,WAAW/0C,EAAMN,EAAOijB,GAG7C,IAAKE,EAOH,YANA5uB,QAAQlC,MAAM,mCAAoC,CAChDyhD,OAAQA,EACRxzC,KAAMA,EACNN,MAAOA,EACPijB,OAAQA,IAKRgrB,GAAW1/B,EAAQrM,gBACrBihB,EAAKmyB,kBAAkBrH,GAGzB9qB,EAAKoyB,sBAAsBxB,GAC3B5wB,EAAK6xB,WAAWpC,EAAUE,UAEtBmB,EAAWhmD,QACbk1B,EAAKqyB,aAAavB,EAAW,GAAIA,EAAW,IAG1CpxB,IACFM,EAAKqyB,aAAa,UAAW,QAC7BryB,EAAKqyB,aAAa,cAAe3yB,IAGnCmwB,EAAM/vB,GAAUE,EAEZO,GACFA,EAAmBT,GAGjB1U,EAAQtM,gBAEV2wC,EAAUE,SAAS7wC,eAAe,CAChCwzC,mBAAoB,IACpBC,oBAAqB,IACrBC,cAAe,IAIfpnC,EAAQxM,oBACV6wC,EAAUE,SAAS/wC,sBAEnB6wC,EAAUC,IAAItkD,MAAK,WACjBqkD,EAAU37C,QAAQgsB,MAIlB1U,EAAQlM,0BACVuwC,EAAUE,SAAS0C,aAAa,aAAc,IAG5CjnC,EAAQjM,0BACVswC,EAAUE,SAAS0C,aAAa,UAAW,IAGzCjnC,EAAQpM,iBACVywC,EAAUE,SAAS0C,aAAa,MAAO,IAGrCjnC,EAAQnM,oBACVwwC,EAAUE,SAAS0C,aAAa,SAAU,IAG5C5C,EAAUgD,iBACV,MAAOhmD,GACP2E,QAAQlC,MAAMzC,EAAE8C,SAEhB,IAAIyhD,EAASn0C,EAAMvF,KAAI,SAAU25C,GAC/B,OAAOA,EAAK9wB,KAAK,QAChBA,KAAK,KAER/uB,QAAQlC,MAAM,UAAW,CACvByhD,OAAQA,EACR5wB,UAAW+wB,EAAW3wB,KAAK,KAC3BhjB,KAAMA,EACNN,MAAOm0C,WAKd,CAACjxB,EAAW5iB,EAAMN,EAAOijB,EAAQ8wB,EAAkBjxB,IAClCxI,EAAgB,QAAEzpB,cAAc,MAAO,CACzDiU,GAAIme,EACJ1sB,UAAWA,IAIf,SAASk8C,EAAMx1B,GACb,IAAIgG,EAAShG,EAAMgG,OACf3iB,EAAO2c,EAAM3c,KACb4iB,EAAYjG,EAAMiG,UAClBL,EAAc5F,EAAM4F,YACpBtsB,EAAY0mB,EAAM1mB,UAClBs/C,EAAW54B,EAAM44B,SACjB5H,EAAUhxB,EAAMgxB,QAChB6F,EAAS72B,EAAM62B,OACflc,EAAU3a,EAAM2a,QAChBC,EAAS5a,EAAM4a,OACfC,EAAS7a,EAAM6a,OACfic,EAAmB92B,EAAM82B,iBACzB/wB,EAAkB/F,EAAM+F,gBACxBF,EAAoB7F,EAAM6F,kBAC1BY,EAAqBzG,EAAMyG,mBAE3BuwB,EAAa,GAMjB,OAJAA,EAAW1lD,KAAKL,OAAOgmD,oBAAoBhxB,GAAW,IAEtD+wB,EAAW1lD,KAAK20B,EAAU+wB,EAAW,KAErB,QAAXH,GAA+B,WAAXA,GAAyBvlC,EAAQ6kC,gBAItC94B,EAAgB,QAAEzpB,cAAc+iD,EAAwB,QAAG,KAA6Bt5B,EAAgB,QAAEzpB,cAAcypB,EAAgB,QAAEmd,SAAU,KAAmBnd,EAAgB,QAAEzpB,cAAcgjD,EAAUjH,QAAS,KAAMhV,GAAWA,EAAQ3pC,OAAS,GAAkBqsB,EAAgB,QAAEzpB,cAAc,MAAO,CACvU0F,UAAWA,GAAa,UACV+jB,EAAgB,QAAEzpB,cAAcypB,EAAgB,QAAEmd,SAAU,KAAMoe,GAAyBv7B,EAAgB,QAAEzpB,cAAc,QAAS,KAAM,iBAA+BypB,EAAgB,QAAEzpB,cAAc6hD,EAAW,CAClOxvB,UAAWA,EACX5iB,KAAMA,EACNN,MAAO43B,EACPqW,QAASA,EACTprB,YAAaA,EACbkxB,iBAAkBA,EAClB9wB,OAAQA,EACR1sB,UAAW,GACXu9C,OAAQA,EACRhxB,kBAAmBA,EACnBE,gBAAiBA,EACjBU,mBAAoBA,OACFpJ,EAAgB,QAAEzpB,cAAcgjD,EAAUxH,OAAQ,KAAMxU,GAAUA,EAAO5pC,OAAS,GAAkBqsB,EAAgB,QAAEzpB,cAAc,MAAO,CAC7J0F,UAAWA,GAAa,UACV+jB,EAAgB,QAAEzpB,cAAcypB,EAAgB,QAAEmd,SAAU,KAAMoe,GAAyBv7B,EAAgB,QAAEzpB,cAAc,QAAS,KAAM,iBAA+BypB,EAAgB,QAAEzpB,cAAc6hD,EAAW,CAClOxvB,UAAWA,EACX5iB,KAAMA,EACNN,MAAO63B,EACPoW,QAASA,EACTprB,YAAaA,EACbkxB,iBAAkBA,EAClB9wB,OAAQA,EACR1sB,UAAW,GACXu9C,OAAQA,EACRhxB,kBAAmBA,EACnBE,gBAAiBA,EACjBU,mBAAoBA,OACFpJ,EAAgB,QAAEzpB,cAAcgjD,EAAUtH,OAAQ,KAAMzU,GAAUA,EAAO7pC,OAAS,GAAkBqsB,EAAgB,QAAEzpB,cAAc,MAAO,CAC7J0F,UAAWA,GAAa,UACV+jB,EAAgB,QAAEzpB,cAAcypB,EAAgB,QAAEmd,SAAU,KAAMoe,GAAyBv7B,EAAgB,QAAEzpB,cAAc,QAAS,KAAM,iBAA+BypB,EAAgB,QAAEzpB,cAAc6hD,EAAW,CAClOxvB,UAAWA,EACX5iB,KAAMA,EACNN,MAAO83B,EACPmW,QAASA,EACTprB,YAAaA,EACbkxB,iBAAkBA,EAClB9wB,OAAQA,EACR1sB,UAAW,GACXu9C,OAAQA,EACRhxB,kBAAmBA,EACnBE,gBAAiBA,EACjBU,mBAAoBA,SAvDV,GAQH,KApVXj0B,EAAQioC,QA1BM,CACZK,YAAa,CACXH,QAAS,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,MACtCC,OAAQ,CAAC,CAAC,IAAK,KACfC,OAAQ,CAAC,CAAC,IAAK,IAAK,CAAC,IAAK,MAE5Bge,WAAY,CACVle,QAAS,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,MAC5BC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,OAE7Bie,WAAY,CACVle,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,OAEjBK,IAAK,CACHP,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,OAE7Bke,UAAW,CACTpe,QAAS,CAAC,CAAC,IAAK,MAChBC,OAAQ,CAAC,CAAC,IAAK,MACfC,OAAQ,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,QA6a/B,IAAIza,EAAWo1B,EACfhjD,EAAiB,QAAI4tB,G,qBC1gBrB3tB,EAAOD,QAAU,IAA0B,yC,qBCA3CC,EAAOD,QAAU,IAA0B,yC,mPC2qC5BwmD,EA1qCb,CACE,CACE,CACEC,WAAY,EACZC,eAAgB,KAChBC,aAAc,8DAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,yCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8CAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4DAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,yCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,0BAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,0BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAGlB,CACE,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gDAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAKpB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uBAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,0CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,6BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,yCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,gCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,yCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qEAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,oCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,sDAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAGlB,CACE,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,kCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,+BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,uCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,yCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,qCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,8CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,iCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,4CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2CAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2BAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,mCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,wCAEhB,CACEF,WAAY,EACZC,eAAgB,KAChBC,aAAc,2C,qBC37BJxiB,GAnNLyiB,EAAgB,yBAEhBC,EAAgB,yBAUvBC,EAAmB,CACvBC,EAAG,eACHC,EAAG,aACHC,EAAG,UACHC,EAAG,gBACH/Z,EAAG,aACHC,EAAG,gBACH+Z,EAAG,UACH9Z,EAAG,aACH+Z,EAAG,gBAECC,EAAuB,CAC3BC,GAAI,eACJC,GAAI,aACJC,GAAI,UACJC,IAAK,gBACLC,GAAI,aACJC,GAAI,gBACJC,IAAK,UACLC,GAAI,aACJC,GAAI,gBAGAC,EAAuB,CAC3B,eAAgB,KAChB,aAAc,KACdC,QAAS,KACT,gBAAiB,MACjBC,WAAY,KACZ,gBAAiB,KACjBC,QAAS,MACT,aAAc,KACd,eAAgB,MAGZC,EAAoB,CACxBC,SAAU,CAAEC,OAAQ,CAAC,IAAK,IAAKC,KAAM,IACrC,eAAgB,CAAED,OAAQ,CAAC,MAAO,IAAKC,KAAM,IAC7C,aAAc,CAAED,OAAQ,CAAC,IAAK,OAAQC,KAAM,IAC5CN,QAAS,CAAEK,OAAQ,CAAC,IAAK,IAAKC,KAAM,IACpC,gBAAiB,CAAED,OAAQ,CAAC,IAAK,IAAKC,KAAM,IAC5CJ,QAAS,CAAEG,OAAQ,CAAC,IAAK,IAAKC,KAAM,IACpCL,WAAY,CAAEI,OAAQ,CAAC,IAAK,OAAQC,KAAM,IAC1C,aAAc,CAAED,OAAQ,CAAC,IAAK,IAAKC,KAAM,IACzC,gBAAiB,CAAED,OAAQ,CAAC,IAAK,IAAKC,KAAM,IAC5C,eAAgB,CAAED,OAAQ,CAAC,IAAK,IAAKC,KAAM,KAIvC90C,EAAQC,cAAO,SACN80C,EAAa,+CAc3B,OAd2B,kCAA5B,WAA8B/jD,GAAG,iGACVgP,EAAM1P,IAAIU,GAAI,OAAvB,KAANnF,EAAS,EAAH,MACA,CAAF,wCACDA,GAAM,gCAER4M,IAAMnI,IAAI,GAAD,OAPiC,kBAOnB,YAAIU,IAC/BtC,MAAK,SAAAyR,GAEJ,OAAOH,EAAMI,IAAIpP,EAAKmP,EAAS3V,SAC/B,OACK,SAAA4E,GAEL,MADAkC,QAAQlC,MAAMA,EAAMK,SACdL,MACN,4CACL,+BACc4lD,EAAuB,iDAErC,OAFqC,kCAAtC,WAAwCC,EAAaC,GAAO,oGACnDH,EAAc,GAAD,OAAIE,EAAW,YAAIC,KAAU,4CAClD,+BACcC,EAAqB,iDAEnC,OAFmC,kCAApC,WAAsCD,EAASE,GAAU,oGAChDL,EAAc,uBAAD,OAAwBG,EAAO,YAAIE,KAAa,4CACrE,+BACcC,EAA2B,mDAEzC,OAFyC,kCAA1C,WAA4CH,EAASE,EAAYE,GAAc,oGACtEP,EAAc,eAAD,OAAgBG,EAAO,YAAIE,EAAU,YAAIE,KAAiB,4CAC/E,+BACcC,EAAoB,+CAElC,OAFkC,kCAAnC,WAAqC1zC,GAAE,oGAC9BkzC,EAAc,gBAAD,OAAiBlzC,KAAK,4CAC3C,+BACc2zC,EAAiC,+CAE/C,OAF+C,kCAAhD,WAAkDN,GAAO,oGAChDH,EAAc,6BAAD,OAA8BG,KAAU,4CAC7D,+BACcO,EAAwB,kCAIvC,aAFC,OAED,kCAJA,WAAyCP,GAAO,oGACvCH,EAAc,oBAAD,OAAqBG,KAAU,4CACpD,sBAGM,IAAMQ,EAAwB,SAACC,GACpC,OAAIA,EAAS3qD,OAAS,EACbupD,EAAqBoB,GAEvB9B,EAAqB8B,IAGjBC,EAAoB,SAACC,EAAiBC,GAGjD,OAFqB9C,EAAsBlU,SAAS+W,GAAmB,GACrC7/C,QAAO,SAAA+/C,GAAa,OAAIA,EAAc5C,aAAal9C,cAAcmtB,SAAS0yB,EAAe7/C,kBACvG,GAAGi9C,gBAYZ8C,EAA+B,SAACd,GAAO,MAAM,CAAErnD,KAnHhB,wCAmHoDqnD,YACnFe,EAAmB,SAACf,GAAO,MAAM,CAAErnD,KAhHd,8BAgHwCqnD,YAEpEp0C,EAAe,CACnBo1C,QAAS,WACTtI,MAAM,EACNiH,OAAQ,CAAC,IAAK,IACdC,KAAM,GACNqB,aAAc,KACdf,WAAY,KACZE,eAAgB,KAChBc,iBAAkB,KAClBC,kBAAmB,GACnBC,gBAAiB,GACjB36C,UAAU,EACVu5C,QAAS,KACTqB,aAAc,KACdC,SAAU,KACVC,aAAc,KACdC,cAAe,KACfC,uBAAwB,KACxBC,WAAY,IAGd,SAAWC,EAAmB,OAAI3B,EAAO,EAAPA,QAAO,2HAIrC,OAHI4B,EAAU,GACVC,EAAe,CAAC,kBAAmB,qBAAoB,kBAErDlqD,QAAQiD,IAAIinD,EAAav/C,KAAI,SAAAy9C,GAAW,OAC5CD,EAAwBC,EAAaC,GAASxmD,MAAK,SAAAsoD,GAGjD,OAFAF,EAAQ7B,GAAe+B,EACvB1lD,QAAQ+O,IAAI,YAAay2C,GAClBA,SAET,OACF,OADE,SACIt2C,YAAI,CAAE3S,KAzKoB,gCAyKQ4S,QAASq2C,IAAU,8BAE3D,OAF2D,mCAErDt2C,YAAI,CAAE3S,KA1KkB,8BA0KQ4S,QAAS,KAAMhR,UAAU,uDAb1B,GAiBzC,SAAWwnD,EAAkB,OAAI/B,EAAO,EAAPA,QAASE,EAAU,EAAVA,WAAU,yHAGtC,OAHsC,kBAGhChqD,YAAK+pD,EAAuBD,EAASE,GAAW,OAChE,OADA0B,EAAU,EAAH,cACDt2C,YAAI,CAAE3S,KA3K6B,yCA2KQ4S,QAASq2C,EAAS1B,eAAa,8BAEhF,OAFgF,mCAE1E50C,YAAI,CAAE3S,KA5K2B,uCA4KQ4S,QAAS,KAAMhR,UAAU,uDANxB,GAUpD,SAAWynD,EAAwB,OAAIhC,EAAO,EAAPA,QAASE,EAAU,EAAVA,WAAYgB,EAAgB,EAAhBA,iBAAgB,2HAI9D,OAJ8D,SAGlEd,EAAiBM,EAAkBR,EAAYgB,GAAiB,SACtDhrD,YAAKiqD,EAA6BH,EAASE,EAAYE,GAAe,OACtF,OADAwB,EAAU,EAAH,cACDt2C,YAAI,CAAE3S,KAlLiC,6CAkLQ4S,QAASq2C,EAAS1B,aAAYE,iBAAgBc,qBAAmB,8BAEtH,OAFsH,mCAEhH51C,YAAI,CAAE3S,KAnL+B,2CAmLQ4S,QAAS,KAAMhR,UAAU,uDAPJ,GAW5E,SAAW0nD,EAAiB,OAAIt1C,EAAE,EAAFA,GAAE,yHAGpB,OAHoB,kBAGdzW,YAAKmqD,EAAsB1zC,GAAG,OAC9C,OADAi1C,EAAU,EAAH,cACDt2C,YAAI,CAAE3S,KArMqB,iCAqMQ4S,QAASq2C,IAAU,8BAE5D,OAF4D,mCAEtDt2C,YAAI,CAAE3S,KAtMmB,+BAsMQ4S,QAAS,KAAMhR,UAAU,uDANlC,GAUlC,SAAW2nD,EAAqB,OAAIlC,EAAO,EAAPA,QAAO,yHAG7B,OAH6B,kBAGvB9pD,YAAKqqD,EAA0BP,GAAQ,OACvD,OADA4B,EAAU,EAAH,cACDt2C,YAAI,CAAE3S,KA1L0B,sCA0LQ4S,QAASq2C,IAAU,8BAEjE,OAFiE,mCAE3Dt2C,YAAI,CAAE3S,KA3LwB,oCA2LQ4S,QAAS,KAAMhR,UAAU,uDAN9B,GAU3C,SAAW4nD,EAA8B,OAAInC,EAAO,EAAPA,QAAO,yHAGtC,OAHsC,kBAGhC9pD,YAAKoqD,EAAmCN,GAAQ,OAChE,OADA4B,EAAU,EAAH,cACDt2C,YAAI,CAAE3S,KAxMoC,gDAwMQ4S,QAASq2C,IAAU,8BAE3E,OAF2E,mCAErEt2C,YAAI,CAAE3S,KAzMkC,8CAyMQ4S,QAAS,KAAMhR,UAAU,uDAN/B,GAU7C,SAAWkhC,IAAc,2EAC9B,OAD8B,SACxB7gC,YAAI,CACR4Q,YArOwB,wBAqOCm2C,GACzBn2C,YAAW0yC,EAAe6D,GAC1Bv2C,YAtN6B,6BAsNCw2C,GAC9Bx2C,YAAW2yC,EAAe8D,GAC1Bz2C,YAjN8B,8BAiNC02C,GAC/B12C,YAtNwC,wCAsNC22C,KACzC,uCAGG,IAAMn2C,EAAU,WAAkC,IAAjCxF,EAAQ,UAAH,6CAAGoF,EAAciN,EAAM,uCAC9C8mC,EAAS,CAAC,IAAK,IACfC,EAAO,GACLwC,EAAehE,EAAiBvlC,EAAOqnC,YAC7C,OAAQrnC,EAAOlgB,MACb,KAAKulD,EACH,OAAO13C,EACT,IAtPoB,oBAuPlB,IAAIy6C,EAAe,KACff,EAAa,KACbgB,EAAmB,KACnBd,EAAiB,KASrB,MARuB,cAAnBvnC,EAAOmoC,UACTrB,EAASF,EAAkB5mC,EAAO4nC,UAAUd,OAC5CC,EAAOH,EAAkB5mC,EAAO4nC,UAAUb,KAC1CqB,EAAeT,EAAsB3nC,EAAO4nC,UAC5CP,EAAarnC,EAAOqnC,WACpBgB,EAAmBroC,EAAOwpC,aAC1BjC,EAAiBM,EAAkB7nC,EAAOqnC,WAAYrnC,EAAOwpC,eAExDtsD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkyC,MAAM,EAAOsI,QAASnoC,EAAOmoC,QAASrB,SAAQC,OAAMqB,eAAcf,aAAYgB,mBAAkBd,mBAGpG,IArQgC,gCAsQ9B,OAAOrqD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkyC,MAAM,EACNsI,QAAS,WACTrB,OAAQF,EAAkBC,SAASC,OACnCC,KAAMH,EAAkBC,SAASE,KACjCuB,kBAAmBtoC,EAAOtN,QAAQ41C,kBAClCC,gBAAiBvoC,EAAOtN,QAAQ61C,kBAEpC,IA7Q8B,8BA8Q5B,OAAOrrD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACV67C,aAAczpC,EAAOtN,UAEzB,IA3QyC,yCA4QvC,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkyC,MAAM,EACNsI,QAAS,aACTrB,OAAQF,EAAkB2C,GAAczC,OACxCC,KAAMH,EAAkB2C,GAAcxC,KACtCqB,aAAcT,EAAsB4B,GACpClC,WAAYrnC,EAAOqnC,WACnBqC,iBAAkB1pC,EAAOtN,UAE7B,IAjR6C,6CAkR3C,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkyC,MAAM,EACNsI,QAAS,YACTrB,OAAQF,EAAkB2C,GAAczC,OACxCC,KAAMH,EAAkB2C,GAAcxC,KACtCqB,aAAcT,EAAsB4B,GACpClC,WAAYrnC,EAAOqnC,WACnBgB,iBAAkBroC,EAAOqoC,iBACzBd,eAAgBvnC,EAAOunC,eACvBoC,YAAa3pC,EAAOtN,UAExB,KAAK4yC,EACH,OAAOpoD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BqF,eAAe,EACfwhB,cAAc,EACdC,cAAc,EACd7mB,UAAU,IAEd,IA3S4B,uBA4S1B,OAAO1Q,OAAOkW,OAAO,GAAIzF,EAAOqS,EAAOtN,SACzC,IA/SiC,iCAgT/B,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9B+6C,aAAc1oC,EAAOtN,QACrB8hB,cAAc,EACdC,cAAc,EACdzhB,eAAe,IAEnB,IArT+B,+BAsT7B,OAAO9V,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAO2e,EAAOtN,QACd8hB,cAAc,EACdC,cAAc,EACdzhB,eAAe,IAEnB,IApUwB,wBAsUtB,OADAzP,QAAQ+O,IAAI,eAAgB0N,EAAOmnC,QAASnnC,EAAOwoC,cAC5CtrD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BkyC,MAAM,EACNsH,QAASnnC,EAAOmnC,QAChBqB,aAAcxoC,EAAOwoC,eAEzB,IAhTsC,sCAiTpC,OAAOtrD,OAAOkW,OAAO,GAAIzF,EAAO,CAC9Bg7C,cAAe3oC,EAAOtN,UAE1B,IAnToC,oCAoTlC,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAO2e,EAAOtN,UAGlB,IA9TgD,gDA+T9C,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9Bi7C,uBAAwB5oC,EAAOtN,UAEnC,IAjU8C,8CAkU5C,OAAOxV,OAAOkW,OAAO,GAAIzF,EAAO,CAC9BC,UAAU,EACVvM,MAAO2e,EAAOtN,UAGlB,QACE,OAAO/E,K,kCCtWb,gBAEMi8C,EAAcC,YAAiB,o/OA6lBtBD,O,qBC/lBflrD,EAAOD,QAAU,IAA0B,+C,qBCA3CC,EAAOD,QAAU,IAA0B,mC,wJCE3CvB,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAGT,IAIgCqS,EAJ5BkB,EAAW,EAAQ,QAEnB4zC,GAE4B90C,EAFOkB,IAEclB,EAAIlS,WAAakS,EAAM,CAAEoa,QAASpa,GAEvF,IAAIma,GAAY,EA8DhB1wB,EAAQ2wB,QA5De,SAA0BC,GAI3CF,GAA+B,qBAAX1rB,OACtB0rB,GAAY,EAGdE,EAAOtF,SAAQ,SAAU9pB,GACvB,IAAIghB,EAAa,GAOjB,OANIhhB,EAAMuQ,UACRyQ,EAAWzQ,QAAUvQ,EAAMuQ,SAEzBvQ,EAAM0Q,SACRsQ,EAAWtQ,OAAS1Q,EAAM0Q,QAEpB1Q,EAAMA,OACZ,IAAK,kBACH,KACE,EAAI6pD,EAAU16B,SAAS,WAAY,UAAWnvB,EAAMyO,UAAWzO,EAAMsuB,SAAUtuB,EAAM6Q,UAAW7Q,EAAMqP,KAAM2R,GAC5G,MAAO5f,GACPkC,QAAQ+O,IAAIjR,GAEd,MACF,IAAK,kBACH,IACE,GAAIpB,EAAM8+B,YACR,QAEF,EAAI+qB,EAAU16B,SAAS,WAAY,UAAWnvB,EAAMyO,UAAWzO,EAAMsuB,SAAUtuB,EAAM6Q,UAAW7Q,EAAMsvB,eAAgBtO,GACtH,MAAO5f,GACPkC,QAAQ+O,IAAIjR,GAEd,MACF,IAAK,eACH,IACE,GAAIpB,EAAM8+B,YACR,QAEF,EAAI+qB,EAAU16B,SAAS,WAAY,OAAQnvB,EAAMyO,UAAWzO,EAAMsuB,SAAUtuB,EAAM6Q,UAAW7Q,EAAMsvB,eAAgBtO,GACnH,MAAO5f,GACPkC,QAAQ+O,IAAIjR,GAEd,MACF,IAAK,iBACH,IACE,GAAIpB,EAAM8+B,YACR,QAEF,EAAI+qB,EAAU16B,SAAS,WAAY,SAAUnvB,EAAMyO,UAAWzO,EAAMsuB,SAAUtuB,EAAM6Q,UAAW7Q,EAAMsvB,eAAgBtO,GACrH,MAAO5f,GACPkC,QAAQ+O,IAAIjR,U,kCC/DtBnE,OAAOmF,eAAe5D,EAAS,aAAc,CAC3CkE,OAAO,IAETlE,EAAiB,QAAIA,EAAQsrD,eAAiBtrD,EAAQurD,gBAAkBvrD,EAAQwrD,eAAiBxrD,EAAQmyC,gBAAkBnyC,EAAQyrD,kBAAoBzrD,EAAQ0rD,cAAW,EAC1K,IAEgCn1C,EAF5BsU,EAIJ,SAAiCtU,EAAKU,GAAe,IAAKA,GAAeV,GAAOA,EAAIlS,WAAc,OAAOkS,EAAO,GAAY,OAARA,GAAiC,WAAjBD,EAAQC,IAAoC,oBAARA,EAAsB,MAAO,CAAE,QAAWA,GAAS,IAAI/C,EAAQ0D,EAAyBD,GAAc,GAAIzD,GAASA,EAAM2D,IAAIZ,GAAQ,OAAO/C,EAAM1P,IAAIyS,GAAQ,IAAIa,EAAS,GAAQC,EAAwB5Y,OAAOmF,gBAAkBnF,OAAO6Y,yBAA0B,IAAK,IAAI9S,KAAO+R,EAAO,GAAY,YAAR/R,GAAqB/F,OAAOC,UAAUC,eAAeC,KAAK2X,EAAK/R,GAAM,CAAE,IAAI+S,EAAOF,EAAwB5Y,OAAO6Y,yBAAyBf,EAAK/R,GAAO,KAAU+S,IAASA,EAAKzT,KAAOyT,EAAK3D,KAAQnV,OAAOmF,eAAewT,EAAQ5S,EAAK+S,GAAgBH,EAAO5S,GAAO+R,EAAI/R,GAAY4S,EAAgB,QAAIb,EAAS/C,GAASA,EAAMI,IAAI2C,EAAKa,GAAW,OAAOA,EAJrxBI,CAAwB,EAAQ,SACzCm0C,GAC4Bp1C,EADQ,EAAQ,UACKA,EAAIlS,WAAakS,EAAM,CAAE,QAAWA,GACzF,SAASW,EAAyBD,GAAe,GAAuB,oBAAZS,QAAwB,OAAO,KAAM,IAAIC,EAAoB,IAAID,QAAeE,EAAmB,IAAIF,QAAW,OAAQR,EAA2B,SAAkCD,GAAe,OAAOA,EAAcW,EAAmBD,IAAsBV,GAEhU,SAASX,EAAQC,GAAkC,OAAOD,EAAU,mBAAqBtS,QAAU,iBAAmBA,OAAOwS,SAAW,SAAUD,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBvS,QAAUuS,EAAIE,cAAgBzS,QAAUuS,IAAQvS,OAAOtF,UAAY,gBAAkB6X,IAAgBA,GACzU,SAAS8zB,EAAUH,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI5wB,UAAU,sDAAyD2wB,EAASxrC,UAAYD,OAAO8F,OAAO4lC,GAAcA,EAAWzrC,UAAW,CAAE+X,YAAa,CAAEvS,MAAOgmC,EAAUvxB,UAAU,EAAMD,cAAc,KAAWja,OAAOmF,eAAesmC,EAAU,YAAa,CAAEvxB,UAAU,IAAcwxB,GAAYyhB,EAAgB1hB,EAAUC,GACtb,SAASyhB,EAAgBjoD,EAAGjD,GAA6I,OAAxIkrD,EAAkBntD,OAAO2rC,eAAiB3rC,OAAO2rC,eAAe3lC,OAAS,SAAyBd,EAAGjD,GAAsB,OAAjBiD,EAAEomC,UAAYrpC,EAAUiD,IAA6BA,EAAGjD,GACnM,SAASmrD,EAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVC,MAAsB,OAAO,EAAM,IAAsF,OAAhFC,QAAQ1tD,UAAU2tD,QAAQztD,KAAKotD,QAAQC,UAAUG,QAAS,IAAI,iBAAyB,EAAQ,MAAOjsD,GAAK,OAAO,GAH9PmsD,GAA6B,OAAO,WAAkC,IAAsCjtD,EAAlCktD,EAAQC,EAAgBV,GAAkB,GAAIC,EAA2B,CAAE,IAAIU,EAAYD,EAAgBn9C,MAAMoH,YAAapX,EAAS2sD,QAAQC,UAAUM,EAAO11C,UAAW41C,QAAqBptD,EAASktD,EAAMptD,MAAMkQ,KAAMwH,WAAc,OAAOizB,EAA2Bz6B,KAAMhQ,IAC5Z,SAASyqC,EAA2BxxB,EAAM1Z,GAAQ,GAAIA,IAA2B,WAAlB0X,EAAQ1X,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAI2a,UAAU,4DAA+D,OAC1P,SAAgCjB,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIuxB,eAAe,6DAAgE,OAAOvxB,EADkGo0C,CAAuBp0C,GAGxR,SAASk0C,EAAgB7oD,GAA+J,OAA1J6oD,EAAkB/tD,OAAO2rC,eAAiB3rC,OAAOurC,eAAevlC,OAAS,SAAyBd,GAAK,OAAOA,EAAEomC,WAAatrC,OAAOurC,eAAermC,KAA8BA,GAC/M,SAAS6V,EAAgBH,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,qCAChH,SAASf,EAAkB9W,EAAQ2D,GAAS,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAM7G,OAAQF,IAAK,CAAE,IAAIma,EAAapT,EAAM/G,GAAIma,EAAW5U,WAAa4U,EAAW5U,aAAc,EAAO4U,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMla,OAAOmF,eAAelC,EAAQirD,EAAel0C,EAAWjU,KAAMiU,IAC7T,SAASgxB,EAAanwB,EAAaW,EAAYC,GAAyN,OAAtMD,GAAYzB,EAAkBc,EAAY5a,UAAWub,GAAiBC,GAAa1B,EAAkBc,EAAaY,GAAczb,OAAOmF,eAAe0V,EAAa,YAAa,CAAEX,UAAU,IAAiBW,EAC/Q,SAASqzC,EAAe10C,GAAO,IAAIzT,EACnC,SAAsB6F,EAAOuiD,GAAQ,GAAuB,WAAnBt2C,EAAQjM,IAAiC,OAAVA,EAAgB,OAAOA,EAAO,IAAIwiD,EAAOxiD,EAAMrG,OAAO8oD,aAAc,QAAa3pD,IAAT0pD,EAAoB,CAAE,IAAI94C,EAAM84C,EAAKjuD,KAAKyL,EAAOuiD,GAAQ,WAAY,GAAqB,WAAjBt2C,EAAQvC,GAAmB,OAAOA,EAAK,MAAM,IAAIwF,UAAU,gDAAmD,OAAiB,WAATqzC,EAAoBG,OAASzvC,QAAQjT,GAD3U2iD,CAAa/0C,EAAK,UAAW,MAAwB,WAAjB3B,EAAQ9R,GAAoBA,EAAMuoD,OAAOvoD,GAEtH,IAAIqU,EAAS,EAAQ,QAAUtU,OAAO,CACpCuU,eAAe,EACfC,QAAQ,EACRC,OAAQ,IACRC,aAAc,IACdE,MAAM,IAGJ8zC,EAAkB,SAAyBjM,EAAOxlC,GACpD,MAAc,SAAVwlC,EACKhkC,KAAKkwC,KAAa,EAAR1xC,EAAY,IAEjB,aAAVwlC,EACKhkC,KAAKkwC,KAAa,EAAR1xC,EANN,MAQC,WAAVwlC,EACKxlC,OADT,GAIF,SAAS2xC,IACP,GAAsB,qBAAXnoD,OAAwB,CACjC,IAAI2/C,EAAO/jD,SAASQ,cAAc,UAClC,GAAOujD,EAAKyI,YAAczI,EAAKyI,WAAW,MAExC,OAAkE,GAA3DzI,EAAK0I,UAAU,cAAcpxC,QAAQ,mBAIhD,OAAO,EAmBTjc,EAAQurD,gBAjBc,SAAyBrwC,EAAOM,EAAOwlC,EAAOsM,GAClE,GAAIpyC,GAASA,EAAM7J,IAAK,CACtB,IAAI6gC,EAAO,IAAIC,EACX12B,EAASy2B,EAAKkB,WAAW4N,EAAOxlC,IAAkB,IAARA,OAC9BrY,IAAZmqD,IACFA,EAAUH,KAEZ,IAAII,EAAwBrb,EAAKmB,sBAAsB2N,EAAOxlC,EAAOC,EAAQP,EAAMM,MAAON,EAAMO,OAAQP,EAAMwiB,KAAOxiB,EAAMwiB,KAAKE,EAAI,EAAG1iB,EAAMwiB,KAAOxiB,EAAMwiB,KAAKI,EAAI,EAAG5iB,EAAMwiB,KAAOxiB,EAAMwiB,KAAKx1B,EAAI,EAAGgT,EAAMwiB,KAAOxiB,EAAMwiB,KAAK9yB,EAAI,EAAGsQ,EAAM+iB,WAAa/iB,EAAM+iB,WAAWL,EAAI,EAAG1iB,EAAM+iB,WAAa/iB,EAAM+iB,WAAWH,EAAI,GACrT0U,EAAU+a,EAAsB/a,QAChCE,EAAU6a,EAAsB7a,QAChCjV,EAAY8vB,EAAsB9vB,UAClCE,EAAa4vB,EAAsB5vB,WACrC,OAAOuU,EAAKoB,cAAc,GAAIp4B,EAAMuB,QAAU5D,EAAOqC,EAAMuB,SAAW,GAAIjB,EAAOC,EAAQP,EAAM7J,IAAKmhC,EAASE,EAASjV,EAAWE,EAAY2vB,GAE7I,OAAO,MAuBX,SAASE,EAAiBtyC,EAAO8lC,GAC/B,MAAc,SAAVA,GAAoB9lC,EAAM43B,OAAS53B,EAAM43B,MAAM,QAC1C53B,EAAM43B,MAAM,QAEP,WAAVkO,GAAsB9lC,EAAM43B,OAAS53B,EAAM43B,MAAM,OAC5C53B,EAAM43B,MAAM,OAEjB53B,EAAMwiB,KACDxiB,EAAMwiB,KAER,CACLE,EAAG1iB,EAAMs3B,QACT1U,EAAG5iB,EAAMw3B,QACTxqC,EAAGgT,EAAM03B,UACThoC,EAAGsQ,EAAMuyC,YAfbztD,EAAQsrD,eAlBa,SAAwBpwC,EAAOM,EAAOwlC,GAEzD,GAAqB,mBAAV9lC,EAEJ,IAAIA,GAASA,EAAM7J,IAAK,CAC7B,IAAI6gC,EAAO,IAAIC,EACX12B,EAASy2B,EAAKkB,WAAW4N,EAAOxlC,IAAkB,IAARA,EAC1CkyC,EAAyBxb,EAAKmB,sBAAsB2N,EAAOxlC,EAAOC,EAAQP,EAAMM,MAAON,EAAMO,OAAQP,EAAMwiB,KAAOxiB,EAAMwiB,KAAKE,EAAI,EAAG1iB,EAAMwiB,KAAOxiB,EAAMwiB,KAAKI,EAAI,EAAG5iB,EAAMwiB,KAAOxiB,EAAMwiB,KAAKx1B,EAAI,EAAGgT,EAAMwiB,KAAOxiB,EAAMwiB,KAAK9yB,EAAI,EAAGsQ,EAAM+iB,WAAa/iB,EAAM+iB,WAAWL,EAAI,EAAG1iB,EAAM+iB,WAAa/iB,EAAM+iB,WAAWH,EAAI,GACtT0U,EAAUkb,EAAuBlb,QACjCE,EAAUgb,EAAuBhb,QACjCjV,EAAYiwB,EAAuBjwB,UACnCE,EAAa+vB,EAAuB/vB,WAEtC,OADUuU,EAAKoB,cAAc,GAAIp4B,EAAMuB,QAAU5D,EAAOqC,EAAMuB,SAAW,GAAIvB,EAAMM,MAAOC,EAAQP,EAAM7J,IAAKmhC,EAASE,EAASjV,EAAWE,EAAYwvB,KAGtJ,OAAO,OA8DXntD,EAAQwrD,eAzCa,SAAwB5+B,GAC3C,IAAI1R,EAAQ0R,EAAK1R,MACfM,EAAQoR,EAAKpR,MACbwF,EAAM4L,EAAK5L,IACXggC,EAAQp0B,EAAKo0B,MACbC,EAAUr0B,EAAKq0B,QACf37C,EAAOsnB,EAAKtnB,KACZwB,EAAY8lB,EAAK9lB,UACnB,GAAIoU,GAASA,EAAM7J,IAAK,CACtB,IAAIyhC,EAAQ0a,EAAiBtyC,EAAO8lC,GAChCxO,EAAUM,EAAMlV,EAClB8U,EAAUI,EAAMhV,EAChB8U,EAAYE,EAAM5qC,EAClBulD,EAAa3a,EAAMloC,EACrB,OAAoBigB,EAAgB,QAAEzpB,cAAcusD,EAAO,CACzD7mD,UAAWA,EACXk6C,MAAOA,EACPxlC,MAAO82B,SAAS92B,GAChB7Z,IAAKuZ,EAAM7J,IACX/L,KAAMA,EACNktC,QAASA,EACTE,QAASA,EACTjV,UAAWmV,EACXjV,WAAY8vB,EACZG,YAAa1yC,EAAM0yC,aAAe1yC,EAAM+iB,YAAc/iB,EAAM+iB,WAAWL,EACvEiwB,YAAa3yC,EAAM2yC,aAAe3yC,EAAM+iB,YAAc/iB,EAAM+iB,WAAWH,EACvEP,WAAY+U,SAASp3B,EAAMM,OAC3BgiB,YAAa8U,SAASp3B,EAAMO,QAC5BuF,IAAKA,IAGP,OAAoB6J,EAAgB,QAAEzpB,cAAc,MAAO,CACzD0F,UAAWA,EACXnF,IAAKs/C,EACLzlC,MAAOA,EACPsyC,QAASxoD,EAAO,OAAS,OACzBmW,OAAQwxC,EAAgBjM,EAAOxlC,GAC/BwF,IAAKA,KA6CXhhB,EAAQyrD,kBAxCgB,SAA2Bj+B,GACjD,IAAItS,EAAQsS,EAAMtS,MAChBM,EAAQgS,EAAMhS,MACdwF,EAAMwM,EAAMxM,IACZggC,EAAQxzB,EAAMwzB,MACdC,EAAUzzB,EAAMyzB,QAChB8M,EAASvgC,EAAMugC,OACfjnD,EAAY0mB,EAAM1mB,UACpB,GAAIoU,GAASA,EAAM7J,IAAK,CACtB,IAAI28C,EAAoBR,EAAiBtyC,EAAO8lC,GAC9CxO,EAAUwb,EAAkBxb,QAC5BE,EAAUsb,EAAkBtb,QAC5BE,EAAYob,EAAkBpb,UAC9B6a,EAAaO,EAAkBP,WACjC,OAAoB5iC,EAAgB,QAAEzpB,cAAcsqD,EAAU,CAC5D5kD,UAAWA,EACXk6C,MAAOA,EACPxlC,MAAOA,EACP7Z,IAAKuZ,EAAM7J,IACX08C,OAAQA,EACRvb,QAASA,EACTE,QAASA,EACTjV,UAAWmV,EACXjV,WAAY8vB,EACZG,YAAa1yC,EAAM0yC,aAAe1yC,EAAM+iB,YAAc/iB,EAAM+iB,WAAWL,EACvEiwB,YAAa3yC,EAAM2yC,aAAe3yC,EAAM+iB,YAAc/iB,EAAM+iB,WAAWH,EACvEP,WAAYriB,EAAMM,MAClBgiB,YAAatiB,EAAMO,OACnBuF,IAAKA,IAGP,OAAoB6J,EAAgB,QAAEzpB,cAAc,UAAW,CAC7D0F,UAAWA,EACXnF,IAAKs/C,EACLzlC,MAAOA,EACPC,OAAQwxC,EAAgBjM,EAAOxlC,GAC/BwF,IAAKA,KAKX,IAAImxB,EAA+B,WACjC,SAASA,IACP34B,EAAgBnK,KAAM8iC,GAsIxB,OApIA1I,EAAa0I,EAAiB,CAAC,CAC7B3tC,IAAK,aACLN,MAAO,SAAoB88C,EAAOxlC,GAChC,OAAOyxC,EAAgBjM,EAAOxlC,IAAkB,IAARA,IAEzC,CACDhX,IAAK,gBACLN,MAAO,SAAuB+pD,EAAW/qD,EAAMsY,EAAOC,EAAQ9Z,EAAK6wC,EAASE,EAASjV,EAAWE,EAAY2vB,GAC1G,OAAI9a,GAAWE,GAAWjV,GAAaE,EAC9B,GAAGhjB,OAAOszC,EAAW,KAAKtzC,OAAOa,EAAO,KAAKb,OAAOc,EAAQ,KAAKd,OAAOzX,EAAM,YAAYyX,OAAOhZ,EAAK,2BAA2BgZ,OAAO63B,EAAS,KAAK73B,OAAO+3B,EAAS,YAAY/3B,OAAO8iB,EAAW,KAAK9iB,OAAOgjB,IAAe2vB,EAAU,aAAe,IAE1P,GAAG3yC,OAAOszC,EAAW,KAAKtzC,OAAOa,EAAO,KAAKb,OAAOc,EAAQ,KAAKd,OAAOzX,EAAM,YAAYyX,OAAOhZ,IAAQ2rD,EAAU,aAAe,MAE1I,CACD9oD,IAAK,qBACLN,MAAO,SAA4BgqD,EAAiBr2B,EAAOs2B,GACzD,IAAIC,EAAaF,EAAkBC,EAAW,EAC9CC,EAAaA,EAAa,EAAI,EAAIA,EAClC,IAAIC,EAAWH,EAAkBC,EAAW,EAE5C,OADAE,EAAWA,EAAWx2B,EAAQA,EAAQs2B,EAAWE,GAClCH,EACGlxC,KAAK0C,IAAI0uC,EAAaD,EAAW,EAAID,IACvClxC,KAAK0C,IAAI2uC,EAAWF,EAAW,EAAID,GAExClxC,KAAKC,MAAMmxC,GAEXpxC,KAAKC,MAAMoxC,GAGbrxC,KAAKC,MAAMmxC,KAGrB,CACD5pD,IAAK,wBACLN,MAAO,SAA+B88C,EAAOxlC,EAAOC,EAAQ8hB,EAAYC,EAAagV,EAASE,EAASjV,EAAWE,EAAYK,EAAaE,GACzI,IAAIowB,EAAgB3wB,EAChB4wB,EAAe9wB,EACnB,GAAIF,GAAcC,EAAa,CAkB7B,GAjBoB,IAAhBQ,GAAqC,IAAhBE,IACnBT,GAAaE,GACfK,EAAcwU,EAAUx1B,KAAKg2B,MAAMvV,EAAY,GAC/CS,EAAcwU,EAAU11B,KAAKg2B,MAAMrV,EAAa,KAEhDK,EAAchhB,KAAKg2B,MAAMzV,EAAa,GACtCW,EAAclhB,KAAKg2B,MAAMxV,EAAc,KAG7B,WAAVwjB,IAMFsN,EAJEC,EADgB,IAAd9wB,GAAkC,IAAfE,EACN3gB,KAAKwxC,IAAIjxB,EAAYC,GAErBxgB,KAAKwxC,IAAI/wB,EAAWE,IAIzB,SAAVqjB,EACF,GAAkB,IAAdvjB,GAAkC,IAAfE,EACNH,GAAe,GAAK,GACpBD,GAEbgxB,EAAevxC,KAAKg2B,MAAoB,GAAdxV,EAAmB,GAC7C8wB,EAAgB9wB,IAEhB+wB,EAAehxB,EACf+wB,EAAgBtxC,KAAKg2B,MAAmB,EAAbzV,EAAiB,UAG9BI,GAAc,GAAK,GACnBF,GAEd8wB,EAAevxC,KAAKg2B,MAAmB,GAAbrV,EAAkB,GAC5C2wB,EAAgB3wB,IAEhB4wB,EAAe9wB,EACf6wB,EAAgBtxC,KAAKg2B,MAAkB,EAAZvV,EAAgB,KAIjD,GAAc,aAAVujB,EACF,GAAkB,IAAdvjB,GAAkC,IAAfE,EAnPlB,KAoPcH,EACAD,GAEfgxB,EAAevxC,KAAKg2B,MAvPnB,KAuPyBxV,GAC1B8wB,EAAgB9wB,IAEhB+wB,EAAehxB,EACf+wB,EAAgBtxC,KAAKg2B,MAAmB,EAAbzV,EA3P1B,iBA8PcI,EACAF,GAEf8wB,EAAevxC,KAAKg2B,MAjQnB,KAiQyBrV,GAC1B2wB,EAAgB3wB,IAEhB4wB,EAAe9wB,EACf6wB,EAAgBtxC,KAAKg2B,MAAkB,EAAZvV,EArQ1B,OA2QP,OAFAO,EAAchhB,KAAK+a,IAAI/a,KAAKwxC,IAAIxwB,EAAaT,EAAavgB,KAAKg2B,MAAMub,EAAe,IAAK/b,EAAUx1B,KAAKg2B,MAAMub,EAAe,IAC7HrwB,EAAclhB,KAAK+a,IAAI/a,KAAKwxC,IAAItwB,EAAaV,EAAcxgB,KAAKg2B,MAAMsb,EAAgB,IAAK5b,EAAU11B,KAAKg2B,MAAMsb,EAAgB,IAC5H7wB,GAAaE,EACR,CACL6U,QAASxU,EAAchhB,KAAKg2B,MAAMvV,EAAY,GAC9CiV,QAASxU,EAAclhB,KAAKg2B,MAAMrV,EAAa,GAC/CF,UAAW8wB,EACX5wB,WAAY2wB,IAGXC,IACHA,EAAehxB,GAEZ+wB,IACHA,EAAgB9wB,GAEX,CACLgV,QAASxU,EAAchhB,KAAKg2B,MAAMub,EAAe,GACjD7b,QAASxU,EAAclhB,KAAKg2B,MAAMsb,EAAgB,GAClD7wB,UAAW8wB,EACX5wB,WAAY2wB,IAGhB,MAAO,CACL9b,QAAS,EACTE,QAAS,EACTjV,UAAW,EACXE,WAAY,OAIXwU,EAxI0B,GA0InCnyC,EAAQmyC,gBAAkBA,EAC1B,IAAIwb,EAAqB,SAAUc,GACjCpkB,EAAUsjB,EAAOc,GACjB,IAAIC,EAAS7C,EAAa8B,GAC1B,SAASA,IAEP,OADAn0C,EAAgBnK,KAAMs+C,GACfe,EAAOvvD,MAAMkQ,KAAMwH,WAmE5B,OAjEA4yB,EAAakkB,EAAO,CAAC,CACnBnpD,IAAK,SACLN,MAAO,WACL,IACIvC,EACA6xC,EACAmb,EACAlzC,EAJAmuB,EAAQv6B,KAKRnM,EAAOmM,KAAKhK,MAAM2b,IAAMnI,EAAOxJ,KAAKhK,MAAM2b,KAAO,GACjD4tC,OAASzrD,EAEb,GAAyB,WAArBkM,KAAKhK,MAAM27C,MACbr/C,EAAM,GAAGgZ,OAAOtL,KAAKhK,MAAMwpD,gBAAiB,KAAKl0C,OAAOtL,KAAKhK,MAAMmW,MAAO,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KAC1H6xC,EAAQ,GAAG74B,OAAOtL,KAAKhK,MAAMwpD,gBAAiB,KAAKl0C,OAA0B,EAAnBtL,KAAKhK,MAAMmW,MAAW,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KAChIgtD,EAAU,GAAGh0C,OAAOtL,KAAKhK,MAAMwpD,gBAAiB,KAAKl0C,OAAOtL,KAAKhK,MAAMmW,MAAO,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KAC9H8Z,EAASpM,KAAKhK,MAAMmW,OAChBnM,KAAKhK,MAAMo4B,WAAapuB,KAAKhK,MAAMs4B,cACrCh8B,GAAO,0BAA0BgZ,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,YAC5J6V,GAAS,0BAA0B74B,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,YAC9JgxB,GAAW,0BAA0Bh0C,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,WAAY,oBAEzK,GAAyB,SAArBtuB,KAAKhK,MAAM27C,MACpBr/C,EAAM,GAAGgZ,OAAOtL,KAAKhK,MAAMypD,cAAe,KAAKn0C,OAAOtL,KAAKhK,MAAMmW,MAAO,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KACxH6xC,EAAQ,GAAG74B,OAAOtL,KAAKhK,MAAMypD,cAAe,KAAKn0C,OAA0B,EAAnBtL,KAAKhK,MAAMmW,MAAW,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KAC9HgtD,EAAU,GAAGh0C,OAAOtL,KAAKhK,MAAMypD,cAAe,KAAKn0C,OAAOtL,KAAKhK,MAAMmW,MAAO,KAAKb,OAAOzX,EAAM,YAAYyX,OAAOtL,KAAKhK,MAAM1D,KAC5H8Z,EAASuB,KAAKkwC,KAAwB,EAAnB79C,KAAKhK,MAAMmW,MAAY,KACtCnM,KAAKhK,MAAMo4B,WAAapuB,KAAKhK,MAAMs4B,cACrCh8B,GAAO,0BAA0BgZ,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,YAC5J6V,GAAS,0BAA0B74B,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,YAC9JgxB,GAAW,0BAA0Bh0C,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,WAAY,mBAEzK,CACL,IAAIuU,EAAO,IAAIC,EACf12B,EAASpM,KAAKhK,MAAMoW,QAAUy2B,EAAKkB,WAAW/jC,KAAKhK,MAAM27C,MAAO3xC,KAAKhK,MAAMmW,QAAkB,IAARA,MACrF,IAAIuzC,EAAyB7c,EAAKmB,sBAAsBhkC,KAAKhK,MAAM27C,MAAO3xC,KAAKhK,MAAMmW,MAAOC,EAAQpM,KAAKhK,MAAMk4B,WAAYluB,KAAKhK,MAAMm4B,YAAaxgB,KAAK+a,IAAI,EAAG1oB,KAAKhK,MAAMmtC,SAAUx1B,KAAK+a,IAAI,EAAG1oB,KAAKhK,MAAMqtC,SAAU11B,KAAKwxC,IAAIn/C,KAAKhK,MAAMo4B,UAAWpuB,KAAKhK,MAAMk4B,YAAavgB,KAAKwxC,IAAIn/C,KAAKhK,MAAMs4B,WAAYtuB,KAAKhK,MAAMm4B,aAAcnuB,KAAKhK,MAAMuoD,YAAav+C,KAAKhK,MAAMwoD,aACtWrb,EAAUuc,EAAuBvc,QACjCE,EAAUqc,EAAuBrc,QACjCjV,EAAYsxB,EAAuBtxB,UACnCE,EAAaoxB,EAAuBpxB,WACtCh8B,EAAMuwC,EAAKoB,cAAcjkC,KAAKhK,MAAM4oD,UAAW/qD,EAAMmM,KAAKhK,MAAMmW,MAAOC,EAAQpM,KAAKhK,MAAM1D,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GACxI6V,EAAQtB,EAAKoB,cAAcjkC,KAAKhK,MAAM4oD,UAAW/qD,EAAyB,EAAnBmM,KAAKhK,MAAMmW,MAAoB,EAATC,EAAYpM,KAAKhK,MAAM1D,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GAClJgxB,EAAUzc,EAAKoB,cAAcjkC,KAAKhK,MAAM4oD,UAAW/qD,EAAMmM,KAAKhK,MAAMmW,MAAOC,EAAQpM,KAAKhK,MAAM1D,IAAK6wC,EAASE,EAASjV,EAAWE,GAAY,GACxItuB,KAAKhK,MAAMkL,OAASlB,KAAKhK,MAAMkL,MAAM/R,SACvCowD,EAASv/C,KAAKhK,MAAMkL,MAAMye,QAAO,SAAUxQ,EAAMwwC,EAAK1wD,GACpD,OAAOA,EAAI,EAAIkgB,EAAO,KAAO0zB,EAAKoB,cAAc1J,EAAMvkC,MAAM4oD,UAAW/qD,EAAM8rD,EAAK9c,EAAKkB,WAAWxJ,EAAMvkC,MAAM27C,MAAOgO,GAAMplB,EAAMvkC,MAAM1D,KAAO,IAAMqtD,EAAM,KAAO9c,EAAKoB,cAAc1J,EAAMvkC,MAAM4oD,UAAW/qD,EAAMsb,EAAM0zB,EAAKkB,WAAWxJ,EAAMvkC,MAAM27C,MAAOxiC,GAAOorB,EAAMvkC,MAAM1D,KAAO,IAAM6c,EAAO,OAAS0zB,EAAKoB,cAAc1J,EAAMvkC,MAAM4oD,UAAW/qD,EAAM8rD,EAAK9c,EAAKkB,WAAWxJ,EAAMvkC,MAAM27C,MAAOgO,GAAMplB,EAAMvkC,MAAM1D,KAAO,IAAMqtD,EAAM,SAI7a,OAAoBnkC,EAAgB,QAAEzpB,cAAc,UAAW,KAAmBypB,EAAgB,QAAEzpB,cAAc,SAAU,CAC1HC,KAAM,aACN4tD,OAAQN,IACO9jC,EAAgB,QAAEzpB,cAAc,SAAU,CACzDC,KAAM,aACN4tD,OAAQzb,EAAQ,UACD3oB,EAAgB,QAAEzpB,cAAc,MAAO,CACtD0F,UAAWuI,KAAKhK,MAAMyB,UACtBgnD,QAASz+C,KAAKhK,MAAMC,KAAO,OAAS,OACpC3D,IAAKA,EACL6Z,MAAOnM,KAAKhK,MAAMmW,MAClBC,OAAQA,EACRwzC,OAAQL,EACR5tC,IAAK3R,KAAKhK,MAAM2b,WAIf2sC,EAxEgB,CAyEvB9iC,EAAOrb,WACTxP,EAAiB,QAAI2tD,EACrB,IAAIjC,EAAwB,SAAUwD,GACpC7kB,EAAUqhB,EAAUwD,GACpB,IAAIC,EAAUtD,EAAaH,GAC3B,SAASA,IAEP,OADAlyC,EAAgBnK,KAAMq8C,GACfyD,EAAQhwD,MAAMkQ,KAAMwH,WAkD7B,OAhDA4yB,EAAaiiB,EAAU,CAAC,CACtBlnD,IAAK,SACLN,MAAO,WACL,IACIvC,EACA8Z,EAFAivB,EAASr7B,KAGTnM,EAAOmM,KAAKhK,MAAM2b,IAAMnI,EAAOxJ,KAAKhK,MAAM2b,KAAO,GACjD4tC,OAASzrD,EACb,GAAyB,WAArBkM,KAAKhK,MAAM27C,MACbr/C,EAAM0N,KAAKhK,MAAMwpD,gBAAkB,IAAMx/C,KAAKhK,MAAMmW,MAAQ,WAAanM,KAAKhK,MAAM1D,IACpF8Z,EAASpM,KAAKhK,MAAMmW,OAChBnM,KAAKhK,MAAMo4B,WAAapuB,KAAKhK,MAAMs4B,cACrCh8B,GAAO,0BAA0BgZ,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,aAE9Jh8B,GAAOwrD,IAAe,aAAe,QAChC,GAAyB,SAArB99C,KAAKhK,MAAM27C,MACpBr/C,EAAM0N,KAAKhK,MAAMypD,cAAgB,IAAMz/C,KAAKhK,MAAMmW,MAAQ,WAAanM,KAAKhK,MAAM1D,IAClF8Z,EAASuB,KAAKkwC,KAAwB,EAAnB79C,KAAKhK,MAAMmW,MAAY,KACtCnM,KAAKhK,MAAMo4B,WAAapuB,KAAKhK,MAAMs4B,cACrCh8B,GAAO,0BAA0BgZ,OAAOtL,KAAKhK,MAAMmtC,QAAS,KAAK73B,OAAOtL,KAAKhK,MAAMqtC,QAAS,YAAY/3B,OAAOtL,KAAKhK,MAAMo4B,UAAW,KAAK9iB,OAAOtL,KAAKhK,MAAMs4B,aAE9Jh8B,GAAOwrD,IAAe,aAAe,OAChC,CACL,IAAIjb,EAAO,IAAIC,EACf12B,EAASpM,KAAKhK,MAAMoW,QAAUy2B,EAAKkB,WAAW/jC,KAAKhK,MAAM27C,MAAO3xC,KAAKhK,MAAMmW,QAA6B,IAAnBnM,KAAKhK,MAAMmW,MAChG,IAAI4zC,EAAyBld,EAAKmB,sBAAsBhkC,KAAKhK,MAAM27C,MAAO3xC,KAAKhK,MAAMmW,MAAOC,EAAQpM,KAAKhK,MAAMk4B,WAAYluB,KAAKhK,MAAMm4B,YAAaxgB,KAAK+a,IAAI,EAAG1oB,KAAKhK,MAAMmtC,SAAUx1B,KAAK+a,IAAI,EAAG1oB,KAAKhK,MAAMqtC,SAAU11B,KAAKwxC,IAAIn/C,KAAKhK,MAAMo4B,UAAWpuB,KAAKhK,MAAMk4B,YAAavgB,KAAKwxC,IAAIn/C,KAAKhK,MAAMs4B,WAAYtuB,KAAKhK,MAAMm4B,aAAcnuB,KAAKhK,MAAMuoD,YAAav+C,KAAKhK,MAAMwoD,aACtWrb,EAAU4c,EAAuB5c,QACjCE,EAAU0c,EAAuB1c,QACjCjV,EAAY2xB,EAAuB3xB,UACnCE,EAAayxB,EAAuBzxB,WACtCh8B,EAAMuwC,EAAKoB,cAAcjkC,KAAKhK,MAAM4oD,UAAW/qD,EAAMmM,KAAKhK,MAAMmW,MAAOC,EAAQpM,KAAKhK,MAAM1D,IAAK6wC,EAASE,EAASjV,EAAWE,EAAYwvB,KACpI99C,KAAKhK,MAAMkL,OAASlB,KAAKhK,MAAMkL,MAAM/R,SACvCowD,EAASv/C,KAAKhK,MAAMkL,MAAMye,QAAO,SAAUxQ,EAAMwwC,EAAK1wD,GACpD,OAAOA,EAAI,EAAIkgB,EAAO,KAAO0zB,EAAKoB,cAAc5I,EAAOrlC,MAAM4oD,UAAW/qD,EAAM8rD,EAAK9c,EAAKkB,WAAW1I,EAAOrlC,MAAM27C,MAAOgO,GAAMtkB,EAAOrlC,MAAM1D,KAAO,IAAMqtD,EAAM,KAAO9c,EAAKoB,cAAc5I,EAAOrlC,MAAM4oD,UAAW/qD,EAAMsb,EAAM0zB,EAAKkB,WAAW1I,EAAOrlC,MAAM27C,MAAOxiC,GAAOksB,EAAOrlC,MAAM1D,KAAO,IAAM6c,EAAO,OAAS0zB,EAAKoB,cAAc5I,EAAOrlC,MAAM4oD,UAAWe,EAAK9c,EAAKkB,WAAW1I,EAAOrlC,MAAM27C,MAAOgO,GAAMtkB,EAAOrlC,MAAM1D,KAAO,IAAMqtD,EAAM,SAIhb,OAAoBnkC,EAAgB,QAAEzpB,cAAc,UAAW,CAC7D2sD,OAAQ1+C,KAAKhK,MAAM0oD,OAAS1+C,KAAKhK,MAAM0oD,OAAS,aAChDjnD,UAAWuI,KAAKhK,MAAMyB,UACtBnF,IAAKA,EACL6Z,MAAOnM,KAAKhK,MAAMmW,MAClBC,OAAQA,EACRwzC,OAAQL,EACR5tC,IAAK3R,KAAKhK,MAAM2b,UAIf0qC,EAvDmB,CAwD1B7gC,EAAOrb,WACTxP,EAAQ0rD,SAAWA,EACnBiC,EAAM0B,UAAY,CAChB1tD,IAAKgqD,EAAoB,QAAEvxC,OAAOk1C,WAClC9zC,MAAOmwC,EAAoB,QAAE3lD,OAAOspD,WACpC7zC,OAAQkwC,EAAoB,QAAE3lD,OAC9BwsC,QAASmZ,EAAoB,QAAE3lD,OAC/B0sC,QAASiZ,EAAoB,QAAE3lD,OAC/By3B,UAAWkuB,EAAoB,QAAE3lD,OACjC23B,WAAYguB,EAAoB,QAAE3lD,OAClC4nD,YAAajC,EAAoB,QAAE3lD,OACnC6nD,YAAalC,EAAoB,QAAE3lD,OACnCu3B,WAAYouB,EAAoB,QAAE3lD,OAClCw3B,YAAamuB,EAAoB,QAAE3lD,OACnCuK,MAAOo7C,EAAoB,QAAE4D,MAC7BvO,MAAO2K,EAAoB,QAAEvxC,OAC7B6zC,UAAWtC,EAAoB,QAAEvxC,OACjCy0C,gBAAiBlD,EAAoB,QAAEvxC,OACvC00C,cAAenD,EAAoB,QAAEvxC,QAEvCuzC,EAAMrlC,aAAe,CACnB7M,OAAQ,EACR+2B,QAAS,EACTE,QAAS,EACTjV,UAAW,EACXE,WAAY,EACZiwB,YAAa,EACbC,YAAa,EACbt9C,MAAO,GACPywC,MAAO,WACPiN,UAAW,sCACXY,gBAAiB,sCACjBC,cAAe,qCAEjBpD,EAAS2D,UAAY,CACnB1tD,IAAKgqD,EAAoB,QAAEvxC,OAAOk1C,WAClC9zC,MAAOmwC,EAAoB,QAAE3lD,OAAOspD,WACpC7zC,OAAQkwC,EAAoB,QAAE3lD,OAC9BwsC,QAASmZ,EAAoB,QAAE3lD,OAC/B0sC,QAASiZ,EAAoB,QAAE3lD,OAC/By3B,UAAWkuB,EAAoB,QAAE3lD,OACjC23B,WAAYguB,EAAoB,QAAE3lD,OAClC4nD,YAAajC,EAAoB,QAAE3lD,OACnC6nD,YAAalC,EAAoB,QAAE3lD,OACnCu3B,WAAYouB,EAAoB,QAAE3lD,OAClCw3B,YAAamuB,EAAoB,QAAE3lD,OACnCuK,MAAOo7C,EAAoB,QAAE4D,MAC7BvO,MAAO2K,EAAoB,QAAEvxC,OAC7B6zC,UAAWtC,EAAoB,QAAEvxC,OACjCy0C,gBAAiBlD,EAAoB,QAAEvxC,OACvC00C,cAAenD,EAAoB,QAAEvxC,QAEvCsxC,EAASpjC,aAAe,CACtB7M,OAAQ,EACR+2B,QAAS,EACTE,QAAS,EACTjV,UAAW,EACXE,WAAY,EACZiwB,YAAa,EACbC,YAAa,EACbt9C,MAAO,GACPywC,MAAO,WACPiN,UAAW,sCACXY,gBAAiB,sCACjBC,cAAe,sC,kJCzgBF,SAASU,IACtB,MAAkC7mD,oBAAS,GAApC2tB,EAAS,KAAEm5B,EAAY,KAGxBC,EAAmB,WACnB1qD,OAAOya,YAAc,IACvBgwC,GAAa,GAEbA,GAAa,IAiBjB,OAJA3mD,qBAAU,WACR9D,OAAO2a,iBAAiB,SAAU+vC,KACjC,IAGD,EAAC,IAAE7oD,IAAG,CAACqD,SAAS,QAAQa,OAAO,OAAO8c,OAAQ,CAAE7gB,GAAI,QAASC,GAAI,SAAWuD,MAAO,GAAIqZ,OAAO,UAAU7N,aAAa,OAAO7K,gBAAgB,SAASjD,EAAG,GAAIynD,GAAI,GAAInoD,QAAQ,QAAQV,UAAU,iBAC3LwvB,GACC,EAAC,IAAEzvB,IAAG,CAAC4O,QAdO,WAClBzQ,OAAO4qD,SAAS,CACdjlD,IAAK,EACLob,SAAU,aAYN,EAAC,IAAEpe,IAAG,CAAChG,IAAKkuD,IAAS7uC,IAAI,YAAY9Y,EAAE,OAAO0C,EAAE,OAAOpD,QAAQ","file":"static/js/client.680ae1be.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t11: 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t11: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({\"3\":\"pages-TitleSectionPage\",\"4\":\"pages-VideoPage\",\"5\":\"pages-TagPage\",\"6\":\"NotFound\",\"7\":\"components-OutbrainWidget\",\"8\":\"pages-MyNewsPage\",\"12\":\"components-ArticleSocialShare\",\"13\":\"components-AuthorArticles\",\"14\":\"components-CookieForm\",\"15\":\"components-DefaultSection\",\"16\":\"components-MostReadWidget\",\"17\":\"components-Oovvuu\",\"18\":\"components-RelatedArticles\",\"19\":\"components-Video\",\"20\":\"components-VoxImage\",\"21\":\"components-YouMayLike\",\"22\":\"components-ui-ArticleSideShare\",\"23\":\"pages-Article\",\"24\":\"pages-AuthorsPage\",\"25\":\"pages-BookmarksPage\",\"26\":\"pages-DigisertsPage\",\"27\":\"pages-Feedback\",\"28\":\"pages-Home\",\"29\":\"pages-NewslettersPage\",\"30\":\"pages-StaticPage\",\"31\":\"routes-business\",\"32\":\"routes-business-report\",\"33\":\"routes-capeargus\",\"34\":\"routes-capetimes\",\"35\":\"routes-dailynews\",\"36\":\"routes-entertainment\",\"37\":\"routes-government-at-work\",\"38\":\"routes-ios\",\"39\":\"routes-lifestyle\",\"40\":\"routes-mercury\",\"41\":\"routes-motoring\",\"42\":\"routes-multimedia\",\"43\":\"routes-news\",\"44\":\"routes-opinion\",\"45\":\"routes-personal-finance\",\"46\":\"routes-pretoria-news\",\"47\":\"routes-property\",\"48\":\"routes-saturday-star\",\"49\":\"routes-sport\",\"50\":\"routes-sunday-independent\",\"51\":\"routes-sunday-tribune\",\"52\":\"routes-technology\",\"53\":\"routes-the-post\",\"54\":\"routes-the-star\",\"55\":\"routes-travel\",\"56\":\"routes-trends\",\"57\":\"routes-weekend-argus\",\"58\":\"templates-Trends-Elections2024Trend\",\"59\":\"templates-Trends-RugbyWorldCupTrend\",\"60\":\"templates-Trends-SoccerWorldCupTrend\"}[chunkId]||chunkId) + \".\" + {\"0\":\"5288b99b\",\"1\":\"83c773c1\",\"2\":\"690118c3\",\"3\":\"238f7497\",\"4\":\"39854bcc\",\"5\":\"d1bc0a61\",\"6\":\"70a2e938\",\"7\":\"334e0011\",\"8\":\"6802e883\",\"10\":\"7195ec65\",\"12\":\"6ac6a6c2\",\"13\":\"2c97fcce\",\"14\":\"302f86bb\",\"15\":\"bb5e705e\",\"16\":\"562d38c1\",\"17\":\"6cc0cd8c\",\"18\":\"d126affb\",\"19\":\"17d2bb03\",\"20\":\"c964acfc\",\"21\":\"9aa5cd7b\",\"22\":\"bbdd9cdf\",\"23\":\"e5d31f18\",\"24\":\"93b57efb\",\"25\":\"d51b607c\",\"26\":\"19b5e74e\",\"27\":\"5d94391b\",\"28\":\"990d0ef9\",\"29\":\"48a41054\",\"30\":\"aea1c00a\",\"31\":\"c978cc62\",\"32\":\"cd30bf82\",\"33\":\"8104f113\",\"34\":\"6901fa7f\",\"35\":\"604e7bdf\",\"36\":\"ada7c151\",\"37\":\"7a578b7e\",\"38\":\"6cb6c489\",\"39\":\"455e3815\",\"40\":\"1780c77d\",\"41\":\"c16355a5\",\"42\":\"8175e02c\",\"43\":\"6d6ca9a1\",\"44\":\"dad7b509\",\"45\":\"06eb1b26\",\"46\":\"0d63f3d6\",\"47\":\"c8f05427\",\"48\":\"35ce240e\",\"49\":\"9e25e672\",\"50\":\"294e25a2\",\"51\":\"e20f42a6\",\"52\":\"dbbeb7e3\",\"53\":\"b1ff20e7\",\"54\":\"74a6aeeb\",\"55\":\"0a39a4ee\",\"56\":\"049437a2\",\"57\":\"984fcbea\",\"58\":\"8cc46fca\",\"59\":\"4697193c\",\"60\":\"c5b97bcc\",\"63\":\"7a282bec\",\"64\":\"3e419639\",\"65\":\"7e0ae25f\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"63\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"static/css/\" + ({\"3\":\"pages-TitleSectionPage\",\"4\":\"pages-VideoPage\",\"5\":\"pages-TagPage\",\"6\":\"NotFound\",\"7\":\"components-OutbrainWidget\",\"8\":\"pages-MyNewsPage\",\"12\":\"components-ArticleSocialShare\",\"13\":\"components-AuthorArticles\",\"14\":\"components-CookieForm\",\"15\":\"components-DefaultSection\",\"16\":\"components-MostReadWidget\",\"17\":\"components-Oovvuu\",\"18\":\"components-RelatedArticles\",\"19\":\"components-Video\",\"20\":\"components-VoxImage\",\"21\":\"components-YouMayLike\",\"22\":\"components-ui-ArticleSideShare\",\"23\":\"pages-Article\",\"24\":\"pages-AuthorsPage\",\"25\":\"pages-BookmarksPage\",\"26\":\"pages-DigisertsPage\",\"27\":\"pages-Feedback\",\"28\":\"pages-Home\",\"29\":\"pages-NewslettersPage\",\"30\":\"pages-StaticPage\",\"31\":\"routes-business\",\"32\":\"routes-business-report\",\"33\":\"routes-capeargus\",\"34\":\"routes-capetimes\",\"35\":\"routes-dailynews\",\"36\":\"routes-entertainment\",\"37\":\"routes-government-at-work\",\"38\":\"routes-ios\",\"39\":\"routes-lifestyle\",\"40\":\"routes-mercury\",\"41\":\"routes-motoring\",\"42\":\"routes-multimedia\",\"43\":\"routes-news\",\"44\":\"routes-opinion\",\"45\":\"routes-personal-finance\",\"46\":\"routes-pretoria-news\",\"47\":\"routes-property\",\"48\":\"routes-saturday-star\",\"49\":\"routes-sport\",\"50\":\"routes-sunday-independent\",\"51\":\"routes-sunday-tribune\",\"52\":\"routes-technology\",\"53\":\"routes-the-post\",\"54\":\"routes-the-star\",\"55\":\"routes-travel\",\"56\":\"routes-trends\",\"57\":\"routes-weekend-argus\",\"58\":\"templates-Trends-Elections2024Trend\",\"59\":\"templates-Trends-RugbyWorldCupTrend\",\"60\":\"templates-Trends-SoccerWorldCupTrend\"}[chunkId]||chunkId) + \".\" + {\"0\":\"31d6cfe0\",\"1\":\"31d6cfe0\",\"2\":\"31d6cfe0\",\"3\":\"31d6cfe0\",\"4\":\"31d6cfe0\",\"5\":\"31d6cfe0\",\"6\":\"31d6cfe0\",\"7\":\"31d6cfe0\",\"8\":\"31d6cfe0\",\"10\":\"31d6cfe0\",\"12\":\"31d6cfe0\",\"13\":\"31d6cfe0\",\"14\":\"31d6cfe0\",\"15\":\"31d6cfe0\",\"16\":\"31d6cfe0\",\"17\":\"31d6cfe0\",\"18\":\"31d6cfe0\",\"19\":\"31d6cfe0\",\"20\":\"31d6cfe0\",\"21\":\"31d6cfe0\",\"22\":\"31d6cfe0\",\"23\":\"31d6cfe0\",\"24\":\"31d6cfe0\",\"25\":\"31d6cfe0\",\"26\":\"31d6cfe0\",\"27\":\"31d6cfe0\",\"28\":\"31d6cfe0\",\"29\":\"31d6cfe0\",\"30\":\"31d6cfe0\",\"31\":\"31d6cfe0\",\"32\":\"31d6cfe0\",\"33\":\"31d6cfe0\",\"34\":\"31d6cfe0\",\"35\":\"31d6cfe0\",\"36\":\"31d6cfe0\",\"37\":\"31d6cfe0\",\"38\":\"31d6cfe0\",\"39\":\"31d6cfe0\",\"40\":\"31d6cfe0\",\"41\":\"31d6cfe0\",\"42\":\"31d6cfe0\",\"43\":\"31d6cfe0\",\"44\":\"31d6cfe0\",\"45\":\"31d6cfe0\",\"46\":\"31d6cfe0\",\"47\":\"31d6cfe0\",\"48\":\"31d6cfe0\",\"49\":\"31d6cfe0\",\"50\":\"31d6cfe0\",\"51\":\"31d6cfe0\",\"52\":\"31d6cfe0\",\"53\":\"31d6cfe0\",\"54\":\"31d6cfe0\",\"55\":\"31d6cfe0\",\"56\":\"31d6cfe0\",\"57\":\"31d6cfe0\",\"58\":\"31d6cfe0\",\"59\":\"31d6cfe0\",\"60\":\"31d6cfe0\",\"63\":\"e4e9918b\",\"64\":\"31d6cfe0\",\"65\":\"31d6cfe0\"}[chunkId] + \".chunk.css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"__LOADABLE_LOADED_CHUNKS__\"] = window[\"__LOADABLE_LOADED_CHUNKS__\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"O14P\",9,62]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import styled, {system} from '@xstyled/styled-components'\nimport { ImageOrNoImage } from 'ion-image'\n\nconst MyImageOrNoImage = (props) => (<ImageOrNoImage lazy {...props} />)\n\nconst StyledImage = styled(MyImageOrNoImage)`\n  ${system}\n`\nexport default StyledImage\n","import React, {useState, useEffect} from 'react'\r\nimport axios from 'axios'\r\nimport { x } from '@xstyled/styled-components'\r\nimport { useCombobox } from 'downshift'\r\nimport { useCookie } from './ui/utils'\r\n\r\nimport sunrise from '../../../assets/images/weather/sunrise.svg'\r\nimport windy from '../../../assets/images/weather/windy.svg'\r\nimport sunny from '../../../assets/images/weather/sunny.svg'\r\nimport cloudy from '../../../assets/images/weather/cloudy.svg'\r\nimport pcloudy from '../../../assets/images/weather/pcloudy.svg'\r\nimport rain from '../../../assets/images/weather/rain.svg'\r\nimport thunder from '../../../assets/images/weather/thunder.svg'\r\n\r\nconst DefaultLocation = {\r\n  slug: \"cape-town\",\r\n  StationName: \"Cape Town\",\r\n  Lat: \"-33.963300\",\r\n  Lon: \"18.462200\",\r\n  ObservedDate: \"2022-02-16T07:00:00\"\r\n}\r\n\r\nconst pictures = {\r\n  'sunny' : sunny,\r\n  'windy' : windy,\r\n  'cloudy': cloudy,\r\n  'partlycloudyday': pcloudy,\r\n  'showersday': rain,\r\n  'modheavyrain': rain,\r\n  'rainy': rain,\r\n  'thunder': thunder\r\n}\r\n\r\nfunction GetDescription(Forecast) {\r\n  return Forecast.Weather.Description + ' with ' + (Forecast.Weather.Visibility + ' visibility and ' + Forecast.Precipitation.Description).toLowerCase()\r\n}\r\nfunction getAffix(number) {\r\n  switch( number.toString().slice(-1)) {\r\n    case '1': return 'st'\r\n    case '2': return 'nd'\r\n    case '3': return 'rd'\r\n    default: return 'th'\r\n  }\r\n}\r\nfunction getDay(dateString) {\r\n  const day = new Date(dateString)\r\n  return [\r\n    new Intl.DateTimeFormat('en-ZA', {weekday: 'short'}).format(day),\r\n    day.getDate() + getAffix(day.getDate())\r\n  ]\r\n}\r\nconst WeatherDay = ({forecast}) => {\r\n  if (forecast) {\r\n    const day = getDay(forecast.Date)\r\n    return (\r\n      <x.div className='weather-list' borderWidth={{ sm: '0 1px 1px 0', lg: '0 1px 0 0' }} borderStyle='solid' borderColor='divider' p={{ sm: '15px 20px', wAdD: '0 10px 10px', article: '0 20px 15px' }} gridColumn={{ sm: '1 / 2', lg: 'unset'}}>\r\n        <x.p mb={10}><strong>{day[0]}</strong> {day[1]}</x.p>\r\n        <x.div display='flex' alignItems='center' justifyContent='space-between'>\r\n          <x.img src={pictures[forecast.Day.Weather.Picture]} title={forecast.Day.Weather.Description} mr={{ sm: '20px', wAdD: '10px', article: '20px' }} w={45} />\r\n          <x.p text='medium' textAlign='right'><strong>{forecast.Temperature.Max}&deg;</strong><br />{forecast.Temperature.Min}&deg;</x.p>\r\n        </x.div>\r\n      </x.div>\r\n    )\r\n  }\r\n  return false\r\n}\r\nconst ComboBox = ({locations, setLocation}) => {\r\n  const [items, setItems] = useState(locations)\r\n  useEffect(()=>setItems(locations), [locations])\r\n  const {\r\n    isOpen,\r\n    getToggleButtonProps,\r\n    getMenuProps,\r\n    getInputProps,\r\n    getComboboxProps,\r\n    highlightedIndex,\r\n    getItemProps,\r\n  } = useCombobox({\r\n    items: items,\r\n    itemToString: item => item.StationName,\r\n    onSelectedItemChange: changes => setLocation(changes.selectedItem),\r\n    onInputValueChange: ({inputValue}) => {\r\n      setItems(\r\n        locations.filter(item =>\r\n          item.StationName.toLowerCase().startsWith(inputValue.toLowerCase()),\r\n        ),\r\n      )\r\n    },\r\n  })\r\n\r\n  return (\r\n    <x.div position='relative' my={{ sm: '10px', lg: '0'}}>\r\n      <x.div {...getComboboxProps()} border='1px solid #F0F0F0' p={5}>\r\n        <x.input {...getInputProps()} placeholder='Change location' w={{ sm: '100%', lg: 'auto'}} />\r\n        <x.button\r\n          type='button'\r\n          position='absolute'\r\n          right={8}\r\n          {...getToggleButtonProps()}\r\n          aria-label={'toggle menu'}\r\n        >\r\n          &#8595;\r\n        </x.button>\r\n      </x.div>\r\n      <x.ul {...getMenuProps()} position='absolute' top='100%' h={isOpen ? '250px' : 'initial'} w='100%' overflow='auto' bg='#F5F5F5' zIndex='100'>\r\n        {isOpen &&\r\n          items.map((item, index) => (\r\n            <x.li p={5} backgroundColor={{ _: '#F5F5F5' , hover: '#F0F0F0' }}\r\n              key={`${item}${index}`}\r\n              {...getItemProps({item, index})}\r\n            >\r\n              {item.StationName}\r\n            </x.li>\r\n          ))}\r\n      </x.ul>\r\n    </x.div>\r\n  )\r\n}\r\nconst WeatherWidget = props => {\r\n  const [manualLocation, setManualLocation] = useCookie('weather-city', '')\r\n  const [location, setLocation] = useState({})\r\n  const [locations, setLocations] = useState([])\r\n  const [weather, setWeather] = useState(false)\r\n\r\n  const updateSelectedItem = item => {\r\n    setLocation(item)\r\n    setManualLocation(item.slug)\r\n  }\r\n\r\n  useEffect(()=>{\r\n    const newLocation = locations.filter( item => {\r\n      return item.slug === manualLocation\r\n    })\r\n    if (newLocation.length) {\r\n      setLocation(newLocation[0])\r\n    }\r\n  }, [manualLocation, locations])\r\n\r\n  useEffect(()=>{\r\n    if (!manualLocation) {\r\n      axios.get('/data/weather/locations/closest')\r\n        .then(resp => resp.data)\r\n        .then(data => setLocation(data))\r\n    }\r\n  }, [])\r\n  useEffect(()=>{\r\n    axios.get('/data/weather/locations')\r\n      .then(resp => resp.data)\r\n      .then(data => setLocations(data))\r\n  }, [])\r\n  useEffect(()=>{\r\n    if (location.slug) {\r\n      axios.get('/data/weather/weather/'+location.slug)\r\n        .then(resp => resp.data)\r\n        .then(data => {\r\n          return setWeather(data[0])\r\n        })\r\n    }\r\n  }, [location])\r\n  return (\r\n    <>\r\n      <x.div w='100%' maxWidth={1220} mx='auto' mt={50} mb={30}>\r\n        <x.div borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={30} display='flex' flexDirection={{ sm: 'column', lg: 'row' }}>\r\n          <x.h1 text='h4' mr={20}>{location.StationName} Weather</x.h1>\r\n          <ComboBox locations={locations} setLocation={updateSelectedItem} />\r\n        </x.div>\r\n        <x.div display='grid' gridTemplateColumns={{ lg: 'minmax(min-content, 400px) repeat(6, 1fr)' }} borderWidth='0 0 8px 0' borderStyle='solid' borderColor='red' alignItems='flex-end'>\r\n          <x.div borderWidth={{ sm: '0 0 1px 0', lg: '0 1px 0 0' }} borderStyle='solid' borderColor='divider' p={{ sm: '15px 20px', wAdD: '0 10px 10px', article: '0 20px 15px' }} pt='0' gridColumn={{ sm: '1 / span 2', lg: 'unset'}}>\r\n            <x.p text='large' fontWeight='semiBold'>Today</x.p>\r\n            <x.div mt={20} display='grid' gridTemplateColumns={{ sm: '50% 50%', lg: 'minmax(min-content, 144px) 1fr' }} alignItems='center'>\r\n              <x.div borderWidth='0 1px 0 0' borderStyle='solid' borderColor='divider' display='flex' alignItems='center' justifyContent='space-between'>\r\n                {!weather ? (\r\n                  <>\r\n                    <x.img src={sunny} title='Sunny' mr={{ sm: '20px', wAdD: '10px', article: '20px' }} w={70} />\r\n                    <x.p text='large' pr={20} textAlign='right'><strong>--&deg;</strong><br />--&deg;</x.p>\r\n                  </>\r\n                ) : (\r\n                  <>\r\n                    <x.img src={pictures[weather.Forecasts.ForecastDay0.Day.Weather.Picture]} title={weather.Forecasts.ForecastDay0.Day.Weather.Description} mr={{ sm: '20px', wAdD: '10px', article: '20px' }} w={70} />\r\n                    <x.p text='large' pr={20} textAlign='right'><strong>{weather.Forecasts.ForecastDay0.Temperature.Max}&deg;</strong><br />{weather.Forecasts.ForecastDay0.Temperature.Min}&deg;</x.p>\r\n                  </>\r\n                )}\r\n              </x.div>\r\n              <x.div p='0 20px'>\r\n                <x.p text='large'>{weather ? GetDescription(weather.Forecasts.ForecastDay0.Day) : ''}</x.p>\r\n              </x.div>\r\n            </x.div>\r\n          </x.div>\r\n          {weather &&\r\n            <>\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay1} />\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay2} />\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay3} />\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay4} />\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay5} />\r\n              <WeatherDay forecast={weather.Forecasts.ForecastDay6} />\r\n            </>\r\n          }\r\n        </x.div>\r\n        <x.div p={10} display='flex' flexDirection='row' alignItems='middle' justifyContent='right'>\r\n          <x.img src={sunrise} mr={10} /><x.p text='medium'><x.strong mr={10}>Sunrise {weather ? weather.Forecasts.ForecastDay0.Astrological.SunRise : '--:--'}</x.strong><x.span>Sunset {weather ? weather.Forecasts.ForecastDay0.Astrological.Sunset : '--:--'}</x.span></x.p>\r\n        </x.div>\r\n      </x.div>\r\n    </>\r\n  )\r\n}\r\n\r\nexport default WeatherWidget\r\n","module.exports = __webpack_public_path__ + \"static/media/instagram-menu.d13fec85.svg\";","import React, { useEffect, useState } from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { Redirect, withRouter } from 'react-router'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport Helmet from 'react-helmet'\nimport loadable from '@loadable/component'\nimport { ThemeProvider, Preflight } from '@xstyled/styled-components'\nimport {\n  enableSingleRequest, enableLazyLoad, enableMappings, disableMappings, enableInterstitial, enableAgeTarget, enableArticleLevelTarget,\n  enableGenderTarget, disableAgeTarget, disableArticleLevelTarget, disableGenderTarget, enableSectionLevelTarget, disableSectionLevelTarget\n} from 'ion-ads'\n// import Ad from './components/Ad'\n// import { FORMATS } from './components/AdFormats'\n\nimport Theme from '../theme/default'\nimport GlobalStyle from '../theme/GlobalStyle'\nimport { pageView } from '../store/app'\nimport { getVisitorId, getSessionId } from '../store/article'\nimport useHasMounted from '../lib/useHasMounted'\n\nimport logo from '../../assets/images/general/iol-logo.svg'\nimport ScrollToTop from './components/ui/ScrollToTop'\nimport ErrorBoundaryErrorPage from './pages/ErrorBoundaryErrorPage'\nimport PushPrompt from './components/PushPrompt'\n\nimport Header from './shell/Header'\nimport Footer from './shell/Footer'\n\nimport { HomepageSkeleton, AuthorPageSkeleton, BasicPageSkeleton, TrendsPageSkeleton, ArticlePageSkeleton, BlankPageSkeleton } from './components/Skeletons'\nimport { MobileNewsletterSubscribePopup } from './components/MobileNewsletterSubscribePopup'\n\nconst Home = loadable(() => import('./pages/Home'), {\n  fallback: <HomepageSkeleton />\n})\nconst DefaultSection = loadable(() => import('./components/DefaultSection'), {\n  fallback: <BlankPageSkeleton />\n})\nconst Article = loadable(() => import('./pages/Article'), {\n  fallback: <ArticlePageSkeleton />\n})\n// const ArticleMock = loadable(() => import('./pages/ArticleMock'))\nconst MyNewsPage = loadable(() => import('./pages/MyNewsPage'))\nconst StaticPage = loadable(() => import('./pages/StaticPage'))\nconst SearchPage = loadable(() => import('./pages/SearchPage'), {\n  fallback: <BasicPageSkeleton />\n})\nconst CookieForm = process.env.RAZZLE_ENABLE_QUANTCAST ? undefined : loadable(() => import('./components/CookieForm'))\nconst AuthorSectionPage = loadable(() => import('./pages/AuthorPage'), {\n  fallback: <AuthorPageSkeleton />\n})\nconst VideoPage = loadable(() => import('./pages/VideoPage'))\nconst BrandstoriesPage = loadable(() => import('./pages/BrandstoriesPage'))\nconst TrendsPage = loadable(() => import('./pages/TrendsPage'), {\n  fallback: <TrendsPageSkeleton />\n})\nconst Feedback = loadable(() => import('./pages/Feedback'))\nconst NewslettersPage = loadable(() => import('./pages/NewslettersPage'))\nconst Digiserts = loadable(() => import('./pages/DigisertsPage'))\nconst NewspapersPage = loadable(() => import('./pages/NewspapersPage'))\nconst AuthorsPage = loadable(() => import('./pages/AuthorsPage'))\nconst BookmarksPage = loadable(() => import('./pages/BookmarksPage'))\nconst PushNotificationsManagementPage = loadable(() => import('./pages/PushNotificationsManagementPage'))\n\nclass ErrorBoundary extends React.Component {\n  constructor (props) {\n    super(props)\n    this.state = { hasError: false }\n  }\n\n  static getDerivedStateFromError (error) {\n    // Update state so the next render will show the fallback UI.\n    return { hasError: true, error }\n  }\n\n  componentDidCatch (error, errorInfo) {\n    // You can also log the error to an error reporting service\n    console.error(error, errorInfo)\n  }\n\n  render () {\n    if (this.state.hasError) {\n      // You can render any custom fallback UI\n      return (\n        <>\n          <ErrorBoundaryErrorPage error={this.state.error} />\n        </>\n      )\n    }\n    return this.props.children\n  }\n}\n\nexport const App = (props) => {\n  const [scrolling, setScrolling] = useState(true)\n  const toggleScrolling = () => setScrolling(!scrolling)\n  const isHydrated = useHasMounted()\n  useEffect(() => {\n    if (isHydrated) {\n      props.pageView(props.location.pathname, props.visitorId)\n    }\n  }, [props.location.pathname])\n  return (\n    <ThemeProvider theme={Theme}>\n      <Preflight />\n      <GlobalStyle />\n      <Helmet defaultTitle={process.env.RAZZLE_SITE_TITLE}>\n        <html lang='en' />\n        <link rel='apple-touch-icon' sizes='180x180' href='/favicon/apple-touch-icon.png' />\n        <link rel='icon' type='image/png' sizes='32x32' href='/favicon/favicon-32x32.png' />\n        <link rel='icon' type='image/png' sizes='16x16' href='/favicon/favicon-16x16.png' />\n        <link rel='mask-icon' href='/favicon/safari-pinned-tab.svg' color='#5bbad5' />\n        <meta name='msapplication-TileColor' content='#ffffff' />\n        <meta name='theme-color' content='#ffffff' />\n        <meta name='description' content={process.env.RAZZLE_SITE_DESCRIPTION} />\n        <meta name='msvalidate.01' content='5A0910AA1A12E32A5352933CF5FD96E9' />\n        <meta property='fb:app_id' content={process.env.RAZZLE_SITE_FACEBOOK_APP_ID} />\n        <meta property='og:type' content='article' />\n        <meta property='og:title' content={process.env.RAZZLE_SITE_TITLE} />\n        <meta property='og:description' content={process.env.RAZZLE_SITE_DESCRIPTION} />\n        <meta property='og:image' itemprop='image' content={logo} />\n        <meta itemprop='inLanguage' content='en' />\n        <meta itemprop='image' content={logo} />\n        <meta name='mobile-web-app-capable' content='yes' />\n        <meta name='google-site-verification' content={process.env.RAZZLE_GOOGLE_SITE_VERIFICATION} />\n        <meta itemprop='image' content={logo} />\n        <meta itemprop='thumbnailUrl' content={logo} />\n        <meta name='twitter:site' content={process.env.RAZZLE_SITE_TWITTER_USER} />\n        <meta name='twitter:creator' content={process.env.RAZZLE_SITE_TWITTER_USER} />\n        <meta name='twitter:card' content='summary_large_image' />\n        <meta name='twitter:image' content={logo} />\n        <meta property='fb:pages' content='21993963624' />\n        <meta name='facebook-domain-verification' content={process.env.RAZZLE_META_SITE_VERIFICATION} />\n        <meta name='awin-verification' content='Awin verification 001' />\n        <body className={scrolling ? '' : 'scrollingDisabled'} />\n      </Helmet>\n      <ScrollToTop />\n      <Header {...props} toggleScrolling={toggleScrolling} />\n      <Switch>\n        <Route exact path='/feedback/thankyou' render={() => <Feedback thanksMessage='Thank you for your feedback. We will get back to you shortly.' />} />\n        <Route exact path='/feedback' component={Feedback} />\n        <Route exact path='/' render={p => <Home {...p} />} />\n        <Route exact path='/test' render={p => <Home adPath='/test' {...p} />} />\n        <Route exact path='/test1' render={p => <Home adPath='/test1' {...p} />} />\n        <Route exact path='/test2' render={p => <Home adPath='/test2' {...p} />} />\n        {/* <Route exact path='/article' component={ArticleMock} /> */}\n        <Route exact path='/offline' render={() => <div>Loading...</div>} />\n        <Route exact path='/newsletters' render={p => <NewslettersPage {...p} />} />\n        <Route path='/digiserts' render={p => <Digiserts {...p} />} />\n        <Route\n          path='/preview' render={p => {\n            const searchParams = new URLSearchParams(p.location.search)\n            const shareId = searchParams.get('share_id')\n            return <Article {...props} {...p} url='preview' contentKey={shareId} />\n          }}\n        />\n        <Route\n          exact path='/search' render={(p) => {\n            return (\n              <SearchPage\n                {...p}\n                query={p.location.search}\n                twitterName={process.env.RAZZLE_SITE_TWITTER_USER}\n                titleTemplate={'%s | ' + process.env.RAZZLE_SITE_TITLE}\n              />\n            )\n          }}\n        />\n        <Route\n          exact path='/:page(terms-and-conditions)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Terms and Conditions | IOL'\n              description='Anyone making use of this website is subject to the following Terms and Conditions. Read more on our Terms of Use.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(privacy-policy)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Privacy Policy | IOL '\n              description='We take the privacy of our users seriously. Independent Online subscribes to and complies with the following privacy policy.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(about-iol)' render={p =>\n            <StaticPage\n              page='static-pages/about-iol-pwa'\n              title='About Us and Independent Media | IOL'\n              description='Find out more about Independent Online and Independent Media. Read the answers to frequently asked questions from our readers and advertisers.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/contact-iol'\n              title='About Us and Independent Media | IOL'\n              description='Find out more about Independent Online and Independent Media. Read the answers to frequently asked questions from our readers and advertisers.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(advertising)' render={p =>\n            <StaticPage\n              page='static-pages/advertising-iol'\n              title='About Us and Independent Media | IOL'\n              description='Find out more about Independent Online and Independent Media. Read the answers to frequently asked questions from our readers and advertisers.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(newspapers-contacts)' render={p =>\n            <StaticPage\n              page='newspapers-community-news/newspapers'\n              title='Explore Independent Media`s Premium Newspaper Titles | IOL'\n              description='Find out more about Independent Media`s newspaper titles, including The Star, Cape Times, The Mercury, Cape Argus, Daily News and Pretoria News, among others.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(augmented-reality)' render={p =>\n            <StaticPage\n              page='static-pages/augmented-reality'\n              title='Augmented Reality | IOL'\n              description='Augmented Reality.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(iol-mobile-app-faq)' render={p =>\n            <StaticPage\n              page='static-pages/iol-mobile-app-faq'\n              title='Augmented Reality | IOL'\n              description='Augmented Reality.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(complaints)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Independent Media Complaints Procedure | IOL'\n              description='Read more about Independent Media`s complaints procedure and how you can submit a complaint through the Ombudsman.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(help)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Help on IOL'\n              description='Help pages for navigating your way around the IOL site.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(press-code)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Independent Media Press Code | IOL'\n              description='IOL is committed to serving the interests of our readers and subscribes to the following Press Code of conduct for South African print and online media.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(classifieds)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Classified Adverts | IOL'\n              description='Looking to sell goods or services? Find out how to place your Classified Advert in any of our titles nationally, by contacting an agent in your region.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(cape-community-newspapers)' render={p =>\n            <StaticPage\n              page={'newspapers-community-news/' + p.match.params.page}\n              title='Local News and Sports Updates from Cape Community Newspapers | IOL'\n              description='Read the latest news from your neighbourhood. Independent Media`s community newspapers in Cape Town covers news on local issues, personalities and sport.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(rss)' render={p =>\n            <StaticPage\n              page={'static-pages/' + p.match.params.page}\n              title='Subscribe to our RSS Feeds | IOL'\n              description='Subscribe to our RSS (Really Simple Syndication) feeds to gain access to our content across multiple platforms and devices with regular automated updates.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(business-report/market-indicators)' render={p =>\n            <StaticPage\n              page='static-pages/business-report-market-indicators'\n              title='Latest and Breaking Market Data News | Business Report'\n              sectionLabel='Market Indicators'\n              description='Get all the latest market data news, anything from the rand to dollar exchange rate, to mineral and oil updates as well as share price updates that take place on the JSE.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(business-report/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/business-report-about-us'\n              title='About Us | Business Report'\n              description='We are determined to give you the latest business and technology news in South Africa and globally. We bring you up-to-date finance news, across all sectors.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(business-report/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/business-report-contact-us'\n              title='Contact Us | Get in Touch | Business Report'\n              description='We would love to hear from you. Get in touch with the Business Report Team by emailing us on BR.online@inl.co.za.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-about-us'\n              title='About Us | Personal Finance'\n              description='Get to know more about us. Personal Finance helps you secure your financial independence by exploring topics on wealth, investment and prosperity.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-contact-us'\n              title='Contact Us | Personal Finance'\n              description='We would like to hear from you. Find out how you can get on touch with the Personal Finance team based at Newspaper House, 122 St George`s Mall, Cape Town.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/collective-investments)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-collective-investments'\n              title='Collective Investments | IOL Personal Finance'\n              sectionLabel='Collective Investments Results'\n              description='Personal Finance brings you the latest reports and updates on collective investments performance.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/fund-look-up)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-fund-look-up'\n              title='Fund Look Up | IOL Personal Finance'\n              sectionLabel='Fund Look Up'\n              description='Use Personal Finance`s fund look-up tool for updates on various asset Fund Manager`s performances.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/fund-ranking-tool)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-fund-ranking-tool'\n              title='Fund Ranking Tool | IOL Personal Finance'\n              sectionLabel='Fund Ranking Tool'\n              description='Use Personal Finance`s fund ranking tool to see which investment and asset management company ranks the highest.'\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(personal-finance/performance-comparison-tool)' render={p =>\n            <StaticPage\n              page='static-pages/personal-finance-performance-comparison-tool'\n              title='Performance Comparison Tool | IOL Personal Finance'\n              sectionLabel='Performance Comparison Tool'\n              description='Use Personal Finance`s performance comparison tool to compare investment performance (returns) over different periods and/or different methods in a single table.'\n              {...p}\n            />}\n        />\n        {/* <Route exact path='/:page(personal-finance/money-tools)' render={p =>\n      <StaticPage\n        page='static-pages/personal-finance-money-tools'\n        title='Money Tools | IOL Personal Finance'\n        description='Personal Finance Money tools'\n        {...p}\n      />} />\n    <Route exact path='/:page(personal-finance/money-tools-loans)' render={p =>\n      <StaticPage\n        page='static-pages/personal-finance-money-tools-loans'\n        title='Loan Calculator | IOL Personal Finance'\n        description='Loan Calculator'\n        {...p}\n      />} />\n    <Route exact path='/:page(personal-finance/money-tools/interest-on-savings)' render={p =>\n      <StaticPage\n        page='static-pages/personal-finance-money-tools-interest-on-savings'\n        title='Interest on Savings Calculator | IOL Personal Finance'\n        description='Interest on Savings Calculator'\n        {...p}\n      />} /> */}\n        <Route\n          exact path='/:page(the-star/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/the-star-about-us'\n              title='The Star - About Us'\n              sectionLabel='The Star - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(the-star/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/the-star-contact-us'\n              title='The Star - Contact Us'\n              sectionLabel='The Star - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(the-star/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/the-star-advertising'\n              title='The Star - Advertising'\n              sectionLabel='The Star - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capeargus/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/capeargus-about-us'\n              title='Cape Argus - About Us'\n              sectionLabel='Cape Argus - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capeargus/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/capeargus-contact-us'\n              title='Cape Argus - Contact Us'\n              sectionLabel='Cape Argus - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capeargus/advertising-and-readership)' render={p =>\n            <StaticPage\n              page='static-pages/capeargus-advertising-and-readership'\n              title='Cape Argus - Advertising'\n              sectionLabel='Cape Argus - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(dailynews/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/dailynews-about-us'\n              title='Daily News - About Us'\n              sectionLabel='Daily News - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(dailynews/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/dailynews-contact-us'\n              title='Daily News - Contact Us'\n              sectionLabel='Daily News - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(dailynews/advertising-and-readership)' render={p =>\n            <StaticPage\n              page='static-pages/dailynews-advertising-and-readership'\n              title='Daily News - Advertising'\n              sectionLabel='Daily News - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capetimes/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/capetimes-about-us'\n              title='Cape Times - About Us'\n              sectionLabel='Cape Times - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capetimes/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/capetimes-contact-us'\n              title='Cape Times - Contact Us'\n              sectionLabel='Cape Times - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(capetimes/advertising-and-readership)' render={p =>\n            <StaticPage\n              page='static-pages/capetimes-advertising-and-readership'\n              title='Cape Times - Advertising'\n              sectionLabel='Cape Times - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(mercury/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/mercury-about-us'\n              title='The Mercury - About Us'\n              sectionLabel='The Mercury - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(mercury/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/mercury-contact-us'\n              title='The Mercury - Contact Us'\n              sectionLabel='The Mercury - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(mercury/advertising-and-readership)' render={p =>\n            <StaticPage\n              page='static-pages/mercury-advertising-and-readership'\n              title='The Mercury - Advertising'\n              sectionLabel='The Mercury - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(pretoria-news/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/pretoria-news-about-us'\n              title='Pretoria News - About Us'\n              sectionLabel='Pretoria News - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(pretoria-news/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/pretoria-news-contact-us'\n              title='Pretoria News - Contact Us'\n              sectionLabel='Pretoria News - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(pretoria-news/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/pretoria-news-advertising'\n              title='Pretoria News - Advertising'\n              sectionLabel='Pretoria News - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(saturday-star/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/saturday-star-advertising'\n              title='Saturday Star - Advertising'\n              sectionLabel='Saturday Star - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(ios/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/ios-about-us'\n              title='The Independent on Saturday - About Us'\n              sectionLabel='The Independent on Saturday - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(ios/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/ios-contact-us'\n              title='The Independent on Saturday - Contact Us'\n              sectionLabel='The Independent on Saturday - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(ios/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/ios-advertising'\n              title='The Independent on Saturday - Advertising'\n              sectionLabel='The Independent on Saturday - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sunday-tribune/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/sunday-tribune-about-us'\n              title='Sunday Tribune - About Us'\n              sectionLabel='Sunday Tribune - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sunday-tribune/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/sunday-tribune-contact-us'\n              title='Sunday Tribune - Contact Us'\n              sectionLabel='Sunday Tribune - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sunday-tribune/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/sunday-tribune-advertising'\n              title='Sunday Tribune - Advertising'\n              sectionLabel='Sunday Tribune - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sundayindependent/about-us)' render={p =>\n            <StaticPage\n              page='static-pages/sundayindependent-about-us'\n              title='Sunday Independent - About Us'\n              sectionLabel='Sunday Independent - About Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sundayindependent/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/sundayindependent-contact-us'\n              title='Sunday Independent - Contact Us'\n              sectionLabel='Sunday Independent - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(sundayindependent/advertising)' render={p =>\n            <StaticPage\n              page='static-pages/sundayindependent-advertising'\n              title='Sunday Independent - Advertising'\n              sectionLabel='Sunday Independent - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(thepost/contact-us)' render={p =>\n            <StaticPage\n              page='static-pages/thepost-contact-us'\n              title='The Post - Contact Us'\n              sectionLabel='The Post - Contact Us'\n              description=''\n              {...p}\n            />}\n        />\n        <Route\n          exact path='/:page(thepost/advertising-and-readership)' render={p =>\n            <StaticPage\n              page='static-pages/thepost-advertising-and-readership'\n              title='The Post - Advertising'\n              sectionLabel='The Post - Advertising'\n              description=''\n              {...p}\n            />}\n        />\n        {/* <Route\n          exact path='/video' render={() => (\n            <VideoPage\n              {...props}\n              section='multimedia/videos'\n              sectionLabel='Video'\n              relatedSections={[{ id: 'multimedia/podcasts' }, { id: 'news/video', label: 'News' }, { id: 'lifestyle/video', label: 'Lifestyle' }, { id: 'sport/video', label: 'Sport' }, { id: 'news/politics/video', label: 'Politics' }, { id: 'business-report/video', label: 'Business Report' }]}\n              title='Watch the Latest Video Content | IOL'\n              description='Watch the latest news, sport, business, entertainment, lifestyle, travel and motoring videos on IOL.'\n            />\n          )}\n        /> */}\n        <Route\n          exact path='/brandstories' render={() => (\n            <BrandstoriesPage\n              {...props}\n              section='brandstories'\n              mostReadSection='news'\n              title=''\n              description=''\n            />\n          )}\n        />\n        <Route\n          exact path='/trends' render={() => (\n            <TrendsPage\n              {...props}\n              section='trends'\n              mostReadSection='news'\n              title='IOL Trends'\n              description='All trends that have been offered on IOL to date.'\n            />\n          )}\n        />\n        <Route\n          exact path='/my-notifications' render={() => (\n            <PushNotificationsManagementPage\n              {...props}\n              section='news'\n              mostReadSection='news'\n              title='Notifications Management'\n              description='View your notifications history and manage the entities that you follow.'\n            />\n          )}\n        />\n        <Route\n          exact path='/my-news' render={() => (\n            <MyNewsPage\n              {...props}\n              section='news'\n              mostReadSection='news'\n              title='My News'\n              description='Articles chosen for the user based on historic preferences.'\n            />\n          )}\n        />\n        <Route\n          exact path='/my-bookmarks' render={() => (\n            <BookmarksPage\n              {...props}\n              section='news'\n              mostReadSection='news'\n              title='Bookmarks'\n              description='Articles which the user has bookmarked for offline reading.'\n            />\n          )}\n        />\n        <Route\n          exact path='/newspapers' render={() => (\n            <NewspapersPage\n              {...props}\n              section='newspapers'\n              title='Explore Independent Media`s Premium Newspaper Titles | IOL'\n              description='Find out more about Independent Media`s newspaper titles, including The Star, Cape Times, The Mercury, Cape Argus, Daily News and Pretoria News, among others.'\n            />\n          )}\n        />\n        <Route\n          exact path='/authors' render={() => (\n            <AuthorsPage\n              {...props}\n              section='authors'\n              mostReadSection='news'\n              title='IOL Authors'\n              description='All authors on IOL.'\n            />\n          )}\n        />\n        <Route\n          path='/authors/:author([a-zA-Z-]+)' render={(p) =>\n            <AuthorSectionPage {...props} {...p} authorSlug={p.match.params.author} />}\n        />\n        <Route\n          exact path='/puzzles' render={p => (\n            <StaticPage\n              page='static-pages/puzzles'\n              title='Puzzles removed'\n              description='Puzzles have been removed until further notice.'\n              {...p}\n            />\n          )}\n        />\n        <Route path='/undefined/:title([a-zA-Z0-9-]+):contentKey([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})' render={p => <Article {...p} contentKey={p.match.params.contentKey} />} />\n        <Route path='/undefined/:title([a-zA-Z0-9-]+)-:contentKey([0-9]{5,})' render={p => <Article {...p} contentKey={p.match.params.contentKey} />} />\n        <Route path='/:contentKey([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})' render={p => <Article {...p} contentKey={p.match.params.contentKey} />} />\n        <Route path='/:contentKey([0-9]{5,})' render={p => <Article {...p} contentKey={p.match.params.contentKey} />} />\n        <Route path='/:section([a-zA-Z0-9-]+)/' strict exact render={p => <Redirect to={'/' + p.match.params.section} />} />\n        <Route path='/:section([a-zA-Z0-9-]+)' render={p => <DefaultSection {...p} twitterName={process.env.RAZZLE_SITE_TWITTER_USER} />} />\n      </Switch>\n      <Footer toggleScrolling={toggleScrolling} section={props.section} visitorId={props.visitorId} sessionId={props.sessionId} />\n      <PushPrompt section={props.section} visitorId={props.visitorId} sessionId={props.sessionId} />\n      {process.env.RAZZLE_ENABLE_QUANTCAST\n        ? null\n        : <CookieForm />}\n      {process.env.RAZZLE_ENABLE_NEWSLETTER_POPUPS &&\n        <MobileNewsletterSubscribePopup />}\n    </ThemeProvider>\n  )\n}\n\n/**\n * enable Single Request Mode for Ads\n *\n * This setting requires a call to `performSingleRequest` to initiate the fetch. This is currently achieved using sagas,\n * leveraging `onSlotRegistered` to trigger an action, and debouncing the events to catch the last one in the series to\n * trigger the `performSingleRequest` call.\n */\nenableSingleRequest()\n// enableAnchorAds()\nenableInterstitial()\nif (process.env.RAZZLE_ENABLE_GAM && process.env.RAZZLE_ENABLE_LAZYLOAD) {\n  enableLazyLoad()\n}\nif (process.env.RAZZLE_ENABLE_MAPPINGS) {\n  enableMappings()\n} else {\n  disableMappings()\n}\n\nif (process.env.RAZZLE_ENABLE_AGE_TARGET) {\n  enableAgeTarget()\n} else {\n  disableAgeTarget()\n}\n\nif (process.env.RAZZLE_ENABLE_GENDER_TARGET) {\n  enableGenderTarget()\n} else {\n  disableGenderTarget()\n}\n\nif (process.env.RAZZLE_ENABLE_ARTICLE_LEVEL_TARGET) {\n  enableArticleLevelTarget()\n} else {\n  disableArticleLevelTarget()\n}\n\nif (process.env.RAZZLE_ENABLE_SECTION_LEVEL_TARGET) {\n  enableSectionLevelTarget()\n} else {\n  disableSectionLevelTarget()\n}\n\nconst mapStateToProps = (state) => ({ ...state.app, ...{ visitorId: getVisitorId(state) }, ...{ sessionId: getSessionId(state) } })\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ pageView }, dispatch)\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))\n\nexport { ErrorBoundary }\n","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_AUTHOR = 'api/FETCH_AUTHOR'\nexport const FETCH_AUTHOR_SUCCESS = 'api/FETCH_AUTHOR_SUCCESS'\nexport const FETCH_AUTHOR_ERROR = 'api/FETCH_AUTHOR_ERROR'\nexport const FETCH_AUTHOR_NOT_FOUND = 'api/FETCH_AUTHOR_NOT_FOUND'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/content' : process.env.RAZZLE_CONTENT\n\nconst cache = Cache()\n\nexport async function fetchAuthorAPI (authorSlug) {\n  const key = '/author/' + process.env.RAZZLE_TITLE_KEY + '/' + authorSlug\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  try {\n    const response = await axios.get(SERVER_URL + key)\n    return cache.set(key, response.data, 60000 * 30)\n  } catch (error) {\n    console.log('fetchAuthorAPI:', error.message)\n    throw error\n  }\n}\n\nfunction * fetchAuthorSaga ({ authorSlug }) {\n  try {\n    const res = yield call(fetchAuthorAPI, authorSlug)\n    yield put({ type: FETCH_AUTHOR_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_AUTHOR_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchAuthor () {\n  yield takeLatest(FETCH_AUTHOR, fetchAuthorSaga)\n}\n\nexport const fetchAuthor = (authorSlug) => ({ type: FETCH_AUTHOR, isFetching: true, hasFetched: false, authorSlug })\n\nexport const initialState = {\n  didInvalidate: false,\n  lastFetch: 0,\n  isFetching: false,\n  hasFetched: false,\n  hasError: false,\n  is404: false,\n  error: null,\n  author: null\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  switch (type) {\n    case FETCH_AUTHOR:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        is404: false,\n        hasError: false,\n        error: null\n      })\n    case FETCH_AUTHOR_NOT_FOUND:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: true,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        author: null\n      })\n    case FETCH_AUTHOR_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: false,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n    case FETCH_AUTHOR_SUCCESS:\n      return Object.assign({}, state, {\n        lastFetch: new Date(),\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        author: payload,\n        hasError: false,\n        is404: false,\n        error: null\n      })\n    default:\n      return state\n  }\n}\n","import styled, { th } from '@xstyled/styled-components'\n\nexport const StyledSelectedTabButton = styled.button`\n  ${th('tabs.buttons.selected')};\n`\n\nexport const StyledTabButton = styled.button`\n    ${th('tabs.buttons.normal')};\n`\n","import React, { useState } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport {StyledSelectedTabButton, StyledTabButton} from './Tabs.style'\n\nfunction TabButton({selected, id,setSelected, onTabChange, children, ...rest }) {\n  if (selected === id) {\n    return (\n      <StyledSelectedTabButton role='tab' ariaSelected='true' id={id} {...rest}>{children}</StyledSelectedTabButton>\n    )\n  }\n  return (\n    <StyledTabButton role='tab' ariaSelected='false' id={id} onClick={() => { \n      setSelected(id)\n      if (onTabChange) {\n        onTabChange()\n      }\n    }} {...rest}>{children}</StyledTabButton>\n  )\n}\n\nfunction TabPanel({selected, id, children, ...rest}) {\n  return (\n    <x.div role='tabpanel' visible={selected === id ? 'true' : 'false'} id={id + '-tab'} {...rest} display={selected === id ? 'block' : 'none'}>{children}</x.div>\n  )\n}\n\nfunction TabList(props) {\n  return (\n    <x.div role='tablist' {...props}>\n      {props.children}\n    </x.div>\n  )\n}\n\nexport const useTabState = ({selectedId}) => {\n  const [selected, setSelected] = useState(selectedId)\n  return {\n    selected, setSelected\n  }\n}\n\nexport const Tab = {}\nTab.List = TabList\nTab.Tab = TabButton\nTab.Panel = TabPanel\n","import {useRef} from 'react'\n//import MenuArrow from '../../../../assets/images/icons/accordian.svg'\nimport './CSSAccordion.css'\nimport { x } from '@xstyled/styled-components'\n\nconst AccordionItem = ({title, name, prefix, children}) => {\n  const input = useRef(null)\n  return (\n    <x.div className='tab'>\n      <x.input type='radio' name={name} id={'tab-' + prefix + title} ref={input} />\n      <x.label className='tab-label' borderRadius={3} p='10px 15px' mb={5} bg='#F5F5F5'\n        display='flex' flexDirection='row' alignItems='center' justifyContent='space-between'\n        fontWeight='600' color='#434343' htmlFor={'tab-' + prefix + title} onClick={(e) => {\n        if (input.current.checked) {\n          input.current.checked = false\n          e.preventDefault()\n        }\n        }} >{title}</x.label>\n      <x.div className='tab-content'>\n        {children}\n      </x.div>\n    </x.div>\n  )\n}\n\nconst Accordion = ({children}) => {\n  return (\n    <div className='tabs'>\n      {children}\n    </div>\n  )\n}\n\nexport {AccordionItem, Accordion}\n","module.exports = __webpack_public_path__ + \"static/media/search-ico.c1a8f28e.svg\";","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.parseArticle = parseArticle;\nexports[\"default\"] = void 0;\n\nvar _urlify = _interopRequireDefault(require(\"urlify\"));\n\nvar BetaDates = _interopRequireWildcard(require(\"ion-betaDates\"));\n\nvar _ionSections = _interopRequireDefault(require(\"ion-sections\"));\n\nvar _parseArticle2 = require(\"./parse-article\");\n\nvar _ionUtil = require(\"ion-util\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar logger = console;\n\nvar urlify = _urlify[\"default\"].create({\n  addEToUmlauts: true,\n  szToSs: true,\n  spaces: '-',\n  nonPrintable: '',\n  toLower: true,\n  trim: false\n}); // // These items below should be pulled from siteProps  *****************************************************\n\n\nvar defaultArticleSectionUri = 'news'; // // *****************************************************\n\nvar SLUG_REGEX = '([a-z0-9_.-]+)';\nvar COMPETITION_REGEX = '\\\\[competition\\\\s?\\\\=\\\\s?[\\'\"]?%s[\\'\"]?\\\\]';\nvar TIMELINE_REGEX = /\\[timeline=([^ ]+)(?: mode=([^ ]+))?\\]/g;\n\nfunction isSimilarText(text, other) {\n  if (text && other) {\n    text = text.replace(/\\W/g, '').toLowerCase();\n    other = other.replace(/\\W/g, '').toLowerCase();\n    return text === other;\n  }\n\n  return false;\n}\n\nvar Article = /*#__PURE__*/function () {\n  function Article(props) {\n    _classCallCheck(this, Article);\n\n    Object.assign(this, props); // if (typeof this.contentKey === 'string') {\n    //   this.contentKey = parseInt(this.contentKey)\n    // }\n\n    if (this.modified > 0) {\n      this.modified = new Date(this.modified).toISOString().substring(0, 16);\n    }\n\n    if (this.published > 0) {\n      this.published = new Date(this.published).toISOString().substring(0, 16);\n    }\n\n    if (!this.bodyHTML) {\n      this.bodyHTML = '';\n    } else if (!/[A-Z][a-z]/.test(this.bodyHTML)) {\n      this.bodyHTML = '';\n    }\n\n    if (this[\"abstract\"]) {\n      this.formatAbstract();\n    }\n\n    if (!this.relatedArticles) {\n      this.relatedArticles = [];\n    }\n  } // This stuff below was brought in from BaobabArticle  *****************************************************\n\n\n  _createClass(Article, [{\n    key: \"extractRegex\",\n    value: function extractRegex(regex, string) {\n      var match = string.match(regex);\n\n      if (match && match.length > 1) {\n        return match[1];\n      }\n    }\n  }, {\n    key: \"formatAbstract\",\n    value: function formatAbstract() {\n      this[\"abstract\"] = this[\"abstract\"].replace(/^\\* /, '');\n\n      if (this.author) {\n        if (isSimilarText(this[\"abstract\"], this.author)) {\n          this[\"abstract\"] = '';\n        } else {// logger.debug('author', this.author, this.abstract)\n        }\n      } else {// logger.debug('author none', ObjectLogs.keys(this))\n      }\n\n      var regex = /^(Address:\\s*)?(.*\\w)\\W+(Phone|Tel|phone|tel)\\s*:\\s*([0-9][0-9\\s]+[0-9])\\W*$/;\n      var match = this[\"abstract\"].match(regex);\n\n      if (match) {\n        this.address = match[2];\n        this.phone = match[4];\n\n        if (!this.bodyHTML) {\n          var phoneNumber = this.extractRegex(/\\+?0?([1-9]{8})/, this.phone.replace(/[^0-9+-]/g, '')); // logger.debug('listing', match, this.bodyHTML, phoneNumber)\n\n          if (phoneNumber && phoneNumber.length === 8) {\n            this.bodyHTML = \"<p class=\\\"link\\\"><svg class=\\\"iconSvgPhone\\\" viewBox=\\\"0 0 1792 1792\\\"><path d=\\\"M496.4,653c-54.3-44.4-116.9-104.1-171.2-171.5c-38.1-47.2-71.8-96.8-37-131.7l-244.1-244C8.5,150.3-70.4,362.1,267.6,708.7C623.8,1074,853.4,995.9,893,954.8L654.9,716.5C621.6,749.7,578.7,720.1,496.4,653z M978.8,816.3v-0.3c0,0-185.6-185.5-185.7-185.6c-14.7-14.9-38.3-14.4-52.9,0.1l-67.4,67.3l238.5,238.9c0,0,67.5-67.4,67.4-67.4l0.1-0.1C994.5,854,992.9,830.4,978.8,816.3z M374,264.2V264c15.6-15.6,14-39,0-53.1v-0.2c0,0-191.1-191-191.2-191.1C168.1,4.9,144.6,5.2,130,19.7L62.6,87.3l243.9,244.1C306.6,331.5,374,264.3,374,264.2z\\\"></path></svg><a href=\\\"tel:+27-\".concat(phoneNumber, \"\\\">\").concat(this.phone, \"</a>\");\n          } else {\n            this.bodyHTML = \"<p class=\\\"link\\\"><svg class=\\\"iconSvgPhone\\\" viewBox=\\\"0 0 1792 1792\\\"><path d=\\\"M496.4,653c-54.3-44.4-116.9-104.1-171.2-171.5c-38.1-47.2-71.8-96.8-37-131.7l-244.1-244C8.5,150.3-70.4,362.1,267.6,708.7C623.8,1074,853.4,995.9,893,954.8L654.9,716.5C621.6,749.7,578.7,720.1,496.4,653z M978.8,816.3v-0.3c0,0-185.6-185.5-185.7-185.6c-14.7-14.9-38.3-14.4-52.9,0.1l-67.4,67.3l238.5,238.9c0,0,67.5-67.4,67.4-67.4l0.1-0.1C994.5,854,992.9,830.4,978.8,816.3z M374,264.2V264c15.6-15.6,14-39,0-53.1v-0.2c0,0-191.1-191-191.2-191.1C168.1,4.9,144.6,5.2,130,19.7L62.6,87.3l243.9,244.1C306.6,331.5,374,264.3,374,264.2z\\\"></path></svg>\".concat(this.phone);\n          }\n\n          this.bodyHTML += \"<p class=\\\"link\\\"><svg class=\\\"iconSvgEmail\\\" viewBox=\\\"0 0 1792 1792\\\"><path d=\\\"M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z\\\"/></svg>\".concat(this.address, \"<p>\");\n        }\n\n        this[\"abstract\"] = 'Tel: ' + this.phone; // + '\\n' + this.address;\n      } else {\n        this[\"abstract\"] = this[\"abstract\"].replace(/^<p>/, '');\n        this[\"abstract\"] = this[\"abstract\"].replace(/<\\/p>$/, '');\n        this[\"abstract\"] = this[\"abstract\"].replace(/<!--PSTYLE=Normal-->/, '');\n        this[\"abstract\"] = this[\"abstract\"].replace(/<p>/, '');\n      }\n\n      if (!this.bodyHTML) {\n        this.bodyHTML = this[\"abstract\"];\n      }\n    }\n  }, {\n    key: \"getCanonicalUri\",\n    value: function getCanonicalUri() {\n      if (this.externalUri) {\n        return this.externalUri;\n      }\n\n      var name = this.buildName();\n      name += '-' + this.contentKey;\n      var sectionId = this.category || this.section;\n\n      if (sectionId) {\n        return sectionId + '/' + name;\n      } else {\n        logger.warn('getCanonicalUri: No section defined for article:', this.contentKey);\n        return name;\n      }\n    }\n  }, {\n    key: \"basename\",\n    value: function basename(path) {\n      var matcher = path.match(/([^\\/]+)\\.[a-z]+$/);\n\n      if (matcher) {\n        return matcher[1];\n      } else {\n        return path;\n      }\n    }\n  }, {\n    key: \"getImageObject\",\n    value: function getImageObject() {\n      if (this.image) {\n        return this.image;\n      } else if (!(0, _ionUtil.isEmpty)(this.images)) {\n        return this.images[0];\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: \"getBodyLead\",\n    value: function getBodyLead() {\n      if (this.bodyLead) {\n        return this.bodyLead;\n      }\n\n      return '';\n    }\n  }, {\n    key: \"getBodyMore\",\n    value: function getBodyMore() {\n      if (this.bodyMore) {\n        return this.bodyMore;\n      }\n\n      return '';\n    }\n  }, {\n    key: \"getImageWidth\",\n    value: function getImageWidth() {\n      var image = this.getImageObject();\n\n      if (image && image.width) {\n        return image.width;\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: \"getImageHeight\",\n    value: function getImageHeight() {\n      var image = this.getImageObject();\n\n      if (image && image.height) {\n        return image.height;\n      } else {\n        return '';\n      }\n    } // The stuff above was brought in from BaobabArticle  *****************************************************\n\n  }, {\n    key: \"getHeadline\",\n    value: function getHeadline() {\n      assert(this.headline);\n\n      if (this.headline.length > 160) {\n        return this.headline.replace(/([A-Za-z]*.\\.)\\s.*$/, '$1');\n      } else {\n        return this.headline;\n      }\n    } // getSectionLabel () {\n    //   var sectionId = this.getSectionId()\n    //   return Sections.getSectionLabel(sectionId)\n    // }\n\n  }, {\n    key: \"getSectionId\",\n    value: function getSectionId() {\n      if (this.category) {\n        return this.category;\n      } else if (this.section) {\n        return this.section;\n      } else {\n        logger.warn('getSectionId other', this.contentKey);\n        return defaultArticleSectionUri;\n      }\n    } // getGrandSectionLabel () {\n    //   var sectionId = this.getGrandSectionId(this)\n    //   return Sections.getSectionLabel(sectionId)\n    // }\n\n  }, {\n    key: \"getGrandSectionId\",\n    value: function getGrandSectionId() {\n      var sectionId = this.getSectionId();\n\n      if (sectionId) {\n        return sectionId.split('/')[0];\n      }\n    }\n  }, {\n    key: \"getPath\",\n    value: function getPath() {\n      return '/' + this.getUri();\n    }\n  }, {\n    key: \"getUri\",\n    value: function getUri() {\n      var sectionId = this.getSectionId();\n\n      if (!sectionId) {\n        return this.getName();\n      } else {\n        return sectionId + '/' + this.getName();\n      }\n    }\n  }, {\n    key: \"getName\",\n    value: function getName() {\n      return this.buildName() + '-' + this.contentKey;\n    }\n  }, {\n    key: \"buildName\",\n    value: function buildName() {\n      return urlify(this.headline.replace(/\\&/g, '-and-')).replace(/-+/g, '-');\n    }\n  }, {\n    key: \"getAbstract\",\n    value: function getAbstract() {\n      if (this[\"abstract\"]) {\n        var _abstract = this[\"abstract\"].trim();\n\n        if (_abstract.length > 150) {\n          var index = _abstract.indexOf('. ');\n\n          if (index > 0 && index < 150) {\n            _abstract = _abstract.substring(0, index + 1);\n          } else {\n            index = _abstract.substring(120).indexOf(' ');\n            _abstract = _abstract.substring(0, 120 + index) + ' ...';\n          }\n        } else if (!_abstract.endsWith('.')) {}\n\n        return _abstract;\n      }\n    }\n  }, {\n    key: \"formatByline\",\n    value: function formatByline() {\n      var author = this.getAuthor();\n\n      if (author) {\n        return 'By ' + author;\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: \"getAuthor\",\n    value: function getAuthor() {\n      if (!this) {\n        // logger.warn('getAuthor')\n        return null;\n      } else if (this.author) {\n        return this.author;\n      } else if (this.byline) {\n        if (this.byline.indexOf('By ') === 0) {\n          return this.byline.substring(3);\n        } else {\n          return this.byline;\n        }\n      } else {\n        // logger.debug('getAuthor empty', this.contentKey)\n        return null;\n      }\n    }\n  }, {\n    key: \"formatImageCredit\",\n    value: function formatImageCredit(index) {\n      // logger.debug('formatImageCredit', this.contentKey, index)\n      if (this.images && this.images.length > index && typeof this.images[index].credit === 'string') {\n        return this.images[index].credit.replace(/\\.$/, '');\n      }\n\n      return '';\n    }\n  }, {\n    key: \"formatImageCaption\",\n    value: function formatImageCaption() {\n      try {\n        var image = this.getImageObject();\n\n        if (image) {\n          if (image.captions && image.captions.length) {\n            return image.captions.trim(); // TODO\n          }\n\n          if (Array.isArray(image.caption) && image.caption.length) {\n            return image.caption.trim(); // TODO\n          }\n\n          return image.caption;\n        }\n      } catch (err) {\n        logger.error(err);\n      }\n\n      return '';\n    }\n  }, {\n    key: \"formatImageCaptionCredit\",\n    value: function formatImageCaptionCredit(index) {\n      var caption = this.formatImageCaption();\n      var credit = this.formatImageCredit(0);\n\n      if (!(0, _ionUtil.isEmpty)(caption)) {\n        if (credit && caption.toLowerCase().indexOf(credit.toLowerCase()) < 0) {\n          if (!caption.endsWith('.')) {\n            caption += '. Credit: ' + credit;\n          } else {\n            caption += ' Credit: ' + credit;\n          }\n        }\n      } else if (!(0, _ionUtil.isEmpty)(credit)) {\n        caption = 'Credit: ' + credit;\n      }\n\n      return caption;\n    }\n  }, {\n    key: \"getYoutubeCardImage\",\n    value: function getYoutubeCardImage() {\n      if (this.youtube) {\n        return 'http://img.youtube.com/vi/' + this.youtube.id + '/0.jpg';\n      }\n\n      if (!(0, _ionUtil.isEmpty)(this.youtubes)) {\n        return 'http://img.youtube.com/vi/' + this.youtubes[0].id + '/0.jpg';\n      }\n    }\n  }, {\n    key: \"formatAgo\",\n    value: function formatAgo() {\n      var full = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      try {\n        if (this.published) {\n          var published = new Date(this.published);\n          var seconds = Math.floor((new Date() - published) / 1000);\n          var interval = Math.floor(seconds / 43200);\n\n          if (interval > 1) {\n            return this.formatDate(true);\n          }\n\n          interval = Math.floor(seconds / 3600);\n\n          if (interval >= 1) {\n            return interval + 'h' + (full ? ' ago' : '');\n          }\n\n          interval = Math.floor(seconds / 60);\n\n          if (interval > 1) {\n            return interval + 'm' + (full ? ' ago' : '');\n          }\n\n          return Math.floor(seconds) + 's' + (full ? ' ago' : '');\n        } else if (this.publishedString) {\n          return this.publishedString;\n        } else {// logger.warn('formatAgo published', this.contentKey, ObjectLogs.formatKeys(this.props))\n        }\n      } catch (err) {\n        logger.error(err, 'formatAgo', this.contentKey, this.props);\n      }\n\n      return '';\n    }\n  }, {\n    key: \"parseDate\",\n    value: function parseDate() {\n      if (this.published) {\n        if (typeof this.published === 'string') {\n          if (this.published.length === 16) {\n            return Date.parse(this.published + 'Z');\n          }\n        } else if (Number.isInteger(this.published)) {\n          return new Date(this.published);\n        }\n      } else {\n        logger.error('parseDate', this.contentKey, this.published);\n      }\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(_short) {\n      try {\n        if (this.published) {\n          return new Date(this.published).toLocaleDateString('en-US', {\n            year: 'numeric',\n            month: _short ? 'short' : 'long',\n            day: 'numeric'\n          });\n        } else if (this.publishedString) {\n          return this.publishedString;\n        } else {\n          logger.warn('formatDate', this.contentKey);\n        }\n      } catch (err) {\n        logger.error(err, 'formatDate', this.contentKey);\n      }\n\n      return '';\n    }\n  }, {\n    key: \"getCompetitionSlug\",\n    value: function getCompetitionSlug() {\n      var match = this.bodyHTML.match(COMPETITION_REGEX.replace('%s', SLUG_REGEX));\n\n      if (match && match.length > 1) {\n        return match[1];\n      }\n\n      return false;\n    }\n  }, {\n    key: \"hasCompetitionSlug\",\n    value: function hasCompetitionSlug() {\n      return this.getCompetitionSlug() !== false;\n    }\n  }, {\n    key: \"setCompetition\",\n    value: function setCompetition(competitionSlug, competitionHTML) {\n      return this.bodyHTML.replace(new RegExp(COMPETITION_REGEX.replace('%s', competitionSlug)), competitionHTML);\n    }\n  }, {\n    key: \"getTimelineSlugs\",\n    value: function getTimelineSlugs() {\n      var timelineMatches = this.bodyHTML.match(TIMELINE_REGEX);\n      var timelineSlugs = timelineMatches === null || timelineMatches === void 0 ? void 0 : timelineMatches.map(function (match) {\n        return match.match(/\\[timeline=([^ ]+)(?: mode=([^ ]+))?\\]/)[1];\n      });\n\n      if (timelineSlugs && timelineSlugs.length > 0) {\n        return timelineSlugs;\n      }\n\n      return false;\n    }\n  }]);\n\n  return Article;\n}();\n\nexports[\"default\"] = Article;\n\nfunction parseArticle(_x) {\n  return _parseArticle.apply(this, arguments);\n}\n\nfunction _parseArticle() {\n  _parseArticle = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(rawArticle) {\n    return regeneratorRuntime.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            return _context.abrupt(\"return\", (0, _parseArticle2.parseArticleData)(rawArticle));\n\n          case 1:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _callee);\n  }));\n  return _parseArticle.apply(this, arguments);\n}","import { useRef, useState, useEffect } from 'react'\n\nfunction throttle (fn, cooldown) {\n  let lastArgs\n  const run = () => {\n    if (lastArgs) {\n      fn(...lastArgs)\n      lastArgs = undefined\n    }\n  }\n  const throttled = (...args) => {\n    const isOnCooldown = !!lastArgs\n    lastArgs = args\n    if (isOnCooldown) {\n      return\n    }\n    window.setTimeout(run, cooldown)\n  }\n  return throttled\n}\n\nfunction useScrollDirection (options) {\n  if (typeof window === 'undefined') {\n    return 'up'\n  }\n  const topDelay = options.topDelay || 0\n  const scrollPos = useRef(0)\n  const [direction, setDirection] = useState('up')\n\n  useEffect(() => {\n    const handleScroll = throttle(() => {\n      if (window.pageYOffset > topDelay) {\n        setDirection(window.pageYOffset > scrollPos.current ? 'down' : 'up')\n        if (Math.abs(window.pageYOffset - scrollPos.current) > 600) {\n          scrollPos.current = window.pageYOffset\n        }\n      } else {\n        setDirection('up')\n      }\n    }, 100)\n    document.addEventListener('scroll', handleScroll)\n    return () => document.removeEventListener('scroll', handleScroll)\n  }, [])\n  return direction\n}\n\nexport default useScrollDirection\n","import React from 'react'\nimport { x } from '@xstyled/styled-components'\n// import Link from './../components/ui/Link'\n\nconst CommercialNav = (props) => (\n  <x.div w='100%' backgroundColor='black' visibility={{ sm: 'hidden', lg: 'visible' }} display={{ sm: 'none', lg: 'flex' }} justifyContent='center' px={20}>\n    <x.div w='100%' maxWidth='1220px' display='flex' alignItems='center'>\n      <x.div w='80%' textTransform='uppercase' fontSize='meta' my={6} display='flex' alignItems='center'>\n        <x.a opacity={{ hover: 0.8 }} target='_blank' href='https://www.loot.co.za/welcome?utm_source=iollink&utm_medium=textlink&utm_campaign=iolnavbarshopatlootlink' mr={15} text='commercial-nav'>Shop @ Loot</x.a>\n        {/* <x.a opacity={{ hover: 0.8 }} target='_blank' href='/personal-finance' mr={15} text='commercial-nav'>Personal Finance</x.a> */}\n        {/* <x.a opacity={{ hover: 0.8 }} target='_blank' href='https://www.isolezwe.co.za/' mr={15} text='commercial-nav'>Isolezwe</x.a> */}\n        {/* <x.a opacity={{ hover: 0.8 }} target='_blank' href='https://www.dailyvoice.co.za/' mr={15} text='commercial-nav'>Daily Voice</x.a> */}\n        <x.a opacity={{ hover: 0.8 }} target='_blank' href='https://www.iolproperty.co.za/' mr={15} text='commercial-nav'>IOL Property</x.a>\n        {/* <x.a opacity={{ hover: 0.8 }} target='_blank' href='https://issuu.com/independentnewspapers' mr={15} text='commercial-nav'>Digi Mags</x.a> */}\n        {/* <Link opacity={{ hover: 0.8 }} mr={15} fontSize='0.75rem' color='white' to={'/digiserts'}>Digiserts</Link> */}\n      </x.div>\n    </x.div>\n  </x.div>\n)\n\nexport default CommercialNav\n","import React, { useState, useEffect } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport StyledLink from '../components/ui/Link'\nimport { db } from '../../client/db'\nimport { getCookie } from './ui/utils'\n\nimport bellIcon from '../../../assets/images/icons/notifications-ico.svg'\n\nconst NotificationsBell = (props) => {\n  const [ UnreadCount, setUnreadCount ] = useState(0)\n  const clickSource = 'Notifications Bell'\n  useEffect(() => {\n    const NotificationsLastViewed = getCookie('NotificationsLastViewed')\n    db.messages.toArray().then(articles =>\n      setUnreadCount((articles.filter(article =>\n        Date.parse(article.timestamp) > Date.parse(NotificationsLastViewed))).length\n      )\n    )\n  }, [])\n\n  return (\n    <StyledLink to='/my-notifications' mr={10} title='View recent push notifications.' position='relative' visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource} section={props.section}>\n      <x.img src={bellIcon} alt={'View ' + UnreadCount + ' recent articles pushed to you.'} />\n      {UnreadCount > 0 &&\n        <x.span bg='red' w='12px' h='12px' borderRadius={100} position='absolute' top={-2} right={-3} display='flex' alignItems='center' justifyContent='center' color='white' lineHeight={1} fontSize={9}>\n          <x.span>{UnreadCount}</x.span>\n        </x.span>\n      }\n    </StyledLink>\n  )\n}\n\nexport default NotificationsBell\n","import React from 'react'\nimport { x } from '@xstyled/styled-components'\nimport StyledLink from '../components/ui/Link'\nimport logo from '../../../assets/images/general/iol-logo.svg'\nimport NotificationsBell from '../components/NotificationsBell'\n\nimport facebook from '../../../assets/images/social-media/facebook.svg'\nimport twitter from '../../../assets/images/social-media/x.svg'\nimport weather from '../../../assets/images/icons/weather.svg'\nimport search from '../../../assets/images/icons/search-input-wht-ico.svg'\n\nconst HomeHeader = (props) => {\n  const clickSource = 'Site Header'\n  const section = props.section || 'news'\n  return (\n    <x.div w='100%' zIndex={props.wallpaperActive ? '0' : '11'} maxWidth='1220px' m='auto' py={20} px={{ sm: '20px', xl: '0' }} display={{ sm: 'none', lg: 'flex' }} visibility={{ sm: 'hidden', lg: 'visible' }} justifyContent='center' alignItems='center'>\n      <x.div flex={{ sm: '100%', lg: '1 1 0' }} display='flex' alignItems='center' justifyContent={{ sm: 'center', lg: 'flex-start' }}>\n        <StyledLink to='/' visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource} section={section}><x.img src={logo} alt='Independent Online' maxWidth='100px' /></StyledLink>\n      </x.div>\n      <form action='/search' method='get' onSubmit={(e) => {\n        const formData = new FormData(e.target)\n        if (!formData.get('q')) {\n          e.preventDefault()\n        }\n      }}>\n        <x.div flex={{ sm: '100%', lg: '1 1 0' }} display='flex' alignItems='center' justifyContent='center'>\n          <x.input type='search' name='q' bg='ltGrey' p={10} text='medium' w={300} appearance='none' borderRadius={0} placeholder='Search IOL' />\n          <x.button bg='grey' type='submit' w={38} h={38} display='flex' alignItems='center' justifyContent='center'><x.img src={search} w={24} /></x.button>\n        </x.div>\n      </form>\n      <x.div flex='1 1 0' textTransform='uppercase' fontSize='small' display='flex' alignItems='flex-end' justifyContent='center' flexDirection='column' textAlign='right'>\n        <x.p text='meta' fontWeight='semiBold' color='grey' mb={10}>{new Date().toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}</x.p>\n        <x.div display='flex' justifyContent='flex-end' flexDirection='row'>\n          <NotificationsBell visitorId={props.visitorId} sessionId={props.sessionId} section={section} />\n          <x.a href='https://www.facebook.com/IOLnews' target='_blank' mr={10} title='Like us on Facebook'><img src={facebook} alt='Like us on Facebook' /></x.a>\n          <x.a href='https://www.twitter.com/IOL' target='_blank' mr={10} title='Follow us on Twitter'><x.img src={twitter} alt='Follow us on Twitter' h='20px' /></x.a>\n          <StyledLink to='/news/weather' mr={10} title='View weather by location' visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource} section={section}><x.img src={weather} alt='View weather by location' /></StyledLink>\n        </x.div>\n      </x.div>\n    </x.div>\n  )\n}\n\nexport default HomeHeader\n","import React from 'react'\nimport styled, { x, useDown } from '@xstyled/styled-components'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport StyledLink from './../components/ui/Link'\nimport NewsletterSubscribePopup from '../components/NewsletterSubscribePopup'\nimport { getSessionId, getVisitorId } from '../../store/article'\n\nconst StyledNavBar = styled.nav`\n  width: 100%;\n  max-width: 1220px;\n  > ul {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    justify-content: space-between;\n    width: 100%;\n    text-transform: uppercase;\n    ul {\n      display: none;\n      visibility: hidden;\n      opacity: 0;\n      background: white;\n      z-index: 1000;\n      top: 100%;\n      left: 0;\n      position: absolute;\n      margin: 0;\n      box-shadow: 0 0 8px rgba(0,0,0,.3);\n      transition: all linear 2s;\n      min-width: 233px;\n    }\n    > li {\n      position: relative;\n      &[aria-haspopup='true'] {\n        > a {\n          padding-right: 19px;\n          display: inline-block;\n          &::after {\n            content: '';\n            position: absolute;\n            width: 8px;\n            height: 8px;\n            right: 4px;\n            top: 50%;\n            transform: translateY(-50%);\n            background-image: url('/images/arrow-dropdown.svg');\n            background-position: right center;\n            background-repeat: no-repeat;\n            background-size: 8px;\n            display: block;\n            transition: all linear .3s;\n          }\n          &:hover::after {\n            transform: translateY(-50%) rotate(180deg);\n          }\n        }\n      }\n      &:last-of-type > a {\n        color: #FFF;\n        &:hover {\n          color: #FFF;\n        }\n      }\n      > ul {\n        margin-top: 8px;\n        &::before {\n          content: '';\n          position: absolute;\n          bottom: 100%;\n          left: 24px;\n          z-index: 1001;\n          border-right: 5px solid transparent;\n          border-bottom: 5px solid #FFF;\n          border-left: 5px solid transparent;\n        }\n        &::after {\n          content: '';\n          position: absolute;\n          bottom: 100%;\n          left: 0;\n          width: 100%;\n          height: 8px;\n          background: transparent;\n        }\n        > li {\n          position: relative;\n          &[aria-haspopup='true'] {\n            > a {\n              padding-right: 20px;\n              display: block;\n              &::after {\n                content: '';\n                position: absolute;\n                width: 8px;\n                height: 8px;\n                right: 15px;\n                top: 50%;\n                transform: translateY(-50%) rotate(270deg);\n                background-image: url('/images/arrow-dropdown.svg');\n                background-position: right center;\n                background-repeat: no-repeat;\n                background-size: 8px;\n                display: block;\n                transition: all linear .3s;\n              }\n            }\n          }\n          &:hover {\n            > ul {\n              display: block;\n              visibility: visible;\n              opacity: 1;\n              transition: all .5s linear 2s;\n              border-top: 1px solid #EEE;\n              left: 100%;\n              top: -1px;\n              margin-left: 8px;\n              &::before {\n                content: '';\n                position: absolute;\n                top: 18px;\n                right: 100%;\n                bottom: auto;\n                left: auto;\n                z-index: 1001;\n                border-top: 5px solid transparent;\n                border-right: 5px solid #FFF;\n                border-bottom: 5px solid transparent;\n              }\n              &::after {\n                content: '';\n                position: absolute;\n                top: 0;\n                right: 100%;\n                bottom: auto;\n                left: auto;\n                width: 8px;\n                height: 100%;\n                background: transparent;\n              }\n            }\n            &[data-left='true']:hover > ul {\n              right: 100%;\n              left: auto;\n              top: -1px;\n              margin-left: 0;\n              margin-right: 8px;\n              &::before {\n                right: auto;\n                left: 100%;\n                border-top: 5px solid transparent;\n                border-right: 5px solid transparent;\n                border-left: 5px solid #FFF;\n                border-bottom: 5px solid transparent;\n              }\n              &::after {\n                right: -100%;\n              }\n            }\n          }\n        }\n      }\n    }\n    > li {\n      align-self: center;\n      &:hover {\n        > ul {\n          display: block;\n          visibility: visible;\n          opacity: 1;\n          transition: all .5s linear 0;\n          a {\n            padding: 10px 15px;\n            display: block;\n            text-align: left;\n            position: relative;\n            z-index: 1000;\n            border-bottom: 1px solid #EEE;\n            &:hover {\n              color: #474747;\n              background: #F0F0F0;\n            }\n          }\n        }\n      }\n    }\n  }\n  a {\n    padding: 10px;\n    text-align: center;\n    display: flex;\n    flex-wrap: nowrap;\n    white-space: nowrap;\n    &:hover {\n      color: #B41400;\n    }\n  }\n  > ul > li:hover {\n    > a {\n      color: #B41400;\n      &::after {\n        transform: translateY(-50%) rotate(180deg);\n      }\n    }\n  }\n`\nconst NavBar = (props) => {\n  const isMobile = useDown('md')\n  const clickSource = 'Nav Bar'\n  return (\n    <x.div w='100%' borderColor='grey' borderTopWidth='1' borderBottomWidth='1' visibility={{ sm: 'hidden', lg: 'visible' }} display={{ sm: 'none', lg: 'flex' }} justifyContent='center' px={20} position='relative'>\n      <x.div w='100%' maxWidth='1220px' display='flex' alignItems='center' justifyContent='center' fontSize='medium'>\n        <StyledNavBar>\n          <ul>\n            <li aria-haspopup='true'><StyledLink to='/news' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>News</StyledLink>\n              <ul>\n                <li aria-haspopup='true'>\n                  <StyledLink to='/news/south-africa' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>South Africa</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/news/south-africa/eastern-cape' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Eastern Cape</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/free-state' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Free State</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/gauteng' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Gauteng</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/kwazulu-natal' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>KwaZulu-Natal</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/limpopo' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Limpopo</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/mpumalanga' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Mpumalanga</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/northern-cape' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Northern Cape</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/north-west' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>North West</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/south-africa/western-cape' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Western Cape</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li><StyledLink to='/news/politics' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Politics</StyledLink></li>\n                <li>\n                  <StyledLink to='/news/crime-and-courts' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Crime and Courts</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/news/world' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>World</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/news/africa' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Africa</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/government-at-work' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Government At Work</StyledLink>\n                  {/* <ul>\n                    <li>\n                      <StyledLink to='/government-at-work/national-government' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>National Government</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/government-at-work/provincial-government' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Provincial Government</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/government-at-work/local-government' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Local Government</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/government-at-work/vukuzenzele' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Vuk'uzenzele</StyledLink>\n                    </li>\n                  </ul> */}\n                </li>\n                <li>\n                  <StyledLink to='/business-report/brics' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>BRICS</StyledLink>\n                </li>\n                <li aria-haspopup='true'><StyledLink to='/news/education' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Education</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/news/education/early-learning' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Early Learning</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/education/matric' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Matric</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/news/education/universities' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Universities</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li>\n                  <StyledLink to='/news/environment' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Environment</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/news/weather' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Weather</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/news/feel-good' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Good News</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/news/energy' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Energy</StyledLink>\n                </li>\n              </ul>\n            </li>\n            <li aria-haspopup='false'><StyledLink to='/opinion' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Opinion</StyledLink>\n            </li>\n            <li aria-haspopup='true'><StyledLink to='/business' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Business</StyledLink>\n              <ul>\n                <li aria-haspopup='true'><StyledLink to='/business-report' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Business Report</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/business-report/economy' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Economy</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/markets' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Markets</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/international' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>International</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/budget' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Budget</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/opinion' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Opinion</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/entrepreneurs' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Entrepreneurs</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/brics' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>BRICS</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/business-report/ending-poverty-in-china' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Window on China</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li aria-haspopup='true'><StyledLink to='/personal-finance' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Personal Finance</StyledLink>\n                  <ul>\n                    <li aria-haspopup='true'>\n                      <StyledLink to='/personal-finance/my-money' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>My Money</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/debt' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Debt</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/financial-planning' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Financial Planning</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/retirement' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Retirement</StyledLink>\n                    </li>\n                    <li aria-haspopup='true'>\n                      <StyledLink to='/personal-finance/investments' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Invest</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/insurance' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Insurance</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/medical-cover' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>medical cover</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/personal-finance/tax' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>tax</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li aria-haspopup='true'><StyledLink to='/property' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Property</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/property/commercial' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Commercial</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/property/residential' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Residential</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/lifestyle/home-garden' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Home &amp; Garden</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/lifestyle/green-living' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Simply Green</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li aria-haspopup='true'><StyledLink to='/technology' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Technology</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/technology/mobile-apps' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Mobile Apps</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/gadgets' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Gadgets</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/fintech' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Fintech</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/gaming' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Gaming</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/big-tech' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Big Tech</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/esports' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Esports</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/technology/shopping' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Shopping</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li>\n                  <StyledLink to='/business/advice' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Advice</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/business/jobs' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Jobs</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/business/savings' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Savings</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/business/hybrid-working' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Hybrid Working</StyledLink>\n                </li>\n              </ul>\n            </li>\n            <li aria-haspopup='true'><StyledLink to='/lifestyle' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Lifestyle</StyledLink>\n              <ul>\n                <li>\n                  <StyledLink to='/lifestyle/food-and-restaurants' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Food &amp; Restaurants</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/lifestyle/health' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Health</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/lifestyle/style-beauty' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Style &amp; Beauty</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/lifestyle/family' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Relationships</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/lifestyle/competitions' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Competitions</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/lifestyle/shopping' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Shopping</StyledLink>\n                </li>\n              </ul>\n            </li>\n            <li aria-haspopup='true'>\n              <StyledLink to='/entertainment' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Entertainment</StyledLink>\n              <ul>\n                <li>\n                  <StyledLink to='/entertainment/music' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Music</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/movies' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Movies</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/streaming' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Streaming</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/celebrity-news' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Celebrity</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/events' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Events</StyledLink>\n                </li>\n                <li aria-haspopup='true'>\n                  <StyledLink to='/entertainment/whats-on' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>What's On</StyledLink>\n                  <ul>\n                    <li>\n                      <StyledLink to='/entertainment/whats-on/joburg' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Joburg</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/entertainment/whats-on/durban' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Durban</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/entertainment/whats-on/cape-town' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Cape Town</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/entertainment/whats-on/pretoria' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Pretoria</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/books' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Books</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/royals' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Royals</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/entertainment/tv' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>TV</StyledLink>\n                </li>\n              </ul>\n            </li>\n            <li aria-haspopup='true'><StyledLink to='/sport' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Sport</StyledLink>\n              <ul>\n                <li>\n                  <StyledLink to='/tags/paralympics-2024' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Paralympics 2024</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/sport/soccer' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Soccer</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/sport/soccer/psl' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Soccer PSL</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/sport/rugby' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Rugby</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/sport/cricket' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Cricket</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/sport/betting/' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Betting</StyledLink>\n                </li>\n                <li aria-haspopup='true'>\n                  <a>More Sport</a>\n                  <ul>\n                    <li>\n                      <StyledLink to='/sport/athletics' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Athletics</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/golf' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Golf</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/tennis' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Tennis</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/cycling' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Cycling</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/commonwealth-games' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Commonwealth Games</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/mma' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>MMA</StyledLink>\n                    </li>\n                    <li>\n                      <StyledLink to='/sport/horse-racing' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Horse Racing</StyledLink>\n                    </li>\n                  </ul>\n                </li>\n              </ul>\n            </li>\n            <li aria-haspopup='true'><StyledLink to='/travel' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Travel</StyledLink>\n              <ul>\n                <li>\n                  <StyledLink to='/travel/south-africa' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>South Africa</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/travel/africa' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Africa</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/travel/world' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>World</StyledLink>\n                </li>\n              </ul>\n            </li>\n            {/* <li aria-haspopup='false'><StyledLink to='/video' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Video</StyledLink>\n            </li> */}\n            <li aria-haspopup='true'><StyledLink to='/motoring' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Motoring</StyledLink>\n              <ul>\n                <li>\n                  <StyledLink to='/motoring/latest-launches' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Car Launches</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/motoring/industry-news' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Industry News</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/motoring/road-tests' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Road Tests</StyledLink>\n                </li>\n                <li>\n                  <StyledLink to='/motoring/motorsport' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Motorsport</StyledLink>\n                </li>\n              </ul>\n            </li>\n            <x.li justifyContent='flex-end'>\n              {process.env.RAZZLE_ENABLE_NEWSLETTER_POPUPS && !isMobile &&\n                <NewsletterSubscribePopup />}\n              {!process.env.RAZZLE_ENABLE_NEWSLETTER_POPUPS &&\n                <StyledLink to='/newsletters' color='white' fontWeight='medium' py={6} px={10} bg={{ _: 'red', hover: 'grey' }} mr={5} textTransform='uppercase' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}>Subscribe</StyledLink>}\n            </x.li>\n          </ul>\n        </StyledNavBar>\n      </x.div>\n    </x.div>\n  )\n}\n\nconst mapStateToProps = (state) => ({ ...state.user, visitorId: getVisitorId(state), sessionId: getSessionId(state) })\nconst mapDispatchToProps = (dispatch) => bindActionCreators({}, dispatch)\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavBar)\n","import { NavLink } from 'react-router-dom'\nimport ionPostAnalytics from '../../../lib/ionPostAnalytics'\nimport { getPageType } from '../../../store/app'\n\nconst MyLink = ({ className, id, to, key, replace, onClick, isActive, children, visitorId, sessionId, section, source }) => {\n  if (typeof window !== 'undefined' && source !== undefined) {\n    const locationUrl = window.location.href\n    const destinationUrl = to\n    const referrerUrl = window.document.referrer\n    const scrollDepth = window.scrollY\n    const _eventData = { source, destinationUrl, referrerUrl, scrollDepth }\n    if (section) {\n      _eventData.section = section\n    }\n    const onClickAnayltics = () => {\n      ionPostAnalytics('navigation', getPageType(), visitorId, process.env.RAZZLE_TITLE_KEY, sessionId, locationUrl, _eventData)\n      if (onClick) {\n        onClick()\n      }\n    }\n    return (\n      <NavLink key={key} isActive={isActive} id={id} to={to} replace={replace} onClick={onClickAnayltics} className={className}>{children}</NavLink>\n    )\n  }\n  return (\n    <NavLink key={key} isActive={isActive} id={id} to={to} replace={replace} onClick={onClick} className={className}>{children}</NavLink>\n  )\n}\n\nexport default MyLink\n","import React, { useEffect, useRef, useCallback } from 'react'\nimport { x } from '@xstyled/styled-components'\n\nimport closeBtn from '../../../assets/images/icons/close-btn.svg'\nimport searchGry from '../../../assets/images/icons/search-input-wht-ico.svg'\n\nexport const SearchBar = ({ closeHandler, searchRef, backGroundColor }) => {\n  const formRef = useRef(undefined)\n  const handleFormFocusOut = useCallback((event) => {\n    if (closeHandler && formRef.current) {\n      if (!formRef.current.contains(event.relatedTarget)) {\n        closeHandler(false)\n      }\n    }\n  })\n  useEffect(()=>{\n    formRef.current.addEventListener('focusout', handleFormFocusOut)\n    return (() => formRef.current.removeEventListener('focusout', handleFormFocusOut))\n  }, [formRef.current])\n  \n  return (\n    <x.form ref={formRef} action='/search' method='get' display='grid' gridTemplateColumns='auto 38px' pr={16} gridGap={0} position='relative' onSubmit={(e) => {\n      const formData = new FormData(e.target)\n      if (!formData.get('q')) {\n        e.preventDefault()\n      }\n    }}>\n      <x.input type='search' placeholder='Search IOL' name='q' backgroundColor={backGroundColor || '#FFF'} p='10px 40px 10px 10px' borderRadius={3} w='100%' ref={searchRef} />\n      <x.button type='submit' m={0} p={0} w={38} bg='grey'><x.img width={24} height={24} mx='auto' src={searchGry} /></x.button>\n      {closeHandler &&\n        <x.img src={closeBtn} onClick={() => closeHandler(false)} cursor='pointer' position='absolute' m={0} top='-1.125rem' right='-1.0rem' width={24} height={24} />\n      }\n    </x.form>\n  )\n}\n\nexport const SearchBarPopup = ({ searchOpened, closeHandler, searchRef, maxWidth }) => {\n  return (\n    <x.div w='100%' p={20} position='absolute' zIndex='99999' top='71px' left='calc(-0.625rem * calc(1 - var(--x-space-x-reverse)))' alignItems='center' backgroundColor='vltGrey' maxWidth={maxWidth}>\n      <SearchBar closeHandler={closeHandler} searchRef={searchRef} />\n    </x.div>\n  )\n}\n\nexport default SearchBarPopup\n","import React, { memo, useEffect, useRef, useState, useCallback } from 'react'\nimport styled, { x, th, css, system } from '@xstyled/styled-components'\nimport MyLink from '../components/ui/NavLink'\nimport SearchBar from './MobileSearchBar'\n\nimport StyledLink from '../components/ui/Link'\nimport { getSectionLabel } from 'ion-sections'\nimport logo from '../../../assets/images/general/iol.svg'\nimport backArrow from '../../../assets/images/icons/arrow-left-ltgrey.svg'\nimport searchIco from '../../../assets/images/icons/search-ico.svg'\n\nconst __HeaderLink = styled(MyLink)(\n  ({ activeColor }) => css`\n${system}\n&.active {\n  color: ${activeColor || '#B41400'};\n  &::after {\n    content: '';\n    position: absolute;\n    background: #B41400;\n    bottom: -10px;\n    left: 0;\n    height: 3px;\n    width: 100%;\n  }\n}\n`\n)\n\nconst _HeaderLink = ({ to, isActive, children, visitorId, sessionId, section, election }) => {\n  if (election) {\n    return (<__HeaderLink to={to} isActive={isActive} textTransform='uppercase' text='small' mr={{ _: '20px', lastType: '0' }} px={3} py={3} bg={{ _: 'red', hover: 'white' }} color={{ _: 'white', hover: 'grey' }} activeColor='white' position='relative' visitorId={visitorId} sessionId={sessionId} section={section} source='Mobile Header'>{children}</__HeaderLink>)\n  } else {\n    return <__HeaderLink to={to} isActive={isActive} textTransform='uppercase' text='small' mr={{ _: '20px', lastType: '0' }} color={{ _: 'grey', hover: 'red' }} position='relative' visitorId={visitorId} sessionId={sessionId} section={section} source='Mobile Header'>{children}</__HeaderLink>\n  }\n}\n\nconst _MobileHeaderElements = ({ section, mbElementsRef, clickSource, visitorId, sessionId }) => {\n  const primarySection = section.split('/')[0]\n  const secondarySection = section.split('/')[1] || section.split('/')[0]\n  const navRef = useRef()\n  useEffect(() => {\n    setTimeout(function () {\n      if (navRef.current) {\n        navRef.current.scrollIntoView()\n      }\n    })\n  }, [section])\n  const HeaderLink = ({ to, children, visitorId, sessionId, section, election }) => {\n    if (election) {\n      return (<_HeaderLink to={to} election visitorId={visitorId} sessionId={sessionId} section={section} isActive={(match, location) => {\n        if (match) {\n          if (match.isExact) {\n            return true\n          }\n          return (match.url === `/${primarySection}/${secondarySection}`)\n        }\n        return false\n      }}>{children}</_HeaderLink>)\n    } else {\n      return (<_HeaderLink to={to} visitorId={visitorId} sessionId={sessionId} section={section} isActive={(match, location) => {\n        if (match) {\n          if (match.isExact) {\n            return true\n          }\n          return (match.url === `/${primarySection}/${secondarySection}`)\n        }\n        return false\n      }}>{children}</_HeaderLink>)\n    }\n  }\n\n  switch (primarySection) {\n    case 'news':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/news/south-africa' visitorId={visitorId} sessionId={sessionId} section={section}>South Africa</HeaderLink>\n          <HeaderLink to='/news/politics' visitorId={visitorId} sessionId={sessionId} section={section}>Politics</HeaderLink>\n          <HeaderLink to='/news/crime-and-courts' visitorId={visitorId} sessionId={sessionId} section={section}>Crime &amp; Courts</HeaderLink>\n          <HeaderLink to='/news/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/news/africa' visitorId={visitorId} sessionId={sessionId} section={section}>Africa</HeaderLink>\n          <HeaderLink to='/government-at-work' visitorId={visitorId} sessionId={sessionId} section={section}>Government At Work</HeaderLink>\n          <HeaderLink to='/news/education' visitorId={visitorId} sessionId={sessionId} section={section}>Education</HeaderLink>\n          <HeaderLink to='/news/environment' visitorId={visitorId} sessionId={sessionId} section={section}>Environment</HeaderLink>\n          <HeaderLink to='/news/weather' visitorId={visitorId} sessionId={sessionId} section={section}>Weather</HeaderLink>\n          <HeaderLink to='/news/feel-good' visitorId={visitorId} sessionId={sessionId} section={section}>Good News</HeaderLink>\n          <HeaderLink to='/news/energy' visitorId={visitorId} sessionId={sessionId} section={section}>Energy</HeaderLink>\n        </x.div>\n      )\n    case 'lifestyle':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/lifestyle/love-sex' visitorId={visitorId} sessionId={sessionId} section={section}>Love &amp; Sex</HeaderLink>\n          <HeaderLink to='/lifestyle/family' visitorId={visitorId} sessionId={sessionId} section={section}>Family</HeaderLink>\n          <HeaderLink to='/lifestyle/health' visitorId={visitorId} sessionId={sessionId} section={section}>Health</HeaderLink>\n          <HeaderLink to='/lifestyle/food-and-restaurants' visitorId={visitorId} sessionId={sessionId} section={section}>Food &amp; Restaurants</HeaderLink>\n          <HeaderLink to='/lifestyle/style-beauty' visitorId={visitorId} sessionId={sessionId} section={section}>Style &amp; Beauty</HeaderLink>\n          <HeaderLink to='/lifestyle/competitions' visitorId={visitorId} sessionId={sessionId} section={section}>Competitions</HeaderLink>\n          <HeaderLink to='/lifestyle/shopping' visitorId={visitorId} sessionId={sessionId} section={section}>Shopping</HeaderLink>\n        </x.div>\n      )\n    case 'entertainment':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/entertainment' visitorId={visitorId} sessionId={sessionId} section={section}>Entertainment</HeaderLink>\n          <HeaderLink to='/entertainment/tv' visitorId={visitorId} sessionId={sessionId} section={section}>TV</HeaderLink>\n          <HeaderLink to='/entertainment/music' visitorId={visitorId} sessionId={sessionId} section={section}>Music</HeaderLink>\n          <HeaderLink to='/entertainment/movies' visitorId={visitorId} sessionId={sessionId} section={section}>Movies</HeaderLink>\n          <HeaderLink to='/entertainment/streaming' visitorId={visitorId} sessionId={sessionId} section={section}>Streaming</HeaderLink>\n          <HeaderLink to='/entertainment/celebrity-news' visitorId={visitorId} sessionId={sessionId} section={section}>Celebrity</HeaderLink>\n          <HeaderLink to='/entertainment/events' visitorId={visitorId} sessionId={sessionId} section={section}>Events</HeaderLink>\n          <HeaderLink to='/entertainment/whats-on' visitorId={visitorId} sessionId={sessionId} section={section}>Whats On</HeaderLink>\n          <HeaderLink to='/entertainment/books' visitorId={visitorId} sessionId={sessionId} section={section}>Books</HeaderLink>\n          <HeaderLink to='/entertainment/royals' visitorId={visitorId} sessionId={sessionId} section={section}>Royals</HeaderLink>\n        </x.div>\n      )\n    case 'travel':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/travel' visitorId={visitorId} sessionId={sessionId} section={section}>Travel</HeaderLink>\n          <HeaderLink to='/travel/africa' visitorId={visitorId} sessionId={sessionId} section={section}>Africa</HeaderLink>\n          <HeaderLink to='/travel/south-africa' visitorId={visitorId} sessionId={sessionId} section={section}>South Africa</HeaderLink>\n          <HeaderLink to='/travel/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n        </x.div>\n      )\n    case 'business-report':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/business-report' visitorId={visitorId} sessionId={sessionId} section={section}>Business Report</HeaderLink>\n          <HeaderLink to='/business-report/companies' visitorId={visitorId} sessionId={sessionId} section={section}>Companies</HeaderLink>\n          <HeaderLink to='/business-report/economy' visitorId={visitorId} sessionId={sessionId} section={section}>Economy</HeaderLink>\n          <HeaderLink to='/business-report/energy' visitorId={visitorId} sessionId={sessionId} section={section}>Energy</HeaderLink>\n          <HeaderLink to='/business-report/markets' visitorId={visitorId} sessionId={sessionId} section={section}>Markets</HeaderLink>\n          <HeaderLink to='/business-report/entrepreneurs' visitorId={visitorId} sessionId={sessionId} section={section}>Entrepreneurs</HeaderLink>\n          <HeaderLink to='/business/jobs' visitorId={visitorId} sessionId={sessionId} section={section}>Jobs</HeaderLink>\n          <HeaderLink to='/business-report/international' visitorId={visitorId} sessionId={sessionId} section={section}>International</HeaderLink>\n          <HeaderLink to='/business-report/budget' visitorId={visitorId} sessionId={sessionId} section={section}>Budget</HeaderLink>\n          <HeaderLink to='/business-report/ending-poverty-in-china' visitorId={visitorId} sessionId={sessionId} section={section}>Window on China</HeaderLink>\n        </x.div>\n      )\n    case 'personal-finance':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/personal-finance' visitorId={visitorId} sessionId={sessionId} section={section}>Personal Finance</HeaderLink>\n          <HeaderLink to='/personal-finance/my-money' visitorId={visitorId} sessionId={sessionId} section={section}>My Money</HeaderLink>\n          <HeaderLink to='/personal-finance/debt' visitorId={visitorId} sessionId={sessionId} section={section}>Debt</HeaderLink>\n          <HeaderLink to='/personal-finance/financial-planning' visitorId={visitorId} sessionId={sessionId} section={section}>Financial Planning</HeaderLink>\n          <HeaderLink to='/personal-finance/medical-cover' visitorId={visitorId} sessionId={sessionId} section={section}>Medical Cover</HeaderLink>\n          <HeaderLink to='/personal-finance/investments' visitorId={visitorId} sessionId={sessionId} section={section}>Investments</HeaderLink>\n          <HeaderLink to='/personal-finance/insurance' visitorId={visitorId} sessionId={sessionId} section={section}>Insurance</HeaderLink>\n          <HeaderLink to='/personal-finance/retirement' visitorId={visitorId} sessionId={sessionId} section={section}>Retirement</HeaderLink>\n          <HeaderLink to='/personal-finance/tax' visitorId={visitorId} sessionId={sessionId} section={section}>Tax</HeaderLink>\n        </x.div>\n      )\n    case 'property':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/property' visitorId={visitorId} sessionId={sessionId} section={section}>Property</HeaderLink>\n          <HeaderLink to='/property/commercial' visitorId={visitorId} sessionId={sessionId} section={section}>Commercial</HeaderLink>\n          <HeaderLink to='/property/residential' visitorId={visitorId} sessionId={sessionId} section={section}>Residential</HeaderLink>\n          <HeaderLink to='/lifestyle/home-garden' visitorId={visitorId} sessionId={sessionId} section={section}>Home &amp; Garden</HeaderLink>\n          <HeaderLink to='/lifestyle/green-living' visitorId={visitorId} sessionId={sessionId} section={section}>Simply Green</HeaderLink>\n        </x.div>\n      )\n    case 'technology':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/technology' visitorId={visitorId} sessionId={sessionId} section={section}>Technology</HeaderLink>\n          <HeaderLink to='/technology/mobile-apps' visitorId={visitorId} sessionId={sessionId} section={section}>Mobile Apps</HeaderLink>\n          <HeaderLink to='/technology/gadgets' visitorId={visitorId} sessionId={sessionId} section={section}>Gadgets</HeaderLink>\n          <HeaderLink to='/technology/fintech' visitorId={visitorId} sessionId={sessionId} section={section}>Fintech</HeaderLink>\n          <HeaderLink to='/technology/gaming' visitorId={visitorId} sessionId={sessionId} section={section}>Gaming</HeaderLink>\n          <HeaderLink to='/technology/techsperts' visitorId={visitorId} sessionId={sessionId} section={section}>Techsperts</HeaderLink>\n          <HeaderLink to='/technology/big-tech' visitorId={visitorId} sessionId={sessionId} section={section}>Big Tech</HeaderLink>\n          <HeaderLink to='/technology/esports' visitorId={visitorId} sessionId={sessionId} section={section}>Esports</HeaderLink>\n          <HeaderLink to='/technology/shopping' visitorId={visitorId} sessionId={sessionId} section={section}>Shopping</HeaderLink>\n        </x.div>\n      )\n    case 'sport':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/tags/paralympics-2024' visitorId={visitorId} sessionId={sessionId} section={section}>Paralympics 2024</HeaderLink>\n          <HeaderLink to='/sport/athletics' visitorId={visitorId} sessionId={sessionId} section={section}>Athletics</HeaderLink>\n          <HeaderLink to='/sport/boxing' visitorId={visitorId} sessionId={sessionId} section={section}>Boxing</HeaderLink>\n          <HeaderLink to='/sport/mma' visitorId={visitorId} sessionId={sessionId} section={section}>MMA</HeaderLink>\n          <HeaderLink to='/sport/cycling' visitorId={visitorId} sessionId={sessionId} section={section}>Cycling</HeaderLink>\n          <HeaderLink to='/sport/cricket' visitorId={visitorId} sessionId={sessionId} section={section}>Cricket</HeaderLink>\n          <HeaderLink to='/sport/golf' visitorId={visitorId} sessionId={sessionId} section={section}>Golf</HeaderLink>\n          <HeaderLink to='/sport/rugby' visitorId={visitorId} sessionId={sessionId} section={section}>Rugby</HeaderLink>\n          <HeaderLink to='/sport/soccer' visitorId={visitorId} sessionId={sessionId} section={section}>Soccer</HeaderLink>\n          <HeaderLink to='/sport/soccer/psl' visitorId={visitorId} sessionId={sessionId} section={section}>PSL</HeaderLink>\n          <HeaderLink to='/sport/tennis' visitorId={visitorId} sessionId={sessionId} section={section}>Tennis</HeaderLink>\n          <HeaderLink to='/sport/betting' visitorId={visitorId} sessionId={sessionId} section={section}>Betting</HeaderLink>\n        </x.div>\n      )\n    case 'motoring':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</HeaderLink>\n          <HeaderLink to='/motoring/latest-launches' visitorId={visitorId} sessionId={sessionId} section={section}>Car Launches</HeaderLink>\n          <HeaderLink to='/motoring/road-tests' visitorId={visitorId} sessionId={sessionId} section={section}>Road Tests</HeaderLink>\n          <HeaderLink to='/motoring/f1-grand-prix' visitorId={visitorId} sessionId={sessionId} section={section}>F1</HeaderLink>\n          <HeaderLink to='/motoring/motorsport' visitorId={visitorId} sessionId={sessionId} section={section}>Motorsport</HeaderLink>\n          <HeaderLink to='/motoring/industry-news' visitorId={visitorId} sessionId={sessionId} section={section}>Industry News</HeaderLink>\n          <HeaderLink to='/motoring/custom-cars' visitorId={visitorId} sessionId={sessionId} section={section}>Custom Cars</HeaderLink>\n        </x.div>\n      )\n    case 'opinion':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/opinion/letters' visitorId={visitorId} sessionId={sessionId} section={section}>Letters</HeaderLink>\n          <HeaderLink to='/news/politics/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Politics</HeaderLink>\n          <HeaderLink to='/lifestyle/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Lifstyle</HeaderLink>\n          <HeaderLink to='/business-report/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Business</HeaderLink>\n          <HeaderLink to='/sport/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n        </x.div>\n      )\n    case 'capetimes':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/capetimes' visitorId={visitorId} sessionId={sessionId} section={section}>Cape Times</HeaderLink>\n          <HeaderLink to='/capetimes/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/capetimes/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/capetimes/business' visitorId={visitorId} sessionId={sessionId} section={section}>Business</HeaderLink>\n          <HeaderLink to='/capetimes/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/capetimes/technology' visitorId={visitorId} sessionId={sessionId} section={section}>Technology</HeaderLink>\n          <HeaderLink to='/capetimes/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/capetimes/arts-portal' visitorId={visitorId} sessionId={sessionId} section={section}>Arts Portal</HeaderLink>\n        </x.div>\n      )\n    case 'capeargus':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/capeargus' visitorId={visitorId} sessionId={sessionId} section={section}>Cape Argus</HeaderLink>\n          <HeaderLink to='/capeargus/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/capeargus/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/capeargus/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/capeargus/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/capeargus/leadsa' visitorId={visitorId} sessionId={sessionId} section={section}>Lead SA</HeaderLink>\n          <HeaderLink to='/capeargus/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</HeaderLink>\n          <HeaderLink to='/capeargus/cycle-tour' visitorId={visitorId} sessionId={sessionId} section={section}>Cycle Tour</HeaderLink>\n          <HeaderLink to='/capeargus/the-dignity-project' visitorId={visitorId} sessionId={sessionId} section={section}>The Dignity Project</HeaderLink>\n        </x.div>\n      )\n    case 'saturday-star':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/saturday-star' visitorId={visitorId} sessionId={sessionId} section={section}>Saturday Star</HeaderLink>\n          <HeaderLink to='/saturday-star/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/saturday-star/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/saturday-star/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/saturday-star/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/saturday-star/travel' visitorId={visitorId} sessionId={sessionId} section={section}>Travel</HeaderLink>\n          <HeaderLink to='/saturday-star/canvas' visitorId={visitorId} sessionId={sessionId} section={section}>Canvas</HeaderLink>\n          <HeaderLink to='/saturday-star/48-hours' visitorId={visitorId} sessionId={sessionId} section={section}>48 Hours</HeaderLink>\n        </x.div>\n      )\n    case 'the-star':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/the-star' visitorId={visitorId} sessionId={sessionId} section={section}>The Star</HeaderLink>\n          <HeaderLink to='/the-star/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/the-star/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/the-star/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/the-star/opinion-analysis' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion &amp; Analysis</HeaderLink>\n          <HeaderLink to='/the-star/soweto' visitorId={visitorId} sessionId={sessionId} section={section}>Soweto</HeaderLink>\n        </x.div>\n      )\n    case 'dailynews':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/dailynews' visitorId={visitorId} sessionId={sessionId} section={section}>Daily News</HeaderLink>\n          <HeaderLink to='/dailynews/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/dailynews/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/dailynews/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/dailynews/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/dailynews/money' visitorId={visitorId} sessionId={sessionId} section={section}>Money</HeaderLink>\n          <HeaderLink to='/dailynews/consumer' visitorId={visitorId} sessionId={sessionId} section={section}>Consumer</HeaderLink>\n          <HeaderLink to='/dailynews/tonight' visitorId={visitorId} sessionId={sessionId} section={section}>Tonight</HeaderLink>\n          <HeaderLink to='/dailynews/features' visitorId={visitorId} sessionId={sessionId} section={section}>Features</HeaderLink>\n          <HeaderLink to='/dailynews/business' visitorId={visitorId} sessionId={sessionId} section={section}>Business</HeaderLink>\n          <HeaderLink to='/dailynews/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</HeaderLink>\n        </x.div>\n      )\n    case 'weekend-argus':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/weekend-argus' visitorId={visitorId} sessionId={sessionId} section={section}>Weekend Argus</HeaderLink>\n          <HeaderLink to='/weekend-argus/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/weekend-argus/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/weekend-argus/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/weekend-argus/entertainment' visitorId={visitorId} sessionId={sessionId} section={section}>Entertainment</HeaderLink>\n          <HeaderLink to='/weekend-argus/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n        </x.div>\n      )\n    case 'mercury':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/mercury' visitorId={visitorId} sessionId={sessionId} section={section}>The Mercury</HeaderLink>\n          <HeaderLink to='/mercury/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/mercury/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/mercury/business' visitorId={visitorId} sessionId={sessionId} section={section}>Business</HeaderLink>\n          <HeaderLink to='/mercury/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/mercury/goodlife' visitorId={visitorId} sessionId={sessionId} section={section}>Goodlife</HeaderLink>\n          <HeaderLink to='/mercury/network' visitorId={visitorId} sessionId={sessionId} section={section}>Network</HeaderLink>\n          <HeaderLink to='/mercury/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/mercury/environment' visitorId={visitorId} sessionId={sessionId} section={section}>Environment</HeaderLink>\n        </x.div>\n      )\n    case 'sunday-tribune':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/sunday-tribune' visitorId={visitorId} sessionId={sessionId} section={section}>Sunday Tribune</HeaderLink>\n          <HeaderLink to='/sunday-tribune/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/sunday-tribune/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/sunday-tribune/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/sunday-tribune/travel' visitorId={visitorId} sessionId={sessionId} section={section}>Travel</HeaderLink>\n          <HeaderLink to='/sunday-tribune/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/sunday-tribune/entertainment' visitorId={visitorId} sessionId={sessionId} section={section}>Entertainment</HeaderLink>\n          <HeaderLink to='/sunday-tribune/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n        </x.div>\n      )\n    case 'pretoria-news':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/pretoria-news' visitorId={visitorId} sessionId={sessionId} section={section}>Pretoria News</HeaderLink>\n          <HeaderLink to='/pretoria-news/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/pretoria-news/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/pretoria-news/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/pretoria-news/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/pretoria-news/multimedia' visitorId={visitorId} sessionId={sessionId} section={section}>Multimedia</HeaderLink>\n          <HeaderLink to='/pretoria-news/business-report' visitorId={visitorId} sessionId={sessionId} section={section}>Business Report</HeaderLink>\n          <HeaderLink to='/pretoria-news/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n        </x.div>\n      )\n    case 'sundayindependent':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/sundayindependent' visitorId={visitorId} sessionId={sessionId} section={section}>Sunday Independent</HeaderLink>\n          <HeaderLink to='/sundayindependent/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/sundayindependent/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/sundayindependent/analysis' visitorId={visitorId} sessionId={sessionId} section={section}>Analysis</HeaderLink>\n          <HeaderLink to='/sundayindependent/international' visitorId={visitorId} sessionId={sessionId} section={section}>International</HeaderLink>\n          <HeaderLink to='/sundayindependent/dispatch' visitorId={visitorId} sessionId={sessionId} section={section}>Dispatch</HeaderLink>\n        </x.div>\n      )\n    case 'thepost':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/thepost' visitorId={visitorId} sessionId={sessionId} section={section}>The Post</HeaderLink>\n          <HeaderLink to='/thepost/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/thepost/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/thepost/bollywood' visitorId={visitorId} sessionId={sessionId} section={section}>Bollywood</HeaderLink>\n          <HeaderLink to='/thepost/letters' visitorId={visitorId} sessionId={sessionId} section={section}>Letters</HeaderLink>\n          <HeaderLink to='/thepost/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/thepost/features' visitorId={visitorId} sessionId={sessionId} section={section}>Features</HeaderLink>\n          <HeaderLink to='/thepost/community-news' visitorId={visitorId} sessionId={sessionId} section={section}>Community News</HeaderLink>\n        </x.div>\n      )\n    case 'ios':\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <StyledLink to='/' textTransform='uppercase' text='small' mr={20} color={{ _: 'grey', hover: 'red' }} display='grid' gridTemplateColumns='24px auto' gap={5} alignItems='center' borderRightWidth={1} borderRightStyle='solid' borderRightColor='divider' pr={20} visitorId={visitorId} sessionId={sessionId} source={clickSource}><x.img src={backArrow} /><span>IOL</span></StyledLink>\n          <HeaderLink to='/ios' visitorId={visitorId} sessionId={sessionId} section={section}>Independent on Saturday</HeaderLink>\n          <HeaderLink to='/ios/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/ios/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</HeaderLink>\n          <HeaderLink to='/ios/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/ios/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/ios/arts' visitorId={visitorId} sessionId={sessionId} section={section}>Arts</HeaderLink>\n          <HeaderLink to='/ios/behindthenews' visitorId={visitorId} sessionId={sessionId} section={section}>Behind The News</HeaderLink>\n        </x.div>\n      )\n    default:\n      return (\n        <x.div display='flex' overflowX='scroll' whiteSpace='nowrap' px={10} py={10} ref={mbElementsRef}>\n          <HeaderLink to='/news' visitorId={visitorId} sessionId={sessionId} section={section}>News</HeaderLink>\n          <HeaderLink to='/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>Opinion</HeaderLink>\n          <HeaderLink to='/business' visitorId={visitorId} sessionId={sessionId} section={section}>Business</HeaderLink>\n          <HeaderLink to='/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>Lifestyle</HeaderLink>\n          <HeaderLink to='/entertainment' visitorId={visitorId} sessionId={sessionId} section={section}>Entertainment</HeaderLink>\n          <HeaderLink to='/travel' visitorId={visitorId} sessionId={sessionId} section={section}>Travel</HeaderLink>\n          <HeaderLink to='/business-report' visitorId={visitorId} sessionId={sessionId} section={section}>Business Report</HeaderLink>\n          <HeaderLink to='/personal-finance' visitorId={visitorId} sessionId={sessionId} section={section}>Personal Finance</HeaderLink>\n          <HeaderLink to='/property' visitorId={visitorId} sessionId={sessionId} section={section}>Property</HeaderLink>\n          <HeaderLink to='/technology' visitorId={visitorId} sessionId={sessionId} section={section}>Technology</HeaderLink>\n          <HeaderLink to='/sport' visitorId={visitorId} sessionId={sessionId} section={section}>Sport</HeaderLink>\n          <HeaderLink to='/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</HeaderLink>\n          {/* <HeaderLink to='/video' visitorId={visitorId} sessionId={sessionId} section={section}>Video</HeaderLink> */}\n          <HeaderLink to='/newspapers' visitorId={visitorId} sessionId={sessionId} section={section}>Newspapers</HeaderLink>\n        </x.div>\n      )\n  }\n}\n\nconst MobileHeader = (props) => {\n  const [searchOpened, setSearchOpened] = useState(false)\n  const searchBox = useRef(null)\n  const mbElements = useRef(null)\n  const clickSource = 'Mobile Header'\n\n  useEffect(() => {\n    if (searchBox.current) {\n      searchBox.current.focus()\n    }\n  }, [searchBox.current])\n  useEffect(() => {\n    if (mbElements.current) {\n      const selected = mbElements.current.getElementsByClassName('active')[0]\n      if (selected) {\n        selected.scrollIntoView({ behavior: 'auto', block: 'nearest', inline: 'center' })\n      }\n    }\n  }, [props.section, mbElements.current])\n\n  return (\n    <x.div w='100%' visibility={{ sm: props.visible ? 'visible' : 'hidden', lg: 'hidden' }} display={{ sm: props.visible ? 'flex' : 'none', lg: 'none' }} flexDirection='column' position='relative' backgroundColor='white' boxShadow='0px 0px 4px rgba(0, 0, 0, 0.25)'>\n      <x.div w='100vw' display='grid' alignItems='center' position='relative' gridTemplateColumns='auto 24px 48px' px={10} mt={10}>\n        <x.div display='grid' alignItems='center' gridTemplateColumns='100px auto' gap={5}>\n          <StyledLink to='/' section={props.section} visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource}><x.img src={logo} alt='Independent Online' minWidth={{ lg: '100%' }} h={{ sm: '30px' }} visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource} /></StyledLink>\n          {props.section &&\n            <StyledLink to={'/' + props.section.split('/')[0]} text='small' visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}> | {props.titleLabel || getSectionLabel(props.section.split('/')[0])}</StyledLink>}\n        </x.div>\n        <x.a onClick={() => { setSearchOpened(!searchOpened); return false }} cursor='pointer'><x.img src={searchIco} alt='Search IOL' /></x.a>\n        {!props.isNavOpen && searchOpened && <SearchBar searchOpened={searchOpened} closeHandler={setSearchOpened} searchRef={searchBox} />}\n        <x.div pl={10} display='grid' justifyContent='center' alignItems='center'>\n          {props.children}\n        </x.div>\n      </x.div>\n      <MobileHeaderElements section={props.section} mbElementsRef={mbElements} visitorId={props.visitorId} sessionId={props.sessionId} clickSource={clickSource} />\n    </x.div>\n  )\n}\n\nexport const MobileHeaderElements = memo(_MobileHeaderElements)\n\nexport default MobileHeader\n","import React, { useState, useEffect, useRef, useCallback } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\n\nimport { bm } from '../../client/db'\nimport { getSessionId, getVisitorId, toggleFontSize } from '../../store/article'\nimport StyledLink from '../components/ui/Link'\nimport SearchBar from './MobileSearchBar'\nimport MobileArticleShare from '../components/MobileArticleShare'\n\nimport logo from '../../../assets/images/general/iol.svg'\nimport articleBookmark from '../../../assets/images/icons/bookmark-ico.svg'\nimport articleBookmarked from '../../../assets/images/icons/bookmarked-ico.svg'\nimport searchIco from '../../../assets/images/icons/search-ico.svg'\n\nimport { MobileHeaderElements } from './MobileHeader'\n\nconst handleBookmark = (article, bookmarked) => {\n  const collectionMax = 10\n  if (bookmarked) {\n    return bm.messages.where('uuid').equals(article.contentKey).delete()\n  } else {\n    return bm.messages.add({ uuid: article.contentKey, article }).then(id =>\n      bm.messages.where('id').below(id - (collectionMax - 1)).delete()\n    )\n  }\n}\n\nexport function MobileArticleHeader (props) {\n  const [bookmarked, setBookmarked] = useState(false)\n  const [searchOpened, setSearchOpened] = useState(false)\n  const searchBox = useRef(null)\n  const clickSource = 'Mobile Article Header'\n  useEffect(() => {\n    if (props.article) {\n      bm.messages.filter(entry => {\n        return entry.uuid === props.article.contentKey\n      }).count().then(val => {\n        if (val < 1) {\n          return setBookmarked(false)\n        }\n        return setBookmarked(true)\n      })\n    }\n  }, [props.article ? props.article.contentKey : false])\n\n  useEffect(() => {\n    if (searchBox.current) {\n      searchBox.current.focus()\n    }\n  }, [searchBox.current])\n\n  return (\n    <x.div w='100%' visibility={{ sm: props.visible ? 'visible' : 'hidden', lg: 'hidden' }} display={{ sm: props.visible ? 'flex' : 'none', lg: 'none' }} flexDirection='column' position='relative' backgroundColor='white' boxShadow='0px 0px 4px rgba(0, 0, 0, 0.25)'>\n      <x.div w='100vw' display='grid' alignItems='center' position='relative' gridTemplateColumns='auto 120px 48px' pl={20} pr={12} mt={10}>\n        <x.div>\n          <StyledLink to='/'><x.img src={logo} alt='Independent Online' minWidth={{ lg: '100%' }} h={{ sm: '30px' }} visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource} section={props.section} /></StyledLink>\n        </x.div>\n        <x.div display='flex' justifyContent='flex-end' alignItems='center' spaceX={10}>\n          <x.a href='#' onClick={() => { handleBookmark(props.article, bookmarked); return setBookmarked(!bookmarked) }}>\n            <x.img src={bookmarked ? articleBookmarked : articleBookmark} alt='Bookmark article to read later' />\n          </x.a>\n          <MobileArticleShare link={props.article ? props.article.canonicalUri : ''} />\n          <x.a onClick={() => { setSearchOpened(!searchOpened); return false }} cursor='pointer'><x.img src={searchIco} alt='Search IOL' /></x.a>\n          {!props.isNavOpen && searchOpened && <SearchBar searchOpened={searchOpened} closeHandler={setSearchOpened} searchRef={searchBox} />}\n        </x.div>\n        <x.div pl={10} display='grid' justifyContent='center' alignItems='center'>\n          {props.children}\n        </x.div>\n      </x.div>\n      <MobileHeaderElements section={props.article ? (props.article.section ? props.article.section : '') : ''} />\n    </x.div>\n  )\n}\n\nconst mapStateToProps = (state) => ({ visitorId: getVisitorId(state), sessionId: getSessionId(state) })\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ toggleFontSize }, dispatch)\nexport default connect(mapStateToProps, mapDispatchToProps)(MobileArticleHeader)\n","import React, {useState} from 'react'\nimport PropTypes from 'prop-types'\nimport styled, {th, css, system} from '@xstyled/styled-components'\n\nconst transforms = {\n  top: 'translateY(-100vh)',\n  right: 'translateX(100vw)',\n  bottom: 'translateY(100vh)',\n  left: 'translateX(-100vw)'\n}\nconst placements = {\n  top: {\n    top: 0,\n    right: 0,\n    left: 0\n  },\n  right: {\n    top: 0,\n    right: 0,\n    bottom: 0\n  },\n  bottom: {\n    right: 0,\n    bottom: 0,\n    left: 0\n  },\n  left: {\n    top: 0,\n    bottom: 0,\n    left: 0\n  }\n}\n\n//Styled Components\nconst DrawerWrapper = styled.div`\n  display: block;\n  ${props => css`\n    width: ${(props.position !== 'top' && props.position !== 'bottom') && props.size ? props.size : '100%'};\n    height: ${(props.position === 'top' || props.position === 'bottom') && props.size ? props.size : '100%'};\n    transform: ${!props.open ? transforms[props.position] : null};\n  `}\n`;\n\n//Covers entire view and is used for dismissal\nconst DrawerOverlay = styled.div`\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  bottom: 0px;\n  left: 0px;\n  z-index: 998;\n  display: ${props => props.open ? null : 'none' };\n  ${th('drawers.backdrop')}\n`;\n\n// width: ${props => ((props.position !== 'top' && props.position !== 'bottom') && th('drawers.sizes.horizontal')[props.size]) ? th('drawers.sizes.horizontal')[props.size] : '300px'};\nconst DrawerContent = styled.div`\n  display: block;\n  box-sizing: border-box;\n  position: fixed;\n  ${props => placements[props.position]}\n  z-index: 999;\n  transform: ${props => !props.open ? transforms[props.position] : null};\n  transition: transform 0.2s ease-out;\n  overflow-x: hidden;\n  overflow-y: auto;\n  color: #000;\n  box-shadow: -10px 0px 10px rgba(0,0,0,0.19);\n  width: 400px;\n  ${th('drawers.content')}\n  ${system}\n`;\n  // ${props => props.position === 'top' || props.position === 'bottom' ? props.theme.drawers.sizes.vertical[props.size] : ''}\n  // ${props => props.position === 'left' || props.position === 'right' ? props.theme.drawers.sizes.horizontal[props.size] : ''}\n\nexport function useDrawer(options) {\n  const open = options && !!options.open\n  const [isOpen, setIsOpen] = useState(open)\n  return {\n    isOpen, \n    open: () => setIsOpen(true), \n    close: () => setIsOpen(false), \n    toggle: () => setIsOpen(!isOpen)\n  }\n}\n\nexport const Drawer = ({ isOpen, size, width, position, close, backgroundColor, children }) => {\n  return (\n    <DrawerWrapper open={isOpen} size={size} position={position}>\n      <DrawerOverlay open={isOpen} onClick={close} />\n      <DrawerContent open={isOpen} w={width} position={position}>\n        {children}\n      </DrawerContent>\n    </DrawerWrapper>\n  )\n}\n\nDrawer.propTypes = {\n  isOpen: PropTypes.bool,\n  size: PropTypes.oneOf(['sm', 'md', 'lg']),\n  position: PropTypes.oneOf(['top','bottom','left','right']),\n  onDismiss: PropTypes.func\n}\n\nDrawer.defaultProps = {\n  isOpen: false,\n  position: 'left',\n  width: '100%'\n}\n\nexport default Drawer\n","import React, { memo, useCallback } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport StyledLink from '../components/ui/Link'\nimport cssfxUnderline from '../components/ui/cssfxUnderline'\nimport Menu from './ui/Menu'\nimport { Drawer, useDrawer } from '../components/ui/Drawer'\nimport {Accordion, AccordionItem} from '../components/ui/CSSAccordion'\nimport { SearchBar } from './MobileSearchBar'\n\nimport menuFB from '../../../assets/images/social-media/facebook-menu.svg'\nimport menuT from '../../../assets/images/social-media/x.svg'\nimport menuI from '../../../assets/images/social-media/instagram-menu.svg'\nimport menuL from '../../../assets/images/social-media/linkedin-menu.svg'\nimport menuY from '../../../assets/images/social-media/youtube-menu.svg'\nimport menuRSS from '../../../assets/images/social-media/rss-menu.svg'\n\nimport menu from '../../../assets/images/icons/menu-ico.svg'\nimport closeBtn from '../../../assets/images/icons/close-btn.svg'\nimport searchGry from '../../../assets/images/icons/search-gry-ico.svg'\nimport arrowLeftLtGrey from '../../../assets/images/icons/arrow-left-ltgrey.svg'\n\nconst HamburgerNav = ({ prefix, toggleScrolling, setIsNavOpen, sessionId, visitorId, section }) => {\n  const drawer = useDrawer()\n  const clickSource = 'Hamburger Nav'\n  const MenuLink = (props) => {\n    return (<StyledLink to={props.to} text='menu-sub-head' p={5} bg={{ hover: 'ltGrey' }} color={{ hover: 'red' }} display='block' onClick={() => { drawer.close(); toggleScrolling() }} visitorId={props.visitorId} sessionId={props.sessionId} source='Hamburger Nav' section={props.section}>{props.children}</StyledLink>)\n  }\n  const openHandler = useCallback(() => {\n    drawer.open()\n    toggleScrolling()\n    if (setIsNavOpen) {\n      setIsNavOpen(true)\n    }\n  })\n  const closeHandler = useCallback(() => {\n    drawer.close()\n    toggleScrolling()\n    if (setIsNavOpen) {\n      setIsNavOpen(false)\n    }\n  })\n  return (\n    <>\n      <x.button onClick={openHandler} backgroundColor='white' color='grey' border='0' p={4} display='flex' justifyContent='center' alignItems='center'>\n        <img src={menu} alt='' />\n      </x.button>\n      <Drawer {...drawer} placement='right' width='100%'>\n        <x.button onClick={closeHandler} backgroundColor='white' p={10} top={0} right={0} display='flex' alignItems='center' justifyContent='flex-end' w={'100%'}>\n          <x.img src={closeBtn} />\n        </x.button>\n        <SearchBar backGroundColor='#F5F5F5'/>\n        <x.nav pb={73}>\n          <Accordion>\n            <StyledLink to='/' display='flex' alignItems='center' py={20} ml={10} color={{ _: '#BBB', hover: 'red' }} textTransform='uppercase' text='xsmall' visitorId={visitorId} sessionId={sessionId} section={section} source={clickSource} onClick={() => { drawer.close(); toggleScrolling() }}><x.img src={arrowLeftLtGrey} />Home Page</StyledLink>\n            <AccordionItem prefix={prefix} title='News' name={'nav-menu'}>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/news' visitorId={visitorId} sessionId={sessionId} section={section}>All News</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/south-africa' visitorId={visitorId} sessionId={sessionId} section={section}>South Africa</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/politics' visitorId={visitorId} sessionId={sessionId} section={section}>Politics</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/crime-and-courts' visitorId={visitorId} sessionId={sessionId} section={section}>Crime and Courts</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/world' visitorId={visitorId} sessionId={sessionId} section={section}>World</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/news/africa' visitorId={visitorId} sessionId={sessionId} section={section}>Africa</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/government-at-work' visitorId={visitorId} sessionId={sessionId} section={section}>Government At Work</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/business-report/brics' visitorId={visitorId} sessionId={sessionId} section={section}>BRICS</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/education' visitorId={visitorId} sessionId={sessionId} section={section}>Education</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/environment' visitorId={visitorId} sessionId={sessionId} section={section}>Environment</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/weather' visitorId={visitorId} sessionId={sessionId} section={section}>Weather</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/traffic' visitorId={visitorId} sessionId={sessionId} section={section}>Traffic</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/news/feel-good' visitorId={visitorId} sessionId={sessionId} section={section}>Good News</MenuLink></x.li>\n                <x.li><MenuLink to='/news/energy' visitorId={visitorId} sessionId={sessionId} section={section}>Energy</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Opinion' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/opinion' visitorId={visitorId} sessionId={sessionId} section={section}>All Opinion</MenuLink></x.li>\n                <x.li><MenuLink to='/opinion/letters' visitorId={visitorId} sessionId={sessionId} section={section}>Letters</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Business' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/business' visitorId={visitorId} sessionId={sessionId} section={section}>All Business</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/business-report' visitorId={visitorId} sessionId={sessionId} section={section}>Business Report</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/personal-finance' visitorId={visitorId} sessionId={sessionId} section={section}>Personal Finance</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/property' visitorId={visitorId} sessionId={sessionId} section={section}>Property</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/technology' visitorId={visitorId} sessionId={sessionId} section={section}>Technology</MenuLink></x.li>\n                <x.li><MenuLink to='/business/jobs' visitorId={visitorId} sessionId={sessionId} section={section}>Jobs</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Lifestyle' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/lifestyle' visitorId={visitorId} sessionId={sessionId} section={section}>All Lifestyle</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/lifestyle/food-and-restaurants' visitorId={visitorId} sessionId={sessionId} section={section}>Food & Restaurants</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/lifestyle/health' visitorId={visitorId} sessionId={sessionId} section={section}>Health</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/lifestyle/style-beauty' visitorId={visitorId} sessionId={sessionId} section={section}>Style & Beauty</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/lifestyle/family' visitorId={visitorId} sessionId={sessionId} section={section}>Relationships</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/lifestyle/competitions' visitorId={visitorId} sessionId={sessionId} section={section}>Competitions</MenuLink></x.li>\n                <x.li><MenuLink to='/lifestyle/shopping' visitorId={visitorId} sessionId={sessionId} section={section}>Shopping</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Entertainment' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/entertainment' visitorId={visitorId} sessionId={sessionId} section={section}>All Entertainment</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/music' visitorId={visitorId} sessionId={sessionId} section={section}>Music</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/movies' visitorId={visitorId} sessionId={sessionId} section={section}>Movies</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/entertainment/streaming' visitorId={visitorId} sessionId={sessionId} section={section}>Streaming</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/celebrity-news' visitorId={visitorId} sessionId={sessionId} section={section}>Celebrity</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/events' visitorId={visitorId} sessionId={sessionId} section={section}>Events</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/whats-on' visitorId={visitorId} sessionId={sessionId} section={section}>What's On</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/books' visitorId={visitorId} sessionId={sessionId} section={section}>Books</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/entertainment/royals' visitorId={visitorId} sessionId={sessionId} section={section}>Royals</MenuLink></x.li>\n                <x.li><MenuLink to='/entertainment/tv' visitorId={visitorId} sessionId={sessionId} section={section}>TV</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Sport' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/sport' visitorId={visitorId} sessionId={sessionId} section={section}>All Sport</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/tags/paralympics-2024' visitorId={visitorId} sessionId={sessionId} section={section}>Paralympics 2024</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/sport/soccer' visitorId={visitorId} sessionId={sessionId} section={section}>Soccer</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/sport/soccer/psl' visitorId={visitorId} sessionId={sessionId} section={section}>Soccer PSL</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/sport/rugby' visitorId={visitorId} sessionId={sessionId} section={section}>Rugby</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/sport/cricket' visitorId={visitorId} sessionId={sessionId} section={section}>Cricket</MenuLink></x.li>\n                <x.li my={10}><MenuLink to='/sport/betting' visitorId={visitorId} sessionId={sessionId} section={section}>Betting</MenuLink></x.li>\n                <x.li><MenuLink to='/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <StyledLink to='/travel' erRadius={3} p='10px 15px' mb={5} bg='#F5F5F5' display='block' fontWeight='600' color='#434343' onClick={() => { drawer.close(); toggleScrolling() }} visitorId={visitorId} sessionId={sessionId} section={section}>Travel</StyledLink>\n            {/* <StyledLink to='/video' borderRadius={3} p='10px 15px' mb={5} bg='#F5F5F5' display='block' fontWeight='600' color='#434343' onClick={() => {drawer.close(); toggleScrolling()}} visitorId={visitorId} sessionId={sessionId} section={section}>Video</StyledLink> */}\n            <AccordionItem prefix={prefix} title='More' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/motoring' visitorId={visitorId} sessionId={sessionId} section={section}>Motoring</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/technology' visitorId={visitorId} sessionId={sessionId} section={section}>Technology</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/property' visitorId={visitorId} sessionId={sessionId} section={section}>Property</MenuLink></x.li>\n                <x.li><MenuLink to='/news/education' visitorId={visitorId} sessionId={sessionId} section={section}>Education</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='Newspapers' name='nav-menu'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/the-star' visitorId={visitorId} sessionId={sessionId} section={section}>The Star</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/capeargus' visitorId={visitorId} sessionId={sessionId} section={section}>Cape Argus</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/weekend-argus' visitorId={visitorId} sessionId={sessionId} section={section}>Weekend Argus</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/dailynews' visitorId={visitorId} sessionId={sessionId} section={section}>Daily News</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/capetimes' visitorId={visitorId} sessionId={sessionId} section={section}>Cape Times</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/mercury' visitorId={visitorId} sessionId={sessionId} section={section}>The Mercury</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/pretoria-news' visitorId={visitorId} sessionId={sessionId} section={section}>Pretoria News</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/saturday-star' visitorId={visitorId} sessionId={sessionId} section={section}>Saturday Star</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/ios' visitorId={visitorId} sessionId={sessionId} section={section}>The Independent on Saturday</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/sunday-tribune' visitorId={visitorId} sessionId={sessionId} section={section}>Sunday Tribune</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/sundayindependent' visitorId={visitorId} sessionId={sessionId} section={section}>Sunday Independent</MenuLink></x.li>\n                <x.li mb={10}><x.a href='https://www.dfa.co.za/' target='_blank' text='menu-sub-head' p={5} bg={{ hover: 'ltGrey' }} color={{ hover: 'red' }} display='block'>DFA</x.a></x.li>\n                <x.li mb={10}><MenuLink to='/thepost' visitorId={visitorId} sessionId={sessionId} section={section}>The Post</MenuLink></x.li>\n                <x.li mb={10}><x.a href='https://www.dailyvoice.co.za/' target='_blank' text='menu-sub-head' p={5} bg={{ hover: 'ltGrey' }} color={{ hover: 'red' }} display='block'>Daily Voice</x.a></x.li>\n                <x.li mb={10}><x.a href='https://www.isolezwe.co.za/' target='_blank' text='menu-sub-head' p={5} bg={{ hover: 'ltGrey' }} color={{ hover: 'red' }} display='block'>Isolezwe</x.a></x.li>\n                <x.li mb={10}><MenuLink to='/business-report' visitorId={visitorId} sessionId={sessionId} section={section}>Business Report</MenuLink></x.li>\n                <x.li><MenuLink to='/personal-finance' visitorId={visitorId} sessionId={sessionId} section={section}>Personal Finance</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n            <AccordionItem prefix={prefix} title='About Us'>\n              <x.ul>\n                <x.li mb={10}><MenuLink to='/newspapers' visitorId={visitorId} sessionId={sessionId} section={section}>Subscribe to Independent Media</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/newsletters' visitorId={visitorId} sessionId={sessionId} section={section}>Subscribe to Email Newsletter</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/about-iol' visitorId={visitorId} sessionId={sessionId} section={section}>About IOL</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/contact-us' visitorId={visitorId} sessionId={sessionId} section={section}>Contact Us</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/press-code' visitorId={visitorId} sessionId={sessionId} section={section}>Press Code</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/privacy-policy' visitorId={visitorId} sessionId={sessionId} section={section}>Privacy Policy</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/terms-and-conditions' visitorId={visitorId} sessionId={sessionId} section={section}>Terms &amp; Conditions</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/advertising' visitorId={visitorId} sessionId={sessionId} section={section}>Advertise with us</MenuLink></x.li>\n                <x.li mb={10}><MenuLink to='/feedback' visitorId={visitorId} sessionId={sessionId} section={section}>Feedback</MenuLink></x.li>\n                <x.li><MenuLink to='/complaints' visitorId={visitorId} sessionId={sessionId} section={section}>Complaints Procedure</MenuLink></x.li>\n              </x.ul>\n            </AccordionItem>\n          </Accordion>\n          <x.div display='flex' alignItems='center' py={20} ml={10} color='#BBB' textTransform='uppercase' text='xsmall'>Social Media</x.div>\n          <x.a href='https://www.facebook.com/IOLnews' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuFB} mr={10} /> Facebook</x.a>\n          <x.a href='https://www.twitter.com/IOL' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuT} mr={10} h='24px' /> Twitter</x.a>\n          <x.a href='https://www.instagram.com/iolnews' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuI} mr={10} /> Instagram</x.a>\n          <x.a href='https://www.linkedin.com/company/iol-news/' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuL} mr={10} /> LinkedIn</x.a>\n          <x.a href='https://www.youtube.com/channel/UCeQFd7S6urAw6mm0kS4xuhg' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuY} mr={10} /> Youtube</x.a>\n          <x.a href='/rss' display='flex' alignItems='center' backgroundColor='#F5F5F5' mb={5} p='10px 15px' borderRadius={3} text='dropdown'><x.img src={menuRSS} mr={10} /> RSS Feeds</x.a>\n        </x.nav>\n      </Drawer>\n    </>\n  )\n}\n\nexport default memo(HamburgerNav)\n","import { useState } from 'react'\nimport { x, useDown } from '@xstyled/styled-components'\nimport { useLocation } from 'react-router-dom'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\n\nimport useScrollDirection from '../../lib/useScrollDirection'\n\nimport CommercialNav from './CommercialNav'\nimport SiteHeader from './SiteHeader'\nimport NavBar from './NavBar'\nimport MobileHeader from './MobileHeader'\nimport MobileArticleHeader from './MobileArticleHeader'\nimport HamburgerNav from './HamburgerNav'\nimport { getSessionId, getVisitorId } from '../../store/article'\n\nexport function Header (props) {\n  const [isNavOpen, setIsNavOpen] = useState(false)\n  const isMobile = useDown('md') || (typeof window === 'undefined')\n  const location = useLocation()\n  const scrollDirection = useScrollDirection({ topDelay: 150 })\n  const isArticlePage = !!location.pathname.match(/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|([0-9]{5,})$/)\n  return (\n    <x.header\n      minHeight={82}\n      position={ props.wallpaperActive ? 'static' : 'fixed'} top={props.wallpaperActive ? '0px' : scrollDirection === 'up' ? '0px' : '-100%'} bg='white' \n      w={props.wallpaperActive ? '1220px' : '100%'} transitionProperty={props.wallpaperActive ? 'none' : 'all'} \n      zIndex={props.wallpaperActive ? 'auto': '11'}\n      mx='auto' transitionTimingFunction='cubic-bezier(0.4, 0, 0.2, 1)' transitionDuration='800ms'\n    >\n      <MobileArticleHeader article={props.article} visible={isMobile && isArticlePage} isNavOpen={isNavOpen}>\n        <HamburgerNav prefix='article' toggleScrolling={props.toggleScrolling} setIsNavOpen={setIsNavOpen} visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} />\n      </MobileArticleHeader>\n      <MobileHeader section={location.pathname.replace(/\\//, '')} titleLabel={props.sectionTitle} visible={isMobile && !isArticlePage} isNavOpen={isNavOpen} visitorId={props.visitorId} sessionId={props.sessionId}>\n        <HamburgerNav prefix='mobile' toggleScrolling={props.toggleScrolling} setIsNavOpen={setIsNavOpen} visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} />\n      </MobileHeader>\n      <x.div visibility={isMobile ? 'hidden' : 'visible'}>\n        <CommercialNav />\n        <SiteHeader visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} />\n        <NavBar wallpaperActive={props.wallpaperActive} section={props.section} />\n      </x.div>\n    </x.header>\n  )\n}\n\nconst mapStateToProps = (state) => ({ ...state.article, ...state.articles, visitorId: getVisitorId(state), sessionId: getSessionId(state) })\nconst mapDispatchToProps = (dispatch) => bindActionCreators({})\nexport default connect(mapStateToProps, mapDispatchToProps, null, {\n  areStatesEqual: (next, prev, nextOwnProps, prevOwnProps) => {\n    return (prev.article.article === next.article.article) && (prev.sectionTitle === next.sectionTitle)\n  }\n})(Header)\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Reducer = exports.updateNavPath = exports.navigateTo = exports.NAVIGATE_TO = exports.SET_NAVPATH = void 0;\nconst SET_NAVPATH = 'SET_NAVPATH';\nexports.SET_NAVPATH = SET_NAVPATH;\nconst NAVIGATE_TO = 'NAVIGATE_TO';\nexports.NAVIGATE_TO = NAVIGATE_TO;\n\nconst navigateTo = navPath => ({\n  type: NAVIGATE_TO,\n  payload: navPath\n});\n\nexports.navigateTo = navigateTo;\n\nconst updateNavPath = navPath => ({\n  type: SET_NAVPATH,\n  payload: navPath\n});\n\nexports.updateNavPath = updateNavPath;\n\nconst Reducer = (state = {\n  navPath: '/'\n}, {\n  type,\n  payload\n}) => {\n  switch (type) {\n    case NAVIGATE_TO:\n    case SET_NAVPATH:\n      return { ...state,\n        ...{\n          navPath: payload\n        }\n      };\n\n    default:\n      return state;\n  }\n};\n\nexports.Reducer = Reducer;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar Portal = function Portal(_ref) {\n  var children = _ref.children,\n      _ref$rootId = _ref.rootId,\n      rootId = _ref$rootId === void 0 ? 'root' : _ref$rootId,\n      _ref$className = _ref.className,\n      className = _ref$className === void 0 ? 'modal' : _ref$className,\n      _ref$el = _ref.el,\n      el = _ref$el === void 0 ? 'div' : _ref$el;\n  var appRootEl = document.getElementById(rootId);\n\n  var _React$useState = _react[\"default\"].useState(function () {\n    return document.createElement(el);\n  }),\n      _React$useState2 = _slicedToArray(_React$useState, 1),\n      container = _React$useState2[0];\n\n  _react[\"default\"].useEffect(function () {\n    container.classList.add(className);\n    appRootEl.appendChild(container);\n    return function () {\n      appRootEl.removeChild(container);\n    };\n  }, []);\n\n  return /*#__PURE__*/_reactDom[\"default\"].createPortal(children, container);\n};\n\nfunction IonOverlay(_ref2) {\n  var visible = _ref2.visible,\n      children = _ref2.children;\n  var style = {\n    position: 'fixed',\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    background: 'rgba(0, 0, 0, 0.7)',\n    transition: 'opacity 500ms',\n    zIndex: 999,\n    visibility: visible ? 'visible' : 'hidden',\n    opacity: visible ? '1' : '0'\n  };\n  return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    style: style\n  }, children);\n}\n\nfunction IonPopup(_ref3) {\n  var visible = _ref3.visible,\n      className = _ref3.className,\n      children = _ref3.children,\n      rootId = _ref3.rootId,\n      _ref3$overlay = _ref3.overlay,\n      overlay = _ref3$overlay === void 0 ? true : _ref3$overlay,\n      _ref3$placement = _ref3.placement,\n      placement = _ref3$placement === void 0 ? 'top' : _ref3$placement;\n  var style = {\n    margin: '20px auto 0',\n    padding: '20px',\n    background: '#fff',\n    borderRadius: '5px',\n    maxWidth: '420px',\n    width: '90%',\n    position: 'relative',\n    transition: 'all .5s ease-in-out',\n    boxShadow: '0px 12px 13px rgba(0, 0, 0, 0.21)'\n  };\n\n  var noOverlayStyle = _objectSpread(_objectSpread({}, style), {}, {\n    zIndex: 99,\n    position: 'fixed'\n  });\n\n  if (overlay) {\n    return /*#__PURE__*/_react[\"default\"].createElement(Portal, {\n      rootId: rootId\n    }, /*#__PURE__*/_react[\"default\"].createElement(IonOverlay, {\n      visible: visible\n    }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n      style: style,\n      className: className\n    }, children)));\n  } else {\n    var placementStyle = {};\n\n    switch (placement) {\n      case 'bottom-right':\n        placementStyle = {\n          bottom: 0,\n          right: 0\n        };\n        break;\n\n      case 'bottom-left':\n        placementStyle = {\n          bottom: 0,\n          left: 0\n        };\n        break;\n\n      case 'top-left':\n        placementStyle = {\n          top: 0,\n          left: 0\n        };\n        break;\n\n      case 'top-right':\n      default:\n        placementStyle = {\n          top: 0,\n          right: 0\n        };\n        break;\n    }\n\n    return /*#__PURE__*/_react[\"default\"].createElement(Portal, {\n      rootId: rootId\n    }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n      style: _objectSpread(_objectSpread({}, noOverlayStyle), placementStyle),\n      className: className\n    }, children));\n  }\n}\n\nvar _default = IonPopup;\nexports[\"default\"] = _default;","import { useState, useLayoutEffect, useEffect, useRef } from 'react'\n\nexport const isBrowser = typeof window !== 'undefined';\nexport const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect\n\nexport const setCookie = (name, value, options) => {\n  if (!isBrowser) return;\n\n  const optionsWithDefaults = {\n    days: 0,\n    path: '/',\n    ...options,\n  };\n\n  if (optionsWithDefaults.days) {\n    const expires = new Date(\n      Date.now() + optionsWithDefaults.days * 864e5\n    ).toUTCString();\n\n    document.cookie =\n      name +\n      '=' +\n      encodeURIComponent(value) +\n      '; expires=' +\n      expires +\n      '; path=' +\n      optionsWithDefaults.path;\n  } else if (optionsWithDefaults.seconds) {\n    document.cookie =\n      name +\n      '=' +\n      encodeURIComponent(value) +\n      '; max-age=' +\n      optionsWithDefaults.seconds +\n      '; path=' +\n      optionsWithDefaults.path;\n  } else {\n    document.cookie =\n      name +\n      '=' +\n      encodeURIComponent(value) +\n      '; path=' +\n      optionsWithDefaults.path;\n  }\n};\n\nexport const getCookie = (name, initialValue = '') => {\n  return (\n    (isBrowser &&\n      document.cookie.split('; ').reduce((r, v) => {\n        const parts = v.split('=');\n        return parts[0] === name ? decodeURIComponent(parts[1]) : r;\n      }, '')) ||\n    initialValue\n  );\n};\n\nexport function useCookie(key, initialValue) {\n  const [item, setItem] = useState(() => {\n    return getCookie(key, initialValue);\n  });\n\n  const updateItem = (value, options) => {\n    setItem(value);\n    setCookie(key, value, options);\n  };\n\n  return [item, updateItem];\n}\n\nexport function getScrollPosition({ element, useWindow }) {\n  if (!isBrowser || !element.current) {\n    return { x: 0, y: 0 }\n  }\n\n  const target = element ? element.current : document.body\n  const position = target.getBoundingClientRect()\n\n  return useWindow\n    ? { x: window.scrollX, y: window.scrollY }\n    : { x: position.left, y: position.top }\n}\n\nexport function useScrollPosition(effect, deps, element, useWindow, wait) {\n  const position = useRef(getScrollPosition({ useWindow }))\n\n  let throttleTimeout = null\n\n  const callBack = () => {\n    const currPos = getScrollPosition({ element, useWindow })\n    effect({ prevPos: position.current, currPos })\n    position.current = currPos\n    throttleTimeout = null\n  }\n\n  useLayoutEffect(() => {\n    const handleScroll = () => {\n      if (wait) {\n        if (throttleTimeout === null) {\n          throttleTimeout = setTimeout(callBack, wait)\n        }\n      } else {\n        callBack()\n      }\n    }\n\n    window.addEventListener('scroll', handleScroll)\n\n    return () => window.removeEventListener('scroll', handleScroll)\n  }, deps)\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isEmpty = isEmpty;\nexports.processError = processError;\nexports[\"default\"] = void 0;\n\nvar _axios = _interopRequireDefault(require(\"axios\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction isEmpty(value) {\n  return value === undefined || value === null || _typeof(value) === 'object' && Object.keys(value).length === 0 || typeof value === 'string' && value.trim().length === 0;\n}\n\nfunction processError(res, error) {\n  if (error.response) {\n    // The request was made and the server responded with a status code\n    // that falls out of the range of 2xx\n    console.log(error.response.data);\n    console.log(error.response.status);\n    console.log(error.response.headers);\n    res.status(error.response.status).send(error.response.data);\n  } else if (error.request) {\n    // The request was made but no response was received\n    // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n    // http.ClientRequest in node.js\n    console.log('Server Error:', error.message);\n    res.status(502).send(error.message);\n  } else {\n    // Something happened in setting up the request that triggered an Error\n    console.log('Error', error.message);\n    res.status(500).send(error.message);\n  }\n\n  console.log(error.config);\n}\n/**\n * Processes the params and POSTs to ION Analytics \n * @param {string} eventType - pageView | ping | adRequest | adRender | navigation\n * @param {string} pageType - home | section | article | static\n * @param {string} userId - user id / visitor id\n * @param {string} titleKey - e.g. iol, dvd, glam\n * @param {string} sessionId - session id\n * @param {string} locationUrl - url\n * @param {object} eventData - Event-type specific additional data - author, section, clickWidget, desinationUrl, referrerUrl, scrollDepth, ad {}\n * @returns {promise<response>}\n */\n\n\nvar postAnalytics = function postAnalytics(eventType, pageType, userId, titleKey, sessionId, locationUrl, eventData) {\n  var timestamp = new Date().toISOString();\n  var screenWidth = 0;\n  var screenHeight = 0;\n  var browser = 'unknown';\n\n  if (typeof window !== 'undefined') {\n    screenWidth = window.outerWidth;\n    screenHeight = window.outerHeight;\n\n    if (navigator.userAgent.indexOf('Chrome') != -1) {\n      browser = 'Google Chrome';\n    } else if (navigator.userAgent.indexOf('Safari') != -1) {\n      browser = 'Safari';\n    } else if (navigator.userAgent.indexOf('Firefox') != -1) {\n      browser = 'Mozilla Firefox';\n    } else if (navigator.userAgent.indexOf('MSIE') != -1 || navigator.userAgent.indexOf('Trident/') != -1) {\n      browser = 'Internet Explorer';\n    } else if (navigator.userAgent.indexOf('Edge') != -1) {\n      browser = 'Microsoft Edge';\n    }\n  }\n\n  var _eventData = Object.assign({\n    eventType: eventType,\n    pageType: pageType,\n    userId: userId,\n    titleKey: titleKey,\n    sessionId: sessionId,\n    locationUrl: locationUrl,\n    timestamp: timestamp,\n    screenWidth: screenWidth,\n    screenHeight: screenHeight,\n    browser: browser\n  }, eventData);\n\n  return _axios[\"default\"].post(process.env.RAZZLE_POST_ANALYTICS_SERVICE, JSON.stringify(_eventData), {\n    headers: {\n      'Content-Type': 'text/plain'\n    }\n  })[\"catch\"](function (error) {\n    console.error('pageView event error:', error.message);\n    throw error;\n  });\n};\n\nvar _default = postAnalytics;\nexports[\"default\"] = _default;","module.exports = __webpack_public_path__ + \"static/media/push-notifications.5b3cf872.svg\";","module.exports = __webpack_public_path__ + \"static/media/facebook-wht.f4d5995e.svg\";","module.exports = __webpack_public_path__ + \"static/media/pcloudy.73aae442.svg\";","module.exports = __webpack_public_path__ + \"static/media/linkedin-menu.47f111b7.svg\";","module.exports = __webpack_public_path__ + \"static/media/iol-wht.36affc98.svg\";","module.exports = __webpack_public_path__ + \"static/media/weather.fe15771a.svg\";","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\n// To prevent double measuring due to the script load, suppress the first call \nvar firstCall = true;\n\nvar Chartbeat = function Chartbeat(events) {\n  if (typeof window === 'undefined') {\n    return;\n  }\n  if (firstCall) {\n    firstCall = false;\n    return;\n  }\n  if (typeof window.pSUPERFLY === 'undefined') {\n    console.error('window.pSUPERFLY is not defined, Have you forgotten to include Chartbeat?');\n  } else {\n    events.forEach(function (event) {\n      switch (event.event) {\n        case 'VirtualPageview':\n          if (!event.virtualPageURL.match('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')) {\n            window.pSUPERFLY.virtualPage({\n              sections: '',\n              authors: '',\n              path: event.virtualPageURL,\n              title: ''\n            });\n          }\n          break;\n        case 'ArticlePageview':\n          window.pSUPERFLY.virtualPage({\n            sections: event.section,\n            authors: event.author,\n            path: event.path,\n            title: event.title\n          });\n          break;\n        default:\n          break;\n      }\n    });\n  }\n};\n\nexports.default = Chartbeat;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.NavLink = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _redux = require(\"redux\");\n\nvar _reactRouter = require(\"react-router\");\n\nvar _reactRouterDom = require(\"react-router-dom\");\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _navPath = require(\"./navPath\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\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\nclass NavLink extends _react.Component {\n  constructor() {\n    super();\n    this.handleClick = this.handleClick.bind(this);\n  }\n\n  handleClick() {\n    this.props.navigateTo(this.props.to);\n    this.props.updateNavPath('/');\n  }\n\n  render() {\n    let props = {};\n    Object.keys(this.props).map(key => {\n      if (/^[a-z]+$/g.test(key)) {\n        props[key] = this.props[key];\n      }\n    });\n\n    if (this.props.className) {\n      props.className = this.props.className;\n    }\n\n    return /*#__PURE__*/_react.default.createElement(_reactRouterDom.NavLink, _extends({\n      onClick: this.handleClick\n    }, props));\n  }\n\n}\n\nexports.NavLink = NavLink;\n\nconst mapStateToProps = state => state.navPath;\n\nconst mapDispatchToProps = dispatch => (0, _redux.bindActionCreators)({\n  updateNavPath: _navPath.updateNavPath,\n  navigateTo: _navPath.navigateTo\n}, dispatch);\n\nvar _default = (0, _reactRouter.withRouter)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(NavLink));\n\nexports.default = _default;","module.exports = __webpack_public_path__ + \"static/media/thunder.c620beb0.svg\";","import Urlify from 'urlify'\n\nconst urlify = Urlify.create({\n  addEToUmlauts: true,\n  szToSs: true,\n  spaces: '-',\n  nonPrintable: '',\n  toLower: true,\n  trim: false\n})\n\nconst ImageSizes = {\n  hero: 560,\n  featured: 800,\n  primary: 240,\n  slider: 275,\n  normal: 100,\n  push: 80\n}\n\nexport function getCanonical (article) {\n  if (!article.headline) {\n    return article.contentKey\n  }\n  return article.section + '/' + urlify(article.headline.replace(/&/g, '-and-')).replace(/-+/g, '-') + '-' + article.contentKey\n}\n\nexport function getImageSize (size) {\n  const ImageSize = ImageSizes[size] || size\n  return ImageSize\n}\n\nexport function getImage (article) {\n  const Image = article.image || (article.images && article.images[0]) || (article.videos && { url: (article.videos[0].thumbnailURL?.url || article.videos[0].thumbnail.url) })\n  return Image\n}\n/**\n * Returns the teaser headline to be used in article cards, social shares etc.\n *\n * @param {*} article An article to retrieve the headline from\n * @returns The headline to use\n */\nexport function getTeaser (article) {\n  return article.teaserHeadline || article.headline\n}\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAMAAABF6+6qAAAAM1BMVEXz9Pa5vsrp6+/Q09vBxdDl5+vw8fS+ws66wMvi5enS1t3HzNXa3ePt7vHe4ebLz9jV2N8T7rePAAAEfklEQVR42uzBgQAAAACAoP2pF6kCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGD27m7HTRgIoLCHAHGG3/d/2q7SrSZtTRZs7ZJ4zncLEhcc2WAZAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4R924Xn6ejl0fUK1+bOUsV50C6tS1cqY4B9RolrNpQH3O70pkDajNFOUF3AIqs8graAPq0shr4AG+Mqu8hiGgKoPNRpefZ1ePAVWJ8mkJZ7ABswmoifzRhTP0D9dHRfrjI0ZVYeMTYeEtEBbuCAtvgbBwR1h4C8/D6rvbrZvC3wgLRWE1ayt3rT4eIyyUhDUt8mCZ7AhhIT+sOW5uHyYsZIc1PtnkSVjIDWuUhDH8RljIDKuL8i+79YSF3LBaSWr78IGwkBnWLCYxGRIW8sIann/xQFjICquRBDuHsJAX1ijydC4kLGSFpbLpEnbrVsLyLBHWIpuW/V1FUcJy7FhYw4GuRJSw/PqGEctWWJWw3Dr2jKX7u7pTwvIqEdZc+lZ4i1YiYTmVCGuSTdPOrowSlk+HVt6H3V0ZJSyXUmHdZMO8vyujhOVRIqzNIWs40pVRwnIoGVYTJSE2h7oySlj+JMNKT4bzwa6MEpY76bDCHDO7SlPC8iYRVvKfAm2X0ZVRwnJmK6zQrw+ZxLXP6sooYfnyX1imn5erfLguYx8yuzJKWK4kwzL91EzBHO/KKGF5shWWKezKKGE5UhqWdfU1JSw/CsOyrvZQwnKjLCzrah8lLC+KwrKu9lLCciIjrIyujBKWDxlh5XRllLBcyAgrqyujhOXB7rCasawro4TlwN6wmquMZV0ZJaz6fRWWdSUylnVllLCq94u9e8tNGIaiKBqXFCg4lPmPtjItMlLvV6zm4a41hq2rI/84CCvuqshtXVUXYfUuCivuqshtXVUXYXUuDCvuqshNXVUnYXUuCCvoqsqvXQmLWWHVrqpcuxIWM8OqXVX52ZWwmB1W7arK310Ji1lhxV0VuXQlLGaEVbuKHM5JWMwJq3YVExbzw6pdCYvGsOKuhEVjWHFXwqIxrLgrYdEYVtyVsGgMK+5KWDSGFXclLBrDirsSFo1hxV0Ji8aw4q6ERXtY1/SLsBAWWyAsCmGxD8KiEBb7ICwKYbEPwqIQFvsgLAphsQ/ColgirMO4AGF17jWsP+IX+/9IWDwIi10QFg/CYheExYOw2If0dBvW8PYSNj0Z04/Tx3FY3PuYnqaBnnymbRgHunJL23AZ6MrxlDbBxOpNTltwGOjNNa3vZLr3ZxrT2s4esXo0rX2zRgOrU/dzWtHhONCpY76u1NZ4d646N70tb3KsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCrPTgkAAAAABD0/7UrbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwBQ1zWzb+cicAAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/youtube-menu.abf84417.svg\";","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\n\nexport const FETCH_DIGISERTS = 'api/FETCH_DIGISERTS'\nexport const FETCH_DIGISERTS_SUCCESS = 'api/FETCH_DIGISERTS_SUCCESS'\nexport const FETCH_DIGISERTS_ERROR = 'api/FETCH_DIGISERTS_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\n\nconst fetchDigisertsAPI = () => {\n  return axios.get(SERVER_URL + '/data/digiserts/')\n    .then(response => response.data)\n    .catch(err => {\n      throw err\n    })\n}\n\nfunction * fetchDigisertsSaga () {\n  try {\n    const res = yield call(fetchDigisertsAPI)\n    yield put({ type: FETCH_DIGISERTS_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_DIGISERTS_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchDigiserts () {\n  yield takeLatest(FETCH_DIGISERTS, fetchDigisertsSaga)\n}\n\n// Saga actions\nexport const fetchDigiserts = () => ({ type: FETCH_DIGISERTS, isFetching: true, hasFetched: false })\n\nexport const initialState = {\n  lastFetch: 0,\n  didInvalidate: false,\n  isFetching: false,\n  hasFetched: false,\n  hasError: false,\n  canonical: null,\n  error: null,\n  digiserts: null // do not mutate these\n}\n\nexport const Reducer = (state = initialState, { type, payload, meta }) => {\n  switch (type) {\n    case FETCH_DIGISERTS:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        canonical: null,\n        error: null\n      })\n    case FETCH_DIGISERTS_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        canonical: null\n      })\n    case FETCH_DIGISERTS_SUCCESS:\n      return Object.assign({}, state, {\n        lastFetch: new Date(),\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        digiserts: payload.data,\n        hasError: false,\n        canonical: null,\n        error: null\n      })\n    default:\n      return state\n  }\n}\n","import React, { useState, useEffect, memo } from 'react'\nimport { connect } from 'react-redux'\nimport { bindActionCreators } from 'redux'\nimport { useLocation } from 'react-router-dom'\nimport useHasMounted from '../../lib/useHasMounted'\nimport deepCompare from '../../lib/deepCompare'\nimport { adSlotRegistered, getPageType } from '../../store/app'\nimport { getSessionId, getVisitorId } from '../../store/article'\nimport IonAd from 'ion-ads'\nimport ionPostAnalytics from '../../lib/ionPostAnalytics'\n\nconst Ad = (props) => {\n  const location = useLocation()\n  const [path, setPath] = useState(location.pathname)\n  const pathname = location.pathname\n  const hasHydrated = useHasMounted()\n  const onSlotRequested = event => {\n    // Log the Ad Request event\n    const locationUrl = window.location.href\n    const referrerUrl = window.document.referrer\n    const scrollDepth = window.scrollY\n    const ad = {\n      request: {\n        slotId: event.slotId,\n        targeting: event.slot.getTargetingKeys()?.map(key => key + ':' + event.slot.getTargeting(key)).join(','),\n        path: event.slot.getAdUnitPath(),\n        mappings: event.sizeMapping?.map(map => ({ width: map[0][0], height: map[0][1], sizes: map[1] })).filter(map => map.sizes.length),\n        sizes: event.sizes?.map(map => ({ width: map[0], height: map[1] }))\n      }\n    }\n    const _eventData = { referrerUrl, scrollDepth, ad }\n    ionPostAnalytics('adRequest', getPageType(), props.visitorId, process.env.RAZZLE_TITLE_KEY, props.sessionId, locationUrl, _eventData)\n  }\n  const onSlotRendered = event => {\n    // Log the Ad Request event\n    const locationUrl = window.location.href\n    const referrerUrl = window.document.referrer\n    const scrollDepth = window.scrollY\n    const ad = {\n      response: event\n    }\n    const _eventData = { referrerUrl, scrollDepth, ad }\n    ionPostAnalytics('adRender', getPageType(), props.visitorId, process.env.RAZZLE_TITLE_KEY, props.sessionId, locationUrl, _eventData)\n    if (props.onSlotRenderEnded) {\n      props.onSlotRenderEnded(event)\n    }\n  }\n  useEffect(() => {\n    if (location.pathname !== path) {\n      setPath(location.pathname)\n    }\n  }, [pathname])\n  if (!process.env.RAZZLE_ENABLE_GAM || path !== pathname || !hasHydrated) {\n    return null\n  }\n  return (\n    <IonAd\n      path={`/${process.env.RAZZLE_DFP_CODE}${props.adPath || (path === '/' ? '/homepage' : path)}`}\n      refreshTime={30}\n      onSlotRenderEnded={onSlotRendered}\n      {...props}\n      onSlotRequested={onSlotRequested}\n      onAdSlotRegistered={props.adSlotRegistered} />\n  )\n}\n\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ adSlotRegistered }, dispatch)\n\nexport default memo(connect((state) => ({ app: state.app, visitorId: getVisitorId(state), sessionId: getSessionId(state) }), mapDispatchToProps)(Ad), deepCompare)\n","let _cache = false\nexport const setCache = (aCache) => {\n  console.log('Setting cache to', aCache.constructor.name)\n  _cache = aCache\n}\n\nexport default function Cache () { return _cache }\n","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\n\nexport const USER_LOGIN = 'api/USER_LOGIN'\nexport const USER_LOGIN_SUCCESS = 'api/USER_LOGIN_SUCCESS'\nexport const USER_LOGIN_ERROR = 'api/USER_LOGIN_ERROR'\nexport const USER_LOGGED_OUT = 'api/USER_LOGGED_OUT'\nexport const USER_REGISTER = 'api/USER_REGISTER'\nexport const USER_REGISTER_SUCCESS = 'api/USER_REGISTER_SUCCESS'\nexport const USER_REGISTER_ERROR = 'api/USER_REGISTER_ERROR'\n\nexport const USER_SET_VISITORID = 'api/USER_SET_VISITORID'\n\nexport const PAYWALLED = 'PAYWALLED'\n\nconst SERVER_URL = process.env.RAZZLE_USER\nconst sanitizeUserId = (userId) => encodeURIComponent(userId).replace(/[%/=]+/g, '')\n\nasync function attemptLogin (username, password) {\n  return axios.post(SERVER_URL + 'login/' + process.env.RAZZLE_TITLE_KEY, JSON.stringify({ username, password }), {\n    headers: {\n      'Content-Type': 'application/json'\n    }\n  })\n    .then(response => response.data)\n    .catch(error => {\n      console.error('attemptLogin:', error.message)\n      throw error\n    })\n}\n\nasync function attemptRegister (name, username, password) {\n  console.log('attemptRegister', JSON.stringify({ nickname: name, username, password }), 'to', SERVER_URL + 'register/' + process.env.RAZZLE_TITLE_KEY)\n  return axios.post(SERVER_URL + 'register/' + process.env.RAZZLE_TITLE_KEY, JSON.stringify({ nickname: name, username, password }), {\n    headers: {\n      'Content-Type': 'application/json'\n    }\n  })\n    .then(response => response.data)\n    .catch(error => {\n      throw error\n    })\n}\n\nexport function * watchUserLogin () {\n  yield takeLatest(USER_LOGIN, userLoginSaga)\n}\n\nfunction * userLoginSaga ({ username, password }) {\n  try {\n    const token = yield call(attemptLogin, username, password)\n    if (window.localStorage) {\n      window.localStorage.setItem('token', token)\n    }\n    yield put({ type: USER_LOGIN_SUCCESS, payload: token })\n  } catch (e) {\n    if (e.response && e.response.status === 404) {\n      yield put({ type: USER_LOGIN_ERROR, payload: e.message })\n    } else {\n      console.error('ERROR userLoginSaga', e)\n      yield put({ type: USER_LOGIN_ERROR, payload: e.response.data })\n    }\n  }\n}\n\nexport function * watchUserRegister () {\n  yield takeLatest(USER_REGISTER, userRegisterSaga)\n}\n\nfunction * userRegisterSaga ({ name, username, password }) {\n  try {\n    yield call(attemptRegister, name, username, password)\n    yield put({ type: USER_REGISTER_SUCCESS })\n  } catch (e) {\n    if (e.response && e.response.status === 404) {\n      yield put({ type: USER_REGISTER_ERROR, payload: e.message })\n    } else {\n      console.error('ERROR userRegisterSaga', e)\n      yield put({ type: USER_REGISTER_ERROR, payload: e.response.data })\n    }\n  }\n}\n\n// Saga actions\nexport const userLogin = (username, password) => ({ type: USER_LOGIN, username, password })\nexport const userLoggedIn = (token) => ({ type: USER_LOGIN_SUCCESS, payload: token })\nexport const userLoggedOut = () => ({ type: USER_LOGGED_OUT })\nexport const userRegister = (name, username, password) => ({ type: USER_REGISTER, name, username, password })\nexport const paywall = () => ({ type: PAYWALLED })\n\nexport const getIsPaywalled = (state) => !!state.user.paywalled\n\nexport const initialState = {\n  paywalled: false,\n  userToken: false\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  switch (type) {\n    case USER_LOGGED_OUT:\n      console.log('**** STOP! 🛑 User Logged Out!')\n      return Object.assign({}, state, {\n        userToken: false\n      })\n    case USER_LOGIN_SUCCESS:\n      return Object.assign({}, state, {\n        userToken: payload\n      })\n    case USER_REGISTER_SUCCESS:\n      return Object.assign({}, state, {\n        registerSuccess: true\n      })\n    case USER_REGISTER_ERROR:\n      return Object.assign({}, state, {\n        registerError: payload\n      })\n    case USER_SET_VISITORID:\n      console.log('USER_SET_VISITORID', payload)\n      return Object.assign({}, state, {\n        visitorId: sanitizeUserId(payload)\n      })\n    case PAYWALLED:\n      console.log('**** STOP! 🛑 PAYWALL activated!')\n      return Object.assign({}, state, {\n        paywalled: true\n      })\n    default:\n      return state\n  }\n}\n","module.exports = __webpack_public_path__ + \"static/media/cloudy.e76b44c9.svg\";","import React, { useCallback, useState } from 'react'\nimport Recaptcha from 'react-google-recaptcha'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport Popup from 'ion-popup'\nimport { x, useDown } from '@xstyled/styled-components'\nimport StyledLink from './../components/ui/Link'\nimport { subscribeNewsletter, updateForm, reinitialize, toggleNewsletterSubscription } from '../../store/subscribe'\nimport closeBtn from '../../../assets/images/icons/close-btn.svg'\nimport { getSessionId, getVisitorId } from '../../store/article'\n\nfunction handleChange (event, updateForm) {\n  const newState = {}\n  newState[event.target.name] = event.target.value\n  updateForm(newState)\n}\n\nfunction handleCheckboxChange (event, toggleNewsletterSubscription) {\n  toggleNewsletterSubscription(event.target.value)\n}\n\nfunction validateEmail (email) {\n  const re = /^[^.@][^@]+@{1}[^@]+\\.[^@]+[^.@]$/i\n  return email.match(re)\n}\n\nfunction validateName (name) {\n  const re = /^[`a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ' -]{2,45}$/i\n  return name.match(re)\n}\n\nfunction verifyCallback (updateForm) {\n  updateForm({ captchaVerified: true })\n}\n\nfunction handleSubscribe (event, { email, firstName, lastName, listIds, captchaVerified, updateForm, subscribeNewsletter }) {\n  event.preventDefault()\n  if (!validateEmail(email)) {\n    updateForm({ output: 'Please enter a valid email address' })\n    return false\n  } else if (firstName && !validateName(firstName)) {\n    updateForm({ output: 'Please enter a valid first name' })\n    return false\n  } else if (lastName && !validateName(lastName)) {\n    updateForm({ output: 'Please enter a valid last name' })\n    return false\n  } else if (listIds.length < 1) {\n    updateForm({ output: 'Please select at least one newsletter' })\n    return false\n  } else if (!captchaVerified) {\n    updateForm({ output: 'Please enter a Captcha to verify that you are not a robot' })\n    return false\n  }\n  subscribeNewsletter(firstName, lastName, email, listIds)\n  return true\n}\n\nconst NewsletterSubscribeCallToActionCmp = (props) => {\n  const isMobile = useDown('md')\n  return (\n    <>\n      {(!props.isSubmitting && !props.hasSubmitted) &&\n        <x.div w={isMobile ? '100%' : '50%'} maxWidth={1220} mx='auto' background='#000000' p={20} textAlign='center' borderRadius={5} color='white'>\n          <x.h2 text='h2' mb={20}>Subscribe and Win</x.h2>\n          <x.form display='flex' flexDirection='column' alignItems='center' id='item-form' name='item-form' encType='text/plain' onSubmit={(event) => handleSubscribe(event, { ...props })}>\n            <x.p fontSize={16} mb={20}>Subscribe to our daily newsletter to get your news delivered directly to your inbox and win your share of R5000!</x.p>\n            <x.p fontSize={16} mb={20}>T's and C's apply</x.p>\n            <x.input width='100%' p={10} mb={10} border='1px solid #ccc' borderRadius={5} id='email' placeholder='email@domain.com' required='required' type='email' name='email' value={props.email} onChange={(event) => handleChange(event, props.updateForm)} />\n            <input id='UvMIi9m2RuP4MphsG52Vvw' type='hidden' value='UvMIi9m2RuP4MphsG52Vvw' />\n            <x.div mb={10}>\n              <Recaptcha sitekey='6LfsLz4cAAAAALqO3FpVjEBCqOp-wBHVF9qJXuWn' onChange={() => verifyCallback(props.updateForm)} />\n            </x.div>\n            {(props.output !== '' || props.error) &&\n              <x.p mt={10}>Error: {props.output || props.error}</x.p>}\n            <x.input backgroundColor={{ _: '#b41400', hover: '#333' }} color='white' border='none' padding='10px 20px' borderRadius={5} fontSize={18} cursor='pointer' transition='background-color 0.3s ease' id='submitbutton' type='submit' value='SUBSCRIBE' />\n            <input type='hidden' name='form_hash' value='n1opdyilO0bEvwBq' id='form_hash' />\n          </x.form>\n        </x.div>}\n      {props.isSubmitting &&\n        <x.div w='100%' maxWidth={1220} mx='auto' mb={50}>\n          <x.h1 text='h1' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>Please wait</x.h1>\n          <x.p>Submitting your subscription request</x.p>\n        </x.div>}\n      {props.hasSubmitted &&\n        <x.div w='100%' maxWidth={1220} mx='auto' mb={50}>\n          <x.h1 text='h1' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>Thank you for your subscription</x.h1>\n          <x.p>Please check your email inbox to verify your subscription.</x.p>\n        </x.div>}\n    </>\n  )\n}\n\nconst NewsletterSubscribePopup = (props) => {\n  const [isSubscribePopupOpen, setIsSubscribePopupOpen] = useState(props.isVisible)\n  const isMobile = useDown('md')\n  const clickSource = 'Newsletter Popup'\n\n  const handleSubmit = useCallback((event) => {\n    if (handleSubscribe(event, { ...props }) && props.onSubscribed) {\n      props.onSubscribed(props)\n    }\n  })\n  if (isMobile && !isSubscribePopupOpen) {\n    return null\n  }\n  return (\n    <>\n      {!isMobile &&\n        <StyledLink to='/newsletters' onClick={(event) => { setIsSubscribePopupOpen(!isSubscribePopupOpen); event.preventDefault(); }} color='white' fontWeight='medium' py={6} px={10} bg={{ _: 'red', hover: 'grey' }} mr={5} textTransform='uppercase' visitorId={props.visitorId} sessionId={props.sessionId} source={clickSource} section={props.section}>Subscribe</StyledLink>}\n      {isSubscribePopupOpen &&\n        <Popup visible={isSubscribePopupOpen}>\n          <x.button aria-label='Close newsletter subscribe' onClick={() => setIsSubscribePopupOpen(false)} backgroundColor='white' p={5} top={0} right={0} display='flex' alignItems='center' justifyContent='flex-end' w='100%'>\n            <x.img src={closeBtn} />\n          </x.button>\n          {(!props.isSubmitting && !props.hasSubmitted) &&\n            <x.div w='100%' maxWidth={1220} mx='auto' mb={50} mt={-40}>\n              <x.h1 text='h1' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>Newsletter</x.h1>\n              <x.form maxWidth={550} display='flex' flexDirection='column' id='item-form' name='item-form' encType='text/plain' onSubmit={(event) => handleSubmit(event, { ...props })}>\n                <x.p text='small' mb={15}>{props.text || 'Get your news on the go. Subscribe to our newsletter below.'}</x.p>\n                <x.input mb={15} bg='ltGrey' p={10} text='medium' id='firstName' placeholder='First name' required='required' type='text' name='firstName' value={props.firstName} onChange={(event) => handleChange(event, props.updateForm)} />\n                <x.input mb={15} bg='ltGrey' p={10} text='medium' id='lastName' placeholder='Last name' required='required' type='text' name='lastName' value={props.lastname} onChange={(event) => handleChange(event, props.updateForm)} />\n                <x.input mb={15} bg='ltGrey' p={10} text='medium' id='email' placeholder='email@domain.com' required='required' type='email' name='email' value={props.email} onChange={(event) => handleChange(event, props.updateForm)} />\n                <x.div className='checkboxes' display='grid' gridTemplateColumns='repeat(2, calc((100% - 20px) / 2))' gap='0 20px'>\n                  <input id='UvMIi9m2RuP4MphsG52Vvw' type='checkbox' value='UvMIi9m2RuP4MphsG52Vvw' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('UvMIi9m2RuP4MphsG52Vvw')} /><label htmlFor='UvMIi9m2RuP4MphsG52Vvw'><span />IOL Daily</label>\n                  <input id='OJ4zwxCfnDwA9iw1aRjXdg' type='checkbox' value='OJ4zwxCfnDwA9iw1aRjXdg' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('OJ4zwxCfnDwA9iw1aRjXdg')} /><label htmlFor='OJ4zwxCfnDwA9iw1aRjXdg'><span />Business Report</label>\n                  <input id='D6JzNYvmEh2D8763k8hPHlcA' type='checkbox' value='D6JzNYvmEh2D8763k8hPHlcA' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('D6JzNYvmEh2D8763k8hPHlcA')} /><label htmlFor='D6JzNYvmEh2D8763k8hPHlcA'><span />Sport</label>\n                  <input id='yxHoP7IZr8gCEU1gsy7Ppg' type='checkbox' value='yxHoP7IZr8gCEU1gsy7Ppg' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('yxHoP7IZr8gCEU1gsy7Ppg')} /><label htmlFor='yxHoP7IZr8gCEU1gsy7Ppg'><span />Lifestyle</label>\n                  <input id='FsPwab7kNQUCR1fO2edIZA' type='checkbox' value='FsPwab7kNQUCR1fO2edIZA' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('FsPwab7kNQUCR1fO2edIZA')} /><label htmlFor='FsPwab7kNQUCR1fO2edIZA'><span />Motoring</label>\n                  <input id='UiIQSJPTxuu0RwnQs7632NQg' type='checkbox' value='UiIQSJPTxuu0RwnQs7632NQg' onChange={(event) => handleCheckboxChange(event, props.toggleNewsletterSubscription)} checked={props.listIds.includes('UiIQSJPTxuu0RwnQs7632NQg')} /><label htmlFor='UiIQSJPTxuu0RwnQs7632NQg'><span />Entertainment</label>\n                </x.div>\n                <Recaptcha sitekey='6LfsLz4cAAAAALqO3FpVjEBCqOp-wBHVF9qJXuWn' onChange={() => verifyCallback(props.updateForm)} />\n                {(props.output !== '' || props.error) &&\n                  <x.p mt={10}>Error: {props.output || props.error}</x.p>}\n                <x.div display='flex' flexDirection='row'>\n                  <x.input mt={15} mr={10} mb={15} bg='red' p={10} text='medium' color='white' textTransform='uppercase' fontWeight='medium' w={isMobile ? '100' : '150'} id='submitbutton' type='submit' value='Submit' />\n                  {isMobile &&\n                    <x.button\n                      aria-label=\"Don't show again newsletter subscribe\" mt={15} mb={15} ml={10} bg='red' p={10} text='medium' color='white' textTransform='uppercase' fontWeight='medium' w='60%' onClick={() => {\n                        props.handleIgnoreSubscription()\n                        setIsSubscribePopupOpen(false)\n                      }}\n                    >\n                      Don't show again\n                    </x.button>}\n                </x.div>\n                <input type='hidden' name='form_hash' value='n1opdyilO0bEvwBq' id='form_hash' />\n              </x.form>\n            </x.div>}\n          {props.isSubmitting &&\n            <x.div w='100%' maxWidth={1220} mx='auto' mb={50}>\n              <x.h1 text='h1' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>Please wait</x.h1>\n              <x.p>Submitting your subscription request</x.p>\n            </x.div>}\n          {props.hasSubmitted &&\n            <x.div w='100%' maxWidth={1220} mx='auto' mb={50}>\n              <x.h1 text='h1' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>Thank you for your subscription</x.h1>\n              <x.p>Please check your email inbox to verify your subscription.</x.p>\n            </x.div>}\n        </Popup>}\n    </>\n  )\n}\n\nconst mapStateToProps = (state) => ({ ...state.subscribe, sessionId: getSessionId(state), visitorId: getVisitorId(state) })\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ subscribeNewsletter, reinitialize, updateForm, toggleNewsletterSubscription }, dispatch)\n\nexport const NewsletterSubscribeCallToAction = connect(mapStateToProps, mapDispatchToProps)(NewsletterSubscribeCallToActionCmp)\nexport default connect(mapStateToProps, mapDispatchToProps)(NewsletterSubscribePopup)\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.url2section = url2section;\nexports.articleUrl2section = articleUrl2section;\nexports.getSectionLabel = getSectionLabel;\nexports.getBaseSectionLabel = getBaseSectionLabel;\n\n/**\n * Formats an url to a section\n * @example\n * // returns \"news/south-africa\"\n *  url2section(\"/news/south-africa/\")\n * @param {string} url\n */\nfunction url2section(url) {\n  return url.replace(/^\\//, '').replace(/\\/$/, '');\n}\n\n/**\n * Formats an article url to a section\n * @example\n * // returns \"news/south-africa\"\n *  url2section(\"/news/south-africa/zuma-must-fall-1235576\")\n * @param {string} url\n */\nfunction articleUrl2section(url) {\n  return url.replace(/^\\//, '').replace(/\\/[^\\/]*$/, '');\n}\n\n/**\n * Formats the current section in a human readable way\n * @example\n * // returns \"South Africa\"\n *  getSectionLabel(\"news/south-africa\")\n * @param {string} sectionId\n */\nfunction getSectionLabel(sectionId) {\n  var section = sectionId.split('/').pop(); // Grab only the last section\n  return toTitleCase(section.replace(/-/g, ' ').toLowerCase());\n}\n\n/**\n * Formats the first segment of the current path in a human readable way\n * @example\n * // returns \"News\"\n *  getBaseSectionLabel(\"news/south-africa\")\n * @param {string} urlPath\n */\nfunction getBaseSectionLabel(urlPath) {\n  var section = urlPath.split('/')[0]; // Grab only the first segment of the section\n  return toTitleCase(section.replace('-', ' ').toLowerCase());\n}\n\n// Shamelessly ripped from \n// https://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript\nfunction toTitleCase(str) {\n  return str.replace(/\\w\\S*/g, function (txt) {\n    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n  });\n}","import axios from 'axios'\nimport { call, put, select, takeLatest, takeEvery } from 'redux-saga/effects'\nimport { fetchArticleAPI } from './article'\nimport Cache from '../lib/cache'\n\nexport const FETCH_ARTICLES = 'api/FETCH_ARTICLES'\nexport const FETCH_ARTICLES_SUCCESS = 'api/FETCH_ARTICLES_SUCCESS'\nexport const FETCH_ARTICLES_ERROR = 'api/FETCH_ARTICLES_ERROR'\nexport const FETCH_ARTICLES_NOTFOUND = 'api/FETCH_ARTICLES_NOTFOUND'\n\nexport const FETCH_FULL_ARTICLES = 'api/FETCH_FULL_ARTICLES'\nexport const FETCH_FULL_ARTICLES_SUCCESS = 'api/FETCH_FULL_ARTICLES_SUCCESS'\nexport const FETCH_FULL_ARTICLES_ERROR = 'api/FETCH_FULL_ARTICLES_ERROR'\nexport const FETCH_FULL_ARTICLES_NOTFOUND = 'api/FETCH_FULL_ARTICLES_NOTFOUND'\n\nexport const FETCH_MORE_ARTICLES = 'api/FETCH_MORE_ARTICLES'\nexport const FETCH_MORE_ARTICLES_SUCCESS = 'api/FETCH_MORE_ARTICLES_SUCCESS'\nexport const FETCH_MORE_ARTICLES_ERROR = 'api/FETCH_MORE_ARTICLES_ERROR'\n\nexport const SET_SECTION_TITLE = 'api/SET_SECTION_TITLE'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/content' : process.env.RAZZLE_CONTENT\nconst cache = Cache()\n\nexport async function fetchArticlesAPI (section, offset, limit, filter) {\n  if (offset === 0) {\n    const result = await cache.get(section)\n    if (result && result.contents && result.contents.length >= limit) {\n      // console.log('fetchArticlesAPI', 'HIT', section, limit)\n      result.contents = result.contents.slice(0, limit)\n      return result\n    }\n    limit = Math.max(10, limit)\n  }\n  const urlFilter = filter ? '?filter=' + filter : ''\n  // console.log('Fetching', SERVER_URL + '/v3/section/' + process.env.RAZZLE_TITLE_KEY + '/' + offset + '/' + limit + '/' + section + urlFilter)\n  return axios.get(SERVER_URL + '/v3/section/' + process.env.RAZZLE_TITLE_KEY + '/' + offset + '/' + limit + '/' + section + urlFilter)\n    .then(response => {\n      if (offset === 0) {\n        return cache.set(section, response.data, 3 * 60000)\n      } else {\n        return Promise.resolve(response.data)\n      }\n    })\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nexport async function fetchFullArticlesAPI (section, offset, limit, filter) {\n  return fetchArticlesAPI(section, offset, limit, filter)\n    .then(articles => Promise.all(articles.contents.map(article => fetchArticleAPI(article.contentKey))))\n}\n\nfunction * fetchArticlesSaga ({ section, offset, limit, filter }) {\n  try {\n    // const start = new Date()\n    const res = yield call(fetchArticlesAPI, section, offset, limit + 1, filter)\n    // console.log('Fetched', section, offset, limit, 'articles in', new Date() - start, 'ms')\n    let payload = { }\n    if (res.contents) {\n      payload = {\n        lastFetch: new Date(),\n        sectionsLabels: res.sectionsLabels,\n        hasMore: res.contents.length > limit,\n        articles: res.contents.slice(0, limit),\n        authorName: res['author-name'] ? res['author-name'] : null\n      }\n    }\n    yield put({ type: FETCH_ARTICLES_SUCCESS, payload, section })\n  } catch (e) {\n    if (e.response && e.response.status === 404) {\n      yield put({ type: FETCH_ARTICLES_NOTFOUND, section, message: e.message })\n    } else {\n      yield put({ type: FETCH_ARTICLES_ERROR, section, message: e.message })\n    }\n  }\n}\n\nfunction * fetchFullArticlesSaga ({ section, offset, limit, filter }) {\n  try {\n    // const start = new Date()\n    const res = yield call(fetchFullArticlesAPI, section, offset, limit + 1, filter)\n    // console.log('Fetched', section, offset, limit, 'articles in', new Date() - start, 'ms')\n    let payload = { }\n    if (res) {\n      payload = {\n        lastFetch: new Date(),\n        hasMore: res.length > limit,\n        articles: res.slice(0, limit),\n        authorName: null\n      }\n    }\n    yield put({ type: FETCH_FULL_ARTICLES_SUCCESS, payload, section })\n  } catch (e) {\n    console.error('ERROR while fetching section', section)\n    if (e.response && e.response.status === 404) {\n      yield put({ type: FETCH_FULL_ARTICLES_NOTFOUND, section, message: e.message })\n    } else {\n      yield put({ type: FETCH_FULL_ARTICLES_ERROR, section, message: e.message })\n    }\n  }\n}\n\nfunction * fetchMoreArticlesSaga ({ section, offset, limit }) {\n  try {\n    // console.log('fetchMoreArticlesSaga')\n    let data = yield select(getArticles, section)\n    if (data.articles.length < offset + limit) {\n      const res = yield call(fetchArticlesAPI, section, data.articles.length, limit + 1)\n      data = {\n        section,\n        hasMore: res.contents.length > limit,\n        sectionsLabels: res.sectionsLabels,\n        articles: data.articles.concat(res.contents.slice(0, limit))\n      }\n    } else {\n      data = {\n        section,\n        hasMore: true,\n        sectionsLabels: [],\n        articles: data.articles\n      }\n    }\n    yield put({ type: FETCH_MORE_ARTICLES_SUCCESS, payload: data })\n  } catch (e) {\n    console.error('ERROR while fetching section', section, 'json:', e.message)\n    yield put({ type: FETCH_MORE_ARTICLES_ERROR, payload: { section, message: e.message } })\n  }\n}\n\nexport function * watchFetchArticles () {\n  yield takeEvery(FETCH_ARTICLES, fetchArticlesSaga)\n  yield takeLatest(FETCH_MORE_ARTICLES, fetchMoreArticlesSaga)\n  yield takeEvery(FETCH_FULL_ARTICLES, fetchFullArticlesSaga)\n}\n\n// Saga actions\nexport const getArticles = (state, section) => state.articles[section]\nexport const getAllArticles = (state, section) => state.articles\nexport const fetchFullArticles = (section, offset, limit, filter) => ({ type: FETCH_FULL_ARTICLES, section, offset, limit, filter })\nexport const fetchArticles = (section, offset, limit, filter) => ({ type: FETCH_ARTICLES, section, offset, limit, filter })\nexport const fetchMoreArticles = (section, offset, limit) => ({ type: FETCH_MORE_ARTICLES, section, offset, limit })\nexport const setSectionTitle = (payload) => ({ type: SET_SECTION_TITLE, payload })\n\nexport const Reducer = (state = {}, { type, payload, meta, section, message }) => {\n  const newPayload = {}\n\n  switch (type) {\n    case FETCH_MORE_ARTICLES:\n    case FETCH_ARTICLES:\n    case FETCH_FULL_ARTICLES:\n      newPayload[section] = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        isFetchingMore: type === FETCH_MORE_ARTICLES,\n        hasFetchedMore: false,\n        hasFetched: false,\n        hasError: false,\n        is404: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_ARTICLES_NOTFOUND:\n    case FETCH_FULL_ARTICLES_NOTFOUND:\n      newPayload[section] = {\n        hasError: true,\n        is404: true,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        checkCanonical: false,\n        canonical: null\n      }\n      return Object.assign({}, state, newPayload)\n    case FETCH_ARTICLES_ERROR:\n    case FETCH_FULL_ARTICLES_ERROR:\n    case FETCH_MORE_ARTICLES_ERROR:\n      console.log('Proccessing ERROR', type, payload, meta, section, message)\n      newPayload[section] = {\n        hasError: true,\n        is404: false,\n        error: message,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      }\n      return Object.assign({}, state, newPayload)\n    case FETCH_MORE_ARTICLES_SUCCESS:\n      newPayload[payload.section] = {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        isFetchingMore: false,\n        hasFetchedMore: true,\n        articles: payload.articles,\n        hasMore: payload.hasMore,\n        lastFetch: payload.lastFetch,\n        authorName: payload.authorName,\n        sectionsLabels: payload.sectionsLabels\n      }\n      return Object.assign({}, state, newPayload)\n    case FETCH_FULL_ARTICLES_SUCCESS:\n    case FETCH_ARTICLES_SUCCESS:\n      newPayload[section] = {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        articles: payload.articles,\n        hasMore: payload.hasMore,\n        lastFetch: payload.lastFetch,\n        authorName: payload.authorName,\n        sectionsLabels: payload.sectionsLabels\n      }\n      return Object.assign({}, state, newPayload)\n    case SET_SECTION_TITLE:\n      return Object.assign({}, state, { sectionTitle: payload })\n    default:\n      return state\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.parseSectionName = parseSectionName;\nexports.parseArticleData = parseArticleData;\nexports.getHeadline = getHeadline;\nexports.getSummaryData = getSummaryData;\n\nvar _BaobabParagraphs = require(\"./BaobabParagraphs\");\n\nvar _ionUtil = require(\"ion-util\");\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction parseSectionName(_x) {\n  return _parseSectionName.apply(this, arguments);\n}\n\nfunction _parseSectionName() {\n  _parseSectionName = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(label) {\n    var name;\n    return regeneratorRuntime.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            name = label.replace(/\\s+- Web\\s*$/, '').replace(/^IOL - /, '');\n            return _context.abrupt(\"return\", name.toLowerCase().replace(/'/g, '').replace(/-web\\s*$/, '').replace(/^iol-/, '').replace(/-+/, '-').replace(/^-+/, '').replace(/-+$/, '').replace(/0027/, ''));\n\n          case 2:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _callee);\n  }));\n  return _parseSectionName.apply(this, arguments);\n}\n\nfunction stripCharacters(content) {\n  return content.replace(/&#8217;/g, \"'\").replace(/&#8216;/g, \"'\").replace(/&#8220;/g, '\"').replace(/&#8221;/g, '\"').replace(/#0027/g, \"'\").replace(/&#00238220;/g, \"\\\"\").replace(/&#00238221;/g, \"\\\"\").replace(/&#00238216;/g, \"'\").replace(/&#00238217;/g, \"'\").replace(/&#00238230;/g, \".\").replace(/&#0023232;/g, \"è\").replace(/&#0023233;/g, \"é\").replace(/&#0023235;/g, \"ë\").replace(/&#163;/g, \"£\").replace(/&#232;/g, \"è\").replace(/&#233;/g, \"é\").replace(/&#8230;/g, \"...\").replace(/&#8211;/, \"–\");\n}\n\nfunction stripHeadline(headline) {\n  if (headline) {\n    headline = stripTags(headline);\n    headline = headline.replace(/\\s+/g, ' ');\n  }\n\n  return headline;\n}\n\nfunction stripTags(string) {\n  if (string) {\n    return string.replace(/<(.|\\n)*?>/g, '');\n  }\n}\n\nfunction parseArticleData(_x2) {\n  return _parseArticleData.apply(this, arguments);\n}\n\nfunction _parseArticleData() {\n  _parseArticleData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(content) {\n    var article, headline, _abstract, images, videos, youtubes, bodyHTML, paragraphs, relatedArticles, sourceRelatedArticles;\n\n    return regeneratorRuntime.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            article = {};\n            article['contentKey'] = content.contentKey;\n\n            if (!content.primarySection) {\n              _context4.next = 7;\n              break;\n            }\n\n            _context4.next = 5;\n            return parseSectionName(content.primarySection.replace(/^[^\\/]+\\//, ''));\n\n          case 5:\n            article['section'] = _context4.sent;\n            article['titleKey'] = content.primarySection.split(/\\//)[0];\n\n          case 7:\n            headline = getHeadline(content);\n            article['headline'] = stripCharacters(headline);\n            _abstract = getAbstract(content);\n\n            if (_abstract) {\n              _abstract = stripCharacters(_abstract);\n              article['abstract'] = _abstract.replace(/<!--PSTYLE=WL Web Lead-->/, '').replace(/<!--PSTYLE=HEADLINE-->/, '').replace(/<strong>/, '').replace(/<\\/strong>/, '').replace(/<!--PSTYLE=hed_35H 30pt-->/, '').replace(/<!--PSTYLE=hed_65H 60pt-->/, '').replace(/<!--PSTYLE=hed_95H 30pt-->/, '').replace(/<!--PSTYLE=hed_95H 72pt-->/, '').replace(/<!--PSTYLE=hed_OPED 48pt-->/, '').replace(/<!--PSTYLE=Normal-->/, '').replace(/<p>/, '').replace(/<\\/p>$/, '');\n            }\n\n            if (content.byLine) {\n              article['author'] = stripTags(content.byLine);\n            }\n\n            article['published'] = formatPublished(content.publishDate);\n            images = [];\n            videos = [];\n            youtubes = [];\n\n            if (!content.mediaContainer) {\n              _context4.next = 19;\n              break;\n            }\n\n            _context4.next = 19;\n            return Promise.all(content.mediaContainer.mediaLists.map( /*#__PURE__*/function () {\n              var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(media) {\n                return regeneratorRuntime.wrap(function _callee3$(_context3) {\n                  while (1) {\n                    switch (_context3.prev = _context3.next) {\n                      case 0:\n                        _context3.next = 2;\n                        return Promise.all(media.resources.map( /*#__PURE__*/function () {\n                          var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(resource) {\n                            var _resource$imageURL$ma, _resource$imageURL$ma2, url, id, videoObject;\n\n                            return regeneratorRuntime.wrap(function _callee2$(_context2) {\n                              while (1) {\n                                switch (_context2.prev = _context2.next) {\n                                  case 0:\n                                    if (!(media.mediaType === 'Image' && resource.imageURL)) {\n                                      _context2.next = 4;\n                                      break;\n                                    }\n\n                                    if (resource.imageURL.match('youtube.com')) {\n                                      _resource$imageURL$ma = resource.imageURL.match(/youtube\\.com\\/vi\\/(.*)$/), _resource$imageURL$ma2 = _slicedToArray(_resource$imageURL$ma, 2), url = _resource$imageURL$ma2[0], id = _resource$imageURL$ma2[1];\n                                      youtubes.push({\n                                        url: resource.imageURL,\n                                        id: id.replace(/\\/default\\.jpg/, '')\n                                      });\n                                    } else {\n                                      images.push(translateImageResource(resource));\n                                    }\n\n                                    _context2.next = 12;\n                                    break;\n\n                                  case 4:\n                                    if (!(media.mediaType === 'Video' && resource.url)) {\n                                      _context2.next = 11;\n                                      break;\n                                    }\n\n                                    _context2.next = 7;\n                                    return translateVideoResource(resource);\n\n                                  case 7:\n                                    videoObject = _context2.sent;\n                                    videos.push(videoObject);\n                                    _context2.next = 12;\n                                    break;\n\n                                  case 11:\n                                    console.warn('resource ', content.contentKey, resource);\n\n                                  case 12:\n                                  case \"end\":\n                                    return _context2.stop();\n                                }\n                              }\n                            }, _callee2);\n                          }));\n\n                          return function (_x9) {\n                            return _ref4.apply(this, arguments);\n                          };\n                        }()));\n\n                      case 2:\n                      case \"end\":\n                        return _context3.stop();\n                    }\n                  }\n                }, _callee3);\n              }));\n\n              return function (_x8) {\n                return _ref3.apply(this, arguments);\n              };\n            }()));\n\n          case 19:\n            if (content.thumbnailURL) {\n              images.push({\n                url: content.thumbnailURL\n              });\n            }\n\n            if (!(0, _ionUtil.isEmpty)(images)) {\n              article['images'] = images;\n            }\n\n            if (videos.length) {\n              article['videos'] = videos;\n            }\n\n            if (youtubes.length) {\n              article['youtubes'] = youtubes;\n            }\n\n            bodyHTML = getBodyHTML(content);\n            bodyHTML = stripCharacters(bodyHTML);\n            article['bodyHTML'] = bodyHTML;\n            paragraphs = getParagraphs(bodyHTML);\n            _context4.next = 29;\n            return getBodyLead(paragraphs);\n\n          case 29:\n            article['bodyLead'] = _context4.sent;\n            _context4.next = 32;\n            return getBodyMore(paragraphs);\n\n          case 32:\n            article['bodyMore'] = _context4.sent;\n            relatedArticles = [];\n            sourceRelatedArticles = content.relatedContent || content.relatedArticles || [];\n\n            if (sourceRelatedArticles.length > 0) {\n              sourceRelatedArticles.forEach(function (relatedArticle) {\n                if (relatedArticle.externalUrl) {\n                  relatedArticles.push(relatedArticle);\n                }\n              });\n\n              if (relatedArticles.length > 0) {\n                article['relatedArticles'] = relatedArticles;\n              }\n            }\n\n            return _context4.abrupt(\"return\", article);\n\n          case 37:\n          case \"end\":\n            return _context4.stop();\n        }\n      }\n    }, _callee4);\n  }));\n  return _parseArticleData.apply(this, arguments);\n}\n\nfunction getAbstract(content) {\n  if (content.abstrct) {\n    return content.abstrct;\n  }\n\n  if (content.summaryAbstract) {\n    return content.summaryAbstract;\n  }\n\n  if (content.summaryAbstractHTML) {\n    return content.summaryAbstractHTML;\n  }\n\n  if (content.abstractHTML) {\n    return content.abstractHTML;\n  }\n\n  if (content[\"abstract\"]) {\n    content[\"abstract\"];\n  }\n\n  return '';\n}\n\nfunction getHeadline(content) {\n  if (content.headline) {\n    return stripHeadline(content.headline);\n  }\n\n  if (content.summaryHeadline) {\n    return stripHeadline(content.summaryHeadline);\n  }\n\n  if (content.label) {\n    return stripHeadline(content.label);\n  }\n\n  return '';\n}\n\nfunction getParagraphs(html) {\n  var fromIndex = 0;\n  var paragraphs = [];\n\n  while (true) {\n    if (html.startsWith('<p')) {\n      var index = html.indexOf('</p>');\n\n      if (index < 0) {\n        paragraphs.push(html + '</p>');\n        return paragraphs;\n      }\n\n      index += 4;\n      var paragraph = html.substring(fromIndex, index);\n\n      if (paragraph.length) {\n        paragraphs.push(paragraph);\n      }\n\n      html = html.substring(index);\n    } else {\n      var _index = html.indexOf('<p');\n\n      if (_index < 0) {\n        paragraphs.push(html);\n        return paragraphs;\n      } else {\n        paragraphs.push(html.substring(fromIndex, _index));\n        html = html.substring(_index);\n      }\n    }\n  }\n\n  return paragraphs;\n}\n\nfunction checkParagraph(html) {\n  if (html.startsWith('<p>')) {\n    return html;\n  } else {\n    var index = html.indexOf('<p>');\n\n    if (index < 0) {\n      return '<p>' + html + '</p>';\n    } else {\n      return '<p>' + html.substring(0, index) + '</p>' + html.substring(index);\n    }\n  }\n}\n\nfunction translateVideoResource(_x3) {\n  return _translateVideoResource.apply(this, arguments);\n}\n\nfunction _translateVideoResource() {\n  _translateVideoResource = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(resource) {\n    var url, videoMediaSrc, urlToArray;\n    return regeneratorRuntime.wrap(function _callee5$(_context5) {\n      while (1) {\n        switch (_context5.prev = _context5.next) {\n          case 0:\n            url = resource.url;\n            _context5.next = 3;\n            return Requests.json({\n              url: siteProps.videoServiceUrl + url + '&standAlone=true'\n            });\n\n          case 3:\n            videoMediaSrc = _context5.sent;\n            urlToArray = url.split('/'); //let initialMediaScripts = videoMediaSrc.match(/(<script)(.*)(<\\/script>)/)[0]\n            //let finalMediaScript = videoMediaSrc.match(/<div id.*([^\\n]*\\n+)+(.*)/)[0]\n            //const videoMediaScript = initialMediaScripts + '\\n'+ finalMediaScript\n\n            return _context5.abrupt(\"return\", {\n              id: urlToArray[urlToArray.length - 1],\n              url: url,\n              thumbnailURL: resource.thumbnailURL,\n              script: videoMediaSrc\n            });\n\n          case 6:\n          case \"end\":\n            return _context5.stop();\n        }\n      }\n    }, _callee5);\n  }));\n  return _translateVideoResource.apply(this, arguments);\n}\n\nfunction translateImageResource(resource) {\n  var _ref = resource.imageURL.match(/^.*\\/(image|media)\\/(.*)$/) || [],\n      _ref2 = _slicedToArray(_ref, 3),\n      url = _ref2[0],\n      type = _ref2[1],\n      id = _ref2[2];\n\n  if (!id) {\n    throw 'Unsupported image URL: ' + resource.imageURL;\n  }\n\n  var image = {\n    id: id,\n    url: url\n  };\n\n  if (resource.caption) {\n    image.caption = stripCharacters(resource.caption);\n  }\n\n  if (resource.imageWidth) {\n    image.width = resource.imageWidth;\n    image.height = resource.imageHeight;\n\n    if (false) {\n      // TODO\n      image.w = resource.imageWidth;\n      image.h = resource.imageHeight;\n    }\n\n    if (resource.cropWidth) {\n      image.crop = {\n        w: resource.cropWidth,\n        h: resource.cropHeight,\n        x: resource.cropOffsetX || 0,\n        y: resource.cropOffsetY || 0\n      };\n    }\n\n    if (resource.focalPointX) {\n      image.focalPoint = {\n        x: resource.focalPointX,\n        y: resource.focalPointY\n      };\n    }\n  }\n\n  return image;\n}\n\nfunction formatPublished(date) {\n  if (date) return new Date(date).toISOString().substring(0, 16);else {\n    return '';\n  }\n}\n\nfunction getBodyHTML(content) {\n  if (content.bodyHTML) {\n    return content.bodyHTML;\n  } else {\n    try {\n      return concatBodyElementsHtml(content);\n    } catch (err) {\n      console.warn(err, content.contentKey);\n      throw 'body elements: ' + content.contentKey;\n    }\n  }\n}\n\nfunction getBodyLead(_x4) {\n  return _getBodyLead.apply(this, arguments);\n}\n\nfunction _getBodyLead() {\n  _getBodyLead = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(paragraphs) {\n    var body;\n    return regeneratorRuntime.wrap(function _callee6$(_context6) {\n      while (1) {\n        switch (_context6.prev = _context6.next) {\n          case 0:\n            body = (0, _BaobabParagraphs.formatHtml)(paragraphs.slice(0, 2));\n            _context6.next = 3;\n            return reconstructBody(body);\n\n          case 3:\n            return _context6.abrupt(\"return\", _context6.sent);\n\n          case 4:\n          case \"end\":\n            return _context6.stop();\n        }\n      }\n    }, _callee6);\n  }));\n  return _getBodyLead.apply(this, arguments);\n}\n\nfunction getBodyMore(_x5) {\n  return _getBodyMore.apply(this, arguments);\n}\n\nfunction _getBodyMore() {\n  _getBodyMore = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(paragraphs) {\n    var body;\n    return regeneratorRuntime.wrap(function _callee7$(_context7) {\n      while (1) {\n        switch (_context7.prev = _context7.next) {\n          case 0:\n            body = (0, _BaobabParagraphs.formatHtml)(paragraphs.slice(0, 2));\n            _context7.next = 3;\n            return reconstructBody(body);\n\n          case 3:\n            return _context7.abrupt(\"return\", _context7.sent);\n\n          case 4:\n          case \"end\":\n            return _context7.stop();\n        }\n      }\n    }, _callee7);\n  }));\n  return _getBodyMore.apply(this, arguments);\n}\n\nfunction reconstructBody(_x6) {\n  return _reconstructBody.apply(this, arguments);\n}\n\nfunction _reconstructBody() {\n  _reconstructBody = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee8(body) {\n    var baobabVideoPlaceholderMatch, inlineArticleLinks, inlineAfricanIndyArticleLinks, inlineImageMatch;\n    return regeneratorRuntime.wrap(function _callee8$(_context8) {\n      while (1) {\n        switch (_context8.prev = _context8.next) {\n          case 0:\n            baobabVideoPlaceholderMatch = /(\\[video\\]\\()(.*)\\)/;\n            inlineArticleLinks = /href='https?:\\/\\/([a-z]+\\.iol\\.co\\.za|iol\\.co\\.za)(.*?)([0-9]{5})/;\n            inlineAfricanIndyArticleLinks = /href='https?:\\/\\/([a-z]+\\.africanindy\\.com|africanindy\\.com)(.*?)([0-9]{5})/;\n            inlineImageMatch = /<figure><img class='baobab-embedded-image'/;\n\n            if (!baobabVideoPlaceholderMatch.test(body)) {\n              _context8.next = 8;\n              break;\n            }\n\n            _context8.next = 7;\n            return formatBaobabVideo(body);\n\n          case 7:\n            body = _context8.sent;\n\n          case 8:\n            if (!inlineImageMatch.test(body)) {\n              _context8.next = 12;\n              break;\n            }\n\n            _context8.next = 11;\n            return formatInlineImage(body);\n\n          case 11:\n            body = _context8.sent;\n\n          case 12:\n            return _context8.abrupt(\"return\", body);\n\n          case 13:\n          case \"end\":\n            return _context8.stop();\n        }\n      }\n    }, _callee8);\n  }));\n  return _reconstructBody.apply(this, arguments);\n}\n\nfunction concatBodyElementsHtml(content) {\n  var html = '';\n  var author;\n\n  if (content.byLine) {\n    author = content.byLine.replace(/<[^>]*>/g, '');\n  }\n\n  assert(content.body && content.body.elements, 'content body elements');\n  content.body.elements.forEach(function (element) {\n    if (element.content.type === 'html') {\n      assert(element.content.html, 'content html');\n\n      if (author && element.content.html.indexOf(author) === 0) {\n        html += element.content.html.substring(author.length);\n      } else {\n        html += element.content.html;\n      }\n    } else if (element.content.type === 'video-oembed') {\n      assert(element.content.oembedContent.html, 'content video-oembed html');\n      html += element.content.oembedContent.html;\n    } else {\n      console.warn('element html empty', content.contentKey, element.type, element);\n    }\n  });\n  return html;\n}\n\nfunction getSummaryData(_x7) {\n  return _getSummaryData.apply(this, arguments);\n}\n\nfunction _getSummaryData() {\n  _getSummaryData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee9(data) {\n    var summary;\n    return regeneratorRuntime.wrap(function _callee9$(_context9) {\n      while (1) {\n        switch (_context9.prev = _context9.next) {\n          case 0:\n            summary = {\n              contentKey: data.contentKey,\n              section: data.section,\n              headline: data.headline,\n              \"abstract\": data[\"abstract\"],\n              author: data.author,\n              published: data.published,\n              titleKey: data.titleKey\n            };\n\n            if (!(0, _ionUtil.isEmpty)(data.images)) {\n              summary.image = data.images[0];\n            }\n\n            if (!(0, _ionUtil.isEmpty)(data.videos)) {\n              summary.video = data.videos[0];\n            }\n\n            if (!(0, _ionUtil.isEmpty)(data.youtubes)) {\n              summary.youtube = data.youtubes[0];\n            }\n\n            return _context9.abrupt(\"return\", summary);\n\n          case 5:\n          case \"end\":\n            return _context9.stop();\n        }\n      }\n    }, _callee9);\n  }));\n  return _getSummaryData.apply(this, arguments);\n}","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_OTHER_PUBLICATIONS_ARTICLES = 'api/FETCH_OTHER_PUBLICATIONS_ARTICLES'\nexport const FETCH_OTHER_PUBLICATIONS_ARTICLES_SUCCESS = 'api/FETCH_OTHER_PUBLICATIONS_ARTICLES_SUCCESS'\nexport const FETCH_OTHER_PUBLICATIONS_ARTICLES_ERROR = 'api/FETCH_OTHER_PUBLICATIONS_ARTICLES_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/other-publications' : process.env.RAZZLE_OTHER_PUBLICATIONS\nconst OTHER_ARTICLES_SECTION = 'newspapertitles'\nconst cache = Cache()\n\nasync function fetchArticlesAPI (section, offset, limit, filter) {\n  if (offset === 0) {\n    const result = await cache.get(section)\n    if (result && result.contents && result.contents.length >= limit) {\n      // console.log('fetchArticlesAPI', 'HIT', section, limit)\n      result.contents = result.contents.slice(0, limit)\n      return result\n    }\n    limit = Math.max(10, limit)\n  }\n  return axios.get(SERVER_URL + '/' + offset + '/' + (limit * 2) + '/' + section)\n    .then(response => {\n      const data = response.data.filter(article => ('publication' in article) && filter.indexOf(article.publication) >= 0).slice(0, limit)\n\n      if (offset === 0) {\n        return cache.set(section, data)\n      } else {\n        return Promise.resolve(response.data)\n      }\n    })\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nfunction * fetchOtherPublicationsArticlesSaga ({ section, offset, limit, filter }) {\n  try {\n    const res = yield call(fetchArticlesAPI, section, offset, limit + 1, filter)\n    yield put({ type: FETCH_OTHER_PUBLICATIONS_ARTICLES_SUCCESS, payload: res, section })\n  } catch (e) {\n    yield put({ type: FETCH_OTHER_PUBLICATIONS_ARTICLES_ERROR, payload: e.message, section })\n  }\n}\n\nexport function * watchFetchOtherPublicationsArticles () {\n  yield takeLatest(FETCH_OTHER_PUBLICATIONS_ARTICLES, fetchOtherPublicationsArticlesSaga)\n}\n\n// Saga actions\nexport const fetchOtherPublicationsArticles = (section, offset, limit, filter) => ({ type: FETCH_OTHER_PUBLICATIONS_ARTICLES, section: OTHER_ARTICLES_SECTION, offset, limit, filter })\n\nconst initialState = {\n  newspapertitles: {\n    didInvalidate: false,\n    isFetching: false,\n    hasFetched: false,\n    hasError: false,\n    error: null,\n    articles: [] // do not mutate these\n  }\n}\n\nexport const Reducer = (state = initialState, { type, payload, meta, section }) => {\n  const newPayload = {}\n  switch (type) {\n    case FETCH_OTHER_PUBLICATIONS_ARTICLES:\n      newPayload[section] = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_OTHER_PUBLICATIONS_ARTICLES_ERROR:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_OTHER_PUBLICATIONS_ARTICLES_SUCCESS:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        articles: payload\n      })\n      return Object.assign({}, state, newPayload)\n    default:\n      return state\n  }\n}\n","import { setCache } from '../lib/cache'\nimport { DoNothingCache } from 'ion-cache'\n\nsetCache(new DoNothingCache())\n","import { PAGE_VIEW, HOME_PAGE_VIEW, SECTION_PAGE_VIEW, STATIC_PAGE_VIEW, EXPERIMENT_WIN, AD_BLOCKER, ERROR_PAGE_VIEW } from './app'\nimport { FETCH_ARTICLE_SUCCESS, OOVVUU_ARTICLE_RENDER, SOCIAL_SHARE_PLATFORM } from './article'\n\nconst sanitizeUserId = (userId) => encodeURIComponent(userId).replace(/[%/=]+/g, '')\n\n// Map the event to a Redux action\nexport const eventsMap = {\n  [SECTION_PAGE_VIEW]: (action) => ({\n    event: 'SectionPageview',\n    firstRender: action.firstRender,\n    virtualPageURL: action.payload.path,\n    section: action.payload.section,\n    visitorId: sanitizeUserId(action.visitorId),\n    sessionId: action.sessionId,\n    titleKey: process.env.RAZZLE_TITLE_KEY\n  }),\n  [STATIC_PAGE_VIEW]: (action) => ({\n    event: 'StaticPageview',\n    firstRender: action.firstRender,\n    virtualPageURL: action.payload,\n    visitorId: sanitizeUserId(action.visitorId),\n    sessionId: action.sessionId,\n    titleKey: process.env.RAZZLE_TITLE_KEY\n  }),\n  [HOME_PAGE_VIEW]: (action) => ({\n    event: 'HomePageview',\n    firstRender: action.firstRender,\n    virtualPageURL: action.payload,\n    visitorId: sanitizeUserId(action.visitorId),\n    sessionId: action.sessionId,\n    titleKey: process.env.RAZZLE_TITLE_KEY\n  }),\n  [PAGE_VIEW]: (action) => ({\n    event: 'VirtualPageview',\n    virtualPageURL: action.payload,\n    visitorId: sanitizeUserId(action.visitorId),\n    sessionId: action.sessionId\n  }),\n  [OOVVUU_ARTICLE_RENDER]: (action) => ({\n    event: 'OovvuuView',\n    section: action.payload.split('/')[0]\n  }),\n  [FETCH_ARTICLE_SUCCESS]: (action) => ({\n    event: 'ArticlePageview',\n    contentKey: action.payload.contentKey,\n    section: action.payload.section.split('/')[0] || '',\n    author: action.payload.author,\n    visitorId: sanitizeUserId(action.payload.visitorId),\n    sessionId: action.payload.sessionId,\n    title: action.payload.headline,\n    host: process.env.RAZZLE_SITE_URL,\n    path: action.path,\n    titleKey: action.payload.titleKey,\n    tags: action.tags,\n    contentLength: action.payload.count_words,\n    contentFormat: 'Article',\n    subSection: action.payload.section.split('/')[1] || '',\n    videoViews: action.payload.count_video,\n    // ageRange: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+'],\n    // gender: ['Female', 'Male', 'Other'],\n    // interests: ['{{dynamic_interest_1}}', '{{dynamic_interest_2}}'],\n    canonical: action.payload.canonicalUri\n  }),\n  [SOCIAL_SHARE_PLATFORM]: (action) => ({\n    event: 'SocialShare',\n    contentKey: action.payload.contentKey,\n    socialShare: action.payload.platform,\n    visitorId: sanitizeUserId(action.payload.visitorId),\n    sessionId: action.payload.sessionId\n  }),\n  [EXPERIMENT_WIN]: (action) => ({\n    event: 'ABTest',\n    experiment: action.payload,\n    variant: action.variant\n  }),\n  [ERROR_PAGE_VIEW]: (action) => ({\n    event: 'ErrorPageView',\n    virtualPageURL: action.payload,\n    visitorId: sanitizeUserId(action.visitorId)\n  }),\n  [AD_BLOCKER]: (action) => ({\n    event: 'AdBlockerDetected',\n    virtualPageURL: action.payload,\n    host: process.env.RAZZLE_SITE_URL\n  })\n}\n","import axios from 'axios'\nimport { call, put, takeEvery } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_WEATHER = 'api/FETCH_WEATHER'\nexport const FETCH_WEATHER_SUCCESS = 'api/FETCH_WEATHER_SUCCESS'\nexport const FETCH_WEATHER_ERROR = 'api/FETCH_WEATHER_ERROR'\n\nconst WEATHER_SERVER_URL = typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\nconst cache = Cache()\nconst key = '/weather/'\n\nasync function fetchWeatherAPI () {\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  return axios.get(WEATHER_SERVER_URL + '/data/weather/station/Cape Town')\n    .then(response => {\n      return response.data\n    })\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nfunction * fetchWeatherSaga () {\n  try {\n    const res = yield call(fetchWeatherAPI)\n    cache.set(key, res)\n    yield put({ type: FETCH_WEATHER_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_WEATHER_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchWeather () {\n  yield takeEvery(FETCH_WEATHER, fetchWeatherSaga)\n}\n\n// Saga actions\nexport const fetchWeather = () => ({ type: FETCH_WEATHER, payload: {} })\n\nexport const Reducer = (state = {}, { type, payload }) => {\n  switch (type) {\n    case FETCH_WEATHER:\n      // Do not update the state\n      return state\n    case FETCH_WEATHER_ERROR:\n      return Object.assign({}, state, {\n        isFetching: false,\n        hasFetched: false,\n        hasError: true,\n        message: payload\n      })\n    case FETCH_WEATHER_SUCCESS:\n      return Object.assign({}, state, {\n        isFetching: false,\n        hasFetched: true,\n        hasError: false,\n        weather: payload\n      })\n    default:\n      return state\n  }\n}\n","import { combineReducers } from 'redux'\nimport { Reducer as articles } from './articles'\nimport { Reducer as mostReadArticles } from './mostReadArticles'\nimport { Reducer as trendingArticles } from './trendingArticles'\nimport { Reducer as trends } from './trends'\nimport { Reducer as article } from './article'\nimport { Reducer as app } from './app'\nimport { Reducer as staticPage } from './staticPage'\nimport { Reducer as feedback } from './feedback'\nimport { Reducer as subscribe } from './subscribe'\nimport { Reducer as editorsChoice } from './editorsChoice'\nimport { Reducer as otherPublications } from './otherPublications'\nimport { Reducer as weather } from './weather'\nimport { Reducer as user } from './user'\nimport { Reducer as author } from './author'\nimport { Reducer as authors } from './authors'\nimport { Reducer as digiserts } from './digiserts'\nimport { Reducer as elections } from './elections'\n\nexport default combineReducers({\n  article,\n  articles,\n  mostReadArticles,\n  trendingArticles,\n  trends,\n  app,\n  staticPage,\n  feedback,\n  subscribe,\n  editorsChoice,\n  otherPublications,\n  weather,\n  user,\n  author,\n  authors,\n  digiserts,\n  elections\n})\n","import { compose, createStore, applyMiddleware } from 'redux'\nimport createSagaMiddleware, { END } from 'redux-saga'\nimport createSagaMonitor from '@clarketm/saga-monitor'\n\n// Beacons\nimport { createMiddleware as createBeaconMiddleware } from 'redux-beacon'\nimport GoogleTagManager from '@redux-beacon/google-tag-manager'\nimport OfflineWeb from '@redux-beacon/offline-web'\nimport IONAnalytics from 'redux-beacon-IONAnalytics'\nimport postIONAnalytics from 'redux-beacon-postIONAnalytics'\nimport Chartbeat from 'redux-beacon-Chartbeat'\n\nimport { eventsMap } from './events'\nimport rootReducer from './rootReducer'\nimport { isConnected } from './app'\n\nconst gtm = GoogleTagManager()\nconst offlineStorage = OfflineWeb(isConnected)\nconst middleWareElements = [\n  createBeaconMiddleware(eventsMap, IONAnalytics, { offlineStorage })\n]\nprocess.env.RAZZLE_ENABLE_ION_ANALYTICS && middleWareElements.push(createBeaconMiddleware(eventsMap, postIONAnalytics, { offlineStorage }))\nprocess.env.RAZZLE_ENABLE_GTM && middleWareElements.push(createBeaconMiddleware(eventsMap, gtm, { offlineStorage }))\nprocess.env.RAZZLE_ENABLE_CHARTBEAT && middleWareElements.push(createBeaconMiddleware(eventsMap, Chartbeat))\n\nfunction beaconMiddleware (isServer) {\n  if (!isServer) {\n    return middleWareElements\n  } else {\n    return [\n      createBeaconMiddleware(eventsMap, IONAnalytics),\n      createBeaconMiddleware(eventsMap, postIONAnalytics)\n    ]\n  }\n}\n\nexport default function createReduxStore (state = {}) {\n  const sagaMiddleware = process.env.RAZZLE_SAGA_MONITOR === 'on'\n    ? createSagaMiddleware({\n      sagaMonitor: createSagaMonitor({\n        level: 'warn',\n        effectTrigger: true,\n        effectResolve: true,\n        actionDispatch: true\n      })\n    })\n    : createSagaMiddleware()\n\n  const devToolsCompose = (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose\n\n  const store = createStore(rootReducer, state, devToolsCompose(applyMiddleware(\n    ...beaconMiddleware(typeof window === 'undefined'),\n    sagaMiddleware\n  )))\n\n  if (module.hot) {\n    // Enable Webpack hot module replacement for reducers\n    module.hot.accept('./rootReducer', () => {\n      const nextRootReducer = require('./rootReducer').default\n      store.replaceReducer(nextRootReducer)\n    })\n  }\n\n  store.runSaga = sagaMiddleware.run\n  store.close = () => store.dispatch(END)\n\n  return store\n}\n","import { all } from 'redux-saga/effects'\nimport { watchFetchArticles } from './articles'\nimport { watchFetchMostReadArticles } from './mostReadArticles'\nimport { watchTrendingArticles } from './trendingArticles'\nimport { watchFetchTrendsList } from './trends'\nimport { watchFetchArticleContent, watchFetchArticle, watchPreviewArticle, watchSubmitCompetition } from './article'\nimport { watchNavChanges, watchPrecache } from './app'\nimport { watchFetchStaticPage } from './staticPage'\nimport { watchFeedback } from './feedback'\nimport { watchSubscribe } from './subscribe'\nimport { watchfetchEditorsChoiceArticles } from './editorsChoice'\nimport { watchFetchOtherPublicationsArticles } from './otherPublications'\nimport { watchFetchWeather } from './weather'\nimport { watchFetchAuthor } from './author'\nimport { watchFetchAuthors } from './authors'\nimport { watchFetchDigiserts } from './digiserts'\nimport { watchElections } from './elections'\n\nexport default function * rootSaga () {\n  try {\n    yield all([\n      watchFetchArticleContent(),\n      watchFetchArticle(),\n      watchPreviewArticle(),\n      watchFetchArticles(),\n      watchFetchMostReadArticles(),\n      watchTrendingArticles(),\n      watchFetchTrendsList(),\n      // watchFetchRssArticles(),\n      watchNavChanges(),\n      watchFeedback(),\n      watchPrecache(),\n      watchFetchStaticPage(),\n      watchSubscribe(),\n      watchSubmitCompetition(),\n      watchfetchEditorsChoiceArticles(),\n      watchFetchOtherPublicationsArticles(),\n      watchFetchWeather(),\n      watchFetchAuthor(),\n      watchFetchAuthors(),\n      watchFetchDigiserts(),\n      watchElections()\n    ])\n  } catch (e) {\n    console.error('ERROR Saga ERROR', e)\n    throw e\n  }\n}\n","// import './wdyr'\nimport './client-cache'\n\nimport React from 'react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { hydrate } from 'react-dom'\nimport { Provider } from 'react-redux'\nimport { Provider as ReaKitProvider } from 'reakit'\nimport { loadableReady } from '@loadable/component'\nimport ScrollMemory from 'react-router-scroll-memory'\n\nimport App, { ErrorBoundary as AppErrorBoundary } from '../app/App'\nimport ServiceWorker from '../app/ServiceWorker'\nimport createStore from '../store/createStore'\nimport rootSaga from '../store/sagas'\nimport { updateConnectivity } from '../store/app'\n\nfunction getVisitorId () {\n  return document.cookie\n    .split('; ')\n    .find(row => row.startsWith('visitorId='))\n    .split('=')[1]\n}\nfunction getVisitorSessionId () {\n  return document.cookie\n    .split('; ')\n    .find(row => row.startsWith('sessionId='))\n    .split('=')[1]\n}\nconst store = createStore({\n  ...window.__PRELOADED_STATE__,\n  ...{\n    user: {\n      visitorId: getVisitorId(),\n      sessionId: getVisitorSessionId()\n    }\n  }\n})\n\nstore.runSaga(rootSaga)\n\nwindow.addEventListener('offline', () => {\n  store.dispatch(updateConnectivity(false))\n})\n\nwindow.addEventListener('online', () => {\n  store.dispatch(updateConnectivity(true))\n})\n\nwindow.startPath = window.location.pathname\n// const isProd = process.env.NODE_ENV === 'production'\nloadableReady(() => {\n  hydrate(\n    <Provider store={store}>\n      <ReaKitProvider>\n        <BrowserRouter>\n          <ServiceWorker />\n          <ScrollMemory />\n          <AppErrorBoundary>\n            <App />\n          </AppErrorBoundary>\n        </BrowserRouter>\n      </ReaKitProvider>\n    </Provider>,\n    document.getElementById('root')\n  )\n})\n\nif (module.hot) {\n  module.hot.accept()\n}\n","\nimport { takeLatest, takeEvery, put, select, delay, call, spawn } from 'redux-saga/effects'\nimport { clearSlots, performSingleRequest } from 'ion-ads'\nimport ionPostAnalytics from '../lib/ionPostAnalytics'\nimport { NAVIGATE_TO } from 'ion-navchevron'\nimport { getAllArticles, FETCH_ARTICLES_SUCCESS } from '../store/articles'\n\nexport const HIDE_MENU = 'HIDE_MENU'\nexport const SHOW_MENU = 'SHOW_MENU'\nexport const TOGGLE_MENU = 'TOGGLE_MENU'\nexport const HIDE_SEARCH = 'HIDE_SEARCH'\nexport const SHOW_SEARCH = 'SHOW_SEARCH'\nexport const TOGGLE_SEARCH = 'TOGGLE_SEARCH'\nexport const EXPERIMENT_WIN = 'EXPERIMENT_WIN'\nexport const PAGE_VIEW = 'PAGE_VIEW'\nexport const ERROR_PAGE_VIEW = 'ERROR_PAGE_VIEW'\nexport const HOME_PAGE_VIEW = 'HOME_PAGE_VIEW'\nexport const SECTION_PAGE_VIEW = 'SECTION_PAGE_VIEW'\nexport const STATIC_PAGE_VIEW = 'STATIC_PAGE_VIEW'\nexport const UPDATE_CONNECTIVITY = 'UPDATE_CONNECTIVITY'\nexport const STATS_PING = 'STATS_PING'\nexport const RESET_FIRST_RENDER = 'RESET_FIRST_RENDER'\nexport const SELECT_MOST_READ_TAB = 'SELECT_MOST_READ_TAB'\nexport const AD_BLOCKER = 'AD_BLOCKER'\nexport const RENDER_BLOCK = 'RENDER_BLOCK'\nexport const UPDATE_WALLPAPER_ACTIVE = 'UPDATE_WALLPAPER_ACTIVE'\nexport const SET_SUBSCRIPTION = 'SET_SUBSCRIPTION'\nexport const AD_SLOT_REGISTERED = 'AD_SLOT_REGISTERED'\nexport const PREFETCH = 'PREFETCH'\n\nexport const hideMenu = () => ({ type: HIDE_MENU, payload: false })\nexport const showMenu = () => ({ type: SHOW_MENU, payload: true })\nexport const toggleMenu = () => ({ type: TOGGLE_MENU })\n\nexport const hideSearch = () => ({ type: HIDE_SEARCH, payload: false })\nexport const showSearch = () => ({ type: SHOW_SEARCH, payload: true })\nexport const toggleSearch = () => ({ type: TOGGLE_SEARCH })\n\nexport const adBlockDetected = (path) => ({ type: AD_BLOCKER, payload: path })\nexport const renderBlock = () => ({ type: RENDER_BLOCK })\nexport const adSlotRegistered = (slotId) => ({ type: AD_SLOT_REGISTERED, slotId })\n\nexport const updateConnectivity = (isConnected) => ({ type: UPDATE_CONNECTIVITY, payload: isConnected })\nexport const setSubscription = (subscription) => ({ type: SET_SUBSCRIPTION, payload: subscription })\n\nexport const experimentWin = (experiment, variant) => ({ type: EXPERIMENT_WIN, payload: experiment, variant })\nexport const pageView = (path, visitorId, sessionId) => ({ type: PAGE_VIEW, payload: path, visitorId, sessionId })\nexport const errorPageView = (path, visitorId, sessionId) => ({ type: ERROR_PAGE_VIEW, payload: path, visitorId, sessionId })\nexport const homePageView = (path, visitorId, sessionId, firstRender) => ({ type: HOME_PAGE_VIEW, payload: path, visitorId, sessionId, firstRender })\nexport const sectionPageView = (path, section, visitorId, sessionId, firstRender) => ({ type: SECTION_PAGE_VIEW, payload: { path, section }, visitorId, sessionId, firstRender })\nexport const staticPageView = (path, visitorId, sessionId, firstRender) => ({ type: STATIC_PAGE_VIEW, payload: path, visitorId, sessionId, firstRender })\nexport const isConnected = state => state.app.isConnected\n\nexport const setMostReadTab = (mostReadTab) => ({ type: SELECT_MOST_READ_TAB, payload: mostReadTab })\nexport const setWallPaperActive = (active) => ({ type: UPDATE_WALLPAPER_ACTIVE, payload: active })\n\nexport const Prefetch = () => ({ type: PREFETCH })\n\nfunction * prefetchSaga () {\n  const articles = yield select(getAllArticles)\n  for (const section in articles) {\n    yield put({ type: FETCH_ARTICLES_SUCCESS, payload: articles[section], section })\n  }\n}\n\nexport function * watchPrecache () {\n  yield takeEvery(PREFETCH, prefetchSaga)\n}\n\nfunction * transitionTo (path) {\n  // When navigating to a new location, destroy all the current slots\n  clearSlots()\n\n  // Find an element in the DOM with the ID of GenecyDFPAdWallpaperCont and delete it if it exists\n  // Run this only while we're on a browser\n  if (typeof window !== 'undefined') {\n    const wallpaperCont = document.getElementById('GenecyDFPAdWallpaperCont')\n    if (wallpaperCont) {\n      wallpaperCont.parentNode.removeChild(wallpaperCont)\n    }\n  }\n\n  yield put({ type: UPDATE_WALLPAPER_ACTIVE, payload: false })\n}\n\nfunction * hideMenuSaga () {\n  yield put({ type: HIDE_MENU, payload: false })\n}\n\nfunction * pingSaga () {\n  if (typeof window !== 'undefined') {\n    while (true) {\n      yield delay(5000)\n      // yield put({type: STATS_PING})\n      yield call(recordPingToStats)\n    }\n  }\n}\n\nfunction * showLastSlotRegistered ({ slotId }) {\n  // yield delay(2000) - seems to give stable results, but is very long\n  // Make it 100ms and YOLO\n  yield delay(100)\n  performSingleRequest(slotId)\n}\n\nfunction * recordPingToStats () {\n  const locationUrl = window.location.href\n  const referrerUrl = window.document.referrer\n  const scrollDepth = window.scrollY\n  const state = yield select()\n  yield call(ionPostAnalytics, 'ping', getPageType(), state.user.visitorId, process.env.RAZZLE_TITLE_KEY, state.user.sessionId, locationUrl, { referrerUrl, scrollDepth })\n}\n\nexport function * watchNavChanges () {\n  yield spawn(pingSaga)\n  yield takeLatest(PAGE_VIEW, transitionTo)\n  yield takeLatest(NAVIGATE_TO, hideMenuSaga)\n  yield takeLatest(AD_SLOT_REGISTERED, showLastSlotRegistered)\n  yield takeLatest(STATS_PING, recordPingToStats)\n}\n\nlet _pageType = 'default'\n\nexport function setPageType (pageType) {\n  _pageType = pageType\n}\n\nexport function getPageType () {\n  return _pageType\n}\n\nconst defaultState = {\n  showMenu: false,\n  showSearch: false,\n  isConnected: true,\n  adBlockerDetected: false,\n  renderBlock: false,\n  firstRender: true,\n  path: '',\n  mostReadTab: 0,\n  wallpaperActive: false\n}\n\nexport const Reducer = (state = defaultState, { type, payload, visitorId, sessionId }) => {\n  switch (type) {\n    case SET_SUBSCRIPTION:\n      return { ...state, ...{ subscription: (payload === false ? false : JSON.stringify(payload)) } }\n    case UPDATE_WALLPAPER_ACTIVE:\n      return { ...state, ...{ wallpaperActive: payload } }\n    case UPDATE_CONNECTIVITY:\n      return { ...state, ...{ isConnected: payload } }\n    case EXPERIMENT_WIN:\n      return { ...state, ...{ experiment: payload.experiment, variant: payload.variant } }\n    case PAGE_VIEW:\n      return { ...state, ...{ path: payload, visitorId, sessionId } }\n    case HIDE_SEARCH:\n    case SHOW_SEARCH:\n      return { ...state, ...{ showSearch: payload } }\n    case TOGGLE_SEARCH:\n      return { ...state, ...{ showSearch: !state.showSearch } }\n    case RESET_FIRST_RENDER:\n      return { ...state, ...{ firstRender: false } }\n    case SHOW_MENU:\n    case HIDE_MENU:\n      return { ...state, ...{ showMenu: payload } }\n    case TOGGLE_MENU:\n      return { ...state, ...{ showMenu: !state.showMenu } }\n    case SELECT_MOST_READ_TAB:\n      return { ...state, ...{ mostReadTab: payload } }\n    case AD_BLOCKER:\n      return { ...state, ...{ adBlockerDetected: true, path: payload } }\n    case RENDER_BLOCK:\n      return { ...state, ...{ renderBlock: true } }\n    default:\n      return state\n  }\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _axios = require('axios');\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar IONAnalytics = function IONAnalytics(events) {\n  events.forEach(function (event) {\n    switch (event.event) {\n      case 'ArticlePageview':\n        try {\n          var host = event.host.split('//')[1].split(':')[0];\n          createUrlAndSend([host, 'a', event.contentKey, event.section], event.visitorId);\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      default:\n        break;\n    }\n  });\n};\n\nfunction createUrlAndSend(parts, visitorId) {\n  var customVisitorId = visitorId || Math.random().toString(36).substr(2, 9);\n  var duration = Date.now();\n  var timeNow = new Date().getTime();\n  var url = 'https://ai.iol.io/aa/' + parts.join('/');\n\n  if (typeof window !== 'undefined') {\n    url += '?w=' + window.outerWidth + '&h=' + window.outerHeight + '&u=' + customVisitorId + '&t=' + duration + '&ts=' + timeNow;\n  } else {\n    url += '?w=0&h=0&u=' + customVisitorId + '&t=' + duration + '&ts=' + timeNow;\n  }\n  _axios2.default.get(url).catch(function (error) {\n    console.warn('IONAnalytics: Error ' + (error && error.status) + ' accessing', url);\n  });\n}\nexports.default = IONAnalytics;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"NavLink\", {\n  enumerable: true,\n  get: function () {\n    return _NavLink.default;\n  }\n});\nObject.defineProperty(exports, \"updateNavPath\", {\n  enumerable: true,\n  get: function () {\n    return _navPath.updateNavPath;\n  }\n});\nObject.defineProperty(exports, \"SET_NAVPATH\", {\n  enumerable: true,\n  get: function () {\n    return _navPath.SET_NAVPATH;\n  }\n});\nObject.defineProperty(exports, \"NAVIGATE_TO\", {\n  enumerable: true,\n  get: function () {\n    return _navPath.NAVIGATE_TO;\n  }\n});\nObject.defineProperty(exports, \"Reducer\", {\n  enumerable: true,\n  get: function () {\n    return _navPath.Reducer;\n  }\n});\nexports.default = exports.NavChevron = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _redux = require(\"redux\");\n\nvar _NavLink = _interopRequireDefault(require(\"./NavLink\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _navPath = require(\"./navPath\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nclass NavChevron extends _react.Component {\n  constructor() {\n    super();\n    this.handleClick = this.handleClick.bind(this);\n    this.handleNavClick = this.handleNavClick.bind(this);\n  }\n\n  handleNavClick() {\n    this.props.updateNavPath('/');\n  }\n\n  handleClick() {\n    if (this.props.navPath.startsWith(this.props.navid)) {\n      this.props.updateNavPath(this.props.navid.substr(0, this.props.navid.lastIndexOf('/')));\n    } else {\n      this.props.updateNavPath(this.props.navid);\n    }\n  }\n\n  render() {\n    let showMe = this.props.navPath.startsWith(this.props.navid);\n    return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_NavLink.default, {\n      to: this.props.navid,\n      \"aria-haspopup\": \"true\"\n    }, this.props.caption), /*#__PURE__*/_react.default.createElement(\"span\", {\n      className: showMe ? 'expanded' : '',\n      onClick: this.handleClick\n    }), /*#__PURE__*/_react.default.createElement(\"ul\", {\n      className: showMe ? 'expanded' : '',\n      \"aria-hidden\": \"true\",\n      \"aria-label\": \"submenu\"\n    }, this.props.children));\n  }\n\n}\n\nexports.NavChevron = NavChevron;\n\nconst mapStateToProps = state => state.navPath;\n\nconst mapDispatchToProps = dispatch => (0, _redux.bindActionCreators)({\n  updateNavPath: _navPath.updateNavPath\n}, dispatch);\n\nvar _default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(NavChevron); // navPath exports\n\n\nexports.default = _default;","module.exports = __webpack_public_path__ + \"static/media/sunrise.9caad566.svg\";","export const FORMATS = {\n  thirdParty: {\n    desktop: [[1, 2]],\n    tablet: [[1, 2]],\n    mobile: [[1, 2]]\n  },\n  leaderboard: {\n    desktop: [[728, 90], [970, 90], [970, 250]],\n    tablet: [[728, 90]],\n    mobile: [[300, 50], [320, 50]]\n  },\n  mobileLeaderboardSticky: {\n    desktop: [],\n    tablet: [],\n    mobile: [[300, 50], [320, 50], [300, 100], [320, 100]]\n  },\n  leaderboardtop: {\n    desktop: [[728, 90], [970, 90]],\n    tablet: [[728, 90]],\n    mobile: [[300, 50], [320, 50]]\n  },\n  inarticleLeaderboard: {\n    desktop: [[970, 250]],\n    tablet: [[970, 250]],\n    mobile: [[320, 50]]\n  },\n  mpu: {\n    desktop: [[300, 250]],\n    tablet: [[300, 250]],\n    mobile: [[300, 250], [336, 280]]\n  },\n  mpu600: {\n    desktop: [[300, 600]],\n    tablet: [[300, 600]],\n    mobile: [[300, 600]]\n  },\n  teads: {\n    desktop: [[3, 3], [300, 250]],\n    tablet: [[3, 3], [300, 250]],\n    mobile: [[3, 3], [300, 250], [336, 280]]\n  },\n  mpu600and250: {\n    desktop: [[300, 600]],\n    tablet: [[300, 600]],\n    mobile: [[300, 250]]\n  },\n  wingbanner: {\n    desktop: [[160, 600], [120, 600]],\n    tablet: [],\n    mobile: []\n  },\n  wallpaper: {\n    desktop: [[1, 1]],\n    tablet: [],\n    mobile: []\n  },\n  wallpaperTop: {\n    desktop: [[1220, 100]],\n    tablet: [],\n    mobile: []\n  },\n  wallpaperWing: {\n    desktop: [[200, 600]],\n    tablet: [],\n    mobile: []\n  },\n  interstitial: {\n    desktop: [[970, 600], [300, 600], [336, 280], [300, 250]],\n    tablet: [[300, 600], [336, 280], [300, 250]],\n    mobile: [[300, 600], [336, 280], [300, 250]]\n  }\n}\n\nexport const MAPPINGS = {\n  'Third-Party': [\n    [[1400, 0], [1, 2]],\n    [[1200, 0], [1, 2]],\n    [[1000, 0], [1, 2]],\n    [[700, 0], [1, 2]],\n    [[500, 0], [1, 2]],\n    [[200, 0], [1, 2]],\n    [[0, 0], []]\n  ],\n  'Main-Leaderboard': [\n    [[1400, 0], [[1000, 250], [1000, 90], [970, 250], [970, 90], [728, 90], 'fluid']],\n    [[1200, 0], [[1000, 250], [1000, 90], [970, 250], [970, 90], [728, 90], 'fluid']],\n    [[1000, 0], [[1000, 250], [1000, 90], [970, 250], [970, 90], [728, 90], 'fluid']],\n    [[700, 0], [[728, 90], [468, 60], [320, 100], [320, 50], [300, 100], [300, 50], 'fluid']],\n    [[500, 0], [[468, 60], [320, 100], [320, 50], [300, 100], [300, 50], 'fluid']],\n    [[200, 0], [[320, 100], [320, 50], [300, 100], [300, 50], 'fluid']],\n    [[0, 0], []]\n  ],\n  Leaderboard: [\n    [[1400, 0], [[728, 90], [468, 60], [300, 250], [336, 280], 'fluid']],\n    [[1400, 0], [[728, 90], [468, 60], [300, 250], [336, 280], 'fluid']],\n    [[1000, 0], [[468, 60], [300, 250], [336, 280], [320, 50], [300, 100], [300, 50], 'fluid']],\n    [[700, 0], [[468, 60], [320, 100], [320, 50], [300, 100], [300, 50], [300, 250], [336, 280], [250, 250], 'fluid']],\n    [[500, 0], [[468, 60], [320, 100], [320, 50], [300, 100], [300, 50], [300, 250], [336, 280], [250, 250], 'fluid']],\n    [[200, 0], [[320, 100], [320, 50], [300, 100], [300, 50], [300, 250], [300, 600], [336, 280], [250, 250], 'fluid']],\n    [[0, 0], []]\n  ],\n  MPU: [\n    [[1400, 0], [[300, 600], [300, 250], [336, 280], [250, 250], [120, 600], [160, 600], 'fluid']],\n    [[1200, 0], [[300, 600], [300, 250], [336, 280], [250, 250], [120, 600], [160, 600], 'fluid']],\n    [[1000, 0], [[250, 250], [120, 600], [160, 600], 'fluid']],\n    [[700, 0], []],\n    [[500, 0], []],\n    [[200, 0], []],\n    [[0, 0], []]\n  ],\n  Gutter: [\n    [[1990, 0], [[300, 600], [300, 250], [336, 280], [250, 250], [120, 600], [160, 600], 'fluid']],\n    [[1690, 0], [[120, 600], [160, 600], 'fluid']],\n    [[1000, 0], []],\n    [[700, 0], []],\n    [[500, 0], []],\n    [[200, 0], []],\n    [[0, 0], []]\n  ],\n  Mapping6: [\n    [[1400, 0], [[300, 250], [336, 280], [250, 250], 'fluid']],\n    [[1200, 0], [[300, 250], [336, 280], [250, 250], 'fluid']],\n    [[1000, 0], [[250, 250], 'fluid']],\n    [[700, 0], []],\n    [[500, 0], []],\n    [[200, 0], []],\n    [[0, 0], []]\n  ],\n  Interstitial: [\n    [[1400, 0], [[970, 600], [300, 600], [336, 280], [300, 250]]],\n    [[1200, 0], [[970, 600], [300, 600], [336, 280], [300, 250]]],\n    [[1000, 0], [[970, 600], [300, 600], [336, 280], [300, 250]]],\n    [[700, 0], [[300, 600], [336, 280], [300, 250]]],\n    [[500, 0], [[300, 600], [336, 280], [300, 250]]],\n    [[200, 0], [[300, 600], [336, 280], [300, 250]]],\n    [[0, 0], [[300, 600], [336, 280], [300, 250]]]\n  ]\n}\n\nexport default FORMATS\n","module.exports = __webpack_public_path__ + \"static/media/arrow-up.28de7228.svg\";","module.exports = __webpack_public_path__ + \"static/media/iol-logo.30fc4d23.svg\";","module.exports = __webpack_public_path__ + \"static/media/share.89232cea.svg\";","module.exports = __webpack_public_path__ + \"static/media/notifications-ico.c9e00972.svg\";","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _cache = require('./cache');\n\nvar _cache2 = _interopRequireDefault(_cache);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Basic Caching implementation. \n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * This implementation will be used for client environments\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */\n\n\nvar MemoryCache = function (_Cache) {\n  _inherits(MemoryCache, _Cache);\n\n  function MemoryCache(options) {\n    _classCallCheck(this, MemoryCache);\n\n    var _this = _possibleConstructorReturn(this, (MemoryCache.__proto__ || Object.getPrototypeOf(MemoryCache)).call(this, options));\n\n    _this._store = {};\n    return _this;\n  }\n  //Setting a value in the cache\n\n\n  _createClass(MemoryCache, [{\n    key: 'set',\n    value: async function set(key, value, ttl) {\n      if (!ttl) {\n        ttl = this._ttl;\n      }\n      this._store[key] = { value: value, expires: new Date().getTime() + ttl };\n      this.clean();\n      return Promise.resolve(value);\n    }\n    //Cycles through all keys and removes expired items\n\n  }, {\n    key: 'clean',\n    value: async function clean() {\n      var _this2 = this;\n\n      var now = new Date().getTime();\n      var promises = Object.keys(this._store).map(function (key) {\n        if (now > _this2._store[key].expires) {\n          return _this2.delete(key);\n        }\n      });\n      return Promise.resolve(promises);\n    }\n    //Delete a key from the cache\n\n  }, {\n    key: 'delete',\n    value: async function _delete(key) {\n      delete this._store[key];\n      return Promise.resolve(true);\n    }\n    //Setting a value in the cache\n\n  }, {\n    key: 'get',\n    value: async function get(key) {\n      this.clean();\n      var value = this._store[key];\n      if (value) {\n        return Promise.resolve(value.value);\n      }\n      // this.delete(key)\n      return Promise.resolve(false);\n    }\n  }]);\n\n  return MemoryCache;\n}(_cache2.default);\n\nexports.default = MemoryCache;","import styled, {th} from '@xstyled/styled-components'\n\n// No underline, on hover, underline sweeps in\nexport const SweepIn = styled.span`\n  position: relative;\n  white-space: nowrap;\n  ::before {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    height: 2px;\n    background-color: ${props => th.color(props.hoverBGColor)};\n    transform-origin: bottom right;\n    transform: scaleX(0);\n    transition: transform 0.5s ease;\n  }\n  &:hover{\n    color: ${props => th.color(props.hoverColor)};\n    &::before {\n      transform-origin: bottom left;\n      transform: scaleX(1);\n    }\n  }\n`\n// Underline, on hover, underline sweeps out\nexport const SweepOut = styled.span`\n  position: relative;\n  white-space: nowrap;\n  ::before {\n    content: '';\n    position: absolute;\n    bottom: -1px;\n    left: 0;\n    right: 0;\n    height: 2px;\n    background-color: ${props => th.color(props.hoverBGColor)};\n    transform-origin: bottom left;\n    transform: scaleX(1);\n    transition: transform 0.3s ease-in-out;\n  }\n  &:hover {\n    color: ${props => th.color(props.hoverColor)};\n    &::before {\n      transform-origin: bottom right;\n      transform: scaleX(0);\n    }\n  }\n`\n\nconst cssfxUnderline = {\n  SweepIn,\n  SweepOut\n}\n\nexport default cssfxUnderline\n","module.exports = __webpack_public_path__ + \"static/media/facebook.87210d65.svg\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Basic Caching implementation. \n * This implementation will be used for server environments\n */\n\nvar Cache = function () {\n  function Cache(options) {\n    _classCallCheck(this, Cache);\n\n    this._ttl = 5 * 60000; // Defaults to 5 minutes\n    if (options) {\n      if (options.ttl) {\n        this.ttl = options.ttl;\n      }\n    }\n  }\n  //Setting a value in the cache\n\n\n  _createClass(Cache, [{\n    key: \"set\",\n    value: async function set(key, value, ttl) {\n      return Promise.resolve(value);\n    }\n    //Delete a key from the cache\n\n  }, {\n    key: \"delete\",\n    value: async function _delete(key) {\n      return true;\n    }\n    //Setting a value in the cache\n\n  }, {\n    key: \"get\",\n    value: async function get(key) {\n      return false;\n    }\n  }]);\n\n  return Cache;\n}();\n\nexports.default = Cache;","module.exports = __webpack_public_path__ + \"static/media/bookmarked-ico.4f99fb37.svg\";","module.exports = __webpack_public_path__ + \"static/media/windy.b661d82f.svg\";","import { defaultTheme, rpxTransformers } from '@xstyled/styled-components'\n\nconst colors = {\n  ...defaultTheme.colors,\n  white: '#FFFFFF',\n  whiteAlpha: 'rgba(255, 255, 255, .3)',\n  grey: '#434343',\n  mdGrey: '#707070',\n  ltGrey: '#F0F0F0',\n  vltGrey: '#F5F5F5',\n  red: '#B41400',\n  redAlpha: 'rgba(180, 20, 0, 0.1)',\n  redPuzzles: '#F7BABE',\n  blue: '#2F80ED',\n  blueAlpha: 'rgba(47, 128, 237, 0.2)',\n  ltBlue: '#82B4F8',\n  divider: '#D4D4D4',\n  meta: '#A7A7A7',\n  advert: '#F3F3F3',\n  advertText: '#999999',\n  tab: '#828282',\n  menuBot: '#F7F7F7',\n  indyPlusAdBord: '#58A4C8',\n  indyPlusAdBG: '#E1E9EE',\n  orange: '#ED5C35',\n  orangeAlpha: 'rgba(237, 92, 53, 0.1)',\n  black: '#000000'\n}\n\nconst fontWeights = {\n  regular: '400',\n  medium: '500',\n  semiBold: '600',\n  bold: '700'\n}\n\nexport const theme = {\n  ...defaultTheme,\n  transformers: {\n    ...rpxTransformers\n  },\n  states: {\n    ...defaultTheme.states,\n    lastType: '&:last-of-type',\n    after: '&::after'\n  },\n  fontWeights,\n  colors,\n  space: {\n    px: '1px',\n    5: `${5 / 16}rem`,\n    6: `${6 / 16}rem`,\n    8: `${8 / 16}rem`,\n    10: `${10 / 16}rem`,\n    15: `${15 / 16}rem`,\n    20: `${20 / 16}rem`,\n    30: `${30 / 16}rem`,\n    50: `${50 / 16}rem`,\n    80: `${80 / 16}rem`\n  },\n  screens: {\n    ...defaultTheme.screens,\n    sm: 0,\n    wAdM: 0,\n    tablet: 640,\n    md: 1023,\n    lg: 1024,\n    xl: 1220,\n    wAdD: 1316,\n    article: 1500\n  },\n  texts: {\n    h1: {\n      fontSize: {\n        lg: `${28 / 16}rem`,\n        sm: `${26 / 16}rem`\n      }\n    },\n    h2: {\n      fontSize: {\n        lg: `${28 / 16}rem`,\n        sm: `${26 / 16}rem`\n      }\n    },\n    h3: {\n      fontSize: `${26 / 16}rem`\n    },\n    h4: {\n      fontSize: `${22 / 16}rem`\n    },\n    h5: {\n      fontSize: `${19 / 16}rem`\n    },\n    h6: {\n      fontSize: `${16 / 16}rem`\n    },\n    xxlarge: {\n      fontSize: `${34 / 16}rem`\n    },\n    xlarge: {\n      fontSize: `${20 / 16}rem`\n    },\n    large: {\n      fontSize: `${17 / 16}rem`\n    },\n    medium: {\n      fontSize: `${16 / 16}rem`\n    },\n    small: {\n      fontSize: `${14 / 16}rem`\n    },\n    xsmall: {\n      fontSize: `${12 / 16}rem`\n    },\n    xxsmall: {\n      fontSize: `${10 / 16}rem`\n    },\n    xxxsmall: {\n      fontSize: `${8 / 16}rem`\n    },\n    meta: {\n      fontSize: `${12 / 16}rem`,\n      color: colors.meta\n    },\n    advert: {\n      fontSize: `${10 / 16}rem`,\n      color: colors.advertText\n    },\n    button: {\n      fontSize: `${14 / 16}rem`\n    },\n    dropdown: {\n      fontSize: `${14 / 16}rem`,\n      fontWeight: fontWeights.semiBold\n    },\n    'menu-head': {\n      fontSize: `${64 / 16}rem`,\n      color: 'rgba(67, 67, 67, 0.15)',\n      fontWeight: fontWeights.semiBold,\n      lineHeight: 0.6\n    },\n    'menu-sub-head': {\n      fontSize: `${14 / 16}rem`,\n      fontWeight: fontWeights.semiBold,\n      textTransform: 'uppercase'\n    },\n    breadcrumb: {\n      fontSize: `${12 / 16}rem`,\n      textTransform: 'uppercase',\n      color: {\n        _: colors.orange,\n        hover: colors.orange\n      }\n    },\n    footerH6: {\n      fontSize: `${14 / 16}rem`,\n      color: 'white',\n      fontWeight: fontWeights.semiBold,\n      textTransform: 'uppercase',\n      fontFamily: '\"Work Sans\", sans-serif'\n    },\n    'footer-lnk': {\n      fontSize: `${14 / 16}rem`,\n      color: {\n        _: colors.white,\n        hover: colors.ltBlue\n      }\n    },\n    'commercial-nav': {\n      fontSize: `${12 / 16}rem`,\n      textTransform: 'uppercase',\n      color: colors.white,\n      opacity: {\n        _: 1,\n        hover: 0.8\n      }\n    },\n    'brand-badge': {\n      fontSize: `${12 / 16}rem`,\n      color: colors.blue,\n      textTransform: 'uppercase'\n    },\n    tag: {\n      fontSize: `${14 / 16}rem`,\n      textTransform: 'uppercase',\n      textDecordation: 'none',\n      color: {\n        _: colors.grey,\n        hover: colors.blue\n      },\n      backgroundColor: {\n        _: '#F2F2F2',\n        hover: '#F2F2F2',\n        before: '#F2F2F2'\n      }\n    },\n    trendLink: {\n      fontSize: `${14 / 16}rem`,\n      textTransform: 'uppercase',\n      color: {\n        _: colors.grey,\n        hover: colors.red\n      }\n    },\n    trendLinkDarMode: {\n      fontSize: `${14 / 16}rem`,\n      textTransform: 'uppercase',\n      color: {\n        _: colors.white,\n        hover: colors.red\n      }\n    },\n    trendBadge: {\n      fontSize: `${12 / 16}rem`,\n      textTransform: 'uppercase',\n      color: colors.orange\n    },\n    opinionHeading: {\n      fontSize: {\n        lg: `${64 / 16}rem`,\n        sm: `${40 / 16}rem`\n      }\n    }\n  },\n  drawers: {\n    backdrop: {\n      backgroundColor: 'rgba(0, 0, 0, 0.55)',\n      zIndex: 999\n    },\n    default: {\n      backgroundColor: colors.white,\n      zIndex: 999\n    },\n    content: {\n      backgroundColor: colors.white,\n      padding: 15\n    }\n  },\n  popovers: {\n    content: {\n      //\n    },\n    default: {\n      backgroundColor: colors.white,\n      zOrder: 10\n    },\n    title: {\n      //\n    }\n  },\n  popups: {\n    closeButton: {\n      position: 'absolute',\n      cursor: 'pointer',\n      top: '5px',\n      right: '5px'\n    },\n    default: {\n      backgroundColor: colors.ltGrey,\n      zIndex: 999\n    },\n    sizes: {\n      horizontal: {\n        sm: {\n          minWidth: 300,\n          maxWidth: 400\n        },\n        md: {\n          width: 375\n        },\n        lg: {\n          width: 375\n        }\n      },\n      vertical: {\n        sm: {\n          height: 400\n        },\n        md: {\n          height: 550\n        },\n        lg: {\n          height: 680\n        }\n      }\n    }\n  },\n  carousels: {\n    navigation: {\n      bullet: {\n        active: {\n          backgroundColor: colors.ltGrey\n        },\n        default: {\n          opacity: '.2'\n        }\n      }\n    }\n  },\n  tabs: {\n    buttons: {\n      selected: {\n        fontSize: `${14 / 16}rem`,\n        fontFamily: '\"PT Serif\", serif',\n        backgroundColor: colors.white,\n        color: colors.grey,\n        padding: '8px 10px',\n        textTransform: 'uppercase'\n      },\n      normal: {\n        fontSize: `${14 / 16}rem`,\n        fontFamily: '\"PT Serif\", serif',\n        backgroundColor: colors.ltGrey,\n        color: colors.tab,\n        padding: '8px 10px',\n        textTransform: 'uppercase'\n      },\n      hover: {\n        color: colors.grey\n      }\n    }\n  },\n  accordions: {\n    padding: `${10 / 16}rem`,\n    wrapper: {\n      backgroundColor: 'white',\n      border: 'none'\n    },\n    content: {\n      fontSize: `${14 / 16}rem`\n    },\n    title: {\n      padding: '10px 15px',\n      color: colors.grey,\n      fontSize: `${17 / 16}rem`,\n      fontWeight: fontWeights.semiBold,\n      fontFamily: '\"Work Sans\", sans-serif',\n      borderRadius: '3px',\n      alignItems: 'center',\n      justifyContent: 'space-between',\n      marginBottom: '5px',\n      backgroundColor: colors.vltGrey\n    }\n  },\n  imageWidths: {\n    hero: 560,\n    featured: 800,\n    primary: 240,\n    slider: 275,\n    normal: 100\n  }\n}\n\nexport default theme\n","import postAnalytics from 'ion-util'\n\nexport default function ionPostAnalytics (eventType, pageType, userId, titleKey, sessionId, locationUrl, eventData) {\n  if (process.env.RAZZLE_ENABLE_ION_ANALYTICS) {\n    return postAnalytics(eventType, pageType, userId, titleKey, sessionId, locationUrl, eventData)\n  }\n}\n","module.exports = __webpack_public_path__ + \"static/media/rain.bf94d853.svg\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.formatHtml = formatHtml;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar removeParas = [];\nvar embeddedLinkStyleMatch = /(<a href=|<a [^\\s]* href=)/;\nvar embeddedWholeLinkStyleMatch = /^(<a href=|<a [^\\s]* href=).*<\\/a>$/;\nvar inlineStyleRemove = /\\s+style=\"[^\"]*\"/g;\nvar embeddedIolLinkStyleMatch = /a href=\"https?:\\/\\/([a-z]+\\.iol\\.co\\.za|iol\\.co\\.za)/i;\nvar embeddedNewslettersLinkStyleMatch = /a href=\"https?:\\/\\/(www\\.iolnewsletters|iolnewsletters|[^\\/]*iol\\.co\\.za\\/newsletters)/i;\nvar embeddedFacebookLinkStyleMatch = /a href=\"https?:\\/\\/(www\\.facebook\\.com|facebook\\.com)\\//i;\nvar embeddedTwitterLinkStyleMatch = /a href=\"https?:\\/\\/(www\\.twitter\\.com|twitter\\.com)\\//i;\nvar embeddedLinkedInLinkStyleMatch = /a href=\"https?:\\/\\/(linkedin\\.com|www\\.linkedin\\.com|za\\.linkedin\\.com)\\/in\\//i;\nvar sourceParaRegex = /^(FemaleFirst|AFP|DPA|Daily Mail|Daily Voice|REUTERS|BLOOMBERG|(The )?Washington Post|The Independent)$/i;\nvar newspaperLabels = {};\n\nfunction formatHtml(paragraphs) {\n  var truncated = false;\n\n  if (paragraphs.length) {\n    if (paragraphs[paragraphs.length - 1] === '<hr>') {\n      paragraphs = paragraphs.slice(0, paragraphs.length - 1);\n    }\n  }\n\n  var reversedParagraphs = paragraphs.slice(0).reverse();\n  var sourceIndex;\n  reversedParagraphs.find(function (para, reverseIndex) {\n    var index = paragraphs.length - 1 - reverseIndex;\n\n    if (sourceParaRegex.test(para)) {\n      sourceIndex = index;\n      return true;\n    } else {\n      return false;\n    }\n  });\n  var info = true;\n  var afpIndex;\n  reversedParagraphs.forEach(function (paragraph, reverseIndex) {\n    var index = paragraphs.length - 1 - reverseIndex;\n\n    if (info) {\n      if (/^\\s*[A-Z]/.test(paragraph)) {\n        info = false;\n      }\n    } else if (/^\\s*\\* /.test(paragraph)) {\n      if (paragraphs.length > 15 && reverseIndex > 5) {\n        paragraphs[index] = paragraph.replace(/^\\s*\\*\\s+/, '&bull; ');\n      }\n    } else if (/^\\s*\\*[A-Z]/.test(paragraph)) {\n      if (paragraphs.length > 15 && reverseIndex > 5) {\n        paragraphs[index] = paragraph.replace(/^\\s*\\*/, '&bull; ');\n      }\n    }\n\n    if (/ (-|–|&#x2013;) AFP$/.test(paragraph)) {\n      paragraphs[index] = paragraph.replace(/ (-|–|&#x2013;) AFP$/, '');\n      afpIndex = index;\n    }\n  });\n\n  if (afpIndex) {\n    paragraphs.splice(afpIndex + 1, 0, 'AFP');\n  }\n\n  return paragraphs.map(function (paragraph) {\n    return new HtmlParagraphFormatter(paragraph);\n  }).filter(function (formatter) {\n    return formatter.filter();\n  }).map(function (formatter) {\n    try {\n      var html = formatter.format();\n\n      if (!html) {\n        if (formatter.paragraph) {\n          html = '<p>' + formatter.paragraph + '</p>';\n        }\n      }\n\n      return html;\n    } catch (err) {\n      return '<p>' + formatter.paragraph + '</p>';\n    }\n  }).value().join('\\n');\n}\n\nfunction getNewspaperSectionId(label) {\n  if (/^([A-Za-z]*\\s)?Independent on Saturday$/i.test(label)) {\n    return 'ios';\n  } else if (/^[A-Z]?IOS$/i.test(label)) {\n    return 'ios';\n  } else if (/^Saturday Argus$/i.test(label)) {\n    return 'weekend-argus';\n  } else if (/^(The )?Star Motoring$/i.test(label)) {\n    return 'the-star/motoring';\n  }\n\n  var section = newspaperLabels[label.toLowerCase()];\n\n  if (section) {\n    return section.category;\n  }\n}\n\nvar HtmlParagraphFormatter = /*#__PURE__*/function () {\n  function HtmlParagraphFormatter(paragraph) {\n    _classCallCheck(this, HtmlParagraphFormatter);\n\n    this.para = paragraph;\n    this.para = this.para.trim();\n    this.para = this.para.replace(/(\\*+)([A-Z])/, '$1 $2');\n    this.text = this.para.replace(/(<([^>]+)>)/ig, '').trim();\n  }\n\n  _createClass(HtmlParagraphFormatter, [{\n    key: \"filter\",\n    value: function filter() {\n      if (/^<iframe.+youtu/.test(this.para)) {\n        return true;\n      } else if (removeParas.includes(this.text)) {\n        return false;\n      } else if (embeddedNewslettersLinkStyleMatch.test(this.para)) {\n        // mini\n        return true;\n      } else if (/getElement|CDATA/.test(this.para)) {\n        return false;\n      } else if (/^</.test(this.para)) {\n        return true;\n      } else if (/^&#xA0;$/.test(this.text)) {\n        return false;\n      } else if (this.text.length >= 1 && this.text.length <= 2) {\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: \"format\",\n    value: function format() {\n      this.para = this.para.replace(/-1\\.([0-9]+[0-9]{4})/g, '-$1'); // remove all legacy classic URLs e.g. 1.1234567\n\n      this.para = this.para.replace(/http:\\/\\/www.iol.co.za/, 'https://www.iol.co.za');\n      this.para = this.para.replace(/http:\\/\\/www.iol.co.za\\/outgoing.php3\\?URL_to\\=/g, ''); // strip unwanted outgoing.php links\n\n      this.para = this.para.replace(/\\/outgoing.php3\\?URL_to\\=/g, ''); // strip unwanted outgoing.php links\n\n      this.para = this.para.replace(/outgoing.php3\\?URL_to\\=/g, ''); // strip unwanted outgoing.php links\n\n      this.para = this.para.replace(/httphttp/g, 'http'); // strip erroneous double http links\n\n      this.para = this.para.replace(/\\\"\\/\\/classic\\.iol\\.co\\.za\\/newsletters(.*?)\\\">/, '\"//www.iol.co.za/newsletters\">');\n\n      if (this.para.includes('<iframe')) {\n        this.para = this.para.replace('<iframe', '<div class=\"iframeWrapper\"><iframe');\n        this.para = this.para.replace('</iframe>', '</iframe></div>');\n      }\n\n      if (embeddedLinkStyleMatch.test(this.para)) {\n        this.formatEmbeddedLink();\n      } else {\n        this.formatPlain();\n      }\n\n      var svgI = this.formatSVG();\n\n      if (this.style) {\n        var _svgI = this.formatSVG();\n\n        return \"<p class=\\\"link link-\".concat(this.style, \"\\\">\").concat(_svgI + ' ' + this.para, \"</p>\");\n      } else {\n        return this.para;\n      }\n    }\n  }, {\n    key: \"formatSVG\",\n    value: function formatSVG() {\n      switch (this.style) {\n        case 'email':\n          return '<svg class=\"iconSvgEmail\" viewBox=\"0 0 1792 1792\"><path d=\"M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z\" /></svg>';\n\n        case 'newsletters':\n          return \"<svg class='iconSvgEmail' viewBox='0 0 1792 1792'><path d='M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z'/></svg>\";\n\n        case 'newswire':\n          return \"<svg class='iconSvgNewswire' viewBox='0 0 1000 1000'><path d='M864.9,741.2v-192c0-29.3-23.8-53.1-53.1-53.1s-53,23.7-53,53.1v114.4h-26.1V549.2c0-29.3-23.7-53.1-53-53.1c-29.2,0-53,23.7-53,53.1v114.4h-26V549.2c0-13.8-5.3-26.4-14-35.9c66.6-51.3,109.6-131.9,109.6-222.5C696.4,135.7,570.7,10,415.6,10c-155.1,0-280.8,125.7-280.8,280.8c0,136.9,98,251,227.8,275.7v182.1c0,2.1,0.4,4,0.6,5.9v122.4c0,62.4,37.2,113.1,83.1,113.1h335.8c45.8,0,83-50.6,83-113.1V749C865.1,746.4,864.9,743.7,864.9,741.2z M161.3,290.8c0-140.3,114.1-254.3,254.3-254.3C555.8,36.4,670,150.5,670,290.8c0,85.5-42.4,161.3-107.4,207.5c-4.7-1.4-9.7-2.1-14.8-2.1c-23.2,0-42.7,14.8-50,35.4c-9.5,3.2-19.2,5.9-29.1,8v-118c51.6-21,88-71.6,88-130.8c0-77.9-63.1-141.1-141.1-141.1s-141.1,63.1-141.1,141.1c0,59.2,36.5,109.9,88.1,130.8v118C247.7,515.1,161.3,412.8,161.3,290.8z M415.7,253.8c-29.3,0-53.1,23.8-53.1,53.1v85.5c-36.6-19.2-61.7-57.6-61.7-101.7c0-63.3,51.5-114.7,114.7-114.7c63.2,0,114.6,51.4,114.6,114.7c0,44.1-25,82.5-61.5,101.6v-85.5C468.7,277.6,444.9,253.8,415.7,253.8z M468.7,663.6v-97.1c8.8-1.7,17.5-3.8,26.1-6.3v103.4H468.7z'></path></svg>\";\n\n        case 'newspaper':\n          return \"<svg class='iconSvgNewspaper' viewBox='0 0 1792 1792'><path d='M896 512h-384v384h384v-384zm128 640v128h-640v-128h640zm0-768v640h-640v-640h640zm640 768v128h-512v-128h512zm0-256v128h-512v-128h512zm0-256v128h-512v-128h512zm0-256v128h-512v-128h512zm-1536 960v-960h-128v960q0 26 19 45t45 19 45-19 19-45zm1664 0v-1088h-1536v1088q0 33-11 64h1483q26 0 45-19t19-45zm128-1216v1216q0 80-56 136t-136 56h-1664q-80 0-136-56t-56-136v-1088h256v-128h20z'/></svg>\";\n\n        case 'facebook':\n          return \"<svg class='iconSvgFacebook-f' viewBox='0 0 1792 1792'><path d='M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z'/></svg>\";\n\n        case 'twitter':\n          return \"<svg class='iconSvgTwitter' viewBox='0 0 1792 1792'><path d='M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z'/></svg>\";\n\n        case 'linkedIn':\n          return \"<svg class='iconSvgLinkedin' viewBox='0 0 1792 1792'><path d='M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z'/></svg>\";\n\n        case 'forum':\n          return \"<svg class='iconSvgForum' viewBox='0 0 1792 1792'><path d='M935.6,872.7c0,43.5,22.1,81.3,54.4,99.7v15.3c-9,1.4-18.3,2.1-27.6,2.1c-57.9,0-110-27.3-146.9-71.1c-22.3,6.7-45.9,10.3-70.4,10.3c-135.3,0-245-109.7-245-245c0-135.3,109.7-245,245-245s245,109.7,245,245c0,53-16.8,102-45.4,142.1C938.8,840.2,935.6,856,935.6,872.7L935.6,872.7z M206.2,221.9c-56.3,51.5-87.3,117.7-87.3,186.4c0,38.6,9.5,76,28.3,111.2c19.4,36.3,48.5,69.5,84.2,95.9c25.8,19.1,43.2,49.7,47.8,84.1c1.5,11.5,2.5,23,2.9,34.6c6.4-5.9,12.5-12.3,18.6-19.1c20.6-23.1,48.3-35.9,77-35.9c4.6,0,9.2,0.3,13.7,1c17.8,2.5,36,3.8,54.1,3.8v122.5c-23.1,0-45.7-1.7-67.8-4.8C284.1,906.9,172.4,925.8,64.4,928.6v-25.8c58.3-32.1,108.9-90.7,108.9-157.6c0-9.3-0.6-18.5-1.8-27.5C73,644.8,10,533.3,10,408.4C10,188.5,205,10.2,445.6,10.2c236.9,0,429.6,172.8,435.4,388.1c-35-17.5-73-28.2-112.5-31.2c-9.8-53.7-38.6-104.1-83.6-145.2c-30.1-27.5-65.4-49.2-105.2-64.5c-42.3-16.3-87.4-24.6-134.2-24.6c-46.7,0-91.9,8.3-134.2,24.6C271.7,172.7,236.3,194.4,206.2,221.9L206.2,221.9z'></path></svg>\";\n\n        case 'default':\n          return \"<svg class='iconSvgLink' viewBox='0 0 1792 1792'><path d='M922.4,81.4l-3.9-3.9C828.5-12.5,681-12.5,591,77.6L382.2,286.3c-90.1,90.1-90.1,237.5,0,327.6l3.9,3.9c7.5,7.5,15.5,14.3,23.7,20.5l76.4-76.4c-8.9-5.3-17.3-11.6-25-19.2l-3.9-3.9c-48.9-48.9-48.9-128.5,0-177.4l208.8-208.7c48.9-48.9,128.5-48.9,177.4,0l3.9,3.9c48.9,48.9,48.9,128.5,0,177.4l-94.4,94.4c16.4,40.5,24.2,83.6,23.5,126.7l146-146C1012.5,319,1012.5,171.5,922.4,81.4L922.4,81.4z M613.9,382.2c-7.5-7.5-15.5-14.3-23.7-20.5l-76.4,76.4c8.9,5.3,17.3,11.6,25,19.2l3.9,3.9c48.9,48.9,48.9,128.5,0,177.4L333.9,847.4c-48.9,48.9-128.5,48.9-177.4,0l-3.9-3.9c-48.9-48.9-48.9-128.5,0-177.4l94.4-94.4c-16.4-40.5-24.2-83.6-23.5-126.7l-146,146c-90.1,90.1-90.1,237.5,0,327.6l3.9,3.9c90.1,90.1,237.5,90.1,327.6,0l208.7-208.7c90.1-90.1,90.1-237.5,0-327.6L613.9,382.2L613.9,382.2z'></path></svg>\";\n\n        case 'instagram':\n          return \"<svg class='iconSvgInstagram' viewBox='0 0 1792 1792'><path d='M879,838.2V424.7h-86.2c8.5,26.8,12.7,54.6,12.7,83.5c0,53.6-13.6,103-40.8,148.3c-27.2,45.3-64.2,81.1-111,107.5c-46.8,26.3-97.8,39.5-153.1,39.5c-83.8,0-155.5-28.8-215-86.5c-59.6-57.7-89.3-127.3-89.3-209c0-28.9,4.2-56.8,12.7-83.5h-90V838c0,11.1,3.7,20.3,11.2,27.8c7.5,7.5,16.7,11.2,27.8,11.2h682.1c10.6,0,19.8-3.7,27.4-11.2c7.7-7.5,11.5-16.7,11.5-27.8V838.2z M697.8,498.1c0-52.8-19.2-97.7-57.7-134.9c-38.5-37.2-85-55.8-139.4-55.9c-54,0-100.3,18.6-138.8,55.9s-57.7,82.2-57.7,134.9c0,52.7,19.2,97.7,57.7,134.9c38.5,37.2,84.7,55.9,138.8,55.9c54.4,0,100.9-18.6,139.4-55.9C678.6,595.8,697.8,550.8,697.8,498.1z M879,268.4V163.1c0-11.9-4.2-22.2-12.7-31c-8.5-8.7-18.9-13.1-31.3-13.1H724c-12.4,0-22.8,4.4-31.3,13.1c-8.5,8.7-12.7,19-12.7,31v105.3c0,12.4,4.2,22.8,12.7,31.3c8.5,8.5,18.9,12.7,31.3,12.7h111c12.4,0,22.8-4.2,31.3-12.7C874.8,291.2,879,280.8,879,268.4z M990,135.7v728.6c0,34.5-12.3,64-37,88.7c-24.7,24.7-54.2,37-88.7,37H135.7c-34.5,0-64-12.3-88.7-37c-24.7-24.7-37-54.2-37-88.7V135.7c0-34.5,12.3-64,37-88.7c24.7-24.7,54.2-37,88.7-37h728.6c34.5,0,64,12.3,88.7,37C977.7,71.7,990,101.2,990,135.7z'></path></svg>\";\n\n        case 'info':\n          return \"<svg class='iconSvgInfo' viewBox='0 0 1792 1792'><path d='M500,10C229.4,10,10,229.4,10,500s219.4,490,490,490s490-219.4,490-490S770.6,10,500,10L500,10z M500,898.1c-219.9,0-398.1-178.2-398.1-398.1S280.1,101.9,500,101.9S898.1,280.1,898.1,500S719.9,898.1,500,898.1L500,898.1z M438.8,255h122.5v122.5H438.8V255z M622.5,745h-245v-61.3h61.3V500h-61.3v-61.3h183.8v245h61.3V745z'></path></svg>\";\n\n        case 'indy':\n          return '';\n\n        case 'bullet':\n          return '';\n\n        default:\n          return false;\n      }\n    }\n  }, {\n    key: \"formatEmbeddedLink\",\n    value: function formatEmbeddedLink() {\n      this.para = this.para.replace(/\\.\\.+/, '.');\n      this.para = this.para.replace(/<strong>\\s*([^<]*)\\s*<\\/strong>/ig, '$1');\n\n      if (inlineStyleRemove.test(this.para)) {\n        this.para = this.para.replace(inlineStyleRemove, '');\n        this.para = this.para.replace(/(<span>|<\\/span>)/gi, '');\n        this.para = this.para.trim();\n      }\n\n      this.para = this.para.replace(/\\/\\/sbeta\\.iol\\.co\\.za/g, '//www.iol.co.za');\n      this.para = this.para.replace(/\\/\\/www,iol\\.co\\.za/g, '//www.iol.co.za'); // erroneous comma e.g. see 1943061\n\n      this.para = this.para.replace(/^<span>(.*)<\\/span>$/ig, '$1');\n      this.para = this.para.replace(/href=\"((?!mailto:)\\S*\\@(\\S*))\">/ig, 'href=\"mailto:$1\">');\n      this.para = this.para.replace(/href=\"((?!mailto:) \\S*\\@(\\S*))\">/ig, 'href=\"mailto:$1\">');\n      this.para = this.para.replace(/<a href=\\\"(.*)\\/index.php(.*)\\\">/g, '<a>');\n      this.para = this.para.replace(/iol\\.co\\.za\\/business\\\"/g, 'iol.co.za/business-report\"');\n      this.para = this.para.replace(/iol\\.co\\.za\\/business\\//g, 'iol.co.za/business-report/');\n\n      if (/href=\"&#x201D;[^\"]+&#x201D;\"/.test(this.para)) {\n        this.para = this.para.replace(/href=\"&#x201D;([^\"]+)&#x201D;\"/, 'href=\"$1\"');\n      } else if (/^E-?mail your opinion/.test(this.text)) {\n        this.para = this.para.replace(/<\\/?strong>/g, '');\n        this.style = 'email';\n      }\n\n      this.para = this.para.replace(/ href=\"\\s+/, ' href=\"');\n      this.para = this.para.replace(/ href=\\\"”http/, ' href=\"http');\n      this.para = this.para.replace(/”\"/, '\"');\n      this.para = this.para.replace(/ href=\\\"`/, ' href=\"');\n      this.para = this.para.replace(/`\"/, '\"');\n      this.para = this.para.replace(/href=\\\"www/g, 'href=\"http://www');\n      this.para = this.para.replace(/href=\"http:\\/\\/www.africanindy/g, 'href=\"https://www.africanindy');\n      this.text = this.para.replace(/(<([^>]+)>)/ig, '').trim();\n\n      if (embeddedNewslettersLinkStyleMatch.test(this.para)) {\n        this.style = 'newsletters';\n      } else if (embeddedIolLinkStyleMatch.test(this.para)) {\n        this.para = this.para.replace(/(&nbsp;|&#xA0;)+/g, ' ');\n\n        if (/^\\s*<a .*<\\/a>\\s*$/.test(this.para)) {\n          this.style = 'indy';\n        }\n\n        if (/mini/.test(siteProps.siteHost)) {\n          this.para = this.para.replace(/\\/\\/www\\.iol\\.co\\.za/g, '//mini.iol.co.za');\n        }\n      } else if (embeddedFacebookLinkStyleMatch.test(this.para)) {\n        this.style = 'facebook';\n      } else if (embeddedTwitterLinkStyleMatch.test(this.para)) {\n        this.style = 'twitter';\n\n        if (/ href=\"https?:\\/\\/twitter.com\\/?\".*Daily News/.test(this.para)) {\n          this.para = this.para.replace(/ href=\"https?:\\/\\/twitter.com\\/?\"/, ' href=\"https://twitter.com/dailynewssa\"');\n        }\n      } else if (embeddedLinkedInLinkStyleMatch.test(this.para)) {\n        this.style = 'linkedIn';\n      } else if (embeddedWholeLinkStyleMatch.test(this.para)) {\n        if (/ href=\"https?:\\/\\/(www\\.)?babynet\\.co\\.za/i.test(this.para) && /join our Babynet forum/i.test(this.text)) {\n          this.para = this.text.replace(/Babynet forum/i, '<a href=\"http://www.babynet.co.za/\" target=\"_blank\">Babynet forum</a>');\n          this.style = 'forum';\n        }\n\n        this.style = this.style || 'default';\n      } else if (/^See also: /i.test(this.text)) {\n        this.para = this.para.replace(/^<h1[^>]*>(.*)<\\/h1>$/ig, '$1');\n        this.para = this.para.replace(/^<span[^>]*>(.*)<\\/span>$/ig, '$1');\n\n        if (/Instagram/.test(this.text)) {\n          this.style = this.style || 'instagram';\n        } else {\n          this.style = this.style || 'default';\n        }\n      }\n    }\n  }, {\n    key: \"formatPlain\",\n    value: function formatPlain() {\n      if (this.text === 'TALK TO US:') {\n        this.para = 'Talk us to us via Twitter and Facebook.';\n        this.style = 'info';\n        return;\n      }\n\n      if (this.text === 'IOL') {\n        this.style = 'indy';\n        this.para = '<a href=\"/\">IOL</a>';\n        return;\n      }\n\n      if (inlineStyleRemove.test(this.para)) {\n        this.para = this.para.replace(inlineStyleRemove, '');\n      }\n\n      var length = this.para.length;\n      this.para = this.para.replace(/ (iollifestyle@inl\\.co\\.za)/g, ' <a href=\"mailto:$1\">$1</a>');\n\n      if (this.para.length !== length) {\n        this.style = 'email';\n      }\n\n      this.para = this.para.replace(/ at http:\\/\\/([\\w\\.]*)([\\/\\w\\.]*pdf)/, ' at <a href=\"http://$1$2\">$1 (PDF)</a>');\n      this.para = this.para.replace(/ https?:\\/\\/www\\.youtu/g, ' https://youtu');\n\n      if (/ https?:\\/\\/youtu/.test(this.para)) {\n        this.para = this.para.replace(/ https?:\\/\\/(youtu\\S*)/g, ' <a href=\"https://$1\" target=\"_blank\">youtube</a>');\n        this.style = 'youtube';\n      }\n\n      if (/ (go\\s*to|visit|see):?\\s*www\\.[a-z]+\\.com/i.test(this.para)) {\n        this.para = this.para.replace(/\\s*(www\\.[a-z]+\\.com)/ig, ' <a href=\"http://$1\" target=\"_blank\">$1</a>');\n        this.style = 'default';\n      }\n\n      var html = this.para.replace(/^<strong>(.*)<\\/strong>$/i, '$1');\n      var link;\n\n      if (/^\\* \\*/.test(html)) {} else if (/^&bull; /.test(html)) {\n        this.style = this.style || 'bullet';\n        this.para = html.replace(/^&bull; /, '');\n      } else if (/^\\*+ /.test(html)) {\n        this.style = this.style || 'info';\n        this.para = html.replace(/^\\*+ /, '');\n\n        if (/^[A-Z]/.test(this.para)) {\n          this.sectionId = getNewspaperSectionId(this.para);\n        }\n      } else if (/^\\*+\\s*(Use IOL|Use our |On IOL)/i.test(this.text)) {\n        this.style = this.style || 'info';\n        this.para = this.text.replace(/^\\*+\\s*/, '');\n      } else if (/^l /i.test(this.para)) {\n        this.style = this.style || 'info';\n        this.para = this.para.substring(2);\n      } else if (/^@\\s?[A-Za-z0-9_]+$/.test(this.text)) {\n        this.style = 'twitter';\n        var name = this.text.substring(1).trim();\n        this.para = \"<a href=\\\"https://twitter.com/\".concat(name, \"\\\">@\").concat(name, \"</a>\");\n      } else if (/^African News Agency$/.test(this.text)) {\n        this.style = 'twitter';\n        this.para = \"<a href=\\\"https://twitter.com/afrinewsagency\\\">\".concat(this.text, \"</a>\");\n      } else if (/^REUTERS$/i.test(this.text)) {\n        this.style = 'newswire';\n        this.para = 'Reuters';\n      } else if (/^BLOOMBERG$/.test(this.text)) {\n        this.style = 'newswire';\n        this.para = 'Bloomberg';\n      } else if (/^(FemaleFirst|AFP|DPA|Daily Mail|Daily Voice|REUTERS|BLOOMBERG|The Washington Post|Washington Post|The Independent)$/i.test(this.text)) {\n        this.style = 'newswire';\n        this.para = this.text;\n      } else if (/^For more information/i.test(this.text)) {\n        this.style = this.style || 'info';\n      } else if (/^\\* Follow @IndyCapeSport on Twitter/i.test(this.text)) {\n        this.style = 'info';\n        this.para = this.para.replace(/<\\/?strong>/g, '');\n        this.para = this.para.replace(/^\\*\\s+/g, '');\n        this.para = this.para.replace(/^Follow @IndyCapeSport/, 'Follow <a href=\"https://twitter.com/IndyCapeSport\">@IndyCapeSport</a>');\n      } else if (/^@IndyCapeSport$/i.test(this.text)) {\n        this.style = 'info';\n        this.para = \"<a href=\\\"https://twitter.com/IndyCapeSport\\\">\".concat(this.para, \"</a>\");\n      } else if (/^\\S*@inl\\.co\\.za$/.test(this.text)) {\n        this.style = 'email';\n        this.paragaph = \"<a href=\\\"mailto:\".concat(this.text, \"\\\">\").concat(this.para, \"</a>\");\n      } else {\n        this.sectionId = getNewspaperSectionId(this.text);\n      }\n\n      if (this.sectionId) {\n        this.style = 'newspaper';\n        this.para = \"<a href=\\\"/\".concat(this.sectionId, \"\\\">\").concat(this.text, \"</a>\");\n      } else {\n        this.matchTwitter();\n      }\n    }\n  }, {\n    key: \"matchTwitter\",\n    value: function matchTwitter() {\n      var match = this.para.match(/ Twitter:?\\s*@?([A-Za-z0-9_]+).?$/);\n\n      if (match) {\n        var name = match[1];\n        this.style = 'twitter';\n        this.para = this.para.substring(0, match.index) + \" Twitter: <a href=\\\"https://twitter.com/\".concat(name, \"\\\">@\").concat(name, \"</a>\");\n      }\n    }\n  }]);\n\n  return HtmlParagraphFormatter;\n}();","module.exports = __webpack_public_path__ + \"static/media/tiktok.12331f11.svg\";","import axios from 'axios'\nimport { call, put, takeLatest, takeEvery, select } from 'redux-saga/effects'\nimport { ImageCalculator } from 'ion-image'\nimport IonArticle from 'ion-article'\nimport { fetchArticlesAPI } from './articles'\nimport { USER_SET_VISITORID } from './user'\nimport Cache from '../lib/cache'\n\nexport const FETCH_ARTICLE_CONTENT = 'api/FETCH_ARTICLE_CONTENT'\nexport const FETCH_ARTICLE_CONTENT_SUCCESS = 'api/FETCH_ARTICLE_CONTENT_SUCCESS'\nexport const FETCH_ARTICLE_CONTENT_ERROR = 'api/FETCH_ARTICLE_CONTENT_ERROR'\nexport const FETCH_ARTICLE = 'api/FETCH_ARTICLE'\nexport const FETCH_ARTICLE_SUCCESS = 'api/FETCH_ARTICLE_SUCCESS'\nexport const FETCH_ARTICLE_URL_VERIFIED = 'api/FETCH_ARTICLE_URL_VERIFIED'\nexport const FETCH_ARTICLE_ERROR = 'api/FETCH_ARTICLE_ERROR'\nexport const FETCH_ARTICLE_NOT_FOUND = 'api/FETCH_ARTICLE_NOT_FOUND'\nexport const SET_PREVIEW_ARTICLE = 'api/SET_PREVIEW_ARTICLE'\nexport const SEED_ARTICLE = 'api/SEED_ARTICLE'\nexport const SET_PROCESSED_ARTICLE = 'api/SET_PROCESSED_ARTICLE'\n\nexport const SUBMIT_COMPETITION = 'api/SUBMIT_COMPETITION'\nexport const SUBMIT_COMPETITION_SUCCESS = 'api/SUBMIT_COMPETITION_SUCCESS'\nexport const SUBMIT_COMPETITION_ERROR = 'api/SUBMIT_COMPETITION_ERROR'\nexport const OOVVUU_ARTICLE_RENDER = 'api/OOVVUU_ARTICLE_RENDER'\n\nexport const TOGGLE_FONT_SIZE = 'article/TOGGLE_FONT_SIZE'\n\nexport const SOCIAL_SHARE_PLATFORM = 'api/SOCIAL_SHARE_PLATFORM'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/content' : process.env.RAZZLE_CONTENT\nconst CANONICAL_FETCHER_URL = typeof window !== 'undefined' ? '/data/canonical' : process.env.RAZZLE_CANONICAL_FETCHER_URL\n\nconst cache = Cache()\n\nconst resizeImages = (widths, bodyHTML) => {\n  const images = bodyHTML.match(/<img [^>]+>/g)\n  if (images) {\n    const calc = new ImageCalculator()\n    const shape = 'original'\n    const resizeURL = process.env.RAZZLE_RESIZE_URL\n\n    for (const imageTag of images) {\n      const image = JSON.parse(imageTag\n        .replace(/['\"][ ]+/g, '\",')\n        .replace(/([ ,])([a-z0-9-]+)=/gi, '$1\"$2\":')\n        .replace(/<img\\s+/, '{')\n        .replace(/[,/ ]*>$/, '}')\n      )\n\n      if (image.width && parseInt(image.width) === 1 &&\n        image.height && parseInt(image.height) === 1) {\n        continue\n      }\n      let imgOffsetX = parseInt(image.offsetx) || 0\n      let imgOffsetY = parseInt(image.offsety) || 0\n      let imgCropWidth = parseInt(image.cropwidth) || 0\n      let imgCropHeight = parseInt(image.cropwidth) || 0\n      const imageWidth = parseInt(image.imageWidth)\n      const imageHeight = parseInt(image.imageHeight)\n      if ('imageCrop' in image) {\n        const crops = image.imageCrop.split('/')\n        imgOffsetX = Math.round((parseFloat(crops[0]) || 0) * imageWidth)\n        imgOffsetY = Math.round((parseFloat(crops[1]) || 0) * imageHeight)\n        imgCropWidth = Math.round((parseFloat(crops[2]) || 1) * imageWidth)\n        imgCropHeight = Math.round((parseFloat(crops[3]) || 1) * imageHeight)\n      }\n      const sources = []\n      let defaultSrc = ''\n      for (let i = 0; i < widths.length; i++) {\n        const width = widths[i].imageWidth\n        const height = calc.calcHeight(shape, width) || width * 100\n        const { offsetx, offsety, cropWidth, cropHeight } = calc.getCropCoordsForShape(shape,\n          width, height, imageWidth, imageHeight,\n          imgOffsetX, imgOffsetY, imgCropWidth, imgCropHeight,\n          0, 0)\n        const src = calc.buildImageUrl(resizeURL, '', width, height, image.src, offsetx, offsety, cropWidth, cropHeight, false)\n        if (!defaultSrc) {\n          defaultSrc = src\n        }\n        const webPSrc = calc.buildImageUrl(resizeURL, '', width, height, image.src, offsetx, offsety, cropWidth, cropHeight, true)\n        const hdSrc = calc.buildImageUrl(resizeURL, '', width * 2, height * 2, image.src, offsetx, offsety, cropWidth, cropHeight, false)\n        const screenWidth = widths[i].screenWidth ? widths[i].screenWidth : widths[i - 1].screenWidth + 1\n        const isMax = screenWidth === widths[i].screenWidth\n        sources.push(\n          `<source type=\"image/webp\" media=\"(${isMax ? 'max' : 'min'}-width: ${screenWidth}px)\" srcSet=\"${webPSrc}\" />` +\n          `<source type=\"image/jpeg\" media=\"(${isMax ? 'max' : 'min'}-width: ${screenWidth}px)\" srcSet=\"${hdSrc} 1.5x\" />` +\n          `<source type=\"image/jpeg\" media=\"(${isMax ? 'max' : 'min'}-width: ${screenWidth}px)\" srcSet=\"${src}\" />`\n        )\n      }\n      const pictureTag =\n      '<picture>' +\n        sources.join('') +\n        `<img className=${image.class} src=\"${defaultSrc}\" loading=\"lazy\" />` +\n      '</picture>'\n      bodyHTML = bodyHTML.replace(imageTag, pictureTag)\n    }\n  }\n  return bodyHTML\n}\n\nexport async function fetchArticleAPI (contentKey) {\n  const key = '/article/' + contentKey\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  return axios\n    .get(SERVER_URL + key)\n    .then(response => {\n      return cache.set(key, response.data, 60000)\n    })\n    .catch(error => {\n      console.error('ERROR fetching', SERVER_URL + key, '-', error.message)\n      throw error\n    })\n}\n\nasync function fetchAuthorAPI (contentKey) {\n  const key = '/author/' + process.env.RAZZLE_TITLE_KEY + '/' + contentKey\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  try {\n    const response = await axios.get(SERVER_URL + key)\n    return cache.set(key, response.data, 60000 * 30)\n  } catch (error) {\n    console.error('ERROR fetching', SERVER_URL + key, '-', error.message)\n    throw error\n  }\n}\n\nconst COMPETITION_SERVER_URL =\n  typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\n\nasync function fetchCompetition (competitionSlug) {\n  const key = '/competition/' + competitionSlug\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  return axios\n    .get(COMPETITION_SERVER_URL + '/data/competition/' + competitionSlug)\n    .then(response => cache.set(key, response.data, 60000))\n    .catch(error => {\n      console.error('ERROR fetching', COMPETITION_SERVER_URL + '/data/competition/' + competitionSlug, '-', error.message)\n      throw error\n    })\n}\n\nconst submitCompetitionAPI = formData => {\n  return axios\n    .post(COMPETITION_SERVER_URL + '/data/competition', formData)\n    .then(data => data.data)\n    .catch(error => console.error('ERROR submitting', COMPETITION_SERVER_URL + '/data/competition/', '-', error.message)\n    )\n}\n\nconst TIMELINE_SERVER_URL = typeof window !== 'undefined' ? '/data/timelines' : process.env.RAZZLE_TIMELINES\n\nfunction getTags (primaryTag, secondaryTags) {\n  const tags = []\n  if (secondaryTags && secondaryTags.length > 0) {\n    secondaryTags.map(tag => tags.push(tag.label))\n  }\n  if (primaryTag && primaryTag.length > 0) {\n    primaryTag.map(tag => tags.push(tag.label))\n  }\n  return tags\n}\n\nasync function fetchTimelines (slugs) {\n  return Promise.all(slugs.map(slug => {\n    return axios.get(TIMELINE_SERVER_URL + '/' + slug)\n      .then(data => {\n        const timeline = {}\n        timeline.title = data.data?.title\n        timeline.cards = data.data?.timelineCards.map(card => {\n          const item = {}\n          item.title = card.timelineMarker\n          item.cardTitle = card.cardTitle\n          if (card.cardUrl) { item.url = card.cardUrl }\n          item.cardSubtitle = card.cardSubtitle\n          item.cardDetailedText = card.cardDetailedText\n          if (card.cardMediaAsset || card.mediaSourceUrl) {\n            item.media = {\n              type: card.mediaType || 'IMAGE',\n              source: {\n                url: card.cardMediaAsset || card.mediaSourceUrl\n              }\n            }\n          }\n          return item\n        })\n        const tempData = {}\n        tempData[slug] = timeline.cards\n        return tempData\n      })\n      .catch(error => {\n        console.error('Timeline fetch error:', error.message)\n        return null\n      })\n  }))\n    .then((promisesArray) => {\n      const sanitisedArray = promisesArray.filter(item => item)\n      const resultObject = sanitisedArray.reduce((acc, obj) => {\n        const key = Object.keys(obj)[0]\n        acc[key] = obj[key]\n        return acc\n      }, {})\n      return resultObject\n    })\n}\n\nasync function fetchCanonicalURL (contentKey) {\n  return axios\n    .get(CANONICAL_FETCHER_URL + '/' + contentKey)\n    .catch(error => {\n      console.error('ERROR fetching', CANONICAL_FETCHER_URL + '/' + contentKey, '-', error.message)\n      throw error\n    })\n}\n\nasync function fetchIonArticle (content) {\n  return axios\n    .get(SERVER_URL + '/preview/' + content)\n    .then(response => {\n      return response.data\n    })\n    .catch(error => {\n      console.error('ERROR fetching', SERVER_URL + '/preview/' + content, '-', error.message)\n      throw error\n    })\n}\n\nfunction * fetchArticleContentSaga ({ contentKey }) {\n  try {\n    const res = yield call(fetchArticleAPI, contentKey)\n    yield put({ type: FETCH_ARTICLE_CONTENT_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_ARTICLE_CONTENT_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchArticleContent () {\n  yield takeLatest(FETCH_ARTICLE_CONTENT, fetchArticleContentSaga)\n}\n\nfunction fetchVisitorId () {\n  let result = false\n  if (typeof window !== 'undefined' && window.localStorage) {\n    result = window.localStorage.getItem('visitorId')\n  }\n  if (!result) {\n    result = Math.random().toString(36).substr(2, 9)\n    if (typeof window !== 'undefined' && window.localStorage) {\n      window.localStorage.setItem('visitorId', result)\n    }\n  }\n  return result\n}\n\nfunction * fetchArticleSaga ({ contentKey }) {\n  try {\n    const res = yield call(fetchArticleAPI, contentKey)\n    const article = new IonArticle(res)\n    article.canonicalUri = '/' + article.getCanonicalUri()\n    const competitionSlug = article.getCompetitionSlug()\n    const timelineSlugs = article.getTimelineSlugs()\n    if (timelineSlugs) {\n      const timelines = yield call(fetchTimelines, timelineSlugs)\n      article.timelines = timelines\n    }\n    if (competitionSlug) {\n      try {\n        article.competition = yield call(fetchCompetition, competitionSlug)\n        article.competitionExpired = false\n      } catch (e) {\n        article.competitionExpired = true\n      }\n    }\n    article.relatedArticles = article.relatedArticles.map(relatedArticle => {\n      relatedArticle.image = {}\n      relatedArticle.image.width = relatedArticle.imageWidth\n      relatedArticle.image.height = relatedArticle.imageHeight\n      relatedArticle.image.crop = relatedArticle.crop\n      relatedArticle.image.crops = relatedArticle.crops\n      relatedArticle.image.url = relatedArticle.imageUrl\n      relatedArticle.image.externalUrl = relatedArticle.externalUrl\n      return relatedArticle\n    })\n    if (article.titleKey !== process.env.RAZZLE_TITLE_KEY) {\n      const canonicalResult = yield call(fetchCanonicalURL, contentKey)\n      article.canonicalUri = canonicalResult.data.url\n    }\n    const secondaryTags = {}\n    for (const e of article.secondaryTags || []) {\n      secondaryTags[e.slug] = {\n        sectionSlug: e.sectionSlug,\n        uuid: e.uuid,\n        label: e.label\n      }\n    }\n    article.secondaryTags = []\n    for (const e in secondaryTags) {\n      article.secondaryTags.push({\n        slug: e,\n        sectionSlug: secondaryTags[e].sectionSlug,\n        uuid: secondaryTags[e].uuid,\n        label: secondaryTags[e].label\n      })\n    }\n    let authorArticles = []\n    let author = {}\n    if (article.authors && article.authors[0] && article.authors[0].hasAuthorPage) {\n      try {\n        authorArticles = yield call(fetchArticlesAPI, article.authors[0].slug, 0, 4)\n        if (article.authors[0].uuid) {\n          // For CosMoS, this is identical to below and can be removed after migration\n          author = yield call(fetchAuthorAPI, article.authors[0].uuid.replace('authors/', ''))\n        } else {\n          author = yield call(fetchAuthorAPI, article.authors[0].name)\n        }\n      } catch (e) {\n        console.error('ERROR fetching authorArticles for', article.authors[0].slug, '-', e.message)\n      }\n    }\n\n    let youMayLikeArticles = []\n    try {\n      youMayLikeArticles = yield call(fetchArticlesAPI, article.section, 0, 6)\n    } catch (e) {\n      console.error('ERROR fetching youMayLikeArticles for', article.sectionSlug, '-', e.message)\n    }\n\n    article.bodyHTML = resizeImages([{ imageWidth: 420, screenWidth: 640 }, { imageWidth: 610, screenWidth: false }], article.bodyHTML)\n    article.bodyHTML = article.bodyHTML.replace('<!-- [AD_SLOT] -->', '<ad-slot/>')\n    article.bodyHTML = '<!--sse-->' + article.bodyHTML + '<!--/sse-->'\n\n    article.videoSources = []\n    if (article.videos && article.videos[0].sources) {\n      const sources = article.videos[0].sources\n      article.videoSources = Object.keys(sources).map(key => {\n        return { src: sources[key].url || sources[key].mp4.url, type: sources[key].type || 'video/mp4', label: key }\n      })\n    }\n\n    article.visitorId = yield select(getVisitorId)\n    article.sessionId = yield select(getSessionId)\n    if (!article.visitorId) {\n      article.visitorId = fetchVisitorId()\n      yield put({ type: USER_SET_VISITORID, payload: article.visitorId })\n    }\n    yield put({\n      type: FETCH_ARTICLE_SUCCESS,\n      payload: article,\n      authorArticles: authorArticles.contents,\n      youMayLikeArticles: youMayLikeArticles.contents,\n      author,\n      path: article.canonicalUri,\n      modified: article.modified,\n      visitorId: article.visitorId,\n      sessionId: article.sessionId,\n      tags: getTags(article.primaryTag, article.secondaryTags)\n    })\n  } catch (e) {\n    if (e.response && e.response.status === 404) {\n      yield put({ type: FETCH_ARTICLE_NOT_FOUND, payload: e.message })\n    } else {\n      console.error('ERROR fetchArticleSaga for', contentKey, '-', e.message)\n      yield put({ type: FETCH_ARTICLE_ERROR, payload: e.message })\n    }\n  }\n}\n\nexport function * watchFetchArticle () {\n  yield takeLatest(FETCH_ARTICLE, fetchArticleSaga)\n}\n\nfunction * setPreviewArticleSaga ({ payload }) {\n  try {\n    const res = yield call(fetchIonArticle, payload)\n    const article = new IonArticle(res)\n    let authorArticles = []\n    let youMayLikeArticles = []\n    let author = {}\n    article.bodyHTML = resizeImages([{ imageWidth: 420, screenWidth: 640 }, { imageWidth: 610, screenWidth: false }], article.bodyHTML)\n    if (article.authors && article.authors[0] && article.authors[0].hasAuthorPage) {\n      try {\n        authorArticles = yield call(fetchArticlesAPI, article.authors[0].slug, 0, 4)\n        if (article.authors[0].uuid) {\n          author = yield call(fetchAuthorAPI, article.authors[0].uuid)\n        } else {\n          author = yield call(fetchAuthorAPI, article.authors[0].name)\n        }\n      } catch (e) {\n        console.error('Unable to fetch authorArticles', e.message)\n      }\n    }\n    try {\n      youMayLikeArticles = yield call(fetchArticlesAPI, article.section, 0, 6)\n    } catch (e) {\n      console.error('ERROR fetching youMayLikeArticles for', article.sectionSlug, '-', e.message)\n    }\n    yield put({\n      type: FETCH_ARTICLE_SUCCESS,\n      payload: article,\n      authorArticles: authorArticles.contents,\n      youMayLikeArticles: youMayLikeArticles.contents,\n      author,\n      path: article.canonicalUri,\n      modified: article.modified,\n      visitorId: article.visitorId,\n      sessionId: article.sessionId,\n      tags: getTags(article.primaryTag, article.secondaryTags)\n    })\n  } catch (e) {\n    console.error('ERROR setPreviewArticleSaga', e.message)\n    yield put({ type: FETCH_ARTICLE_ERROR, payload: e.message })\n  }\n}\n\nfunction * submitCompetitionSaga ({ payload }) {\n  const formData = payload\n  try {\n    const res = yield call(submitCompetitionAPI, formData)\n    if (res.success) {\n      yield put({ type: SUBMIT_COMPETITION_SUCCESS })\n    } else {\n      yield put({ type: SUBMIT_COMPETITION_ERROR, payload: res.errors })\n    }\n    // let article = yield select(getArticle)\n    // article.bodyHTML = article.bodyHTML.replace(/(<form([^]*)>)([.]*)(<\\/form>)/g, '$1<p id=\"success-message\">You have successfully entered our competition</p>$2')\n    // yield put({ type: SUBMIT_COMPETITION_SUCCESS, payload: article })\n  } catch (e) {\n    console.error('ERROR while submitting to competition', e.message)\n    yield put({\n      type: SUBMIT_COMPETITION_ERROR,\n      payload: { message: e.message }\n    })\n  }\n}\n\nexport function * watchPreviewArticle () {\n  yield takeLatest(SET_PREVIEW_ARTICLE, setPreviewArticleSaga)\n}\n\nexport function * watchSubmitCompetition () {\n  yield takeEvery(SUBMIT_COMPETITION, submitCompetitionSaga)\n}\n\n// Saga actions\nexport const getVisitorId = state => state.user.visitorId\nexport const getSessionId = state => state.user.sessionId\nexport const getArticle = state => state.article.article\nexport const fetchArticleContent = contentKey => ({ type: FETCH_ARTICLE_CONTENT, isFetching: true, hasFetched: false, contentKey })\nexport const articleUrlVerified = () => ({ type: FETCH_ARTICLE_URL_VERIFIED })\nexport const fetchArticle = contentKey => ({ type: FETCH_ARTICLE, isFetching: true, hasFetched: false, contentKey })\nexport const setPreviewArticle = data => ({ type: SET_PREVIEW_ARTICLE, payload: data })\nexport const seedArticle = data => ({ type: SEED_ARTICLE, payload: data })\nexport const submitCompetition = data => ({ type: SUBMIT_COMPETITION, payload: data })\nexport const setProcessedArticle = () => ({ type: SET_PROCESSED_ARTICLE })\nexport const oovvuuArticleView = payload => ({ type: OOVVUU_ARTICLE_RENDER, payload })\nexport const toggleFontSize = () => ({ type: TOGGLE_FONT_SIZE })\nexport const getSocialSharePlatform = (data) => ({ type: SOCIAL_SHARE_PLATFORM, payload: data })\n\nfunction mapArticleFields (article) {\n  // eslint-disable-next-line no-undef\n  const partialArticle = JSON.parse(JSON.stringify(article))\n  partialArticle.images = [article.image]\n  partialArticle.abstract = article.bodyHTML\n  delete partialArticle.bodyHTML\n  return partialArticle\n}\n\nexport const initialState = {\n  lastFetch: 0,\n  fontSize: 17,\n  didInvalidate: false,\n  isFetching: false,\n  hasFetched: false,\n  hasProcessed: false,\n  hasError: false,\n  is404: false,\n  checkCanonical: false,\n  modified: null,\n  canonical: null,\n  error: null,\n  article: null, // do not mutate these\n  previewArticle: false,\n  authorArticles: [],\n  youMayLikeArticles: [],\n  tags: [],\n  socialSharePlatform: null\n}\n\nexport const Reducer = (\n  state = initialState,\n  { type, payload, author, authorArticles, path, modified, meta, youMayLikeArticles, tags }\n) => {\n  switch (type) {\n    case SET_PREVIEW_ARTICLE:\n      return Object.assign({}, state, {\n        previewArticle: true\n      })\n    case SEED_ARTICLE: {\n      const isFullArticle = !payload.displayTag\n      if (state.article?.contentKey === payload.contentKey) {\n        return state\n      }\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isFetching: !isFullArticle,\n        hasFetched: isFullArticle,\n        hasProcessed: false,\n        hasError: false,\n        is404: false,\n        checkCanonical: false,\n        modified: null,\n        canonical: null,\n        error: null,\n        article: isFullArticle ? payload : mapArticleFields(payload),\n        author: isFullArticle ? undefined : payload.author,\n        preloaded: true,\n        previewArticle: false\n      })\n    }\n    case SET_PROCESSED_ARTICLE:\n      return Object.assign({}, state, {\n        hasProcessed: true\n      })\n    case FETCH_ARTICLE_URL_VERIFIED:\n      return Object.assign({}, state, {\n        checkCanonical: false\n      })\n    case FETCH_ARTICLE_CONTENT:\n      // Do not update the state\n      return state\n    case FETCH_ARTICLE:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        is404: false,\n        hasError: false,\n        checkCanonical: false,\n        canonical: null,\n        error: null\n      })\n    case FETCH_ARTICLE_CONTENT_ERROR:\n      // Do not update the state\n      return state\n    case FETCH_ARTICLE_NOT_FOUND:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: true,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        checkCanonical: false,\n        canonical: null\n      })\n    case FETCH_ARTICLE_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: false,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        checkCanonical: false,\n        canonical: null\n      })\n    case FETCH_ARTICLE_CONTENT_SUCCESS:\n      // Do not update the state\n      return state\n    case FETCH_ARTICLE_SUCCESS:\n      return Object.assign({}, state, {\n        lastFetch: new Date(),\n        hasFetched: true,\n        hasProcessed: false,\n        preloaded: false,\n        isFetching: false,\n        didInvalidate: false,\n        article: payload,\n        authorArticles,\n        youMayLikeArticles,\n        checkCanonical: true,\n        modified,\n        canonical: path,\n        author,\n        tags,\n        hasError: false,\n        is404: false,\n        error: null\n      })\n    case SOCIAL_SHARE_PLATFORM:\n      return Object.assign({}, state, {\n        socialSharePlatform: payload\n      })\n    case SUBMIT_COMPETITION:\n      return Object.assign({}, state, {\n        isSubmitting: true,\n        hasSubmitted: false,\n        hasErrorSubmit: false,\n        formData: payload\n      })\n    case SUBMIT_COMPETITION_SUCCESS:\n      return Object.assign({}, state, {\n        isSubmitting: false,\n        hasSubmitted: true,\n        hasErrorSubmit: false\n      })\n    case SUBMIT_COMPETITION_ERROR:\n      return Object.assign({}, state, {\n        isSubmitting: false,\n        hasSubmitted: false,\n        hasErrorSubmit: true,\n        message: payload\n      })\n    case TOGGLE_FONT_SIZE:\n      return Object.assign({}, state, {\n        fontSize: state.fontSize === 21 ? 13 : state.fontSize + 2\n      })\n    default:\n      return state\n  }\n}\n","import React, { useState, useEffect, useRef } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport axios from 'axios'\n\nimport { useCookie, isBrowser } from './ui/utils'\nimport useHasMounted from '../../lib/useHasMounted'\nimport { getRegistration, urlB64ToUint8Array } from '../ServiceWorker'\nimport Popup from 'ion-popup'\nimport iolBlocks from '../../../assets/images/general/push-notifications.svg'\nimport StyledLink from './ui/Link'\n\nconst PushPrompt = () => {\n  if (!isBrowser || !('PushManager' in window)) {\n    return null\n  }\n  return <PrivatePushPrompt />\n}\n\nconst PrivatePushPrompt = (props) => {\n  const hasHydrated = useHasMounted()\n  const [userHasVisited] = useCookie('UserVisited', '0')\n  const [promptLater, setPromptLater] = useCookie('PromptLater', false)\n  const [havePrompted, setPrompted] = useState(true)\n  const [helpPopupVisible, setHelpPopupVisible] = useState(false)\n  const subscription = useRef(false)\n  const clickSource = 'Push Prompt'\n\n  const registration = getRegistration()\n  useEffect(() => {\n    if (registration && registration.pushManager) {\n      registration.pushManager.getSubscription()\n        .then(sub => {\n          subscription.current = sub\n          if (!sub && userHasVisited && promptLater !== 'true') {\n            setPrompted(false)\n          } else {\n            setPrompted(true)\n          }\n        })\n        .catch((err) => {\n          console.error(`Error during getSubscription(): ${err}`)\n        })\n    }\n  }, [registration])\n\n  const handleLater = React.useCallback(()=>{\n    setPromptLater(true, {days: 7})\n    setPrompted(true)\n  })\n  const handleAllow = React.useCallback(() => {\n    setPromptLater(true, {days: 7})\n    setPrompted(true)\n    if (!subscription.current && registration && registration.pushManager) {\n      registration.pushManager.subscribe({\n        userVisibleOnly: true,\n        applicationServerKey: urlB64ToUint8Array(process.env.RAZZLE_SERVERKEY)\n      })\n        .then(function (sub) {\n          console.log('User IS now subscribed.')\n          subscription.current = sub\n          return axios.post(process.env.RAZZLE_PUSH_SERVICE + '/register', JSON.stringify({ subscription: sub, titleKey: process.env.RAZZLE_TITLE_KEY }), {\n            headers: {\n              'Content-type': 'application/json'\n            }\n          })\n        })\n        .then(res => {\n          setPrompted(true)\n        })\n        .catch(function (err) {\n          console.log('Failed to subscribe the user: ', err)\n          setHelpPopupVisible(true)\n          subscription.current = false\n        })\n    }\n  })\n\n  if (!hasHydrated || (promptLater === 'true') || (userHasVisited !== '1')) {\n    return null\n  }\n  if (havePrompted && !helpPopupVisible) {\n    return null\n  }\n  return (\n    <>\n      {helpPopupVisible &&\n        <Popup visible>\n          <x.div display='grid' gridTemplateColumns='56px auto' gap={20}>\n            <x.div>\n              <x.img src={iolBlocks} alt='IOL' w={56} />\n            </x.div>\n            <x.div color='grey'>\n              <x.p text='xlarge' fontWeight='medium'>Small problem..</x.p>\n              <x.p mt={5}>You have previously chosen to block notifications.</x.p>\n              <x.p mb={15}>To follow stories requires you to enable notifications in your browser settings.</x.p>\n              <x.div display='flex' justifyContent='flex-end'>\n                <StyledLink onClick={() => setHelpPopupVisible(false)} to={'/help'} visitorId={props.visitorId} sessionId={props.sessionId} section={props.section} source={clickSource}><x.p mt={3} mr={15}>Help</x.p></StyledLink>\n                <x.button onClick={() => setHelpPopupVisible(false)} bg='#2E5FDC' color='white' p='6px 20px' borderRadius={4} ml={5}>OK</x.button>\n              </x.div>\n            </x.div>\n          </x.div>\n        </Popup>\n      }\n      {!helpPopupVisible && \n        <Popup visible>\n          <x.div display='grid' gridTemplateColumns='56px auto' gap={20}>\n            <x.div>\n              <x.img src={iolBlocks} alt='IOL' w={56} />\n            </x.div>\n            <x.div color='grey'>\n              <x.p mt={5}>Would you like to receive notifications for breaking news?</x.p>\n              <x.p mb={15}>You can turn these off at any time.</x.p>\n              <x.div display='flex' justifyContent='flex-end'>\n                <x.button onClick={handleLater} bg='#FFFFFF' color='grey' p='6px 20px' borderRadius={4}>Later</x.button>\n                <x.button onClick={handleAllow} bg='#2E5FDC' color='white' p='6px 20px' borderRadius={4} ml={5}>Allow</x.button>\n              </x.div>\n            </x.div>\n          </x.div>\n        </Popup>\n      }\n    </>\n  )\n}\n\nexport default PushPrompt\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ClientOnly = ClientOnly;\nexports[\"default\"] = void 0;\nexports.useHasMounted = useHasMounted;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _excluded = [\"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\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\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction useHasMounted() {\n  var _React$useState = _react[\"default\"].useState(false),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      hasMounted = _React$useState2[0],\n      setHasMounted = _React$useState2[1];\n\n  _react[\"default\"].useEffect(function () {\n    setHasMounted(true);\n  }, []);\n\n  return hasMounted;\n}\n\nfunction ClientOnly(_ref) {\n  var children = _ref.children,\n      delegated = _objectWithoutProperties(_ref, _excluded);\n\n  var hasMounted = useHasMounted();\n\n  if (!hasMounted) {\n    return null;\n  }\n\n  return /*#__PURE__*/_react[\"default\"].createElement(\"div\", delegated, children);\n}\n\nvar _default = ClientOnly;\nexports[\"default\"] = _default;","module.exports = __webpack_public_path__ + \"static/media/facebook-menu.c7066622.svg\";","module.exports = __webpack_public_path__ + \"static/media/sunny.d3106c88.svg\";","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.BetaTimestamps = BetaTimestamps;\nexports.formatAgo = formatAgo;\nexports.getDate = getDate;\nexports.formatDate = formatDate;\nexports.parse = parse;\n\nvar logger = console;\n\nvar monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nfunction BetaTimestamps(timestamp, defaultValue) {\n  if (isNaN(timestamp)) {\n    // logger.error('formatAgo', timestamp)\n    return defaultValue;\n  }\n  var now = new Date().getTime();\n  var duration = now - timestamp;\n  duration = Math.floor(duration / 1000);\n  if (duration <= 1) {\n    return '1s ago';\n  }\n  if (duration < 60) {\n    return duration + 's ago';\n  }\n  duration = Math.floor(duration / 60);\n  if (duration <= 1) {\n    return '1m ago';\n  }\n  if (duration < 60) {\n    return duration + 'm ago';\n  }\n  // if (duration < 120) {\n  //   return `${duration}m`;\n  // }\n  duration = Math.floor(duration / 60);\n  if (duration <= 1) {\n    return '1h ago';\n  }\n  if (duration < 4) {\n    return duration + 'h ago';\n  }\n  if (duration <= 24) {\n    return duration + 'h ago';\n  }\n  //   duration = Math.floor(duration / 24);\n  //   if (duration <= 1) {\n  //      return '1d ago';\n  //   }\n  //   if (duration < 60) {\n  //      return `${duration}d ago`;\n  //   }\n  return defaultValue;\n}\n\nfunction formatAgo(date) {\n  if (!date) {\n    // logger.error('formatAgo empty')\n  } else if (!isNaN(date)) {\n    return BetaTimestamps(date, formatDate(date, false));\n  } else if (typeof date === 'string') {\n    var timestamp = void 0;\n    if (date.length < 16) {\n      // logger.warn('formatAgo string', date)\n      return date;\n    } else if (date.length === 16) {\n      timestamp = Date.parse(date + 'Z');\n    } else {\n      timestamp = Date.parse(date);\n    }\n    // logger.debug('formatAgo', date, BetaTimestamps.formatAgo(timestamp, formatDate(date, false)))\n    return BetaTimestamps(timestamp, formatDate(date, false));\n  } else {\n    // logger.error('formatAgo type', typeof date)\n  }\n}\n\nfunction getDate(date) {\n  if (Number.isInteger(date)) {\n    return new Date(date);\n  } else if (typeof date === 'string') {\n    if (date.length === 16) {\n      return new Date(date + 'Z');\n    } else {\n      // logger.warn('formatDate length', date)\n      return new Date(date);\n    }\n  } else if ((typeof date === 'undefined' ? 'undefined' : _typeof(date)) === 'object') {\n    return date;\n  } else {\n    logger.warn('formatDate', typeof date === 'undefined' ? 'undefined' : _typeof(date));\n  }\n}\n\nfunction formatDate(date, timeStamp) {\n  if (Number.isInteger(date)) {\n    return formatDateString(new Date(date).toString(), timeStamp);\n  } else if (typeof date === 'string') {\n    if (date.substr(date.length - 1) === 'Z') {\n      return formatDateString(new Date(date).toString(), timeStamp);\n    } else if (date.length === 16) {\n      return formatDateString(new Date(date + 'Z').toString(), timeStamp);\n    } else {\n      logger.warn('formatDate', date);\n    }\n  } else if ((typeof date === 'undefined' ? 'undefined' : _typeof(date)) === 'object') {\n    return formatDateString(date.toString(), timeStamp);\n  } else {\n    logger.warn('formatDate', typeof date === 'undefined' ? 'undefined' : _typeof(date));\n  }\n}\n\nfunction formatDateString(string, timeStamp) {\n  if (string.length >= 21) {\n    var dd = string.substring(8, 10);\n    var mmm = string.substring(4, 7);\n    var yyyy = string.substring(11, 15);\n    var hh = string.substring(16, 18);\n    var mm = string.substring(19, 21);\n    var monthName = getFullMonthName(mmm);\n    if (parseInt(dd) < 1 || parseInt(dd) > 31 || parseInt(yyyy) < 2000 || parseInt(yyyy) > 2020 || !monthName) {\n      // logger.warn('formatDateString', string, dd, mmm, yyyy)\n      return string;\n    }\n    if (dd.substring(0, 1) === '0') {\n      dd = dd.substring(1);\n    }\n    var dateString = dd + ' ' + monthName + ' ' + yyyy;\n    if (timeStamp) {\n      if (hh > 12) {\n        hh -= 12;\n        dateString += ', ' + hh + ':' + mm + 'pm';\n      } else if (parseInt(hh) === 12) {\n        dateString += ', ' + hh + ':' + mm + 'pm';\n      } else {\n        dateString += ', ' + hh + ':' + mm + 'am';\n      }\n    }\n    return dateString;\n  } else {\n    // logger.warn('formatDateString', string)\n    return string;\n  }\n}\n\nfunction getFullMonthName(string) {\n  return monthNames.filter(function (name) {\n    return name.substr(0, string.length) === string;\n  });\n}\n\nfunction parse(string) {\n  if (typeof string === 'string') {\n    if (string.length === 16) {\n      return Date.parse(string + 'Z');\n    } else {\n      return Date.parse(string);\n    }\n  }\n}","module.exports = __webpack_public_path__ + \"static/media/menu-ico.f625b888.svg\";","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from 'ion-cache'\n\nexport const FETCH_STATICPAGE = 'api/FETCH_STATICPAGE'\nexport const FETCH_STATICPAGE_SUCCESS = 'api/FETCH_STATICPAGE_SUCCESS'\nexport const FETCH_STATICPAGE_ERROR = 'api/FETCH_STATICPAGE_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\n\nconst cache = new Cache()\n\nconst fetchStaticPageAPI = (pageName) => {\n  return cache.get(pageName)\n    .then(result => {\n      if (!result) {\n        return axios.get(SERVER_URL + '/data/static/' + pageName)\n          .then(response => {\n            return cache.set(pageName, response.data, 60 * 60000) // Cache for 60 minutes\n          })\n          .catch(err => {\n            // console.error(err)\n            throw err\n          })\n      }\n      return result\n    })\n}\n\nfunction * fetchStaticPageSaga ({ payload }) {\n  try {\n    const res = yield call(fetchStaticPageAPI, payload)\n    yield put({ type: FETCH_STATICPAGE_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_STATICPAGE_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchStaticPage () {\n  yield takeLatest(FETCH_STATICPAGE, fetchStaticPageSaga)\n}\n\n// Saga actions\nexport const fetchStaticPage = (pageName) => ({ type: FETCH_STATICPAGE, payload: pageName })\n\nexport const initialState = {\n  lastFetch: 0,\n  didInvalidate: false,\n  isFetching: false,\n  hasFetched: false,\n  hasError: false,\n  canonical: null,\n  error: null,\n  pageName: '',\n  staticPage: null // do not mutate these\n}\n\nexport const Reducer = (state = initialState, { type, payload, meta }) => {\n  switch (type) {\n    case FETCH_STATICPAGE:\n      return Object.assign({}, state, {\n        pageName: payload,\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        canonical: null,\n        error: null\n      })\n    case FETCH_STATICPAGE_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        canonical: null\n      })\n    case FETCH_STATICPAGE_SUCCESS:\n      return Object.assign({}, state, {\n        lastFetch: new Date(),\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        staticPage: payload,\n        hasError: false,\n        canonical: null,\n        error: null\n      })\n    default:\n      return state\n  }\n}\n","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_EDITORS_CHOICE_ARTICLES = 'api/FETCH_EDITORS_CHOICE_ARTICLES'\nexport const FETCH_EDITORS_CHOICE_ARTICLES_SUCCESS = 'api/FETCH_EDITORS_CHOICE_ARTICLES_SUCCESS'\nexport const FETCH_EDITORS_CHOICE_ARTICLES_ERROR = 'api/FETCH_EDITORS_CHOICE_ARTICLES_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/editorschoice/' : process.env.RAZZLE_EDITOR_CHOICE\nconst section = 'editorschoice'\nconst cache = Cache()\n\nasync function fetchArticlesAPI () {\n  const result = await cache.get(section)\n  if (result) {\n    return result\n  }\n  return axios.get(SERVER_URL)\n    .then(response => {\n      return cache.set(section, response.data)\n    })\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nfunction * fetchEditorsChoiceArticlesSaga () {\n  try {\n    const res = yield call(fetchArticlesAPI)\n    let payload = {}\n    payload = res.contents\n    yield put({ type: FETCH_EDITORS_CHOICE_ARTICLES_SUCCESS, payload })\n  } catch (e) {\n    yield put({ type: FETCH_EDITORS_CHOICE_ARTICLES_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchfetchEditorsChoiceArticles () {\n  yield takeLatest(FETCH_EDITORS_CHOICE_ARTICLES, fetchEditorsChoiceArticlesSaga)\n}\n\n// Saga actions\nexport const fetchEditorsChoiceArticles = (section) => ({ type: FETCH_EDITORS_CHOICE_ARTICLES, section })\n\nconst initialState = {\n  editorschoice: {\n    didInvalidate: false,\n    isFetching: false,\n    hasFetched: false,\n    hasError: false,\n    error: null,\n    articles: [] // do not mutate these\n  }\n}\n\nexport const Reducer = (state = initialState, { type, payload, meta }) => {\n  const newPayload = {}\n  switch (type) {\n    case FETCH_EDITORS_CHOICE_ARTICLES:\n      newPayload[section] = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_EDITORS_CHOICE_ARTICLES_ERROR:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_EDITORS_CHOICE_ARTICLES_SUCCESS:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        articles: payload\n      })\n      return Object.assign({}, state, newPayload)\n    default:\n      return state\n  }\n}\n","module.exports = __webpack_public_path__ + \"static/media/iol.30fc4d23.svg\";","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_MOST_READ_ARTICLES = 'api/FETCH_MOST_READ_ARTICLES'\nexport const FETCH_MOST_READ_ARTICLES_SUCCESS = 'api/FETCH_MOST_READ_ARTICLES_SUCCESS'\nexport const FETCH_MOST_READ_ARTICLES_ERROR = 'api/FETCH_MOST_READ_ARTICLES_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/mostread' : process.env.RAZZLE_POPULAR_FEED\nconst cache = Cache()\n\nasync function fetchArticlesAPI (section) {\n  const key = 'most-read/' + section\n  const result = await cache.get(key)\n  if (result) {\n    console.log('fetchArticlesAPI:', 'Cache HIT', section)\n    return result\n  }\n  return axios.get(SERVER_URL + '/' + section)\n    .then(response => {\n      return cache.set(key, response.data)\n    })\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nfunction * fetchMostReadArticlesSaga ({ section }) {\n  try {\n    const mostReadArticles = yield call(fetchArticlesAPI, section)\n    let payload = {}\n    payload = {\n      lastFetch: new Date(),\n      hasMore: false,\n      articles: mostReadArticles\n    }\n    yield put({ type: FETCH_MOST_READ_ARTICLES_SUCCESS, payload, section })\n  } catch (e) {\n    yield put({ type: FETCH_MOST_READ_ARTICLES_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchMostReadArticles () {\n  yield takeLatest(FETCH_MOST_READ_ARTICLES, fetchMostReadArticlesSaga)\n}\n\n// Saga actions\nexport const fetchMostReadArticles = (section, limit) => ({ type: FETCH_MOST_READ_ARTICLES, section, limit })\n\nconst initialState = {}\n\nexport const Reducer = (state = initialState, { type, payload, section, meta }) => {\n  const newPayload = {}\n\n  switch (type) {\n    case FETCH_MOST_READ_ARTICLES:\n      newPayload[section] = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_MOST_READ_ARTICLES_ERROR:\n      newPayload[section] = {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      }\n      return Object.assign({}, state, newPayload)\n    case FETCH_MOST_READ_ARTICLES_SUCCESS:\n      newPayload[section] = {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        articles: payload.articles,\n        hasMore: payload.hasMore,\n        lastFetch: payload.lastFetch,\n        authorName: payload.authorName,\n        sectionLabel: payload.sectionLabel\n      }\n      return Object.assign({}, state, newPayload)\n    default:\n      return state\n  }\n}\n","import axios from 'axios'\nimport { call, put, takeEvery } from 'redux-saga/effects'\n\nexport const SUBSCRIBE = 'api/SUBSCRIBE'\nexport const SUBSCRIBE_SUCCESS = 'api/SUBSCRIBE_SUCCESS'\nexport const SUBSCRIBE_ERROR = 'api/SUBSCRIBE_ERROR'\nexport const REINITIALIZE = 'api/REINITIALIZE'\nexport const UPDATE_NEWSLETTER_LIST = 'api/UPDATE_NEWSLETTER_LIST'\nexport const ADD_NEWSLETTER_LIST_IDS = 'api/ADD_NEWSLETTER_LIST_IDS'\n\nexport const UPDATE_DATA = 'api/UPDATE_DATA'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\n\nexport const subscribeAPI = (data) => {\n  return axios.post(SERVER_URL + '/data/newsletter/subscribe', {\n    contact_name: data.firstName,\n    contact_lastname: data.lastName,\n    email: data.email,\n    lists: data.listIds,\n    hp: '',\n    error: ''\n  })\n    .then(response => response.data)\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nconst addNewsletterListIdsAPI = (state, listIds) => {\n  const newState = Object.assign({}, state)\n  newState.listIds = listIds.map((listId) => {\n    if (!newState.listIds.includes(listId)) {\n      return Array.concat(newState.listIds, [listId])\n    } else {\n      return newState.listIds\n    }\n  })\n  return newState\n}\n\nconst toggleNewsletterSubscriptionAPI = (state, listId) => {\n  const newState = Object.assign({}, state)\n  if (newState.listIds.includes(listId)) {\n    // remove from the array\n    newState.listIds = newState.listIds.filter((element) => {\n      return element !== listId\n    })\n  } else {\n    // add to the array ensuring a new array object is created\n    newState.listIds = newState.listIds.concat([listId])\n  }\n  return newState\n}\n\nfunction * subscribeSaga ({ payload }) {\n  try {\n    yield call(subscribeAPI, payload)\n    yield put({ type: SUBSCRIBE_SUCCESS })\n  } catch (e) {\n    console.error('ERROR while subscribing', e.message)\n    yield put({ type: SUBSCRIBE_ERROR, payload: { message: e.message } })\n  }\n}\n\nexport function * watchSubscribe () {\n  yield takeEvery(SUBSCRIBE, subscribeSaga)\n}\n\n// Saga actions\nexport const subscribeNewsletter = (firstName, lastName, email, listIds) => ({ type: SUBSCRIBE, payload: { firstName, lastName, email, listIds } })\nexport const toggleNewsletterSubscription = (listId) => ({ type: UPDATE_NEWSLETTER_LIST, payload: listId })\nexport const addNewsletterListIds = (listIds) => ({ type: ADD_NEWSLETTER_LIST_IDS, payload: listIds })\nexport const updateForm = (data) => ({ type: UPDATE_DATA, payload: data })\nexport const reinitialize = () => ({ type: REINITIALIZE, payload: {} })\n\nconst defaultState = {\n  firstName: '',\n  lastName: '',\n  email: '',\n  listIds: ['UvMIi9m2RuP4MphsG52Vvw'],\n  output: ''\n}\n\nexport const Reducer = (state = defaultState, { type, payload }) => {\n  switch (type) {\n    case REINITIALIZE:\n      return Object.assign({}, defaultState)\n    case ADD_NEWSLETTER_LIST_IDS:\n      return addNewsletterListIdsAPI(state, payload)\n    case UPDATE_NEWSLETTER_LIST:\n      return toggleNewsletterSubscriptionAPI(state, payload)\n    case UPDATE_DATA:\n      return Object.assign({}, state, payload)\n    case SUBSCRIBE:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isSubmitting: true,\n        hasSubmitted: false,\n        hasError: false,\n        error: null,\n        data: payload\n      })\n    case SUBSCRIBE_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        error: payload.message,\n        isSubmitting: false,\n        hasSubmitted: false,\n        didInvalidate: true\n      })\n    case SUBSCRIBE_SUCCESS:\n      return Object.assign({}, state, {\n        isSubmitting: false,\n        hasSubmitted: true,\n        didInvalidate: false\n      })\n    default:\n      return state\n  }\n}\n","/**\n * Hook that returns false while the page is being hydrated, and true when rendering starts\n * @returns Boolean\n */\nimport React from 'react'\n\nfunction useHasMounted () {\n  const [hasMounted, setHasMounted] = React.useState(false)\n  React.useEffect(() => {\n    setHasMounted(true)\n  }, [])\n  return hasMounted\n}\n\nexport default useHasMounted\n","import React from 'react'\nimport { useLocation } from 'react-router-dom'\nimport styled, { x } from '@xstyled/styled-components'\nimport { errorPageView } from '../../store/app'\nimport { connect } from 'react-redux'\nimport { bindActionCreators } from 'redux'\nimport { useCookie } from '../components/ui/utils'\n\nconst ReloadButton = styled.button`\n  text-transform: uppercase;\n  padding: 10px 20px;\n  color: #FFF;\n  background-color: grey;\n  transition: all linear .3s;\n  &:hover {\n    background-color: black;\n    color: #FFF;\n  }`\n\n\n\nconst ErrorBoundaryErrorPage = (props) => {\n  const location = useLocation()\n  const [errorRetry, setErrorRetry] = useCookie('errorRetry', 0)\n\n  React.useEffect(()=>{\n    props.errorPageView(location.pathname)\n  }, [])\n\n  if (parseInt(errorRetry) < 2) {\n    setErrorRetry(parseInt(errorRetry) + 1, {seconds: 15})\n    window.location.reload(true)\n    return null;\n  }\n  return (\n    <>\n      <x.main p={20} mt={{ sm: '96px', lg: '173px' }} w='100%' maxWidth={500} mx='auto' display='flex' justifyContent='center' alignItems='center' flexDirection='column' h='100vh'>\n        <x.h1 text='h1' pb={20}>OOPS!</x.h1>\n        <x.h3 text='h4' pb={10} mb={20}>Something went wrong</x.h3>\n        <x.p text='p' mb={20} textAlign='center'>{props.error.toString()}</x.p>\n        <ReloadButton onClick={() => {\n          return window.location.reload()\n        }}\n        >Reload Page\n        </ReloadButton>\n      </x.main>\n    </>\n  )\n}\n\nconst mapStateToProps = (state) => state\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ errorPageView }, dispatch)\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorBoundaryErrorPage)\n","module.exports = __webpack_public_path__ + \"static/media/rss-wht.74af5e36.svg\";","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_AUTHORS = 'api/FETCH_AUTHORS'\nexport const FETCH_AUTHORS_SUCCESS = 'api/FETCH_AUTHORS_SUCCESS'\nexport const FETCH_AUTHORS_ERROR = 'api/FETCH_AUTHORS_ERROR'\nexport const FETCH_AUTHORS_NOT_FOUND = 'api/FETCH_AUTHORS_NOT_FOUND'\n\nconst SERVER_AUTHORS_URL = typeof window !== 'undefined' ? '/data/content/authors/iol' : process.env.RAZZLE_CONTENT + '/authors/iol'\n\nconst section = 'authors'\nconst cache = Cache()\n\nexport async function fetchAuthorsAPI (authorsSlug) {\n  const result = await cache.get(section)\n  if (result) {\n    return result\n  }\n  return axios.get(SERVER_AUTHORS_URL)\n    .then(response => {\n      return cache.set(section, response.data)\n    })\n    .catch(err => {\n      throw err\n    })\n}\n\nfunction * fetchAuthorsSaga ({ authorsSlug }) {\n  try {\n    const res = yield call(fetchAuthorsAPI, authorsSlug)\n    yield put({ type: FETCH_AUTHORS_SUCCESS, payload: res })\n  } catch (e) {\n    yield put({ type: FETCH_AUTHORS_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchAuthors () {\n  yield takeLatest(FETCH_AUTHORS, fetchAuthorsSaga)\n}\n\nexport const fetchAuthors = (authorsSlug) => ({ type: FETCH_AUTHORS, isFetching: true, hasFetched: false, authorsSlug })\n\nexport const initialState = {\n  didInvalidate: false,\n  lastFetch: 0,\n  isFetching: false,\n  hasFetched: false,\n  hasError: false,\n  is404: false,\n  error: null,\n  authors: null\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  switch (type) {\n    case FETCH_AUTHORS:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        is404: false,\n        hasError: false,\n        error: null\n      })\n    case FETCH_AUTHORS_NOT_FOUND:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: true,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        authors: null\n      })\n    case FETCH_AUTHORS_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        is404: false,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n    case FETCH_AUTHORS_SUCCESS:\n      return Object.assign({}, state, {\n        lastFetch: new Date(),\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        authors: payload,\n        hasError: false,\n        is404: false,\n        error: null\n      })\n    default:\n      return state\n  }\n}\n","import Dexie from 'dexie'\n\nexport const db = new Dexie('pushDatabase')\nexport const bm = new Dexie('bookmarksDatabase')\n\ndb.version(1).stores({\n  messages: '++id, uuid, timestamp'\n})\n\nbm.version(1).stores({\n  messages: '++id, uuid, article'\n})\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.setDefaultWidth = exports.getDefaultWidth = exports.defaultWidth = exports.TabletMobile = exports.Tablet = exports.MobileElse = exports.Mobile = exports.HagDesktop = exports.GqGlamDesktop = exports.DesktopTablet = exports.DesktopElse = exports.Desktop = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactResponsive = _interopRequireDefault(require(\"react-responsive\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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\n// Default rendering to mobile\nvar defaultWidth = 760;\nexports.defaultWidth = defaultWidth;\n\nvar setDefaultWidth = function setDefaultWidth(width) {\n  exports.defaultWidth = defaultWidth = width;\n};\n\nexports.setDefaultWidth = setDefaultWidth;\n\nvar getDefaultWidth = function getDefaultWidth() {\n  return defaultWidth;\n};\n\nexports.getDefaultWidth = getDefaultWidth;\n\nvar Desktop = function Desktop(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 992,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.Desktop = Desktop;\n\nvar GqGlamDesktop = function GqGlamDesktop(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 1330,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.GqGlamDesktop = GqGlamDesktop;\n\nvar HagDesktop = function HagDesktop(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 1500,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.HagDesktop = HagDesktop;\n\nvar DesktopTablet = function DesktopTablet(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 768,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.DesktopTablet = DesktopTablet;\n\nvar Tablet = function Tablet(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 768,\n    maxWidth: 992,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.Tablet = Tablet;\n\nvar TabletMobile = function TabletMobile(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    maxWidth: 992,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.TabletMobile = TabletMobile;\n\nvar Mobile = function Mobile(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    maxWidth: 767,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.Mobile = Mobile;\n\nvar DesktopElse = function DesktopElse(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    maxWidth: 992,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.DesktopElse = DesktopElse;\n\nvar MobileElse = function MobileElse(props) {\n  return /*#__PURE__*/_react[\"default\"].createElement(_reactResponsive[\"default\"], _extends({}, props, {\n    minWidth: 768,\n    values: {\n      deviceWidth: defaultWidth\n    }\n  }));\n};\n\nexports.MobileElse = MobileElse;","module.exports = __webpack_public_path__ + \"static/media/instagram-wht.08ed7500.svg\";","import styled, { css, system } from '@xstyled/styled-components'\nimport { Link } from 'react-router-dom'\nimport ionPostAnalytics from '../../../lib/ionPostAnalytics'\nimport { getPageType } from '../../../store/app'\n\nconst MyLink = ({ className, id, to, key, replace, onClick, children, visitorId, sessionId, section, source, dataAuthor }) => {\n  if (typeof window !== 'undefined' && source !== undefined) {\n    const locationUrl = window.location.href\n    const destinationUrl = to\n    const referrerUrl = window.document.referrer\n    const scrollDepth = window.scrollY\n    const _eventData = { source, destinationUrl, referrerUrl, scrollDepth }\n    if (section) {\n      _eventData.section = section\n    }\n    const onClickAnayltics = () => {\n      ionPostAnalytics('navigation', getPageType(), visitorId, process.env.RAZZLE_TITLE_KEY, sessionId, locationUrl, _eventData)\n      if (onClick) {\n        onClick()\n      }\n    }\n    return (\n      <Link key={key} id={id} to={to} replace={replace} onClick={onClickAnayltics} className={className} data-author={dataAuthor}>{children}</Link>\n    )\n  }\n  return (\n    <Link key={key} id={id} to={to} replace={replace} onClick={onClick} className={className} data-author={dataAuthor}>{children}</Link>\n  )\n}\n\nconst StyledLink = styled(MyLink)(\n  ({ color, hoverColor }) => css`\n  ${system}\n    color: ${color || '#474747'};\n    &.active {\n      color: #B41400;\n      &::after {\n        content: '';\n        position: absolute;\n        background: #B41400;\n        bottom: -10px;\n        left: 0;\n        height: 3px;\n        width: 100%;\n      }\n    }\n    &:hover {\n    * {\n      color: ${hoverColor || '#000'};\n    }\n  }\n  `\n)\n\nexport default StyledLink\n","const getCircularReplacer = () => {\n  const seen = new WeakSet()\n  return (key, value) => {\n    if (typeof value === 'object' && value !== null) {\n      if (seen.has(value)) {\n        return\n      }\n      seen.add(value)\n    }\n    return value\n  }\n}\n\nexport function deepCompare (a, b) {\n  return JSON.stringify(a, getCircularReplacer()) === JSON.stringify(b, getCircularReplacer())\n}\n\nexport default deepCompare\n","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_TRENDS_LIST = 'api/FETCH_TRENDS_LIST'\nexport const FETCH_TRENDS_LIST_SUCCESS = 'api/FETCH_TRENDS_LIST_SUCCESS'\nexport const FETCH_TRENDS_LIST_ERROR = 'api/FETCH_TRENDS_LIST_ERROR'\n\nconst SERVER_TRENDS_URL = typeof window !== 'undefined' ? '/data/content/trends/iol' : process.env.RAZZLE_CONTENT + '/trends/iol'\nconst section = 'trends'\nconst cache = Cache()\n\nasync function fetchTrendsListApi () {\n  const result = await cache.get(section)\n  if (result) {\n    return result\n  }\n  return axios.get(SERVER_TRENDS_URL)\n    .then(response => {\n      return cache.set(section, response.data)\n    })\n    .catch(err => {\n      throw err\n    })\n}\n\nfunction * fetchTrendsListSaga () {\n  try {\n    const res = yield call(fetchTrendsListApi)\n    let payload = {}\n    if (res) {\n      payload = {\n        lastFetch: new Date(),\n        trends: res\n      }\n    }\n    yield put({ type: FETCH_TRENDS_LIST_SUCCESS, payload })\n  } catch (e) {\n    yield put({ type: FETCH_TRENDS_LIST_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchFetchTrendsList () {\n  yield takeLatest(FETCH_TRENDS_LIST, fetchTrendsListSaga)\n}\n\n// Saga actions\nexport const fetchTrendsList = () => ({ type: FETCH_TRENDS_LIST })\n\nconst initialState = {\n  didInvalidate: false,\n  isFetching: false,\n  hasFetched: false,\n  hasError: false,\n  error: null,\n  trends: []\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  let newPayload = {}\n  switch (type) {\n    case FETCH_TRENDS_LIST:\n      newPayload = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_TRENDS_LIST_ERROR:\n      newPayload = Object.assign({}, state[section], {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_TRENDS_LIST_SUCCESS:\n      newPayload = Object.assign({}, state[section], {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        trends: payload.trends,\n        lastFetch: payload.lastFetch\n      })\n      return Object.assign({}, state, newPayload)\n    default:\n      return state\n  }\n}\n","import React, { useState, useEffect } from 'react'\nimport { x } from '@xstyled/styled-components'\nimport articleShare from '../../../assets/images/social-media/share.svg'\nimport { checkPropTypes } from 'prop-types'\n\nconst MobileArticleShare = ({link, w, h}) => {\n  const [navigatorSharePresent, setNavigatorSharePresent] = useState(false)\n  useEffect(() => {\n    if (navigator.canShare) {\n      setNavigatorSharePresent(true)\n    }\n  })\n  const handleShareButton = (url) => {\n    navigator\n      .share({\n        url: url\n      })\n      .then(() => {\n        console.log(\"Sharing successfull\")\n      })\n      .catch(() => {\n        console.log(\"Sharing failed\")\n      })\n  }\n  return (\n    <>\n      {navigatorSharePresent &&\n        <x.img src={articleShare} w={w} h={h} onClick={() => handleShareButton(process.env.RAZZLE_SITE_URL + link)} title='Share Article' alt='Share Article' />\n      }\n    </>\n  )\n}\n\nexport default MobileArticleShare\n","import React from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { x } from '@xstyled/styled-components'\nimport StyledLink from '../components/ui/Link'\n\nimport cssfxUnderline from '../components/ui/cssfxUnderline'\nimport Ad from '../components/Ad'\nimport FORMATS from '../components/AdFormats'\n\nimport logoWht from '../../../assets/images/general/iol-wht.svg'\nimport facebookWht from '../../../assets/images/social-media/facebook-wht.svg'\nimport youtubeWht from '../../../assets/images/social-media/youtube-wht.svg'\nimport instagramWht from '../../../assets/images/social-media/instagram-wht.svg'\nimport rssWht from '../../../assets/images/social-media/rss-wht.svg'\nimport twitterWht from '../../../assets/images/social-media/x-wht.svg'\nimport googlePlay from '../../../assets/images/icons/google-play.svg'\nimport appStore from '../../../assets/images/icons/app-store.svg'\nimport tiktokGrey from '../../../assets/images/icons/tiktok.svg'\n\nconst Sticky = [\n  [[1024, 0], []],\n  [[640, 0], [[320, 100], [320, 50], [300, 100], [300, 50], 'fluid']],\n  [[0, 0], [[320, 100], [320, 50], [300, 100], [300, 50], 'fluid']]\n]\n\nconst Footer = (props) => {\n  const location = useLocation()\n  const isArticlePage = !!location.pathname.match(/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|([0-9]{5,})$/)\n  const adPath = `${props.adPath || (isArticlePage ? location.pathname : ((location.pathname === '/' ? '' : location.pathname) + '/homepage'))}`\n  const clickSource = 'Footer'\n  return (\n    <>\n      <x.div bg='advert' textAlign='center' display={{ sm: 'flex', xl: 'none' }} visibility={{ sm: 'visible', xl: 'hidden' }} justifyContent='center' alignItems='center' flexDirection='column' position='fixed' bottom='0' w='100%' p={10} zIndex='10'>\n        <Ad isConnected={props.isConnected} adPath={adPath} slotId='Mobile-Leaderboard-sticky' targeting={{ 'Mobile-Leaderboard': 'sticky' }} mapping={Sticky} className='advert' {...FORMATS.mobileLeaderboardSticky} />\n      </x.div>\n      <x.footer w='100%' backgroundColor='grey' display='flex' flexDirection='column' alignItems='center' justifyContent='center' py={20} px={20} pt={50} pb={{ sm: '72', lg: '0' }}>\n        <x.div w='100%' maxWidth='1220px' display='grid' gridTemplateColumns={{ sm: 'repeat(2, 50%)', lg: 'repeat(4, calc((100% - 120px) / 4))' }} gap={{ sm: '0', lg: '40' }} alignContent='center' color='white'>\n          <x.div position='relative' className='divider-right-footer' p={{ sm: '0 0 20px 0', lg: '0' }} mb={{ sm: '20px', lg: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0' }} borderStyle='solid' borderColor='whiteAlpha' gridColumn={{ sm: '1 / span 2', lg: 'unset' }} w='100%'>\n            <x.img src={logoWht} w={100} mb={20} alt='IOL' />\n            <x.p text='small'>Independent Online, popularly known as IOL, is one of South Africa’s leading news and information websites bringing millions of readers breaking news and updates on Politics, Current Affairs, Business, Lifestyle, Entertainment, Travel, Sport, Motoring and Technology. <StyledLink color='white' to='/about-iol' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}><cssfxUnderline.SweepOut hoverBGColor='ltBlue' hoverColor='ltBlue'>Read more</cssfxUnderline.SweepOut></StyledLink></x.p>\n            <x.div display='flex' flexDirection='row' mt={20}>\n              <x.a href='https://www.facebook.com/IOLnews' target='_blank' mr={10}><img src={facebookWht} alt='Like us on Facebook' /></x.a>\n              <x.a href='https://www.twitter.com/IOL' target='_blank' mr={10}><img src={twitterWht} alt='Follow us on Twitter' /></x.a>\n              <x.a href='https://www.instagram.com/iolnews' target='_blank' mr={10}><img src={instagramWht} alt='Follow us on Instagram' /></x.a>\n              <x.a href='https://www.tiktok.com/@iolnews' target='_blank' mr={10}><img src={tiktokGrey} alt='Follow us on TikTok' /></x.a>\n              <x.a href='https://www.youtube.com/channel/UCeQFd7S6urAw6mm0kS4xuhg' target='_blank' mr={10}><img src={youtubeWht} alt='Subscribe to us on Youtube' /></x.a>\n              <x.a href='/rss' mr={10}><img src={rssWht} alt='Subscribe to our RSS feeds' /></x.a>\n            </x.div>\n          </x.div>\n          <x.div position='relative' className='divider-right-footer' text='small' borderWidth={{ sm: '0 1px 0 0', lg: '0' }} borderStyle='solid' borderColor='whiteAlpha' gridColumn={{ sm: '1 / 2', lg: 'unset' }} pr={20} mb={20}>\n            <x.h6 text='footerH6'>Sections on IOL</x.h6>\n            <x.nav role='navigation' aria-label='Sections on IOL' mt={20}>\n              <x.ul>\n                <x.li mb={3}><StyledLink color='white' to='/news' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>News</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/lifestyle' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Lifestyle</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/entertainment' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Entertainment</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/travel' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Travel</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/business' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Business</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/property' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Property</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/sport' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Sport</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/motoring' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Motoring</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/opinion' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Opinion</StyledLink></x.li>\n                {/* <x.li mb={3}><StyledLink color='white' to='/video' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Video</StyledLink></x.li> */}\n              </x.ul>\n            </x.nav>\n          </x.div>\n          <x.div position='relative' className='divider-right-footer' text='small' gridColumn={{ sm: '2 / 2', lg: 'unset' }} pl={20} mb={20}>\n            <x.h6 text='footerH6'>More on IOL</x.h6>\n            <x.nav role='navigation' aria-label='More on IOL' mt={20}>\n              <x.ul>\n                <x.li mb={3}><StyledLink color='white' to='/about-iol' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>About IOL</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/contact-us' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Contact Us</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/news/weather' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Weather</StyledLink></x.li>\n                <x.li mb={3} display={{ lg: 'none' }} visibility={{ lg: 'hidden' }}><StyledLink color='white' to='/my-news' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>My News</StyledLink></x.li>\n                <x.li mb={3} display={{ lg: 'none' }} visibility={{ lg: 'hidden' }}><StyledLink color='white' to='/my-bookmarks' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Bookmarks</StyledLink></x.li>\n                {/* <x.li mb={3}><StyledLink color='white' to='/newspapers' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Newspapers Highlights</StyledLink></x.li>\n                <x.li mb={3}><StyledLink color='white' to='/newspapers-contacts' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Newspapers Contacts</StyledLink></x.li> */}\n                <x.li mb={3}><StyledLink color='white' to='/my-notifications' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Manage My Notifications</StyledLink></x.li>\n              </x.ul>\n            </x.nav>\n          </x.div>\n          <x.div text='small' p={{ sm: '20px 0 0', lg: '0' }} gridColumn={{ sm: '1 / span 2', lg: 'unset' }} borderWidth={{ sm: '1px 0 0 0', lg: '0' }} borderStyle='solid' borderColor='whiteAlpha' display={{ sm: 'grid', lg: 'unset' }} gridTemplateColumns={{ sm: 'repeat(2, calc((100% - 40px) / 2))', lg: '100%' }} gap={{ sm: '40', lg: '0' }}>\n            <x.div>\n              <x.h6 text='footerH6'>Subscribe</x.h6>\n              <x.nav role='navigation' aria-label='Subscribe' mt={20}>\n                <x.ul>\n                  {/* <x.li mb={3}><StyledLink color='white' to='/newspapers' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Independent Media</StyledLink></x.li> */}\n                  <x.li><StyledLink color='white' to='/newsletters' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Email Newsletter</StyledLink></x.li>\n                </x.ul>\n              </x.nav>\n            </x.div>\n            <x.div mt={30}>\n              <x.a href='https://play.google.com/store/apps/details?id=com.iol.news&hl=en_ZA&gl=US' target='_blank'><x.img src={googlePlay} alt='Get the IOL app on Google Play' /></x.a>\n              <x.a href='https://apps.apple.com/za/app/iol-news/id479535200' target='_blank'><x.img src={appStore} alt='Get the IOL app on the App Store' mt={10} /></x.a>\n            </x.div>\n          </x.div>\n        </x.div>\n        <x.div w='100%' maxWidth='1220px' mt={20} py={20} display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 500px) minmax(min-content, 720px)' }} gap={{ lg: '40' }} alignContent='center' color='white' borderWidth='1px 0 0 0' borderStyle='solid' borderColor='whiteAlpha'>\n          <x.div>\n            <x.p text='xsmall'>&copy; {new Date().toLocaleDateString('en-ZA', { year: 'numeric' })} Independent Online and affiliated companies. All rights reserved.</x.p>\n          </x.div>\n          <x.div display='flex' alignContent='center' justifyContent={{ lg: 'space-between' }} mt={{ sm: '10px', lg: '0' }} text='xsmall' spaceX={{ lg: '10' }} flexWrap={{ sm: 'wrap', lg: 'nowrap' }}>\n            <StyledLink color='white' to='/press-code' text='footer-lnk' mr={{ sm: '10' }} sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Press Code</StyledLink>\n            <StyledLink color='white' to='/privacy-policy' text='footer-lnk' mr={{ sm: '10' }} sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Privacy Policy</StyledLink>\n            <StyledLink color='white' to='/terms-and-conditions' text='footer-lnk' mr={{ sm: '10' }} sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Terms &amp; Conditions</StyledLink>\n            <StyledLink color='white' to='/advertising' text='footer-lnk' mr={{ sm: '10' }} sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Advertise with us</StyledLink>\n            <StyledLink color='white' to='/feedback' text='footer-lnk' mr={{ sm: '10' }} sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Feedback</StyledLink>\n            <StyledLink color='white' to='/complaints' text='footer-lnk' sessionId={props.sessionId} visitorId={props.visitorId} section={props.section} source={clickSource}>Complaints Procedure</StyledLink>\n          </x.div>\n        </x.div>\n      </x.footer>\n    </>\n  )\n}\n\nexport default Footer\n","module.exports = __webpack_public_path__ + \"static/media/close-btn.323b7e3b.svg\";","module.exports = __webpack_public_path__ + \"static/media/rss-menu.4b09e376.svg\";","module.exports = __webpack_public_path__ + \"static/media/app-store.ae2ce25f.svg\";","import axios from 'axios'\nimport { call, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\n\nexport const FETCH_TRENDING_ARTICLES = 'api/FETCH_TRENDING_ARTICLES'\nexport const FETCH_TRENDING_ARTICLES_SUCCESS = 'api/FETCH_TRENDING_ARTICLES_SUCCESS'\nexport const FETCH_TRENDING_ARTICLES_ERROR = 'api/FETCH_TRENDING_ARTICLES_ERROR'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/trending-articles/iol' : process.env.RAZZLE_CONTENT + '/trending-articles/iol'\nconst section = 'trendingarticles'\nconst cache = Cache()\n\nasync function fetchArticlesAPI () {\n  const result = await cache.get(section)\n  if (result) {\n    return result\n  }\n  return axios.get(SERVER_URL)\n    .then(response => {\n      return cache.set(section, response.data)\n    })\n    .catch(err => {\n      throw err\n    })\n}\n\nfunction * fetchTrendingArticlesSaga () {\n  try {\n    const res = yield call(fetchArticlesAPI)\n    let payload = {}\n    if (res) {\n      payload = {\n        lastFetch: new Date(),\n        hasMore: false,\n        articles: res.contents,\n        sectionsLabels: res.sectionsLabels\n      }\n    }\n    yield put({ type: FETCH_TRENDING_ARTICLES_SUCCESS, payload })\n  } catch (e) {\n    yield put({ type: FETCH_TRENDING_ARTICLES_ERROR, payload: e.message })\n  }\n}\n\nexport function * watchTrendingArticles () {\n  yield takeLatest(FETCH_TRENDING_ARTICLES, fetchTrendingArticlesSaga)\n}\n\n// Saga actions\nexport const fetchTrendingArticles = () => ({ type: FETCH_TRENDING_ARTICLES })\n\nconst initialState = {\n  trendingarticles: {\n    didInvalidate: false,\n    isFetching: false,\n    hasFetched: false,\n    hasError: false,\n    error: null,\n    articles: [], // do not mutate these\n    sectionsLabels: []\n  }\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  const newPayload = {}\n  switch (type) {\n    case FETCH_TRENDING_ARTICLES:\n      newPayload[section] = Object.assign({}, state[section], {\n        didInvalidate: false,\n        isFetching: true,\n        hasFetched: false,\n        hasError: false,\n        error: null\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_TRENDING_ARTICLES_ERROR:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasError: true,\n        error: payload,\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: true\n      })\n      return Object.assign({}, state, newPayload)\n    case FETCH_TRENDING_ARTICLES_SUCCESS:\n      newPayload[section] = Object.assign({}, state[section], {\n        hasFetched: true,\n        isFetching: false,\n        didInvalidate: false,\n        articles: payload.articles,\n        hasMore: payload.hasMore,\n        lastFetch: payload.lastFetch,\n        sectionsLabels: payload.sectionsLabels\n      })\n      return Object.assign({}, state, newPayload)\n    default:\n      return state\n  }\n}\n","module.exports = __webpack_public_path__ + \"static/media/x.d9c40b69.svg\";","import axios from 'axios'\nimport { call, put, takeEvery } from 'redux-saga/effects'\n\nexport const INITIALISE = 'api/INITIALISE'\nexport const FEEDBACK = 'api/FEEDBACK'\nexport const FEEDBACK_SUCCESS = 'api/FEEDBACK_SUCCESS'\nexport const FEEDBACK_ERROR = 'api/FEEDBACK_ERROR'\nexport const UPDATE_DATA = 'api/UPDATE_DATA'\n\nconst SERVER_URL = typeof window !== 'undefined' ? '' : 'http://localhost:' + process.env.PORT\n\nconst feedbackAPI = (data) => {\n  return axios.post(SERVER_URL + '/data/feedback/submit', data)\n    .then(response => response.data)\n    .catch(err => {\n      // console.error(err)\n      throw err\n    })\n}\n\nfunction * feedbackSaga ({ data }) {\n  try {\n    yield call(feedbackAPI, data)\n    yield put({ type: FEEDBACK_SUCCESS })\n  } catch (e) {\n    console.error('ERROR while submitting', e.message)\n    yield put({ type: FEEDBACK_ERROR, payload: { message: e.message } })\n  }\n}\n\nexport function * watchFeedback () {\n  yield takeEvery(FEEDBACK, feedbackSaga)\n}\n\n// Saga actions\nexport const initialise = (data) => ({ type: INITIALISE, data })\nexport const submitFeedback = (data) => ({ type: FEEDBACK, data })\nexport const updateForm = (data) => ({ type: UPDATE_DATA, payload: data })\n\nexport const initialState = {\n  fullName: '',\n  phone: '',\n  email: '',\n  enquiryType: 'general',\n  message: '',\n  output: '',\n  captchaVerified: false\n}\n\nexport const Reducer = (state = initialState, { type, payload }) => {\n  switch (type) {\n    case UPDATE_DATA:\n      return Object.assign({}, state, payload)\n    case INITIALISE:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isSubmitting: false,\n        hasSubmitted: false,\n        hasError: false,\n        error: null\n      })\n    case FEEDBACK:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isSubmitting: true,\n        hasSubmitted: false,\n        hasError: false,\n        error: null,\n        data: payload\n      })\n    case FEEDBACK_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        error: payload.message,\n        hasSubmitted: true,\n        isSubmitting: false,\n        didInvalidate: true\n      })\n    case FEEDBACK_SUCCESS:\n      return Object.assign({}, state, {\n        hasSubmitted: true,\n        isSubmitting: false,\n        didInvalidate: false\n      })\n    default:\n      return state\n  }\n}\n","import React, { useEffect } from 'react'\nimport { bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { setSubscription } from '../store/app'\nimport { Workbox } from 'workbox-window'\n\nlet _registration = false\n\nexport function urlB64ToUint8Array (base64String) {\n  const padding = '='.repeat((4 - base64String.length % 4) % 4)\n  const base64 = (base64String + padding)\n    .replace(/-/g, '+')\n    .replace(/_/g, '/')\n\n  const rawData = window.atob(base64)\n  const outputArray = new Uint8Array(rawData.length)\n\n  for (let i = 0; i < rawData.length; ++i) {\n    outputArray[i] = rawData.charCodeAt(i)\n  }\n  return outputArray\n}\n\nconst ServiceWorkerNotifications = ({ wb, ...props }) => {\n  useEffect(() => {\n    if (typeof window !== 'undefined' && 'serviceWorker' in navigator) {\n      wb = new Workbox('/sw.js')\n      console.log('Workbox initialised')\n      wb.addEventListener('activated', (event) => {\n        console.log('ServiceWorker: (activated) ServiceWorker activated', event)\n        // `event.isUpdate` will be true if another version of the service\n        // worker was controlling the page when this version was registered.\n        if (!event.isUpdate) {\n          console.log('This site is now available offline')\n          // this.setState({\n          //   wbMessage: 'This site is now available offline'\n          // })\n          // If your service worker is configured to precache assets, those\n          // assets should all be available now.\n        } else {\n          console.log('ServiceWorker: (activated) This site has been updated')\n        }\n      })\n      wb.addEventListener('message', (event) => {\n        if (event.data.type === 'CACHE_UPDATED') {\n          const { updatedURL } = event.data.payload\n          console.log(`ServiceWorker: (message) A newer version of ${updatedURL} is available!`)\n          // this.setState({\n          //   wbMessage: `A newer version of ${updatedURL} is available!`\n          // })\n        }\n        // if (event.data.type === 'NAVIGATE') {\n        //   const updatedURL = event.data.payload\n        //   props.history.push(updatedURL)\n        // }\n      })\n      wb.addEventListener('waiting', (event) => {\n        console.log('ServiceWorker: (waiting) A newer version of this site is available! Please reload your page to activate it.')\n      })\n\n      wb.register().then(registration => {\n        _registration = registration\n        props.setSubscription(false)\n      })\n    }\n  }, [])\n  return null\n}\n\nexport function getRegistration () {\n  return _registration\n}\n\nlet wb\n\nconst ServiceWorker = (props) => {\n  return (\n    <ServiceWorkerNotifications wb={wb} {...props} />\n  )\n}\n\nconst mapStateToProps = (state) => (state.app)\nconst mapDispatchToProps = (dispatch) => bindActionCreators({ setSubscription }, dispatch)\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ServiceWorker)\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DoNothingCache = undefined;\n\nvar _cache = require('./src/cache');\n\nvar _cache2 = _interopRequireDefault(_cache);\n\nvar _memoryCache = require('./src/memory-cache');\n\nvar _memoryCache2 = _interopRequireDefault(_memoryCache);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _memoryCache2.default;\nexports.DoNothingCache = _cache2.default;","module.exports = __webpack_public_path__ + \"static/media/search-input-wht-ico.944fa476.svg\";","import { x } from '@xstyled/styled-components'\nimport { Tab } from './ui/Tabs'\nimport ImageOrNoImage from './ui/Image'\nimport { getImageSize } from '../../lib/articleUtils'\nimport NoImage from '../../../assets/images/general/no-image.png'\nimport WeatherWidget from './WeatherWidget'\n\nexport const TvBoxSkeleton = () => (\n  <>\n    <x.div display='flex' flexDirection='column' position='relative' className='divider-right' p={{ sm: '0 0 20px 0', lg: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0' }} borderStyle='solid' borderColor='divider'>\n      <x.article pb={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <ImageOrNoImage width={getImageSize('hero')} shape='16x9' mb={10} noImage={NoImage} />\n        <x.div h={7} mb={5} bg='#F0F0F0' />\n        <x.div h={7} mb={5} bg='#F0F0F0' />\n        <x.div w='33%' h={8} bg='#F0F0F0' />\n        <x.div h={3} bg='#F0F0F0' my={8} />\n        <x.div h={5} mb={3} bg='#F0F0F0' />\n        <x.div h={5} bg='#F0F0F0' />\n      </x.article>\n      <x.article pt={20} display='flex' spaceX={{ sm: '0', xl: '10px' }} flexDirection={{ sm: 'column-reverse', xl: 'row' }}>\n        <x.div flex='1 1 0'>\n          <x.div h={5} mb={5} bg='#F0F0F0' />\n          <x.div h={5} mb={5} bg='#F0F0F0' />\n          <x.div w='33%' h={5} bg='#F0F0F0' />\n          <x.div my={8} h={3} bg='#F0F0F0' />\n          <x.div h={4} bg='#F0F0F0' />\n        </x.div>\n        <x.div mb={{ sm: '10', xl: '0' }}>\n          <ImageOrNoImage width={getImageSize('primary')} shape='16x9' noImage={NoImage} />\n        </x.div>\n      </x.article>\n    </x.div>\n    <x.div position='relative' p={{ sm: '20px 0', lg: '0' }} className='divider-right' borderWidth='0'>\n      <x.article pb={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' display='flex' spaceX={10}>\n        <x.div flex='1 1 0'>\n          <x.div h={5} mb={5} bg='#F0F0F0' />\n          <x.div w='33%' h={5} bg='#F0F0F0' />\n          <x.div my={8} h={3} bg='#F0F0F0' />\n        </x.div>\n        <x.div>\n          <ImageOrNoImage width={getImageSize('normal')} shape='square' noImage={NoImage} />\n        </x.div>\n      </x.article>\n      <x.article py={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' display='flex' spaceX={10}>\n        <x.div flex='1 1 0'>\n          <x.div h={5} mb={5} bg='#F0F0F0' />\n          <x.div w='33%' h={5} bg='#F0F0F0' />\n          <x.div my={8} h={3} bg='#F0F0F0' />\n        </x.div>\n        <x.div>\n          <ImageOrNoImage width={getImageSize('normal')} shape='square' noImage={NoImage} />\n        </x.div>\n      </x.article>\n      <x.article py={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <x.div h={5} mb={5} bg='#F0F0F0' />\n        <x.div w='33%' h={5} bg='#F0F0F0' />\n        <x.div my={8} h={3} bg='#F0F0F0' />\n      </x.article>\n      <x.article py={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <x.div h={5} mb={5} bg='#F0F0F0' />\n        <x.div w='33%' h={5} bg='#F0F0F0' />\n        <x.div my={8} h={3} bg='#F0F0F0' />\n      </x.article>\n      <x.article py={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <x.div h={5} mb={5} bg='#F0F0F0' />\n        <x.div w='33%' h={5} bg='#F0F0F0' />\n        <x.div my={8} h={3} bg='#F0F0F0' />\n      </x.article>\n      <x.article pt={20}>\n        <x.div h={5} mb={5} bg='#F0F0F0' />\n        <x.div w='33%' h={5} bg='#F0F0F0' />\n        <x.div my={8} h={3} bg='#F0F0F0' />\n      </x.article>\n    </x.div>\n  </>\n)\n\nexport const MostReadArticlesSkeleton = (props) => (\n  Array(5).fill().map((v, i) =>\n    <x.article key={i} pb={{ _: '20px', lastType: '0' }} mb={{ _: '20px', lastType: '0' }} borderWidth={{ _: '0 0 1px 0', lastType: '0' }} borderStyle='solid' borderColor='divider'>\n      <x.div h={5} mb={5} bg='#F0F0F0'></x.div>\n      <x.div w='33%' h={5} bg='#F0F0F0'></x.div>\n    </x.article>\n  )\n)\n\nexport const MostReadWidgetSkeleton = () => {\n  return (\n    <>\n      <Tab.List ariaLabel='Tabs' bg='ltGrey' px={15} py={8} mb={20} display='flex' justifyContent='space-between' flexWrap='nowrap'>\n        <Tab.Tab id='most-read'>\n          Most Read\n        </Tab.Tab>\n        <Tab.Tab id='editors-choice'>\n          Editor's Choice\n        </Tab.Tab>\n      </Tab.List>\n      <Tab.Panel id='most-read' pb={20} mb={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <MostReadArticlesSkeleton />\n      </Tab.Panel>\n      <Tab.Panel id='editors-choice' pb={20} mb={20} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n        <div />\n      </Tab.Panel>\n    </>\n  )\n}\n\nexport const HomepageSkeleton = () => {\n  return (\n    <>\n      <x.div w='100%' maxWidth={1220} mx='auto' display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 560px) minmax(min-content, 282px) 300px' }} gap={{ lg: '40' }} mt={50} mb={30}>\n        <TvBoxSkeleton />\n        <x.aside>\n          <MostReadWidgetSkeleton />\n          <x.div textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column' p={{ sm: '20px', lg: '0' }}>\n            <x.div w={300} h={250} bg='#D3D3D340' />\n          </x.div>\n        </x.aside>\n      </x.div>\n      {/* <TrendsBar />\n      <x.div my={50} mx={-20} textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column'>\n        <x.div w={970} h={250} bg='#D3D3D340' />\n      </x.div>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <SixArticleDeckSkeleton />\n        <ArticleDeckSkeleton />\n        <ThreeArticleDeckSkeleton />\n      </x.div> */}\n    </>\n  )\n}\n\nexport const DefaultSectionPageSkeleton = () => {\n  return (\n    <>\n      <x.div w='100%' maxWidth={1220} mx='auto' display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 560px) minmax(min-content, 282px) 300px' }} gap={{ lg: '40' }} mt={50} mb={30}>\n        <TvBoxSkeleton />\n        <x.aside>\n          <MostReadWidgetSkeleton />\n          <x.div textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column' p={{ sm: '20px', lg: '0' }}>\n            <x.div w={300} h={250} bg='#D3D3D340' />\n          </x.div>\n        </x.aside>\n      </x.div>\n      {/* <TrendsBar />\n      <x.div my={50} mx={-20} textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column'>\n        <x.div w={970} h={250} bg='#D3D3D340' />\n      </x.div>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <SixArticleDeckSkeleton />\n        <ArticleDeckSkeleton />\n        <ThreeArticleDeckSkeleton />\n      </x.div> */}\n    </>\n  )\n}\n\nexport const DefaultSectionPageSkeletonWrapper = () => (\n  <x.main mt={{ sm: '96px', lg: '172px' }} px={20}>\n    <x.div h={7}></x.div>\n    <DefaultSectionPageSkeleton />\n  </x.main>\n)\n\nexport const ArticleDeckSkeleton = () => {\n  return (\n    <x.div display={{ sm: '', lg: 'grid' }} animation='pulse' gridTemplateColumns={{ sm: '', lg: 'repeat(4, calc((100% - 120px) / 4))' }} gap={{ lg: '40' }}>\n      {Array(4).fill().map((v, i) =>\n        <x.article key={i} position='relative' className='divider-right' p={{ sm: '0 0 20px 0', lg: '0', lastType: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0', lastType: '0' }} borderStyle='solid' borderColor='divider' mb={{ sm: '20px', lg: '0', last: '0' }}>\n          <ImageOrNoImage width={getImageSize('slider')} shape='16x9' noImage={NoImage} />\n          <x.div>\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div w='33%' h={7} bg='#F0F0F0' />\n            <x.div my={8} h={3} bg='#F0F0F0' />\n          </x.div>\n        </x.article>\n      )}\n    </x.div>\n  )\n}\n\nexport const ThreeArticleDeckSkeleton = () => {\n  return (\n    <x.div display={{ sm: '', lg: 'grid' }} animation='pulse' gridTemplateColumns={{ sm: '', lg: 'repeat(4, calc((100% - 120px) / 4))' }} gap={{ lg: '40' }}>\n      {Array(4).fill().map((v, i) =>\n        <x.article key={i} position='relative' className='divider-right' p={{ sm: '0 0 20px 0', lg: '0', lastType: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0', lastType: '0' }} borderStyle='solid' borderColor='divider' mb={{ sm: '20px', lg: '0', last: '0' }}>\n          <ImageOrNoImage width={getImageSize('slider')} shape='16x9' noImage={NoImage} />\n          <x.div>\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div w='33%' h={7} bg='#F0F0F0' />\n            <x.div my={8} h={3} bg='#F0F0F0' />\n          </x.div>\n        </x.article>\n      )}\n    </x.div>\n  )\n}\n\nexport const ArticleFourRowSkeleton = () => {\n  return (\n    <x.div display={{ sm: '', lg: 'grid' }} gridTemplateColumns={{ sm: '', lg: 'repeat(4, calc((100% - 120px) / 4))' }} gap={{ lg: '40' }} mb={50}>\n      {Array(4).fill().map((v, i) =>\n        <x.article key={i} position='relative' className='divider-right' p={{ sm: '0 0 20px 0', lg: '0', lastType: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0', lastType: '0' }} borderStyle='solid' borderColor='divider' mb={{ sm: '20px', lg: '0', last: '0' }}>\n          <x.div display='flex' spaceY={10} flexDirection='column'>\n            <x.div>\n              <ImageOrNoImage w='100%' width={getImageSize('slider')} shape='16x9' noImage={NoImage} />\n            </x.div>\n            <x.div>\n              <x.div h={7} mb={5} bg='#F0F0F0' />\n              <x.div h={7} mb={5} bg='#F0F0F0' />\n              <x.div w='33%' h={7} bg='#F0F0F0' />\n              <x.div my={8} h={3} bg='#F0F0F0' />\n            </x.div>\n          </x.div>\n        </x.article>\n      )}\n    </x.div>\n  )\n}\n\nexport const SixArticleDeckSkeleton = (props) => {\n  return (\n    <x.div display={{ sm: '', lg: 'grid' }} animation='pulse' gridTemplateColumns={{ sm: '', lg: 'repeat(4, calc((100% - 120px) / 4))' }} gap={{ lg: '40' }}>\n      {Array(4).fill().map((v, i) =>\n        <x.article key={i} position='relative' className='divider-right' p={{ sm: '0 0 20px 0', lg: '0', lastType: '0' }} borderWidth={{ sm: '0 0 1px 0', lg: '0', lastType: '0' }} borderStyle='solid' borderColor='divider' mb={{ sm: '20px', lg: '0', last: '0' }}>\n          <ImageOrNoImage width={getImageSize('slider')} shape='16x9' noImage={NoImage} />\n          <x.div>\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div h={7} mb={5} bg='#F0F0F0' />\n            <x.div w='33%' h={7} bg='#F0F0F0' />\n            <x.div my={8} h={3} bg='#F0F0F0' />\n          </x.div>\n        </x.article>\n      )}\n    </x.div>\n  )\n}\n\nexport const TvBoxSectionPageSkeleton = () => {\n  return (\n    <>\n      <x.div w='100%' maxWidth={1220} mx='auto' display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 560px) minmax(min-content, 282px) 300px' }} gap={{ lg: '40' }} mt={50} mb={30}>\n        <TvBoxSkeleton />\n        <x.aside>\n          <MostReadWidgetSkeleton />\n          <x.div textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column' p={{ sm: '20px', lg: '0' }}>\n            <x.div w={300} h={250} bg='#D3D3D340' />\n          </x.div>\n        </x.aside>\n      </x.div>\n      {/* <TrendsBar />\n      <x.div my={50} mx={-20} textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column'>\n        <x.div w={970} h={250} bg='#D3D3D340' />\n      </x.div>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <SixArticleDeckSkeleton />\n        <ArticleDeckSkeleton />\n        <ThreeArticleDeckSkeleton />\n      </x.div> */}\n    </>\n  )\n}\n\nexport const TvBoxSectionPageSkeletonWrapper = () => (\n  <x.main mt={{ sm: '96px', lg: '172px' }} px={20}>\n    <x.div h={7}></x.div>\n    <TvBoxSectionPageSkeleton />\n  </x.main>\n)\n\nexport const WeatherPageSkeleton = () => {\n  return (\n    <>\n      <x.div w='100%' maxWidth={1220} mx='auto' display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 560px) minmax(min-content, 282px) 300px' }} gap={{ lg: '40' }} mt={50} mb={30}>\n        <WeatherWidget />\n      </x.div>\n      <x.div py={20} my={50} mx={-20} textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column'>\n        <x.div w={970} h={250} bg='#D3D3D340' />\n      </x.div>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <SixArticleDeckSkeleton />\n        <ArticleDeckSkeleton />\n        <ThreeArticleDeckSkeleton />\n      </x.div>\n    </>\n  )\n}\n\nexport const TitleSectionPageSkeleton = () => {\n  return (\n    <>\n      <x.div w='100%' maxWidth={1220} mx='auto' display='grid' gridTemplateColumns={{ sm: '100%', lg: 'minmax(min-content, 560px) minmax(min-content, 282px) 300px' }} gap={{ lg: '40' }} mt={50} mb={30}>\n        <TvBoxSkeleton />\n        <x.aside>\n          <MostReadWidgetSkeleton />\n          <x.div textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column' p={{ sm: '20px', lg: '0' }}>\n            <x.div w={300} h={250} bg='#D3D3D340' />\n          </x.div>\n        </x.aside>\n      </x.div>\n      {/* <TrendsBar />\n      <x.div my={50} mx={-20} textAlign='center' display='flex' justifyContent='center' alignItems='center' flexDirection='column'>\n        <x.div w={970} h={250} bg='#D3D3D340' />\n      </x.div>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <SixArticleDeckSkeleton />\n        <ArticleDeckSkeleton />\n        <ThreeArticleDeckSkeleton />\n      </x.div> */}\n    </>\n  )\n}\n\nexport const AuthorPageSkeleton = () => {\n  return (\n    <>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <x.div w='100%' maxWidth={1220} mx='auto' my={50} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n          <x.div h={7} mb={5} pb={20} bg='#F0F0F0' />\n        </x.div>\n        <FollowConceptSkeleton />\n        <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n          <ArticleDeckSkeleton />\n        </x.div>\n        <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n          <ArticleDeckSkeleton />\n        </x.div>\n      </x.div>\n    </>\n  )\n}\n\nexport const FollowConceptSkeleton = (props) => {\n  return (\n    <x.div h={7} mb={5} pb={20} bg='#F0F0F0'></x.div>\n  )\n}\n\nexport const BlankPageSkeleton = () => {\n  return (\n    <x.div maxWidth={1220} w='100%' mx='auto' h={1200} mt={50}>\n    </x.div>\n  )\n}\n\nexport const BasicPageSkeleton = () => {\n  return (\n    <>\n      <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n        <x.div w='100%' maxWidth={1220} mx='auto' my={50} borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n          <x.div h={7} mb={5} pb={20} bg='#F0F0F0'></x.div>\n        </x.div>\n        <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n          <ArticleDeckSkeleton />\n        </x.div>\n        <x.div maxWidth={1220} w='100%' mx='auto' mt={50}>\n          <ArticleDeckSkeleton />\n        </x.div>\n      </x.div>\n    </>\n  )\n}\n\nexport const TrendsPageSkeleton = () => (\n  <>\n    <x.main px={{ sm: '20px', wAdD: '200px' }} mt={{ sm: '96px', lg: '173px' }} w='100%' maxWidth={{ sm: '1260px', wAdD: '1660px' }} mx='auto' mb={50}>\n      <x.div position='relative' w='100%' maxWidth={{ sm: '1260px', wAdD: '1660px' }} mx='auto'>\n        <x.div w='100%' maxWidth={{ sm: '1260px', wAdD: '1660px' }}  pb={10} my={50} mx='auto' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider'>\n          <x.h1 text='h3' mr={{ sm: '0', lg: '50px' }} mb={{ sm: '10', lg: '0' }} w={{ sm: '100%', lg: 'auto' }}>Trending on IOL</x.h1>\n        </x.div>\n        <x.div position='relative' w='100%' maxWidth={{ sm: '1260px', wAdD: '1660px' }} mx='auto'>\n          <x.h3 text='h4' borderWidth='0 0 1px 0' borderStyle='solid' borderColor='divider' pb={10} mb={20}>\n            <x.div h={7} mb={5} w='20%' bg='#F0F0F0' />\n          </x.h3>\n        </x.div>\n        <ArticleFourRowSkeleton />\n      </x.div>\n    </x.main>\n  </>\n)\n\nexport const AuthorSkeleton = () => {\n  return (\n    <x.div display={{ sm: 'unset', lg: 'grid' }} gridTemplateColumns={{ sm: 'unset', lg: '127px auto' }}>\n      <x.div w={{ sm: '50px', lg: '127px' }} h={{ sm: '50px', lg: '127px' }} bg='#F0F0F0' borderRadius='100%' />\n      <x.div ml={20}>\n        <x.p text='meta'>Written by</x.p>\n        <x.div h={7} mb={5} bg='#F0F0F0'></x.div>\n        <x.div h={5} mb={5} bg='#F0F0F0'></x.div>\n        <x.div h={5} mb={5} bg='#F0F0F0'></x.div>\n        <x.div w='33%' h={5} bg='#F0F0F0'></x.div>\n        <x.div display='flex' spaceX={10} mt={10} className='author-follow'>\n          <x.div w={10} h={10} bg='#F0F0F0' borderRadius='full' />\n          <x.div w={10} h={10} bg='#F0F0F0' borderRadius='full' />\n          <x.div w={10} h={10} bg='#F0F0F0' borderRadius='full' />\n          <x.div w={10} h={10} bg='#F0F0F0' borderRadius='full' />\n        </x.div>\n      </x.div>\n    </x.div>\n  )\n}\n\nexport const ArticlePageSkeleton = () => (\n  <x.article className='main-article' w='100%' maxWidth='1500px' m='auto'>\n    <x.div display='grid' gridTemplateColumns={{ sm: '100%', xl: '300px auto 300px' }} gap={{ sm: '0', article: '50' }} alignItems='center'>\n      <x.aside display={{ sm: 'none', xl: 'block' }} visibility={{ sm: 'hidden', xl: 'visible' }}>\n        <AuthorSkeleton />\n      </x.aside>\n      <x.div w='100%' maxWidth='800px' m='0 auto'>\n        <x.div w='100%' mb={10} mt={{ sm: '5px', lg: '22px' }} h={14} bg='ltGrey' />\n        <x.div w='100%' mb={{ sm: '15px', lg: '30px' }} h={24} bg='ltGrey' />\n        <ImageOrNoImage width={getImageSize('featured')} shape='16x9' image={false} noImage={NoImage} />\n        <x.div w='100%' maxWidth='550px' m='auto'>\n          <x.div text='small' my={10}><em><x.div bg='ltGrey' h={4} w='100%' borderRadius /></em></x.div>\n          <x.div h={3} mb={5} bg='#F0F0F0'></x.div>\n        </x.div>\n      </x.div>\n      <x.aside w='100%' maxWidth='550px' m='auto' mb={30} display={{ sm: 'block', article: 'none' }} visibility={{ sm: 'visible', article: 'hidden' }}>\n        <AuthorSkeleton />\n      </x.aside>\n      <x.div textAlign='center' justifyContent='center' alignItems='center' flexDirection='column' mb={77} display={{ sm: 'none', article: 'flex' }} visibility={{ sm: 'hidden', article: 'visible' }}>\n        <x.div bg='ltGrey' w={300} h={250} />\n      </x.div>\n    </x.div>\n  </x.article>\n)\n\nexport const ArticlePageSkeletonWrapper = () => (\n  <x.main mt={{ sm: '96px', lg: '172px' }} px={20}>\n    <x.div h={7}></x.div>\n    <ArticlePageSkeleton />\n  </x.main>\n)\n","module.exports = __webpack_public_path__ + \"static/media/bookmark-ico.18d10d1f.svg\";","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FORMATS = void 0;\nexports.IonAd = IonAd;\nexports.IonAdSlot = IonAdSlot;\nexports.clearSlots = clearSlots;\nexports[\"default\"] = void 0;\nexports.disableAgeTarget = disableAgeTarget;\nexports.disableAnchorAds = disableAnchorAds;\nexports.disableArticleLevelTarget = disableArticleLevelTarget;\nexports.disableGenderTarget = disableGenderTarget;\nexports.disableInterstitial = disableInterstitial;\nexports.disableMappings = disableMappings;\nexports.disableSectionLevelTarget = disableSectionLevelTarget;\nexports.enableAgeTarget = enableAgeTarget;\nexports.enableAnchorAds = enableAnchorAds;\nexports.enableArticleLevelTarget = enableArticleLevelTarget;\nexports.enableGenderTarget = enableGenderTarget;\nexports.enableInterstitial = enableInterstitial;\nexports.enableLazyLoad = enableLazyLoad;\nexports.enableMappings = enableMappings;\nexports.enableSectionLevelTarget = enableSectionLevelTarget;\nexports.enableSingleRequest = enableSingleRequest;\nexports.getSlots = getSlots;\nexports.isAnchorAdsEnabled = isAnchorAdsEnabled;\nexports.performSingleRequest = performSingleRequest;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _useHasMounted = _interopRequireDefault(require(\"./useHasMounted\"));\n\nvar _ionMedia = require(\"ion-media\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar slots = {};\nvar refreshingSlots = [];\nvar events = [];\nvar options = {\n  enableSingleRequest: false,\n  enableLazyLoad: false,\n  enableAnchorAds: false,\n  enableMappings: false,\n  enableInterstitial: false,\n  enableGenderTarget: false,\n  enableAgeTarget: false,\n  enableArticleLevelTarget: false,\n  enableSectionLevelTarget: false\n};\n\nif (typeof window !== 'undefined') {\n  window.googletag = window.googletag || {\n    cmd: []\n  };\n}\n\nfunction getSlots() {\n  return slots;\n}\n\nvar FORMATS = {\n  leaderboard: {\n    desktop: [[728, 90], [970, 90], [970, 250]],\n    tablet: [[728, 90]],\n    mobile: [[320, 50], [300, 50]]\n  },\n  mpudynamic: {\n    desktop: [[300, 250], [300, 600]],\n    tablet: [[300, 250]],\n    mobile: [[300, 250], [336, 280]]\n  },\n  mpusection: {\n    tablet: [[300, 250]],\n    mobile: [[300, 250]]\n  },\n  mpu: {\n    desktop: [[300, 250]],\n    tablet: [[300, 250]],\n    mobile: [[300, 250], [336, 280]]\n  },\n  inarticle: {\n    desktop: [[300, 250]],\n    tablet: [[300, 250]],\n    mobile: [[300, 250], [336, 280]]\n  }\n};\nexports.FORMATS = FORMATS;\n\nfunction clearSlots() {\n  if (typeof window !== 'undefined') {\n    console.warn('### CLEARING ALL AD SLOTS ###');\n    var _window = window,\n        _googletag = _window.googletag;\n\n    _googletag.cmd.push(function () {\n      events.forEach(function (item) {\n        return _googletag.pubads().removeEventListener('slotRenderEnded', item);\n      });\n      events.forEach(function (item) {\n        return _googletag.pubads().removeEventListener('slotRequested', item);\n      });\n\n      _googletag.destroySlots();\n    });\n\n    slots = {};\n    refreshingSlots = [];\n  }\n}\n\nfunction enableSingleRequest() {\n  options.enableSingleRequest = true;\n}\n\nfunction enableLazyLoad() {\n  options.enableLazyLoad = true;\n}\n\nfunction performSingleRequest(slotId) {\n  googletag.cmd.push(function () {\n    googletag.display(slotId);\n  });\n}\n\nfunction enableAnchorAds() {\n  options.enableAnchorAds = true;\n}\n\nfunction enableMappings() {\n  options.enableMappings = true;\n}\n\nfunction disableAnchorAds() {\n  options.enableAnchorAds = false;\n}\n\nfunction disableMappings() {\n  options.enableMappings = false;\n}\n\nfunction isAnchorAdsEnabled() {\n  return options.enableAnchorAds;\n}\n\nfunction enableInterstitial() {\n  options.enableInterstitial = true;\n}\n\nfunction disableInterstitial() {\n  options.enableInterstitial = false;\n}\n\nfunction enableGenderTarget() {\n  options.enableGenderTarget = true;\n}\n\nfunction disableGenderTarget() {\n  options.enableGenderTarget = false;\n}\n\nfunction enableAgeTarget() {\n  options.enableAgeTarget = true;\n}\n\nfunction disableAgeTarget() {\n  options.enableAgeTarget = false;\n}\n\nfunction enableArticleLevelTarget() {\n  options.enableArticleLevelTarget = true;\n}\n\nfunction disableArticleLevelTarget() {\n  options.enableArticleLevelTarget = true;\n}\n\nfunction enableSectionLevelTarget() {\n  options.enableSectionLevelTarget = true;\n}\n\nfunction disableSectionLevelTarget() {\n  options.enableSectionLevelTarget = true;\n}\n\nfunction IonAdSlot(_ref) {\n  var slotId = _ref.slotId,\n      path = _ref.path,\n      targeting = _ref.targeting,\n      className = _ref.className,\n      sizes = _ref.sizes,\n      mapping = _ref.mapping,\n      anchor = _ref.anchor,\n      refreshTime = _ref.refreshTime,\n      collapseEmptyDiv = _ref.collapseEmptyDiv,\n      onSlotRequested = _ref.onSlotRequested,\n      onSlotRenderEnded = _ref.onSlotRenderEnded,\n      onAdSlotRegistered = _ref.onAdSlotRegistered;\n  (0, _react.useEffect)(function () {\n    var _window2 = window,\n        googletag = _window2.googletag;\n\n    var __onSlotRenderEnded = function __onSlotRenderEnded(event) {\n      if (event.slot) {\n        var _targeting = [];\n\n        _targeting.push(Object.getOwnPropertyNames(targeting)[0]);\n\n        _targeting.push(targeting[_targeting[0]]);\n\n        if (event.slot === slots[slotId]) {\n          var _sizes = sizes.map(function (elem) {\n            return elem.join('x');\n          }).join('|');\n\n          console.log('### Ad Rendered:', 'targeting:', _targeting.join(':'), 'path:', path, 'sizes:', _sizes, 'mapping:', mapping, 'isEmpty:', event.isEmpty, 'event:', event);\n\n          if (onSlotRenderEnded) {\n            onSlotRenderEnded(event);\n          }\n        }\n      }\n    };\n\n    var __slotRequested = function __slotRequested(event) {\n      if (event.slot === slots[slotId] && onSlotRequested) {\n        event.sizes = sizes;\n        event.sizeMapping = mapping;\n        event.slotId = slotId;\n        onSlotRequested(event);\n      }\n    };\n\n    googletag.cmd.push(function () {\n      events.push(__onSlotRenderEnded);\n      events.push(__slotRequested);\n      googletag.pubads().addEventListener('slotRenderEnded', __onSlotRenderEnded);\n      googletag.pubads().addEventListener('slotRequested', __slotRequested);\n    });\n  }, []);\n  (0, _react.useEffect)(function () {\n    var _window3 = window,\n        googletag = _window3.googletag;\n    googletag.cmd.push(function () {\n      googletag.pubads().addEventListener('impressionViewable', function (event) {\n        var slot = event.slot;\n\n        if (slot.getTargeting('refresh').indexOf('true') > -1) {\n          var targetingKeys = slot.getTargetingKeys();\n\n          if (refreshingSlots.indexOf(slot) < 0) {\n            var secondsToWait = slot.getTargeting('refreshTime')[0];\n            console.log('### Scheduling slot refresh in', secondsToWait, 'seconds -', targetingKeys[0], ':', slot.getTargeting(targetingKeys[0]));\n            refreshingSlots.push(slot);\n            setTimeout(function () {\n              googletag.pubads().refresh([slot]);\n              var idx = refreshingSlots.indexOf(slot);\n\n              if (idx >= 0) {\n                refreshingSlots.splice(idx, 1);\n              }\n            }, secondsToWait * 1000);\n          }\n        }\n      });\n    });\n  }, []); // Configure and setup the slot\n\n  (0, _react.useEffect)(function () {\n    var _window4 = window,\n        googletag = _window4.googletag; // Do not redeclare slots\n\n    if (!slots[slotId]) {\n      slots[slotId] = 'pending';\n      var _targeting = [];\n\n      if (targeting) {\n        _targeting.push(Object.getOwnPropertyNames(targeting)[0]);\n\n        _targeting.push(targeting[_targeting[0]]);\n      }\n\n      googletag.cmd.push(function () {\n        try {\n          var slot;\n\n          switch (anchor) {\n            case 'top':\n              slot = googletag.defineOutOfPageSlot(path, googletag.enums.OutOfPageFormat.TOP_ANCHOR);\n              break;\n\n            case 'bottom':\n              slot = googletag.defineOutOfPageSlot(path, googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);\n              break;\n\n            case 'interstitial':\n              if (options.enableInterstitial) {\n                slot = googletag.defineOutOfPageSlot(path, googletag.enums.OutOfPageFormat.INTERSTITIAL);\n                slot.addService(googletag.pubads()).setConfig({\n                  interstitial: {\n                    triggers: {\n                      navBar: true,\n                      unhideWindow: true\n                    }\n                  }\n                });\n              }\n\n              break;\n\n            default:\n              slot = googletag.defineSlot(path, sizes, slotId);\n          }\n\n          if (!slot) {\n            console.error('### ERROR: Unable to create slot', {\n              anchor: anchor,\n              path: path,\n              sizes: sizes,\n              slotId: slotId\n            });\n            return;\n          }\n\n          if (mapping && options.enableMappings) {\n            slot.defineSizeMapping(mapping);\n          }\n\n          slot.setCollapseEmptyDiv(!!collapseEmptyDiv);\n          slot.addService(googletag.pubads());\n\n          if (_targeting.length) {\n            slot.setTargeting(_targeting[0], _targeting[1]);\n          }\n\n          if (refreshTime) {\n            slot.setTargeting('refresh', 'true');\n            slot.setTargeting('refreshTime', refreshTime);\n          }\n\n          slots[slotId] = slot;\n\n          if (onAdSlotRegistered) {\n            onAdSlotRegistered(slotId);\n          }\n\n          if (options.enableLazyLoad) {\n            // googletag.pubads().disableInitialLoad()\n            googletag.pubads().enableLazyLoad({\n              fetchMarginPercent: 200,\n              renderMarginPercent: 100,\n              mobileScaling: 1.0\n            });\n          }\n\n          if (options.enableSingleRequest) {\n            googletag.pubads().enableSingleRequest();\n          } else {\n            googletag.cmd.push(function () {\n              googletag.display(slotId);\n            });\n          }\n\n          if (options.enableArticleLevelTarget) {\n            googletag.pubads().setTargeting('contentKey', []);\n          }\n\n          if (options.enableSectionLevelTarget) {\n            googletag.pubads().setTargeting('Section', []);\n          }\n\n          if (options.enableAgeTarget) {\n            googletag.pubads().setTargeting('Age', []);\n          }\n\n          if (options.enableGenderTarget) {\n            googletag.pubads().setTargeting('Gender', []);\n          }\n\n          googletag.enableServices();\n        } catch (e) {\n          console.error(e.message);\n\n          var _sizes = sizes.map(function (elem) {\n            return elem.join('x');\n          }).join('|');\n\n          console.error('slotId:', {\n            anchor: anchor,\n            targeting: _targeting.join(':'),\n            path: path,\n            sizes: _sizes\n          });\n        }\n      });\n    }\n  }, [targeting, path, sizes, slotId, collapseEmptyDiv, onSlotRenderEnded]);\n  return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    id: slotId,\n    className: className\n  });\n}\n\nfunction IonAd(_ref2) {\n  var slotId = _ref2.slotId,\n      path = _ref2.path,\n      targeting = _ref2.targeting,\n      refreshTime = _ref2.refreshTime,\n      className = _ref2.className,\n      adNotice = _ref2.adNotice,\n      mapping = _ref2.mapping,\n      anchor = _ref2.anchor,\n      desktop = _ref2.desktop,\n      tablet = _ref2.tablet,\n      mobile = _ref2.mobile,\n      collapseEmptyDiv = _ref2.collapseEmptyDiv,\n      onSlotRequested = _ref2.onSlotRequested,\n      onSlotRenderEnded = _ref2.onSlotRenderEnded,\n      onAdSlotRegistered = _ref2.onAdSlotRegistered;\n  var debug = !process.env.RAZZLE_ENABLE_GAM;\n  var _targeting = [];\n\n  _targeting.push(Object.getOwnPropertyNames(targeting)[0]);\n\n  _targeting.push(targeting[_targeting[0]]);\n\n  if ((anchor === 'top' || anchor === 'bottom') && !options.enableAnchorAds) {\n    return null;\n  }\n\n  return /*#__PURE__*/_react[\"default\"].createElement(_useHasMounted[\"default\"], null, !debug && /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Desktop, null, desktop && desktop.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className || 'advert'\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(IonAdSlot, {\n    targeting: targeting,\n    path: path,\n    sizes: desktop,\n    mapping: mapping,\n    refreshTime: refreshTime,\n    collapseEmptyDiv: collapseEmptyDiv,\n    slotId: slotId,\n    className: \"\",\n    anchor: anchor,\n    onSlotRenderEnded: onSlotRenderEnded,\n    onSlotRequested: onSlotRequested,\n    onAdSlotRegistered: onAdSlotRegistered\n  })))), /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Tablet, null, tablet && tablet.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className || 'advert'\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(IonAdSlot, {\n    targeting: targeting,\n    path: path,\n    sizes: tablet,\n    mapping: mapping,\n    refreshTime: refreshTime,\n    collapseEmptyDiv: collapseEmptyDiv,\n    slotId: slotId,\n    className: \"\",\n    anchor: anchor,\n    onSlotRenderEnded: onSlotRenderEnded,\n    onSlotRequested: onSlotRequested,\n    onAdSlotRegistered: onAdSlotRegistered\n  })))), /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Mobile, null, mobile && mobile.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className || 'advert'\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(IonAdSlot, {\n    targeting: targeting,\n    path: path,\n    sizes: mobile,\n    mapping: mapping,\n    refreshTime: refreshTime,\n    collapseEmptyDiv: collapseEmptyDiv,\n    slotId: slotId,\n    className: \"\",\n    anchor: anchor,\n    onSlotRenderEnded: onSlotRenderEnded,\n    onSlotRequested: onSlotRequested,\n    onAdSlotRegistered: onAdSlotRegistered\n  }))))), debug && /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Desktop, null, desktop && desktop.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"img\", {\n    src: '//via.placeholder.com/' + desktop.reduce(function (p, c) {\n      if (p[0] * p[1] > c[0] * c[1]) {\n        return p;\n      } else {\n        return c;\n      }\n    }).join('x') + '?text=' + _targeting.join(':'),\n    alt: \"\"\n  }))))), /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Tablet, null, tablet && tablet.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"img\", {\n    className: \"advert\",\n    src: '//via.placeholder.com/' + tablet.reduce(function (p, c) {\n      if (p[0] * p[1] > c[0] * c[1]) {\n        return p;\n      } else {\n        return c;\n      }\n    }).join('x') + '?text=' + _targeting.join(':'),\n    alt: \"\"\n  }))))), /*#__PURE__*/_react[\"default\"].createElement(_ionMedia.Mobile, null, mobile && mobile.length > 0 && /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n    className: className\n  }, /*#__PURE__*/_react[\"default\"].createElement(_react[\"default\"].Fragment, null, adNotice && /*#__PURE__*/_react[\"default\"].createElement(\"small\", null, \"Advertisement\"), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"img\", {\n    className: \"advert\",\n    src: '//via.placeholder.com/' + mobile.reduce(function (p, c) {\n      if (p[0] * p[1] > c[0] * c[1]) {\n        return p;\n      } else {\n        return c;\n      }\n    }).join('x') + '?text=' + _targeting.join(':'),\n    alt: \"\"\n  })))))));\n}\n\nvar _default = IonAd;\nexports[\"default\"] = _default;","module.exports = __webpack_public_path__ + \"static/media/youtube-wht.adef66e4.svg\";","module.exports = __webpack_public_path__ + \"static/media/google-play.089d2f5e.svg\";","const municipalitiesMapping =\n  [\n    [\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1117,\n        Municipality: 'BUF - Buffalo City Metropolitan Municipality [East London]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1102,\n        Municipality: 'EC101 - Camdeboo [Graaff-Reinet]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1103,\n        Municipality: 'EC102 - Blue Crane Route [Somerset East]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1104,\n        Municipality: 'EC103 - Ikwezi [Jansenville]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1105,\n        Municipality: 'EC104 - Makana [Grahamstown]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1106,\n        Municipality: 'EC105 - Ndlambe [Port Alfred]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1107,\n        Municipality: 'EC106 - Sundays River Valley [Kirkwood]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1108,\n        Municipality: 'EC107 - Baviaans [Willowmore]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1109,\n        Municipality: 'EC108 - Kouga [Humansdorp]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1110,\n        Municipality: 'EC109 - Kou-Kamma [Kareedouw]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1113,\n        Municipality: 'EC121 - Mbhashe [Idutywa]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1114,\n        Municipality: 'EC122 - Mnquma [Butterworth]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1115,\n        Municipality: 'EC123 - Great Kei [Komga]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1116,\n        Municipality: 'EC124 - Amahlathi [Stutterheim]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1118,\n        Municipality: 'EC126 - Ngqushwa [Peddie]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1119,\n        Municipality: 'EC127 - Nkonkobe [Alice]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1120,\n        Municipality: 'EC128 - Nxuba [Adelaide]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1122,\n        Municipality: 'EC131 - Inxuba Yethemba [Cradock]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1123,\n        Municipality: 'EC132 - Tsolwana [Tarkastad]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1124,\n        Municipality: 'EC133 - Inkwanca [Molteno]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1125,\n        Municipality: 'EC134 - Lukhanji [Queenstown]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1126,\n        Municipality: 'EC135 - Intsika Yethu [Cofimvaba]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1127,\n        Municipality: 'EC136 - Emalahleni [Lady Frere]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1128,\n        Municipality: 'EC137 - Engcobo [Engcobo]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1129,\n        Municipality: 'EC138 - Sakhisizwe [Elliot]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1131,\n        Municipality: 'EC141 - Elundini [Mount Fletcher]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1132,\n        Municipality: 'EC142 - Senqu [Lady Grey]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1133,\n        Municipality: 'EC143 - Maletswai [Aliwal North]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1134,\n        Municipality: 'EC144 - Gariep [Burgersdorp]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1138,\n        Municipality: 'EC153 - Ngquza Hill [Flagstaff]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1139,\n        Municipality: 'EC154 - Port St Johns [Port St Johns]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1140,\n        Municipality: 'EC155 - Nyandeni [Libode]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1141,\n        Municipality: 'EC156 - Mhlontlo [Qumbu]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1142,\n        Municipality: 'EC157 - King Sabata Dalindyebo [Umtata]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 4034,\n        Municipality: 'EC441 - Matatiele [Matatiele]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1031,\n        Municipality: 'EC442 - Umzimvubu [Mount Ayliff]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1136,\n        Municipality: 'EC443 - Mbizana [Bizana]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1137,\n        Municipality: 'EC444 - Ntabankulu [Ntabankulu]'\n      },\n      {\n        ProvinceID: 1,\n        MunicipalityID: 1001,\n        Municipality: 'NMA - Nelson Mandela Bay [Port Elizabeth]'\n      }\n    ],\n    [\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2202,\n        Municipality: 'FS161 - Letsemeng [Koffiefontein]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2203,\n        Municipality: 'FS162 - Kopanong [Trompsburg]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2204,\n        Municipality: 'FS163 - Mohokare [Zastron]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2206,\n        Municipality: 'FS164 - Naledi [Dewetsdorp]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2210,\n        Municipality: 'FS181 - Masilonyana [Theunissen]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2211,\n        Municipality: 'FS182 - Tokologo [Dealesville]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2212,\n        Municipality: 'FS183 - Tswelopele [Hoopstad]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2213,\n        Municipality: 'FS184 - Matjhabeng [Welkom]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2214,\n        Municipality: 'FS185 - Nala [Bothaville]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2216,\n        Municipality: 'FS191 - Setsoto [Senekal]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2217,\n        Municipality: 'FS192 - Dihlabeng [Bethlehem]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2218,\n        Municipality: 'FS193 - Nketoana [Reitz]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2219,\n        Municipality: 'FS194 - Maluti a Phofung [Qwa-Qwa]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2220,\n        Municipality: 'FS195 - Phumelela [Vrede]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2208,\n        Municipality: 'FS196 - Mantsopa [Ladybrand]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2222,\n        Municipality: 'FS201 - Moqhaka [Kroonstad]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2223,\n        Municipality: 'FS203 - Ngwathe [Parys]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2224,\n        Municipality: 'FS204 - Metsimaholo [Sasolburg]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2225,\n        Municipality: 'FS205 - Mafube [Frankfort]'\n      },\n      {\n        ProvinceID: 2,\n        MunicipalityID: 2207,\n        Municipality: 'MAN - Mangaung Metropolitan Municipality [Bloemfontein]'\n      }\n    ],\n    [\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3002,\n        Municipality: 'EKU - Ekurhuleni [East Rand]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3302,\n        Municipality: 'GT421 - Emfuleni [Vereeniging]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3303,\n        Municipality: 'GT422 - Midvaal [Meyerton]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3304,\n        Municipality: 'GT423 - Lesedi [Heidelberg]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3040,\n        Municipality: 'GT481 - Mogale City [Krugersdorp]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3041,\n        Municipality: 'GT482 - Randfontein [Randfontein]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3042,\n        Municipality: 'GT483 - Westonaria [Westonaria]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3039,\n        Municipality: 'GT484 - Merafong City [Carletonville]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3003,\n        Municipality: 'JHB - City of Johannesburg [Johannesburg]'\n      },\n      {\n        ProvinceID: 3,\n        MunicipalityID: 3004,\n        Municipality: 'TSH - City of Tshwane'\n      }\n    ],\n    [\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4005,\n        Municipality: 'ETH - eThekwini [Durban Metro]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4402,\n        Municipality: 'KZN211 - Vulamehlo [Dududu]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4403,\n        Municipality: 'KZN212 - Umdoni [Scottburgh]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4404,\n        Municipality: 'KZN213 - Umzumbe [Umzumbe]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4405,\n        Municipality: 'KZN214 - UMuziwabantu [Harding]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4406,\n        Municipality: 'KZN215 - Ezinqoleni [Izinqolweni]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4407,\n        Municipality: 'KZN216 - Hibiscus Coast [Port Shepstone]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4409,\n        Municipality: 'KZN221 - uMshwathi [Wartburg]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4410,\n        Municipality: 'KZN222 - uMngeni [Howick]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4411,\n        Municipality: 'KZN223 - Mooi Mpofana [Mooirivier]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4412,\n        Municipality: 'KZN224 - Impendle [Impendle]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4413,\n        Municipality: 'KZN225 - Msunduzi [Pietermaritzburg]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4414,\n        Municipality: 'KZN226 - Mkhambathini [Camperdown]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4415,\n        Municipality: 'KZN227 - Richmond [Richmond]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4418,\n        Municipality: 'KZN232 - Emnambithi/Ladysmith [Ladysmith]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4419,\n        Municipality: 'KZN233 - Indaka [Waaihoek]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4420,\n        Municipality: 'KZN234 - Umtshezi [Estcourt]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4421,\n        Municipality: 'KZN235 - Okhahlamba [Bergville]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4422,\n        Municipality: 'KZN236 - Imbabazane [Loskop]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4426,\n        Municipality: 'KZN241 - Endumeni [Dundee]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4427,\n        Municipality: 'KZN242 - Nqutu [Nqutu]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4429,\n        Municipality: 'KZN244 - Msinga [Pomeroy]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4430,\n        Municipality: 'KZN245 - Umvoti [Greytown]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4432,\n        Municipality: 'KZN252 - Newcastle [Newcastle]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4433,\n        Municipality: 'KZN253 - eMadlangeni [Utrecht]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4434,\n        Municipality: 'KZN254 - Dannhauser [Durnacol]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4436,\n        Municipality: 'KZN261 - eDumbe [Paulpietersburg]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4437,\n        Municipality: 'KZN262 - UPhongolo [Pongola]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4438,\n        Municipality: 'KZN263 - Abaqulusi [Vryheid]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4439,\n        Municipality: 'KZN265 - Nongoma [Nongoma]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4440,\n        Municipality: 'KZN266 - Ulundi [Ulundi]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4442,\n        Municipality: 'KZN271 - Umhlabuyalingana [Emangusi]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4443,\n        Municipality: 'KZN272 - Jozini [Mkuze]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4444,\n        Municipality: 'KZN273 - The Big 5 False Bay [Hluhluwe]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4445,\n        Municipality: 'KZN274 - Hlabisa [Somkele]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4446,\n        Municipality: 'KZN275 - Mtubatuba [Mtubatuba]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4449,\n        Municipality: 'KZN281 - Mfolozi [KwaMbonambi]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4450,\n        Municipality: 'KZN282 - uMhlathuze [Richards Bay]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4451,\n        Municipality: 'KZN283 - Ntambana [Ntambana]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4452,\n        Municipality: 'KZN284 - uMlalazi [Eshowe]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4453,\n        Municipality: 'KZN285 - Mthonjaneni [Melmoth]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4454,\n        Municipality: 'KZN286 - Nkandla [Nkandla]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4456,\n        Municipality: 'KZN291 - Mandeni [Mandeni]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4457,\n        Municipality: 'KZN292 - KwaDukuza [Stanger]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4458,\n        Municipality: 'KZN293 - Ndwedwe [Ndwedwe]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4459,\n        Municipality: 'KZN294 - Maphumulo [Maphumulo]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4032,\n        Municipality: 'KZN431 - Ingwe [Creighton]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4033,\n        Municipality: 'KZN432 - Kwa Sani [Underberg]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4035,\n        Municipality: 'KZN433 - Greater Kokstad [Kokstad]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 4036,\n        Municipality: 'KZN434 - Ubuhlebezwe [Ixopo]'\n      },\n      {\n        ProvinceID: 4,\n        MunicipalityID: 1030,\n        Municipality: 'KZN435 - Umzimkhulu [Umzimkulu]'\n      }\n    ],\n    [\n      [\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5502,\n          Municipality: 'MP301 - Albert Luthuli [Elukwatini/Carolina]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5503,\n          Municipality: 'MP302 - Msukaligwa [Ermelo]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5504,\n          Municipality: 'MP303 - Mkhondo [Piet Retief]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5505,\n          Municipality: 'MP304 - Pixley Ka Seme [Volksrust]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5506,\n          Municipality: 'MP305 - Lekwa [Standerton]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5507,\n          Municipality: 'MP306 - Dipaleseng [Balfour]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5508,\n          Municipality: 'MP307 - Govan Mbeki [Highveld Ridge]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5510,\n          Municipality: 'MP311 - Delmas [Delmas]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5511,\n          Municipality: 'MP312 - Emalahleni [Witbank]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5512,\n          Municipality: 'MP313 - Steve Tshwete [Middelburg]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5513,\n          Municipality: 'MP314 - Emakhazeni [Belfast]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5514,\n          Municipality: 'MP315 - Thembisile [KwaMhlanga]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5515,\n          Municipality: 'MP316 - Dr JS Moroka [Mdutjana]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5517,\n          Municipality: 'MP321 - Thaba Chweu [Sabie]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5518,\n          Municipality: 'MP322 - Mbombela [Nelspruit]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5519,\n          Municipality: 'MP323 - Umjindi [Barberton]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 5520,\n          Municipality: 'MP324 - Nkomazi [Nkomazi]'\n        },\n        {\n          ProvinceID: 5,\n          MunicipalityID: 7027,\n          Municipality: 'MP325 - Bushbuckridge [Bushbuckridge]'\n        }\n      ]\n\n    ],\n    [\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6602,\n        Municipality: 'NC061 - RICHTERSVELD [Port Nolloth]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6603,\n        Municipality: 'NC062 - NAMA KHOI [Springbok]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6604,\n        Municipality: 'NC064 - KAMIESBERG [Garies]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6605,\n        Municipality: 'NC065 - HANTAM [Calvinia]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6606,\n        Municipality: 'NC066 - KAROO HOOGLAND [Fraserburg]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6607,\n        Municipality: 'NC067 - KHâI-MA [Pofadder]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6610,\n        Municipality: 'NC071 - UBUNTU [Victoria West]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6611,\n        Municipality: 'NC072 - UMSOBOMVU [Colesberg]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6612,\n        Municipality: 'NC073 - EMTHANJENI [De Aar]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6613,\n        Municipality: 'NC074 - KAREEBERG [Carnarvon]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6614,\n        Municipality: 'NC075 - RENOSTERBERG [Phillipstown]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6615,\n        Municipality: 'NC076 - THEMBELIHLE [Hopetown]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6616,\n        Municipality: 'NC077 - SIYATHEMBA [Prieska]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6617,\n        Municipality: 'NC078 - SIYANCUMA [Griekwastad]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6620,\n        Municipality: 'NC081 - MIER [Mier]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6621,\n        Municipality: 'NC082 - KAI !GARIB [Keimoes]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6622,\n        Municipality: 'NC083 - //KHARA HAIS [Upington]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6623,\n        Municipality: 'NC084 - !KHEIS [Groblershoop]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6624,\n        Municipality: 'NC085 - TSANTSABANE [Postmasburg]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6625,\n        Municipality: 'NC086 - KGATELOPELE [Danielskuil]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6046,\n        Municipality: 'NC091 - Sol Plaatje [Kimberley]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6047,\n        Municipality: 'NC092 - Dikgatlong [Barkley West]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6048,\n        Municipality: 'NC093 - Magareng [Warrenton]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6045,\n        Municipality: 'NC094 - Phokwane [Hartswater]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6015,\n        Municipality: 'NC451 - Joe Morolong [Kgalagadi]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6012,\n        Municipality: 'NC452 - GA-SEGONYANA [Kuruman]'\n      },\n      {\n        ProvinceID: 6,\n        MunicipalityID: 6013,\n        Municipality: 'NC453 - GAMAGARA [Kathu]'\n      }\n    ],\n    [\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7702,\n        Municipality: 'LIM331 - Greater Giyani [Giyani]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7703,\n        Municipality: 'LIM332 - Greater Letaba [Duiwelskloof]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7704,\n        Municipality: 'LIM333 - Greater Tzaneen [Tzaneen]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7705,\n        Municipality: 'LIM334 - Ba-Phalaborwa [Phalaborwa]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7028,\n        Municipality: 'LIM335 - Maruleng [Hoedspruit]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7707,\n        Municipality: 'LIM341 - Musina [Messina]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7708,\n        Municipality: 'LIM342 - Mutale [Mutale-Masisi]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7709,\n        Municipality: 'LIM343 - Thulamela [Thohoyandou]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7710,\n        Municipality: 'LIM344 - Makhado [Louis Trichardt]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7712,\n        Municipality: 'LIM351 - Blouberg [Bochum/My Darling]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7713,\n        Municipality: 'LIM352 - Aganang [Moletji/Matlala]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7714,\n        Municipality: 'LIM353 - Molemole [Dendron/Dikgale]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7715,\n        Municipality: 'LIM354 - Polokwane [Pietersburg]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7716,\n        Municipality: 'LIM355 - Lepele-Nkumpi [Lebowakgomo]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7718,\n        Municipality: 'LIM361 - Thabazimbi [Thabazimbi]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7719,\n        Municipality: 'LIM362 - Lephalale [Ellisras]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7720,\n        Municipality: 'LIM364 - Mookgopong [Naboomspruit]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7721,\n        Municipality: 'LIM365 - Modimolle [Nylstroom]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7722,\n        Municipality: 'LIM366 - Bela-Bela [Warmbad]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7723,\n        Municipality: 'LIM367 - Mogalakwena [Potgietersrus]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 5020,\n        Municipality: 'LIM471 - Ephraim Mogale [Marble Hall]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 5021,\n        Municipality: 'LIM472 - Elias Motsoaledi [Groblersdal]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7023,\n        Municipality: 'LIM473 - Makhuduthamaga [Ngwaritsi]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 7024,\n        Municipality: 'LIM474 - Fetakgomo [Fetakgomo ]'\n      },\n      {\n        ProvinceID: 7,\n        MunicipalityID: 5022,\n        Municipality: 'LIM475 - Greater Tubatse [Burgersfort/Ohrigstad/Eastern Tubatse]'\n      }\n    ],\n    [\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8802,\n        Municipality: 'NW371 - Moretele [Makapanstad]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8803,\n        Municipality: 'NW372 - Madibeng [Brits]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8804,\n        Municipality: 'NW373 - Rustenburg [Rustenburg]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8805,\n        Municipality: 'NW374 - Kgetlengrivier [Koster]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8806,\n        Municipality: 'NW375 - Moses Kotane [Mogwase]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8808,\n        Municipality: 'NW381 - Ratlou [Setlagole]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8809,\n        Municipality: 'NW382 - Tswaing [Delareyville]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8810,\n        Municipality: 'NW383 - Mafikeng [Mahikeng]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8811,\n        Municipality: 'NW384 - Ditsobotla [Lichtenburg]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8812,\n        Municipality: 'NW385 - Ramotshere Moiloa [Zeerust]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8815,\n        Municipality: 'NW392 - Naledi [Vryburg]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8816,\n        Municipality: 'NW393 - Mamusa [Schweizer-Reneke]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8817,\n        Municipality: 'NW394 - Greater Taung [Reivilo]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8819,\n        Municipality: 'NW396 - Lekwa-Teemane [Christiana]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8825,\n        Municipality: 'NW397 - NW397 Local Municipality [Ganyesa/Pomfret]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8821,\n        Municipality: 'NW401 - Ventersdorp [Ventersdorp]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8822,\n        Municipality: 'NW402 - Tlokwe [Potchefstroom]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8823,\n        Municipality: 'NW403 - Matlosana [Klerksdorp]'\n      },\n      {\n        ProvinceID: 8,\n        MunicipalityID: 8824,\n        Municipality: 'NW404 - Maquassi Hills [Wolmaransstad]'\n      }\n    ],\n    [\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9006,\n        Municipality: 'CPT - City of Cape Town [Cape Town]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9902,\n        Municipality: 'WC011 - Matzikama [Vredendal]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9903,\n        Municipality: 'WC012 - Cederberg [Citrusdal]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9904,\n        Municipality: 'WC013 - Bergrivier [Velddrif]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9905,\n        Municipality: 'WC014 - Saldanha Bay [West Coast Peninsula]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9906,\n        Municipality: 'WC015 - Swartland [Malmesbury]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9909,\n        Municipality: 'WC022 - Witzenberg [Ceres]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9910,\n        Municipality: 'WC023 - Drakenstein [Paarl]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9911,\n        Municipality: 'WC024 - Stellenbosch [Stellenbosch]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9912,\n        Municipality: 'WC025 - Breede Valley [Worcester]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9913,\n        Municipality: 'WC026 - Langeberg [Robertson]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9916,\n        Municipality: 'WC031 - Theewaterskloof [Caledon]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9917,\n        Municipality: 'WC032 - Overstrand [Greater Hermanus]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9918,\n        Municipality: 'WC033 - Cape Agulhas [Bredasdorp]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9919,\n        Municipality: 'WC034 - Swellendam [Barrydale/Swellendam ]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9922,\n        Municipality: 'WC041 - Kannaland [Ladismith]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9923,\n        Municipality: 'WC042 - Hessequa [Heidelberg/Riversdale]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9924,\n        Municipality: 'WC043 - Mossel Bay [Mossel Bay]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9925,\n        Municipality: 'WC044 - George [George]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9926,\n        Municipality: 'WC045 - Oudtshoorn [Oudtshoorn]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9927,\n        Municipality: 'WC047 - Bitou [Greater Plettenberg Bay]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9928,\n        Municipality: 'WC048 - Knysna [Knysna]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9931,\n        Municipality: 'WC051 - Laingsburg [Laingsburg]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9932,\n        Municipality: 'WC052 - Prince Albert [Prins Albert]'\n      },\n      {\n        ProvinceID: 9,\n        MunicipalityID: 9933,\n        Municipality: 'WC053 - Beaufort West [Beaufort West]'\n      }\n    ]\n  ]\n\nexport default municipalitiesMapping\n","import axios from 'axios'\nimport { call, all, put, takeLatest } from 'redux-saga/effects'\nimport Cache from '../lib/cache'\nimport municipalitiesMapping from '../app/components/election/municipalitiesMapping.js'\n\n// Actions\nexport const UPDATE_EVENT = 'election/UPDATE_EVENT'\nexport const NAVIGATE = 'election/NAVIGATE'\nexport const COLLECT_DATA = 'election/COLLECT_DATA'\nexport const COLLECT_DATA_SUCCESS = 'election/COLLECT_DATA_SUCCESS'\nexport const COLLECT_DATA_ERROR = 'election/COLLECT_DATA_ERROR'\n\nexport const VOTER_DETAILS_SUCCESS = 'election/VOTER_DETAILS_SUCCESS'\nexport const VOTER_DETAILS_ERROR = 'election/VOTER_DETAILS_ERROR'\nexport const UPDATE_FROM_DATA = 'api/UPDATE_FROM_DATA'\n\nexport const COLLECT_PROVINCE_DATA = 'election/COLLECT_PROVINCE_DATA'\nexport const COLLECT_PROVINCE_DATA_SUCCESS = 'election/COLLECT_PROVINCE_DATA_SUCCESS'\nexport const COLLECT_PROVINCE_DATA_ERROR = 'election/COLLECT_PROVINCE_DATA_ERROR'\n\nexport const COLLECT_MUNICIPALITY_DATA = 'election/COLLECT_MUNICIPALITY_DATA'\nexport const COLLECT_MUNICIPALITY_DATA_SUCCESS = 'election/COLLECT_MUNICIPALITY_DATA_SUCCESS'\nexport const COLLECT_MUNICIPALITY_DATA_ERROR = 'election/COLLECT_MUNICIPALITY_DATA_ERROR'\n\nexport const SHOW_PROVINCE = 'election/SHOW_PROVINCE'\nexport const SHOW_MUNICIPALITY = 'election/SHOW_MUNICIPALITY'\nexport const VOTER_DETAILS = 'election/VOTER_DETAILS'\n\nexport const NPE_SEAT_CALCULATION_RESULTS = 'election/NPE_SEAT_CALCULATION_RESULTS'\nexport const NPE_SEAT_CALCULATION_RESULTS_SUCCESS = 'election/NPE_SEAT_CALCULATION_RESULTS_SUCCESS'\nexport const NPE_SEAT_CALCULATION_RESULTS_ERROR = 'election/NPE_SEAT_CALCULATION_RESULTS_ERROR'\n\nexport const NPE_BALLOT_RESULTS = 'election/NPE_BALLOT_RESULTS'\nexport const NPE_BALLOT_RESULTS_SUCCESS = 'election/NPE_BALLOT_RESULTS_SUCCESS'\nexport const NPE_BALLOT_RESULTS_ERROR = 'election/NPE_BALLOT_RESULTS_ERROR'\n\nconst provinceIdToName = {\n  1: 'Eastern Cape',\n  2: 'Free State',\n  3: 'Gauteng',\n  4: 'KwaZulu-Natal',\n  5: 'Mpumalanga',\n  6: 'Northern Cape',\n  7: 'Limpopo',\n  8: 'North West',\n  9: 'Western Cape'\n}\nconst provincesAbrevToName = {\n  EC: 'Eastern Cape',\n  FS: 'Free State',\n  GT: 'Gauteng',\n  KZN: 'KwaZulu-Natal',\n  MP: 'Mpumalanga',\n  NC: 'Northern Cape',\n  LIM: 'Limpopo',\n  NW: 'North West',\n  WC: 'Western Cape'\n}\n\nconst provincesNameToAbrev = {\n  'Eastern Cape': 'EC',\n  'Free State': 'FS',\n  Gauteng: 'GT',\n  'KwaZulu-Natal': 'KZN',\n  Mpumalanga: 'MP',\n  'Northern Cape': 'NC',\n  Limpopo: 'LIM',\n  'North West': 'NW',\n  'Western Cape': 'WC'\n}\n\nconst centerCoordinates = {\n  National: { center: [25, -28], zoom: 13 },\n  'Eastern Cape': { center: [26.5, -32], zoom: 38 },\n  'Free State': { center: [27, -28.75], zoom: 42 },\n  Gauteng: { center: [28, -26], zoom: 65 },\n  'KwaZulu-Natal': { center: [30, -29], zoom: 40 },\n  Limpopo: { center: [29, -24], zoom: 40 },\n  Mpumalanga: { center: [30, -25.75], zoom: 45 },\n  'North West': { center: [25, -26], zoom: 40 },\n  'Northern Cape': { center: [23, -29], zoom: 22 },\n  'Western Cape': { center: [21, -33], zoom: 44 }\n}\n\nconst SERVER_URL = typeof window !== 'undefined' ? '/data/elections' : process.env.RAZZLE_ELECTIONS\nconst cache = Cache()\nasync function fetchAndCache (key) {\n  const result = await cache.get(key)\n  if (result) {\n    return result\n  }\n  return axios.get(`${SERVER_URL}/${key}`)\n    .then(response => {\n      // console.log('fetchAndCache', `${SERVER_URL}/${key}`), response.data\n      return cache.set(key, response.data)\n    })\n    .catch(error => {\n      console.error(error.message)\n      throw error\n    })\n}\nasync function getElectionsTypeResults (resultsType, eventId) {\n  return fetchAndCache(`${resultsType}/${eventId}`)\n}\nasync function fetchRegionResultsApi (eventId, provinceId) {\n  return fetchAndCache(`municipalityResults/${eventId}/${provinceId}`)\n}\nasync function fetchMunicipalityResultsApi (eventId, provinceId, municipalityId) {\n  return fetchAndCache(`wardResults/${eventId}/${provinceId}/${municipalityId}`)\n}\nasync function fetchVoterDetailsApi (id) {\n  return fetchAndCache(`voterDetails/${id}`)\n}\nasync function fetchNPESeatCalculationResultsApi (eventId) {\n  return fetchAndCache(`npeSeatCalculationResults/${eventId}`)\n}\nasync function fetchNPEBallotResultsApi (eventId) {\n  return fetchAndCache(`npeBallotResults/${eventId}`)\n}\n\n// Helpers\nexport const swapProvinceAbrevName = (province) => {\n  if (province.length > 3) {\n    return provincesNameToAbrev[province]\n  }\n  return provincesAbrevToName[province]\n}\n\nexport const mapMunicipalityId = (inputProvinceId, inputMunicName) => {\n  const provinceData = municipalitiesMapping[parseInt(inputProvinceId) - 1]\n  const municipality = provinceData.filter(aMunicipality => aMunicipality.Municipality.toLowerCase().includes(inputMunicName.toLowerCase()))\n  return municipality[0].MunicipalityID\n}\n\n// Actions\nexport const collectResults = (eventId) => ({ type: COLLECT_DATA, eventId })\nexport const showProvince = (eventId, provinceId) => ({ type: SHOW_PROVINCE, eventId, provinceId })\nexport const showMunicpality = (eventId, provinceId, municipalityName) => ({ type: SHOW_MUNICIPALITY, eventId, provinceId, municipalityName })\nexport const navigate = (province, municipality, provinceId, municipalityId, mapType) => ({ type: 'NAVIGATE', province, municipality, provinceId, municipalityId, mapType })\nexport const getRegionResults = (data) => ({ type: COLLECT_PROVINCE_DATA, data })\nexport const updateEvent = (eventId, electionYear) => ({ type: UPDATE_EVENT, eventId, electionYear })\nexport const showVoterDetails = (id) => ({ type: VOTER_DETAILS, id })\nexport const updateForm = (data) => ({ type: UPDATE_FROM_DATA, payload: data })\nexport const getNPESeatCalculationResults = (eventId) => ({ type: NPE_SEAT_CALCULATION_RESULTS, eventId })\nexport const getBallotResults = (eventId) => ({ type: NPE_BALLOT_RESULTS, eventId })\n\nconst initialState = {\n  mapType: 'national',\n  fill: false,\n  center: [25, -28],\n  zoom: 13,\n  provinceName: null,\n  provinceId: null,\n  municipalityId: null,\n  municipalityName: null,\n  provincialResults: [],\n  nationalResults: [],\n  hasError: false,\n  eventId: 1334,\n  electionYear: 2024,\n  idNumber: null,\n  voterDetails: null,\n  ballotResults: null,\n  seatCalculationResults: null,\n  formOutput: ''\n}\n\nfunction * getElectionsResults ({ eventId }) {\n  const results = {}\n  const resultsTypes = ['nationalResults', 'provincialResults']\n  try {\n    yield Promise.all(resultsTypes.map(resultsType =>\n      getElectionsTypeResults(resultsType, eventId).then(electionsTypeResult => {\n        results[resultsType] = electionsTypeResult\n        console.log('Results: ', results)\n        return results\n      })\n    ))\n    yield put({ type: COLLECT_DATA_SUCCESS, payload: results })\n  } catch (error) {\n    yield put({ type: COLLECT_DATA_ERROR, payload: error.message })\n  }\n}\n\nfunction * fetchRegionResults ({ eventId, provinceId }) {\n  let results\n  try {\n    results = yield call(fetchRegionResultsApi, eventId, provinceId)\n    yield put({ type: COLLECT_PROVINCE_DATA_SUCCESS, payload: results, provinceId })\n  } catch (error) {\n    yield put({ type: COLLECT_PROVINCE_DATA_ERROR, payload: error.message })\n  }\n}\n\nfunction * fetchMunicipalityResults ({ eventId, provinceId, municipalityName }) {\n  let results\n  try {\n    const municipalityId = mapMunicipalityId(provinceId, municipalityName)\n    results = yield call(fetchMunicipalityResultsApi, eventId, provinceId, municipalityId)\n    yield put({ type: COLLECT_MUNICIPALITY_DATA_SUCCESS, payload: results, provinceId, municipalityId, municipalityName })\n  } catch (error) {\n    yield put({ type: COLLECT_MUNICIPALITY_DATA_ERROR, payload: error.message })\n  }\n}\n\nfunction * fetchVoterDetails ({ id }) {\n  let results\n  try {\n    results = yield call(fetchVoterDetailsApi, id)\n    yield put({ type: VOTER_DETAILS_SUCCESS, payload: results })\n  } catch (error) {\n    yield put({ type: VOTER_DETAILS_ERROR, payload: error.message })\n  }\n}\n\nfunction * fetchNPEBallotResults ({ eventId }) {\n  let results\n  try {\n    results = yield call(fetchNPEBallotResultsApi, eventId)\n    yield put({ type: NPE_BALLOT_RESULTS_SUCCESS, payload: results })\n  } catch (error) {\n    yield put({ type: NPE_BALLOT_RESULTS_ERROR, payload: error.message })\n  }\n}\n\nfunction * fetchNPESeatCalculationResults ({ eventId }) {\n  let results\n  try {\n    results = yield call(fetchNPESeatCalculationResultsApi, eventId)\n    yield put({ type: NPE_SEAT_CALCULATION_RESULTS_SUCCESS, payload: results })\n  } catch (error) {\n    yield put({ type: NPE_SEAT_CALCULATION_RESULTS_ERROR, payload: error.message })\n  }\n}\n\nexport function * watchElections () {\n  yield all([\n    takeLatest(COLLECT_DATA, getElectionsResults),\n    takeLatest(SHOW_PROVINCE, fetchRegionResults),\n    takeLatest(SHOW_MUNICIPALITY, fetchMunicipalityResults),\n    takeLatest(VOTER_DETAILS, fetchVoterDetails),\n    takeLatest(NPE_BALLOT_RESULTS, fetchNPEBallotResults),\n    takeLatest(NPE_SEAT_CALCULATION_RESULTS, fetchNPESeatCalculationResults)\n  ])\n}\n\nexport const Reducer = (state = initialState, action) => {\n  let center = [25, -28]\n  let zoom = 13\n  const ProvinceName = provinceIdToName[action.provinceId]\n  switch (action.type) {\n    case SHOW_PROVINCE:\n      return state\n    case NAVIGATE:{\n      let provinceName = null\n      let provinceId = null\n      let municipalityName = null\n      let municipalityId = null\n      if (action.mapType === 'municipal') {\n        center = centerCoordinates[action.province].center\n        zoom = centerCoordinates[action.province].zoom\n        provinceName = swapProvinceAbrevName(action.province)\n        provinceId = action.provinceId\n        municipalityName = action.municipality\n        municipalityId = mapMunicipalityId(action.provinceId, action.municipality)\n      }\n      return Object.assign({}, state, {\n        fill: false, mapType: action.mapType, center, zoom, provinceName, provinceId, municipalityName, municipalityId\n      })\n    }\n    case COLLECT_DATA_SUCCESS:\n      return Object.assign({}, state, {\n        fill: true,\n        mapType: 'national',\n        center: centerCoordinates.National.center,\n        zoom: centerCoordinates.National.zoom,\n        provincialResults: action.payload.provincialResults,\n        nationalResults: action.payload.nationalResults\n      })\n    case COLLECT_DATA_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        errorMessage: action.payload\n      })\n    case COLLECT_PROVINCE_DATA_SUCCESS:\n      return Object.assign({}, state, {\n        fill: true,\n        mapType: 'provincial',\n        center: centerCoordinates[ProvinceName].center,\n        zoom: centerCoordinates[ProvinceName].zoom,\n        provinceName: swapProvinceAbrevName(ProvinceName),\n        provinceId: action.provinceId,\n        municipalResults: action.payload\n      })\n    case COLLECT_MUNICIPALITY_DATA_SUCCESS:\n      return Object.assign({}, state, {\n        fill: true,\n        mapType: 'municipal',\n        center: centerCoordinates[ProvinceName].center,\n        zoom: centerCoordinates[ProvinceName].zoom,\n        provinceName: swapProvinceAbrevName(ProvinceName),\n        provinceId: action.provinceId,\n        municipalityName: action.municipalityName,\n        municipalityId: action.municipalityId,\n        wardResults: action.payload\n      })\n    case VOTER_DETAILS:\n      return Object.assign({}, state, {\n        didInvalidate: false,\n        isSubmitting: true,\n        hasSubmitted: false,\n        hasError: false\n      })\n    case UPDATE_FROM_DATA:\n      return Object.assign({}, state, action.payload)\n    case VOTER_DETAILS_SUCCESS:\n      return Object.assign({}, state, {\n        voterDetails: action.payload,\n        isSubmitting: false,\n        hasSubmitted: true,\n        didInvalidate: false\n      })\n    case VOTER_DETAILS_ERROR:\n      return Object.assign({}, state, {\n        hasError: true,\n        error: action.payload,\n        isSubmitting: false,\n        hasSubmitted: false,\n        didInvalidate: true\n      })\n    case UPDATE_EVENT:\n      console.log('UPDATE_EVENT', action.eventId, action.electionYear)\n      return Object.assign({}, state, {\n        fill: false,\n        eventId: action.eventId,\n        electionYear: action.electionYear\n      })\n    case NPE_BALLOT_RESULTS_SUCCESS:\n      return Object.assign({}, state, {\n        ballotResults: action.payload\n      })\n    case NPE_BALLOT_RESULTS_ERROR: {\n      return Object.assign({}, state, {\n        hasError: true,\n        error: action.payload\n      })\n    }\n    case NPE_SEAT_CALCULATION_RESULTS_SUCCESS:\n      return Object.assign({}, state, {\n        seatCalculationResults: action.payload\n      })\n    case NPE_SEAT_CALCULATION_RESULTS_ERROR: {\n      return Object.assign({}, state, {\n        hasError: true,\n        error: action.payload\n      })\n    }\n    default:\n      return state\n  }\n}\n","import { createGlobalStyle } from '@xstyled/styled-components'\n\nconst GlobalStyle = createGlobalStyle`\n  body {\n    color: grey;\n    font-family: \"Work Sans\", sans-serif;\n    font-weight: 400;\n    line-height: 1.4;\n    -moz-font-feature-settings: \"case\";\n    -webkit-font-feature-settings: \"case\";\n    font-feature-settings: \"case\";\n    overflow-x: hidden;\n    display: flex;\n    flex-direction: column;\n    min-height: 100vh;\n    align-items: stretch;\n  }\n  .scrollingDisabled {\n    overflow: hidden;\n  }\n  #root {\n    display: flex;\n    flex-direction: column;\n    min-height: 100vh;\n    align-items: stretch;\n  }\n  main {\n    min-height: 50vh;\n  }\n  h1, h2, h3, h4, h5, h6 {\n    font-family: \"PT Serif\", serif;\n    font-weight: 700;\n    line-height: 1.4;\n  }\n  h1 {\n    font-size: calc((28 / 16) * 1rem);\n    @media screen and (max-width: 1023px) {\n      font-size: calc((26 / 16) * 1rem);\n    }\n  }\n  h2 {\n    font-size: calc((28 / 16) * 1rem);\n    @media screen and (max-width: 1023px) {\n      font-size: calc((26 / 16) * 1rem);\n    }\n  }\n  h3 {\n    font-size: calc((26 / 16) * 1rem);\n  }\n  h4 {\n    font-size: calc((22 / 16) * 1rem);\n  }\n  h5 {\n    font-size: calc((19 / 16) * 1rem);\n  }\n  h6 {\n    font-size: calc((16 / 16) * 1rem);\n  }\n  a {\n    color: grey;\n    text-decoration: none;\n    transition: all linear .3s;\n    * {\n      transition: all linear .3s;\n    }\n    &:hover {\n      * {\n        color: #000;\n      }\n    }\n  }\n  .trendsbar a {\n    &:hover {\n      span {\n        color: orange;\n      }\n    }\n  }\n  button {\n    transition: all linear .3s;\n  }\n  img {\n    display: block;\n    max-width: 100%;\n    height: auto;\n  }\n  strong, b {\n    font-weight: semiBold;\n  }\n  em, i {\n    font-style: italic;\n  }\n  small {\n    font-size: small;\n  }\n  .active a {\n    position: relative;\n    color: red;\n  }\n  .active-sub-nav span {\n    &::before {\n      background-color: entertainment;\n      transform-origin: bottom left;\n      transform: scaleX(1);\n    }\n  }\n  .article-share, .author-follow {\n    a, button {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      z-index: 1;\n      position: relative;\n      color: white;\n      background-color: #EEE;\n      overflow: hidden;\n      transition: color 0.4s ease-in-out;\n      border: 1px solid #EEE;\n      border-radius: 100%;\n      width: 40px;\n      height: 40px;\n      @media screen and (max-width: 1023px) {\n        width: 36px;\n        height: 36px;\n      }\n      &::before {\n        content: '';\n        z-index: -1;\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        width: 1em;\n        height: 1em;\n        border-radius: 50%;\n        background-color: #FFF;\n        transform-origin: center;\n        transform: translate3d(-50%, -50%, 0) scale3d(0, 0, 0);\n        transition: transform 0.45s ease-in-out;\n      }\n      &:hover::before {\n        transform: translate3d(-50%, -50%, 0) scale3d(15, 15, 15);\n      }\n    }\n  }\n  .article-share {\n    a, button {\n      padding: 0;\n    }\n  }\n  .author-follow {\n    a, button {\n      width: 30px;\n      height: 30px;\n    }\n  }\n  @media screen and (min-width: 1024px) {\n    .divider-right {\n      &::after {\n        content: '';\n        border-right: 1px solid #D4D4D4;\n        position: absolute;\n        top: 0;\n        right: -20px;\n        height: 100%;\n      }\n      &:nth-of-type(4n)::after {\n        border-right: 0;\n      }\n    }\n    .divider-left {\n      &::before {\n        content: '';\n        border-left: 1px solid #D4D4D4;\n        position: absolute;\n        top: 0;\n        left: -20px;\n        height: 100%;\n      }\n      &:nth-of-type(4n)::before {\n        border-left: 0;\n      }\n    }\n    .divider-right-six {\n      &::after {\n        content: '';\n        border-right: 1px solid #D4D4D4;\n        position: absolute;\n        top: 0;\n        right: -20px;\n        height: 100%;\n      }\n    }\n    #carousel li {\n      &:last-of-type, &:nth-of-type(4) {\n        &.divider-right::after {\n          border-right: 0;\n        }\n      }\n      &.divider-right::after {\n        right: 0;\n      }\n    }\n    .divider-right-footer::after {\n      content: '';\n      border-right: 1px solid rgba(255, 255, 255, .3);\n      position: absolute;\n      top: 0;\n      right: -20px;\n      height: 100%;\n    }\n  }\n  .iframeWrapper {\n    position: relative;\n    padding-bottom: 56.25%; /* 16:9 */\n    height: 0;\n    iframe {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n  }\n  .video-frame {\n    position: relative;\n    padding-bottom: 56.25%; /* 16:9 */\n    height: 0;\n    iframe, video {\n      width: 100%;\n    }\n    iframe {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n    }\n  }\n  ::-webkit-input-placeholder { /* Chrome/Opera/Safari */\n    color: #999;\n  }\n  ::-moz-placeholder { /* Firefox 19+ */\n    color: #999;\n  }\n  :-ms-input-placeholder { /* IE 10+ */\n    color: #999;\n  }\n  :-moz-placeholder { /* Firefox 18- */\n    color: #999;\n  }\n  .static-pages {\n    color: grey;\n    font-family: \"Work Sans\", sans-serif;\n    font-weight: 400;\n    line-height: 1.4;\n    -moz-font-feature-settings: \"case\";\n    -webkit-font-feature-settings: \"case\";\n    font-feature-settings: \"case\";\n    h1, h2, h3, h4, h5, h6 {\n      margin-bottom: 20px;\n  }\n    p {\n      margin-bottom: 15px;\n    }\n    a {\n      color: #2F80ED;\n      text-decoration: underline;\n      &:hover {\n        text-decoration: none;\n      }\n    }\n    ul {\n      margin-left: 40px;\n      margin-bottom: 20px;\n    }\n    li {\n      list-style-type: disc;\n    }\n    table {\n      border-collapse: collapse;\n      th {\n        border-bottom: 1px solid #D4D4D4;\n        text-align: left;\n        text-transform: uppercase;\n      }\n      th, td {\n        padding: 5px;\n        width: 50%;\n      }\n    }\n  }\n  .newspapers {\n    max-width: 970px;\n    width: 100%;\n    margin: auto;\n    color: grey;\n    font-family: \"Work Sans\", sans-serif;\n    font-weight: 400;\n    line-height: 1.4;\n    -moz-font-feature-settings: \"case\";\n    -webkit-font-feature-settings: \"case\";\n    font-feature-settings: \"case\";\n    a {\n      color: #2F80ED;\n      &:hover {\n        text-decoration: none;\n      }\n    }\n    img {\n      border: 1px solid #DDD;\n      margin-bottom: 5px;\n    }\n  }\n  .newspaper-titles {\n    display: grid;\n    grid-template-columns: repeat(4, calc(100% / 4));\n    @media screen and (max-width: 1022px) {\n      grid-template-columns: repeat(3, calc(100% / 3));\n    }\n    a {\n      display: block;\n    }\n    img {\n      display: block;\n      margin: auto;\n    }\n  }\n  .scroll-to-top {\n    animation: fadeIn 700ms ease-in-out 1s both;\n  }\n\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n\n  // Video\n  .oovvuu-embed-player .ov-bg-gray-100 {\n    background-color: #FFF;\n  }\n  .oovvuu-embed-player .ov-bg-teal {\n    background-color: #B41400;\n  }\n  .oovvuu-embed-player .ov-text-teal {\n    color: #B41400;\n  }\n  .video-page {\n    .oovvuu-embed-player .ov-text-gray-800 {\n      display: none;\n      visibility: hidden;\n    }\n  }\n  .video-page .video-box {\n    .oovvuu-embed-player .ov-text-gray-800 {\n      display: flex;\n      visibility: visible;\n    }\n  }\n  .video {\n    + div:empty {\n      margin-bottom: 10px;\n    }\n  }\n  .video-youtube iframe {\n    aspect-ratio: 16 / 9;\n    width: 100%;\n    height: auto;\n  }\n  main {\n    position: relative;\n    z-index: 2;\n    > div {\n      position: relative;\n      z-index: 2;\n    }\n  }\n  // Wallpaper ad\n  .dfp-take-over-ad {\n      .wallpaper-ad {\n          position: fixed;\n          width: 100%;\n          height: 100%;\n          z-index: 1;\n          top: 172px;\n          &.scrolled {\n              top: 72px;\n          }\n          div,\n          iframe {\n              position: fixed;\n              width: 100%;\n              height: 100%;\n              z-index: 1;\n          }\n      }\n      header, main {\n          position: relative;\n          z-index: 101;\n          background: #FFF;\n      }\n      main {\n        padding: 20px;\n        z-index: 100;\n        margin: auto;\n      }\n      footer {\n          position: relative;\n          z-index: 100;\n      }\n  }\n  .weather-list {\n    &:nth-of-type(2n+1) {\n      @media screen and (max-width: 1023px) {\n        border-right: 0 none;\n        grid-column: 2 / 2;\n      }\n    }\n  }\n  // Hide Empty Ads\n  .ad-unit:has(div[id^='google_ads_iframe']:empty) {\n    visibility: hidden;\n    height: 0;\n    padding: 0;\n  }\n  .checkboxes {\n    label {\n      display: block; // to make it easier to click\n      cursor: pointer;\n      position: relative; // important\n      width: 100%;\n      max-width: 350px;\n      min-width: 300px;\n      padding: 5px;\n      color: #434343;\n      // Now we'll create the checkbox object\n      span {\n        display: inline-block;\n        position: relative;\n        background: #F0F0F0;\n        width: 25px;\n        height: 25px;\n        transform-origin: center;\n        vertical-align: middle;\n        margin-right: 10px;\n        transition: background-color 150ms 200ms, transform 350ms cubic-bezier(.78,-1.22,.17,1.89); // custom ease effect for bouncy animation\n        // Now we'll create the \"tick\" using pseudo elements - those will be basically two lines that will be rotated to form the \"tick\"\n        &:before {\n          content: \"\";\n          width: 0px;\n          height: 2px;\n          border-radius: 2px; // so that the tick has nice rounded look\n          position: absolute;\n          transform: rotate(45deg);\n          top: 12px; // you'll need to experiment with placement depending on the dimensions you've chosen\n          left: 9px; // you'll need to experiment with placement depending on the dimensions you've chosen\n          transition: width 50ms ease 50ms;\n          transform-origin: 0% 0%;\n        }\n        &:after {\n          content: \"\";\n          width: 0;\n          height: 2px;\n          border-radius: 2px; // so that the tick has nice rounded look\n          position: absolute;\n          transform: rotate(305deg);\n          top: 15px; // you'll need to experiment with placement depending on the dimensions you've chosen\n          left: 10px; // you'll need to experiment with placement depending on the dimensions you've chosen\n          transition: width 50ms ease;\n          transform-origin: 0% 0%;\n        }\n      }\n      // Time to add some life to it\n      &:hover {\n          transition: background linear .2s;\n          color: #B41400;\n          span {\n              &:before {\n                  width: 5px;\n                  transition: width 100ms ease;\n              }\n              &:after {\n                  width: 10px;\n                  transition: width 150ms ease 100ms;\n              }\n          }\n      }\n    }\n    input[type=\"checkbox\"] {\n      display: none; // hide the system checkbox\n      // Let's add some effects after the checkbox is checked\n      &:checked {\n        + label {\n          color: #434343;\n          span {\n            background: #F0F0F0;\n            // transform: scale(1.25); // enlarge the box\n            &:after {\n              width: 10px;\n              background: #434343;\n              transition: width 150ms ease 100ms; // enlarge the tick\n            }\n            &:before {\n              width: 5px;\n              background: #434343;\n              transition: width 150ms ease 100ms; // enlarge the tick\n            }\n          }\n          &:hover { // copy the states for onMouseOver to avoid flickering\n            color: #B41400;\n            span {\n              background: #F0F0F0;\n              // transform: scale(1.25); // enlarge the box\n              &:after {\n                width: 10px;\n                background: #434343;\n                transition: width 150ms ease 100ms; // enlarge the tick\n              }\n              &:before {\n                width: 5px;\n                background: #434343;\n                transition: width 150ms ease 100ms; // enlarge the tick\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  .letters {\n    a {\n      word-break: break-word;\n    }\n  }\n  .switch {\n    position: relative;\n    display: inline-block;\n    width: 45px;\n    height: 20px;\n    input {\n      opacity: 0;\n      width: 0;\n      height: 0;\n    }\n  }\n  .slider {\n    position: absolute;\n    cursor: pointer;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: #C4C4C4;\n    -webkit-transition: .4s;\n    transition: .4s;\n    border-radius: 34px;\n    border: 1px solid transparent;\n    &::after {\n      content: \"OFF\";\n      font-size: 10px;\n      position: absolute;\n      right: 4px;\n      top: 50%;\n      transform: translatey(-50%);\n    }\n    &::before {\n      position: absolute;\n      content: \"\";\n      height: 16px;\n      width: 16px;\n      left: 1px;\n      top: 1px;\n      background-color: white;\n      transition: .4s;\n      border-radius: 50%;\n    }\n  }\n  input:checked + .slider {\n    background-color: #15CF74;\n  }\n  input:focus + .slider {\n    border: 1px solid #000;\n  }\n  input:checked + .slider {\n    &::after {\n      content: \"ON\";\n      left: 9px;\n      color: #3E6C56;\n    }\n    &::before {\n      transform: translateX(26px);\n    }\n  }\n  .ovx-v2-strap-embed .ovx-playing-next > span {\n    display: none;\n  }\n  .oovvuu-embed-player .ov-fixed {\n    bottom: 130px !important;\n  }\n  .opinion-secondary-nav {\n    font-family: \"Work Sans\", sans-serif;\n  }\n`\n\nexport default GlobalStyle\n","module.exports = __webpack_public_path__ + \"static/media/arrow-left-ltgrey.bcbc5029.svg\";","module.exports = __webpack_public_path__ + \"static/media/x-wht.e3a5a15f.svg\";","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _ionUtil = require('ion-util');\n\nvar _ionUtil2 = _interopRequireDefault(_ionUtil);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar firstCall = true;\n\nvar postIONAnalytics = function postIONAnalytics(events) {\n  // Suppress a duplicate event on the client. NB: Crawlers will be tracked.\n  // server/index.js performs two renders, so it is also necessary to suppress events on firstRender\n  // article events are raised from fetch success, so suppression not needed\n  if (firstCall && typeof window !== 'undefined') {\n    firstCall = false;\n    return;\n  }\n  events.forEach(function (event) {\n    var _eventData = {};\n    if (event.section) {\n      _eventData.section = event.section;\n    }\n    if (event.author) {\n      _eventData.author = event.author;\n    }\n    switch (event.event) {\n      case 'ArticlePageview':\n        try {\n          (0, _ionUtil2.default)('pageView', 'article', event.visitorId, event.titleKey, event.sessionId, event.path, _eventData);\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      case 'SectionPageview':\n        try {\n          if (event.firstRender) {\n            return;\n          }\n          (0, _ionUtil2.default)('pageView', 'section', event.visitorId, event.titleKey, event.sessionId, event.virtualPageURL, _eventData);\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      case 'HomePageview':\n        try {\n          if (event.firstRender) {\n            return;\n          }\n          (0, _ionUtil2.default)('pageView', 'home', event.visitorId, event.titleKey, event.sessionId, event.virtualPageURL, _eventData);\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      case 'StaticPageview':\n        try {\n          if (event.firstRender) {\n            return;\n          }\n          (0, _ionUtil2.default)('pageView', 'static', event.visitorId, event.titleKey, event.sessionId, event.virtualPageURL, _eventData);\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      default:\n        break;\n    }\n  });\n};\n\nexports.default = postIONAnalytics;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.calcNodeSrcUrl = exports.calcImageSrcUrl = exports.ImageOrNoImage = exports.ImageCalculator = exports.AmpImageOrNoImage = exports.AmpImage = void 0;\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar urlify = require('urlify').create({\n  addEToUmlauts: true,\n  szToSs: true,\n  spaces: '-',\n  nonPrintable: '-',\n  trim: true\n});\nvar Cinema2K = 2.39;\nvar calcShapeHeight = function calcShapeHeight(shape, width) {\n  if (shape === '16x9') {\n    return Math.ceil(width * 9 / 16);\n  }\n  if (shape === 'Cinema2K') {\n    return Math.ceil(width * 1 / Cinema2K);\n  }\n  if (shape === 'square') {\n    return width;\n  }\n};\nfunction canUseWebP() {\n  if (typeof window !== 'undefined') {\n    var elem = document.createElement('canvas');\n    if (!!(elem.getContext && elem.getContext('2d'))) {\n      // was able or not to get WebP representation\n      return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n    }\n  }\n  // very old browser like IE 8, canvas not supported\n  return false;\n}\nvar calcImageSrcUrl = function calcImageSrcUrl(image, width, shape, useWebP) {\n  if (image && image.url) {\n    var calc = new ImageCalculator();\n    var height = calc.calcHeight(shape, width) || width * 100;\n    if (useWebP === undefined) {\n      useWebP = canUseWebP();\n    }\n    var _calc$getCropCoordsFo = calc.getCropCoordsForShape(shape, width, height, image.width, image.height, image.crop ? image.crop.x : 0, image.crop ? image.crop.y : 0, image.crop ? image.crop.w : 0, image.crop ? image.crop.h : 0, image.focalPoint ? image.focalPoint.x : 0, image.focalPoint ? image.focalPoint.y : 0),\n      offsetx = _calc$getCropCoordsFo.offsetx,\n      offsety = _calc$getCropCoordsFo.offsety,\n      cropWidth = _calc$getCropCoordsFo.cropWidth,\n      cropHeight = _calc$getCropCoordsFo.cropHeight;\n    return calc.buildImageUrl('', image.caption ? urlify(image.caption) : '', width, height, image.url, offsetx, offsety, cropWidth, cropHeight, useWebP);\n  } else {\n    return null;\n  }\n};\nexports.calcImageSrcUrl = calcImageSrcUrl;\nvar calcNodeSrcUrl = function calcNodeSrcUrl(image, width, shape) {\n  //  eslint-disable-next-line valid-typeof\n  if (typeof image === 'Element') {\n    // Do some stuff\n  } else if (image && image.url) {\n    var calc = new ImageCalculator();\n    var height = calc.calcHeight(shape, width) || width * 100;\n    var _calc$getCropCoordsFo2 = calc.getCropCoordsForShape(shape, width, height, image.width, image.height, image.crop ? image.crop.x : 0, image.crop ? image.crop.y : 0, image.crop ? image.crop.w : 0, image.crop ? image.crop.h : 0, image.focalPoint ? image.focalPoint.x : 0, image.focalPoint ? image.focalPoint.y : 0),\n      offsetx = _calc$getCropCoordsFo2.offsetx,\n      offsety = _calc$getCropCoordsFo2.offsety,\n      cropWidth = _calc$getCropCoordsFo2.cropWidth,\n      cropHeight = _calc$getCropCoordsFo2.cropHeight;\n    var src = calc.buildImageUrl('', image.caption ? urlify(image.caption) : '', image.width, height, image.url, offsetx, offsety, cropWidth, cropHeight, canUseWebP());\n    return src;\n  } else {\n    return null;\n  }\n};\nexports.calcNodeSrcUrl = calcNodeSrcUrl;\nfunction getCropsForShape(image, shape) {\n  if (shape === '16x9' && image.crops && image.crops['16:9']) {\n    return image.crops['16:9'];\n  }\n  if (shape === 'square' && image.crops && image.crops['1:1']) {\n    return image.crops['1:1'];\n  }\n  if (image.crop) {\n    return image.crop;\n  }\n  return {\n    x: image.offsetx,\n    y: image.offsety,\n    w: image.cropwidth,\n    h: image.cropheight\n  };\n}\nvar ImageOrNoImage = function ImageOrNoImage(_ref) {\n  var image = _ref.image,\n    width = _ref.width,\n    alt = _ref.alt,\n    shape = _ref.shape,\n    noImage = _ref.noImage,\n    lazy = _ref.lazy,\n    className = _ref.className;\n  if (image && image.url) {\n    var crops = getCropsForShape(image, shape);\n    var offsetx = crops.x,\n      offsety = crops.y,\n      cropwidth = crops.w,\n      cropheight = crops.h;\n    return /*#__PURE__*/_react[\"default\"].createElement(Image, {\n      className: className,\n      shape: shape,\n      width: parseInt(width),\n      src: image.url,\n      lazy: lazy,\n      offsetx: offsetx,\n      offsety: offsety,\n      cropWidth: cropwidth,\n      cropHeight: cropheight,\n      focalpointx: image.focalpointx || image.focalPoint && image.focalPoint.x,\n      focalpointy: image.focalpointy || image.focalPoint && image.focalPoint.y,\n      imageWidth: parseInt(image.width),\n      imageHeight: parseInt(image.height),\n      alt: alt\n    });\n  } else {\n    return /*#__PURE__*/_react[\"default\"].createElement(\"img\", {\n      className: className,\n      src: noImage,\n      width: width,\n      loading: lazy ? 'lazy' : 'auto',\n      height: calcShapeHeight(shape, width),\n      alt: alt\n    });\n  }\n};\nexports.ImageOrNoImage = ImageOrNoImage;\nvar AmpImageOrNoImage = function AmpImageOrNoImage(_ref2) {\n  var image = _ref2.image,\n    width = _ref2.width,\n    alt = _ref2.alt,\n    shape = _ref2.shape,\n    noImage = _ref2.noImage,\n    layout = _ref2.layout,\n    className = _ref2.className;\n  if (image && image.url) {\n    var _getCropsForShape = getCropsForShape(image, shape),\n      offsetx = _getCropsForShape.offsetx,\n      offsety = _getCropsForShape.offsety,\n      cropwidth = _getCropsForShape.cropwidth,\n      cropheight = _getCropsForShape.cropheight;\n    return /*#__PURE__*/_react[\"default\"].createElement(AmpImage, {\n      className: className,\n      shape: shape,\n      width: width,\n      src: image.url,\n      layout: layout,\n      offsetx: offsetx,\n      offsety: offsety,\n      cropWidth: cropwidth,\n      cropHeight: cropheight,\n      focalpointx: image.focalpointx || image.focalPoint && image.focalPoint.x,\n      focalpointy: image.focalpointy || image.focalPoint && image.focalPoint.y,\n      imageWidth: image.width,\n      imageHeight: image.height,\n      alt: alt\n    });\n  } else {\n    return /*#__PURE__*/_react[\"default\"].createElement(\"amp-img\", {\n      className: className,\n      src: noImage,\n      width: width,\n      height: calcShapeHeight(shape, width),\n      alt: alt\n    });\n  }\n};\nexports.AmpImageOrNoImage = AmpImageOrNoImage;\nvar ImageCalculator = /*#__PURE__*/function () {\n  function ImageCalculator() {\n    _classCallCheck(this, ImageCalculator);\n  }\n  _createClass(ImageCalculator, [{\n    key: \"calcHeight\",\n    value: function calcHeight(shape, width) {\n      return calcShapeHeight(shape, width) || width * 100;\n    }\n  }, {\n    key: \"buildImageUrl\",\n    value: function buildImageUrl(resizeUrl, name, width, height, src, offsetx, offsety, cropWidth, cropHeight, useWebP) {\n      if (offsetx || offsety || cropWidth || cropHeight) {\n        return \"\".concat(resizeUrl, \"/\").concat(width, \"x\").concat(height, \"/\").concat(name, \"?source=\").concat(src, \"&operation=CROP&offset=\").concat(offsetx, \"x\").concat(offsety, \"&resize=\").concat(cropWidth, \"x\").concat(cropHeight) + (useWebP ? '&webp=true' : '');\n      }\n      return \"\".concat(resizeUrl, \"/\").concat(width, \"x\").concat(height, \"/\").concat(name, \"?source=\").concat(src) + (useWebP ? '&webp=true' : '');\n    }\n  }, {\n    key: \"getFocalCoordinate\",\n    value: function getFocalCoordinate(focalCoordinate, limit, sideSize) {\n      var pointStart = focalCoordinate - sideSize / 2;\n      pointStart = pointStart < 0 ? 0 : pointStart;\n      var pointEnd = focalCoordinate + sideSize / 2;\n      pointEnd = pointEnd > limit ? limit - sideSize : pointEnd;\n      if (pointEnd < focalCoordinate) {\n        var startDiff = Math.abs(pointStart + sideSize / 2 - focalCoordinate);\n        var endDiff = Math.abs(pointEnd + sideSize / 2 - focalCoordinate);\n        if (startDiff <= endDiff) {\n          return Math.floor(pointStart);\n        } else {\n          return Math.floor(pointEnd);\n        }\n      } else {\n        return Math.floor(pointStart);\n      }\n    }\n  }, {\n    key: \"getCropCoordsForShape\",\n    value: function getCropCoordsForShape(shape, width, height, imageWidth, imageHeight, offsetx, offsety, cropWidth, cropHeight, focalPointX, focalPointY) {\n      var newCropHeight = cropHeight;\n      var newCropWidth = cropWidth;\n      if (imageWidth && imageHeight) {\n        if (focalPointX === 0 && focalPointY === 0) {\n          if (cropWidth && cropHeight) {\n            focalPointX = offsetx + Math.round(cropWidth / 2);\n            focalPointY = offsety + Math.round(cropHeight / 2);\n          } else {\n            focalPointX = Math.round(imageWidth / 2);\n            focalPointY = Math.round(imageHeight / 2);\n          }\n        }\n        if (shape === 'square') {\n          if (cropWidth === 0 && cropHeight === 0) {\n            newCropWidth = Math.min(imageWidth, imageHeight);\n          } else {\n            newCropWidth = Math.min(cropWidth, cropHeight);\n          }\n          newCropHeight = newCropWidth;\n        }\n        if (shape === '16x9') {\n          if (cropWidth === 0 && cropHeight === 0) {\n            var newWidth = imageHeight * (16 / 9);\n            if (newWidth < imageWidth) {\n              // If the new width fits, use the imageHeight to caclulate the cropWidth\n              newCropWidth = Math.round(imageHeight * 16 / 9);\n              newCropHeight = imageHeight;\n            } else {\n              newCropWidth = imageWidth;\n              newCropHeight = Math.round(imageWidth * 9 / 16);\n            }\n          } else {\n            var _newWidth = cropHeight * (16 / 9);\n            if (_newWidth < cropWidth) {\n              // If the new width fits, use the imageHeight to caclulate the cropWidth\n              newCropWidth = Math.round(cropHeight * 16 / 9);\n              newCropHeight = cropHeight;\n            } else {\n              newCropWidth = cropWidth;\n              newCropHeight = Math.round(cropWidth * 9 / 16);\n            }\n          }\n        }\n        if (shape === 'Cinema2K') {\n          if (cropWidth === 0 && cropHeight === 0) {\n            var _newWidth2 = imageHeight * Cinema2K;\n            if (_newWidth2 < imageWidth) {\n              // If the new width fits, use the imageHeight to caclulate the cropWidth\n              newCropWidth = Math.round(imageHeight * Cinema2K);\n              newCropHeight = imageHeight;\n            } else {\n              newCropWidth = imageWidth;\n              newCropHeight = Math.round(imageWidth * 1 / Cinema2K);\n            }\n          } else {\n            var _newWidth3 = cropHeight * Cinema2K;\n            if (_newWidth3 < cropWidth) {\n              // If the new width fits, use the imageHeight to caclulate the cropWidth\n              newCropWidth = Math.round(cropHeight * Cinema2K);\n              newCropHeight = cropHeight;\n            } else {\n              newCropWidth = cropWidth;\n              newCropHeight = Math.round(cropWidth * 1 / Cinema2K);\n            }\n          }\n        }\n        focalPointX = Math.max(Math.min(focalPointX, imageWidth - Math.round(newCropWidth / 2)), offsetx + Math.round(newCropWidth / 2));\n        focalPointY = Math.max(Math.min(focalPointY, imageHeight - Math.round(newCropHeight / 2)), offsety + Math.round(newCropHeight / 2));\n        if (cropWidth && cropHeight) {\n          return {\n            offsetx: focalPointX - Math.round(cropWidth / 2),\n            offsety: focalPointY - Math.round(cropHeight / 2),\n            cropWidth: newCropWidth,\n            cropHeight: newCropHeight\n          };\n        }\n        if (!newCropWidth) {\n          newCropWidth = imageWidth;\n        }\n        if (!newCropHeight) {\n          newCropHeight = imageHeight;\n        }\n        return {\n          offsetx: focalPointX - Math.round(newCropWidth / 2),\n          offsety: focalPointY - Math.round(newCropHeight / 2),\n          cropWidth: newCropWidth,\n          cropHeight: newCropHeight\n        };\n      }\n      return {\n        offsetx: 0,\n        offsety: 0,\n        cropWidth: 0,\n        cropHeight: 0\n      };\n    }\n  }]);\n  return ImageCalculator;\n}();\nexports.ImageCalculator = ImageCalculator;\nvar Image = /*#__PURE__*/function (_Component) {\n  _inherits(Image, _Component);\n  var _super = _createSuper(Image);\n  function Image() {\n    _classCallCheck(this, Image);\n    return _super.apply(this, arguments);\n  }\n  _createClass(Image, [{\n    key: \"render\",\n    value: function render() {\n      var _this = this;\n      var src;\n      var hdSrc;\n      var webpSrc;\n      var height;\n      var name = this.props.alt ? urlify(this.props.alt) : '';\n      var srcset = undefined; // eslint-disable-line no-undef-init\n\n      if (this.props.shape === 'square') {\n        src = \"\".concat(this.props.resizeUrlSquare, \"/\").concat(this.props.width, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        hdSrc = \"\".concat(this.props.resizeUrlSquare, \"/\").concat(this.props.width * 2, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        webpSrc = \"\".concat(this.props.resizeUrlSquare, \"/\").concat(this.props.width, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        height = this.props.width;\n        if (this.props.cropWidth || this.props.cropHeight) {\n          src += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n          hdSrc += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n          webpSrc += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight, \"&webp=true\");\n        }\n      } else if (this.props.shape === '16x9') {\n        src = \"\".concat(this.props.resizeUrl16x9, \"/\").concat(this.props.width, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        hdSrc = \"\".concat(this.props.resizeUrl16x9, \"/\").concat(this.props.width * 2, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        webpSrc = \"\".concat(this.props.resizeUrl16x9, \"/\").concat(this.props.width, \"/\").concat(name, \"?source=\").concat(this.props.src);\n        height = Math.ceil(this.props.width * 9 / 16);\n        if (this.props.cropWidth || this.props.cropHeight) {\n          src += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n          hdSrc += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n          webpSrc += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight, \"&webp=true\");\n        }\n      } else {\n        var calc = new ImageCalculator();\n        height = this.props.height || calc.calcHeight(this.props.shape, this.props.width) || width * 100;\n        var _calc$getCropCoordsFo3 = calc.getCropCoordsForShape(this.props.shape, this.props.width, height, this.props.imageWidth, this.props.imageHeight, Math.max(0, this.props.offsetx), Math.max(0, this.props.offsety), Math.min(this.props.cropWidth, this.props.imageWidth), Math.min(this.props.cropHeight, this.props.imageHeight), this.props.focalpointx, this.props.focalpointy),\n          offsetx = _calc$getCropCoordsFo3.offsetx,\n          offsety = _calc$getCropCoordsFo3.offsety,\n          cropWidth = _calc$getCropCoordsFo3.cropWidth,\n          cropHeight = _calc$getCropCoordsFo3.cropHeight;\n        src = calc.buildImageUrl(this.props.resizeUrl, name, this.props.width, height, this.props.src, offsetx, offsety, cropWidth, cropHeight, false);\n        hdSrc = calc.buildImageUrl(this.props.resizeUrl, name, this.props.width * 2, height * 2, this.props.src, offsetx, offsety, cropWidth, cropHeight, false);\n        webpSrc = calc.buildImageUrl(this.props.resizeUrl, name, this.props.width, height, this.props.src, offsetx, offsety, cropWidth, cropHeight, true);\n        if (this.props.sizes && this.props.sizes.length) {\n          srcset = this.props.sizes.reduce(function (prev, cur, i) {\n            return i > 1 ? prev + ', ' + calc.buildImageUrl(_this.props.resizeUrl, name, cur, calc.calcHeight(_this.props.shape, cur), _this.props.src) + ' ' + cur + 'px' : calc.buildImageUrl(_this.props.resizeUrl, name, prev, calc.calcHeight(_this.props.shape, prev), _this.props.src) + ' ' + prev + 'px, ' + calc.buildImageUrl(_this.props.resizeUrl, name, cur, calc.calcHeight(_this.props.shape, cur), _this.props.src) + ' ' + cur + 'px';\n          });\n        }\n      }\n      return /*#__PURE__*/_react[\"default\"].createElement(\"picture\", null, /*#__PURE__*/_react[\"default\"].createElement(\"source\", {\n        type: \"image/webp\",\n        srcSet: webpSrc\n      }), /*#__PURE__*/_react[\"default\"].createElement(\"source\", {\n        type: \"image/jpeg\",\n        srcSet: hdSrc + ' 1.5x'\n      }), /*#__PURE__*/_react[\"default\"].createElement(\"img\", {\n        className: this.props.className,\n        loading: this.props.lazy ? 'lazy' : 'auto',\n        src: src,\n        width: this.props.width,\n        height: height,\n        srcSet: srcset,\n        alt: this.props.alt\n      }));\n    }\n  }]);\n  return Image;\n}(_react.Component);\nexports[\"default\"] = Image;\nvar AmpImage = /*#__PURE__*/function (_Component2) {\n  _inherits(AmpImage, _Component2);\n  var _super2 = _createSuper(AmpImage);\n  function AmpImage() {\n    _classCallCheck(this, AmpImage);\n    return _super2.apply(this, arguments);\n  }\n  _createClass(AmpImage, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      var src;\n      var height;\n      var name = this.props.alt ? urlify(this.props.alt) : '';\n      var srcset = undefined; // eslint-disable-line no-undef-init\n      if (this.props.shape === 'square') {\n        src = this.props.resizeUrlSquare + '/' + this.props.width + '?source=' + this.props.src;\n        height = this.props.width;\n        if (this.props.cropWidth || this.props.cropHeight) {\n          src += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n        }\n        src += canUseWebP() ? '&webp=true' : '';\n      } else if (this.props.shape === '16x9') {\n        src = this.props.resizeUrl16x9 + '/' + this.props.width + '?source=' + this.props.src;\n        height = Math.ceil(this.props.width * 9 / 16);\n        if (this.props.cropWidth || this.props.cropHeight) {\n          src += \"&operation=CROP&offset=\".concat(this.props.offsetx, \"x\").concat(this.props.offsety, \"&resize=\").concat(this.props.cropWidth, \"x\").concat(this.props.cropHeight);\n        }\n        src += canUseWebP() ? '&webp=true' : '';\n      } else {\n        var calc = new ImageCalculator();\n        height = this.props.height || calc.calcHeight(this.props.shape, this.props.width) || this.props.width * 100;\n        var _calc$getCropCoordsFo4 = calc.getCropCoordsForShape(this.props.shape, this.props.width, height, this.props.imageWidth, this.props.imageHeight, Math.max(0, this.props.offsetx), Math.max(0, this.props.offsety), Math.min(this.props.cropWidth, this.props.imageWidth), Math.min(this.props.cropHeight, this.props.imageHeight), this.props.focalpointx, this.props.focalpointy),\n          offsetx = _calc$getCropCoordsFo4.offsetx,\n          offsety = _calc$getCropCoordsFo4.offsety,\n          cropWidth = _calc$getCropCoordsFo4.cropWidth,\n          cropHeight = _calc$getCropCoordsFo4.cropHeight;\n        src = calc.buildImageUrl(this.props.resizeUrl, name, this.props.width, height, this.props.src, offsetx, offsety, cropWidth, cropHeight, canUseWebP());\n        if (this.props.sizes && this.props.sizes.length) {\n          srcset = this.props.sizes.reduce(function (prev, cur, i) {\n            return i > 1 ? prev + ', ' + calc.buildImageUrl(_this2.props.resizeUrl, name, cur, calc.calcHeight(_this2.props.shape, cur), _this2.props.src) + ' ' + cur + 'px' : calc.buildImageUrl(_this2.props.resizeUrl, name, prev, calc.calcHeight(_this2.props.shape, prev), _this2.props.src) + ' ' + prev + 'px, ' + calc.buildImageUrl(_this2.props.resizeUrl, cur, calc.calcHeight(_this2.props.shape, cur), _this2.props.src) + ' ' + cur + 'px';\n          });\n        }\n      }\n      return /*#__PURE__*/_react[\"default\"].createElement(\"amp-img\", {\n        layout: this.props.layout ? this.props.layout : 'responsive',\n        className: this.props.className,\n        src: src,\n        width: this.props.width,\n        height: height,\n        srcSet: srcset,\n        alt: this.props.alt\n      });\n    }\n  }]);\n  return AmpImage;\n}(_react.Component);\nexports.AmpImage = AmpImage;\nImage.propTypes = {\n  src: _propTypes[\"default\"].string.isRequired,\n  width: _propTypes[\"default\"].number.isRequired,\n  height: _propTypes[\"default\"].number,\n  offsetx: _propTypes[\"default\"].number,\n  offsety: _propTypes[\"default\"].number,\n  cropWidth: _propTypes[\"default\"].number,\n  cropHeight: _propTypes[\"default\"].number,\n  focalpointx: _propTypes[\"default\"].number,\n  focalpointy: _propTypes[\"default\"].number,\n  imageWidth: _propTypes[\"default\"].number,\n  imageHeight: _propTypes[\"default\"].number,\n  sizes: _propTypes[\"default\"].array,\n  shape: _propTypes[\"default\"].string,\n  resizeUrl: _propTypes[\"default\"].string,\n  resizeUrlSquare: _propTypes[\"default\"].string,\n  resizeUrl16x9: _propTypes[\"default\"].string\n};\nImage.defaultProps = {\n  height: 0,\n  offsetx: 0,\n  offsety: 0,\n  cropWidth: 0,\n  cropHeight: 0,\n  focalpointx: 0,\n  focalpointy: 0,\n  sizes: [],\n  shape: 'original',\n  resizeUrl: 'https://image-prod.iol.co.za/resize',\n  resizeUrlSquare: 'https://image-prod.iol.co.za/square',\n  resizeUrl16x9: 'https://image-prod.iol.co.za/16x9'\n};\nAmpImage.propTypes = {\n  src: _propTypes[\"default\"].string.isRequired,\n  width: _propTypes[\"default\"].number.isRequired,\n  height: _propTypes[\"default\"].number,\n  offsetx: _propTypes[\"default\"].number,\n  offsety: _propTypes[\"default\"].number,\n  cropWidth: _propTypes[\"default\"].number,\n  cropHeight: _propTypes[\"default\"].number,\n  focalpointx: _propTypes[\"default\"].number,\n  focalpointy: _propTypes[\"default\"].number,\n  imageWidth: _propTypes[\"default\"].number,\n  imageHeight: _propTypes[\"default\"].number,\n  sizes: _propTypes[\"default\"].array,\n  shape: _propTypes[\"default\"].string,\n  resizeUrl: _propTypes[\"default\"].string,\n  resizeUrlSquare: _propTypes[\"default\"].string,\n  resizeUrl16x9: _propTypes[\"default\"].string\n};\nAmpImage.defaultProps = {\n  height: 0,\n  offsetx: 0,\n  offsety: 0,\n  cropWidth: 0,\n  cropHeight: 0,\n  focalpointx: 0,\n  focalpointy: 0,\n  sizes: [],\n  shape: 'original',\n  resizeUrl: 'https://image-prod.iol.co.za/resize',\n  resizeUrlSquare: 'https://image-prod.iol.co.za/square',\n  resizeUrl16x9: 'https://image-prod.iol.co.za/16x9'\n};","import React, { useEffect, useState } from \"react\"\nimport styled, { x, system } from '@xstyled/styled-components'\nimport arrowUp from '../../../../assets/images/icons/arrow-up.svg'\n\nexport default function ScrollToTop() {\n  const [isVisible, setIsVisible] = useState(false);\n\n  // Show button when page is scorlled upto given distance\n  const toggleVisibility = () => {\n    if (window.pageYOffset > 300) {\n      setIsVisible(true);\n    } else {\n      setIsVisible(false);\n    }\n  }\n\n  // Set the top cordinate to 0\n  // make scrolling smooth\n  const scrollToTop = () => {\n    window.scrollTo({\n      top: 0,\n      behavior: \"smooth\"\n    })\n  }\n\n  useEffect(() => {\n    window.addEventListener(\"scroll\", toggleVisibility);\n  }, []);\n\n  return (\n    <x.div position='fixed' zIndex='1000' bottom={{ sm: '130px', lg: '110px' }} right={10} cursor='pointer' borderRadius='full' backgroundColor='ltGrey' w={42} he={42} display='block' className='scroll-to-top'>\n      {isVisible && (\n        <x.div onClick={scrollToTop}>\n          <x.img src={arrowUp} alt=\"Go to top\" w='100%' h='100%' display='block' />\n        </x.div>\n      )}\n    </x.div>\n  );\n}"],"sourceRoot":""}