{"version":3,"sources":["Charts/ChartBase.js","Charts/Plot.js","App.module.js","Brand/Brand.module.js","Consumer/Consumer.module.js","ConsumerSampling/ConsumerSampling.module.js","Files/Files.module.js","FitConsistency/FitConsistency.module.js","Analytics/Analytics.module.js","Help/Help.module.js","Charts/Charts.module.js","News/News.module.js","Nav/MoreNav.module.js","ProductDetail/ProductDetail.module.js","Purchase/Purchase.module.js","Reports/Reports.module.js","Returns/Returns.module.js","Terms/Terms.module.js","i18n/I18n.module.js","Products/Products.module.js","StandardReports/StandardReports.module.js","Util/Util.module.js","StandardReports/Comparisons/Comparisons.module.js","StandardReports/Nav/StoreNav.module.js","StandardReports/ExecutiveSummary/ExecutiveSummary.module.js","StandardReports/Shoppers/Shoppers.module.js","StandardReports/Transactions/Transactions.module.js","Util/ActivityRegionFilter/ActivityRegionFilter.module.js","Util/AggregationDetail/AggregationDetail.module.js","Util/BrandSelection/BrandSelection.module.js","Util/CategorySelection/CategorySelection.module.js","Util/CollapsibleBox/CollapsibleBox.module.js","Util/CollapsibleMenu/CollapsibleMenu.module.js","Util/DashboardDescription/DashboardDescription.module.js","Util/Filters/Filter.module.js","Util/Pagination/Pagination.module.js","Util/StoreSelection/StoreSelection.module.js","Util/UIGrid/UIGridInfiniteScroll.module.js","App.ctrl.js","Dashboard.ctrl.js","GoogleAnalytics.service.js","Retailer.service.js","Api/Api.js","Brand/BrandAffinity.ctrl.js","Brand/BrandAffinityReport.service.js","Brand/BrandReports.ctrl.js","Brand/BrandReports.service.js","Consumer/ConsumerProfile.ctrl.js","Consumer/ConsumerProfileReport.service.js","Consumer/ConsumerReports.ctrl.js","Consumer/ConsumerReports.service.js","ConsumerSampling/AgeRangeChart.directive.js","ConsumerSampling/ConsumerSampling.ctrl.js","ConsumerSampling/ConsumerSamplingReport.service.js","ConsumerSampling/Sampling.factory.js","Files/FileTree.ctrl.js","Files/Files.ctrl.js","Files/Month.service.js","Files/UploadForm.directive.js","FitConsistency/FitConsistency.ctrl.js","FitConsistency/FitConsistencyReport.service.js","Analytics/Analytics.ctrl.js","Analytics/AnalyticsApi.service.js","Analytics/AnalyticsConfig.js","Analytics/AnalyticsView.directive.js","Analytics/ExperimentApi.service.js","Analytics/ExperimentDesign.directive.js","Analytics/MetricChart.directive.js","Analytics/MetricConfig.service.js","Analytics/MetricSummary.directive.js","Analytics/infoIcon.directive.js","Help/Help.ctrl.js","Help/Help.service.js","Charts/AreaLineChart.js","Charts/BarChart.js","Charts/BarChartWithAxes.js","Charts/BarChartWithoutLabel.js","Charts/Chart.directive.js","Charts/ContextChart.js","Charts/DeltaSigmaChart.js","Charts/Inspector.js","Charts/Legend.js","Charts/LineChart.js","Charts/PieChart.js","Charts/ReturnsPerformanceChart.js","Charts/SizeAdviceChart.js","News/News.ctrl.js","Nav/PageWithMenu.ctrl.js","ProductDetail/ProductDetail.ctrl.js","ProductDetail/ProductDetail.service.js","Purchase/PurchaseAttribute.service.js","Purchase/PurchaseAttributeReport.service.js","Purchase/PurchaseAttributes.ctrl.js","Reports/AllReports.ctrl.js","Reports/CategoryReports.ctrl.js","Reports/ReportUtil.service.js","Reports/Reports.service.js","Reports/reportTitle.filter.js","Returns/ReturnsPerformance.ctrl.js","Returns/ReturnsPerformanceReport.service.js","Terms/Terms.ctrl.js","Terms/Terms.directive.js","Terms/Terms.service.js","Products/ProdDashboard.ctrl.js","Products/ProdFiles.ctrl.js","Products/ProductMgr.js","Products/StyleSummary.class.js","Products/UploadButton.directive.js","StandardReports/ConsumerChart.service.js","StandardReports/StandardReports.service.js","StandardReports/StandardReportsDatePicker.directive.js","Util/AnalyticsHelper.service.js","Util/AnchorScroll.directive.js","Util/Cache.provider.js","Util/ChartUtil.js","Util/Charts.service.js","Util/Constants.js","Util/GaUtil.service.js","Util/LookAndFeel.service.js","Util/ProgressModal.service.js","Util/SetChartLayout.directive.js","Util/Switch.directive.js","Util/TitleCase.filter.js","Util/ValidateInputDate.directive.js","Util/loading.directive.js","Util/ngUtil.js","Util/percent.filter.js","Util/sessionStorage.service.js","Util/sortBy.filter.js","Util/user.filter.js","StandardReports/Comparisons/Comparisons.service.js","StandardReports/Comparisons/ComparisonsConfig.service.js","StandardReports/ConsumerAreaLineChart/AreaLineChartAxisHandle.factory.js","StandardReports/ConsumerAreaLineChart/AreaLineChartConfig.factory.js","StandardReports/ConsumerChartCallout/ConsumerChartCallout.directive.js","StandardReports/HighCharts/HighCharts.ctrl.js","StandardReports/HighCharts/HighCharts.directive.js","StandardReports/HighCharts/HighCharts.service.js","StandardReports/Nav/StorePage.ctrl.js","StandardReports/ExecutiveSummary/ExecutiveSummary.ctrl.js","StandardReports/ExecutiveSummary/ExecutiveSummary.service.js","StandardReports/Shoppers/ShopperReports.service.js","StandardReports/Shoppers/ShoppersConfig.service.js","StandardReports/Transactions/Transactions.service.js","StandardReports/Transactions/TransactionsConfig.service.js","StandardReports/Util/DateUtil.factory.js","Util/ActivityRegionFilter/AcitivityRegionFilter.directive.js","Util/ActivityRegionLabel/ActivityRegionLabel.directive.js","Util/AggregationDetail/AggregationDetail.directive.js","Util/BrandSelection/BrandSelection.directive.js","Util/CategorySelection/CategorySelection.directive.js","Util/CollapsibleBox/CollapsibleBox.directive.js","Util/CollapsibleMenu/CollapsibleMenu.directive.js","Util/ColorCode/ColorCode.service.js","Util/ColorSwatch/ColorSwatch.directive.js","StandardReports/Filters/Filter.class.js","StandardReports/Filters/Filter.directive.js","StandardReports/Filters/Filters.service.js","StandardReports/Callout/Callout.service.js","StandardReports/Callout/MainSublabelsTopCallout.directive.js","StandardReports/Callout/Prop.service.js","StandardReports/Callout/numberLoader.filter.js","Util/DashboardDescription/DashboardDescription.directive.js","Util/DatePickerWithPresetRange/DatePickerWithPresetRange.directive.js","Util/Filter/Activity.class.js","Util/Filter/ActivityRegion.factory.js","Util/Filter/Filter.factory.js","Util/Filter/Region.class.js","Util/FilterPanel/FilterPanel.directive.js","Util/Filters/AttributeFilterFactory.class.js","Util/Filters/AttributeValueFilterFactory.class.js","Util/Filters/Filter.ctrl.js","Util/Filters/Filter.directive.js","Util/Filters/FilterFactory.class.js","Util/Filters/HierarchyFilterFactory.class.js","Util/Pagination/Pagination.directive.js","Util/StoreSelection/StoreSelection.directive.js","Util/UIGrid/UIGridInfiniteScroll.ctrl.js","Util/UIGrid/UIGridInfiniteScroll.directive.js","StandardReports/Comparisons/ComparisonChartTitle/ComparisonChartTitle.ctrl.js","StandardReports/Comparisons/ComparisonChartTitle/ComparisonChartTitle.directive.js","StandardReports/Comparisons/DateRange/ComparisonsDateRange.ctrl.js","StandardReports/Comparisons/Hierarchy/ComparisonsHierarchy.ctrl.js","StandardReports/HighCharts/LegendGroup/LegendGroup.ctrl.js","StandardReports/HighCharts/LegendGroup/LegendGroup.directive.js","StandardReports/Shoppers/ActiveUsers/ActiveUsers.ctrl.js","StandardReports/Shoppers/ActiveUsers/UserLine.class.js","StandardReports/Shoppers/Adoption/ShopperAdoption.class.js","StandardReports/Shoppers/Adoption/ShopperAdoption.ctrl.js","StandardReports/Shoppers/Adoption/ShopperAdoptionCallout.class.js","StandardReports/Shoppers/RecipientProfiles/RecipientProfiles.ctrl.js","StandardReports/Shoppers/Sessions/ShopperSessions.ctrl.js","StandardReports/Shoppers/ShopperProfiles/ShopperProfiles.ctrl.js","StandardReports/Shoppers/ShopperProfiles/ShopperProfiles.service.js","StandardReports/Shoppers/Summary/ShopperSummary.ctrl.js","StandardReports/Transactions/OrderRateSummary/OrderRateSummary.ctrl.js","StandardReports/Transactions/Orders/TransactionOrders.ctrl.js","StandardReports/Transactions/Revenue/TransactionRevenue.ctrl.js","StandardReports/Transactions/Summary/TransactionSummary.ctrl.js","StandardReports/Util/CheckBox/CheckBox.directive.js","StandardReports/Util/ExportSelection/ExportSelection.directive.js","StandardReports/Filters/FilterTypes/BaseFilterType.class.js","StandardReports/Filters/FilterTypes/DetailLevelFilter.class.js","StandardReports/Filters/FilterTypes/DeviceType.class.js","StandardReports/Filters/FilterTypes/ProductHierarchyFilter.class.js","StandardReports/Filters/FilterTypes/RegionFilter.class.js","StandardReports/Filters/HierarchyFilter/HierarchyFilter.directive.js"],"names":["d3","chart","initialize","options","plot","this","_padding","_","extend","top","bottom","left","right","padding","_w","_h","w","h","wrap","base","append","isRoot","on","attr","node","nodeName","toLowerCase","_update","translate","width","arguments","length","trigger","redraw","height","clone","pad","side","value","p","redrawing","data","draw","svg","select","ownerSVGElement","defsNode","defs","empty","insert","transform","calcXRange","x","range","showGrid","axes","y","tickPadding","innerTickSize","axisSvgs","call","calcYRange","defaults","xAxis","yAxis","xFormat","yFormat","contextMode","fn","defaultFns","d","time","scale","linear","yDomain","color","category10","clipperId","viz","classed","centerAxis","layer","dataBind","__","filter","domain","selectAll","events","merge","axis","orient","style","tickFormat","domainTipText","Date","toLocaleString","cullData","allData","allDomain","curDomain","allSize","curSize","approxNewLength","dataPerPixel","Math","max","round","cullingFactor","i","setXDomain","extent","setYDomain","maxAbs","map","abs","brushed","withSeries","series","callback","s","ret","describeDatumUnder","coords","dx","datum","yVals","scaleX","invert","xVal","min","Infinity","tipTextRows","push","name","tipText","text","concat","Error","setData","slice","each","property","config","$urlRouterProvider","$httpProvider","$uiViewScrollProvider","$provide","NavProvider","AuthProvider","ReportCategories","$uibModalProvider","BrandReportKeys","ConsumerReportKeys","LookAndFeelType","setBasePath","interceptors","useAnchorScroll","otherwise","$injector","get","go","canAccess","stateName","lookAndFeel","canAccessOverride","$state","LookAndFeel","can","eq","brandMetricsMenuItems","state","iconCls","isBrandMetric","openAccess","children","report","menuItemsMap","lookAndFeelType","BrandMetrics","items","Analytics","menuItems","flatMap","menuItem","item","child","isString","setAppTitle","addMain","windowTemplateUrl","decorator","$delegate","originalCan","termCan","Terms","requireTerms","cookieExistsAndAccepted","run","$rootScope","Nav","GaUtil","Auth","CookieJar","BrandReports","$stateParams","Toast","translateFilter","$log","ApiErrorHandler","UtilCacheProvider","AnalyticsHelper","createGaTracker","isLoading","selectedBrand","includes","set","encodeURIComponent","$on","user","getUser","setLookAndFeelOnUserLogin","sendLoginEvent","isAccepted","then","firstItem","find","mainMenu","invoke","onClick","reset","remove","event","toState","toParams","fromState","isAuthenticated","getCookie","preventDefault","sendPageChangeEvent","$watch","removeAll","setUserIdDimension","fromParams","error","toastError","angular","module","constant","TransactionFilterType","Direct","Wholesale","$stateProvider","abstract","parent","url","auth","privilege","template","title","path","templateUrl","controller","params","pageNumber","pageSize","resolve","selectedBrandKey","brandKey","filters","activityRegion","getBrandAffinityFilters","transaction","region","reportData","BrandAffinityTimeFrames","timeFrame","getSelected","getSelectedRegion","getLabel","getBrandAffinity","focusDepartment","focusCategory","affinityDepartment","affinityCategory","focusHierarchies","findFocusHierarchies","o","filterBrandCategories","affinityHierarchies","findAffinityHierarchies","pricePointData","getPricePointData","brands","findUserBrandNames","itemCount","getPurchaseBrandItemCount","aggregationLogDetails","getDashboardAggregationLogDetails","fnName","resolver","ConsumerReports","stateParamsGender","gender","getConsumerProfileFilters","genderData","Enums","getGenderAggregations","womenPercent","menPercent","ageData","heightData","weightData","inseamData","footLengthData","bustSizeData","userBrands","findBrandNames","samplingSummary","consumerSampling","getConsumerSamplingSummary","samplingGender","getConsumerSamplingGenderDetails","samplingAgeRange","getConsumerSamplingAgeRangeDetails","regex","retailers","Retailer","views","@pageWithMenu","$scope","onUpload","reload","reportsCount","Reports","reportCount","tla","category","year","itemsPerPage","reports","tlaTree","tlaFilterReport","fileTree@pageWithMenu","getConsistencyFilters","hierarchies","hierarchy","findConsistencyHierarchies","department","styleData","some","findConsistencySizeAdvices","experiments","ExperimentApi","stores","experiment","intervals","AnalyticsApi","getIntervals","randomInt","floor","random","selection","prototype","isFunction","translateText","apply","isArray","window","uuid","replace","xy","toString","onEnter","isBrandMetrics","setGaDimension","setToBrandMetrics","styleSummary","ProductDetail","getProductStyleSummary","styleId","styleSizeAdvice","getProductStyleSizeAdvice","attributeValues","getPurchaseAttributeStyle","topBrands","getPurchaseAffinityTopBrands","categoryTopBrands","getPurchaseAffinityCategoryTopBrands","sizeAdvice","getFitConsistencySizeAdvice","consumerAgeRange","getConsumerStylesAgeRange","consumerHeight","getConsumerStylesHeight","consumerWeight","getConsumerStylesWeight","PurchaseAttribute","getPurchaseAttributeFilters","attributeHierarchies","getAttributeHierarchies","attributes","selectedHierarchy","uniq","sort","selectedAttribute","attribute","key","unshift","isActive","hierarchyFilter","HierarchyFilter","attributeFilter","AttributeFilter","attributeValueFilter","AttributeValueFilter","attributeValue","salesByAttribute","getSalesByAttribute","salesByConsumerAge","getSalesByConsumerAge","salesByConsumerBmi","getSalesByConsumerBmi","defaultTo","defaultTla","forEach","reportCategory","getReturnsPerformanceFilters","summary","getReturnsPerformanceSummary","getReturnsPerformance","getReturnsPerformanceBySizeHierarchies","sizeType","localeCode","getReturnsPerformanceBySizeSummary","$translateProvider","useStaticFilesLoader","files","prefix","suffix","preferredLanguage","useSanitizeValueStrategy","Daily","Weekly","Monthly","moment","format","Colors","tfLine","stroke","fill","opacity","class","nonTFLine","botLine","totalLine","registered","siteRegistered","travellingRegistered","ipRegistered","directive","tfcMainNavDirective","tfcMainNav","copy","util","parseJwt","jwt","parts","split","header","base64Json","payload","parseMultipartHeader","reduce","part","pair","startsWith","endsWith","JSON","parse","encoded","atob","DateUtil","$filter","formatJsonDate","json","service","comparisonTab","type","comparisonAddressable","storeKey","array","deviceType","continent","country","uiLocale","addressable","isAnalytics","setToAnalytics","userStores","StandardReports","findUserStores","storeKeys","defaultSelectedStores","Filters","getConsumerFilters","dimensions","createFilter","getFilterParams","restrict","scope","ReportFormat","queryFilters","queryParams","getConsumerData","profileValues","sortBy","AppCtrl","r","a","m","q","l","createElement","getElementsByTagName","async","src","parentNode","insertBefore","document","Api","cache","factory","$http","$q","BASE","api","createApi","withBasePath","getBasePath","withEncodedPath","pathParam","basePath","method","apiRequest","fallBack","handleRequest","apiUrl","promise","catch","reason","apiFailure","response","fallBacks","handler","fallback","isStatusCodeHandled","status","handle","reject","responseError","err","NotFound","InternalError","createFallback","BrandAffinityCtrl","PageSize","$timeout","BrandAffinityReport","BrandDisplaySize","Filter","other","vm","ANY_DEPARTMENT","timeFrames","unfilteredData","relatedBrands","filteredText","totalCount","filteredCount","currentPage","maxSize","horizontal","horizontalLabelSize","verticalLabelSize","dashedLabelBoxes","barSpacing","disableBar","labelSize","display","aggregationDetails","gaUtil","isHierarchyNullOrEmpty","isFocus","trim","clean","selectedTransaction","findInHierarchies","selectedFocusHierarchy","selectedAffinityHierarchy","selectedTimeFrame","seriesFields","selectedSeries","activityRegionFilters","selectedRegion","setBrandData","dataObject","defaultsDeep","label","valueLabel","index","toFixed","brand","brandName","indexOf","brandDataRange","maxPercentByCount","maxBy","itemPercent","maxPercentBySales","salesPercent","ceil","getHierarchy","join","doReload","isFocusHierarchy","currStateHierarchy","selectActivityAndReload","activity","sendGaEvent","selectRegionAndReload","labelDescription","isAnyDepartment","getChartHeight","page","lengthData","brandsLength","applyPagination","pricePoint","dontRank","priceLow","priceHigh","setFilteredText","setValueSeries","selectedBrandReload","resetBrand","resetHierarchies","getFilterSummaryText","quantity","hasMultipleActivity","hasMultipleRegion","downloadReport","onFocusHierarchyChange","onAffinityHierarchyChange","Upload","ExcelReportType","selectedFocusDepartment","selectedFocusCategory","selectedAffinityDepartment","selectedAffinityCategory","fields","isActivityExist","isRegionExist","when","BASE_URL","pickBy","addTransactionHeader","addRegionHeader","identity","responseType","headers","Accept","disposition","all","fileName","filename","dataBlob","Blob","content","download","BrandReportsCtrl","$location","BRAND_URL","selectedBrandFromCookie","decodeURIComponent","minBy","search","limit","getReturnsPerformanceInsufficientDataStylesCount","getConsistencyInsufficientDataStylesCount","hierarchyObj","sendGAEventOnEnter","eventAction","eventLabel","privileges","ConsumerProfileCtrl","ConsumerProfileReport","toNumericValue","labelSplit","head","Number","POSITIVE_INFINITY","parseFloat","substring","tail","toInteger","last","rawAgeData","age","rawGenderData","rawHeightData","rawWeightData","weight","rawInseamData","inseam","rawBustSizeData","bustSize","rawFootLengthData","footLength","weightUnit","lengthUnit","selectedWeightUnit","selectedHeightUnit","selectedInseamUnit","selectedBustSizeUnit","selectedFootLengthUnit","popupLabels","hideBarLabels","hideTotalLabels","genders","genderArr","toPercentLabel","selectedGender","source","rawData","valueFn","colorFn","genderSlice","percentFn","stackLabel","setHeight","unit","setWeight","setInseam","setFootLength","setBustSize","setAll","resetActivity","resetRegion","resetGender","inherit","ageUnit","heightUnit","inseamUnit","footLengthUnit","bustSizeUnit","ConsumerReportsCtrl","getAgeAggregations","getAggregationsFn","getWeightAggregations","getHeightAggregations","getInseamAggregations","getFootLengthAggregations","getBustSizeAggregations","tfcAgeRangeChartCtrl","ChartService","SplitRange","sampleObj","isDashedLabelBoxesExist","showFirstLastLabels","constructSamplingChart","samplingChart","getBarChartWithLabel","viewChartDetails","dropRight","samplingAgeRangeObj","samplingPercent","cloneDeep","toggleChartSummaryView","assign","bindToController","ConsumerSamplingCtrl","ConsumerSamplingReport","samplingAgeRangeArr","isNumber","appliedSamplingClass","sampling","showBenchmark","isBrandConsumerDetailsAvailable","isBrandSampling","getSamplingSegmentDetails","samplingData","segment","samplingSegment","One and Done","imgSrc","Style Samplers","Omni Samplers","Size Samplers","SamplingSegmentMap","fillFunc","summaryDetails","setSampling","brandConsumerSamplingDetail","samplingObj","universalConsumerSamplingDetail","showBenchmarkLabel","hasOwnProperty","FileTreeCtrl","$interpolate","keyBy","toggleOpen","group","isSelected","years","goTo","goToUpload","file","$off","$broadcast","open","isDragging","activeRetailerList","fileStructure","store","getActiveRetailerList","tree","toArray","mapValues","retailerGroup","yearGroup","FilesCtrl","ReportUtil","$uibModal","$translate","editingReport","reportTitleFilter","callUploadFiles","retailerName","fileType","getSortedReports","openReport","count","treeStructure","retailerGroups","groupBy","retailerYearGroups","retailerFilter","yearFilter","categoryFilter","instant","flatten","values","yearGroupArrays","canAudit","editReport","isEditing","audit","fileKey","toggleActive","update","sendEmail","updated","success","deleteReport","result","delete","splice","pageChange","searchTextChange","MONTHS","getMonth","date","toInt","month","UploadFormCtrl","ProgressModal","contentUrl","categories","isPreviewable","validContentTypes","onChange","invalidFiles","warn","contentType","dataUrl","console","log","onCategoryChange","datepickerOptions","week","minMode","quarter","pick","showDatepicker","updateSendEmail","submit","upload","showModal","translationKey","getStoreName","FitConsistencyCtrl","FitConsistencyReport","offsets","animationsEnabled","isProductDetailAccessible","ALL_CATEGORIES","supplierStyle","styleTitle","unfilteredCategoryData","getUnfilteredData","downloadFctReport","selectedSortField","selectedSortOrder","setFitChart","unFilterDataArray","finalDataArray","isFiltered","row","chartVarianceData","sizeAdviceChart","getSizeAdviceChart","sortByColumn","columnName","order","paramsObj","sortOrder","notify","selectedData","orderBy","lowerCase","onColumnSelection","isUnsorted","getSortClass","navigatePage","regionDescription","previousState","current","selectedDepartment","selectedCategory","selectedLocaleCode","sortField","AnalyticsCtrl","orderByFilter","userTlas","storeTlas","assumeRole","goToAnalytics","canSeeReports","getUserTlas","tlas","getAllMetricData","resultSet","addMetricNames","metricData","addNames","variations","objects","obj","MET_SESSIONS","MET_CHECKOUTS","MET_CONVERSION_RATE","MET_REVENUE","MET_USERS","MET_REVENUE_PER_VISIT","MET_RETURNS","MET_ORDERS","MET_RETURN_RATE","TAB_CONVERSION","TAB_REVENUE","TAB_RETURNS","TAB_OVERVIEW","getTabs","experimentType","summaryMetrics","conversion","defaultOrder","revenue","returns","overview","chartMetrics","kpiToTop","viewType","tab","metrics","kpi","pop","AnalyticsViewCtrl","AnalyticsConfig","experimentKey","loadMetrics","metric","concatMetrics","metricMap","tabs","Object","keys","lastUpdated","refresh","loadMetric","undefined","completeness","sum","variation","targetSessions","MetricChartCtrl","dateFilter","MetricConfig","analyticsVm","fixDate","timestamp","getMinutes","setMinutes","getTimezoneOffset","dateToStr","dateFormat","initParams","interval","start","startDate","end","endDate","dateError","loading","initMetric","getChartOptions","intervalMap","init","_analyticsVm","loadingOverlay","finally","force","startOpen","endOpen","isValid","isCurrentRangeValid","equals","metricName","isRangeValid","isDate","isNaN","getTime","setDate","getDate","maxRange","maxRangeMs","require","hideControls","link","$el","$attrs","ctrls","percentFilter","numberFilter","defaultXFormat","multi","getHours","seriesLen","percentFormat","chartOptions","sigma","confidence","updateVariations","variationSets","first","varSet","isEqual","variationSign","variationType","summaryText","controllerAs","metricNames","$watchCollection","info","placement","HelpCtrl","Help","subject","message","send","post","margin","mousemove","currentXPosition","currentYPosition","elem","maxElemWidths","tooltipWidth","bisect","bisector","xLabels","xLabel","mouse","xMousePos","idx","x0","yPos","layers","focus","getDimension","dim","getBBox","getUpdatedPosition","totalDim","currPos","initialPos","posFunc","dimension","isFinite","prependXLabelText","v","k","yValue","drawAreaChart","stackedTotal","isNull","formatYLabelText","tooltipElem","dateWidth","labelValueWidth","acc","currentValue","maxLabelWidth","maxValueWidth","labelValueMaxWidth","tooltipXPadding","newXPos","tooltipDefaultXPos","newYPos","tooltipDefaultYPos","xPos","calcRange","rect","t","reverse","axisLabels","baseTick","tooltipRowHeight","yAxisLabel","xAxisTicks","ticks","tickInterval","tickValues","charts","lonePoints","line","interpolate","defined","area","y0","y1","exit","chartData","numberOfLines","rowHeight","hasChildNodes","labelColor","that","val","layout","stack","minOrMax","setValue","isUndefined","c","nice","disableBars","zebraLabels","horizontalTotalLabelSize","verticalTotalLabelSize","groups","sortingAmongGroups","barThickness","groupPadding","bucket","rangeBand","getElemShape","bbox","e","origDatum","datumRankPair","j","getXpos","plotLength","itemsInOneGroup","groupNumber","getYpos","getLabelWidth","labels","getTotalLabelWidth","spacing","totalLabel","labelWidth","rangeRoundBands","bars","rankLabel","totalLabels","ordinal","thickness","textX","textY","datumPair","getComputedTextLength","lengthFn","barIndex","halfThickness","fullBarLength","barBg","datumrankPair","highlight","parentDatum","translation","prevBarIndex","tooltip","newGroups","enter","putLabel","barLength","anchorAttr","outsideAnchor","insideAnchor","putOutside","position","transition","duration","popupLabel","pageY","pageX","valuesArray","totalLabelWidth","sumOfAllValues","dataChain","metricValuesFormat","barValue","bgBarWidth","tfcChart","$window","ngUtil","$w","element","eventBinder","elemSize","offsetWidth","offsetHeight","updateChartSize","size","scrollTop","$apply","bases","focusHeight","ctxHeight","clipper","context","brush","inspector","legend","attach","check","clear","delta","yFn","g","tipGroup","tipBox","tip","currentTranslateX","html","update:transition","leftSide","boxWidth","fullWidth","currentX","targetX","remainingPortion","ease","inspect","shape-rendering","lefts","next","onDimensionChange","centerX","centerY","slices","pie","arc","attrTween","startAngle","endAngle","positionLabel","trigFn","PI","sliceLabel","cos","sin","boxSize","SPACING","radius","outerRadius","AXIS_WIDTH","axisWidth","LABEL_WIDTH_RATIO","DEFAULT_PAGE_LENGTH","PLOT_LINE_BAR_COLOR","CONST_ADDITIONAL_HEIGHT","CARET_DOWN","CARET_UP","THICKNESS","LENGTH","PADDING","HALF_THICKNESS","KEY_WIDTH","appendText","handleMouseOver","dataRankPair","handleMouseOut","handleOnClick","isSizeAdviceEnable","closeSizeAdviceTip","changeChartHeight","handleMouseOverStyleName","handleMouseOutFromStyleName","handleMouseClickOverStyleName","showProductDetail","wrapText","limitChar","self","truncate","byBucket","plotWidth","labelXWidth","sizeAdviceCount","plotLine","labelFour","dataNameLabel","navigateProductDetailPage","performanceCategoryLabel","dataTitleLabel","additionalWidth","includeWidth","bucketPos","keyColor","labelXPos","labelGroup","transactionLabel","popoverWidth","sizeAdviceLabelsYCor","leftPadding","markers","temp","SIZE_ADVICE_WIDTH","isSizeAdviceVisible","edge","leftEdge","rightEdge","returnVariationData","changeHeight","leftMin","rightMax","maxIntermediate","plotLineBarColor","sizeAdviseWidth","markerIndex","NewsCtrl","analyticsFirstMenuItem","sendViewChangeEvent","firstMenuItem","PageWithMenuCtrl","ProductDetailCtrl","INCHES_TO_CM","KG_TO_LB","ColorCode","finalArr","colorClassArr","collection","hash","selectedCategoryTopBrands","getBrandsList","selectedTopBrands","selectedActivity","goBack","history","back","returnVariation","isEmpty","colorClass","getColor","convertUnits","arr","newArr","res","affinitybrandKey","keyClassName","chartObject","styleName","offsetChart","consumerDemographicObject","ageRange","heightLow","weightLow","consumerDemographicSummary","demographicObject","forOwn","maxPercentObj","ApiFallback","ApiStatusCodes","STYLE_URL","productDetailFallBack","statusCode","specificallyHandled","PurchaseAttributeReport","selectedAttributeValue","PurchaseAttributesCtrl","ChartType","showAllPurchaseByAttributes","pageType","setSalesByAttribute","percent","dataAvailable","resetHierarchy","resetAttribute","resetAttributeValue","setSelectedItem","getSelectedItemAttribute","setSalesAttributeChart","SalesByAttribute","SalesByConsumerAge","SalesByConsumerBmi","getBarChartWithoutLabel","AllReportsCtrl","showMores","reportIcon","isShowMore","cat","reportMap","showCategory","getReports","CategoryReportsCtrl","$current","progress","Month","FileTypes","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","application/pdf","iteratees","orders","day","contentPromise","previewable","getFileContent","close","$close","dataBlobUrl","$cacheFactory","reportUrl","id","unpack","findAll","searchText","apiFactory","getReportParams","embed","getYear","clearCache","put","reportTitle","unescape","ReturnsPerformanceParentCtrl","DashboardDescriptionModal","sortCommonColumn","NEGATIVE_INFINITY","getColorSwatch","getReturnsChart","filterDataObject","setSortConfig","updateUrl","ALL_STYLES","activeView","reportKeys","getKeys","openDescriptionModal","variance","ReturnsPerformanceCtrl","ReturnPerformanceReport","$controller","filteredStyle","returnsPerformanceReportKeys","variationPercentage","unfilteredStyleData","unfilteredSummaryData","setSelectedHierarchy","showSizeAdviceChart","divStatus","querySelector","currentCaret","divCurrentStyle","getComputedStyle","classList","add","downloadReturnsReport","returnsChartObj","ReturnsPerformanceBySizeCtrl","unsortedLocale","filteredSize","displaySizeType","displayLocaleCode","unfilteredSizeSummary","selectedSizeType","downloadSizeReport","filteredData","uniqBy","reportType","returnApiType","TermsCtrl","isTermsAccepted","getTermsOfUse","responseSuccess","acceptTermsOfUse","responseFailure","termsCookieValue","ProdDashboardCtrl","ProductMgr","recentFiles","dateUtil","missingStyleDataFn","lastIdentifier","findMissingStyles","columnDefs","field","cellTooltip","headerCellClass","cellClass","infiniteScrollRowsFromEnd","getStyle","gridData","brand-key","store-key","supplier-style","formatMissingStylesData","styles","shipDate","getReport","ProdFilesCtrl","recentFilesDataFn","findFiles","getFileId","file-key","fileId","formatRecentFilesData","noCacheHeader","fileIdentifier","getResponseData","findRecentFiles","findStyleSummary","Cache-Control","Pragma","StyleSummary","highReceived","highMissing","high","lowReceived","lowMissing","low","UploadButtonCtrl","ConsumerChart","ChartUtil","ConsumerChartDisplay","getChartData","getXLabelData","consumerArr","chartDateParser","getFormattedData","chartConfig","dates","getChartConfig","chartType","titleProp","detailLevel","tooltipProp","section","optionalParams","titleTooltip","filterCnfg","sumBy","baseUrl","exportErrorFallBack","maxAge","pathPrefix","dashboard","mappedStores","storeName","selectedStoreKeys","take","filteredPercent","total","usedForReporting","filtered","getColorSwatches","tfKeys","percentTotal","num","den","transformIntoChartData","dateMetrics","metricValues","metricValue","doArraysContainSameElements","currentArray","newArray","xor","calloutOptions","summaryKey","hideTitle","sectionOptions","valuePrefix","valueSuffix","findInSummary","userCohort","summaryVal","userCohortValue","elm","ngModelController","$observe","newValue","$","datepicker","$modelValue","inline","autoSize","showOn","buttonText","maxDate","minDate","onSelect","$setViewValue","$render","filterEvents","Date Range","combinationSelectionEvent","Detail Level","singleSelectionEvent","Continent","multipleSelectionEvent","getRegion","Country","UI Locale","Device Type","getDeviceTypes","Addressable","Hierarchy","eventCategory","location","pathname","sendGaPageView","userId","toView","sendDateRangeChangeEvent","newDateRange","presetRanges","formattedNewStartDate","formatToYearMonthDay","formattedNewEndDate","presetRange","shortMonthDate","dateStart","dateEnd","analyticsEventCategory","sendStoreSelectionChangeEvent","currentSelection","newSelection","sendDataDownloadEvent","eventType","reportName","sendAnalyticsFilterChangeEvent","newFilter","eventParams","eventParamsFn","gaEventParams","filterValue","allValuesFn","allFilters","filterValues","filterType","oldValue","scrollIntoView","block","behaviour","provider","$get","caches","cacheProvider","cacheId","lruObj","freshEnd","staleEnd","capacity","_refresh","entry","_link","prev","nextEntry","prevEntry","MAX_VALUE","lruEntry","timeoutId","clearTimeout","setTimeout","destroy","cacheFactory","dateLabelFormat","gaTrackingId","isInteractive","ga","nonInteraction","pagePath","apiData","gaId","trackingId","cookieDomain","StandardReportPrivileges","isAnalyticsUser","currentLookAndFeel","PENDING","SUCCESS","percentDone","defaultPercentFn","modal","isStatus","expected","showProgress","isPending","bind","isSuccess","isFailure","deferredClose","loaded","SetChartLayout","setChartLayout","attrs","$parent","$last","childElemWidthArr","getElementsByClassName","className","elemWidth","clientWidth","elemCounts","childCounts","childElementCount","remainingWidth","maxWidth","columnClassName","columnWidth","styleNameColWidth","memo","divs","Array","querySelectorAll","firstDivWidth","ngModel","$input","target","String","fromCharCode","keyCode","click","input","txt","charAt","toUpperCase","substr","validateInputDate","momentObj","$options","updateOn","updateOnDefault","$formatters","$parsers","inputDate","isInputValid","diff","formatted","tfcLoadingPane","$compile","loadingIndicator","addClass","after","removeClass","eventBindings","binding","off","digits","sessionStorage","firstName","lastName","email","Comparisons","SectionConfig","ComparisonsMetric","ComparisonsType","AreaLineChartConfig","standardReportNumberFilter","pageConfig","sectionForPage","sectionName","defaultParams","hierarchyLabel","defaultHierarchy","dateRanges","defaultDateRange","dateRangeSummaryLabel","hierarchyCompareTooltipHeader","groupNames","groupNamesHeader","groupName","tableHeader","selectedPoint","dateHeader","formatDateRange","dateRange","maxComparisonStartDate","getFilter","maxAllowedDate","subtract","dateRangeCompareTooltipHeader","getSummaryValues","comparisonMetrics","comparisonMetricLabels","valueColumns","callout","calloutValue","userCohortValues","firstRange","secondRange","calloutLabel","formattedUserCohortValues","formattedDiff","zip","unzip","headerFormatter","multipleXAxis","staticOptions","custom","xAxisFormatter","visibleSeries","visible","allMetricSummary","dataFn","comparisonValues","rangeData","calloutValues","displayName","diffValue","startDateAttr","endDateAttr","departmentAttr","categoryAttr","classificationAttr","addressableAttr","classification","fullMonthDate","transformFunc","ComparisonsConfig","PageConfig","Section","Chart","SeriesService","CalloutLabelService","UserCohort","tf","nonTF","sitewide","isBot","isMatched","sitewideWithBots","sessions","mau","dau","spu","adoption","newUsers","newTFUsers","AreaLineChartAxisHandle","getDetailLevel","getDateDiff","getTicks","getXAxisOptions","xAxesData","xAxisOptions","formatter","overflow","enabled","tickPositions","xTicks","ticksForDetailLevel","tick","crosshair","zIndex","tickWidth","tickmarkPlacement","getYAxisOptions","valueType","axisLabel","tickAmount","yAxisLabelFormatter","showFirstLabel","prependXLabel","onlyMonth","shortMonthDateWithDayOfWeek","getDailyTicks","getWeekTicks","getMonthTicks","monthInterval","days","weeks","months","numericSymbols","lang","pow","Highcharts","numberFormat","maxMarkerPoints","HighChartsService","areaLineChartOptions","plotOptions","pointPlacement","connectorAllowed","states","hover","marker","lineWidthPlus","radiusPlus","areaspline","stacking","shared","useHTML","hideDelay","shape","addRemoveSeries","baseOptions","getBaseOptions","defaultTooltipHeader","points","firstPoint","body","point","chartValues","userOptions","yValues","tooltipOptions","labelText","chartValue","chartTitle","getDataOptions","seriesIndex","groupIndex","xAxisIndex","markerInterval","symbol","colSpan","ConsumerChartCalloutCtrl","customOptions","sectionConfig","callouts","apiParams","formattedDate","words","getData","chartDataFunc","dataOptions","formattedData","setParentValues","calloutData","number","calloutPercentValue","percentOfVal","filteredPct","container","loadChart","errorText","showLoading","chartSeries","hasData","hideLoading","onLoad","containerElem","chartDataOptions","transclude","newVal","oldVal","credits","animation","styledMode","StorePageCtrl","brandMetricsFirstMenuItem","goToBrandMetrics","brandMetricsState","ExecutiveSummaryCtrl","ExecutiveSummary","ExecSummaryMetric","ShopperAdoptionCallout","pathParams","transactionColorSwatch","colorSwatches","cards","dataForUserCohort","card","metricSummary","change","metricLabel","adoptionCallouts","tfSessionsAdoption","tfRevenue","attributeName","tfPercent","ExecutiveSummaryCard","verticalBarChartOptions","clip","revenueFormat","noFormat","execSPU","execConversion","execAOV","execUPT","execARPU","siteWideSwatch","summaryMetric","pointPadding","ExecSummaryCard","changeAttribute","metricTooltip","ShopperReports","Callout","UserLine","userLines","totalTF","tfRegistered","filterConfig","includeBots","userDetails","dataConfig","aggFn","lineData","dataParams","lineType","getLineType","summaryData","summaryParams","summaryPercent","totalValue","percentOutOfAttributeName","activeUserConfig","labelValues","labelValueConfig","commonUserConfig","lineDetails","tfActiveUserConfig","tfUsersConfig","sectionTotal","tfReg","tfSiteReg","tfTravellingReg","tfIPReg","newUserConfig","newTFReg","newTFSiteReg","newTFTravellingReg","newTFIPReg","tfPercentDetails","meanValue","tfActiveUserRecipientConfig","tfUsersWithRecipient","tfUsersWithRecipientSite","tfUsersWithRecipientTravelling","newRecipientProfilesConfig","tfProfiles","tfProfilesSite","tfProfilesTravelling","newRecipientProfileUsersConfig","userLine","labelValueLayout","chartLayout","chartToolTipProp","summaryLayout","tfAllTime","tfSiteAllTime","tfTravellingAllTime","ShoppersConfig","shoppersSummary","mauSummary","monthlySessions","sessionForConversion","totalSessions","tfSessions","tfWithBots","nonTFSessions","nonTFWithBots","activeUsers","mauTF","dauTF","tfOrdersAdoption","kidsMauTF","kids","kidsDauTF","newKidsProfiles","tfUsersWithNewKids","allTimeKidsProfiles","allTimeUserWithKidsProfiles","sfoMauTF","sfo","sfoDauTF","newSFOProfiles","tfUsersWithNewSFO","allTimeSFOProfiles","allTimeUserWithSFOProfiles","ageProfiles","shopperProfiles","heightProfiles","weightProfiles","inseamProfiles","footLengthProfiles","bustSizeProfiles","torsoLengthProfiles","stomachShapeProfiles","hipShapeProfiles","thighShapeProfiles","archShapeProfiles","calfShapeProfiles","breastShapeProfiles","buildProfiles","seatShapeProfiles","Transactions","MAX_CONVERSION","updateConversions","conversions","transactionSummaryChartDetails","sectionCallout","chartDetails","summaryChartDetails","isTFUser","summaryPercentDetails","userType","shopperSummaryChartDetails","summaryRoundScale","mean","tfValue","nonTFValue","allValue","sessionOrderChartDetails","summaryDataFn","summaryLineFilter","totalLineData","revenueChartDetails","calloutSection","revenueChartConfig","labelValueType","sitewideWithoutBot","labelValue","aovUPTChartDetails","lift","siteWide","sitewideValue","incrementalRevenueChartDetails","tfFilter","nonTfFilter","sitewideFilter","sitewideLabel","TransactionsConfig","transactionSummary","ordersForConversion","totalOrders","tfOrders","nonTFOrders","aov","rps","arpu","mrps","upt","units","monthlyOrders","orderRate","monthlyUsers","ordersPerUser","filterFunc","activityChangeEvent","setSelected","regionChangeEvent","setSelectedRegion","RegionLabelCtrl","ALL_REGION","labelName","selectedLabel","hasMultipleKeys","tfcAggregationDetailCtrl","isAggregationDetailVisible","aggregationDetail","BrandSelectionCtrl","openModal","BrandSelectionModalCtrl","$uibModalInstance","BrandTypeAheadThreshold","BrandSearchThreshold","showBrandTypeAhead","showBrandSearch","cancel","dismiss","setActiveBrand","isBrandActive","$item","$model","$label","brandMatches","focusElem","focusElemVal","onfocus","categoryDropdownCtrl","$element","categoryDropdownCfg","ngModelCtrl","_ngModelCtrl","$viewValue","selectItem","itemObj","isObject","getKeyColor","dist","HIGH","LOW","categoryDropdown","categoryDropdownItems","el","defaultDisplay","categoryDropdownDisplay","changeShowText","displayObj","_categoryDropdownItems","setTitle","tmpl","titleTmpl","tfcCollapsibleBox","tfcCollapsibleBoxTransclude","$attr","expanded","isExpanded","toggleExpanded","onMainSelect","firstAccessibleChild","colorConstant","threshold","lastVisible","FilterClass","DeviceTypeFilter","RegionFilter","ProductHierarchyFilter","DetailLevelFilter","fetchFilter","dimensionArr","dimensionKey","filterStateParams","addressableHierarchy","timezone","timezones","defaultStartDate","FilterModal","$document","MIN_DATE","parentElem","modalInstance","windowTopClass","appendTo","selectedFn","goAndUpdateState","toggleDetailLevel","selectedDetailLevel","selectedFilter","toggleRegions","selectedObj","indeterminate","childElements","toggleParentRegion","setParentIsSelected","setDimension","setFilter","resetFilter","filterParams","minStartDate","capitalize","collasibleFilters","isCollapsed","StandardReportsFilterCtrl","opened","closed","StandardReportFilter","selectedDevices","getDeviceTypeParams","selectedContinents","selectedCountries","selectedUILocales","getSelectedRegionParams","getHierarchyParams","getValues","dashboardSpecificParams","formFilterObj","filterObj","hierarchyLevel","getRegionParams","departments","deviceTypes","subDeviceType","usedForReportingConfig","liftConfig","metricChangeConfig","topMainSubLabelConfig","mainLabel","subLabels","fetchDataFunc","fetchData","MainSublabelsTopCalloutCtrl","model","TabConfig","ModuleConfig","Tab","standardReports","shoppers","executiveSummary","comparisons","ExportType","defaultExportTypes","csv","pdf","Page","dateRangeComparison","hierarchyComparison","excel","ordersDateRangeComparison","sessionsDateRangeComparison","revenueDateRangeComparison","mauDateRangeComparison","dauDateRangeComparison","conversionDateRangeComparison","spuDateRangeComparison","adoptionDateRangeComparison","newUsersDateRangeComparison","ordersHierarchyComparison","sessionsHierarchyComparison","revenueHierarchyComparison","mauHierarchyComparison","dauHierarchyComparison","conversionHierarchyComparison","spuHierarchyComparison","adoptionHierarchyComparison","newUsersHierarchyComparison","labelCache","createCalloutLabel","overrideLabelProp","showPercent","overrideUserCohort","overrideColor","CalloutLabel","createSeries","Series","Module","_initialize","viewDetailSection","viewDetailState","_viewDetailState","parentObj","childName","mapKey","_mapKey","_add","keySuffix","_setApiPrefix","parentURI","uri","apiPrefix","uriPrefix","exportTypes","exportUrl","chartSection","standardReportNumber","standardReportDefaultNumberFilter","metricChangeNumber","gte","dashboardType","isActivity","isRegion","i18nDashboardType","i18nFilterType","tfcDashboardDescription","isDefined","isClickable","$eval","$set","removeAttr","openDashboardDescriptionModal","DatePickerWithPresetRangeCtrl","DatePickerRange","titleDateRange","maxDefaultEndDate","setDateRange","onToggle","updateDateRange","keepState","onApply","getRange","rangeName","startOf","isoWeekday","endOf","ActivityClass","Region","Activity","regions","constructor","getRegions","ActivityRegionClass","activities","multipleActivity","getActivities","volumeText","regionCode","tfcFilterPanel","isFilterPanelExist","toggleDiv","css","AttributeFilterClass","BaseFilter","attributeParam","selectedItem","create","getOptionString","isVisible","Boolean","getSelectedItem","AttributeValueFilterClass","attributeValueParam","filterCtrl","setBrandKey","optionString","evt","getEventDetails","isDisabled","filterName","_selectedItem","_brandKey","_filterName","_data","unimplemented","selected","HierarchyFilterClass","hierarchyParam","departmentParam","categoryParam","paginationFunc","StoreSelectionCtrl","fetchAndUpdateSelectedStores","storeKeyParams","selectedStores","storeKeyDisplay","setShowSeparator","showSeparator","every","showSearch","isInternal","onSelectionChange","UIGridCtrl","DirectionEnum","firstPage","lastPage","nextPage","storedGridData","storedPageLength","newData","getGridData","scrollDirection","forward","getDataFn","gridApi","infiniteScroll","dataLoaded","newDataResponse","getLastIdentifier","saveScrollPercentage","gridOptions","discardDirection","backward","dataRemovedTop","dataRemovedBottom","enableSorting","infiniteScrollUp","infiniteScrollDown","formatGridData","onRegisterApi","needLoadMoreData","needLoadMoreDataTop","updateLegendCheckbox","checkBoxes","legendGroups","colorClasses","onSeriesCheckboxClick","ComparisonsDateRangeCtrl","selectedMetric","comparisonMetric","optionsFunc","updateFilter","comparisonDateRange","comparisonStartDate","comparisonEndDate","onDateChange","maxStartDate","formattedDateRanges","displayComparison","comparisonResponses","responses","summaryValues","onTabChange","selectedTabIndex","allMetricSections","allMetrics","ComparisonsHierarchyCtrl","comparisonFilter","comparisonHierarchy","comparisonDepartment","comparisonCategory","comparisonClassification","formattedDateRange","ActiveUsersCtrl","mauSection","monthlyActiveUsersChartData","mauTFSection","tfMonthlyActiveUsersChartData","dauSection","dailyActiveUsersChartData","dauTFSection","tfDailyActiveUsersChartData","allTimeTFUsers","tfUsersTillEndDate","alltimeTFUsers","newUsersSection","newUsersChartData","lineName","getLineName","ShopperAdoption","chartTitleTooltip","formatDataFn","getMetric","getChartTitleTooltip","getSection","getFormatDataFn","ShopperAdoptionCtrl","shopperAdoptionCharts","tooltipTemplate","getTooltipTemplate","getAttributeName","KidsProfilesCtrl","recipientProfiles","topProfilesCallout","fetchAllTimeData","topShoppersCallout","setPropertiesInVM","formatFunc","SFOProfilesCtrl","chartSectionDetails","topCalloutSections","topSections","sectionDetail","sectionChartData","summaryAggFunc","formatDataFunc","metricField","ShopperSessionsCtrl","TransactionReports","sessionForConversionSection","sessionsForConversionChartData","totalSessionsSection","totalSessionChartData","tfSessionsSection","tfSessionChartData","nonTFSessionsSection","nonTFSessionChartData","ShopperProfilesCtrl","ShopperProfiles","shopperProfileSections","displayGender","genderDisplay","unitParams","shopperProfileCharts","isNil","selectedUnit","loadCharts","shopperProfilesData","onUnitChange","bodyShapeCharts","showBodyShapes","showChart","barChartOptions","bar","align","reserveSpace","column","autoRotation","textOverflow","measurement","measurementName","measurementNames","getMeasurements","selectedMeasurementName","maxPct","maxY","endOnTick","opposite","linkedTo","rangeInUnits","rangeMetricValues","bodyShapeData","bodyShape","ShopperSummaryCtrl","spuSection","sessionsPerUserChartData","sessionsPerUser","sessionsPerUserLift","monthlyActiveUserChartData","tfAdoption","monthlySessionSection","monthlySessionChartData","OrderRateSummaryCtrl","monthlyOrderSection","monthlyOrderChartData","opuSection","ordersPerUserChartData","ordersPerUserLift","TransactionOrdersCtrl","ordersForConversionSection","ordersForConversionChartData","totalOrdersSection","totalOrderChartData","tfOrdersSection","tfOrderChartData","nonTFOrdersSection","nonTFOrderChartData","TransactionRevenueCtrl","revenueSection","revenueChartData","aovSection","aovChartData","rpsSection","rpsChartData","arpuSection","arpuChartData","mrpsSection","mrpsChartData","uptSection","uptChartData","unitsSection","unitsChartData","TransactionSummaryCtrl","sessionSection","orderSection","conversionSection","sessionChartData","orderChartData","conversionChartData","stateClass","ExportSelectionCtrl","stateReportMap","pageObj","getCurrentPage","exportFunc","gaKey","html2canvas","getElementById","scrollY","canvas","toDataURL","filterExportLine","detailsLevelToString","continents","countries","locales","bold","image","pdfMake","createPdf","filterHeader","separator","upperFirst","pageExports","BaseFilterTypeClass","FiltersHelper","BaseFilterType","filterData","stateParams","formattedFilter","formatFilterValues","selectedParams","isFilterSelected","filtersWithDefault","formatFlatFilter","formatTreeFilter","valObj","formattedFilterArr","includesDefaultFn","equalsDefaultFn","DetailLevelFilterClass","DeviceTypeFilterClass","getDeviceHierarchy","splitDevice","device","groupedDevice","dimensionType","deviceHierarchy","getSelectedParams","subDeviceTypes","ProductHierarchyFilterClass","defaultValue","hierarchyParams","mapKeys","RegionFilterClass","getDefaultHierarchyValue","onDepartmentChange","islineItemTracking","updateHierarchy","hierarchyName","level","hierarchyLevelValues","classifications","selectedClassification","onClassificationChange","toggleAddressable"],"mappings":"AAAA,CAAA,WACE,aAEAA,GAAGC,MAAM,YAAa,CACpBC,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAEXD,EAAKD,QAAUA,EAAUA,GAAW,GAGpCC,EAAKE,SAAWC,EAAEC,OAAO,CACvBC,IAAM,EACNC,OAAS,EACTC,KAAO,EACPC,MAAQ,C,EACPT,EAAQU,OAAA,EAGXT,EAAKU,GAAK,EACVV,EAAKW,GAAK,EAGVX,EAAKY,EAAI,EACTZ,EAAKa,EAAI,EAETb,EAAKc,KAAOd,EAAKe,KAAKC,OAAO,GAAA,EAEzBhB,EAAKiB,OAAA,GAEPjB,EACKkB,GAAG,eAAgB,WAClBlB,EAAKe,KAAKI,KAAK,QAASnB,EAAKU,EAAA,C,GAE9BQ,GAAG,gBAAiB,WACnBlB,EAAKe,KAAKI,KAAK,SAAUnB,EAAKW,EAAA,C,IAIxCM,OAAS,WACP,MAAmD,QAA5ChB,KAAKc,KAAKK,KAAA,EAAOC,SAASC,YAAA,C,EAEnCC,QAAU,WACR,IAAIvB,EAAOC,KACXD,EAAKY,EAAIZ,EAAKU,GAAKV,EAAKE,SAASK,KAAOP,EAAKE,SAASM,MACtDR,EAAKa,EAAIb,EAAKW,GAAKX,EAAKE,SAASG,IAAML,EAAKE,SAASI,OAErDN,EAAKc,KAAKU,UAAUxB,EAAKE,SAASK,KAAMP,EAAKE,SAASG,GAAA,C,EAExDoB,MAAQ,SAAUb,GAChB,IAAIZ,EAAOC,KACX,OAAKyB,UAAUC,QAEf3B,EAAKU,GAAKE,EACVZ,EAAKuB,QAAA,EAELvB,EAAK4B,QAAQ,cAAA,EAEb5B,EAAK6B,OAAA,EAEE7B,GATuBA,EAAKU,E,EAWrCoB,OAAS,SAAUjB,GACjB,IAAIb,EAAOC,KACX,OAAKyB,UAAUC,QAEf3B,EAAKW,GAAKE,EACVb,EAAKuB,QAAA,EAELvB,EAAK4B,QAAQ,eAAA,EACb5B,EAAK6B,OAAA,EAEE7B,GARuBA,EAAKW,E,EAUrCF,QAAU,SAAUA,GAClB,IAAIT,EAAOC,KACX,OAAKyB,UAAUC,QAEQ,UAAnB,OAAOlB,IACTA,EAAU,CACRJ,IAAMI,EACNH,OAASG,EACTF,KAAOE,EACPD,MAAQC,C,GAIZN,EAAEC,OAAOJ,EAAKE,SAAUO,CAAA,EACxBT,EAAKuB,QAAA,EAELvB,EAAK4B,QAAQ,gBAAA,EAEb5B,EAAK6B,OAAA,EAEE7B,GAlBuBG,EAAE4B,MAAM/B,EAAKE,QAAA,C,EAoB7C8B,IAAM,SAAUC,EAAMC,GACpB,IAGIC,EAFJ,OAAIT,UAAUC,OAAS,EADZ1B,KAC2BC,SAAS+B,KAE3CE,EAAI,IACNF,GAAQC,EAJCjC,KAMCQ,QAAQ0B,CAAA,E,EAEtBN,OAAS,WACP5B,KAAKmC,UAAY,CAAA,EACbnC,KAAKoC,MAAMpC,KAAKqC,KAAKrC,KAAKoC,IAAA,EAC9BpC,KAAKmC,UAAY,CAAA,C,EAGnBG,IAAM,WACJ,IAAIxB,EAAOd,KAAKc,KAAKK,KAAA,EAErB,OAAOxB,GAAG4C,OAAOzB,EAAK0B,iBAAmB1B,CAAA,C,EAK3C2B,SAAW,WACT,IAAIH,EAAMtC,KAAKsC,IAAA,EACXI,EAAOJ,EAAIC,OAAO,MAAA,EAMtB,OAHEG,EADEA,EAAKC,MAAA,EACAL,EAAIM,OAAO,MAAA,EAGbF,C,EAETG,UAAY,SAAUT,GAIpB,OAHKpC,KAAKmC,WACRnC,KAAK2B,QAAQ,aAAA,EAERS,C,OCpIb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,OAAQ,CACnCN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAoHX,SAAS8C,IACP/C,EAAKgD,EAAEC,MAAM,CAAC,EAAGjD,EAAKY,EAAA,EAElBb,EAAQmD,UACVlD,EAAKmD,KAAKC,EACLC,YAAY,EAAA,EACZC,cAAc,CAACtD,EAAKY,CAAA,EAG3BZ,EAAKuD,SAASP,EACTQ,KAAKxD,EAAKmD,KAAKH,CAAA,C,CAGtB,SAASS,IACPzD,EAAKoD,EAAEH,MAAM,CAACjD,EAAKa,EAAG,EAAA,EAElBd,EAAQmD,UACVlD,EAAKmD,KAAKH,EACLK,YAAY,EAAA,EACZC,cAAc,CAACtD,EAAKa,CAAA,EAG3Bb,EAAKuD,SAASP,EACTxB,UAAU,EAAGxB,EAAKoD,EAAEH,MAAA,EAAQ,EAAA,EAC5BO,KAAKxD,EAAKmD,KAAKH,CAAA,EAEpBhD,EAAKuD,SAASH,EACTI,KAAKxD,EAAKmD,KAAKC,CAAA,C,CA9ItBrD,EAAUA,GAAW,GAErBI,EAAEuD,SAAS3D,EAAS,CAClB4D,MAAQ,CAAA,EACRC,MAAQ,CAAA,EACRC,QAAU,KACVC,QAAU,KACVZ,SAAW,CAAA,C,GAGTnD,EAAQgE,cACVhE,EAAQ6D,MAAQ,CAAA,EAChB7D,EAAQmD,SAAW,CAAA,GAIrBlD,EAAKS,QAAQ,CACXF,KAAO,GACPD,OAAS,E,GAEXN,EAAKS,QAAQV,EAAQU,OAAA,EAgBrBT,EAAKgE,GAAKhE,EAAKiE,WAAa9D,EAAEuD,SAAS,GAAI3D,EAAQiE,GAAI,CACrDhB,EAAI,SAAUkB,GAAK,OAAOA,EAAElB,CAAA,EAC5BI,EAAI,SAAUc,GAAK,OAAOA,EAAEd,CAAA,C,GAG9BpD,EAAKgD,EAAIpD,GAAGuE,KAAKC,MAAA,EACjBpE,EAAKoD,EAAIxD,GAAGwE,MAAMC,OAAA,EAIlBrE,EAAKsE,QAAUvE,EAAQuE,SAAW,GAElCtE,EAAKuE,MAAQ3E,GAAGwE,MAAMI,WAAA,EAEtBxE,EAAKyE,UAAY,GAGjBzE,EAAK0E,IAAM1E,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,MAAO,CAAA,CAAA,EAGhD3E,EAAK4E,WAAa5E,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,aAAc,CAAC5E,EAAQgE,WAAA,EACvE/D,EAAK6E,MAAM,aAAc7E,EAAK4E,WAAY,CACxCE,SAAW,SAAUC,GACnB,IAAI1C,EAAO,CAAC,GAAG2C,OAAO,SAAUd,GAC9B,IAAIe,EAASjF,EAAKoD,EAAE6B,OAAA,EACpB,OAAOA,EAAO,GAAKf,GAAKA,EAAIe,EAAO,E,GAErC,OAAOhF,KAAKiF,UAAU,MAAA,EACjB7C,KAAKA,CAAA,C,EAEZQ,OAAS,WACP,OAAO5C,KAAK4C,OAAO,MAAA,C,EAErBsC,OAAS,CACPC,MAAQ,WACN,IAAIH,EAASjF,EAAKgD,EAAEiC,OAAA,EACpBhF,KAAKkB,KAAK,KAAMnB,EAAKgD,EAAEiC,EAAO,EAAA,CAAA,EACzB9D,KAAK,KAAMnB,EAAKgD,EAAEiC,EAAO,EAAA,CAAA,EACzB9D,KAAK,KAAMnB,EAAKoD,CAAA,EAChBjC,KAAK,KAAMnB,EAAKoD,CAAA,C,KAK3BpD,EAAKuD,SAAW,CACdP,EAAIhD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAC5CvB,EAAIpD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,C,EAG9C3E,EAAKmD,KAAO,CACVH,EAAIpD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKgD,CAAA,EAAGsC,OAAO,QAAA,EACvClC,EAAIxD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKoD,CAAA,EAAGkC,OAAO,MAAA,C,EAGpCvF,EAAQ4D,OACX3D,EAAKuD,SAASP,EAAEuC,MAAM,UAAW,MAAA,EAG9BxF,EAAQ6D,OACX5D,EAAKuD,SAASH,EAAEmC,MAAM,UAAW,MAAA,EAG/BxF,EAAQ8D,SACV7D,EAAKmD,KAAKH,EAAEwC,WAAWzF,EAAQ8D,OAAA,EAG7B9D,EAAQ+D,SACV9D,EAAKmD,KAAKC,EAAEoC,WAAWzF,EAAQ+D,OAAA,EAOjC9D,EAAKyF,cAAgB1F,EAAQ0F,eACzB,SAAUvB,GACR,MAAO,CAAC,OAAQ,IAAIwB,KAAK1F,EAAKgE,GAAGhB,EAAEkB,CAAA,CAAA,EAAIyB,eAAA,E,EAiC7C3F,EACKkB,GAAG,eAAgB,WAClB6B,EAAA,EACA/C,EAAK4F,SAAA,C,GAEN1E,GAAG,gBAAiBuC,CAAA,EACpBvC,GAAG,cAAe,WACjB6B,EAAA,EACAU,EAAA,C,IAGRmC,SAAW,WACT,IAAI5F,EAAOC,KAEPoC,EAAOrC,EAAKqC,KACZwD,EAAUxD,EAAKwD,QAEfC,EAAYzD,EAAKyD,UAEjBC,EAAY/F,EAAKgD,EAAEiC,OAAA,EAGnBe,EAAUF,EAAU,GAAKA,EAAU,GACnCG,EAAUF,EAAU,GAAKA,EAAU,GAKnCG,EAAkBL,EAAQlE,QAJTsE,EAAUD,GAK3BG,EAAeC,KAAKC,IAAI,EAAGD,KAAKE,MAAMJ,EAAkBlG,EAAKY,CAAA,CAAA,EAG7DZ,EAAKuG,gBAAkBJ,IACzBnG,EAAKuG,cAAgBJ,EAErBnG,EAAKqC,KAAKA,KAAOwD,EAAQb,OAAO,SAAUD,EAAIyB,GAE5C,OAAOA,EAAIL,GAAiB,C,KAIlCM,WAAa,SAAUC,GACrBzG,KAAK+C,EAAEiC,OAAOyB,CAAA,EACdzG,KAAK2F,SAAA,C,EAEPe,WAAa,SAAUD,GACrB,IACIE,GAIFF,EAHmB,aAFVzG,KAEFqE,QAGE,CAAC,EADVsC,EAAShH,GAAGyG,IAAIK,EAAOG,IAAIT,KAAKU,GAAA,CAAA,GACbF,GAGjBF,GAAO,KAAOA,EAAO,KAKvBA,EAAO,IAAM,GAGfzG,KAAKmD,EAAE6B,OAAOyB,CAAA,C,EAEhBK,QAAU,SAAUL,EAAQjC,GAC1B,IAAIzE,EAAOC,KAWX,OATAD,EAAKyG,WAAWC,CAAA,EAEhB1G,EAAKuD,SAASP,EACTQ,KAAKxD,EAAKmD,KAAKH,CAAA,EACpBhD,EAAK6B,OAAA,EAEL7B,EAAKyE,UAAYA,EACjBzE,EAAK4B,QAAQ,aAAA,EAEN5B,C,EAcTgH,WAAa,SAAUC,EAAQC,GAC7B,IAAIlH,EAAOC,KACX,MAAsB,YAAlB,OAAOgH,EAEF,SAAUE,GACf,OAAOnH,EAAKgH,WAAWG,EAAGF,CAAA,C,GAG9BjH,EAAKgE,GAAKiD,EAAOjD,GACjBoD,EAAMF,EAASD,CAAA,EACfjH,EAAKgE,GAAKhE,EAAKiE,WACRmD,E,EAETC,mBAAqB,SAAUC,GAC7B,IASIC,EAEAC,EAeEC,EA1BFzH,EAAOC,KACPyH,EAAS1H,EAAKgD,EAAE2E,OAAOL,EAAO,EAAA,EAC9BZ,EAAS1G,EAAKgD,EAAEiC,OAAA,EAEpB,GAAKjF,EAAKqC,KAkBV,OAbIkF,EAAKvH,EAAKgE,GAAGhB,GAEbwE,EAAQrH,EAAEH,EAAKqC,KAAKA,IAAA,EAAM2C,OAAO,SAAUd,GAEzC0D,EAAOL,EAAGrD,CAAA,EACd,OAAOwC,EAAO,IAAMkB,GAAQA,GAAQlB,EAAO,E,GAC1CmB,IAAI,SAAU3D,GACf,OAAOkC,KAAKU,IAAIS,EAAGrD,CAAA,EAAKwD,CAAA,C,MAMZI,EAAAA,EACZN,EAAQ,MAGJC,EAAQ,GACRM,EAAc5H,EAAE6E,OAAOhF,EAAKqC,KAAK4E,OAAQ,SAAA,EAAWJ,IAAI7G,EAAKgH,WAAW,SAAUC,GAIpF,OAFAQ,EAAMO,KAAKhI,EAAKoD,EAAEpD,EAAKgE,GAAGZ,EAAEoE,CAAA,CAAA,CAAA,EAErB,CAACP,EAAOgB,KAAMhB,EAAOiB,QAAQ1E,KAAKxD,EAAMwH,CAAA,E,IAG1C,CACLxE,EAAIhD,EAAKgD,EAAEuE,EAAGC,CAAA,CAAA,EACdpE,EAAIqE,EACJU,KAAO,CACHnI,EAAKyF,cAAc+B,CAAA,GACrBY,OAAOL,CAAA,C,GAjCX,MAAM,IAAIM,MAAM,4DAAA,C,EAsCpBC,QAAU,SAAUjG,GAClB,IAAIrC,EAAOC,MAEXD,EAAKqC,KAAOA,GAOFwD,UACRxD,EAAKwD,QAAUxD,EAAKA,KAAKkG,MAAA,EAEzBlG,EAAKyD,UAAYlG,GAAG8G,OAAOrE,EAAKwD,QAAQgB,IAAI7G,EAAKgE,GAAGhB,CAAA,CAAA,EAEpDhD,EAAKuG,cAAgB,MAGvBpG,EAAEqI,KAAKnG,EAAK4E,OAAQ,SAAUA,GAE5BA,EAAOjD,GAAK7D,EAAEuD,SAASuD,EAAOjD,IAAM,GAAIhE,EAAKiE,UAAA,C,GAI/CjE,EAAKyG,WAAWpE,EAAKyD,SAAA,EAErB9F,EAAKuE,MAAMU,OAAO5C,EAAK4E,OAAOJ,IAAI1G,EAAEsI,SAAS,MAAA,CAAA,CAAA,C,OCrUnD,WACE,aAmDA,SAASC,EAAOC,EAAoBC,EAAeC,EAAuBC,EAAUC,EAAaC,EAAcC,EAAkBC,EAAmBC,EAAiBC,EAAoBC,GAEvLL,EAAaM,YAAY,cAAA,EAEzBV,EAAcW,aAAavB,KAAK,iBAAA,EAEhCa,EAAsBW,gBAAA,EAEtBb,EAAmBc,UAAU,SAAUC,GACxBA,EAAUC,IAAI,QAAA,EACpBC,GAAG,OAAA,C,GAGI,SAAZC,EAAsBC,EAAWC,GAEnC,SAASC,EAAkBN,GACzB,IAAIO,EAASP,EAAUC,IAAI,QAAA,EACvBO,EAAcR,EAAUC,IAAI,aAAA,EAChC,OAAOM,EAAOE,IAAIL,CAAA,GAAc3J,EAAEiK,GAAGF,EAAYP,IAAA,EAAOI,CAAA,C,CAE1D,O,wBAAOC,C,CAGLK,EAAwB,CAC1B,CACEC,MAAQ,OACR9I,UAAY,gBACZ+I,QAAU,gCACVC,cAAe,CAAA,EACfC,WAAY,CAAA,C,EAEd,CACEjJ,UAAY,6BACZ+I,QAAU,+BACVC,cAAe,CAAA,EACfE,SAAW,GACNtC,OAAOjI,EAAE0G,IAAIuC,EAAoB,SAAUuB,GAC1C,MAAO,CAAEL,MAAQ,mBAAqBK,EAAQnJ,UAAY,4BAA8BmJ,CAAA,C,IAEzFvC,OAAOjI,EAAE0G,IAAIsC,EAAiB,SAAUwB,GACvC,MAAO,CAAEL,MAAQ,gBAAkBK,EAAQnJ,UAAY,yBAA2BmJ,CAAA,C,IAEnFvC,OAAO,CAACkC,MAAQ,sBAAuB9I,UAAY,6BAAA,CAAA,EACnD4G,OAAO,CAACkC,MAAQ,oBAAqB9I,UAAY,2BAAA,CAAA,C,EAExD,CACEA,UAAY,mBACZ+I,QAAU,4CACVC,cAAe,CAAA,EACfE,SAAW,CACT,CACEJ,MAAO,sBACP9I,UAAW,8B,EAEb,CACE8I,MAAO,4BACP9I,UAAW,oC,EAEb,CACE8I,MAAQ,6BACR9I,UAAY,sB,IAIlB,CACE8I,MAAO,YACP9I,UAAY,qBACZ+I,QAAU,8BACVC,cAAe,CAAA,C,EAEjB,CACEF,MAAQ,OACR9I,UAAY,gBACZ+I,QAAU,oCACVC,cAAe,CAAA,EACfC,WAAY,CAAA,C,GAmFZG,EAAe,CACjB,CACEC,gBAAiBxB,EAAgByB,aACjCC,MAAOV,C,EAET,CACEQ,gBAAiBxB,EAAgB2B,UACjCD,MAtFqB,CACvB,CACEvJ,UAAY,6BACZkJ,SAAW,CACT,CACEJ,MAAO,2BACP9I,UAAW,mC,IAIjB,CACEA,UAAY,oBACZkJ,SAAW,CACT,CACEJ,MAAO,mBACP9I,UAAW,2B,EAEb,CACE8I,MAAO,oBACP9I,UAAW,4B,EAEb,CACE8I,MAAO,uBACP9I,UAAW,gC,EAEb,CACE8I,MAAO,oBACP9I,UAAW,4B,EAEb,CACE8I,MAAO,gBACP9I,UAAW,wB,EAEb,CACE8I,MAAO,eACP9I,UAAW,uB,EAEb,CACE8I,MAAO,2BACP9I,UAAW,4B,IAIjB,CACEA,UAAY,wBACZkJ,SAAW,CACT,CACEJ,MAAO,uBACP9I,UAAW,+B,EAEb,CACE8I,MAAO,sBACP9I,UAAW,8B,EAEb,CACE8I,MAAO,uBACP9I,UAAW,+B,EAEb,CACE8I,MAAO,0BACP9I,UAAW,mC,IAIjB,CACEA,UAAY,uBACZkJ,SAAW,CACT,CACEJ,MAAO,wBACP9I,UAAW,iC,EAEb,CACE8I,MAAO,wBACP9I,UAAW,gC,OAoCfyJ,EAAY9K,EAAE+K,QAAQN,EAAc,SAAUO,GAChD,OApByBF,EAoBAE,EAASJ,MApBEhB,EAoBKoB,EAASN,gBAnB3C1K,EAAE0G,IAAIoE,EAAW,SAAUG,GAchC,OAbGA,EAAKd,QACNc,EAAKvB,UAAYA,EAAUuB,EAAKd,MAAOP,CAAA,GAEtCqB,EAAKV,UACNvK,EAAEqI,KAAK4C,EAAKV,SAAU,SAAUW,GAC3BlL,EAAEmL,SAASD,EAAMf,KAAA,EAClBe,EAAMxB,UAAYA,EAAUwB,EAAMf,MAAOP,CAAA,EAEnCsB,EAAMf,OAASe,EAAMf,MAAMrC,OACjCoD,EAAMxB,UAAYA,EAAUwB,EAAMf,MAAMrC,KAAM8B,CAAA,E,GAI7CqB,C,GAfX,IAA2BH,EAAWlB,C,GAuBtChB,EACKwC,YAAY,CACX/J,UAAY,gB,GAGlBrB,EAAEqI,KAAKyC,EAAW,SAAUE,GAC1BpC,EAAYyC,QAAQL,CAAA,C,GAItBhL,EAAEC,OAAO8I,EAAkBnJ,QAAS,CAIlC0L,kBAAoB,sB,GAGtB3C,EAAS4C,UAAU,SAAA,CAAA,YAAA,YAAU,SAAUC,EAAWjC,GAChD,IAAIkC,EAAcD,EAAUxB,IAW5B,OAVAwB,EAAUE,QAAU,SAAU/B,GAC5B,IAAIQ,EAAQqB,EAAUhC,IAAIG,CAAA,EACtBgC,EAAQpC,EAAUC,IAAI,OAAA,EAC1B,MAAO,EAAEW,EAAMjI,MAAQiI,EAAMjI,KAAK0J,eAAiBD,EAAME,wBAAA,C,EAG3DL,EAAUxB,IAAM,SAAUL,GACxB,OAAO8B,EAAY9B,CAAA,GAAc6B,EAAUE,QAAQ/B,CAAA,C,EAG9C6B,C,IAKX,SAASM,EAAIC,EAAYjC,EAAQP,EAAWyC,EAAKC,EAAQC,EAAMC,EAAWR,EAAMS,EAAaC,EAAcC,EAC9FC,EAAiBC,EAAMC,EAAiB1C,EAAa2C,EAAmBC,GACnFV,EAAOW,gBAAA,EACPb,EAAWc,UAAY,CAAA,EAGnBC,EAAgBX,EAAU3C,IAAI,4BAAA,EAC/BsD,GAAiBA,EAAcC,SAAS,GAAA,GACzCZ,EAAUa,IAAI,CAAClF,KAAO,6BAA6B/F,MAAQkL,mBAAmBH,CAAA,CAAA,CAAA,EAGhFf,EAAWmB,IAAI,aAAc,WAC3B,IAAIC,EAAOjB,EAAKkB,QAAA,EAEhBrD,EAAYsD,0BAA0BF,CAAA,EAEtCR,EAAgBW,eAAA,EAEhBvB,EAAWc,UAAY,CAAA,EAEvBlB,EAAM4B,WAAA,EACDC,KAAK,SAASD,GACVA,GACDxB,EAAWc,UAAY,CAAA,EAyD/Bd,EAAWc,UAAY,CAAA,EAEnBY,EAAYzN,EAAE0N,KAAK1B,EAAI2B,SAAA,EAAY,SAAU3C,GAC/C,OAAOzB,EAAUqE,OAAO5C,EAAStB,SAAA,C,GAEnCH,EAAUqE,OAAOH,EAAUI,OAAA,IA3DnB9B,EAAWc,UAAY,CAAA,EACvB/C,EAAOL,GAAG,OAAA,E,KAKpBsC,EAAWmB,IAAI,cAAe,WAC5BnD,EAAY+D,MAAA,EACZ3B,EAAU4B,OAAO,4BAAA,C,GAGnBhC,EAAWmB,IAAI,sBAAuB,SAASc,EAAOC,EAASC,EAAUC,GACvE,IAAIC,EAAkBlC,EAAKkC,gBAAA,EACxBA,IAEGzC,EAAM0C,UAAA,GAAe,CAACvE,EAAO4B,QAAQuC,EAAQnG,IAAA,GAC/CkG,EAAMM,eAAA,EACNxE,EAAOL,GAAG,OAAA,GAEVkC,EAAM4B,WAAA,EAAaC,KAAK,SAASD,GAC3BA,IACFS,EAAMM,eAAA,EACNxE,EAAOL,GAAG,OAAA,E,IAMf2E,GACDzB,EAAgB4B,oBAAoBJ,EAAWF,CAAA,C,GAKnDlC,EAAWyC,OAAOtC,EAAKkC,gBAAiB,WACtC1B,EAAkB+B,UAAA,EACPvC,EAAKkB,QAAA,GAEdT,EAAgB+B,mBAAA,C,GAIpB3C,EAAWmB,IAAI,oBAAqB,SAAUc,EAAOC,EAASC,EAAUC,EAAWQ,EAAYC,GAC7FpC,EAAKoC,MAAMA,CAAA,EACEnC,EAAgBoC,WAAWD,CAAA,GAG3B,CAACT,EAAUrG,MACtBgC,EAAOL,GAAG,MAAA,C,ibA7VhBqF,QACKC,OAAO,cAAe,CACrB,YACA,UACA,kBACA,mBACA,mBACA,wBACA,qBACA,wBACA,8BACA,uBACA,wBACA,cACA,WACA,WACA,YACA,YACA,eACA,eACA,UACA,yBACA,oCACA,8BACA,8BACA,iCACA,+BACA,6BACA,oCACA,sBACA,0BACA,YACA,iCACA,gCACA,sBACA,+BACA,8B,EAEDxG,OAAOA,CAAA,EACPuD,IAAIA,CAAA,EACJkD,SAAS,kBAAkB,mEAAA,EAC3BA,SAAS,QAAQ,CAChBC,sBAA0B,CACxBC,OAAW,SACXC,UAAa,W,OC/CvB,WACE,aASA,SAAS5G,EAAO6G,GAEdA,EACKjF,MAAM,eAAgB,CACrBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,SACNrN,KAAO,CAELsN,KAAO,CAAEC,UAAY,2BAAA,EACrB7D,aAAa,CAAA,C,EAEf8D,SAAW,qB,GAEZvF,MAAM,mBAAoB,CACzBoF,IAAM,OACNrN,KAAK,CACHyN,MAAM,eACNC,KAAK,W,EAEPC,YAAc,+BACdC,WAAa,wB,GAEd3F,MAAM,6BAA8B,CACnCoF,IAAM,2JACNQ,OAAS,CACPC,WAAa,EACbC,SAAW,G,EAEb/N,KAAK,CACHyN,MAAO,0BACPC,KAAK,qB,EAEPC,YAAc,gCACdC,WAAa,0BACbI,QAAU,CACRC,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5BE,QAAA,CAAA,eAAA,eAAA,iBAAA,mBAAS,SAAUjE,EAAcC,EAAciE,EAAgBH,GAC3D,OAAOG,EAAe,WACpB,OAAOlE,EAAamE,wBAAwBJ,CAAA,C,EAC5C9D,EAAamE,YAAanE,EAAaoE,MAAA,C,GAE7CC,WAAA,CAAA,eAAA,0BAAA,eAAA,UAAA,mBAAa,SAAUtE,EAAcuE,EAAyBtE,EAAcgE,EAASF,GACtD,MAA1B9D,EAAauE,YAAmBvE,EAAauE,UAAYD,EAAwB,IAC9EH,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAO3E,EAAa4E,iBAAiBb,EAAkB9D,EAAauE,UAAWvE,EAAa4E,gBACxF5E,EAAa6E,cAAe7E,EAAa8E,mBAAoB9E,EAAa+E,iBAC1EX,EAAQD,GAAeA,EAAYO,SAAA,EAAY,GAAA,C,GAEvDM,iBAAA,CAAA,eAAA,eAAA,UAAA,mBAAmB,SAAUjF,EAAcC,EAAcgE,EAASF,GAC1DK,EAAcH,EAAQQ,YAAA,EAC1B,OAAOzE,EAAakF,qBAAqBnB,EAAkBK,GAAeA,EAAYO,SAAA,CAAA,EAAYvD,KAAK,SAAU6D,GAC/G,OAAOrR,EAAEqR,CAAA,EAAkBxM,OAAO,SAAU0M,GAE1C,OAAOnF,EAAaoF,sBAAsBD,CAAA,C,GACzCxP,MAAA,C,KAGT0P,oBAAA,CAAA,eAAA,eAAA,UAAA,mBAAsB,SAAUrF,EAAcC,EAAcgE,EAASF,GAC7DK,EAAcH,EAAQQ,YAAA,EAC1B,OAAOzE,EAAasF,wBAAwBvB,EAAkB9D,EAAa4E,gBACvE5E,EAAa6E,cAAeV,GAAeA,EAAYO,SAAA,CAAA,EAAYvD,KAAK,SAAUiE,GACpF,OAAOzR,EAAEyR,CAAA,EAAqB5M,OAAO,SAAU0M,GAE7C,OAAOnF,EAAaoF,sBAAsBD,CAAA,C,GACzCxP,MAAA,C,KAGT4P,eAAA,CAAA,eAAA,eAAA,UAAA,mBAAiB,SAAUvF,EAAcC,EAAcgE,EAASF,GAC5D,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAO3E,EAAawF,kBAAkBzB,EAAkB9D,EAAauE,UACjEvE,EAAa4E,gBAAiB5E,EAAa6E,cAAe7E,EAAa8E,mBACvE9E,EAAa+E,iBAAkBX,EAAQD,GAAeA,EAAYO,SAAA,CAAA,C,GAE1Ec,OAAA,CAAA,eAAS,SAAUzF,GACjB,OAAOA,EAAa0F,mBAAA,C,GAEtBC,UAAA,CAAA,eAAA,eAAA,UAAA,mBAAY,SAAU3F,EAAcC,EAAcgE,EAASF,GACvD,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAO3E,EAAa4F,0BAA0B7B,EAAkB9D,EAAauE,UAAWvE,EAAa4E,gBACjG5E,EAAa6E,cAAe7E,EAAa8E,mBAAoB9E,EAAa+E,iBAC1EX,EAAQD,GAAeA,EAAYO,SAAA,CAAA,C,GAE3CkB,sBAAA,CAAA,eAAuB,SAAS7F,GAC9B,OAAOA,EAAa8F,kCAAkC,oBAAA,C,mCAnGlEpD,QACKC,OAAO,qBAAsB,EAAA,EAC7BC,SAAS,kBAAmB,CAAC,gBAAA,EAC7BA,SAAS,0BAA2B,CAAC,cAAe,WAAA,EACpDzG,OAAOA,CAAA,C,ICPd,WACE,aAUA,SAASA,EAAO6G,GAuEd,SAASsB,EAAWyB,GAIlB,SAASC,EAASC,EAAiBC,EAAmBnC,EAAkBE,GACtE,IAAIG,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAGuB,EACMD,EAAgBF,GAAQhC,EAAkBmC,EAAmB7B,EAAQD,GAAeA,EAAYO,SAAA,CAAA,EAEhG,E,CAGX,O,+EAAOqB,C,CAlFThD,EACKjF,MAAM,kBAAmB,CACxBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,wCACNrN,KAAO,CAELsN,KAAO,CAAEC,UAAY,wBAAA,EACrB7D,aAAa,CAAA,C,EAEf8D,SAAW,qB,GAEZvF,MAAM,sBAAuB,CAC5BoF,IAAM,OACNM,YAAc,qCACdC,WAAa,2B,GAEd3F,MAAM,kCAAmC,CACxCoF,IAAM,mBACNM,YAAc,qCACd3N,KAAK,CACHyN,MAAM,2BACNC,KAAK,0B,EAEPG,OAAQ,CACNwC,OAAQ,I,EAEVzC,WAAa,4BACbI,QAAU,CACRC,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5BE,QAAA,CAAA,eAAA,kBAAA,mBAAA,iBAAS,SAAShE,EAAcgG,EAAiBlC,EAAkBG,GACjE,OAAOA,EAAe,WACpB,OAAO+B,EAAgBG,0BAA0BrC,CAAA,C,EACjD9D,EAAamE,YAAanE,EAAaoE,MAAA,C,GAE3CgC,WAAA,CAAA,kBAAA,UAAA,eAAA,eAAA,QAAA,mBAAa,SAASJ,EAAiBhC,EAASjE,EAAcC,EAAcqG,EAAOvC,GACjF,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAOsB,EAAgBM,sBAAsBxC,EAAkBM,EAAQD,GAAeA,EAAYO,SAAA,CAAA,C,GAEpGuB,kBAAA,CAAA,eAAA,aAAoB,SAASjG,EAAcoG,GACzC,MAAG,CAACpG,EAAakG,QAAUE,EAAWG,aAC7BvG,EAAakG,OAAS,SACrB,CAAClG,EAAakG,QAAUE,EAAWI,WAClCxG,EAAakG,OAAS,OAExBlG,EAAakG,M,GAGxBO,QAAUpC,EAAW,oBAAA,EACrBqC,WAAarC,EAAW,uBAAA,EACxBsC,WAAatC,EAAW,uBAAA,EACxBuC,WAAavC,EAAW,uBAAA,EACxBwC,eAAiBxC,EAAW,2BAAA,EAC5ByC,aAAezC,EAAW,yBAAA,EAC1B0C,WAAA,CAAA,kBAAa,SAAUf,GACrB,OAAOA,EAAgBgB,eAAA,C,GAEzBpB,sBAAA,CAAA,eAAwB,SAAS7F,GAC/B,OAAOA,EAAa8F,kCAAkC,iBAAA,C,mCA1ElEpD,QACKC,OAAO,wBAAyB,EAAA,EAChCC,SAAS,qBAAsB,CAC9B,kB,EAEDzG,OAAOA,CAAA,C,ICRd,WACE,aAUI,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,WAAY,CACjBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,YACNrN,KAAO,CAELsN,KAAO,CAAEC,UAAY,yBAAA,EACrB7D,aAAa,CAAA,C,EAEf8D,SAAW,qB,GAEZvF,MAAM,oBAAqB,CAC1BoF,IAAM,6BACNM,YAAc,8CACdC,WAAa,6BACb5N,KAAK,CACHyN,MAAM,oBACNC,KAAK,2B,EAEPM,QAAS,CACPkD,WAAA,CAAA,eAAY,SAAShH,GACnB,OAAOA,EAAa0F,mBAAA,C,GAEtB3B,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5BmD,gBAAA,CAAA,eAAA,mBAAA,mBAAiB,SAASlH,EAAc+D,EAAkBoD,GACxD,OAAOA,EAAkB,WACvB,OAAOnH,EAAaoH,2BAA2BrD,CAAA,C,KAGnD8B,sBAAA,CAAA,eAAwB,SAAS7F,GAC/B,OAAOA,EAAa8F,kCAAkC,kBAAA,C,GAExDuB,eAAA,CAAA,eAAA,mBAAA,mBAAgB,SAASrH,EAAc+D,EAAkBoD,GACvD,OAAOA,EAAkB,WACvB,OAAOnH,EAAasH,iCAAiCvD,CAAA,C,KAGzDwD,iBAAA,CAAA,eAAA,mBAAA,mBAAkB,SAASvH,EAAc+D,EAAkBoD,GACzD,OAAOA,EAAkB,WACvB,OAAOnH,EAAawH,mCAAmCzD,CAAA,C,qCAvDzErB,QACKC,OAAO,gCAAiC,EAAA,EACxCC,SAAS,aAAc,CACtB6E,MAAQ,U,GAETtL,OAAOA,CAAA,C,ICRd,WACE,aAWA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,WAAY,CACjBmF,OAAS,eACTpN,KAAK,CACH0J,aAAa,CAAA,C,EAEfsE,QAAU,CACR4D,UAAA,CAAA,WAAY,SAAUC,GACpB,OAAOA,EAASrG,KAAA,C,MAIrBvD,MAAM,SAAU,CACfmF,OAAS,WACTC,IAAM,4BACNrN,KAAO,CACLsN,KAAO,CACLC,UAAY,uB,EAEdG,KAAK,SACLD,MAAM,gBACN/D,aAAa,CAAA,C,EAEfoI,MAAQ,CACNC,gBAAkB,CAChBpE,YAAa,yBACbC,WAAA,CAAA,SAAA,SAAa,SAAUhG,EAAQoK,GAC7BA,EAAOC,SAAW,WAChBrK,EAAOsK,OAAA,C,QAMhBjK,MAAM,QAAS,CACdmF,OAAS,WACTC,IAAM,2BACNrN,KAAO,CACLsN,KAAO,CACLC,UAAY,uB,EAEd7D,aAAa,CAAA,EACbgE,KAAK,QACLD,MAAM,gB,EAERO,QAAU,CACRmE,aAAA,CAAA,UAAA,eAAc,SAASC,EAASjI,GAC9B,OAAOiI,EAAQC,YAAYlI,EAAamI,IAAKnI,EAAaoI,SAAUpI,EAAaqI,KAAMrI,EAAasI,aAActI,EAAa2D,UAAA,C,GAEjI4E,QAAA,CAAA,UAAA,eAAU,SAAUN,EAASjI,GAC3B,OAAOiI,EAAQ5G,KAAKrB,EAAamI,IAAKnI,EAAaoI,SAAUpI,EAAaqI,KAAMrI,EAAasI,aAActI,EAAa2D,UAAA,C,GAE1H6E,QAAA,CAAA,UAAA,eAAU,SAASP,EAASjI,GAC1B,GAAGA,EAAamI,IACd,OAAOF,EAAQQ,gBAAgBzI,CAAA,C,IAIrC2H,MAAQ,CACNC,gBAAkB,CAChBpE,YAAc,wBACdC,WAAa,iB,EAEfiF,wBAA0B,CACxBlF,YAAa,2BACbC,WAAY,oB,kCA5ExBhB,QACKC,OAAO,YACR,CACE,eACA,a,EAEDxG,OAAOA,CAAA,C,ICTd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,iBAAkB,CACvBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,kBACNrN,KAAO,CAELsN,KAAO,CAAEC,UAAY,uBAAA,EACrB7D,aAAa,CAAA,C,EAEf8D,SAAW,qB,GAEZvF,MAAM,6BAA8B,CACnCoF,IAAM,0HACNQ,OAAS,CACPC,WAAa,EACbC,SAAW,G,EAEbJ,YAAc,0CACdC,WAAa,2BACb5N,KAAK,CACHyN,MAAM,kBACNC,KAAK,4B,EAEPM,QAAU,CACRC,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5BE,QAAA,CAAA,eAAA,eAAA,iBAAA,mBAAS,SAAUjE,EAAcC,EAAciE,EAAgBH,GAC3D,OAAOG,EAAe,WACpB,OAAOlE,EAAa4I,sBAAsB7E,CAAA,C,EAC1C9D,EAAamE,YAAanE,EAAaoE,MAAA,C,GAE7CwE,YAAA,CAAA,eAAA,eAAA,UAAA,mBAAc,SAAU7I,EAAcC,EAAcgE,EAASF,GACzD,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAI/F,OAHI1E,EAAa6I,YACf7I,EAAa6I,UAAY,kBAEpB9I,EAAa+I,2BAA2BhF,EAAiBM,EAAQD,GAAeA,EAAYO,SAAA,CAAA,EAAYvD,KAAK,SAAUyH,GAC5H,OAAOjV,EAAEiV,CAAA,EAAapQ,OAAO,SAAU0M,GAErC,MAAwB,SAAjBA,EAAE6D,YAA0C,UAAjB7D,EAAE6D,YAA2C,SAAjB7D,EAAE6D,YAA0C,eAAjB7D,EAAE6D,U,GAC1FrT,MAAA,C,KAGTsT,UAAA,CAAA,eAAA,eAAA,cAAA,UAAA,mBAAY,SAAUjJ,EAAcC,EAAc4I,EAAa5E,EAASF,GACpE,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAQ/F,OAPwB/Q,EAAEsV,KAAKL,EAAa,CAACG,WAAY/I,EAAa+I,WACpEX,SAAUpI,EAAaoI,QAAA,CAAA,IAEvBpI,EAAa6I,UAAa,iBAC1B,OAAO7I,EAAa+I,WACpB,OAAO/I,EAAaoI,UAEfrI,EAAamJ,2BAA2BpF,EAAkB9D,EAAa+I,WAC1E/I,EAAaoI,SAAUhE,EAAQD,GAAeA,EAAYO,SAAA,CAAA,C,GAElEc,OAAA,CAAA,eAAS,SAAUzF,GACjB,OAAOA,EAAa0F,mBAAA,C,GAEtBG,sBAAA,CAAA,eAAuB,SAAS7F,GAC9B,OAAOA,EAAa8F,kCAAkC,gBAAA,C,mCAzElEpD,QACKC,OAAO,8BAA+B,EAAA,EACtCxG,OAAOA,CAAA,C,ICLd,WACE,aAWA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,YAAa,CAClBmF,OAAS,eACTC,IAAM,iBACNrN,KAAO,CACLsN,KAAO,CACLC,UAAY,uB,EAEd7D,aAAa,CAAA,EACb+D,MAAM,qBACNC,KAAK,W,EAEPE,WAAa,sBACbD,YAAc,gCACdK,QAAU,CACRsF,YAAA,CAAA,eAAA,gBAAc,SAAUnJ,EAAcoJ,GACpC,OAAOA,EAAc/H,KAAKrB,EAAamI,GAAA,C,GAEzCkB,OAAA,CAAA,OAAA,WAAS,SAAUxJ,EAAM6H,GACvB,GAAI7H,EAAKlC,IAAI,mBAAA,EACX,OAAO+J,EAASrG,KAAA,C,MAKvBvD,MAAM,UAAW,CAChBmF,OAAS,eACTC,IAAM,qCACNrN,KAAO,CACLsN,KAAO,CACLC,UAAY,uB,EAEdE,MAAM,qCACNC,KAAK,mB,EAEPM,QAAU,CACRyF,WAAA,CAAA,eAAA,gBAAa,SAAUtJ,EAAcoJ,GACnC,OAAIpJ,EAAasJ,WACRF,EAAcjM,IAAI6C,EAAamI,IAAKnI,EAAasJ,UAAA,EAEjD,I,GAGXC,UAAA,CAAA,eAAY,SAAUC,GACpB,OAAOA,EAAaC,aAAA,C,IAGxBhG,WAAA,CAAA,SAAA,eAAA,aAAA,YAAa,SAAUoE,EAAQ7H,EAAcsJ,EAAYC,GACvD1B,EAAOyB,WAAaA,EACpBzB,EAAO0B,UAAYA,EACnB1B,EAAOM,IAAMnI,EAAamI,G,GAE5B9E,SAAW,yG,gCA/DnBZ,QACKC,OAAO,wBAAyB,CAC/B,kBACA,mBACA,qB,EAEDxG,OAAOA,CAAA,C,ICTd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,OAAQ,CACbmF,OAAS,eACTC,IAAM,WACNM,YAAc,sBACdC,WAAa,iBACb5N,KAAK,CACH0J,aAAa,CAAA,EACb+D,MAAM,OACNC,KAAK,S,iCAhBfd,QACKC,OAAO,WAAY,EAAA,EACnBxG,OAAOA,CAAA,C,ICLd,WACE,aAyBA,SAASwN,EAAUrO,EAAKxB,GACtB,OAAOwB,EAAMzB,KAAK+P,OAAQ9P,EAAMwB,EAAO,GAAKzB,KAAKgQ,OAAA,CAAA,C,CAxBnDnH,QACKC,OAAO,qBAAsB,EAAA,EAElCtP,GAAGyW,UAAUC,UAAU9U,UAAY,SAAUwB,EAAGI,GAC9C,IAAIY,EACJ,OAAI7D,EAAEoW,WAAWvT,CAAA,GACfgB,EAAKhB,EACE/C,KAAKkB,KAAK,YAAa,WAC5B,OAAOqV,EAAcxS,EAAGyS,MAAMxW,KAAMyB,SAAA,CAAA,C,IAG/BzB,KAAKkB,KAAK,YAAaqV,EAAcxT,EAAGI,CAAA,CAAA,EAGjD,SAASoT,EAAcxT,EAAGI,GAKxB,OAJIjD,EAAEuW,QAAQ1T,CAAA,IACZI,EAAIJ,EAAE,GACNA,EAAIA,EAAE,IAED,aAAeA,EAAI,IAAMI,EAAI,G,GAQxCuT,OAAOC,KAAO,WAIZ,MAAO,uCAAuCC,QAAQ,QAAS,SAAUC,GACvE,OAAe,MAAPA,EAAaZ,EAAU,EAAG,EAAA,EAAO,EAAIA,EAAU,EAAG,CAAA,GAAKa,SAAS,EAAA,C,OCnC9E,WACE,aAQA,SAASrO,EAAO6G,GAEdA,EAAejF,MAAM,OAAO,CAC1BmF,OAAS,eACTC,IAAM,QACNM,YAAc,sBACd3N,KAAO,CACLyN,MAAM,gBACNC,KAAK,M,EAEPE,WAAY,gB,gCAhBhBhB,QACKC,OAAO,WAAW,EAAA,EAClBxG,OAAOA,CAAA,C,ICLd,WACE,aAQA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,eAAgB,CACrBmF,OAAS,OACTD,SAAW,CAAA,EACXQ,YAAc,6BACdC,WAAY,yBACZ+G,QAAA,CAAA,cAAA,kBAAA,SAAS,SAAU9M,EAAab,EAAiB+C,GAC3ClC,EAAY+M,eAAA,IACd7K,EAAO8K,eAAe,aAAc7N,EAAgByB,YAAA,EACpDZ,EAAYiN,kBAAA,E,kCAhBxBlI,QACKC,OAAO,SAAA,EACPxG,OAAOA,CAAA,C,ICNd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,gBAAiB,CACtBmF,OAAS,eACTC,IAAM,mIACNM,YAAc,wCACdC,WAAa,0BACb5N,KAAO,CACLsN,KAAO,CAAEC,UAAY,sBAAA,EACrB7D,aAAa,CAAA,EACb+D,MAAM,iBACNC,KAAK,6B,EAEPM,QAAU,CACR2B,OAAA,CAAA,eAAS,SAAUzF,GACjB,OAAOA,EAAa0F,mBAAA,C,GAEtBmF,aAAA,CAAA,gBAAA,eAAe,SAAUC,EAAe7K,GACtC,OAAO6K,EAAcC,uBAAuB9K,EAAa+D,SAAU/D,EAAa+K,QAC5E/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,GAExC6G,gBAAA,CAAA,gBAAA,eAAiB,SAAUH,EAAe7K,GACxC,OAAO6K,EAAcI,0BAA0BjL,EAAa+D,SAAU/D,EAAa+K,QAC/E/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,GAExC+G,gBAAA,CAAA,gBAAA,eAAkB,SAASL,EAAe7K,GACxC,OAAO6K,EAAcM,0BAA0BnL,EAAa+D,SAAU/D,EAAa+K,QAC/E/K,EAAaoE,OAAQpE,EAAamE,YAAanE,EAAaoI,SAAUpI,EAAa+I,UAAA,C,GAEzFqC,UAAA,CAAA,gBAAA,eAAY,SAASP,EAAe7K,GAClC,OAAO6K,EAAcQ,6BAA6BrL,EAAa+D,SAAU/D,EAAa+K,QAClF/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,GAExCmH,kBAAA,CAAA,gBAAA,eAAoB,SAAST,EAAe7K,GAC1C,OAAO6K,EAAcU,qCAAqCvL,EAAa+D,SAAU/D,EAAa+K,QAC1F/K,EAAaoE,OAAQpE,EAAamE,YAAanE,EAAaoI,SAAUpI,EAAa+I,UAAA,C,GAEzFyC,WAAA,CAAA,gBAAA,eAAa,SAASX,EAAe7K,GACnC,OAAO6K,EAAcY,4BAA4BzL,EAAa+D,SAC1D/D,EAAaoE,OAAQpE,EAAamE,YAAanE,EAAaoI,SAAUpI,EAAa+I,UAAA,C,GAEzF2C,iBAAA,CAAA,gBAAA,eAAkB,SAASb,EAAe7K,GACxC,OAAO6K,EAAcc,0BAA0B3L,EAAa+D,SAAU/D,EAAa+K,QAC/E/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,GAExCyH,eAAA,CAAA,gBAAA,eAAgB,SAASf,EAAe7K,GACtC,OAAO6K,EAAcgB,wBAAwB7L,EAAa+D,SAAU/D,EAAa+K,QAC7E/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,GAExC2H,eAAA,CAAA,gBAAA,eAAgB,SAASjB,EAAe7K,GACtC,OAAO6K,EAAckB,wBAAwB/L,EAAa+D,SAAU/D,EAAa+K,QAC7E/K,EAAaoE,OAAQpE,EAAamE,WAAA,C,mCAzDlD1B,QACKC,OAAO,6BAA8B,EAAA,EACrCxG,OAAOA,CAAA,C,ICLd,WACC,aAOA,SAASA,EAAO6G,GAEdA,EACGjF,MAAM,WAAY,CACjBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,YACNrN,KAAO,CACLsN,KAAO,CAAEC,UAAY,0BAAA,C,EAEvBC,SAAW,qB,GAEZvF,MAAM,sBAAuB,CAC5BoF,IAAM,uFACNM,YAAc,wCACdC,WAAa,+BACb5N,KAAO,CACL0J,aAAa,CAAA,EACb+D,MAAM,sBACNC,KAAK,6B,EAEPM,QAAU,CACRC,iBAAA,CAAA,oBAAA,eAAkB,SAAUkI,EAAmBhM,GAC7C,OAAOgM,EAAkBlI,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAE7E,OADA9D,EAAa+D,SAAWD,C,KAI5BE,QAAA,CAAA,oBAAA,eAAA,iBAAA,mBAAS,SAAUgI,EAAmBhM,EAAciE,EAAgBH,GAChE,OAAOG,EAAgB,WACrB,OAAO+H,EAAkBC,4BAA4BnI,CAAA,C,EACrD9D,EAAamE,YAAanE,EAAaoE,MAAA,C,GAE7C2C,WAAA,CAAA,eAAa,SAAUhH,GACrB,OAAOA,EAAa0F,mBAAA,C,GAEtByG,qBAAA,CAAA,oBAAA,eAAA,UAAA,QAAA,mBAAuB,SAASF,EAAmBjM,EAAciE,EAASqC,EAAOvC,GAC7E,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,OAAOsH,EAAkBG,wBAAwBrI,EAAkBK,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAE9GgI,WAAA,CAAA,uBAAA,eAAa,SAASF,EAAsBlM,GACtCqM,EAAoB1Y,EAAE0N,KAAK6K,EAAsB,SAAShH,GAC5D,OAAOA,EAAE6D,aAAe/I,EAAa+I,YAAc7D,EAAEkD,WAAapI,EAAaoI,Q,GAEjF,GAAGiE,EACD,OAAO1Y,EAAE2Y,KAAK3Y,EAAE0G,IAAIgS,EAAkBD,WAAY,WAAA,CAAA,EAAcG,KAAA,C,GAGpErB,gBAAA,CAAA,uBAAA,aAAA,eAAkB,SAASgB,EAAsBE,EAAYpM,GACvDqM,EAAoB1Y,EAAE0N,KAAK6K,EAAsB,SAAShH,GAC5D,OAAOA,EAAE6D,aAAe/I,EAAa+I,YAAc7D,EAAEkD,WAAapI,EAAaoI,Q,GAEjF,GAAGiE,EAAkB,CACnB,IAAIG,EAAoB7Y,EAAE0N,KAAKgL,EAAkBD,WAAY,SAASlH,GACpE,OAAOA,EAAEuH,UAAUC,MAAQ1M,EAAayM,S,GAE1C,GAAGD,EAGD,OAFItB,EAAkBsB,EAAkBtB,gBAAgBqB,KAAA,GACxCI,QAAQ,CAACD,IAAK,MAAMhX,MAAO,MAAMkX,SAAU,CAAA,CAAA,CAAA,EACpD1B,C,IAIb2B,gBAAA,CAAA,uBAAA,kBAAA,eAAkB,SAASX,EAAsBY,EAAiB9M,GAChE,OAAO8M,EAAgBZ,EACrBlM,EAAa6I,UAAW7I,EAAa+I,WAAY/I,EAAaoI,QAAA,C,GAElE2E,gBAAA,CAAA,aAAA,kBAAA,kBAAA,eAAkB,SAASX,EAAYS,EAAiBG,EAAiBhN,GACvE,OAAOgN,EAAgBZ,EACrBpM,EAAayM,UAAWI,CAAA,C,GAE5BI,qBAAA,CAAA,kBAAA,kBAAA,uBAAA,eAAuB,SAAS/B,EAAiB6B,EAAiBG,EAAsBlN,GAClF,OAAOkN,EAAqBhC,EAAiBlL,EAAamN,eAAgBJ,CAAA,C,GAEhFK,iBAAA,CAAA,oBAAA,eAAA,UAAA,mBAAmB,SAAUpB,EAAmBhM,EAAcgE,EAASF,GACnE,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,GAAG1E,EAAa+I,YAAc/I,EAAaoI,UAAYpI,EAAayM,WAAazM,EAAamN,eAC5F,OAAOnB,EAAkBqB,oBAAoBvJ,EAAkB9D,EAAa+I,WAAY/I,EAAaoI,SAAUpI,EAAayM,UACxHtI,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAEjDkJ,mBAAA,CAAA,oBAAA,eAAA,UAAA,mBAAqB,SAAStB,EAAmBhM,EAAcgE,EAASF,GACpE,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,GAAG1E,EAAa+I,YAAc/I,EAAaoI,UAAYpI,EAAayM,WAAazM,EAAamN,eAC5F,OAAOnB,EAAkBuB,sBAAsBzJ,EAAkB9D,EAAa+I,WAAY/I,EAAaoI,SAAUpI,EAAayM,UAC1HzM,EAAamN,eAAgBhJ,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAE9EoJ,mBAAA,CAAA,oBAAA,eAAA,UAAA,mBAAqB,SAASxB,EAAmBhM,EAAcgE,EAASF,GACpE,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAC/F,GAAG1E,EAAa+I,YAAc/I,EAAaoI,UAAYpI,EAAayM,WAAazM,EAAamN,eAC5F,OAAOnB,EAAkByB,sBAAsB3J,EAAmB9D,EAAa+I,WAAY/I,EAAaoI,SAAUpI,EAAayM,UAC3HzM,EAAamN,eAAgBhJ,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAE9EwB,sBAAA,CAAA,eAAuB,SAAS7F,GAC9B,OAAOA,EAAa8F,kCAAkC,mBAAA,C,mCAtGhEpD,QACGC,OAAO,wBAAyB,EAAA,EAChCxG,OAAOA,CAAA,C,ICLX,WACE,aAUA,SAASA,EAAO6G,EAAgBtG,GAE9BsG,EACKjF,MAAM,aAAc,CACnBmF,OAAS,eACTC,IAAM,eACNF,SAAW,CAAA,EACXK,SAAW,gC,GAEZvF,MAAM,iBAAkB,CACvBoF,IAAM,OACNrN,KAAO,CACLsN,KAAO,CACLC,UAAY,sBACZsK,UAAY,M,EAEdnO,aAAa,CAAA,EACb+D,MAAM,cACNC,KAAK,a,EAEPE,WAAa,uBACbD,YAAc,+BACdK,QAAU,CACR0E,QAAA,CAAA,UAAA,eAAU,SAAUN,EAASjI,GACvBmI,EAAMF,EAAQ0F,WAAW3N,EAAamI,GAAA,EAC1C,OAAOA,EAAMF,EAAQ5G,KAAK8G,CAAA,EAAO,E,MAM3C1L,EAAiBmR,QAAQ,SAAUxF,GACjCrF,EACKjF,MAAM,cAAgBsK,EAAU,CAC/BvS,KAAO,CACLgY,eAAiBzF,EACjBjF,KAAO,CACLC,UAAY,sBACZsK,UAAW,M,EAEbnO,aAAa,CAAA,EACb+D,MAAO,qBAAuB8E,EAC9B7E,KAAK,WAAa6E,C,EAEpBlF,IAAM,IAAMkF,EACZ3E,WAAa,4BACbD,YAAc,oCACdK,QAAU,CACR8J,WAAA,CAAA,UAAA,eAAa,SAAS1F,EAASjI,GAC7B,OAAOiI,EAAQ0F,WAAW3N,EAAamI,GAAA,C,GAEzCI,QAAA,CAAA,UAAA,aAAU,SAAUN,EAAS0F,GAC3B,OAAOA,EAAa1F,EAAQ5G,KAAKsM,EAAYvF,CAAA,EAAY,E,GAE3DJ,aAAA,CAAA,UAAA,aAAc,SAASC,EAAS0F,GAC9B,OAAO1F,EAAQC,YAAYyF,EAAYvF,CAAA,C,wDA/DrD3F,QACKC,OAAO,cAAe,EAAA,EACtBC,SAAS,mBAAoB,CAC5B,OAAQ,QAAS,UAAW,Q,EAE7BzG,OAAOA,CAAA,C,ICRd,WACE,aAQA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,UAAW,CAChBkF,SAAW,CAAA,EACXC,OAAS,eACTC,IAAM,WACNrN,KAAO,CACLsN,KAAO,CAAEC,UAAY,gCAAA,EACrB7D,aAAa,CAAA,C,EAEf8D,SAAW,qB,GAEZvF,MAAM,sBAAuB,CAC5BoF,IAAM,0HACNQ,OAAS,CACPC,WAAa,EACbC,SAAW,G,EAEb/N,KAAK,CACHyN,MAAM,oBACNC,KAAK,qB,EAEPC,YAAc,uCACdC,WAAa,+BACbI,QAAU,CACRC,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5BE,QAAA,CAAA,eAAA,eAAA,iBAAA,mBAAS,SAAUjE,EAAcC,EAAciE,EAAgBH,GAC3D,OAAOG,EAAgB,WACrB,OAAOlE,EAAa+N,6BAA6BhK,CAAA,C,EACjD9D,EAAamE,YAAanE,EAAaoE,MAAA,C,GAE7C2J,QAAA,CAAA,UAAA,eAAA,eAAA,mBAAU,SAAU/J,EAASjE,EAAcC,EAAc8D,GACrD,IAAIK,EAAcH,EAAQQ,YAAA,EACtBJ,EAASD,GAAeA,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EAI/F,OAHI1E,EAAa6I,YACf7I,EAAa6I,UAAY,kBAEpB9I,EAAaiO,6BAA6BlK,EAAkBK,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAE9G4E,UAAA,CAAA,eAAA,eAAA,UAAA,mBAAY,SAAUjJ,EAAcC,EAAcgE,EAASF,GACvD,IAEMM,EAFN,GAAGpE,EAAa6I,UAGd,OADIzE,GADAD,EAAcH,EAAQQ,YAAA,IACEL,EAAYM,kBAAA,GAAuBN,EAAYM,kBAAA,EAAoBC,SAAA,EACxF3E,EAAakO,sBAAsBnK,EAAkB9D,EAAa+I,WAAY/I,EAAaoI,SAAUjE,GAAeA,EAAYO,SAAA,EAAYN,CAAA,C,GAGzJoB,OAAA,CAAA,eAAS,SAAUzF,GACjB,OAAOA,EAAa0F,mBAAA,C,GAEtBG,sBAAA,CAAA,eAAwB,SAAS7F,GAC/B,OAAOA,EAAa8F,kCAAkC,oBAAA,C,MAI3D/H,MAAM,4BAA6B,CAClCoF,IAAM,wHACNQ,OAAS,CACPC,WAAa,EACbC,SAAW,G,EAEb/N,KAAO,CACLsN,KAAO,CAAEC,UAAY,sCAAA,EACrB7D,aAAa,CAAA,EACb+D,MAAM,4BACNC,KAAK,2B,EAEPC,YAAa,mDACbC,WAAa,qCACbI,QAAU,CACRC,iBAAA,CAAA,eAAA,eAAkB,SAAS/D,EAAcC,GACvC,OAAOD,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExE,OADA9D,EAAa+D,SAAWD,C,KAI5B8E,YAAA,CAAA,eAAA,eAAA,mBAAc,SAAU7I,EAAcC,EAAc8D,GAChD,OAAO/D,EAAamO,uCAAuCpK,CAAA,C,GAE/DiK,QAAA,CAAA,eAAA,eAAA,cAAA,mBAAS,SAAUhO,EAAcC,EAAa4I,EAAa9E,GACzD,GAAG8E,GAAeA,EAAYzT,OAM1B,OALA6K,EAAa+D,SAAWD,EACxB9D,EAAa+I,WAAa/I,EAAa+I,YAAeH,EAAY,IAAMA,EAAY,GAAGG,WACvF/I,EAAaoI,SAAWpI,EAAaoI,UAAaQ,EAAY,IAAMA,EAAY,GAAGR,SACnFpI,EAAamO,SAAWnO,EAAamO,UAAavF,EAAY,IAAMA,EAAY,GAAGuF,SACnFnO,EAAaoO,WAAapO,EAAaoO,YAAexF,EAAY,IAAMA,EAAY,GAAGwF,WAChFrO,EAAasO,mCAAmCvK,EAAkB9D,EAAa+I,WAClF/I,EAAaoI,SAAUpI,EAAaoO,WAAYpO,EAAamO,QAAA,C,GAGvE3I,OAAA,CAAA,eAAS,SAAUzF,GACjB,OAAOA,EAAa0F,mBAAA,C,GAEtBG,sBAAA,CAAA,eAAwB,SAAS7F,GAC/B,OAAOA,EAAa8F,kCAAkC,yBAAA,C,mCAzGlEpD,QACKC,OAAO,uBAAwB,EAAA,EAC/BxG,OAAOA,CAAA,EACPyG,SAAS,WAAY,GAAA,C,ICN5B,WACE,aAOA,SAASzG,EAAO6G,GAEdA,EACKjF,MAAM,QAAS,CACdmF,OAAO,eACPC,IAAM,SACNO,WAAa,kBACbD,YAAc,wBACd3N,KAAK,CACH0J,aAAa,CAAA,EACb+D,MAAM,QACNC,KAAK,O,iCAhBfd,QACKC,OAAO,YAAY,EAAA,EACnBxG,OAAOA,CAAA,C,ICLd,WACE,aAUA,SAASA,EAAOoS,GAEdA,EAAmBC,qBAAqB,CACtCC,MAAO,CAAC,CACNC,OAAQ,uBACRC,OAAQ,O,EACP,CACDD,OAAQ,gCACRC,OAAQ,O,EACR,CACAD,OAAQ,+BACRC,OAAQ,O,KAGZJ,EAAmBK,kBAAkB,IAAA,EACrCL,EAAmBM,yBAAyB,oBAAA,C,kCAvB9CnM,QACKC,OAAO,mBAAoB,CAC1B,yBACA,a,EAEDxG,OAAOA,CAAA,C,ICRd,WACE,aAYA,SAASA,EAAO6G,I,6BAVhBN,QACKC,OAAO,eACR,CACE,eACA,eACA,a,EAEDxG,OAAOA,CAAA,C,ICVd,WACE,aAEAuG,QACKC,OAAO,+BAAgC,EAAA,EACvCC,SAAS,eAAgB,CACxBkM,MAAO,QACPC,OAAQ,SACRC,QAAS,S,GAEVpM,SAAS,WAAYqM,OAAO,IAAI9V,KAAK,YAAA,CAAA,EAAe+V,OAAO,YAAA,CAAA,EAC3DtM,SAAS,iBAAkB,GAAA,EAC3BA,SAAS,uBAAwB,CAChCuM,OAAW,CACTC,OAAU,CAAEC,OAAQ,UAAWC,KAAM,UAAWC,QAAS,OAASC,MAAO,UAAA,EACzEC,UAAa,CAAEJ,OAAQ,UAAWC,KAAM,UAAWC,QAAS,OAAQC,MAAO,aAAA,EAC3EE,QAAY,CAAEL,OAAQ,UAAWC,KAAM,UAAWC,QAAS,MAAOC,MAAO,WAAA,EACzEG,UAAc,CAAEN,OAAQ,UAAWC,KAAM,UAAWC,QAAS,MAAOC,MAAO,gBAAA,EAC3EI,WAAe,CAAEP,OAAQ,UAAWC,KAAM,UAAWC,QAAS,MAAOC,MAAO,kBAAA,EAC5EK,eAAmB,CAAER,OAAQ,UAAWC,KAAM,UAAWC,QAAS,OAAQC,MAAO,uBAAA,EACjFM,qBAAyB,CAAET,OAAQ,UAAWC,KAAM,UAAWC,QAAS,MAAOC,MAAO,4BAAA,EACtFO,aAAiB,CAAEV,OAAQ,UAAWC,KAAM,UAAWC,QAAS,MAAOC,MAAO,qBAAA,C,IAGjF5M,SAAS,2BAA4B,CAAC,8BAAA,EACtCoN,UAAU,qBAAA,CAAA,sBAAsB,SAAUC,GAErCC,EAAaxN,QAAQyN,KAAKF,EAAoB,EAAA,EAElD,OADAC,EAAWzM,YAAc,yCAClByM,C,OC7Bf,WACE,a,sBAEA,IAAIE,EAAO,CACTC,SAAW,SAAUC,GACfC,EAAQD,EAAIE,MAAM,GAAA,EACtB,MAAO,CACLC,OAASC,EAAWH,EAAM,EAAA,EAC1BI,QAAUD,EAAWH,EAAM,EAAA,C,GAG/BK,qBAAuB,SAAUH,GAC3BF,EAAQE,EAAOD,MAAM,KAAA,EACzB,OAAO5c,EAAEid,OAAON,EAAO,SAAUjW,EAAKwW,GAChCC,EAAOD,EAAKN,MAAM,GAAA,EAOtB,OANoB,IAAhBO,EAAK3b,OACP2b,EAAKtV,KAAK,CAAA,CAAA,EACD7H,EAAEod,WAAWD,EAAK,GAAI,GAAA,GAAQnd,EAAEqd,SAASF,EAAK,GAAI,GAAA,IAC3DA,EAAK,GAAKG,KAAKC,MAAMJ,EAAK,EAAA,GAE5BzW,EAAIyW,EAAK,IAAMA,EAAK,GACbzW,C,EACN,EAAA,C,GAIP,SAASoW,EAAWU,GAClB,OAAOF,KAAKC,MAAME,KAAKD,CAAA,CAAA,C,CAQzB,SAASE,EAASC,GAChB,MAAO,CACLC,eAGF,SAAwBC,EAAMvC,GAC5B,OAAKuC,EACMF,EAAQ,MAAA,EAAQE,EAAMvC,CAAA,EADf,E,GAXtBxM,QACKC,OAAO,mBAAoB,EAAA,EAC3BC,SAAS,OAAQwN,CAAA,EACjBsB,QAAQ,WAAYJ,CAAA,C,ICjC3B,WACE,aAOA,SAASnV,EAAO6G,GAEdA,EACKjF,MAAM,cAAe,CACpBkF,SAAU,CAAA,EACVC,OAAS,YACTC,IAAM,gCACNG,SAAW,uC,GAEZvF,MAAM,wBAAyB,CAC9BoF,IAAM,kEACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,oBAAA,EACrBE,MAAO,sBACPC,KAAK,wB,EAEPG,OAAQ,CACNgO,cAAe,CAACC,KAAM,KAAA,C,EAExBnO,YAAc,uEACdC,WAAa,gC,GAEd3F,MAAM,wBAAyB,CAC9BoF,IAAM,kHACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,oBAAA,EACrBE,MAAO,sBACPC,KAAK,uB,EAEPG,OAAQ,CACNkO,sBAAuB,CAACD,KAAM,MAAA,EAC9BD,cAAe,CAACC,KAAM,KAAA,C,EAExBnO,YAAc,uEACdC,WAAa,gC,gCAvCrBhB,QACKC,OAAO,8BAAA,EACPxG,OAAOA,CAAA,C,ICLd,WACE,aASA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,YAAa,CAClBkF,SAAW,CAAA,EACXQ,YAAc,0CACdC,WAAY,sBACZP,IAAM,+IAENQ,OAAQ,CACNmO,SAAU,CAACC,MAAO,CAAA,CAAA,EAClBC,WAAY,CAACD,MAAO,CAAA,CAAA,EACpBE,UAAW,CAACF,MAAO,CAAA,CAAA,EACnBG,QAAS,CAACH,MAAO,CAAA,CAAA,EACjBI,SAAU,CAACJ,MAAO,CAAA,CAAA,EAClBK,YAAa,CAACR,KAAM,MAAA,C,EAEtBnH,QAAA,CAAA,cAAA,kBAAA,SAAS,SAAS9M,EAAab,EAAiB+C,GAC1ClC,EAAY0U,YAAA,IACdxS,EAAO8K,eAAe,aAAc7N,EAAgB2B,SAAA,EACpDd,EAAY2U,eAAA,E,GAGhBxO,QAAS,CACPyO,WAAA,CAAA,kBAAY,SAAUC,GACpB,OAAOA,EAAgBC,eAAA,C,GAEzBC,UAAA,CAAA,kBAAA,aAAA,eAAW,SAAUF,EAAiBD,EAAYtS,GAChD,OAAOuS,EAAgBG,sBAAsBJ,EAAYtS,EAAa6R,QAAA,C,GAExE7N,QAAA,CAAA,kBAAA,eAAA,UAAA,YAAS,SAAUuO,EAAiBvS,EAAc2S,EAASF,GACzD,OAAOF,EAAgBK,mBAAmBH,CAAA,EAAWtR,KAAK,SAAU6C,GAC9D6O,EAAa7O,EAAQ6O,WAEzB,OADAF,EAAQG,aAAaD,EAAY7S,CAAA,EAC1B2S,EAAQI,gBAAA,C,qCAxC7BtQ,QACKC,OAAO,8BAAA,EACPqN,UAAU,SA6Cf,WACE,MAAO,CACLiD,SAAU,IACVxP,YAAc,uCACdyP,MAAO,CAAA,C,EAjDc,EACpB/W,OAAOA,CAAA,C,ICPd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,mBAAoB,CACzBkF,SAAU,CAAA,EACVC,OAAS,YACTC,IAAM,qBACNG,SAAW,uC,GAEZvF,MAAM,2BAA4B,CACjCoF,IAAM,WACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,yBAAA,EACrBE,MAAM,oBACNC,KAAK,0B,EAEPC,YAAc,8DACdC,WAAa,4B,gCAtBrBhB,QACKC,OAAO,8BAAA,EACPxG,OAAOA,CAAA,C,ICLd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,WAAY,CACjBkF,SAAU,CAAA,EACVC,OAAS,YACTC,IAAM,YACNG,SAAW,uC,GAEZvF,MAAM,mBAAoB,CACzBoF,IAAM,WACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,iBAAA,EACrBE,MAAM,mBACNC,KAAK,kB,EAEPC,YAAc,4DACdC,WAAa,0B,GAEd3F,MAAM,oBAAqB,CAC1BoF,IAAM,YACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,iBAAA,EACrBE,MAAM,oBACNC,KAAK,mB,EAEPC,YAAc,8DACdC,WAAa,2B,GAEd3F,MAAM,uBAAwB,CAC7BoF,IAAM,gBACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,iBAAA,EACrBE,MAAM,wBACNC,KAAK,uB,EAEPC,YAAc,6DACdC,WAAa,uB,GAEd3F,MAAM,oBAAqB,CAC1BoF,IAAM,YACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,iBAAA,EACrBE,MAAM,oBACNC,KAAK,mB,EAEPC,YAAc,8DACdC,WAAa,2B,GAEd3F,MAAM,gBAAiB,CACtBoF,IAAM,QACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,qBAAA,EACrBE,MAAM,gBACNC,KAAK,e,EAEPC,YAAc,yEACdC,WAAa,wB,GAEd3F,MAAM,eAAgB,CACrBoF,IAAM,OACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,oBAAA,EACrBE,MAAM,eACNC,KAAK,c,EAEPC,YAAc,yEACdC,WAAa,uB,GAEd3F,MAAM,2BAA4B,CACjCoF,IAAM,oBACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,wBAAA,EACrBE,MAAM,oBACNC,KAAK,2B,EAEPM,QAAS,CACPuC,WAAA,CAAA,UAAA,YAAA,kBAAA,eAAY,SAAUpC,EAASyO,EAAWF,EAAiBW,GACrDC,EAAexf,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,EAC3D,OAAOF,EAAgBc,gBAAgB,SAAUH,EAAarE,MAAOsE,CAAA,EAAchS,KAAK,SAAUtL,GAChG,OAAOlC,EAAEkC,EAAKyd,aAAA,EACT5U,QAAQ,mBAAA,EACR6U,OAAO,OAAA,EACP7d,MAAA,C,MAKX8N,YAAc,qEACdC,WAAa,2B,gCA9FrBhB,QACKC,OAAO,8BAAA,EACPxG,OAAOA,CAAA,C,ICLd,WACE,aAOA,SAASA,EAAO6G,GAEdA,EACKjF,MAAM,eAAgB,CACrBkF,SAAU,CAAA,EACVC,OAAS,YACTC,IAAM,eACNG,SAAW,uC,GAEZvF,MAAM,uBAAwB,CAC7BoF,IAAM,WACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,6BAAA,EACrBE,MAAM,sBACNC,KAAK,qB,EAEPC,YAAc,oEACdC,WAAa,8B,GAEd3F,MAAM,sBAAuB,CAC5BoF,IAAM,UACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,6BAAA,EACrBE,MAAM,qBACNC,KAAK,oB,EAEPC,YAAc,kEACdC,WAAa,6B,GAEd3F,MAAM,uBAAwB,CAC7BoF,IAAM,WACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,6BAAA,EACrBE,MAAM,sBACNC,KAAK,qB,EAEPC,YAAc,oEACdC,WAAa,8B,GAEd3F,MAAM,0BAA2B,CAChCoF,IAAM,cACNrN,KAAM,CACJsN,KAAO,CAAEC,UAAY,6BAAA,EACrBE,MAAM,yBACNC,KAAK,wB,EAEPC,YAAc,2EACdC,WAAa,4B,gCApDrBhB,QACKC,OAAO,8BAAA,EACPxG,OAAOA,CAAA,C,ICLd,WACE,aAEAuG,QACKC,OAAO,oCAAoC,EAAA,C,ICJlD,WACE,aAEAD,QACKC,OAAO,iCAAiC,EAAA,C,ICJ/C,WACE,aAEAD,QACKC,OAAO,8BAA8B,EAAA,C,ICJ5C,WACE,aAEAD,QACKC,OAAO,iCAAiC,EAAA,C,ICJ/C,WACE,aAEAD,QACKC,OAAO,8BAA8B,EAAA,C,ICJ5C,WACE,aAEAD,QACKC,OAAO,+BAA+B,EAAA,C,ICJ7C,WACE,aAEAD,QACKC,OAAO,oCAAoC,EAAA,C,ICJlD,WACI,aAEAD,QACKC,OAAO,sBAAsB,EAAA,C,ICJtC,WACE,aAEAD,QACKC,OAAO,0BAA0B,EAAA,C,ICJxC,WACE,aAEAD,QACKC,OAAO,8BAA8B,EAAA,C,ICJ5C,WACI,aAEAD,QACKC,OAAO,sBAAsB,EAAA,C,ICJtC,WACE,aAOA,SAAS8Q,EAAQ3L,EAAQpK,GAGvBoK,EAAOpK,OAASA,C,+BARlBgF,QACKC,OAAO,aAAA,EACPe,WAAW,UAAW+P,CAAA,C,ICL7B,WACE,aAEA/Q,QACKC,OAAO,aAAA,EACPe,WAAW,gBAGhB,YAHiC,C,ICLnC,SAAUzJ,EAAEW,EAAM8Y,EAAEC,EAAEC,GAEpB3Z,EAAE,sBAA2ByZ,EAC7BzZ,EAAE,GAAKA,EAAE,IAAM,YACZA,EAAE,GAAG4Z,EAAI5Z,EAAE,GAAG4Z,GAAG,IAAIpY,KAAKtG,SAAA,C,EAC3B8E,EAAE,GAAG6Z,EAAI,CAAI,IAAI3a,KACnBwa,EAAI/Y,EAAEmZ,cAMW,QANG,EAChBH,EAAIhZ,EAAEoZ,qBAKO,QALc,EAAG,GAClCL,EAAEM,MAAQ,EACVN,EAAEO,IAGwB,gDAF1BN,EAAEO,WAAWC,aAAaT,EAAEC,CAAA,C,EAE3BxJ,OAAOiK,SAAkE,IAAA,ECZ5E,WACE,aAOA,SAAS1M,EAAS2M,GAEhB,MAAO,CACLhT,KAIF,WACE,OAAOgT,EAAIlX,IAAI,YAAa,CAAEmX,MAAQ,CAAA,CAAA,CAAA,EAAQnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,qBAblEwG,QACKC,OAAO,aAAA,EACP6R,QAAQ,WAAY7M,CAAA,C,ICL3B,WACE,aAcA,SAAS2M,EAAIG,EAAOC,GAClB,IAAIC,EAAO,eACPC,EAAMC,EAAUF,CAAA,EAIpB,OAHAC,EAAIE,aAKJ,SAAsBtR,GACpB,OAAOqR,EAAUF,EAAOnR,CAAA,C,EAL1BoR,EAAIG,YASJ,WACE,OAAOJ,C,EATTC,EAAII,gBAaJ,SAAwBxR,EAAMyR,GAC5B,OAAOzR,EAAO3C,mBAAmBoU,CAAA,C,EAb5BL,EAgBP,SAASC,EAAUK,GASjB,MANA,CAAC,MAAO,SAAU,OAAQ,SAAS5a,IAiBnC,SAA2B6a,GACzBC,EAAWD,GAAU,SAAUhS,EAAKhH,EAAQkZ,GAC1C,OAAOC,EAAcb,EAAMU,GALtBD,EAKqC/R,EAAMhH,CAAA,EAASkZ,CAAA,C,EAnBtB,EACvC,CAAC,OAAQ,MAAO,SAAS/a,IAsBzB,SAAmC6a,GACjCC,EAAWD,GAAU,SAAUhS,EAAKrN,EAAMqG,EAAQkZ,GAChD,OAAOC,EAAcb,EAAMU,GAXtBD,EAWqC/R,EAAMrN,EAAMqG,CAAA,EAASkZ,CAAA,C,EAxBtC,EAG7BD,EAAWF,SAAWA,EAEfE,EAEP,SAASA,EAAWjZ,GAElB,OADAA,EAAOgH,IAAMoS,EAAOpZ,EAAOgH,GAAA,EACpBmS,EAAcb,EAAMtY,CAAA,CAAA,C,CAG7B,SAASoZ,EAAOpS,GACd,OAAO+R,EAAW/R,C,CAepB,SAASmS,EAAcE,EAASH,GAC9B,OAAOG,EACFC,MAAM,SAAUC,GAAiBC,IAIpBC,EAJ+BF,EAIrBG,EAJ6BR,EAQzD,OAHIS,EAAUliB,EAAEuW,QAAQ0L,CAAA,GAAcjiB,EAAE0N,KAAKuU,EAAW,SAAUE,GAChE,OAAOA,EAASC,oBAAoBJ,EAASK,MAAA,C,IAGtCH,EAAQI,OAAON,CAAA,EAEflB,EAAGyB,OAAOP,CAAA,CAXsC,CAAA,C,GA+B/D,SAASvV,EAAgBqU,EAAIvX,GAE3B,MAAO,CACLiZ,cAAe,SAASC,GAItB,OAHIA,EAAIla,OAAO,qBACbsG,EAAW4T,CAAA,EAEN3B,EAAGyB,OAAOE,CAAA,C,EAEnB5T,WAAYA,C,EAGd,SAASA,EAAWD,GAClB,IAAItC,EAAQ/C,EAAUC,IAAI,OAAA,EACtB6Y,EAASzT,GAASA,EAAMyT,OAC5B,OAAOA,GACL,KAAK,IACH/V,EAAMsC,MAAM,0BAAA,EACZ,MACF,KAAK,IACHtC,EAAMsC,MAAM,+BAAA,EACZ,MACF,QACgB,KAAVyT,GACF/V,EAAMsC,MAAM,+BAAA,C,CAGlB,OAAOyT,C,wDA9HXvT,QACKC,OAAO,kBAAmB,EAAA,EAC1B6R,QAAQ,MAAOF,CAAA,EACf1R,SAAS,iBAAkB,CACxB0T,SAAY,IACZC,cAAiB,G,GAGpB/B,QAAQ,cA+Eb,WAEE,MAAO,CACLgC,eAAiB,SAAUR,EAAqBE,GAC9C,MAAO,CAAC,CACNF,oBAAuBA,EACvBE,OAAUA,C,KArFU,EACvB1B,QAAQ,kBAAmBnU,CAAA,C,ICZlC,WACE,aAQA,SAASoW,EAAkB/Y,EAAQoK,EAAQyJ,EAASmF,EAAUnS,EAAyBD,EAAYrE,EACxEgF,EAAkBI,EAAqBE,EAAgBE,EAAQE,EAAWgR,EAC1ExW,EAAiByW,EAAqBC,EAAkB9W,EAAWkE,EAASpE,EAC5EgG,EAAuBiR,GAChD,IAqIsBC,EArIlBC,EAAKtjB,KA0DLujB,GAzDJD,EAAGvR,OAAS7R,EAAEuW,QAAQ1E,CAAA,EAAUA,EAAS,GACzCuR,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EACxDgT,EAAGE,WAAa3S,EAChByS,EAAGG,eAAiB7S,GAAcA,EAAW8S,cAC7CJ,EAAGK,aAAe,GAClBL,EAAGzR,eAAiBA,EACpByR,EAAGrR,UAAYA,EACfqR,EAAGnT,SAAW6S,EACdM,EAAGM,WAAaN,EAAGG,eAAiBH,EAAGG,eAAe/hB,OAAS,EAC/D4hB,EAAGO,cAAgBP,EAAGM,WACtBN,EAAGQ,YAAcvX,EAAa2D,WAC9BoT,EAAGS,QAAU,EACbT,EAAGxjB,QAAU,CACXkkB,WAAa,CAAA,EACbC,oBAAsB,GACtBC,kBAAoB,GACpBC,iBAAmB,CAAA,EACnBC,WAAa,GACbC,WAAa,CAAA,EACbC,UAAW,G,EAEbhB,EAAG/R,iBAAkBrR,EAAEqR,CAAA,EAAkB3K,IAAI,SAAS6K,GACpD,MAAO,CACLN,gBAAiBM,EAAE6D,WACnBlE,cAAeK,EAAEkD,SACjB4P,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE3DrT,MAAA,EAEHqhB,EAAGkB,mBAAqBrS,EAExBmR,EAAG3R,oBAAqBzR,EAAEyR,CAAA,EAAqB/K,IAAI,SAAS6K,GAC1D,MAAO,CACLJ,mBAAoBI,EAAE6D,WACtBhE,iBAAkBG,EAAEkD,SACpB4P,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE3DrT,MAAA,EAEHqhB,EAAGmB,OAAStY,EAEZmX,EAAGoB,uBAAyB,SAAUtP,EAAWuP,GAC/C,OAAIA,EACkC,MAA7BvP,EAAUjE,iBAAiE,KAAtCjR,EAAE0kB,KAAKxP,EAAUjE,eAAA,EAEnB,MAAhCiE,EAAU/D,oBAAuE,KAAzCnR,EAAE0kB,KAAKxP,EAAU/D,kBAAA,C,EAGvEiS,EAAGuB,MAAQ,SAAS1P,EAAawP,GAC/BzkB,EAAE+N,OAAOkH,EAAa,SAASC,GAC7B,OAAOkO,EAAGoB,uBAAuBtP,EAAWuP,CAAA,C,IAIhDrB,EAAGuB,MAAMvB,EAAG/R,iBAAkB,CAAA,CAAA,EAC9B+R,EAAGuB,MAAMvB,EAAG3R,oBAAqB,CAAA,CAAA,EAEZlF,EAAgB,6BAAA,GAmBjCqY,GAlBJxB,EAAG/R,iBAAiB2H,QAAQ,CAAEqL,QAAUhB,CAAA,CAAA,EACxCD,EAAG3R,oBAAoBuH,QAAQ,CAAEqL,QAAUhB,CAAA,CAAA,EAE3CD,EAAGyB,kBAAoB,SAAS5P,EAAawP,EAASrP,EAAYX,GAChE,OAAIgQ,EACKzkB,EAAE0N,KAAKuH,EAAa,SAASC,GAAY,OAASA,EAAUjE,kBAAoBmE,IAAeF,EAAUhE,gBAAkBuD,GAAa,CAACA,GAAwC,KAA5BS,EAAUhE,cAAkB,CAAA,EAEjLlR,EAAE0N,KAAKuH,EAAa,SAASC,GAAY,OAAQA,EAAU/D,qBAAuBiE,IAAeF,EAAU9D,mBAAqBqD,GAAa,CAACA,GAA0C,KAA9BS,EAAU9D,iBAAoB,CAAA,C,EAGnMgS,EAAG0B,wBAA0D,MAAhCzY,EAAa4E,gBAA0BmS,EAAG/R,iBAAiB,GAAM+R,EAAGyB,kBAAkBzB,EAAG/R,iBAAkB,CAAA,EAAMhF,EAAa4E,gBAAiB5E,EAAa6E,aAAA,IAAmBkS,EAAG/R,iBAAiB,GAChO+R,EAAG2B,2BAAgE,MAAnC1Y,EAAa8E,mBAA6BiS,EAAG3R,oBAAoB,GAAK2R,EAAGyB,kBAAkBzB,EAAG3R,oBAAqB,CAAA,EAAOpF,EAAa8E,mBAAoB9E,EAAa+E,gBAAA,IAAsBgS,EAAG3R,oBAAoB,GACrP2R,EAAG4B,kBAAoB3Y,EAAauE,UACpCwS,EAAG6B,aAAe,CAAC,cAAe,gBAClC7B,EAAG8B,eAAiB9B,EAAG6B,aAAa,GAEpC7B,EAAG+B,sBAAwB9U,EAED+S,EAAG+B,uBAAyB/B,EAAG+B,sBAAsBtU,YAAA,GAC3EuU,EAAiBR,GAAuBA,EAAoB9T,kBAAA,EA2BhE,SAASuU,EAAaC,EAAYnC,GAChCJ,EAAS,WACPK,EAAG5Y,OAASxK,EAAEulB,aAAa,CAAErjB,KAAOojB,CAAA,EAAcnC,EAAOC,EAAG5Y,OAAQ,CAClE4F,SAAWM,GAAcA,EAAWN,SACpCqT,aAAeL,EAAGK,aAClBG,YAAc,EACd3T,SAAWmT,EAAGnT,SACdpM,GAAK,CACH2hB,MAAQxlB,EAAEsI,SAAS,WAAA,EACnBvG,MAAQ/B,EAAEsI,SAAS8a,EAAG6B,aAAa,EAAA,EACnC7gB,MAAQ,CAAC,WACTqhB,WAAa,SAAUxa,EAAMya,GAE3B,OAAgB,IADJtC,EAAG5Y,OAAO3G,GAAG9B,MAAM,GAAGuU,MAAMxW,KAAMyB,SAAA,GACzBokB,QAAQ,CAAA,EAAK,G,EAEpC9gB,OAAS,SAAU+gB,GACjB,MAAuF,CAAC,IAAjFA,EAAMC,UAAU1kB,YAAA,EAAc2kB,QAAQ1C,EAAG5Y,OAAOiZ,aAAatiB,YAAA,CAAA,C,EAEtE4kB,eAAiB,SAAU9a,GACzB,IAAI+a,EAAoBhmB,EAAEimB,MAAMhb,EAAK,aAAA,EAAeib,YAChDC,EAAoBnmB,EAAEimB,MAAMhb,EAAK,cAAA,EAAgBmb,aACrD,OAAOngB,KAAKogB,KAAmD,GAA9CpgB,KAAKC,IAAI8f,EAAkBG,CAAA,CAAmB,EAAI,E,OAyG7E,SAASG,EAAalR,EAAYX,GAC5BS,EAAYlV,EAAEumB,KAAK,CAACnR,EAAYX,GAAW,GAAA,EAC/C,MAAqB,MAAdS,EAAoBmO,EAAiBnO,C,CAG9C,SAASsR,EAAS9N,EAAmB+N,GAC/BC,EAAqBD,EACrBH,EAAaja,EAAa4E,gBAAiB5E,EAAa6E,aAAA,EACxDoV,EAAaja,EAAa8E,mBAAoB9E,EAAa+E,gBAAA,EAE/D,OAAOsH,EAAkB2L,UAAYqC,C,CAjKvCtD,EAAGuD,wBAA0B,SAASC,GACpChC,EAAsBgC,EACtBxD,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmB6N,EAASpB,KAAA,EACxEpC,EAAGhP,OAAO,CAAA,EAAO,CAAA,CAAA,C,EAGnBgP,EAAG0D,sBAAwB,SAAUrW,GACnC2U,EAAiB3U,EACjB2S,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,gBAAiBtI,EAAOsW,gBAAA,EACpE3D,EAAGhP,OAAO,CAAA,EAAO,CAAA,CAAA,C,EAGnBgP,EAAG4D,gBAAkB,SAAU9R,GAC7B,OAAOA,EAAUmP,UAAYhB,C,EAG/BD,EAAG6D,eAAiB,WAElB,MAAO,CAACtlB,OAAyB,IADbyhB,EAAG5Y,QAAU4Y,EAAG5Y,OAAO0c,KAAQ9D,EAAG5Y,OAAO0c,KAAc9D,EAAGG,gBAAZ/hB,OAC7B,IAAA,C,EAGvC4hB,EAAG+D,WAAa,WACd,MAAO,CAACC,aAAehE,EAAGG,eAAe/hB,OAASshB,EAAYA,EAAWM,EAAGG,eAAe/hB,MAAA,C,EAuD7F0S,EAAO1F,OAAO,wBAAyB,SAAShN,GAC9C4hB,EAAGO,cAAgBniB,C,GAGrB4hB,EAAGiE,gBAAkB,SAASzD,GAC5ByB,EAAajC,EAAGG,eAAgB,CAACK,YAAcA,CAAA,CAAA,C,EAGjDyB,EAAajC,EAAGG,cAAA,EA/BdR,EAAS,WACPK,EAAGkE,WAAatnB,EAAEulB,aAAa,CAAErjB,KAAMkhB,EAAGzR,cAAA,EAAkBwR,EAAOC,EAAGkE,WAAY,CAChFlX,SAAWM,GAAcA,EAAWN,SACpCmX,SAAW,CAAA,EACX1jB,GAAK,CACH2hB,MAAQ,SAASva,GAESua,EAAJ,CAAC,GAAlBva,EAAKuc,SAAwB,SAAWvc,EAAKwc,UACtB,CAAC,GAAnBxc,EAAKwc,UAAyB,IAAMxc,EAAKuc,SAAW,IAC/C,IAAIvc,EAAKuc,SAAW,OAASvc,EAAKwc,UAC/C,OAAOjC,C,EAETzjB,MAAQ/B,EAAEsI,SAAS,UAAA,EACnBlE,MAAQ,CAAC,WACTqhB,WAAa,SAAUxa,EAAMya,GAE3B,OAAgB,IADJtC,EAAGkE,WAAWzjB,GAAG9B,MAAMuU,MAAMxW,KAAMyB,SAAA,GAC1BokB,QAAQ,CAAA,EAAK,G,OAkB5CvC,EAAGsE,gBAAkB,WACnBtE,EAAGQ,YAAc,EACjByB,EAAajC,EAAGG,eAAe,CAACK,YAAcR,EAAGQ,YAAYH,aAAeL,EAAGK,YAAA,CAAA,C,EAGjFL,EAAGuE,eAAiB,WAClBvE,EAAGQ,YAAc,EACjByB,EAAajC,EAAGG,eAAe,CAAEK,YAAcR,EAAGQ,YAAa/f,GAAK,CAAE9B,MAAQ/B,EAAEsI,SAAS8a,EAAG8B,cAAA,CAAA,CAAA,CAAA,C,EAG9F9B,EAAGwE,oBAAsB,SAAS9a,GAChCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,EAAM,CAAA,CAAA,C,EAGlBgP,EAAGhP,OAAS,SAASyT,EAAaC,GAChC3b,EAAUa,IAAI,CAAClF,KAAO,6BAA6B/F,MAAQkL,mBAAmBjN,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,CAAA,EAEtG8O,GAAeC,EAOT,CAACD,GAAcC,EACvBhe,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,IAAKnI,UAAYwS,EAAG4B,kBAC/D/T,gBAAiBmS,EAAG0B,uBAAuB7T,gBAAiBC,cAAekS,EAAG0B,uBAAuB5T,cACrGC,mBAAoB,KAAMC,iBAAkB,KAAOZ,YAAaoU,GAAuBA,EAAoB7T,SAAA,EAC3GN,OAAQ2U,GAAkBA,EAAerU,SAAA,CAAA,C,EAI3CjH,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,IAAKnI,UAAY,KAAMK,gBAAiB,KAAMC,cAAe,KAAMC,mBAAoB,KAAMC,iBAAkB,KAAMZ,YAAa,KAAMC,OAAQ,IAAA,CAAA,EAd7L3G,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,IAAKnI,UAAYwS,EAAG4B,kBAC/D/T,gBAAiBmS,EAAG0B,uBAAuB7T,gBAAiBC,cAAekS,EAAG0B,uBAAuB5T,cACrGC,mBAAoBiS,EAAG2B,0BAA0B5T,mBACjDC,iBAAkBgS,EAAG2B,0BAA0B3T,iBAAkBZ,YAAaoU,GAAuBA,EAAoB7T,SAAA,EACzHN,OAAQ2U,GAAkBA,EAAerU,SAAA,CAAA,C,GAc/CqS,EAAG/M,cAAgB,SAASrO,GAC1B,OAAOuE,EAAgB,iBAAmBvE,CAAA,C,EAG5Cob,EAAG2E,qBAAuB,WACxB,IACIhY,EAAS,CACXiY,SAAY5E,EAAGrR,UAAUiW,SACzBlgB,KAAQsb,EAAGtW,cAAchF,KACzB8e,SAAYxD,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EAAwBrD,GAAuBA,EAAoB7T,SAAA,EAAa,GACjJN,OAAUmU,GAAuBA,EAAoBsD,kBAAA,EAAsB9C,GAAkBA,EAAe2B,iBAAmB,GAC/HnW,UAAawS,EAAG/M,cAAc+M,EAAG4B,iBAAA,C,EAEnC,OAAO9B,EAAO6E,qBARC,gBAQ8BhY,CAAA,C,EAG/CqT,EAAG+E,eAAiB,SAASnK,GAC3BgF,EAAoBmF,eAAenK,EAAMoF,EAAGtW,cAAciM,IAAKqK,EAAG4B,kBAC9D5B,EAAG0B,uBAAuB7T,gBAAiBmS,EAAG0B,uBAAuB5T,cACrEkS,EAAG2B,0BAA0B5T,mBAAoBiS,EAAG2B,0BAA0B3T,iBAC9EgU,GAAkBA,EAAerU,SAAA,EACjC6T,GAAuBA,EAAoB7T,SAAA,EAC3CqS,EAAG8B,eAAgB9B,EAAG+B,sBAAsB8C,oBAAA,EAC5CrD,GAAuBA,EAAoBsD,kBAAA,CAAA,C,EAgBjD9E,EAAGgF,uBAAyB,WAC1BhF,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmBqK,EAAG0B,uBAAuBT,OAAA,EACtFmC,EAASpD,EAAG0B,uBAAwB,CAAA,CAAA,GACrC1B,EAAGhP,OAAO,CAAA,EAAO,CAAA,CAAA,C,EAIrBgP,EAAGiF,0BAA4B,WAC7BjF,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,2BAA4BqK,EAAG2B,0BAA0BV,OAAA,EAClGmC,EAASpD,EAAG2B,0BAA2B,CAAA,CAAA,GACxC3B,EAAGhP,OAAO,CAAA,EAAO,CAAA,CAAA,C,gUAxQvBtF,QACKC,OAAO,oBAAA,EACPe,WAAW,oBAAqB+S,CAAA,EAChC7T,SAAS,mBAAoB,GAAA,C,ICNpC,WACE,aAOA,SAASgU,EAAoBlC,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,GAEtE,MAAO,CACLyH,eAwCF,SAAwBnK,EAAM7N,EAAkB6U,EAAmBwD,EAAyBC,EACpEC,EAA4BC,EAAyBlY,EAAOD,EAAYoY,EACxEC,EAAiBC,GACvC,OAAOhI,EAAGiI,KAnCZ,SAAiB/K,EAAM7N,EAAkB6U,EAAmBwD,EAAyBC,EACpEC,EAA4BC,EAAyBlY,EAAOD,EAAYoY,EACxEC,EAAiBC,GAChC,OAAOpI,EAAIlX,IARb,SAAqBwU,GAEnB,MAAOgL,0BAAiBhL,C,EAMGA,EAAO,QAAA,EAAW,CAC3C2C,MAAQ,CAAA,EAER5Q,OAAQ/P,EAAEipB,OAAO,CACf7Y,SAAUD,EACVS,UAAWoU,EACX/T,gBAAiBuX,EACjBtX,cAAeuX,EACftX,mBAAoBuX,EACpBtX,iBAAkBuX,EAClBlY,OAAQA,EACRD,YAAaA,EACboY,OAAOA,EACPM,qBAAsBL,EACtBM,gBAAiBL,C,EACjB9oB,EAAEopB,QAAA,EACJC,aAAe,cACfC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAE8b,KAAOwL,EAAY,eAAA,CAAA,C,MAQtCxL,EAAM7N,EAAkB6U,EAAmBwD,EAAyBC,EACvFC,EAA4BC,EAAyBlY,EAAOD,EAAYoY,EAAOC,EAAiBC,CAAA,CAAA,EAC/Ftb,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,uBAAA,C,uEAvDlErB,QACKC,OAAO,oBAAA,EACP6R,QAAQ,sBAAuBoC,CAAA,C,ICLtC,WACE,aAOA,SAASgH,EAAiBhhB,GACflJ,KACNkJ,gBAAkBA,C,+BAPvB8F,QACKC,OAAO,oBAAA,EACPe,WAAW,mBAAoBka,CAAA,C,ICLtC,WACE,aAOA,SAAS5d,EAAa0U,EAAImJ,EAAW9d,EAAWF,EAAQyU,EAAKxU,EAAMge,GAEjE,MAAO,CACL/Z,iBA2BF,SAA0BC,GAExB,IAAa+Z,EAA0BC,mBAAmBje,EAAU3C,IAAI,4BAAA,CAAA,EAYxE,OAXUsI,EAAA,EAAqBtE,KAAK,SAAUqE,GAC5C,IAAI/E,EAAgBsD,GAAY+Z,EAChC,GAAInqB,EAAEuW,QAAQ1E,CAAA,GAAWA,EAAOrQ,QAAW,CAACxB,EAAE0N,KAAKmE,EAAQ,CAAC,MAAO/E,EAAA,EACjEA,EAAgB9M,EAAEqqB,MAAMxY,EAAQ,MAAA,EAAQkH,IACxCkR,EAAUK,OAAO,WAAYxd,CAAA,OACxB,GAAG9M,EAAEuW,QAAQ1E,CAAA,GAA2B,IAAhBA,EAAOrQ,OACpC,OAAOsf,EAAGyB,OAAO,0BAAA,EAGnB,OADApW,EAAUa,IAAI,CAAClF,KAAO,6BAA6B/F,MAAQkL,mBAAmBjN,EAAE4W,SAAS9J,CAAA,CAAA,CAAA,CAAA,EAClFgU,EAAGiI,KAAKjc,CAAA,C,IAtCjBuG,eA2CF,WACE,OAAOqN,EAAIlX,IAAI,eAAgB,CAAEmX,MAAQ,CAAA,CAAA,CAAA,EACpCnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA5CrBwJ,mBAAqBA,EACrBR,qBAmDF,SAA8BlB,EAAUI,GACtC,OAAOkQ,EAAIlX,IAAI,2CAA4C,CACzDuG,OAAS,CAAEK,SAAWA,EAAUI,YAAaA,CAAA,C,GAC5ChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EArDnBoJ,wBAwDF,SAAiCtB,EAAUa,EAAiBC,EAAeV,GACzE,OAAOkQ,EAAIlX,IAAI,8CAA+C,CAC5DuG,OAAS,CAAEK,SAAWA,EAAUgF,WAAanE,EAAiBwD,SAAUvD,EAAeV,YAAaA,CAAA,C,GACnGhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA1DnB6M,2BA6DF,SAAoC/E,EAAUK,EAAQD,GACpD,OAAOkQ,EAAIlX,IAAI,wCAAyC,CACtDmX,MAAQ,CAAA,EACR5Q,OAAS,CAAEK,SAAWA,EAAUK,OAAQA,EAAQD,YAAaA,CAAA,C,GAC5DhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAhEnB0I,iBAuFF,SAA0BZ,EAAUQ,EAAWK,EAAiBC,EAAeC,EAAoBC,EAAkBX,EAAQD,EAAa+Z,GACxI,OAAO7J,EAAIlX,IAAI,+BAAgC,CAC7CuG,OAAS,CAAEK,SAAWA,EAAUQ,UAAYA,EAAWK,gBAAkBA,EAAiBC,cAAeA,EACrGC,mBAAqBA,EAAoBC,iBAAkBA,EAAkBX,OAAQA,EAAQD,YAAaA,EAAa+Z,MAAQA,CAAA,C,GAClI/c,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA1FnBsJ,kBA6FF,SAA2BxB,EAAUQ,EAAWK,EAAiBC,EAAeC,EAAoBC,EAAkBX,EAAQD,GAC5H,OAAOkQ,EAAIlX,IAAI,+BAAgC,CAC7CuG,OAAS,CAAEK,SAAWA,EAAUQ,UAAYA,EAAWK,gBAAkBA,EAAiBC,cAAeA,EACtGC,mBAAqBA,EAAoBC,iBAAkBA,EAAkBX,OAAQA,EAAQD,YAAaA,CAAA,C,GAC5GhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAhGnB0J,0BAmGF,SAAmC5B,EAAUQ,EAAWK,EAAiBC,EAAeC,EAAoBC,EAAkBX,EAAQD,GACpI,OAAOkQ,EAAIlX,IAAI,mCAAoC,CACjDuG,OAAS,CAAEK,SAAWA,EAAUQ,UAAYA,EAAWK,gBAAkBA,EAAiBC,cAAeA,EACvGC,mBAAqBA,EAAoBC,iBAAkBA,EAAkBX,OAAQA,EAAQD,YAAaA,CAAA,C,GAC3GhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAtGnBiN,2BAgEF,SAAoCnF,EAAUgF,EAAYX,EAAUhE,EAAQD,GAC1E,GAAG4E,GAAcX,EACf,OAAOiM,EAAIlX,IAAI,uCAAwC,CACrDmX,MAAQ,CAAA,EACR5Q,OAAS,CAAEK,SAAWA,EAAUgF,WAAaA,EAAYX,SAAUA,EAAUhE,OAAQA,EAAQD,YAAaA,CAAA,C,GACzGhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EApErB+R,6BAwGF,SAAsCjK,EAAUI,EAAaC,GAC3D,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,sCAAuC,CAC/FuQ,MAAQ,CAAA,EACR5Q,OAAQ,CAAES,YAAcA,EAAaC,OAASA,CAAA,C,GAC7CjD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA3GnBgS,sBA8GF,SAA+BlK,EAAUgF,EAAYX,EAAUjE,EAAaC,GAC1E,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,8BAA+B,CACvFuQ,MAAQ,CAAA,EACR5Q,OAAS,CAAEqF,WAAaA,EAAYX,SAAUA,EAAUjE,YAAcA,EAAaC,OAASA,CAAA,C,GAC3FjD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAjHnBkiB,iDAwHF,SAA0Dpa,EAAUgF,EAAYX,EAAUhE,EAAQD,GAChG,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,kDAAmD,CAC3GL,OAAS,CAAEqF,WAAaA,EAAYX,SAAUA,EAAUhE,OAAQA,EAAQD,YAAaA,CAAA,C,GACpFhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA1HnBmiB,0CAqEF,SAAmDra,EAAUgF,EAAYX,EAAUhE,EAAQD,GACzF,OAAOkQ,EAAIlX,IAAI,wDAAyD,CACtEmX,MAAQ,CAAA,EACR5Q,OAAS,CAAEK,SAAWA,EAAUgF,WAAaA,EAAYX,SAAUA,EAAUhE,OAAQA,EAAQD,YAAaA,CAAA,C,GACzGhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAxEnB6R,6BAkHF,SAAsC/J,GACpC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,sCAAuC,CAACuQ,MAAQ,CAAA,CAAA,CAAA,EAAOnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAlHjIoS,mCA2HF,SAA4CtK,EAAUgF,EAAYX,EAAUgG,EAAYD,GACtF,OAAOkG,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,4CAA6C,CACrGL,OAAS,CAAEqF,WAAaA,EAAYX,SAAUA,EAASgG,WAAYA,EAAWD,SAAUA,CAAA,C,GACvFhN,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA7HnBiS,uCAgIF,SAAgDnK,GAC9C,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,+CAAA,EAAiD5C,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAhI3HkJ,sBAmIF,SAA+BkZ,GAC7B,MAAmC,SAA5BA,EAAatV,YAAqD,UAA5BsV,EAAatV,YAAsD,SAA5BsV,EAAatV,YAAqD,eAA5BsV,EAAatV,YAA+BsV,EAAajW,Q,EAnInLlE,wBAsIF,SAAiCH,GAC/B,OAAOsQ,EAAIlX,IAAI,iCAAiC,CAAEuG,OAAQ,CAAEK,SAAWA,CAAA,CAAA,CAAA,EAAe5C,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAtItGqiB,mBAyIF,SAA4Bxa,EAAkBya,EAAaC,GACvD5e,EAAO4a,YAAY1W,EAAkBya,EAAaC,CAAA,C,EAzIpD7V,sBAqEF,SAA+B5E,GAC7B,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,8BAA+B,CAACuQ,MAAQ,CAAA,CAAA,CAAA,EAAOnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EArEzH4J,kCAiKF,SAA2C1H,GAEzC,OAAOsW,EAAGiI,KATZ,WACE,IAAI5b,EAAOjB,EAAKkB,QAAA,EAChB,GAAGD,GAAQnN,EAAE+M,SAASI,EAAK2d,WAAY,oBAAA,EACrC,OAAOpK,EAAIlX,IAAI,2BAA4B,CAACmX,MAAQ,CAAA,CAAA,CAAA,EAAOnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAM9D,CAAA,EAA4BkF,KAAK,SAAStL,GACvD,OAAOlC,EAAE0N,KAAKxL,EAAM,CAACsI,OAAQA,CAAA,CAAA,C,IAnK/BgJ,2BAuKF,SAAoCpD,GAClC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAW,4BAAA,EAA8B5C,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAvKvGoL,iCA0KF,SAA0CtD,GACxC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAW,2BAAA,EAA6B5C,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA1KtGsL,mCA6KF,SAA4CxD,GAC1C,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAW,6BAAA,EAA+B5C,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,GArJ1G,SAASwJ,IACP,OAAO4O,EAAIlX,IAAI,oBAAqB,CAAEmX,MAAQ,CAAA,CAAA,CAAA,EACzCnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,6EA3DzBwG,QACKC,OAAO,oBAAA,EACP6R,QAAQ,eAAgBxU,CAAA,C,ICL/B,WACE,aAOA,SAAS2e,EAAoBjhB,EAAQgJ,EAASL,EAAYM,EAAYC,EAAYI,EAAY4X,EACjE7e,EAAWkE,EAAShE,EAAcqG,EAAOzG,EAAQgG,EACjDgB,EAAYE,EAAcD,EAAgBgQ,GACrE,IAAIE,EAAKtjB,KAaT,SAASmrB,EAAezF,GACtB,IAAI0F,EAAa1F,EAAM5I,MAAM,GAAA,EACzBuO,EAA4B,EAApBD,EAAW1pB,OAAcxB,EAAEmrB,KAAKD,CAAA,EAAyB,gBAAV1F,EAA0B4F,OAAOC,kBAAmBC,WAAW9F,EAAM+F,UAAU,EAAG/F,EAAMM,QAAQ,GAAA,CAAA,CAAA,EACvJ0F,EAA4B,EAApBN,EAAW1pB,OAAcxB,EAAEyrB,UAAUzrB,EAAE0rB,KAAKR,CAAA,CAAA,EAAyB,gBAAV1F,EAA0B4F,OAAOC,kBAAoBC,WAAW9F,EAAM+F,UAAU,EAAG/F,EAAMM,QAAQ,GAAA,CAAA,CAAA,EACxK,MAAY,MAATqF,EAAqBK,EAAO,EACd,MAATL,EAAqBK,EAAO,EACxBA,C,CAjBdpI,EAAGvR,OAASuB,EACZgQ,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAKjP,EAAOiG,OAAOK,QAAA,CAAA,EACzDgT,EAAGuI,WAAa3rB,EAAE4f,OAAO9M,EAAQ8Y,IAAK,OAAA,EACtCxI,EAAGyI,cAAgBpZ,EACnB2Q,EAAG0I,cAAgB9rB,EAAE4f,OAAO7M,EAAWpR,OAAQ,SAASA,GAAQ,OAAOspB,EAAetpB,EAAOmB,KAAA,CAAA,CAAA,EAC7FsgB,EAAG2I,cAAgB/rB,EAAE4f,OAAO5M,EAAWgZ,OAAQ,SAASA,GAAQ,OAAOf,EAAee,EAAOlpB,KAAA,CAAA,CAAA,EAC7FsgB,EAAG6I,cAAgBjsB,EAAE4f,OAAO3M,EAAWiZ,OAAQ,SAASA,GAAQ,OAAOjB,EAAeiB,EAAOppB,KAAA,CAAA,CAAA,EAC7FsgB,EAAG+I,gBAAkBnsB,EAAE4f,OAAOzM,EAAaiZ,SAAU,SAASA,GAAU,OAAOnB,EAAemB,EAAStpB,KAAA,CAAA,CAAA,EACvGsgB,EAAGiJ,kBAAoBrsB,EAAE4f,OAAO1M,EAAeoZ,WAAY,SAASA,GAAY,OAAOrB,EAAeqB,EAAWxpB,KAAA,CAAA,CAAA,EACjHsgB,EAAGkB,mBAAqBrS,EAWxBmR,EAAGhf,MAAQ,UACXgf,EAAGmJ,WAAa,CAAC,KAAM,MACvBnJ,EAAGoJ,WAAa,CAAC,KAAM,MACvBpJ,EAAGqJ,mBAAqB3d,QAAQyN,KAAK6G,EAAGmJ,WAAW,EAAA,EACnDnJ,EAAGsJ,mBAAqB5d,QAAQyN,KAAK6G,EAAGoJ,WAAW,EAAA,EACnDpJ,EAAGuJ,mBAAqB7d,QAAQyN,KAAK6G,EAAGoJ,WAAW,EAAA,EACnDpJ,EAAGwJ,qBAAuB9d,QAAQyN,KAAK6G,EAAGoJ,WAAW,EAAA,EACrDpJ,EAAGyJ,uBAAyB/d,QAAQyN,KAAK6G,EAAGoJ,WAAW,EAAA,EAEvDpJ,EAAGxjB,QAAU,CACXkkB,WAAa,CAAA,EACbC,oBAAsB,GACtBC,kBAAoB,GACpBE,WAAa,GACb4I,YAAa,CAAA,EACbC,cAAgB,CAAA,EAChB9I,iBAAmB,CAAA,EACnB+I,gBAAkB,CAAA,C,EAGpB5J,EAAG6J,QAEH,WACE,IAAIC,EAAY,GACZ9J,EAAGyI,cAAchZ,YACnBqa,EAAUrlB,KAAK,CACbC,KAAM,OACN/F,MAAOqhB,EAAGyI,cAAchZ,WACxBwR,QAAS,UAAY8I,EAAe,eAAgB/J,EAAGyI,cAAchZ,UAAA,C,GAGrEuQ,EAAGyI,cAAcjZ,cACnBsa,EAAUrlB,KAAK,CACbC,KAAM,SACN/F,MAAOqhB,EAAGyI,cAAcjZ,aACxByR,QAAS,YAAc8I,EAAe,eAAgB/J,EAAGyI,cAAcjZ,YAAA,C,GAG3E,OAAOsa,C,EAlBI,EAqBb9J,EAAGgK,eAAiBptB,EAAE0N,KAAK0V,EAAG6J,QAAS,CAACnlB,KAAQuE,EAAakG,QAAU,QAAwB,CAAA,EAE/F6Q,EAAG+B,sBAAwB9U,EAE3B,IAAIuU,EAAsBxB,EAAG+B,uBAAyB/B,EAAG+B,sBAAsBtU,YAAA,EAC3EuU,EAAiBR,GAAuBA,EAAoB9T,kBAAA,EA+EhE,SAASqc,EAAe3H,EAAOzjB,GAC7B,OAAOA,EAAM4jB,QAAQ,CAAA,EAAK,QAAUH,C,CAatC,SAASrd,EAAQklB,EAAQC,EAASnK,GAChC,IAEIoK,EAASC,EAASC,EAFlBC,EAAY1tB,EAAEsI,SAAS,SAAA,EAIxB8a,EAAGgK,gBAAkBhK,EAAGgK,eAAetlB,OACxCylB,EAAUG,EACVF,EAAUpK,EAAGhf,MACbqpB,EAAcrK,EAAGgK,eAAetlB,MAGlCsb,EAAGiK,GAAUrtB,EAAEulB,aAAapC,EAAOC,EAAGiK,GAAS,CAC7C9F,SAAW,CAAA,EACX1jB,GAAK,CACH2hB,MAAQxlB,EAAEsI,SAAS,OAAA,EACnBqlB,WAAaF,C,IAKjBrK,EAAGiK,GAAQxpB,GAAG9B,MAAQwrB,EACtBnK,EAAGiK,GAAQxpB,GAAGO,MAAQopB,EACtBpK,EAAGiK,GAAQxpB,GAAG4hB,WAAa8H,EAC3BnK,EAAGiK,GAAQnrB,KAAOorB,EAClBlK,EAAGiK,GAAQpd,SAAWqd,EAAQ9rB,M,CAnHhC4hB,EAAGuD,wBAA0B,SAASC,GACpChC,EAAsBgC,EACtB3a,EAAO4a,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmB6N,EAASpB,KAAA,EACrEpC,EAAGhP,OAAO,CAAA,EAAO,CAAA,EAAM,CAAA,CAAA,C,EAGzBgP,EAAG0D,sBAAwB,SAAUrW,GACnC2U,EAAiB3U,EACjBxE,EAAO4a,YAAYzD,EAAGtW,cAAciM,IAAK,gBAAiBtI,EAAOsW,gBAAA,EACjE3D,EAAGhP,OAAO,CAAA,EAAO,CAAA,EAAO,CAAA,CAAA,C,EAG1BgP,EAAGwK,UAAY,WAIbzlB,EAAQ,aAHWnI,EAAE6E,OAAOue,EAAG0I,cAAe,SAAS/nB,GACrD,OAAOA,EAAE8pB,OAASzK,EAAGsJ,kB,EAED,C,EAGxBtJ,EAAG0K,UAAY,WAIb3lB,EAAQ,aAHWnI,EAAE6E,OAAOue,EAAG2I,cAAe,SAAShoB,GACrD,OAAOA,EAAE8pB,OAASzK,EAAGqJ,kB,EAED,C,EAGxBrJ,EAAG2K,UAAY,WAIb5lB,EAAQ,aAHWnI,EAAE6E,OAAOue,EAAG6I,cAAe,SAASloB,GACrD,OAAOA,EAAE8pB,OAASzK,EAAGuJ,kB,EAED,C,EAGxBvJ,EAAG4K,cAAgB,WAIjB7lB,EAAQ,iBAHWnI,EAAE6E,OAAOue,EAAGiJ,kBAAmB,SAAStoB,GACzD,OAAOA,EAAE8pB,OAASzK,EAAGyJ,sB,EAEG,C,EAG5BzJ,EAAG6K,YAAc,WAIf9lB,EAAQ,eAHWnI,EAAE6E,OAAOue,EAAG+I,gBAAiB,SAASpoB,GACvD,OAAOA,EAAE8pB,OAASzK,EAAGwJ,oB,EAEC,C,EAG1BxJ,EAAG8K,OAAS,WACV/lB,EAAQ,UAAWib,EAAGuI,UAAA,EACtBvI,EAAGwK,UAAA,EACHxK,EAAG0K,UAAA,EACH1K,EAAG6K,YAAA,EACH7K,EAAG4K,cAAA,EACH5K,EAAG2K,UAAA,C,EAGL3K,EAAGwE,oBAAsB,SAAS9a,GAChCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,EAAM,CAAA,EAAM,CAAA,CAAA,C,EAGxBgP,EAAGhP,OAAS,SAAS+Z,EAAeC,EAAaC,GAC/CliB,EAAUa,IAAI,CAAElF,KAAM,6BAA8B/F,MAAQ/B,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,EAExF,IAAIxG,EAAW8b,EAA4D,KAA7CjL,EAAGgK,gBAAkBhK,EAAGgK,eAAetlB,KAClEqmB,GAAiBC,GAAeC,EACjCvkB,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,GAAA,EAAO,CAACuV,QAAS,CAAA,CAAA,EAAQ,CAAEla,OAAS,iBAAA,CAAA,EAEjFtK,EAAOL,GAAG,IAAK,CACb2G,SAAWgT,EAAGtW,cAAciM,IAC5BxG,OAAQA,EACR/B,YAAaoU,GAAuBA,EAAoB7T,SAAA,EACxDN,OAAQ2U,GAAkBA,EAAerU,SAAA,C,EACxC,CAAEqD,OAAS,iCAAA,CAAA,C,EAQlBgP,EAAG+E,eAAiB,SAASnK,GAC3BgN,EAAsB7C,eAAenK,EAAMoF,EAAGtW,cAAciM,IAAKqK,EAAGgK,gBAAkBhK,EAAGgK,eAAetlB,KACpGsb,EAAGsJ,mBAAoBtJ,EAAGqJ,mBAAoBrJ,EAAGuJ,mBAAoBvJ,EAAGyJ,uBACxEzJ,EAAGwJ,qBAAsBxJ,EAAG+B,sBAAsBtU,YAAA,GAClDuU,GAAkBA,EAAerU,SAAA,EACjC6T,GAAuBA,EAAoB7T,SAAA,EAC3CqS,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EACrDrD,GAAuBA,EAAoBsD,kBAAA,CAAA,C,EA8BjD9E,EAAG8K,OAAA,EAEH9K,EAAG2E,qBAAuB,WACxB,IACIhY,EAAS,CACXwC,OAAU6Q,EAAGgK,gBAAkBhK,EAAGgK,eAAetlB,KACjDA,KAAQsb,EAAGtW,cAAchF,KACzB8e,SAAYxD,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EAAwBrD,GAAuBA,EAAoB7T,SAAA,EAAa,GACjJN,OAAUmU,GAAuBA,EAAoBsD,kBAAA,EAAsB9C,GAAkBA,EAAe2B,iBAAmB,E,EAEjI,OAAO7D,EAAO6E,qBAPC,WAO8BhY,CAAA,C,iPA9MjDjB,QACKC,OAAO,uBAAA,EACPe,WAAW,sBAAuBib,CAAA,C,ICLzC,WACE,aAOA,SAASC,EAAsBlK,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,GAExE,MAAO,CACLyH,eA+CF,SAAwBnK,EAAM7N,EAAkBid,EAAgBV,EAAoBD,EAAoBE,EAAoBE,EAAwBD,EAAsBnc,EAAQD,EAAaqY,EAAiBC,GAC9M,OA7CF,SAAwB9K,EAAM7N,EAAkBid,EAAgBV,EAAoBD,EAAoBE,EAAoBE,EAAwBD,EAAsBnc,EAAQD,EAAaqY,EAAiBC,GAC9M,OAAOhI,EAAGiI,KAUZ,SAAiB/K,EAAM7N,EAAkBid,EAAgBV,EAAoBD,EAAoBE,EAAoBE,EAAwBD,EAAsBnc,EAAQD,EAAaqY,EAAiBC,GAIvM,OAAOpI,EAAIlX,IAPJ,aAOoBwU,EAAO,SAAW,CAC3C2C,MAAQ,CAAA,EACR5Q,OAAQ,CACNK,SAAUD,EACVoC,OAAQ6a,EACRmB,QAPe,QAQfhC,WAAYE,EACZ+B,WAAY9B,EACZ+B,WAAY9B,EACZ+B,eAAgB7B,EAChB8B,aAAc/B,EACdnc,OAAQA,EACRD,YAAaA,EACbqY,gBAAiBA,EACjBC,cAAeA,C,EAEjBO,aAAe,cACfC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC3D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAE8b,KAAOwL,EAAY,eAAA,CAAA,C,MAtCxCxL,EAAM7N,EAAkBid,EAAgBV,EAAoBD,EAAoBE,EAAoBE,EAAwBD,EAAsBnc,EAAQD,EAAaqY,EAAiBC,CAAA,CAAA,EAC9Mtb,KAAK,SAAUsc,GACd,OAAOA,C,IA0Ca9L,EAAM7N,EAAkBid,EAAgBV,EAAoBD,EAAoBE,EAAoBE,EAAwBD,EAAsBnc,EAAQD,EAAaqY,EAAiBC,CAAA,EAC7Mtb,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,iCAAA,C,uEA3D9DrB,QACKC,OAAO,uBAAA,EACP6R,QAAQ,wBAAyBoK,CAAA,C,ICLxC,WACE,aAOA,SAAS4D,EAAoB3lB,GAClBnJ,KACNmJ,mBAAqBA,C,kCAP1B6F,QACKC,OAAO,uBAAA,EACPe,WAAW,sBAAuB8e,CAAA,C,ICLzC,WACE,aAOA,SAASvc,EAAgBqO,EAAKwJ,GAC5B,IAAIlB,EAAW,YAEf,MAAO,CACL6F,mBAAqBC,EAAkB,MAAA,EACvCnc,sBAkBF,SAA+BvC,EAAUK,EAAQD,GAC/C,OAAOkQ,EAAIlX,IAAIwf,EAAW,UAAW,CAAEjZ,OAAQ,CAAEK,SAAUA,EAAUK,OAAQA,EACzED,YAAaA,CAAA,CAAA,CAAA,EAAgBhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAnBjDymB,sBAAwBD,EAAkB,SAAA,EAC1CE,sBAAwBF,EAAkB,SAAA,EAC1CG,sBAAwBH,EAAkB,SAAA,EAC1CI,0BAA4BJ,EAAkB,aAAA,EAC9CK,wBAA0BL,EAAkB,WAAA,EAC5Ctc,0BAiBF,SAAmCpC,GACjC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,2BAA2B,CAAEuQ,MAAO,CAAA,CAAA,CAAA,EAASnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAjBvH+K,eAoBF,WACE,OAAOqN,EAAIlX,IAAIwf,EAAW,UAAW,CAAErI,MAAQ,CAAA,CAAA,CAAA,EAC1CnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,GAnBvB,SAASwmB,EAAkBlf,GACzB,OAAO,SAAUQ,EAAUmC,EAAQ9B,EAAQD,GACzC,OAAOkQ,EAAIlX,IAAIwf,EAAWpZ,EAAM,CAC9BG,OAAQ,CAACK,SAAUA,EAAUmC,OAAQA,EAAQ9B,OAAQA,EAAQD,YAAaA,CAAA,C,GACzEhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,iCAxBzBwG,QACKC,OAAO,uBAAA,EACP6R,QAAQ,kBAAmBvO,CAAA,C,ICLlC,WACE,aAoBA,SAAS+c,EAAqBC,EAAcC,GAC1C,IAwBgCC,EAAW3vB,EAxBvCwjB,EAAKtjB,KAELF,EAAU,CACZkkB,WAAa,CAAA,EACbiJ,cAAgB,CAAA,EAChB9I,iBAAmB,CAAA,EACnBuL,wBAAyB,CAAA,EACzBpL,UAAW,GACXqL,oBAAqB,CAAA,C,EAGvB,SAASC,EAAuBxtB,GAC9B,IAAIytB,EAAgB,GASpB,OARGztB,EAAKV,SACNmuB,EAAgBN,EAAaO,qBAAqB5vB,EAAE4f,OAAO1d,EAAM,OAAA,CAAA,EAC7DkhB,EAAGzP,kBAAqByP,EAAGzP,iBAAiBkc,mBAC9CF,EAAcztB,KAAOlC,EAAE8vB,UAAUH,EAAcztB,IAAA,EAC/CytB,EAAcztB,KAAK,GAAGsjB,MAAQxlB,EAAEmrB,KAAKwE,EAAcztB,IAAA,EAAMsjB,MAAM5I,MAAM0S,EAAWzb,KAAA,EAAO,GACvF8b,EAAcztB,KAAKytB,EAAcztB,KAAKV,OAAO,GAAGgkB,MAAQxlB,EAAE0rB,KAAKiE,EAAcztB,IAAA,EAAMsjB,MAAM5I,MAAM0S,EAAWzb,KAAA,EAAO,KAG9G8b,C,CAWTvM,EAAGzP,kBAR6B4b,EAQanM,EAAG2M,oBARLnwB,EAQ0BA,EAP5D,CACL+vB,cAAeD,EAAuBH,EAAUS,eAAA,EAChDH,iBAAkB,CAAA,EAClBjwB,QAASI,EAAEiwB,UAAUrwB,CAAA,C,GAMzBwjB,EAAG8M,uBAAyB,WAC1B9M,EAAGzP,iBAAiBkc,iBAAmB,CAACzM,EAAGzP,iBAAiBkc,iBAC5DzM,EAAGzP,iBAAiBgc,cAAgBD,EAAuBtM,EAAG2M,oBAAoBC,eAAA,EAClF5M,EAAGzP,iBAAiB/T,QAAUI,EAAEmwB,OAAOvwB,EAAS,CAACkkB,WAAYV,EAAGzP,iBAAiBkc,iBAC/EJ,oBAAqB,CAACrM,EAAGzP,iBAAiBkc,gBAAA,CAAA,C,0CAzDhD/gB,QACKC,OAAO,+BAAA,EACPqN,UAAU,mBAGf,WACE,MAAO,CACLiD,SAAU,IACVxP,YAAc,2CACdyP,MAAO,CACLyQ,oBAAqB,G,EAEvBjgB,WAAa,6BACbsgB,iBAAmB,CAAA,C,EAXY,EAC9BtgB,WAAW,uBAAuBsf,CAAA,C,ICNzC,WACE,aAaA,SAASiB,EAAqBvmB,EAAQqC,EAAWgE,EAAkBiD,EAAYE,EACjDG,EAAgBE,EAAkB2c,EAAwBre,GACtF,IAAImR,EAAKtjB,KAETsjB,EAAGvR,OAAS7R,EAAEuW,QAAQnD,CAAA,EAAcA,EAAa,GACjDgQ,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK5I,CAAA,CAAA,EAC3CiT,EAAGkB,mBAAqBrS,EACxBmR,EAAG9P,gBAAkBA,EACrB8P,EAAGmN,oBAAsB5c,EACzByP,EAAG3P,eAAiBA,EAEpB2P,EAAGrS,SAAY,SAAShP,GACtB,OAAO/B,EAAEwwB,SAASzuB,CAAA,GAAkB,IAARA,GAAa4jB,QAAQ,CAAA,EAAK,E,EAGxDvC,EAAGqN,qBAAuB,SAAUC,GAClC,OAAGA,EAASC,cACH,0BAEHD,EAASC,eAAkBD,EAASE,gCAE1B,GADN,0B,EAKZxN,EAAGwE,oBAAuB,SAAS9a,GACjCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAGhP,OAAS,SAASyT,GACnB1b,EAAUa,IAAI,CAAElF,KAAM,6BAA8B/F,MAAQ/B,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,EACrF8O,GACD/d,EAAOL,GAAG,IAAI,CAAE2G,SAAWgT,EAAGtW,cAAciM,GAAA,CAAA,C,EAIhDqK,EAAG+E,eAAiB,WAClBmI,EAAuBnI,eAAe/E,EAAGtW,cAAciM,GAAA,C,EAGzDqK,EAAGyN,gBAAkB,WACnB,OAAOzN,EAAG9P,gBAAgB9R,QAAUxB,EAAEsV,KAAKhC,EAAgB,iCAAA,C,EAG7D8P,EAAG0N,0BAA4B,SAAUC,EAAcC,GACrD,OAAOhxB,EAAE0N,KAAKqjB,EAAc,SAAU7uB,GAAO,OAAOA,EAAK+uB,kBAAoBD,CAAA,CAAA,C,0KAzDjFliB,QACKC,OAAO,+BAAA,EACPe,WAAW,uBAAwBugB,CAAA,EACnCrhB,SAAS,qBAAsB,CAC9BkiB,eAAgB,CAACvhB,MAAO,eAAgBwhB,OAAQ,yCAAA,EAChDC,iBAAkB,CAACzhB,MAAO,sBAAuBwhB,OAAQ,2CAAA,EACzDE,gBAAiB,CAAC1hB,MAAO,wBAAyBwhB,OAAQ,gDAAA,EAC1DG,gBAAiB,CAAC3hB,MAAO,qBAAsBwhB,OAAQ,0CAAA,C,MCV/D,WACE,aAOA,SAASb,EAAuBxP,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,EAAKwJ,GAE9E,MAAO,CACL/B,eAwBF,SAAwBhY,GACtB,OAAO2Q,EAAGiI,KAjBZ,SAAiB5Y,GACf,OAAOuQ,EAAIlX,IANb,SAAqB4G,GAEnB,OADe8Z,EAAYjd,mBAAmBmD,CAAA,EAAY,2B,EAK/BD,CAAA,EAAmB,CAC5CwQ,MAAQ,CAAA,EACR0I,aAAe,cACfC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAE8b,KAAOwL,EAAY,eAAA,CAAA,C,MAMtCrZ,CAAA,CAAA,EAAmB3C,KAAK,SAAUsc,GACvDC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,0BAAA,C,mFAnC9DrB,QACKC,OAAO,+BAAA,EACP6R,QAAQ,yBAA0B0P,CAAA,C,ICLzC,WACE,aAOA,SAAS/c,EAAiB8b,EAAckC,GAEtC,OAqBA,SAA0BC,GACxB,OAAOA,EAAA,EAAWhkB,KAAK,SAASikB,GACvBC,IAnBHb,EADN,GAAG7wB,EAAEuW,QAAQkb,CAAA,EAGX,OAFIZ,EAAkB7wB,EAAEsV,KAAKmc,EACzB,SAASzqB,GAAK,OAAOA,EAAE2qB,6BAA+B3qB,EAAE2qB,4BAA4BvhB,QAAA,CAAA,EACjFpQ,EAAEyxB,CAAA,EAAgB/qB,IAAI,SAASkrB,GACpC,IAAIX,EAAmBW,EAAY,4BAA+BL,EAAmBK,EAAYD,4BAA4BV,iBAAmBM,EAAmBK,EAAYC,gCAAgCZ,iBAC/M,OAAOjxB,EAAEmwB,OAAOyB,EAAa,CAC3BX,gBAAmBA,EAAgBthB,MACnCwhB,OAAUF,EAAgBE,OAC1BR,cAAiB,CAAA,EACjBC,gCAAmCC,EACnCiB,mBAAuBF,EAAYG,eAAe,iCAAA,C,KAEnDnS,OAAO,SAAUrO,GAClB,OAAOA,EAAE0f,gBAAgBzvB,M,GACxBO,MAAA,C,oDAxBT+M,QACKC,OAAO,+BAAA,EACP6R,QAAQ,mBAAoBrN,CAAA,C,ICLnC,WACE,aAOA,SAASye,EAAajmB,EAAYkmB,EAAcnoB,EAAQoK,EAAQJ,EAAWQ,EAASO,GAClF,IAAIuO,EAAKtjB,KACTsjB,EAAGtP,UAAY9T,EAAEkyB,MAAMpe,EAAW,KAAA,EAClCsP,EAAGrT,OAAS/P,EAAEiwB,UAAUnmB,EAAOiG,MAAA,EAyB/BqT,EAAG+O,WAAa,SAAUC,GACxBA,EAAMC,WAAa,CAACD,EAAMC,WACvBD,EAAME,OAA+B,GAAtBF,EAAME,MAAM9wB,QAC5B4hB,EAAG+O,WAAWC,EAAME,MAAM,EAAA,C,EAI9BlP,EAAGmP,KAAO,SAAU/d,EAAKE,EAAMD,GAC7B3K,EAAOL,GAAG,QAAS,CAAC+K,IAAKA,EAAKE,KAAMA,EAAMD,SAAUA,CAAA,CAAA,C,EAGtD2O,EAAGoP,WAAa,SAAUC,EAAMje,EAAKE,EAAMD,GACzC3K,EAAOL,GAAG,SAAU,CAAC+K,IAAKA,EAAKE,KAAMA,EAAMD,SAAUA,CAAA,CAAA,EAAWjH,KAAK,WACnE,IAAIklB,EAAOxe,EAAOhH,IAAI,mBAAoB,WACxCwlB,EAAA,EACA3mB,EAAW4mB,WAAW,gBAAiBF,CAAA,C,MAK7CrP,EAAGwP,KAAO,SAAUC,EAAYT,GAC9BA,EAAMC,WAAa,CAAA,C,EAGrBjP,EAAG0P,mBAAqB,WACtB/mB,EAAWgnB,cAAgBjf,EAAUjP,OAAO,SAASmuB,GACnD,MAAwB,MAAjBA,EAAM3Q,M,IAIjBe,EAAG6P,sBAAwB,WArD3B,IAA0B3N,EACpB4N,EAqDDre,EACD9I,EAAWgnB,eAtDTG,EAAO,IADa5N,EAuDsBzQ,GArDnC/M,KAAOsb,EAAGtP,UAAUwR,EAAW9Q,KAAK1M,KAC/CorB,EAAKrrB,KAAKyd,CAAA,EACV4N,EAAOlzB,EAAEmzB,QACPnzB,EAAEozB,UAAUF,EAAM,SAASG,GAYzB,OAXGA,EAAc7e,KAAO4O,EAAGrT,OAAOyE,MAChC4O,EAAG+O,WAAWkB,CAAA,EACXjQ,EAAGrT,OAAO2E,QACX2e,EAAcf,MAAQtyB,EAAE0G,IAAI2sB,EAAcf,MAAO,SAAUgB,GAIzD,OAHGA,EAAU5e,MAAQ0O,EAAGrT,OAAO2E,OAC7B4e,EAAUjB,WAAa,CAAA,GAElBiB,C,IAIND,C,KAwCTjQ,EAAG0P,mBAAA,C,EAIP1P,EAAG6P,sBAAA,C,2FAvELnkB,QACKC,OAAO,WAAA,EACPe,WAAW,eAAgBkiB,CAAA,C,ICLlC,WACE,aAOA,SAASuB,EAAU5V,EACA/I,EACAP,EACAP,EACA0f,EACAC,EACAnf,EACAhI,EACAJ,EACA4W,EACAmP,EACA5lB,EACAqnB,GACjB,IAAItQ,EAAKtjB,KACL6zB,EAAgB,KAChBC,EAAoBjW,EAAQ,aAAA,EAC5BpR,EAAkBoR,EAAQ,WAAA,EA8F9B,SAASkW,EAAgBjf,GACvB5U,EAAEqI,KAAKuM,EAAS,SAAUpK,GAExBA,EAAOspB,aAAehgB,EAAUtJ,EAAOgK,MAAQV,EAAUtJ,EAAOgK,KAAK1M,KACrE0C,EAAOmF,MAAQikB,EAAkBppB,CAAA,EACjCA,EAAOupB,SAAWxnB,EAAgB,mBAAqBinB,EAAWO,SAASvpB,CAAA,CAAA,C,GAqB/E,SAASwpB,EAAiBpf,GACxB,OAAO4e,EAAW5a,KAAKhE,EAAQ,cAAe,MAAA,C,CAxHhDd,EAAY9T,EAAEkyB,MAAMpe,EAAW,KAAA,EAC/BsP,EAAG2Q,SAAWP,EAAWO,SACzB3Q,EAAG6Q,WAAaT,EAAWS,WAC3B7Q,EAAGxO,QAAUof,EAAiBpf,CAAA,EAC9BwO,EAAGrT,OAAS/P,EAAEiwB,UAAU5jB,CAAA,EACxB+W,EAAG7O,YAAcF,EAAa6f,MAC9B9Q,EAAGQ,YAAc,EACjBR,EAAGnT,SAAW6S,EACdM,EAAGS,QAAU,EAEbT,EAAG+Q,eA8FGC,EAAiBp0B,EAAEq0B,QAAQjR,EAAGxO,QAAS,KAAA,EAEpC5U,EAAEozB,UAAUgB,EAAgB,SAAUf,GAEvCiB,EAAsBt0B,EAAEq0B,QAAQhB,EAAe,SAAU7oB,GAE3D,OADcynB,EAAa,8BAAA,EACZznB,CAAA,C,GAGjB,OAAOxK,EAAEozB,UAAUkB,EAAoB,SAAUhB,GAC/C,OAAOtzB,EAAEq0B,QAAQf,EAAW,cAAA,C,MAtG9BlQ,EAAGrT,OAAOyE,MACZ4O,EAAGmR,eAAkBzgB,EAAUsP,EAAGrT,OAAOyE,MAAQV,EAAUsP,EAAGrT,OAAOyE,KAAK1M,MAAS,GACnFsb,EAAGxO,QAAUwO,EAAG+Q,cAAc/Q,EAAGrT,OAAOyE,MAAQ,GAC5C4O,EAAGrT,OAAO2E,MACZ0O,EAAGoR,WAAapR,EAAGrT,OAAO2E,KAC1B0O,EAAGxO,QAAUwO,EAAGxO,QAAQwO,EAAGrT,OAAO2E,MAC9B0O,EAAGrT,OAAO0E,UACZ2O,EAAGqR,eAAiBf,EAAWgB,QAAQ,mBAAqBtR,EAAGrT,OAAO0E,QAAA,EACtE2O,EAAGxO,QAAUwO,EAAGxO,QAAQwO,EAAGrT,OAAO0E,WAElC2O,EAAGxO,QAAU5U,EAAE20B,QAAQ30B,EAAE40B,OAAOxR,EAAGxO,OAAA,CAAA,IAGrCwO,EAAGxO,QAAU5U,EAAEozB,UAAUhQ,EAAGxO,QAAS,SAAU0e,GACzCuB,EAAkB70B,EAAE40B,OAAOtB,CAAA,EAC/B,OAAOtzB,EAAE20B,QAAQE,CAAA,C,GAEnBzR,EAAGxO,QAAU5U,EAAE20B,QAAQ30B,EAAE40B,OAAOxR,EAAGxO,OAAA,CAAA,IAIvCwO,EAAG0R,SAAW,WACZ,OAAO5oB,EAAKlC,IAAI,iBAAA,C,EAGlBoZ,EAAG2R,WAAa,SAAUvqB,GAEtBmpB,EADEvQ,EAAG4R,UAAUxqB,CAAA,EACC,KAEAA,EAEd4Y,EAAG0R,SAAA,GAAc,CAACtqB,EAAOyqB,OAC3B3gB,EAAQ2gB,MAAMzqB,EAAO0qB,OAAA,EAAS1nB,KAAK,SAAUynB,GAC3CzqB,EAAOyqB,MAAQA,C,IAKrB7R,EAAG4R,UAAY,SAAUxqB,GACvB,OAAOA,IAAWmpB,C,EAGpBvQ,EAAG+R,aAAe,SAAU3qB,GAC1B8J,EAAQ8gB,OAAO,CAAEF,QAAU1qB,EAAO0qB,QAASjc,SAAW,CAACzO,EAAOyO,SAAUoc,UAAW7qB,EAAO6qB,SAAA,CAAA,EAAa7nB,KAAK,SAAU8nB,GACpH9qB,EAAO6qB,UAAY,CAAA,EACnBr1B,EAAEC,OAAOuK,EAAQ8qB,CAAA,EACjBhpB,EAAMipB,QACF/qB,EAAOyO,SAAW,uBAAyB,yBAC3C,CAAE/W,KAAO,CAAEsI,OAASA,CAAA,CAAA,C,KAK5B4Y,EAAGoS,aAAe,SAAUhrB,GACdipB,EAAUb,KAAK,CACzB/iB,YAAc,gCACdC,WAAA,CAAA,SAAa,SAAUoE,GACrBA,EAAO1J,OAASA,C,KAIdirB,OAAOjoB,KAAK,WAChB8G,EAAQohB,OAAOlrB,EAAO0qB,OAAA,EAAS1nB,KAAK,WAClC,IAAIkY,EAAQtC,EAAGxO,QAAQkR,QAAQtb,CAAA,EAC3B,CAACkb,GACHtC,EAAGxO,QAAQ+gB,OAAOjQ,EAAO,CAAA,EAE3BpZ,EAAMipB,QAAQ,qBAAsB,CAAErzB,KAAO,CAAEsI,OAASA,CAAA,CAAA,CAAA,C,MAK9D4Y,EAAGwS,WAAa,SAAShS,GACvBR,EAAGQ,YAAcA,EACjBtP,EAAQ5G,KAAKrB,EAAamI,IAAKnI,EAAaoI,SAAUpI,EAAaqI,KAAM0O,EAAGnT,SAAUmT,EAAGQ,YAAaR,EAAGkH,MAAA,EAAQ9c,KAAK,SAAUwU,GAC9HoB,EAAGxO,QAAU,GACbwO,EAAGxO,QAAUof,EAAiBhS,CAAA,EAC9B6R,EAAgB7R,CAAA,C,IAkCpBoB,EAAGyS,iBAAmB,WACpBvhB,EAAQC,YAAYlI,EAAamI,IAAKnI,EAAaoI,SAAUpI,EAAaqI,KAAM0O,EAAGnT,SAAUmT,EAAGQ,YAAYR,EAAGkH,MAAA,EAAQ9c,KAAK,SAAUwU,GAChH,EAAhBA,EAASkS,MACX9Q,EAAGwS,WAAW,CAAA,EAEdxS,EAAGxO,QAAU,GAEfwO,EAAG7O,YAAcyN,EAASkS,K,IAI9BL,EAAgBjf,CAAA,C,oKA5JlB9F,QACKC,OAAO,WAAA,EACPe,WAAW,YAAayjB,CAAA,C,ICL/B,WACE,aAEAzkB,QACKC,OAAO,WAAA,EACP6R,QAAQ,QAGb,WAEE,IAAIkV,EAAS,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGF,MAAO,CACLC,SAIF,SAASA,EAASC,GAChB,OAAIA,aAAgBzwB,KACXwwB,EAASC,EAAKD,SAAA,EAAa,CAAA,EAE3BD,EAAOE,EAAO,E,EAPvBC,MAWF,SAAeC,GACTxQ,EAAQoQ,EAAOhQ,QAAQoQ,CAAA,EAC3B,GAAI,CAACxQ,EACH,OAAOA,EAAQ,C,GApCC,C,ICLxB,WACE,aAQA,SAASyQ,EAAepqB,EACAmI,EACAH,EACAzH,EACAxD,EACAstB,EACA9hB,EACAkf,EACAlL,EACAjc,EACAvC,EACA2C,GACtB,IAAI2W,EAAKtjB,KAGTsjB,EAAG5Y,OAAS,CAAEyO,SAAW,CAAA,EAAMoc,UAAY,CAAA,CAAA,EAC3CjS,EAAGiT,WAAa,KAChBjT,EAAGkT,WAAaxtB,EAChBsa,EAAGmT,cAAgB/C,EAAW+C,cAC9BnT,EAAGoT,kBAAoB,WACrB,OAAOhD,EAAWgD,kBAAA,EAAoBjQ,KAAK,GAAA,C,EAE7CnD,EAAGrT,OAAS/P,EAAEiwB,UAAU5jB,CAAA,EAEpB+W,EAAGrT,OAAOyE,MACZ4O,EAAG5Y,OAAOgK,IAAM4O,EAAGrT,OAAOyE,IACtB4O,EAAGrT,OAAO0E,YACZ2O,EAAG5Y,OAAOiK,SAAW2O,EAAGrT,OAAO0E,UAInC2O,EAAGqT,SAAW,SAAUC,GAClBA,EAAal1B,QACf8K,EAAMqqB,KAAK,uBAAA,EAETlE,EAAOrP,EAAG5Y,OAAOioB,KAErBrP,EAAG5Y,OAAOosB,YAAcnE,GAAQA,EAAKzU,KACjCyU,EAIFnK,EAAOuO,QAAQpE,CAAA,EAAMjlB,KAAK,SAAU+B,GAClC6T,EAAGiT,WAAa9mB,C,GAGlB6T,EAAGiT,WAAa,I,EAIpBniB,EAAOhH,IAAI,gBAAiB,SAAUc,EAAOykB,GACtCzyB,EAAE+M,SAASqW,EAAGoT,kBAAA,EAAqB/D,EAAKzU,IAAA,GAI3CoF,EAAG5Y,OAAOioB,KAAOA,EACjBqE,QAAQC,IAAItE,CAAA,EACZrP,EAAG5Y,OAAO1C,KAAO2qB,EAAK3qB,KACtBsb,EAAGqT,SAAS,EAAA,IANZ3sB,EAAOL,GAAG,QAAS2Z,EAAGrT,MAAA,EACtBzD,EAAMqqB,KAAK,uBAAA,E,GAQf5qB,EAAW4mB,WAAW,kBAAA,EAEtB5e,EAASrG,KAAA,EAAOF,KAAK,SAAUkI,GAE7B0N,EAAG1N,OAASA,EAAO7Q,OAAO,SAASmuB,GACjC,MAAO,CAAC,IAAI,KAAK,IAAI,KAAKjmB,SAASimB,EAAM3Q,MAAA,C,KAI7Ce,EAAG4T,iBAAmB,WAYpB5T,EAAG6T,kBAAoB,CACrBC,KAAO,CACL1R,MAAQ,qBACRlK,OAAS,aACT6b,QAAU,K,EAEZjB,MAAQ,CACN1Q,MAAQ,sBACRlK,OAAS,UACT6b,QAAU,O,EAEZC,QAAU,CACR5R,MAAQ,qBACRlK,OAAS,OACT6b,QAAU,M,GAEZ/T,EAAG5Y,OAAOiK,UA1BZ2O,EAAG5Y,OAASxK,EAAEq3B,KAAKjU,EAAG5Y,OAAQ,CAC5B,UACA,MACA,WACA,OACA,W,GAwBJ4Y,EAAGkU,eAAiB,SAAU7iB,GAC5B,OAAOA,GAA0B,UAAbA,C,EAGtB2O,EAAGmU,gBAAkB,WACnBnU,EAAG5Y,OAAO6qB,UAAYjS,EAAG5Y,OAAOyO,Q,EAGlCmK,EAAGoU,OAAS,WACV,IAAI5V,EAAUtN,EAAQmjB,OAAOrU,EAAG5Y,MAAA,EAChC4rB,EAAcsB,UAAU9V,EAAS,CAC/B+V,eAAiB,yB,GAChBnqB,KAAK,WACNlB,EAAMipB,QAAQ,uBAAA,EACdnS,EAAGjP,SAAA,C,EACF,SAAU6N,GACa,MAApBA,EAASK,OACX/V,EAAMsC,MAAM,0BAA2B,CAAEzE,MAAQ,CAAA,CAAA,CAAA,EAEjDsC,EAAgBoC,WAAWmT,CAAA,C,IAKjCoB,EAAGwU,aAAe,SAAUpjB,GAC1B,OAAOxU,EAAEwJ,IAAIxJ,EAAE0N,KAAK0V,EAAG1N,OAAQ,CAAElB,IAAMA,CAAA,CAAA,EAAQ,MAAA,C,oKApInD1F,QACKC,OAAO,WAAA,EACPe,WAAW,iBAAkBqmB,CAAA,EAC7B/Z,UAAU,gBAsIf,WACE,MAAO,CACLgU,iBAAmB,CAAA,EACnBtgB,WAAa,uBACbD,YAAc,6BACdyP,MAAQ,CACNnL,SAAW,G,GA5Ie,C,ICNlC,WACE,aAOA,SAAS0jB,EAAmB/tB,EAAQuC,EAAcyW,EAAU7N,EAAapD,EAAQtF,EAAiBJ,EACtEkJ,EAAWnB,EAAQ4jB,EAAsB7rB,EAAQojB,EACjDhf,EAAS4B,GACnC,IAAImR,EAAKtjB,KACTsjB,EAAGvR,OAASA,EACZuR,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EACxDgT,EAAGnT,SAAW6S,EACdM,EAAGM,WAAarO,EAAYA,EAAUqO,WAAa,EACnDN,EAAGO,cAAgBP,EAAGM,WACtBN,EAAGS,QAAU,EACbT,EAAG2U,QAAU,GAEb3U,EAAGmB,OAAStY,EACZmX,EAAGK,aAAe,GAClBL,EAAG4U,kBAAoB,CAAA,EACvB5U,EAAG6U,0BAA4BnuB,EAAOE,IAAI,eAAA,EAC1CoZ,EAAGkB,mBAAqBrS,EAsBxBmR,EAAGnO,YAAajV,EAAEiV,CAAA,EAAavO,IAAI,SAAS6K,GAC1C,MAAO,CACL6D,WAAY7D,EAAE6D,WACdX,SAAUlD,EAAEkD,SACZ4P,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE3DrT,MAAA,EAEHqhB,EAAG/M,cAAgB,SAAUrO,GAC3B,OAAOuE,EAAgB,mBAAqBvE,CAAA,C,EAG9C,IAAIkwB,EAAiB9U,EAAG/M,cAAc,eAAA,EAgClCuO,GA9BJxB,EAAGnO,YAAY+D,QAAQ,CAAEqL,QAAU6T,CAAA,CAAA,EAE/B7rB,EAAa6I,WAAa7I,EAAa6I,YAAcgjB,GAIvD9U,EAAG1K,kBAAoB1Y,EAAE0N,KAAK0V,EAAGnO,YAAa,CAACG,WAAY/I,EAAa+I,WAAYX,SAAUpI,EAAaoI,QAAA,CAAA,EAC3G2O,EAAGQ,YAAc,EACbR,EAAG1K,oBACL0K,EAAG1K,kBAAoB0K,EAAGnO,YAAY,MANxCmO,EAAG1K,kBAAoB0K,EAAGnO,YAAY,GACtCmO,EAAGQ,YAAc,GASnBR,EAAGG,eAAiBvjB,EAAEqV,GAAaA,EAAUzK,KAAA,EAAOlE,IAAI,SAASxE,GAC/D,MAAO,CACLi2B,cAAgBj2B,EAAKi2B,cACrBC,WAAal2B,EAAKk2B,WAClBvgB,WAAY3V,EAAK2V,U,IAElB9V,MAAA,EAEHqhB,EAAGiV,uBAAyBr4B,EAAEiV,CAAA,EAAavO,IAAI,SAASxE,GACtD,MAAO,CACLk2B,WAAal2B,EAAKuS,SAAWvS,EAAKkT,WAAa,IAAMlT,EAAKuS,SAAWvS,EAAKkT,WAC1EyC,WAAa3V,EAAK2V,U,IAEnB9V,MAAA,EAEHqhB,EAAG+B,sBAAwB9U,EAED+S,EAAG+B,uBAAyB/B,EAAG+B,sBAAsBtU,YAAA,GAC3EuU,EAAiBR,GAAuBA,EAAoB9T,kBAAA,EA4ChE,SAASwnB,IACP,OAAQlV,EAAG1K,mBAAqB0K,EAAG1K,kBAAkB2L,UAAY6T,EAAkB9U,EAAGiV,uBAAwBjV,EAAGG,c,CA3CnHH,EAAGuD,wBAA0B,SAASC,GACpChC,EAAsBgC,EACtBxD,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmB6N,EAASpB,KAAA,EACxEpC,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAG0D,sBAAwB,SAAUrW,GACnC2U,EAAiB3U,EACjB2S,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,gBAAiBtI,EAAOsW,gBAAA,EACpE3D,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAGwE,oBAAsB,SAAS9a,GAChCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAGhP,OAAS,SAASyT,GACnB1b,EAAUa,IAAI,CAAClF,KAAO,6BAA6B/F,MAAQkL,mBAAmBjN,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,CAAA,EAEtG8O,EAOF/d,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,GAAA,EAAK,CAACuV,QAAS,CAAA,CAAA,CAAA,EAN5DxkB,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,IAAK7D,UAAWkO,EAAG1K,kBAAkB2L,QAChFjP,WAAYgO,EAAG1K,kBAAkBtD,WAAYX,SAAU2O,EAAG1K,kBAAkBjE,SAC5EjE,YAAaoU,GAAuBA,EAAoB7T,SAAA,EACxDN,OAAQ2U,GAAkBA,EAAerU,SAAA,EACzCf,WAAYoT,EAAGQ,WAAA,CAAA,C,EAMrBR,EAAGmV,kBAAoB,WACrB,IAAIrjB,EAAYkO,EAAG1K,kBACnBof,EAAqB3P,eAAejT,GAAaA,EAAUmP,QAASjB,EAAGtW,eAAiBsW,EAAGtW,cAAciM,IACrG7D,GAAaA,EAAUE,WAAYF,GAAaA,EAAUT,SAC1D2Q,GAAkBA,EAAerU,SAAA,EACjC6T,GAAuBA,EAAoB7T,SAAA,EAC3CqS,EAAGoV,kBAAmBpV,EAAGqV,kBACzBrV,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EACrDrD,GAAuBA,EAAoBsD,kBAAA,CAAA,C,EAcjD9E,EAAGsV,YAAc,SAASpT,EAAYnC,GACpC,IAAIwV,EAAoB,GAEtBA,EADCrT,GAAcA,EAAW9jB,OACN8jB,EAEAgT,EAAA,EAGlBM,GADJxV,EAAG2U,QAAU,GACQ5U,EAAM0V,YAfJ32B,EAeiCy2B,EAdjD34B,EAAE6E,OAAO3C,EAAM,SAAS42B,GAC7B,GAAIA,EAAIX,eAA4F,CAAC,IAA5EW,EAAIX,cAAch3B,YAAA,EAAc2kB,QAAQ1C,EAAGK,aAAatiB,YAAA,CAAA,GAC5E23B,EAAIV,YAAsF,CAAC,IAAzEU,EAAIV,WAAWj3B,YAAA,EAAc2kB,QAAQ1C,EAAGK,aAAatiB,YAAA,CAAA,EAAwB,OAAO23B,C,IAYhCH,GAC7EvV,EAAGO,cAAgBiV,EAAep3B,OAClC4hB,EAAG2V,kBAAoB/4B,EAAE44B,EAAexwB,OAAO+a,EAAMS,YAAc,GAAKR,EAAGnT,SAAUkT,EAAMS,YAAcR,EAAGnT,QAAA,CAAA,EAAWvJ,IAAI,SAAUxE,GACnI,MAAO,CACLi2B,cAAgBj2B,EAAKi2B,cACrBC,WAAal2B,EAAKk2B,WAClBY,gBAAkB3J,EAAa4J,mBAAmB,CAAC,CAACphB,WAAY3V,EAAK2V,UAAA,EAAA,C,IAEtE9V,MAAA,C,EAGLqhB,EAAGsE,gBAAkB,SAAUjE,GAC7BL,EAAGQ,YAAc,EACjBR,EAAGK,aAAeA,EAClBL,EAAGyV,WAAa,CAAA,EAChBzV,EAAG8V,aAAA,C,EAGL9V,EAAGiE,gBAAkB,SAASzD,GAC5BR,EAAGQ,YAAcA,EACjBR,EAAG8V,aAAA,C,EAYL9V,EAAG8V,aAAe,SAAUC,GAvJLA,EAwJPA,GAAc/V,EAAGoV,kBAxJEY,EAwJiBhW,EAAGqV,kBAvJrDrV,EAAGoV,kBAAoBW,EACvB/V,EAAGqV,kBAAoBW,EA6InBC,EAAY,CACdrpB,WAAYoT,EAAGQ,YACfhE,OAAQwD,EAAGoV,kBACXc,UAAWlW,EAAGqV,iB,EAEhB3uB,EAAOL,GAAG,IAAK4vB,EAAW,CAACE,OAAQ,CAAA,CAAA,CAAA,EApJrC,IA2JMC,EAAelB,EAAA,EACf/U,EAAiBvjB,EAAEy5B,QAAQD,EAAa,SAASp0B,GACnD,OAAOge,EAAGoV,mBACR,IAAK,gBACH,OAAOx4B,EAAE05B,UAAUt0B,EAAM+yB,aAAA,EAC3B,IAAK,aACL,IAAK,eACH,OAAOn4B,EAAE05B,UAAUt0B,EAAMgzB,UAAA,EAC3B,IAAK,aACH,OAAOnyB,KAAKU,IAAIvB,EAAMyS,UAAA,EACxB,IAAK,YACH,MAAO,CAAC,EAAIzS,EAAMyS,WACpB,IAAK,YACH,OAAQzS,EAAMyS,U,GAEjBuL,EAAGqV,iBAAA,EACNrV,EAAGsV,YAAYnV,EAAgB,CAACK,YAAaR,EAAGQ,YAAaiV,WAAYzV,EAAGyV,UAAA,CAAA,C,EAG9EzV,EAAGuW,kBAAoB,SAASR,GAC9B/V,EAAGQ,YAAc,EAEduV,IAAe/V,EAAGoV,kBACnBpV,EAAGqV,kBAA6C,QAAzBrV,EAAGqV,kBAA8B,OAAS,MAEjErV,EAAGqV,kBAAoB,MAEzBrV,EAAG8V,aAAaC,CAAA,C,EAGlB/V,EAAGwW,WAAa,SAAST,GACvB,OAAO/V,EAAGoV,oBAAsBW,C,EAGlC/V,EAAGyW,aAAe,SAASV,GACzB,IAAIvgB,EAAO,aACX,OAAGwK,EAAGoV,oBAAsBW,EACnBvgB,EAAK,IAAIwK,EAAGqV,kBAEZ7f,C,EAIXwK,EAAG0W,aAAe,SAAS1iB,GACtBgM,EAAG6U,2BAA6B7gB,IAC7BrH,EAAS/P,EAAEiF,MAAMoH,EAAc,CACjC+K,QAASA,EACT2iB,kBAAmB3U,GAAkBA,EAAe2B,iBACpDiT,cAAelwB,EAAOmwB,SAAWnwB,EAAOmwB,QAAQ/3B,MAAQ4H,EAAOmwB,QAAQ/3B,KAAKyN,MAC5EiQ,OAAQwD,EAAGoV,kBACXc,UAAWlW,EAAGqV,iB,GAEhB3uB,EAAOL,GAAG,gBAAiBsG,CAAA,E,EAzM7BqT,EAAGQ,YAAcvX,EAAa2D,YAAc,EAdzC3D,EAAa6I,YAAcgjB,EAC5B9U,EAAGoV,kBAAoB,eAEvBpV,EAAGoV,kBAA4C,iBAAxBnsB,EAAauT,OAA6B,aAAevT,EAAauT,OAE/FwD,EAAGqV,kBAAoBpsB,EAAaitB,WAAa,MAWjDlW,EAAG8V,aAAA,C,2MAxCPpqB,QACKC,OAAO,6BAAA,EACPe,WAAW,qBAAsB+nB,CAAA,C,ICLxC,WACE,aAOA,SAASC,EAAqBhX,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,GAEvE,MAAO,CACLyH,eA+CF,SAAwBzP,EAAmBvI,EAAkB+pB,EAAoBC,EAAkBC,EAC3ExV,EAAqByV,EAAWf,EAAWzQ,EAAiBC,GAClF,OA9CF,SAAwBpQ,EAAmBvI,EAAkB+pB,EAAoBC,EAAkB/U,EAC3ER,EAAqByV,EAAWf,EAAWzQ,EAAiBC,GAClF,OAAOhI,EAAGiI,KAaZ,SAAiBrQ,EAAmBvI,EAAkB+pB,EAAoBC,EAAkB/U,EAC3ER,EAAqByV,EAAWf,EAAWzQ,EAAiBC,GAE3E,OAAOpI,EAAIlX,IATb,SAAqB0L,GAGnB,MAFe,8BACU,mBAAdA,EAAiC,cAAgB,a,EAOjCwD,CAAA,EAAoB,CAC7CiI,MAAO,CAAA,EACP5Q,OAAQ,CACNK,SAAUD,EACViF,WAAY8kB,EACZzlB,SAAU0lB,EACV1pB,OAAQ2U,EACR5U,YAAaoU,EACbyV,UAAWA,EACXf,UAAWA,EACXpQ,qBAAsBL,EACtBM,gBAAiBL,C,EAEnBO,aAAc,cACdC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAC8b,KAAMwL,EAAY,eAAA,CAAA,C,MArCpC9Q,EAAmBvI,EAAkB+pB,EAAoBC,EAAkB/U,EAC9FR,EAAqByV,EAAWf,EAAWzQ,EAAiBC,CAAA,CAAA,EAC3Dtb,KAAK,SAAUsc,GACd,OAAOA,C,IAyCSpR,EAAmBvI,EAAkB+pB,EAAoBC,EAAkBC,EAC7FxV,EAAqByV,EAAWf,EAAWzQ,EAAiBC,CAAA,EAC3Dtb,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,wBAAA,C,uEA7DlErB,QACKC,OAAO,6BAAA,EACP6R,QAAQ,uBAAwBkX,CAAA,C,ICLvC,WACE,aAOA,SAASwC,EAAcxwB,EAAQ0L,EAAaE,EAAQ6kB,EAAeruB,GACjE,IAAIkX,EAAKtjB,KAETsjB,EAAGoX,SAAWtuB,EAAKkB,QAAA,EAAUqtB,UAC7BrX,EAAG5O,IAAM1K,EAAOiG,OAAOyE,IACvB4O,EAAG5N,YAAcA,EAEbE,IAEFA,EAAS6kB,EAAc7kB,EAAQ,MAAA,GAExBsD,QAAQ,CAAExE,IAAM,KAAM1M,KAAO,yBAAA,CAAA,EAEtCsb,EAAG1N,OAASA,EAEZ0N,EAAGsX,WAAa,WACd5wB,EAAOL,GAAG,IAAK,CAAE+K,IAAM4O,EAAG5O,GAAA,CAAA,C,EAG5B4O,EAAGuX,cAAgB,SAAUhlB,GAC3B,IAAI5F,EAAS,CAAEyE,IAAMmB,EAAWnB,GAAA,EAC5BmB,EAAWoD,MACbhJ,EAAO4F,WAAaA,EAAWoD,KAEjCjP,EAAOL,GAAG,UAAWsG,CAAA,C,EAGvBqT,EAAGwX,cAAgB,WACjB,OAAOxX,EAAGoX,SAASh5B,QAAU0K,EAAKlC,IAAI,mBAAA,C,EAGxCoZ,EAAGyX,YAAc,WACf,IAAIC,EAAO1X,EAAGoX,SAId,OAFEM,EADE1X,EAAG5O,KAAOtI,EAAKlC,IAAI,mBAAA,EACdhK,EAAE2Y,KAAKmiB,EAAK7yB,OAAOmb,EAAG5O,GAAA,CAAA,EAExBsmB,C,qEAzCXhsB,QACKC,OAAO,aAAA,EACPe,WAAW,gBAAiBwqB,CAAA,C,ICLnC,WACE,aAOA,SAASzkB,EAAa6d,EAAYhT,GAEhC,MAAO,CACL5K,aAIF,WACE,OAAO4K,EAAIlX,IAAI,sBAAuB,CAAEmX,MAAQ,CAAA,CAAA,CAAA,C,EAJhDoa,iBAOF,SAA0BvmB,EAAKzE,GAC7B,OAAO2Q,EAAIlX,IAAI,sBAAwByD,mBAAmBuH,CAAA,EAAM,CAAEzE,OAASA,CAAA,CAAA,EACtEvC,KAAK,SAAUwtB,GAEd,OADAlsB,QAAQmL,QAAQ+gB,EAAWC,CAAA,EACpBD,C,KAIf,SAASC,EAAeC,GAMtB,OAJAC,EAAS,CAACD,GAAa,QAAA,EACvBC,EAASD,EAAWE,WAAY,YAAaF,CAAA,EAC7CC,EAASD,EAAWp0B,OAAQ,SAAUo0B,CAAA,EAE/BA,C,CAGT,SAASC,EAASE,EAAStiB,EAAK6b,GAC9B50B,EAAEqI,KAAKgzB,EAAS,SAAUC,GACxBA,EAAIxzB,KAAO4rB,EAAWgB,QAAQ,CAAC,YAAa3b,EAAKuiB,EAAIviB,IAAMwN,KAAK,GAAA,EAAMqO,CAAA,C,mCAnC5E9lB,QACKC,OAAO,uBAAA,EACP6R,QAAQ,eAAgB/K,CAAA,C,ICL/B,WACE,aAEA/G,QACKC,OAAO,uBAAA,EACP6R,QAAQ,kBAGb,WACE,IAAI2a,EAAe,WACfC,EAAgB,YAChBC,EAAsB,iBAEtBC,EAAc,UACdC,EAAY,QACZC,EAAwB,kBAExBC,EAAc,cACdC,EAAa,aACbC,EAAkB,aAElBC,EAAiB,aACjBC,EAAc,UACdC,EAAc,UACdC,EAAe,WAEnB,MAAO,CACLC,QAeF,SAAiBC,GACf,OAAIA,EACK,CAACF,EAAcH,EAAgBC,EAAaC,GAE5C,CAACF,E,EAlBVM,eAsBF,SAAwBD,GACtB,OAAIA,EACK,CACLE,WAAaC,EAAaR,CAAA,EAC1BS,QAAUD,EAAaP,CAAA,EACvBS,QAAUF,EAAaN,CAAA,EACvBS,SAAWH,EAAaL,CAAA,C,EAGnB,CAELI,WAAa,CAAChB,EAAcC,E,GAhChCoB,aAqCF,SAAsBP,GACpB,OAAIA,EACK,CACLE,WAAaM,EAASL,EAAaR,CAAA,CAAA,EACnCS,QAAUI,EAASL,EAAaP,CAAA,CAAA,EAChCS,QAAUG,EAASL,EAAaN,CAAA,CAAA,EAChCS,SAAWH,EAAaL,CAAA,C,EAGnB,CACLI,WAAaC,EAAaR,CAAA,C,GA9C9Bc,SAmDF,SAAkBT,GAChB,OAAOA,EAAiB,aAAe,M,GAjDzC,SAASG,EAAaO,GACpB,OAAQA,GACN,KAAKf,EAAgB,MAAO,CAACT,EAAcC,EAAeC,GAC1D,KAAKQ,EAAa,MAAO,CAACP,EAAaC,EAAWC,GAClD,KAAKM,EAAa,MAAO,CAACJ,EAAYD,EAAaE,GACnD,KAAKI,EAAc,MAAO,CAACV,EAAqBG,EAAuBG,E,EA+C3E,SAASc,EAASG,GAChB,IAAIC,EAAMD,EAAQE,IAAA,EAElB,OADAF,EAAQhkB,QAAQikB,CAAA,EACTD,C,EAnFqB,C,ICLlC,WACE,aAQA,SAASG,EAAkBjpB,EAAQkpB,EAAiBvnB,GAClD,IAAIuN,EAAKtjB,KACLu8B,EAAiBjZ,EAAGzN,YAAcyN,EAAGzN,WAAW0mB,eAChDgB,EAAgBja,EAAGzN,YAAcyN,EAAGzN,WAAWoD,IAgBnD,SAASukB,EAAYN,EAASjtB,GAC5B,OAAO8F,EAAaklB,iBAAiB3X,EAAG5O,IAAK1F,QAAQ7J,MAAM,GAAI8K,EAAQ,CACrEwtB,OAASP,EACTrnB,WAAa0nB,C,IACX7vB,KAAK,SAAUwtB,GACjB5X,EAAG4Z,QAAUluB,QAAQ7O,OAAOmjB,EAAG4Z,SAAW,GAAIhC,CAAA,C,GAqBlD,SAASwC,EAAcC,GACrB,IAAIhU,EAAM,GAMV,OALA3a,QAAQmL,QAAQwjB,EAAW,SAAUT,GACnCluB,QAAQmL,QAAQ+iB,EAAS,SAAUhd,GACjCyJ,EAAIzJ,GAAKA,C,KAGNyJ,C,CA/CTrG,EAAGsa,KAAON,EAAgBhB,QAAQC,CAAA,EAClCjZ,EAAG2Z,IAAM3Z,EAAGsa,KAAK,GACjBta,EAAGkZ,eAAiBc,EAAgBd,eAAeD,CAAA,EACnDjZ,EAAGwZ,aAAeQ,EAAgBR,aAAaP,CAAA,EAG/CjZ,EAAG4Z,QAAU,KAMbM,EAJiBK,OAAOC,KAAK9uB,QAAQ7J,MACjCu4B,EAAcpa,EAAGkZ,cAAA,EACjBkB,EAAcpa,EAAGwZ,YAAA,C,EAET,EAWZxZ,EAAG8X,WAAa,SAAUqC,GACxB,OAAOna,EAAG4Z,SAAW5Z,EAAG4Z,QAAQO,E,EAGlCna,EAAGya,YAAc,WACf,OAAO79B,EAAEkG,IAAIlG,EAAE0G,IAAI0c,EAAG4Z,QAAS,aAAA,CAAA,C,EAGjC5Z,EAAG0a,QAAU,WACX5pB,EAAOye,WAAW,cAAA,C,EAGpBvP,EAAG2a,WACMT,C,uDA/CXxuB,QACKC,OAAO,uBAAA,EACPe,WAAW,oBAAqBqtB,CAAA,EAChC/gB,UAAU,mBA4Df,WACE,MAAO,CACLtM,WAAa,0BACbsgB,iBAAmB,CAAA,EACnBvgB,YAAa,oCACbyP,MAAQ,CACN9K,IAAM,IACNmB,WAAa,IACbC,UAAY,G,GApEiB,C,ICNrC,WACE,aAOA,SAASH,EAAciL,GAErB,MAAO,CACLhT,KAIF,SAAc8G,GACZ,OAAWwpB,MAAPxpB,EACKkM,EAAIlX,IAAI,aAAA,EAERkX,EAAIlX,IAAI,eAAiByD,mBAAmBuH,CAAA,CAAA,C,EAPrDhL,IAWF,SAAagL,EAAK6oB,GAChB,OAAO3c,EAAIlX,IAAI,eAAiByD,mBAAmBuH,CAAA,EAAO,IAAMvH,mBAAmBowB,CAAA,CAAA,C,qBArBvFvuB,QACKC,OAAO,uBAAA,EACP6R,QAAQ,gBAAiBnL,CAAA,C,ICLhC,WACE,aAEA3G,QACKC,OAAO,uBAAA,EACPe,WAAW,uBAIhB,WACE,IAAIsT,EAAKtjB,KAETsjB,EAAG6a,aAAe,WAChB,IAAI7C,EAAap7B,EAAEwJ,IAAI4Z,EAAI,6BAAA,EAIvB6a,EAHgBj+B,EAAEk+B,IAAI9C,EAAY,SAAU+C,GAC9C,OAAOA,EAAU/jB,O,GAEgBgJ,EAAGzN,WAAWyoB,eACjD,OAAOn4B,KAAKyB,IAAI,EAAGu2B,CAAA,C,EAbiB,EACnC7hB,UAAU,sBAiBf,WACE,MAAO,CACLiD,SAAW,IACXvP,WAAa,6BACbsgB,iBAAmB,CAAA,EACnBvgB,YAAc,uCACdyP,MAAQ,CACN3J,WAAa,IACbqnB,QAAU,G,GAzBsB,C,ICNxC,WACE,aAQA,SAASqB,EAAgBhyB,EAAciyB,EAAYlB,EAAiBmB,GAClE,IAcIC,EAdApb,EAAKtjB,KAgFT,SAAS2+B,EAAQC,GACX1I,EAAO,IAAIzwB,KAAKm5B,CAAA,EAKpB,OAJI1I,EAAK2I,WAAA,GAEP3I,EAAK4I,WAAW5I,EAAK2I,WAAA,EAAe3I,EAAK6I,kBAAA,CAAA,EAEpC7I,C,CAGT,SAAS8I,EAAU9I,GACjB,OAAOsI,EAAWtI,EAAM5S,EAAG2b,UAAA,C,CAS7B,SAASC,EAAWzB,GAClB,MAAO,CACL0B,SAAW1B,EAAO0B,SAASA,SAC3BC,MAAQT,EAAQlB,EAAO4B,SAAA,EACvBC,IAAMX,EAAQlB,EAAO8B,OAAA,C,EAtGzBjc,EAAGxjB,QAAU,KACbwjB,EAAGrT,OAAS,KACZqT,EAAGkc,UAAY,KACflc,EAAG2b,WAAa,aAChB3b,EAAGmc,QAAU,CAAA,EACbnc,EAAG0Z,SAAWM,EAAgBN,SAASzwB,EAAasJ,UAAA,EACpDyN,EAAGoc,WAsFH,SAAoBjC,GAClBna,EAAGxjB,QAAU2+B,EAAakB,gBAAgBlC,CAAA,EAC1Cna,EAAGma,OAASA,EACZna,EAAGrT,OAASivB,EAAWzB,CAAA,C,EAvFzBna,EAAGsc,YAAc1/B,EAAEid,OAAOmG,EAAGxN,UAAW,SAAUlP,EAAKu4B,GAErD,OADAv4B,EAAIu4B,EAASA,UAAYA,EAClBv4B,C,EACN,EAAA,EAIH0c,EAAGuc,KAAO,SAAUC,GAClBpB,EAAcoB,C,EAGhBxc,EAAGyc,eAAiB,SAAUje,GAC5BwB,EAAGmc,QAAU,CAAA,EACb3d,EAAQke,QAAQ,WACd1c,EAAGmc,QAAU,CAAA,C,IAIjBnc,EAAGhP,OAAS,SAAU2rB,GAEpB3c,EAAG4c,UAAY5c,EAAG6c,QAAU,CAAA,EAI5B,IAAIC,GAFJ9c,EAAGkc,UAAY,OAEDlc,EAAGrT,QAAkBqT,EAAG+c,oBAAA,EACtB,CAAA,IAAZD,EAEEH,CAAAA,GAAUjxB,QAAQsxB,OAAOhd,EAAGrT,OAAQivB,EAAW5b,EAAGma,MAAA,CAAA,GACpDna,EAAGyc,eACCrB,EAAYT,WAAW3a,EAAGid,YASftwB,EATuCqT,EAAGrT,QAU7DA,EAAS/P,EAAEC,OAAO,GAAIoM,EAAc0D,CAAA,GAC7BmvB,MAAQJ,EAAU/uB,EAAOmvB,KAAA,EAChCnvB,EAAOqvB,IAAMN,EAAU/uB,EAAOqvB,GAAA,EACvBrvB,EAbsD,C,EAGtC,CAAA,IAAZmwB,IAET9c,EAAGkc,UAAY,mBAAqBY,E,EAWxC9c,EAAG+c,oBAAsB,WACvB,OAAO/c,EAAGkd,aAAald,EAAGrT,OAAOkvB,SAAU7b,EAAGrT,OAAOmvB,MAAO9b,EAAGrT,OAAOqvB,GAAA,C,EAGxEhc,EAAGkd,aAAe,SAAUrB,EAAUC,EAAOE,GAC3C,GAAI,CAACp/B,EAAEugC,OAAOrB,CAAA,GAAUsB,MAAMtB,EAAMuB,QAAA,CAAA,GAChC,CAACzgC,EAAEugC,OAAOnB,CAAA,GAAQoB,MAAMpB,EAAIqB,QAAA,CAAA,EAE9B,MAAO,CAAA,GAITrB,EAAM,IAAI75B,KAAK65B,CAAA,GACXsB,QAAQtB,EAAIuB,QAAA,EAAY,CAAA,EAC5BvB,EAAIR,WAAWQ,EAAIT,WAAA,EAAe,CAAA,EAC9BiC,EAAWxd,EAAGsc,YAAYT,GAAU4B,WACpC/9B,GAAco8B,EAClB,OAAIp8B,EAAQ,EACH,WAELA,EAAQ89B,EAAR99B,IACK,Q,2EAlFbgM,QACKC,OAAO,uBAAA,EACPe,WAAW,kBAAmBuuB,CAAA,EAC9BjiB,UAAU,iBAiHf,WACE,MAAO,CACL0kB,QAAU,CAAC,iBAAkB,sBAC7BhxB,WAAa,wBACbsgB,iBAAmB,CAAA,EACnBvgB,YAAc,kCACdyP,MAAQ,CACN+gB,WAAa,IACbU,aAAe,IACfnrB,UAAY,G,EAEdorB,KAAO,SAAU9sB,EAAQ+sB,EAAKC,EAAQC,GACpC,IAAI/d,EAAK+d,EAAM,GACX3C,EAAc2C,EAAM,GACxB/d,EAAGuc,KAAKnB,CAAA,EAERtqB,EAAOhH,IAAI,eAAgB,WACzBkW,EAAGhP,OAAO,CAAA,CAAA,C,GAEZF,EAAO1F,OAAO,WACZ,OAAOgwB,EAAYtD,WAAW9X,EAAGid,UAAA,C,EAChC,SAAUn+B,GACPA,GACFkhB,EAAGoc,WAAWt9B,CAAA,C,KAxIS,C,ICNnC,WACE,aAOA,SAASq8B,EAAa7K,EAAY0N,EAAeC,GAE/C,IAAIC,EAAiB7hC,GAAGuE,KAAKsX,OAAOimB,MAAM,CACxC,CAAC,YAAa,SAAUx9B,GAAK,OAAOA,EAAE46B,WAAA,CAAA,GACtC,CAAC,aAAc,SAAU56B,GAAK,OAAOA,EAAEy9B,SAAA,CAAA,GACvC,CAAC,QAAS,WAAc,MAAO,CAAA,CAAA,G,EAGjC,MAAO,CACL/B,gBAGF,SAAyBlC,GACvB,OAAQA,EAAOA,QACb,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,kBACL,IAAK,cACL,IAAK,aACL,IAAK,aACH,OA4BN,SAAwBrC,GACtB,IAEav3B,EAFTmD,EAASo0B,EAAWp0B,OACpB26B,EAAY36B,EAAOtF,OAEvB,GAAkB,IAAdigC,EACF,MAAM,IAAIv5B,MAAM,gCAAkCu5B,CAAA,EAEpD36B,EAAO,GAAGiB,QAAU,SAAUhE,GACxBd,EAAInD,KAAK+D,GAAGZ,EAAEc,CAAA,EAClB,OAAOJ,EAAUA,EAAQV,CAAA,EAAKA,C,EAO9BkB,EAHW,aADb0pB,EAAO/mB,EAAO,GAAG+mB,OAEflqB,EAAU+9B,EAEA,aAEN7T,IACFlqB,EAzBN,SAA2BkqB,GACzB,OAAO,SAAU5qB,GACf,OAAOywB,EAAWgB,QAAQ,YAAc7G,EAAM,CAAE9rB,MAAQkB,CAAA,CAAA,C,GAuB1B4qB,CAAA,GAGpB,CAAEnmB,IAAM,CAAA,GAGpB,MAAO,CACLi6B,aAAe,CACbx9B,QAAUA,EACVmB,cAAgBA,EAChB3B,QAAUA,EACVD,QAAU49B,C,IA1DY/D,CAAA,EAExB,IAAK,iBACH,OA4DN,SAA8BrC,GAO5B,OALAA,EAAWp0B,OAAO,GAAGiB,QAAU,SAAUhE,GAEvC,OAAO29B,EADI5hC,KACe+D,GAAGZ,EAAEc,CAAA,CAAA,EAAM,aAAe29B,EADzC5hC,KAC4D+D,GAAG+9B,MAAM79B,CAAA,CAAA,C,EAG3E,CACLrE,MAAQ,aACRiiC,aAAe,CACbr8B,cAAgBA,EAChB3B,QAAU+9B,EACVh+B,QAAU49B,EACVn9B,QAAU,WACVN,GAAK,CAGHg+B,WAAa,SAAU99B,GAAK,OAAO,IAAA,C,KA7ETw5B,CAAA,EAE9B,QACE,MAAM,IAAIr1B,MAAM,4BAA8Bq1B,EAAOA,MAAA,C,IAQ3D,SAASj4B,EAAcvB,GACrB,MAAO,CAAC2vB,EAAWgB,QAAQ,yBAAA,GALL1wB,EAKgDlE,KAAK+D,GAAGhB,EAAEkB,CAAA,EAJzE,IAAIwB,KAAKvB,CAAA,EAAMwB,eAAA,G,CAOxB,SAASk8B,EAAcz+B,GACrB,OAAOm+B,EAAcn+B,EAAG,CAAA,C,0DA9C5B6L,QACKC,OAAO,uBAAA,EACP6R,QAAQ,eAAgB2d,CAAA,C,ICL/B,WACE,aAEAzvB,QACKC,OAAO,uBAAA,EACPqN,UAAU,mBAGf,WACE,MAAO,CACLtM,WAAA,CAAA,UAAA,aAAA,eAAA,kBAAa,SAAU6N,EAAS+V,EAAYrnB,EAAc+wB,GACxD,IAAIha,EAAKtjB,KACLshC,EAAgBzjB,EAAQ,SAAA,EACxB0jB,EAAe1jB,EAAQ,QAAA,EAC3ByF,EAAG4Z,QAAU,GACb5Z,EAAG0Z,SAAWM,EAAgBN,SAASzwB,EAAasJ,UAAA,EAEpDyN,EAAG0e,iBAAmB,WAEpB,IAAIC,EAAgB/hC,EAAE0G,IAAI0c,EAAGwZ,aAAc,SAAUW,GACnD,OAAOv9B,EAAE0G,IAAI62B,EAAOnC,WAAY,WAAA,C,GAI9B4G,EAAQhiC,EAAEmrB,KAAK4W,CAAA,EACnB/hC,EAAEqI,KAAKrI,EAAEwrB,KAAKuW,CAAA,EAAgB,SAAUE,GACtC,GAAI,CAACjiC,EAAEkiC,QAAQF,EAAOC,CAAA,EACpB,MAAM,IAAI/5B,MAAM,kDAAA,C,GAIpBkb,EAAGgY,WAAa4G,EAIhBhiC,EAAEqI,KAAK+a,EAAGwZ,aAAc,SAAUW,EAAQz1B,GACnCsb,EAAG4Z,QAAQl1B,KACdsb,EAAG4Z,QAAQl1B,GAAQy1B,E,IAKzBna,EAAG+e,cAAgB,SAAUhE,GAE3B,MAA+B,UAAxBA,EAAUA,WACM,EAApBA,EAAU/jB,QACP,IAAM,E,EAGdgJ,EAAG+a,UAAY,SAAUZ,EAAQY,GAC/B,OAAOn+B,EAAE0N,KAAK1N,EAAEwJ,IAAI4Z,EAAG4Z,QAAQO,GAAS,YAAA,EAAe,CAAEY,UAAYA,CAAA,CAAA,C,EAGvE/a,EAAGhJ,QAAU,SAAUmjB,EAAQ6E,GAC7B,IAAIjE,EAAY/a,EAAG+a,UAAUZ,EAAQ6E,CAAA,EACjCC,EAAcjf,EAAG+e,cAAchE,CAAA,EAE/BtQ,EAAOsQ,EAAUtQ,KAcrB,OAZEwU,GADW,YAATxU,EACauT,EAAcjD,EAAU/jB,OAAA,EAC9ByT,EACM6F,EAAWgB,QAAQ,YAAc7G,EAAM,CAAE9rB,MAAQo8B,EAAU/jB,OAAA,CAAA,EAE3DinB,EAAalD,EAAU/jB,OAAA,EAGjB,MAAnB+jB,EAAUyD,QAEZS,GAAe,aAAejB,EAAgC,KAAlBjD,EAAUyD,KAAQ,GAGzDS,C,IAGXC,aAAe,KACflS,iBAAmB,CAAA,EACnBvgB,YAAc,oCACdyP,MAAQ,CAENsd,aAAe,WACfP,eAAiB,IACjBkG,YAAc,G,EAEhBvB,KAAO,SAAU9sB,EAAQ+sB,EAAKC,EAAQ9d,GAGpClP,EAAOsuB,iBAAiB,kBAAmB,SAAUxF,GAC/CA,GACF5Z,EAAG0e,iBAAA,C,KAnFsB,C,ICLrC,WACE,aAEAhzB,QACKC,OAAO,uBAAA,EACPqN,UAAU,WAGf,WACE,MAAO,CACLiD,SAAW,IACXxP,YAAc,+BACdyP,MAAQ,CAENmjB,KAAO,IACPC,UAAY,G,GAVS,C,ICL7B,WACE,aAOA,SAASC,EAASC,EAAMt2B,GACtB,IAAI8W,EAAKtjB,KAETsjB,EAAGyf,QAAU,GACbzf,EAAG0f,QAAU,GAEb1f,EAAGoU,OAAS,WACVoL,EAAKG,KAAK3f,EAAGyf,QAASzf,EAAG0f,OAAA,EAASt1B,KAAK,WACrClB,EAAMipB,QAAQ,wBAAA,C,+BAbpBzmB,QACKC,OAAO,UAAA,EACPe,WAAW,WAAY6yB,CAAA,C,ICL9B,WACE,aAOA,SAASC,EAAKliB,GAEZ,MAAO,CACLqiB,KAGF,SAAcF,EAASC,GACrB,OAAOpiB,EAAIsiB,KAAK,QAAS,CACvBH,QAAUA,EACVC,QAAUA,C,uBAdhBh0B,QACKC,OAAO,UAAA,EACP6R,QAAQ,OAAQgiB,CAAA,C,ICLvB,WACE,aAEAnjC,GAAGC,MAAM,WAAA,EAAaO,OAAO,gBAAiB,CAC5CN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAIPmjC,GAFJrjC,EAAUA,GAAW,GAER,CACXM,IAAK,GACLG,MAAO,GACPF,OAAQ,GACRC,KAAM,E,GA8QR,SAAS8iC,IACP,IAqEyBC,EAAkBC,EA/CpBC,EAWjBC,EAEAC,EAnCFC,EAAS/jC,GAAGgkC,SAAS,SAAU1/B,GAAK,OAAOA,CAAA,CAAA,EAAM3D,KACjDsjC,EAAU7jC,EAAK8jC,OAAO/O,OACtBgP,EAAQnkC,GAAGmkC,MAAM9jC,IAAA,EAAM,GACvB+jC,EAAYhkC,EAAKgD,EAAE2E,OAAOo8B,CAAA,EAC1BE,EAAMN,EAAOE,EAASG,EAAW,CAAA,EACjCx9B,EAAKw9B,EAAYH,EAAQI,GAASJ,EAAQI,EAAM,GAAKD,EAAaC,EAAMA,EAAM,EAC9EC,EAAKL,EAAQr9B,GACbpD,EAAIxD,GAAGyG,IAAIlG,EAAE0G,IAAI7G,EAAKqC,KAAM,SAAS6B,GAAK,OAAOA,EAAE6wB,OAAOvuB,IAAMtC,EAAE6wB,OAAOvuB,GAAG29B,IAAA,CAAA,CAAA,EAC5EX,EAAOxjC,EAAKokC,OAAOC,MAAM7hC,OAAO,eAAA,EAyDpC,SAAS8hC,EAAad,EAAMe,GAC1B,OAAOf,EAAKpiC,KAAA,EAAOojC,QAAA,EAAUD,E,CAkB/B,SAASE,EAAmBF,EAAKG,EAAUC,EAASC,EAAYC,GAG1DC,EAAYR,EAFJtkC,EAAKokC,OAAOC,MACC7hC,OAAO,gBAAA,EACW+hC,CAAA,EAE3C,OAAGG,GAAYt+B,KAAKogB,KAAKme,EAAUG,EAAYF,CAAA,EACtCC,EAAQC,CAAA,EAERH,EAAUC,C,CAnFlBzkC,EAAE4kC,SAAS3hC,CAAA,IACZpD,EAAKokC,OAAOC,MAAMn/B,UAAU,kBAAA,EACvB/D,KAAK,YAAa,SAAU+C,EAAGlB,GAC9B,MAAO,aAAehD,EAAKgD,EAAEkhC,CAAA,EAAM,IAAMlkC,EAAKoD,EAAEpD,EAAKqC,KAAKW,GAAG+xB,OAAOvuB,GAAG29B,IAAA,EAAQ,G,GAErFnkC,EAAKokC,OAAOC,MAAM7hC,OAAO,kBAAA,EACpBrB,KAAK,KAAMnB,EAAKgD,EAAEkhC,CAAA,CAAA,EAAK/iC,KAAK,KAAMnB,EAAKgD,EAAEkhC,CAAA,CAAA,EAE9ClkC,EAAKokC,OAAOC,MAAM9+B,MAAM,UAAW,IAAA,GAKdi+B,EAJPA,GAKThhC,OAAO,eAAA,EAAiB2F,KAAKpI,EAAQilC,kBAAkBhlC,EAAK8jC,OAAOne,MAAMue,CAAA,CAAA,CAAA,EAC9E/jC,EAAEia,QAAQpa,EAAKqC,KAAM,SAAS4iC,EAAGC,GAC/B,IAAIC,EAASF,EAAElQ,OAAOvuB,GAAGpD,EACrBpD,EAAKD,QAAQqlC,eAAiBH,EAAEI,eAClCF,EAASF,EAAElQ,OAAOvuB,GAAG29B,MAEvBX,EAAKhhC,OAAO,kBAAoB0iC,CAAA,EAAG/8B,KAAKhI,EAAEmlC,OAAOH,CAAA,EAAU,MAAQplC,EAAQwlC,iBAAiBJ,CAAA,CAAA,C,GAI1F1B,EAcN,WACE,IAAI+B,EAAcxlC,EAAKokC,OAAOC,MAC1BoB,EAAYnB,EAAakB,EAAYhjC,OAAO,eAAA,EAAkB,OAAA,EAC9DkjC,EAAkBvlC,EAAE0G,IAAI7G,EAAKqC,KAAM,SAAS6B,EAAGsC,GACjD,MAAO,CAAC,QAAS,SAAS4W,OAAO,SAAUuoB,EAAKC,GAG9C,OADAD,EAAIC,GAAgBtB,EAAakB,EAAYhjC,OADlC,YAAaojC,EAAe,IAAMp/B,CACO,EAAO,OAAA,EACpDm/B,C,EACP,EAAA,C,GAEJ,MAAO,CACLE,cAAiB1lC,EAAEimB,MAAMsf,EAAiB,OAAA,EAAS/f,MACnDmgB,cAAiB3lC,EAAEimB,MAAMsf,EAAiB,OAAA,EAASxjC,MACnDi0B,KAAQsP,C,GA3BU,EAChBM,EAAqBtC,EAAcoC,cAAgBpC,EAAcqC,cAAgB/lC,EAAQimC,gBACzFtC,EAAevjC,EAAEkG,IAAI,CAAC0/B,EAAoBtC,EAActN,KAAA,EAAoC,EAA1Bp2B,EAAQimC,gBAG9E7lC,EAAEia,QAAQpa,EAAKqC,KAAM,SAAU4iC,EAAGC,GAChC1B,EAAKhhC,OAAO,kBAAoB0iC,CAAA,EAAG/jC,KAAK,IAAKuiC,EAAeD,EAAcqC,cAAgB/lC,EAAQimC,eAAA,C,GAIpGxC,EAAKhhC,OAAO,gBAAA,EAAkB+C,MAAM,QAASm+B,CAAA,EAC7CF,EAAKhhC,OAAO,YAAA,EAAc+C,MAAM,QAASm+B,CAAA,EAyBlBJ,EAlDPtjC,EAAKgD,EAAEkhC,CAAA,EAkDkBX,EAlDbvjC,EAAKoD,EAAEA,CAAA,EA4D/B6iC,EAAUxB,EAAmB,QAASzkC,EAAKY,EAAG0iC,EAAkBvjC,EAAQmmC,mBAT7D,SAAUpB,GAEvB,OAAOxB,EAAmBwB,EAAY/kC,EAAQmmC,kB,CAOgD,EAC5FC,EAAU1B,EAAmB,SAAUzkC,EAAKa,EAAIuiC,EAAO9iC,OAAQijC,EAAkBxjC,EAAQqmC,mBAN9E,SAAUtB,GAEvB,OAAOvB,GAAoBvjC,EAAKa,EAAIuiC,EAAO9iC,OAAS8F,KAAKogB,KAAK+c,EAAmBuB,CAAA,E,CAI8B,EAgBpFuB,EAfPJ,EAea9B,EAfJgC,EAgBbnmC,EAAKokC,OAAOC,MAAM7hC,OAAO,eAAA,EAC/BrB,KAAK,IAAKklC,CAAA,EACjBllC,KAAK,IAAKgjC,CAAA,E,CAKnB,SAASmC,IAEPtmC,EAAKgD,EAAEC,MAAM,CAAC,EAAGjD,EAAKY,EAAA,EACtBZ,EAAKoD,EAAEH,MAAM,CAACjD,EAAKa,EAAG,EAAA,EAEV,EAATb,EAAKY,GAAkB,EAATZ,EAAKa,GACpBb,EAAKokC,OAAOmC,KACPplC,KAAK,QAASnB,EAAKY,CAAA,EACnBO,KAAK,SAAUnB,EAAKa,CAAA,EAG3Bb,EAAKokC,OAAOC,MAAM7hC,OAAO,kBAAA,EAAoBrB,KAAK,KAAMnB,EAAKa,CAAA,EAEzDd,EAAQmD,UACVlD,EAAKmD,KAAKC,EAAEC,YAAY,EAAA,EAAIC,cAAc,CAACtD,EAAKY,CAAA,EAGlDZ,EAAKuD,SAASP,EACTxB,UAAU,EAAGxB,EAAKoD,EAAEH,MAAA,EAAQ,EAAA,EAC5BO,KAAKxD,EAAKmD,KAAKH,CAAA,EACfkC,UAAU,eAAA,EACV1B,KAAK,SAASgjC,GACbA,EAAEh+B,KAAK,SAAUtE,GACf,IAAIyhB,EAAQ/lB,GAAG4C,OAAOvC,IAAA,EAClBk2B,EAAOxQ,EAAMxd,KAAA,EAAO4U,MAAM,GAAA,EAC9B4I,EAAMxd,KAAK,EAAA,EACXhI,EAAEg2B,CAAA,EACGsQ,QAAA,EACAj+B,KAAK,SAASy8B,GACbtf,EAAM3kB,OAAO,OAAA,EACRG,KAAK,IAAK,CAAA,EACVA,KAAK,KAAM,KAAA,EACXgH,KAAK88B,CAAA,C,OAKxBjlC,EAAKuD,SAASH,EACTI,KAAKxD,EAAKmD,KAAKC,CAAA,EAEpBpD,EAAK0mC,WAAWtjC,EAAEZ,OAAO,eAAA,EACpBrB,KAAK,IAAK,CAACnB,EAAKa,EAAE,CAAA,EAEpBd,EAAQ4mC,UACT3mC,EAAKuD,SAASH,EAAEZ,OAAO,OAAA,EAASA,OAAO,MAAA,EAAQ+C,MAAM,UAAW,CAAA,EAIlEvF,EAAKokC,OAAOmC,KACPrlC,GAAG,WAAY,WAAclB,EAAKokC,OAAOC,MAAM9+B,MAAM,UAAW,MAAA,CAAA,CAAA,EAChErE,GAAG,YAAamiC,CAAA,EAGrBzjC,GAAG4C,OAAO,KAAA,EAAOA,OAAO,GAAA,EAAKrB,KAAK,YAAa,aAAeiiC,EAAO7iC,KAAO,IAAM6iC,EAAO/iC,IAAM,GAAA,C,CAzajGL,EAAKS,QAAQ2iC,CAAA,EAEbjjC,EAAEulB,aAAa3lB,EAAS,CACtB0B,MAAQ,IACRK,OAAS,IACT6B,MAAQ,CAAA,EACRC,MAAQ,CAAA,EACRC,QAAU,KACVC,QAAU,KACVZ,SAAW,CAAA,EACXkiC,cAAe,CAAA,EACfuB,SAAU,CAAA,EACVC,iBAAkB,GAClBV,mBAAoB,GACpBE,mBAAoB,CAAC,GACrBJ,gBAAiB,E,GAInBhmC,EAAKgD,EAAIpD,GAAGuE,KAAKC,MAAA,EAEjBpE,EAAKoD,EAAIxD,GAAGwE,MAAMC,OAAA,EAGlBrE,EAAKsE,QAAUvE,EAAQuE,SAAW,GAElCtE,EAAKuD,SAAW,CACdP,EAAIhD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,EAClDvB,EAAIpD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,C,EAGpD3E,EAAKmD,KAAO,CACVH,EAAIpD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKgD,CAAA,EAAGsC,OAAO,QAAA,EACvClC,EAAIxD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKoD,CAAA,EAAGkC,OAAO,MAAA,C,EAIzCtF,EAAK0mC,WAAa,CAChBtjC,EAAGpD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,UAAW,CAAA,CAAA,C,EAG9C3E,EAAK0mC,WAAWtjC,EACXpC,OAAO,MAAA,EACPG,KAAK,QAAS,cAAA,EACdA,KAAK,YAAa,aAAA,EAClBA,KAAK,IAAK,CAACiiC,EAAO7iC,IAAA,EAClBY,KAAK,KAAM,KAAA,EACXgH,KAAKpI,EAAQ8mC,UAAA,EAEb9mC,EAAQ4D,OACX3D,EAAKuD,SAASP,EAAEuC,MAAM,UAAW,MAAA,EAG9BxF,EAAQ6D,OACX5D,EAAKuD,SAASH,EAAEmC,MAAM,UAAW,MAAA,EAGhCxF,EAAQ+mC,YACT9mC,EAAKmD,KAAKH,EAAE+jC,MAAMhnC,EAAQ+mC,WAAWC,MAAOhnC,EAAQ+mC,WAAWE,cAAgB,IAAA,EAG7EjnC,EAAQ8D,SACV7D,EAAKmD,KAAKH,EAAEwC,WAAWzF,EAAQ8D,OAAA,EAI7B9D,EAAQ+D,SACV9D,EAAKmD,KAAKC,EAAEoC,WAAWzF,EAAQ+D,OAAA,EAG9B/D,EAAQknC,YACTjnC,EAAKmD,KAAKC,EAAE6jC,WAAWlnC,EAAQknC,UAAA,EAGjCjnC,EAAKokC,OAAS,CACZ8C,OAAQlnC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAChDwiC,WAAYnnC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,aAAc,CAAA,CAAA,EACxD0/B,MAAOrkC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,QAAS,CAAA,CAAA,EAAMY,MAAM,UAAW,MAAA,EACrEghC,KAAMvmC,EAAKc,KAAKE,OAAO,MAAA,EAClBG,KAAK,QAAS,SAAA,C,EAIrBnB,EAAKonC,KAAOxnC,GAAG2C,IAAI6kC,KAAA,EAAOC,YAAY,UAAA,EACjCC,QAAQ,SAAUpjC,GAAK,OAAO/D,EAAE4kC,SAAS7gC,EAAEd,CAAA,CAAA,CAAA,EAC3CJ,EAAE,SAASkB,EAAGsC,GAAK,OAAOxG,EAAKgD,EAAEhD,EAAK8jC,OAAO/O,OAAOvuB,EAAA,CAAA,CAAA,EACpDpD,EAAE,SAASc,GAAK,OAAOlE,EAAKoD,EAAEc,EAAEigC,IAAA,CAAA,CAAA,EAGrCnkC,EAAKunC,KAAO3nC,GAAG2C,IAAIglC,KAAA,EAAOF,YAAY,UAAA,EACjCC,QAAQ,SAAUpjC,GAAK,OAAO/D,EAAE4kC,SAAS7gC,EAAEd,CAAA,CAAA,CAAA,EAC3CJ,EAAE,SAASkB,EAAGsC,GAAK,OAAOxG,EAAKgD,EAAEhD,EAAK8jC,OAAO/O,OAAOvuB,EAAA,CAAA,CAAA,EACpDghC,GAAG,SAAStjC,GAAK,OAAOlE,EAAKoD,EAAEc,EAAEsjC,EAAA,CAAA,CAAA,EACjCC,GAAG,SAASvjC,GAAK,OAAOlE,EAAKoD,EAAEc,EAAEigC,IAAA,CAAA,CAAA,EAEtCnkC,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAO8C,OAAQ,CACvCpiC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,QAAA,EACjB7C,KAAKrC,EAAKqC,IAAA,C,EAEjBQ,OAAS,WAQP,OAPgB5C,KAENe,OAAO,GAAA,EACZG,KAAK,QAAS,OAAA,EACdH,OAAO,MAAA,EACPG,KAAK,QAAUpB,EAAQ,cAAiB,OAAS,MAAA,EALtCE,I,EASlBkF,OAAS,CACPC,MAAO,WACMnF,KACNuC,OAAO,MAAA,EACPrB,KAAK,IAAK,SAAS+C,GAClB,OAAQnE,EAAQ,cAAiBC,EAAKunC,KAAKrjC,EAAE6wB,MAAA,EAAU/0B,EAAKonC,KAAKljC,EAAE6wB,MAAA,C,GAEpExvB,MAAM,OAAQ,SAASrB,GACtB,OAAOnE,EAAQqlC,cAAgBlhC,EAAEK,MAAMsX,KAAO,M,GAE/CtW,MAAM,eAAgB,SAASrB,GAC9B,OAAOnE,EAAQqlC,cAAgBlhC,EAAEK,MAAMuX,QAAU,M,GAElDvW,MAAM,SAAU,SAASrB,GACxB,OAAOA,EAAEK,MAAMqX,M,IAGvB8rB,KAAO,WACLznC,KAAKiO,OAAA,C,KAKXlO,EAAK6E,MAAM,aAAc7E,EAAKokC,OAAO+C,WAAY,CAC/CriC,SAAW,SAAUzC,GACnB,IAAI8kC,EAAahnC,EAAE+K,QAAQlL,EAAKqC,KAAM,SAAUslC,GAC9C,OAAOxnC,EAAEwnC,EAAU5S,MAAA,EACdluB,IAAK,SAAU3E,EAAO2jB,GACrB,MAAO,CAAE7iB,EAAG6iB,EAAOziB,EAAGlB,EAAMiiC,KAAM5/B,MAAOojC,EAAUpjC,MAAMqX,MAAA,C,GAE1D5W,OAAQ,SAAU9C,EAAO2jB,GAGxB,OAAmB,OAAZ3jB,EAAMkB,IACLyiB,EAAQ,EAAI,GAA0C,OAArC8hB,EAAU5S,OAAOlP,EAAQ,GAAGse,QAC7Cte,EAAQ,GAAK8hB,EAAU5S,OAAOpzB,QAA+C,OAArCgmC,EAAU5S,OAAOlP,EAAQ,GAAGse,K,GAE7EjiC,MAAA,C,GAGP,OAAOjC,KAAKiF,UAAU,YAAA,EACjB7C,KAAK8kC,CAAA,C,EAEZtkC,OAAS,WAUP,OATgB5C,KAGXe,OAAO,GAAA,EACPG,KAAK,QAAS,WAAA,EACdH,OAAO,QAAA,EAAU2D,QAAQ,kBAAmB,CAAA,CAAA,EAC5CxD,KAAK,IAAK,GAAA,EACVA,KAAK,eAAgB,CAAA,EAPVlB,I,EAWlBkF,OAAS,CACPC,MAAO,WACMnF,KACNuC,OAAO,QAAA,EACPrB,KAAK,KAAM,SAAU+C,GACpB,OAAOlE,EAAKgD,EAAEhD,EAAK8jC,OAAO/O,OAAO7wB,EAAElB,EAAA,C,GAEpC7B,KAAK,KAAM,SAAU+C,GACpB,OAAOlE,EAAKoD,EAAEc,EAAEd,CAAA,C,GAEjBjC,KAAK,SAAU,SAAU+C,GACxB,OAAOA,EAAEK,K,IAIjBmjC,KAAO,WACLznC,KAAKiO,OAAA,C,KAKXlO,EAAK6E,MAAM,QAAS7E,EAAKokC,OAAOC,MAAO,CACrCv/B,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,QAAA,EACjB7C,KAAK,CAAC,EAAA,C,EAEbQ,OAAS,WAEP,IAIM+kC,EACAC,EACApnC,EAEA+kC,EAyCN,OA9CIvlC,KAAK,GAAGygB,WAAWonB,cAAA,IACjBF,EAAgB5nC,EAAKqC,KAAKV,OAC1BkmC,EAAY9nC,EAAQ6mC,iBACpBnmC,EAAUV,EAAQimC,iBAElBR,EARMvlC,KAQc4C,OAAO,KAAA,EAAO8B,QAAQ,eAAgB,CAAA,CAAA,GAElD3D,OAAO,MAAA,EACd2D,QAAQ,gBAAiB,CAAA,CAAA,EACzBxD,KAAK,UAAWymC,EAAgB,GAAK7nC,EAAQ6mC,gBAAA,EAC7CzlC,KAAK,KAAM,CAAA,EACXA,KAAK,KAAM,CAAA,EAEhBqkC,EAAYxkC,OAAO,MAAA,EACd2D,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAK,SAAUpB,EAAQ6mC,gBAAA,EACvBzlC,KAAK,KAAM,CAAA,EACXA,KAAK,KAAM,CAAA,EAEhBqkC,EAAYxkC,OAAO,MAAA,EACd2D,QAAQ,eAAgB,CAAA,CAAA,EACxBxD,KAAK,IAAKV,CAAA,EACVU,KAAK,IAAM0mC,EAAY,CAAA,EAE5B1nC,EAAEia,QAAQpa,EAAKqC,KAAM,SAAS6B,EAAGsC,GAC/Bg/B,EAAYxkC,OAAO,MAAA,EACd2D,QAAQ,iBAAkB6B,EAAG,CAAA,CAAA,EAC7B2B,KAAKjE,EAAEyhB,KAAA,EACPpgB,MAAM,OAAQrB,EAAE6jC,UAAA,EAChB5mC,KAAK,IAAKV,CAAA,EACVU,KAAK,IAAM0mC,GAAarhC,EAAI,GAAOqhC,EAAY,CAAA,EAEpDrC,EAAYxkC,OAAO,MAAA,EACd2D,QAAQ,iBAAkB6B,EAAG,CAAA,CAAA,EAC7BjB,MAAM,OAAQrB,EAAE6jC,UAAA,EAChB5mC,KAAK,IAAM0mC,GAAarhC,EAAI,GAAOqhC,EAAY,CAAA,C,GAtC5C5nC,KAyCJ4C,OAAO,GAAA,EACR1B,KAAK,QAAS,YAAA,EACdH,OAAO,MAAA,EACPG,KAAK,KAAM,CAAA,EA5CNlB,KA8CJ4C,OAAO,GAAA,EAAK8B,QAAQ,SAAU,CAAA,CAAA,GA9C1B1E,I,EAmDdkF,OAAS,CACPC,MAAO,WACL,IAAI4iC,EAAO/nC,KAER+nC,EAAKrjC,QAAQ,QAAA,GACdxE,EAAEia,QAAQpa,EAAKqC,KAAM,SAAS6B,EAAGsC,GAC/BwhC,EAAKhnC,OAAO,QAAA,EAAU2D,QAAQ,kBAAmB,CAAA,CAAA,EAC5CxD,KAAK,IAAK,CAAA,EACVA,KAAK,SAAU+C,EAAEK,MAAMqX,MAAA,EACvBza,KAAK,eAAgB,CAAA,C,IAIhCumC,KAAO,WACLznC,KAAKiO,OAAA,C,KA0KXlO,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAEzBxjC,UAAW,SAAUT,GACnB,IAAIrC,EAAOC,KA0CX,OAxCIoC,IAASrC,EAAKqC,OAEhBrC,EAAK8jC,OAASzhC,EAAK,MAEnBrC,EAAKqC,KAAO,GAEZlC,EAAEkC,EAAK,KAAA,EAAUwE,IAAI,SAAU40B,EAAKyJ,GAGlCllC,EAAKqC,KAAK2F,KAAKyzB,CAAA,C,GACdv5B,MAAA,EAEHlC,EAAKqC,KAAK+X,QAAQ,SAASpX,GAAKA,EAAE+xB,OAAS50B,EAAE0G,IAAI7D,EAAE+xB,OAAQ,SAASkT,GAAM,MAAO,CAAC7kC,EAAG6kC,EAAK9D,KAAM8D,CAAA,CAAA,CAAA,CAAA,CAAA,EAI7FjoC,EAAKD,QAAQqlC,gBACFxlC,GAAGsoC,OAAOC,MAAA,EACjBpT,OAAO,SAAU7wB,GAAK,OAAOA,EAAE6wB,MAAA,CAAA,EAE9B/0B,EAAKqC,IAAA,EAEXrC,EAAKqC,KAAK+X,QAAQ,SAASpX,GAAK7C,EAAEia,QAAQpX,EAAE+xB,OAAQ,SAASkT,GAC3D,OAAO9nC,EAAEC,OAAO6nC,EAAK,CAAC9D,KAAM8D,EAAI7kC,EAAI6kC,EAAIT,EAAA,CAAA,C,MAK5CxnC,EAAKgD,EAAEiC,OAAOrF,GAAG8G,OAAO1G,EAAK8jC,OAAO/O,OAAQ,SAAS7wB,GAAI,OAAOA,CAAA,CAAA,CAAA,EAGhElE,EAAKoD,EAAE6B,OAAO,CAAC,MAAO,OAAO4B,IAAI,SAAUuhC,GACzC,IAAIC,EAAWroC,EAAKsE,QAAQ8jC,GAC5B,OAAQjoC,EAAEmoC,YAAYD,CAAA,EAClBzoC,GAAGwoC,GAAUjoC,EAAE0G,IAAI7G,EAAKqC,KAAM,SAASkmC,GACrC,OAAO3oC,GAAGwoC,GAAUG,EAAExT,MAAA,CAAA,C,GAFMsT,C,IAIhCG,KAAA,GAGCnmC,C,OC3eb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,WAAY,CACvCN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAsBPwoC,GArBJ1oC,EAAUA,GAAW,GAErBI,EAAEulB,aAAa3lB,EAAS,CACtBkkB,WAAa,CAAA,EACbM,UAAY,IACZF,WAAa,GACb4I,YAAc,CAAA,EACd7I,iBAAmB,CAAA,EACnBuL,wBAA0B,CAAA,EAC1B+Y,YAAc,CAAA,EACdxb,cAAgB,CAAA,EAChByb,yBAA2B,GAC3BC,uBAAyB,GACzBzb,gBAAkB,CAAA,EAClB0b,OAAS,EACTC,mBAAqB,aACrBC,aAAe,GACfC,aAAe,GACf1kB,WAAe,CAAA,EACfsL,oBAAqB,CAAA,C,GAEL7vB,EAAQukB,YACtBL,EAAalkB,EAAQkkB,WACrB4kB,EAAS9oC,EAAQ8oC,OACjBC,EAAqB/oC,EAAQ+oC,mBAYjC,SAASC,IACP,OAAO/oC,EAAKipC,OAAOC,UAAA,C,CAGrB,SAASC,EAAa3F,GACpB,IAAI4F,EAAO,GACX,IACEA,EAAO5F,EAAKgB,QAAA,C,CACZ,MAAM6E,I,QAGND,EAAOA,GAAQ,E,CAEjB,OAAOA,C,CAmBT,SAASE,EAAUtlC,GACjB,OAAO,SAAUulC,EAAe/iC,EAAGgjC,EAAGtE,GACpC,OAAOlhC,EAAGR,KAAKvD,KAAMspC,EAAc,GAAI/iC,EAAGgjC,EAAGtE,CAAA,C,EAIjD,SAASuE,EAAQ5jB,EAAO6jB,GACtB,IAAIC,EAAkBvjC,KAAKogB,KAAKxmB,EAAKqC,KAAKglB,KAAK1lB,OAAOknC,CAAA,EAClDe,EAAcxjC,KAAKogB,MAAMX,EAAQ,GAAG8jB,CAAA,EACtC,MAA8B,eAAvBb,GAAwCY,EAAab,EAAU9oC,EAAQipC,eAAiBnjB,EAAQgjB,IAClG9oC,EAAQipC,aAAgBU,EAAab,IAAUe,EAAa,E,CAGrE,SAASC,EAAQhkB,GACf,IAAI8jB,EAAkBvjC,KAAKogB,KAAKxmB,EAAKqC,KAAKglB,KAAK1lB,OAAOknC,CAAA,EACtD,MAA8B,eAAvBC,EAAsC1iC,KAAK+P,MAAM0P,EAAQgjB,CAAA,EAC5DziC,KAAK+P,MAAM0P,EAAM8jB,CAAA,C,CA8TvB,SAASG,IACP,IAAIjE,EAAgBjmC,GAAGyG,IAAIrG,EAAKokC,OAAO2F,OAAO7kC,UAAU,iBAAA,EAAmB,GAAI,SAAUs+B,GACvF2F,EAAa3F,CAAA,EAAMvf,EAAa,QAAU,S,GAG5C,OAAO7d,KAAKC,KAAK4d,EAAa,EAAI,IAAOlkB,EAAQwkB,UAAWshB,GAAiB,CAAA,C,CAG/E,SAASmE,IACP,OAAOjqC,EAAQotB,gBAAkB,EAAKlJ,EAAalkB,EAAQ4oC,yBAA2B5oC,EAAQ6oC,sB,CAGhG,SAAStC,IACP,IAAI2D,EAAWlqC,EAAQskB,WACnB6lB,EAAaF,EAAA,EAUbG,GATAlmB,GACW,EAAT4kB,GAAY7oC,EAAKipC,OAAOhkC,OAAOrF,GAAGqD,MAAMjD,EAAKqC,KAAKglB,KAAK1lB,OAASknC,CAAA,CAAA,EACpE7oC,EAAKipC,OAAOmB,gBAAgB,CAAC,EAAGpqC,EAAKa,GAAIopC,EAAS,CAAA,GAElDjqC,EAAKipC,OAAOmB,gBAAgB,CAAC,EAAGpqC,EAAKY,GAAIqpC,EAAS,CAAA,EAIpDjqC,EAAK6E,MAAM,QAAA,EAAUvC,KAAKtC,EAAKqC,IAAA,EACdynC,EAAA,GACb7lB,GACCwkB,GACDzoC,EAAKokC,OAAOiG,KAAKn8B,OAAA,EACjBlO,EAAKokC,OAAOkG,YAEZtqC,EAAKokC,OAAOkG,UAAUp8B,OAAA,EACtBlO,EAAKkC,MAAMe,MAAM,CAAC,EAAGmD,KAAKC,IAAIrG,EAAKY,EAAIioC,EAASsB,EAAaD,EAAarB,EAAS9oC,EAAQipC,aAAc,CAAA,EAAA,EACzGhpC,EAAKokC,OAAOiG,OAJU7oC,UAAU2oC,EAAY,CAAA,GAO9CnqC,EAAKokC,OAAOkG,UAAUp8B,OAAA,EACtBlO,EAAKkC,MAAMe,MAAM,CAAC,EAAGmD,KAAKC,IAAIrG,EAAKa,EAAEgoC,EAASsB,EAAaD,EAAarB,EAAS9oC,EAAQipC,aAAc,CAAA,EAAA,EACvGhpC,EAAKokC,OAAOiG,KAAK7oC,UAAU,EAAGxB,EAAKa,EAAEgoC,EAASsB,CAAA,E,CA7ZlDnqC,EAAKokC,OAAS,CACZmG,YAAcvqC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,EAC5D0lC,KAAOrqC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,OAAQ,CAAA,CAAA,EAC7ColC,OAAS/pC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EACjD2lC,UAAWtqC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAS,CAAA,CAAA,C,EAGpD3E,EAAKipC,OAASrpC,GAAGwE,MAAMomC,QAAA,EACvBxqC,EAAKkC,MAAQtC,GAAGwE,MAAMC,OAAA,EAqDtBrE,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAO2F,OAAQ,CACvCjlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAEhDwD,EAAQoqB,EAAMvxB,OAAO,MAAA,EAMzB,OALAmH,EAAKnH,OAAO,OAAA,EACZmH,EAAKnH,OAAO,OAAA,EACP2D,QAAQ,iBAAkB,CAAA,CAAA,EAC1BxD,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,oBAAA,EAClBoxB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IACIqlC,EAAYxmB,EAAa,SAAW,QACpCtiB,EAASsiB,EAAa,QAAU,SAChCkmB,EAAaL,EAAA,EASbY,GAZOzqC,KAKNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IACIwgB,EAAOoD,EAAQ5jB,EADF5B,EAAajkB,EAAKY,EAAIZ,EAAKa,CAClB,EACtBsjC,EAAO0F,EAAQhkB,CAAA,EACnB,OAAO5B,EAAa,CAACoiB,EAAMrmC,EAAKipC,OAAO9E,CAAA,GAAS,CAACnkC,EAAKipC,OAAO9E,CAAA,EAAOkC,E,IAG1D0C,EAAA,EAAiB,GACzB4B,EAAQ1mB,EAAc8kB,EAAA,EAAiB,EAAM/oC,EAAKa,EAAEgoC,EAASsB,EAAW,EAExEhiC,EAfOlI,KAeKuC,OAAO,MAAA,EAMvB2F,EAAK3F,OAAO,OAAA,EAAS2F,KAAK,SAASohC,GACjC,OAAOvpC,EAAKgE,GAAG2hB,MAAM4jB,EAAc,EAAA,C,GAGrCphC,EAAK3F,OAAO,OAAA,EACP2F,KATL,SAAmByiC,GACjB,OAAO5qC,EAAKgE,GAAG2hB,MAAMilB,EAAU,EAAA,C,CAQvB,EACLzpC,KAAK,IAAK,SAAU+C,EAAGsC,GAClBxD,EAAKjD,EAAQ,oBAA8B,IAANyG,EAAW,EAAKA,IAAOxG,EAAKqC,KAAKglB,KAAK1lB,OAAS,EAAM,CAAC,EAAI,EAAG,EACtG,OAAO+oC,EAAQ1nC,C,GAEhB7B,KAAK,IAAKwpC,CAAA,EACVxpC,KAAK,KAAM,WACV,MAAO,CAAA,GAAoBlB,KAAK4qC,sBAAA,EAA0BV,EAAc,SAAW,E,GAEpFxlC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKspC,EAAW1B,EAAA,CAAA,EAChB5nC,KAAKQ,EAAQwoC,CAAA,EACbxlC,QAAQ,eAAe,SAAST,EAAGsC,GAAK,OAAQzG,EAAQ,qBAAwB,EAAQ,IAANyG,GAAWA,IAAOxG,EAAKqC,KAAKglB,KAAK1lB,OAAS,EAAA,CAAA,EAC5HR,KAAK,cAAe8iB,EAAa,QAAU,QAAA,C,KAKtDjkB,EAAK6E,MAAM,YAAa7E,EAAKokC,OAAOkG,UAAW,CAC7CxlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAEhDwD,EAAQoqB,EAAMvxB,OAAO,MAAA,EAMzB,OALAmH,EAAKnH,OAAO,OAAA,EACZmH,EAAKnH,OAAO,OAAA,EACP2D,QAAQ,iBAAkB,CAAA,CAAA,EAC1BxD,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,oBAAA,EAClBoxB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IACIqlC,EAAYxmB,EAAa,SAAW,QACpCtiB,EAASsiB,EAAa,QAAU,SAChCkmB,EAAaL,EAAA,EASbY,GAZOzqC,KAKNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IACIwgB,EAAOoD,EAAQ5jB,EADF5B,EAAajkB,EAAKY,EAAIZ,EAAKa,CAClB,EACtBsjC,EAAO0F,EAAQhkB,CAAA,EACnB,OAAO5B,EAAa,CAACoiB,EAAMrmC,EAAKipC,OAAO9E,CAAA,GAAS,CAACnkC,EAAKipC,OAAO9E,CAAA,EAAOkC,E,IAG1D0C,EAAA,EAAiB,GACzB4B,EAAQ1mB,EAAc8kB,EAAA,EAAiB,EAAM/oC,EAAKa,EAAEgoC,EAASsB,EAAW,EAbjElqC,KAeKuC,OAAO,MAAA,EAMlBA,OAAO,OAAA,EACP2F,KALL,SAAmByiC,GACjB,OAAOA,EAAU,E,CAIT,EACLzpC,KAAK,IAAKupC,CAAA,EACVvpC,KAAK,IAAKwpC,CAAA,EACVhmC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKspC,EAAW1B,EAAA,CAAA,EAChB5nC,KAAKQ,EAAQwoC,CAAA,EACbhpC,KAAK,cAAe8iB,EAAa,QAAU,QAAA,C,KAKtDjkB,EAAK6E,MAAM,OAAQ7E,EAAKokC,OAAOiG,KAAM,CACnCvlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,SAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAE/C,OADA4tB,EAAMvxB,OAAO,MAAA,EAAQ2D,QAAQ,SAAU,CAAA,CAAA,EAChC4tB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IACIqlC,EAAYxmB,EAAa,SAAW,QACpCtiB,EAASsiB,EAAa,QAAU,SAEpC,SAAS6mB,EAAS1/B,EAAM2/B,GACtB,OAAO/qC,EAAKkC,MAAMlC,EAAKgE,GAAG9B,MAAM6oC,GAAU3/B,CAAA,CAAA,C,CAM5C,IAAI4/B,EAAgBjC,EAAA,EAAiB,EACjCkC,EAAgBjrC,EAAKkC,MAAMe,MAAA,EAAQ,GAUnCioC,GAtBSjrC,KAeNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACzC,IACIwgB,EAAOoD,EAAQ5jB,EADF5B,EAAajkB,EAAKY,EAAIZ,EAAKa,CAClB,EACtBsjC,EAAO0F,EAAQhkB,CAAA,EACnB,OAAO5B,EAAa,CAACoiB,EAAMrmC,EAAKipC,OAAO9E,CAAA,GAAS,CAACnkC,EAAKipC,OAAO9E,CAAA,EAAOkC,E,IAnBzDpmC,KAsBMuC,OAAO,SAAA,EACrBrB,KAAKspC,EAAW1B,EAAA,CAAA,EAChB5nC,KAAKQ,EAAQspC,EAAgBlrC,EAAQipC,aAAe,CAAA,EACpDxnC,UAAU,EAAGyiB,EAAa,EAAI,CAACgnB,EAAgBlrC,EAAQipC,aAAe,CAAA,EACtErkC,QAAQ,eAAgB,CAAC5E,EAAQ4vB,uBAAA,GAYlC4C,GAVAxyB,EAAQqkB,kBACV8mB,EACKvmC,QAAQ,OAAO,CAAA,CAAA,EACfxD,KAAK,mBAAmB,SAAUgqC,GACjC,OAAOnrC,EAAKgE,GAAGonC,UAAUD,EAAc,EAAA,EAAM,MAAQ,K,GACpDxmC,QAAQ,mBAAmB,SAAUwmC,GACtC,OAAOnrC,EAAKgE,GAAGonC,UAAUD,EAAc,EAAA,C,GAlClClrC,KAsCMiF,UAAU,YAAA,EACxB7C,KAAKzC,GAAGqD,MAAMjD,EAAKgE,GAAG9B,MAAMP,MAAA,CAAA,GAKjC,SAAS0pC,EAAYrnC,GACnB,OAAO,SAAU6hB,EAAO9gB,EAAIykC,GAC1B,OAAOF,EAAUtlC,CAAA,EAAIR,KAAKvD,KAAMD,EAAKqC,KAAKglB,KAAKmiB,GAAI3jB,EAAO2jB,CAAA,C,EAL9DjX,EAAMmV,KAAA,EAAOx5B,OAAA,EASbqkB,EAAM/wB,UAAU6pC,EAAY,SAAUjgC,EAAMya,GAEtCylB,EAAc1rC,GAAGy+B,IAAIz+B,GAAGqD,MADVghB,EAAa4B,EAAQA,EAAQ,CACb,EAAc,SAAU0lB,GACxD,OAAOT,EAAS1/B,EAAMmgC,CAAA,C,GAExB,OAAOtnB,EAAa,CAACqnB,EAAa,GAAK,CAAC,EAAG,CAAEA,E,IAG/C,IAkBME,EAlBFC,EAAYlZ,EAAMmZ,MAAA,EACjB1qC,OAAO,GAAA,EAAK2D,QAAQ,YAAa,CAAA,CAAA,EAqCtC,SAASgnC,EAASnI,EAAMoI,EAAWC,EAAYC,EAAeC,GAC5D,IAIIC,EAAaJ,EAFDzC,EAAa3F,CAAA,EAAMvf,EAAa,QAAU,UAFvC,GAMfgoB,EAAWL,EANI,IAMSI,EAAa,EAAI,CAAC,GAM9C,OALApsC,GAAG4C,OAAOghC,CAAA,EAELriC,KAAK0qC,EAAYG,EAAaF,EAAgBC,CAAA,EAE9CpnC,QAAQ,cAAeqnC,CAAA,EACrBC,C,CAjDTR,EAAUzqC,OAAO,MAAA,EAAQ2D,QAAQ,MAAO,CAAA,CAAA,EACxC8mC,EAAUzqC,OAAO,MAAA,EAAQ2D,QAAQ,YAAa,CAAA,CAAA,EACzCxD,KAAK,qBAAsB8iB,EAAa,SAAW,SAAA,EACnD9iB,KAAK,cAAe8iB,EAAa,MAAQ,QAAA,EAE9CsO,EAAM/vB,OAAO,MAAA,EACRrB,KAAKspC,EAAW1B,EAAA,CAAA,EAChBmD,WAAA,EACAC,SAAS,GAAA,EACThrC,KAAKQ,EAAQ0pC,EAAYP,CAAA,CAAA,EACzB3pC,KAAK,OAAQ,SAAU+C,EAAGsC,GACzB,OAAOxG,EAAKgE,GAAGO,MAAMiC,E,GAGvBzG,EAAQktB,cAENue,EAAU5rC,GAAG4C,OAAO,MAAA,EACnBxB,OAAO,KAAA,EACP2D,QAAQ,cAAe,CAAA,CAAA,EACvBY,MAAM,aAAc,QAAA,EAEzBgtB,EACKrxB,GAAG,YAAamqC,EAAY,SAAUjgC,EAAM64B,GAC3C,OAAOuH,EACFjmC,MAAM,aAAc,SAAA,EACpB4C,KAAKnI,EAAKgE,GAAGooC,WAAWnI,GAAKxtB,MAAMxW,KAAMyB,SAAA,CAAA,C,IAE/CR,GAAG,YAAa,WACf,OAAOsqC,EACFjmC,MAAM,MAAQ3F,GAAGuO,MAAMk+B,MAAQ,GAAM,IAAA,EACrC9mC,MAAM,OAAS3F,GAAGuO,MAAMm+B,MAAQ,GAAM,IAAA,C,GAE5CprC,GAAG,WAAY,WAAc,OAAOsqC,EAAQjmC,MAAM,aAAc,QAAA,CAAA,CAAA,GAoBlExF,EAAQmtB,eACXqF,EAAM/vB,OAAO,YAAA,EAAc2F,KAAKkjC,EAAY,SAAUjgC,EAAMya,GACtD,OAAO7lB,EAAKgE,GAAG4hB,WAAWC,GAAOza,CAAA,C,IAElCjK,KAAK,IAAK8iB,EAAaonB,EAAY,SAAUjgC,EAAMya,GAClD,OAAO8lB,EAAS1rC,KAAM6qC,EAAS1/B,EAAMya,CAAA,EAAQ,cAAe,QAAS,KAAA,C,GAClEmlB,CAAA,EACJ7pC,KAAK,IAAK8iB,EAAa+mB,EAAgBK,EAAY,SAAUjgC,EAAMya,GAC9DlkB,EA/GH3B,EAAKkC,MAAM/B,EAAEk+B,IAAIr+B,EAAKusC,YA+GInhC,CA/GQ,CAAA,CAAA,EAgHnC,OAAOzJ,EAASgqC,EAAS1rC,KAAM0B,EAAQ,qBAAsB,WAAY,SAAA,C,QAOvF3B,EAAK6E,MAAM,eAAgB7E,EAAKokC,OAAOmG,YAAa,CAClDzlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,oBAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,oBAAqB,CAAA,CAAA,EAM1D,OAJA4tB,EAAMvxB,OAAO,MAAA,EAAQ2D,QAAQ,uBAAwB,CAAA,CAAA,EAChDxD,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,oBAAA,EAElBoxB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IAaM+C,EAQAuiC,EACAC,EApBF6B,EAAkBxC,EAAA,EAFX/pC,KAKNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IACIwgB,EAAOoD,EAAQ5jB,EADF5B,EAAajkB,EAAKY,EAAIZ,EAAKa,CAClB,EACtBsjC,EAAO0F,EAAQhkB,CAAA,EACnB,OAAO5B,EAAa,CAACoiB,EAAQrmC,EAAKY,EAAEioC,EAAU2D,EAAiBxsC,EAAKipC,OAAO9E,CAAA,GAAS,CAACnkC,EAAKipC,OAAO9E,CAAA,EAAM,E,IAGrGpkC,EAAQotB,kBACNhlB,EAbKlI,KAaOuC,OAAO,MAAA,EAClB2F,KAAKmhC,EAAU,SAASplC,GAIvB,OAHYlE,EAAKgE,GAAG4hB,WAAWxI,OAAO,SAAUlb,EAAO8B,GACrD,OAAO9B,EAAQ8B,EAAGE,CAAA,C,EACjB,CAAA,EACU4hB,QAAQ,CAAA,EAAK,G,IAG5B4kB,EAAQ3B,EAAA,EAAiB,EACzB4B,EAAQ1mB,EAAc8kB,EAAA,EAAiB,EAAMyD,EAAgB,EAEjErkC,EAAKhH,KAAK,IAAKupC,CAAA,EACVvpC,KAAK,IAAKwpC,CAAA,EAEX1mB,IAAY9b,EAAKhH,KAAK,cAAc,QAAA,C,KAgDhDnB,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAEzBiG,YAAc,SAAUnhC,GACtB,OAAOnL,KAAK+D,GAAG9B,MAAM2E,IAAI,SAAU7C,GACjC,OAAOA,EAAGoH,CAAA,C,IAGdtI,UAAY,SAAUT,GACpB,IAAIrC,EAAOC,KAEX,GAAIoC,IAASrC,EAAKqC,KAAM,CA8BtB,GA7BAlC,EAAEuD,SAASrB,EAAM,CACf2B,GAAK,GACLoM,SAAW/N,EAAKA,KAAKV,OACrBoiB,YAAc,C,GAEhB/jB,EAAKgE,GAAK7D,EAAEuD,SAASrB,EAAK2B,GAAI,CAC5B2hB,MAAQxlB,EAAEsI,SAAS,OAAA,EACnBvG,MAAQ/B,EAAEsI,SAAS,OAAA,EACnB2jC,WAAajsC,EAAEsI,SAAS,OAAA,EACxBlE,MAAQ,CAAC,WACT6mC,UAAW,WAAa,MAAO,CAAA,CAAA,C,GAEjCjrC,EAAEuD,SAASrB,EAAK2B,GAAI,CAClB4hB,WAAavjB,EAAK2B,GAAG4hB,U,GAElBzlB,EAAEuW,QAAQ1W,EAAKgE,GAAG9B,KAAA,IACrBlC,EAAKgE,GAAG9B,MAAQ,CAAClC,EAAKgE,GAAG9B,QAEtB/B,EAAEuW,QAAQ1W,EAAKgE,GAAG4hB,UAAA,IACrB5lB,EAAKgE,GAAG4hB,WAAa,CAAC5lB,EAAKgE,GAAG4hB,aAE3BzlB,EAAEuW,QAAQ1W,EAAKgE,GAAGooC,UAAA,IACrBpsC,EAAKgE,GAAGooC,WAAa,CAACpsC,EAAKgE,GAAGooC,aAE5BjsC,EAAEuW,QAAQ1W,EAAKgE,GAAGO,KAAA,IACpBvE,EAAKgE,GAAGO,MAAQ,CAACvE,EAAKgE,GAAGO,QAIA,EAAvBvE,EAAKgE,GAAG9B,MAAMP,OAAY,CAC5B,GAAI,CAACxB,EAAEuW,QAAQ1W,EAAKgE,GAAG8pB,UAAA,GAAe9tB,EAAKgE,GAAG8pB,WAAWnsB,SAAW3B,EAAKgE,GAAG9B,MAAMP,OAChF,MAAM,IAAI0G,MAAM,kGAAA,EAElB,GAAIrI,EAAKgE,GAAG4hB,WAAWjkB,SAAW3B,EAAKgE,GAAG9B,MAAMP,OAC9C,MAAM,IAAI0G,MAAM,gFAAA,C,CAIpB,IAAIokC,EAAiB,SAAUrhC,GAC7B,OAAOjL,EAAEk+B,IAAIr+B,EAAKusC,YAAYnhC,CAAA,CAAA,C,EAG5BnI,EAAQZ,EAAK2B,GAAGkiB,eAAiB7jB,EAAK2B,GAAGkiB,eAAe7jB,EAAKA,IAAA,EAAMzC,GAAGyG,IAAIhE,EAAKA,KAAMoqC,CAAA,EAIrFC,GAHJ1sC,EAAKkC,MAAM+C,OAAO,CAAC,EAAGhC,EAAA,EAGN9C,EAAEkC,EAAKA,IAAA,GAQvBqqC,GAJEA,EADGrqC,EAAKqlB,SAKEglB,EAJEA,EAAU9S,QAAQ6S,EAAgB,CAAC,OAAA,GAI3B5lC,IAAI,SAAU3C,EAAGsC,GACrC,MAAO,CAACtC,EAAGsC,EAAI,E,GAIbnE,EAAK2B,GAAGgB,SACV0nC,EAAYA,EAAU1nC,OAAO,SAAUoG,EAAM5E,GAC3C,OAAOnE,EAAK2B,GAAGgB,OAAOoG,EAAK,GAAI5E,CAAA,C,IAKnCnE,EAAKA,KAAOqqC,EAAUxqC,MAAA,EAEtBG,EAAKglB,KAAOhlB,EAAKA,KAAKkG,OAAOlG,EAAK0hB,YAAc,GAAK1hB,EAAK+N,SAAU/N,EAAK0hB,YAAc1hB,EAAK+N,QAAA,EAE5FpQ,EAAKipC,OAAOhkC,OAAOrF,GAAGqD,MAAMZ,EAAKglB,KAAK1lB,MAAA,CAAA,EAEtC3B,EAAKqC,KAAOA,C,CAGd,OAAOA,C,OCzhBb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,mBAAoB,CAC/CN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAQPmjC,GAPJrjC,EAAUA,GAAW,GAErBI,EAAEulB,aAAa3lB,EAAS,CACtB4D,MAAO,CAAA,EACPC,MAAO,CAAA,C,GAGI,CACXvD,IAAK,GACLG,MAAO,GACPF,OAAQ,GACRC,KAAM,E,GAuER,SAAS+lC,IAEPtmC,EAAKgD,EAAEonC,gBAAgB,CAAC,EAAGpqC,EAAKY,GAAI,EAAA,EACpCZ,EAAKoD,EAAEH,MAAM,CAACjD,EAAKa,EAAG,EAAA,EAEjBd,EAAQmD,UACXlD,EAAKmD,KAAKC,EAAEC,YAAY,EAAA,EAAIC,cAAc,CAACtD,EAAKY,CAAA,EAGlDZ,EAAKuD,SAASP,EACTxB,UAAU,EAAGxB,EAAKoD,EAAEH,MAAA,EAAQ,EAAA,EAC5BO,KAAKxD,EAAKmD,KAAKH,CAAA,EAEpBhD,EAAKuD,SAASH,EACTI,KAAKxD,EAAKmD,KAAKC,CAAA,EAGpBxD,GAAG4C,OAAO,KAAA,EAAOA,OAAO,GAAA,EAAKrB,KAAK,YAAa,aAAeiiC,EAAO7iC,KAAO,IAAM6iC,EAAO/iC,IAAM,GAAA,C,CArFjGL,EAAKS,QAAQ2iC,CAAA,EAEbpjC,EAAKgD,EAAIpD,GAAGwE,MAAMomC,QAAA,EAElBxqC,EAAKoD,EAAIxD,GAAGwE,MAAMC,OAAA,EAElBrE,EAAKuD,SAAW,CACdP,EAAIhD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,EAClDvB,EAAIpD,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,C,EAGpD3E,EAAKmD,KAAO,CACVH,EAAIpD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKgD,CAAA,EAAGsC,OAAO,QAAA,EAAUE,WAAW,EAAA,EAC5DpC,EAAIxD,GAAG2C,IAAI8C,KAAA,EAAOjB,MAAMpE,EAAKoD,CAAA,EAAGkC,OAAO,MAAA,EAAQyhC,MAAM,CAAA,EAAGvhC,WAAWzF,EAAQ4sC,kBAAA,C,EAGxE5sC,EAAQ4D,OACX3D,EAAKuD,SAASP,EAAEuC,MAAM,UAAW,MAAA,EAG9BxF,EAAQ6D,OACX5D,EAAKuD,SAASH,EAAEmC,MAAM,UAAW,MAAA,EAGnCvF,EAAKokC,OAAS,CACZiG,KAAOrqC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,OAAQ,CAAA,CAAA,C,EAG/C3E,EAAK6E,MAAM,OAAQ7E,EAAKokC,OAAOiG,KAAM,CACnCvlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,MAAA,EACjB7C,KAAKA,CAAA,C,EAEZQ,OAAS,WAOP,OANU5C,KAENe,OAAO,GAAA,EACNG,KAAK,QAAS,KAAA,EACdH,OAAO,MAAA,EAJFf,I,EAQZkF,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAO,WAEO,EAATpF,EAAKa,GADGZ,KAEJuC,OAAO,MAAA,EACPrB,KAAK,IAAK,SAAU+C,GACnB,OAAOlE,EAAKgD,EAAEkB,EAAE,KAAA,C,GAEjB/C,KAAK,IAAK,SAAU+C,GACnB,OAAOA,EAAE,OAAYlE,EAAKoD,EAAEc,EAAE,KAAA,C,GAE/B/C,KAAK,QAASnB,EAAKgD,EAAEkmC,UAAA,CAAA,EACrB/nC,KAAK,SAAU,SAAU+C,GACxB,OAAOA,EAAE,OAAalE,EAAKa,EAAIb,EAAKoD,EAAEc,EAAE,KAAA,C,GAEzC/C,KAAK,OAAQ,SAAU+C,GACtB,OAAOA,EAAE,K,OA2BvBlE,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAEzBxjC,UAAW,SAAUT,GACnB,IAAIrC,EAAOC,KAsBX,OApBIoC,IAASrC,EAAKqC,OAEZslC,EACexnC,EAAE0G,IAAIxE,EAAM,OAAA,EACdlC,EAAE0G,IAAIxE,EAAM,OAAA,EAG7BrC,EAAKqC,KAAO,GAEZA,EAAK+X,QAAQ,SAAUhP,GACrBpL,EAAKqC,KAAK2F,KAAKoD,CAAA,C,GAGjBpL,EAAKgD,EAAEiC,OAAO9E,EAAE0G,IAAI7G,EAAKqC,KAAM,OAAA,CAAA,EAC1B+nC,gBAAgB,CAAC,EAAGpqC,EAAKY,EAAA,EAE9BZ,EAAKoD,EAAE6B,OAAO,CAAC,EAAG9E,EAAEqmB,KAAK5mB,GAAGyG,IAAIlG,EAAE0G,IAAI7G,EAAKqC,KAAM,OAAA,CAAA,CAAA,EAAA,EAC5CY,MAAM,CAACjD,EAAKa,EAAG,EAAA,GAGfwB,C,OCvIb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,uBAAwB,CACnDN,WAAa,WACX,IAAIE,EAAOC,KA2HX,SAASqmC,IACPtmC,EAAKipC,OAAOmB,gBAAgB,CAAC,EAAGpqC,EAAKa,GAAI,EAAG,CAAA,EAC5Cb,EAAKkC,MAAMe,MAAM,CAAC,EAAGmD,KAAKC,IAAIrG,EAAKY,EAAG,CAAA,EAAA,EACtCZ,EAAKokC,OAAOiG,KAAK7oC,UAAU,EAAG,CAAA,C,CA5HhCxB,EAAKokC,OAAS,CACZiG,KAAOrqC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,OAAQ,CAAA,CAAA,C,EAG/C3E,EAAKipC,OAASrpC,GAAGwE,MAAMomC,QAAA,EACvBxqC,EAAKkC,MAAQtC,GAAGwE,MAAMC,OAAA,EAsBtBrE,EAAK6E,MAAM,OAAQ7E,EAAKokC,OAAOiG,KAAM,CACnCvlC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,SAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAE/C,OADA4tB,EAAMvxB,OAAO,MAAA,EAAQ2D,QAAQ,SAAU,CAAA,CAAA,EAChC4tB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WAGN,SAAS0lC,EAAS1/B,EAAM2/B,GAClB6B,EAAWnhB,WAAWzrB,EAAKgE,GAAG4hB,WAAWmlB,GAAU3/B,CAAA,CAAA,EACvC,MAAbwhC,IAAkBA,EAAW,IAC5BC,EAAa7sC,EAAKkC,MAAMe,MAAA,EAAQ,GAEpC,OADgB2pC,EAASC,EAAY,G,CAN1B5sC,KAUNuC,OAAO,SAAA,EACTrB,KAAK,SAAUnB,EAAKipC,OAAOC,UAAA,CAAA,EAC3B/nC,KAAK,QAASnB,EAAKkC,MAAMe,MAAA,EAAQ,EAAA,EACjCzB,UAAU,EAAG,CAAA,EACbmD,QAAQ,OAAO,CAAA,CAAA,EACfxD,KAAK,mBAAoB,KAAA,EAE9B,IAAIoxB,EAjBStyB,KAiBMiF,UAAU,YAAA,EACxB7C,KAAKzC,GAAGqD,MAAMjD,EAAKgE,GAAG9B,MAAMP,MAAA,CAAA,EAKjC,SAAS0pC,EAAYrnC,GACnB,OAAO,SAAU6hB,EAAO9gB,EAAIykC,GAC1B,OA9CSxlC,EA8CQA,EA7ClB,SAAUulC,EAAe/iC,EAAGgjC,EAAGtE,GACpC,OAAOlhC,EAAGR,KAAKvD,KAAMspC,EAAc,GAAI/iC,EAAGgjC,EAAGtE,CAAA,C,EA4ClB1hC,KAAKvD,KAAMD,EAAKqC,KAAKglB,KAAKmiB,GAAI3jB,EAAO2jB,CAAA,EA9CpE,IAAmBxlC,C,EAyCbuuB,EAAMmV,KAAA,EAAOx5B,OAAA,EASbqkB,EAAM/wB,UAAU6pC,EAAY,SAAUjgC,EAAMya,GAI1C,MAAO,CAHWjmB,GAAGy+B,IAAIz+B,GAAGqD,MAAM4iB,CAAA,EAAQ,SAAU0lB,GAClD,OAAOT,EAAS1/B,EAAMmgC,CAAA,C,GAEH,E,IAGvB,IAAIE,EAAYlZ,EAAMmZ,MAAA,EACjB1qC,OAAO,GAAA,EAAK2D,QAAQ,YAAa,CAAA,CAAA,EAetC,SAASgnC,EAASnI,EAAMoI,EAAWC,EAAYC,EAAeC,GAC5D,IAIIC,EAAaJ,EA5FzB,SAAsBpI,GACpB,IAAI4F,EAAO,GACX,IACEA,EAAO5F,EAAKgB,QAAA,C,CACZ,MAAM6E,I,QAGND,EAAOA,GAAQ,E,CAEjB,OAAOA,C,EAiF4B5F,CAAA,EAAM,MAFhB,GAMfyI,EAAWL,EANI,IAMSI,EAAa,EAAI,CAAC,GAM9C,OALApsC,GAAG4C,OAAOghC,CAAA,EAELriC,KAAK0qC,EAAYG,EAAaF,EAAgBC,CAAA,EAE9CpnC,QAAQ,cAAeqnC,CAAA,EACrBC,C,CA3BTR,EAAUzqC,OAAO,MAAA,EAAQ2D,QAAQ,MAAO,CAAA,CAAA,EACxC8mC,EAAUzqC,OAAO,MAAA,EAAQ2D,QAAQ,YAAa,CAAA,CAAA,EACzCxD,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,OAAA,EAEzBoxB,EAAM/vB,OAAO,MAAA,EACRrB,KAAK,SAAUnB,EAAKipC,OAAOC,UAAA,CAAA,EAC3BgD,WAAA,EACAC,SAAS,GAAA,EACThrC,KAAK,QAASkqC,EAAYP,CAAA,CAAA,EAC1B3pC,KAAK,OAAQ,SAAU+C,EAAGsC,GACzB,OAAOxG,EAAKgE,GAAGO,MAAMiC,E,GAmB3B+rB,EAAM/vB,OAAO,YAAA,EAAc2F,KAAKkjC,EAAY,SAAUjgC,EAAMya,GAC1D,OAAO7lB,EAAKgE,GAAG4hB,WAAWC,GAAOza,CAAA,C,IAE9BjK,KAAK,IAAKkqC,EAAY,SAAUjgC,EAAMya,GACrC,OAAO8lB,EAAS1rC,KAAM6qC,EAAS1/B,EAAMya,CAAA,EAAQ,cAAe,QAAS,KAAA,C,IAEtE1kB,KAAK,IAAKnB,EAAKipC,OAAOC,UAAA,EAAY,CAAA,C,KAW7ClpC,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAEzBiG,YAAc,SAAUnhC,GACtB,OAAOnL,KAAK+D,GAAG9B,MAAM2E,IAAI,SAAU7C,GACjC,OAAOA,EAAGoH,CAAA,C,IAGdtI,UAAY,SAAUT,GACpB,IAAIrC,EAAOC,KAEX,GAAIoC,IAASrC,EAAKqC,KAAM,CAwBtB,GAvBAlC,EAAEuD,SAASrB,EAAM,CACf2B,GAAK,GACLoM,SAAW/N,EAAKA,KAAKV,OACrBoiB,YAAc,C,GAEhB/jB,EAAKgE,GAAK7D,EAAEuD,SAASrB,EAAK2B,GAAI,CAC5B9B,MAAQ/B,EAAEsI,SAAS,OAAA,EACnBlE,MAAQ,CAAC,U,GAEXpE,EAAEuD,SAASrB,EAAK2B,GAAI,CAClB4hB,WAAavjB,EAAK2B,GAAG4hB,U,GAElBzlB,EAAEuW,QAAQ1W,EAAKgE,GAAG9B,KAAA,IACrBlC,EAAKgE,GAAG9B,MAAQ,CAAClC,EAAKgE,GAAG9B,QAEtB/B,EAAEuW,QAAQ1W,EAAKgE,GAAG4hB,UAAA,IACrB5lB,EAAKgE,GAAG4hB,WAAa,CAAC5lB,EAAKgE,GAAG4hB,aAE5BzlB,EAAEuW,QAAQ1W,EAAKgE,GAAGO,KAAA,IACpBvE,EAAKgE,GAAGO,MAAQ,CAACvE,EAAKgE,GAAGO,QAIA,EAAvBvE,EAAKgE,GAAG9B,MAAMP,OAAY,CAC5B,GAAI,CAACxB,EAAEuW,QAAQ1W,EAAKgE,GAAG8pB,UAAA,GAAe9tB,EAAKgE,GAAG8pB,WAAWnsB,SAAW3B,EAAKgE,GAAG9B,MAAMP,OAChF,MAAM,IAAI0G,MAAM,kGAAA,EAElB,GAAIrI,EAAKgE,GAAG4hB,WAAWjkB,SAAW3B,EAAKgE,GAAG9B,MAAMP,OAC9C,MAAM,IAAI0G,MAAM,gFAAA,C,CAIpB,IAAIokC,EAAiB,SAAUrhC,GAC7B,OAAOjL,EAAEk+B,IAAIr+B,EAAKusC,YAAYnhC,CAAA,CAAA,C,EAG5BnI,EAAQZ,EAAK2B,GAAGkiB,eAAiB7jB,EAAK2B,GAAGkiB,eAAe7jB,EAAKA,IAAA,EAAMzC,GAAGyG,IAAIhE,EAAKA,KAAMoqC,CAAA,EAIrFC,GAHJ1sC,EAAKkC,MAAM+C,OAAO,CAAC,EAAGhC,EAAA,EAGN9C,EAAEkC,EAAKA,IAAA,GAQvBqqC,GAJEA,EADGrqC,EAAKqlB,SAKEglB,EAJEA,EAAU9S,QAAQ6S,EAAgB,CAAC,OAAA,GAI3B5lC,IAAI,SAAU3C,EAAGsC,GACrC,MAAO,CAACtC,EAAGsC,EAAI,E,GAIjBnE,EAAKA,KAAOqqC,EAAUxqC,MAAA,EAEtBG,EAAKglB,KAAOhlB,EAAKA,KAEjBrC,EAAKipC,OAAOhkC,OAAOrF,GAAGqD,MAAMZ,EAAKglB,KAAK1lB,MAAA,CAAA,EAEtC3B,EAAKqC,KAAOA,C,CAGd,OAAOA,C,OCjNb,WACE,aAOA,SAASyqC,EAASC,EAASC,GACzB,MAAO,CACLxtB,SAAW,IACXC,MAAQ,CACN5f,MAAQ,IACRwC,KAAO,IACPtC,QAAU,G,EAEZohC,KAAO,SAAU9sB,EAAQ+sB,EAAKC,GAC5B,IAIIxhC,EAJAotC,EAAKh+B,QAAQi+B,QAAQH,CAAA,EACrBI,EAAcH,EAAOG,YAAY94B,CAAA,EAEjC9R,EAAM3C,GAAG4C,OAAO4+B,EAAI,EAAA,EAAIpgC,OAAO,KAAA,EAkBnC,SAASosC,IACP,MAAO,CACL3rC,MAAQ2/B,EAAI,GAAGiM,YACfvrC,OAASs/B,EAAI,GAAGkM,Y,EASpB,SAASC,EAAgBC,GACnB3tC,GACFA,EACK4B,MAAM+rC,EAAK/rC,KAAA,EACXK,OAAO0rC,EAAK1rC,MAAA,C,CAzBrBuS,EAAO1F,OAAO,OAAQ,SAAUtM,GAC1BA,GAAyB,IAAjBlC,EAAEqtC,KAAKnrC,CAAA,KANdxC,EAAAA,GACK0C,EAAI1C,MAAMwU,EAAOxU,MAAOwU,EAAOtU,SAAW,EAAA,GAO5CuC,KAAKD,CAAA,EACXkrC,EAAgBH,EAAA,CAAA,GAElBhM,EAAI,GAAG1gB,WAAW+sB,UAAYrM,EAAI,GAAGqM,S,GAUvCN,EAAYF,EAAI,SAAU,WACxB54B,EAAOq5B,OAAA,C,GAGTr5B,EAAO1F,OAAOy+B,EAAUG,EAAiB,CAAA,CAAA,C,kCA9C/Ct+B,QACKC,OAAO,oBAAA,EACPqN,UAAU,WAAYuwB,CAAA,C,ICL7B,WACE,aAEAltC,GAAGC,MAAM,WAAA,EAAaO,OAAO,eAAgB,CAC3CN,WAAa,SAAUC,GACrB,IACI4tC,EAAOlpC,EADPzE,EAAOC,KAkEX,SAASioC,IACP,IAAIzmC,EAAQzB,EAAKY,EACbgtC,EAAc5tC,EAAKa,EAAIb,EAAK6tC,UAC5BptC,EAAUT,EAAKqkC,MAAM5jC,QAAA,EAEzBT,EAAKqkC,MACA5iC,MAAMA,CAAA,EACNK,OAAO8rC,CAAA,EAGZ5tC,EAAK8tC,QACA3sC,KAAK,QAASiF,KAAKC,IAAI,EAAGrG,EAAKqkC,MAAMzjC,CAAA,CAAA,EACrCO,KAAK,SAAUiF,KAAKC,IAAI,EAAGrG,EAAKqkC,MAAMxjC,CAAA,CAAA,EAE3Cb,EAAK+tC,QACAtsC,MAAMA,CAAA,EACNK,OAAO9B,EAAK6tC,SAAA,EAEjBF,EAAMI,QACDvsC,UAAU,EAAGosC,CAAA,EAElBD,EAAMK,MACDxsC,UAAUf,EAAQF,KAAMqtC,CAAA,EACxBpqC,KAAKxD,EAAKguC,KAAA,EACV9oC,UAAU,MAAA,EACV/D,KAAK,SAAUnB,EAAK+tC,QAAQltC,CAAA,EAEjC8sC,EAAMM,UACDzsC,UAAUf,EAAQF,KAAME,EAAQJ,GAAA,EAErCstC,EAAMO,OACD1sC,UAAUf,EAAQF,KAAO,GAAI,CAACP,EAAKgC,IAAI,KAAA,CAAA,C,EA/F9CjC,EAAUA,GAAW,IAEbF,MAAQE,EAAQF,OAAS,OACjCG,EAAK6tC,UAAY9tC,EAAQ8tC,WAAa,GAGtC7tC,EAAKS,QAAQ,CAAEJ,IAAM,GAAIC,OAAS,EAAGC,KAAO,EAAGC,MAAQ,CAAA,CAAA,EACvDR,EAAKS,QAAQV,EAAQU,OAAA,EAErBktC,EAAQ,CACNtJ,MAAQrkC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,QAAS,CAAA,CAAA,EAC/CopC,QAAU/tC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,UAAW,CAAA,CAAA,EACnDupC,OAASluC,EAAKc,KAAKE,OAAO,GAAA,EAC1BgtC,MAAQhuC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,QAAS,CAAA,CAAA,EAC/CspC,UAAYjuC,EAAKc,KAAKE,OAAO,GAAA,C,EAI/BhB,EAAKqkC,MAAQsJ,EAAMtJ,MACdxkC,MAAME,EAAQF,MAAOE,EAAQ+hC,YAAA,EAGlC9hC,EAAK+tC,QAAUJ,EAAMI,QAChBluC,MAAME,EAAQF,MAAOM,EAAEuD,SAAS,CAC/BK,YAAc,CAAA,C,EACbhE,EAAQ+hC,YAAA,CAAA,EAEf9hC,EAAKkuC,OAASP,EAAMO,OACfruC,MAAM,SAAU,CAAE0E,MAAQvE,EAAKqkC,MAAM9/B,KAAA,CAAA,EAE1CvE,EAAKmuC,OAAO,QAASnuC,EAAKqkC,KAAA,EAC1BrkC,EAAKmuC,OAAO,UAAWnuC,EAAK+tC,OAAA,EAC5B/tC,EAAKmuC,OAAO,SAAUnuC,EAAKkuC,MAAA,EAG3BluC,EAAKiuC,UAAYN,EAAMM,UAClBpuC,MAAM,YAAa,CAAEwkC,MAAQrkC,EAAKqkC,KAAA,CAAA,EAEvC5/B,EAAYmS,KAAA,EAEZ5W,EAAK8tC,QAAU9tC,EAAK0C,SAAA,EACf1B,OAAO,UAAA,EACPG,KAAK,KAAMsD,CAAA,EACXzD,OAAO,MAAA,EAEZhB,EAAKguC,MAAQpuC,GAAG2C,IAAIyrC,MAAA,EACfhrC,EAAEhD,EAAK+tC,QAAQ/qC,CAAA,EACf9B,GAAG,QAAS,WACX,IAAIwF,EAAS1G,EAAKguC,MAAMprC,MAAA,EAAU5C,EAAKguC,MAAMhrC,EAAA,EAAIiC,OAAA,EAAWjF,EAAKguC,MAAMtnC,OAAA,EACvE1G,EAAKqkC,MAAMt9B,QAAQL,EAAQjC,CAAA,EACvBzE,EAAKguC,MAAMprC,MAAA,GAEb5C,EAAKiuC,UAAUG,MAAA,C,GAIvBpuC,EAAKkB,GAAG,eAAgBgnC,CAAA,EACnBhnC,GAAG,gBAAiBgnC,CAAA,EACpBhnC,GAAG,cAAe,WAEjBlB,EAAKguC,MAAMK,MAAA,EACXV,EAAMK,MAAMxqC,KAAKxD,EAAKguC,KAAA,C,GAqC5BhuC,EAAKqkC,MAAMnjC,GAAG,gBAAiB,WAC7BlB,EAAKiuC,UAAUnsC,OAAO9B,EAAKqkC,MAAMxjC,CAAA,C,IAGrCiC,UAAY,SAAUT,GAGpB,OADApC,KAAKoC,KAAOA,C,OC/GlB,WACE,aAGAzC,GAAGC,MAAM,MAAA,EAAQO,OAAO,aAAc,CACpCN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAIXE,EAAEuD,SAAS1D,EAAKiE,WAAY,CAE1B89B,MAAQ,SAAU79B,GAAK,OAAOA,EAAE69B,KAAA,EAEhCC,WAAa,SAAU99B,GAAK,OAAO,CAAA,EAEnCsjC,GAAK,SAAUtjC,GAAK,OAAOlE,EAAKgE,GAAGZ,EAAEc,CAAA,EAAKlE,EAAKgE,GAAGg+B,WAAW99B,CAAA,EAAKlE,EAAKgE,GAAG+9B,MAAM79B,CAAA,CAAA,EAEhFujC,GAAK,SAAUvjC,GAAK,OAAOlE,EAAKgE,GAAGZ,EAAEc,CAAA,EAAKlE,EAAKgE,GAAGg+B,WAAW99B,CAAA,EAAKlE,EAAKgE,GAAG+9B,MAAM79B,CAAA,CAAA,C,GAGlFlE,EAAKokC,OAAS,CACZrC,MAAQ/hC,EAAK0E,IAAI1D,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,EACrD2pC,MAAQtuC,EAAK0E,IAAI1D,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,C,EAGvD3E,EAAKonC,KAAOxnC,GAAG2C,IAAI6kC,KAAA,EACdpkC,EAAE,SAAUkB,GAAK,OAAOlE,EAAKgD,EAAEhD,EAAKgE,GAAGhB,EAAEkB,CAAA,CAAA,CAAA,CAAA,EACzCd,EAAE,SAAUc,GAAK,OAAOlE,EAAKoD,EAAEpD,EAAKgE,GAAGZ,EAAEc,CAAA,CAAA,CAAA,CAAA,EAE9ClE,EAAKunC,KAAO3nC,GAAG2C,IAAIglC,KAAA,EACdvkC,EAAE,SAAUkB,GAAK,OAAOlE,EAAKgD,EAAEhD,EAAKgE,GAAGhB,EAAEkB,CAAA,CAAA,CAAA,CAAA,EACzCsjC,GAAG,SAAUtjC,GAAK,OAAOlE,EAAKoD,EAAEpD,EAAKgE,GAAGwjC,GAAGtjC,CAAA,CAAA,CAAA,CAAA,EAC3CujC,GAAG,SAAUvjC,GAAK,OAAOlE,EAAKoD,EAAEpD,EAAKgE,GAAGyjC,GAAGvjC,CAAA,CAAA,CAAA,CAAA,EAEhDlE,EAAK6E,MAAM,QAAS7E,EAAKokC,OAAOkK,MAAO,CACrCxpC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,MAAA,EACjB7C,KAAK,CAACA,EAAK4E,OAAO,GAAA,C,EAEzBpE,OAAS,WACP,OAAO5C,KAAKe,OAAO,MAAA,C,EAErBmE,OAAS,CACPC,MAAQ,WACNnF,KACKkB,KAAK,IAAKnB,EAAKgH,WAAW,WACzB,OAAOhH,EAAKonC,KAAKpnC,EAAKqC,KAAKA,IAAA,C,IAE5BkD,MAAM,SAAU,SAAU0B,GACzB,OAAOjH,EAAKuE,MAAM0C,EAAOgB,IAAA,C,OAMrCjI,EAAK6E,MAAM,QAAS7E,EAAKokC,OAAOrC,MAAO,CACrCj9B,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,MAAA,EACjB7C,KAAK,CAACA,EAAK4E,OAAO,GAAA,C,EAEzBpE,OAAS,WACP,OAAO5C,KAAK4C,OAAO,MAAA,C,EAErBsC,OAAS,CACPC,MAAQ,WACNnF,KACKkB,KAAK,IAAKnB,EAAKgH,WAAW,WACzB,OAAOhH,EAAKunC,KAAKvnC,EAAKqC,KAAKA,IAAA,C,IAE5BkD,MAAM,OAAQ,SAAU0B,GACvB,OAAOjH,EAAKuE,MAAM0C,EAAOgB,IAAA,C,OAMrCjI,EACKkB,GAAG,cAAe,WACjBlB,EAAKc,KAAKoE,UAAU,cAAA,EACfK,MAAM,YAAa,QAAUvF,EAAKyE,UAAY,GAAA,C,IAG3D3B,UAAY,SAAUT,GACpB,IAAIrC,EAAOC,KAmBX,OAjBIoC,IAASrC,EAAKqC,OAChBrC,EAAKsI,QAAQjG,CAAA,EAEbrC,EAAKgH,WAAW3E,EAAK4E,OAAO,GAAI,WAC9B,IAAI3C,EAAUnE,EAAE0G,IAAI,CAClBgB,IAAM,KACNxB,IAAM,I,EACL,SAAUkoC,EAAKnG,GAChB,IAAIC,EAAWroC,EAAKsE,QAAQ8jC,GAC5B,OAAQjoC,EAAEmoC,YAAYD,CAAA,EAClBzoC,GAAGwoC,GAAU/lC,EAAKA,KAAKwE,IAAI7G,EAAKgE,GAAGuqC,EAAA,CAAA,EADLlG,C,GAIpCroC,EAAK2G,WAAWrC,CAAA,C,IAIbjC,C,OCvGb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,YAAa,CACxCN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAIX,GADAD,EAAKqkC,OAFLtkC,EAAUA,GAAW,IAEAskC,MACjB,CAACrkC,EAAKqkC,OAAS,CAACrkC,EAAKqkC,MAAMh9B,mBAC7B,MAAM,IAAIgB,MAAM,mCAAA,EAGlBrI,EAAKwuC,EAAIxuC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,YAAa,CAAA,CAAA,EAEpD3E,EAAKonC,KAAOpnC,EAAKwuC,EAAExtC,OAAO,MAAA,EACrB2D,QAAQ,eAAgB,CAAA,CAAA,EAE7B3E,EAAK6E,MAAM,OAAQ7E,EAAKwuC,EAAExtC,OAAO,GAAA,EAAK2D,QAAQ,gBAAiB,CAAA,CAAA,EAAO,CACpEG,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,QAAA,EACjB7C,KAAKA,EAAKe,CAAA,C,EAEjBP,OAAS,WACP,OAAO5C,KAAK4C,OAAO,QAAA,EACd8B,QAAQ,QAAS,CAAA,CAAA,EACjBxD,KAAK,IAAK,CAAA,C,EAEjBgE,OAAS,CACPC,MAAQ,WACNnF,KAAKkB,KAAK,KAAMhB,EAAEopB,QAAA,C,KAKxB,IACIklB,EAAWzuC,EAAKwuC,EAAExtC,OAAO,GAAA,EACxB2D,QAAQ,WAAY,CAAA,CAAA,EACpBnD,UAHY,GAGU,CAAA,EACvBktC,EAASD,EAASztC,OAAO,MAAA,EACxB2D,QAAQ,UAAW,CAAA,CAAA,EACpBgqC,EAAMF,EAASztC,OAAO,MAAA,EACrB2D,QAAQ,MAAO,CAAA,CAAA,EACfnD,UAAU,EAAG,CAAA,EA6BlB,SAASotC,EAAkBv4B,GAEzB,OAAOzW,GAAGkD,UAAUlD,GAAG4C,OAAO6T,EAAUjV,KAAA,CAAA,EAAQD,KAAK,WAAA,CAAA,EAAcK,UAAU,E,CA7B/ExB,EAAK6E,MAAM,MAAO8pC,EAAK,CACrB7pC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,eAAA,EACjB7C,KAAKA,EAAK8F,IAAA,C,EAEjBtF,OAAS,WACP,OAAO5C,KAAK4C,OAAO,OAAA,EACd8B,QAAQ,UAAW,CAAA,CAAA,EACnBxD,KAAK,IAAK,CAAA,EACVA,KAAK,KAAM,OAAA,C,EAElBgE,OAAS,CACPC,MAAQ,WACNnF,KAAK4uC,KAAK,SAAUvxB,GAGlB,MAAO,4BAFIA,EAAK,GAGT,sCAFKA,EAAK,GAE4B,S,GAE/C,IAAI8rB,EAAOuF,EAAIvtC,KAAA,EAAOojC,QAAA,EACtBkK,EACKvtC,KAAK,QAASioC,EAAK3nC,MA/Bb,EA+BqB,EAC3BN,KAAK,SAAUioC,EAAKtnC,OAhCd,EAgCuB,C,KAUxC9B,EAAK6E,MAAM,QAAS4pC,EAAU,CAC5B3pC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKoC,KAAK,CAACA,EAAA,C,EAEpBQ,OAAS,WACP,OAAO5C,I,EAETkF,OAAS,CACP2pC,oBAAsB,WACpB,IAAIC,EAAWH,EAAkB5uC,EAAKwuC,CAAA,EAAKxuC,EAAKqkC,MAAMzjC,EAAI,EACtDouC,EAAWzjB,OAAOmjB,EAAOvtC,KAAK,OAAA,CAAA,EAC9B8tC,EAAYD,EAAW,GAEvBE,EAAWN,EAAkB3uC,IAAA,EAC7BkvC,EAAUJ,EAAW,EAAEC,EAxDhB,IAAA,GA4DPI,EAAmBhpC,KAAKU,IAAIqoC,EAAUD,CAAA,EAAYD,EAEtB,SAA5BjvC,EAAKwuC,EAAEjpC,MAAM,SAAA,IAEf6pC,EAAmB,GAGrBnvC,KAAKksC,SAAS,IAAMiD,CAAA,EACfC,KAAK,QAAA,EACLluC,KAAK,YAAa,aAAeguC,EAAU,MAAA,C,KAKtDnvC,EAAKkB,GAAG,gBAAiB,WACvBlB,EAAKonC,KAAKjmC,KAAK,KAAMnB,EAAKa,CAAA,C,GAG5Bb,EAAKuC,IAAA,EACArB,GAAG,YAAa,WACflB,EAAKouC,MAAA,C,GAENltC,GAAG,aAAc,WAChBlB,EAAKwuC,EAAEjpC,MAAM,UAAW,MAAA,C,IAGhC6oC,MAAQ,WACN,IACI9mC,EAAS1H,GAAGmkC,MADL9jC,KACgBa,KAAKM,KAAA,CAAA,EAC5BoG,EAFOvH,KAEMokC,MAAMh9B,mBAAmBC,CAAA,EAF/BrH,KAGNqvC,QAAQ9nC,CAAA,C,EAEf8nC,QAAU,SAAU9nC,GAGdA,IAFOvH,KAGJuuC,EAAEhtC,UAAUgG,EAAMxE,EAAG,CAAA,EAHjB/C,KAIJqC,KAAKkF,CAAA,GAJDvH,KAQNuuC,EAAEjpC,MAAM,UAAWiC,EAAQ,UAAY,MAAA,C,OCxIlD,WACE,aAEA5H,GAAGC,MAAM,WAAA,EAAaO,OAAO,SAAU,CACrCN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAKX,GADAD,EAAKuE,OAFLxE,EAAUA,GAAW,IAEAwE,MACjB,CAACvE,EAAKuE,MACR,MAAM,IAAI8D,MAAM,4EAAA,EAGlBslC,EAAQ,CACNO,OAASluC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,C,EAGnD3E,EAAK6E,MAAM,SAAU8oC,EAAMO,OAAQ,CACjCppC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,gBAAA,EACjB7C,KAAKA,EAAK4E,MAAA,C,EAEjBpE,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EACnB2D,QAAQ,gBAAiB,CAAA,CAAA,EAW9B,OATA4tB,EAAMvxB,OAAO,MAAA,EACR2D,QAAQ,aAAc,CAAA,CAAA,EACtBxD,KAAK,QAAS,EAAA,EACdA,KAAK,SAAU,EAAA,EAEpBoxB,EAAMvxB,OAAO,MAAA,EACR2D,QAAQ,cAAe,CAAA,CAAA,EACvBnD,UAAU,GAAI,EAAA,EAEZ+wB,C,EAETptB,OAAS,CACPC,MAAQ,WACNnF,KAAKuC,OAAO,MAAA,EACP+C,MAAM,CACLsW,KAAO,SAAU3X,GAAK,OAAOlE,EAAKuE,MAAML,EAAE+D,IAAA,CAAA,EAC1C2T,OAAS,OACT2zB,kBAAoB,Y,GAG1BtvC,KAAKuC,OAAO,MAAA,EACP2F,KAAKhI,EAAEsI,SAAS,MAAA,CAAA,EAGrB,IAAI+mC,EAAQ,CAAC,GAEbvvC,KAAKuI,KAAK,WACR,IAAIjI,EAAOivC,EAAMA,EAAM7tC,OAAS,GAC5B8tC,EAAOlvC,EAAON,KAAKukC,QAAA,EAAU/iC,MAHrB,GAIZ+tC,EAAMxnC,KAAKynC,CAAA,EAEX7vC,GAAG4C,OAAOvC,IAAA,EAAMuB,UAAUjB,EAAM,CAAA,C,aC1D9C,WACE,aAEAX,GAAGC,MAAM,MAAA,EAAQO,OAAO,OAAQ,CAC9BN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAGXD,EAAKokC,OAAS,CACZn9B,OAASjH,EAAK0E,IAAI1D,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,C,EAGlD3E,EAAKonC,KAAOxnC,GAAG2C,IAAI6kC,KAAA,EACdpkC,EAAE,SAAUkB,GAAK,OAAOlE,EAAKgD,EAAEhD,EAAKgE,GAAGhB,EAAEkB,CAAA,CAAA,CAAA,CAAA,EACzCd,EAAE,SAAUc,GAAK,OAAOlE,EAAKoD,EAAEpD,EAAKgE,GAAGZ,EAAEc,CAAA,CAAA,CAAA,CAAA,EAE9ClE,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAOn9B,OAAQ,CACvCnC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,MAAA,EACjB7C,KAAKA,EAAK4E,MAAA,C,EAEjBpE,OAAS,WACP,OAAO5C,KAAK4C,OAAO,MAAA,C,EAErBsC,OAAS,CACPC,MAAQ,WACNnF,KACKkB,KAAK,IAAKnB,EAAKgH,WAAW,WACzB,OAAOhH,EAAKonC,KAAKpnC,EAAKqC,KAAKA,IAAA,C,IAE5BkD,MAAM,SAAU,SAAU0B,GACzB,OAAOjH,EAAKuE,MAAM0C,EAAOgB,IAAA,C,IAGjCy/B,KAAO,WACLznC,KAAKiO,OAAA,C,KAKXlO,EACKkB,GAAG,cAAe,WACjBlB,EAAKokC,OAAOn9B,OAAO/B,UAAU,MAAA,EACxBK,MAAM,YAAa,QAAUvF,EAAKyE,UAAY,GAAA,C,IAG3D3B,UAAY,SAAUT,GACpB,IAKMiC,EALFtE,EAAOC,KAgBX,OAdIoC,IAASrC,EAAKqC,OAChBrC,EAAKsI,QAAQjG,CAAA,EAETiC,EAAU,CAAC,MAAO,OAAOuC,IAAI,SAAUuhC,GACzC,IAAIC,EAAWroC,EAAKsE,QAAQ8jC,GAC5B,OAAQjoC,EAAEmoC,YAAYD,CAAA,EAClBzoC,GAAGwoC,GAAU/lC,EAAK4E,OAAOJ,IAAI7G,EAAKgH,WAAW,WAC3C,OAAOpH,GAAGwoC,GAAU/lC,EAAKA,KAAKwE,IAAI7G,EAAKgE,GAAGZ,CAAA,CAAA,C,KAFdilC,C,GAMpCroC,EAAK2G,WAAWrC,CAAA,GAGXjC,C,OC/Db,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,WAAY,CAEvCN,WAAY,WACV,IAAIE,EAAOC,KA4IX,SAASyvC,IACP,IACIC,EAAU3vC,EAAKyB,MAAA,EAAU,EACzBmuC,EAAU5vC,EAAK8B,OAAA,EAAW,EAFX,GAInB9B,EAAKokC,OAAOyL,OACPruC,UAAUmuC,EAASC,CAAA,EAExB5vC,EAAKokC,OAAO2F,OACPvoC,UAAUmuC,EAASC,CAAA,C,CAnJ1B5vC,EAAKe,KAAK4D,QAAQ,WAAY,CAAA,CAAA,EAE9B3E,EAAKokC,OAAS,CACZ8J,OAASluC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EACjDkrC,OAAS7vC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EACjDolC,OAAS/pC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,C,EAGnD3E,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAOyL,OAAQ,CACvC/qC,SAAU,SAAUzC,GAClB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKrC,EAAK8vC,IAAIztC,EAAKA,IAAA,CAAA,C,EAE1BQ,OAAQ,WACN,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAQpD,OANI4tB,EAAMvxB,OAAO,MAAA,EACZ2D,QAAQ,QAAS,CAAA,CAAA,EACjBxD,KAAK,OAAQ,SAAU+C,EAAGsC,GACzB,OAAOtC,EAAE7B,KAAKkC,K,GAGbguB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACMnF,KAENuC,OAAO,QAAA,EACRrB,KAAK,IAAKnB,EAAK+vC,GAAA,EACf5uC,KAAK,OAAQ,SAAU+C,GACtB,OAAOA,EAAE7B,KAAKkC,K,GAEf2nC,WAAA,EACAC,SAAS,GAAA,EACT6D,UAAU,IAAK,SAAS9rC,GACvB,IAAIsC,EAAI5G,GAAGynC,YAAYnjC,EAAE+rC,WAAW,GAAK/rC,EAAEgsC,QAAA,EAC3C,OAAO,SAAS1J,GAEd,OADAtiC,EAAEgsC,SAAW1pC,EAAEggC,CAAA,EACRxmC,EAAK+vC,IAAI7rC,CAAA,C,QAO9BlE,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAO2F,OAAQ,CACvCjlC,SAAU,SAAUzC,GAClB,OAAOpC,KAAKiF,UAAU,eAAA,EACjB7C,KAAKrC,EAAK8vC,IAAIztC,EAAKA,IAAA,CAAA,C,EAE1BQ,OAAQ,WACN,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,eAAgB,CAAA,CAAA,EASrD,OAPA4tB,EAAMvxB,OAAO,MAAA,EACR2D,QAAQ,eAAgB,CAAA,CAAA,EACxBY,MAAM,cAAc,MAAA,EACpBpE,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,QAAA,EACpBA,KAAK,cAAe,2BAAA,EAElBoxB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WAGN,SAAS+qC,EAAcF,EAAYC,EAAUE,GAE5C,OADsC,EAAxBpwC,EAAKqC,KAAKA,KAAKV,OAAa3B,EAAKigB,EAAI,GACrC,EAAImwB,GAAQF,EAAWD,GAAY,EAAI7pC,KAAKiqC,GAAK,CAAA,C,CAJpDpwC,KAONuC,OAAO,eAAA,EACR2F,KAAK,SAAUjE,GAAI,OAAOlE,EAAKqC,KAAK2B,GAAGssC,WAAWpsC,CAAA,CAAA,CAAA,EAClD/C,KAAK,IAAK,SAAS+C,GAAG,OAAOisC,EAAcjsC,EAAE+rC,WAAY/rC,EAAEgsC,SAAU9pC,KAAKmqC,GAAA,CAAA,CAAA,EAC1EpvC,KAAK,IAAK,SAAS+C,GAAG,OAAOisC,EAAcjsC,EAAE+rC,WAAY/rC,EAAEgsC,SAAU9pC,KAAKoqC,GAAA,CAAA,CAAA,C,KAMrFxwC,EAAK6E,MAAM,SAAU7E,EAAKokC,OAAO8J,OAAQ,CACvCppC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,gBAAA,EACjB7C,KAAKA,EAAKA,IAAA,C,EAEjBQ,OAAQ,WAEN,IAEI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EACnB2D,QAAQ,gBAAiB,CAAA,CAAA,EAa9B,OAXA4tB,EAAMvxB,OAAO,MAAA,EACR2D,QAAQ,aAAc,CAAA,CAAA,EACtBxD,KAAK,QAPI,EAOK,EACdA,KAAK,SARI,EAQM,EAEpBoxB,EAAMvxB,OAAO,MAAA,EACR2D,QAAQ,cAAe,CAAA,CAAA,EACvBxD,KAAK,cAAe,oBAAA,EACpBA,KAAK,oBAAqB,SAAA,EAC1BK,UAAU,GAAIivC,GAAQ,EAEpBle,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACNnF,KAAKuC,OAAO,MAAA,EACP+C,MAAM,CAACsW,KAAO,SAAU3X,GAAK,OAAOA,EAAEK,KAAA,CAAA,CAAA,EAE3CtE,KAAKuC,OAAO,MAAA,EACP2F,KAAKhI,EAAEsI,SAAS,MAAA,CAAA,EAGrB,IAAI+mC,EAAQ,CAAC,GAEbvvC,KAAKuI,KAAK,WACR,IAAIjI,EAAOivC,EAAMA,EAAM7tC,OAAS,GAC5B8tC,EAAOlvC,EAAON,KAAKukC,QAAA,EAAU/iC,MAHrB,GAIZ+tC,EAAMxnC,KAAKynC,CAAA,EAEX7vC,GAAG4C,OAAOvC,IAAA,EAAMuB,UAAU,SAAS0C,EAAEsC,GACnC,MAAO,CAACxG,EAAKyB,MAAA,EAAU,EAAIlB,EAAOmwC,KAAW1wC,EAAK8B,OAAA,EAAW,GAAA,CAAA,C,OAkBvE9B,EAAKkB,GAAG,gBAAiBwuC,CAAA,EACzB1vC,EAAKkB,GAAG,eAAgBwuC,CAAA,C,EAE1B5sC,UAAW,SAAUT,GAuBnB,OArBGA,IAASpC,KAAKoC,OACfpC,KAAKoC,KAAOA,EAEZlC,EAAEuD,SAASrB,EAAM,CACfsuC,OAAS,IACTtuC,KAAO,E,GAGTpC,KAAKoC,KAAOA,EACZpC,KAAKggB,EAAIhgB,KAAKoC,KAAKsuC,OAEnB1wC,KAAK8vC,IAAMnwC,GAAG2C,IAAIwtC,IAAA,EACba,YAAY3wC,KAAKggB,CAAA,EAEtBhgB,KAAK6vC,IAAMlwC,GAAGsoC,OAAO4H,IAAA,EAChB/2B,KAAK,IAAA,EACL7W,MAAM,SAAUgC,GACf,OAAOA,EAAEhC,K,IAIVG,C,OCxLb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,0BAA2B,CACtDN,WAAa,SAAUC,GACrB,IAAIC,EAAOC,KAOP4wC,GANJ9wC,EAAUA,GAAW,GAErBI,EAAEulB,aAAa3lB,EAAS,CACtBgpC,aAAe,GACf+H,UAAY,E,GAEG/wC,EAAQ+wC,WACrBC,EAAoB,IACpBC,EAAsB,IAEtBC,EAAsB,UAKtBC,EAA0B,IAC1BC,EAAa,IACbC,EAAW,IAGXC,EAAY,SACZC,EAAS,QACTC,EAAU,GACVC,EAAiBzxC,EAAQgpC,aAAe,EACxC0I,EAAY,GAyBhB,SAASC,EAAWnf,EAAOiR,GACzB,OAAOjR,EAAMvxB,OAAOwiC,CAAA,EAAM7+B,QAAQ,iBAAkB,CAAA,CAAA,EAC/CxD,KAAK,qBAAsB,QAAA,EAC3BA,KAAK,cAAe,oBAAA,C,CAyH3B,SAASwwC,EAAgBC,GACnBzxC,EAAEmoC,YAAYtoC,EAAKgE,GAAGgU,WAAW45B,EAAa,EAAA,CAAA,GAChDhyC,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,MAAA,EAAQA,OAAO,OAAA,EAAS+C,MAAM,SAAU,SAAA,C,CAInE,SAASssC,EAAeD,GAClBzxC,EAAEmoC,YAAYtoC,EAAKgE,GAAGgU,WAAW45B,EAAa,EAAA,CAAA,GAChDhyC,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,GAAA,EAAK+C,MAAM,SAAU,SAAA,C,CAIhD,SAASusC,EAAcF,GACjB5xC,EAAKgE,GAAG+tC,mBAAmBH,EAAa,EAAA,GAASzxC,EAAEmoC,YAAYtoC,EAAKgE,GAAGgU,WAAW45B,EAAa,EAAA,CAAA,EAK9F5xC,EAAKgE,GAAG+tC,mBAAmBH,EAAa,EAAA,IACzChyC,GAAG4C,OAAO,KAAA,EAAOA,OAAO,SAAWovC,EAAa,EAAA,EAAIpvC,OAAO,OAAA,EAAS2F,KAAKgpC,CAAA,EACzEa,EAAmBJ,CAAA,IANrBhyC,GAAG4C,OAAO,KAAA,EAAOA,OAAO,SAAWovC,EAAa,EAAA,EAAIpvC,OAAO,OAAA,EAAS2F,KAAKipC,CAAA,EACzExxC,GAAG4C,OAAOvC,IAAA,EAAMuH,MAAA,EAAQ,GAAGuqC,mBAAqB,CAAA,EAChD/xC,EAAKgE,GAAGiuC,kBAAkBL,CAAA,E,CAmE9B,SAASM,EAAyB3I,GAC7BvpC,EAAKqC,KAAK+1B,4BACXx4B,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,MAAA,EAAQA,OAAO,OAAA,EAAS+C,MAAM,SAAU,SAAA,EAC/D3F,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,aAAc+mC,EAAc,EAAA,EAAIpoC,KAAK,kBAAkB,WAAA,E,CAIlF,SAASgxC,EAA4B5I,GACnC3pC,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,MAAA,EAAQA,OAAO,OAAA,EAAS+C,MAAM,SAAU,SAAA,EAC/D3F,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,aAAc+mC,EAAc,EAAA,EAAIpoC,KAAK,kBAAkB,MAAA,C,CAGhF,SAASixC,EAA8B7I,GACjCvpC,EAAKqC,KAAK+1B,2BACZia,EAAkB9I,CAAA,C,CA0NtB,SAASyI,EAAmBJ,GAC1BhyC,GAAG4C,OAAOvC,IAAA,EAAMuC,OAAO,SAAA,EAAW0L,OAAA,EAClCtO,GAAG4C,OAAO,KAAA,EAAOA,OAAO,SAAWovC,EAAa,EAAA,EAAIpvC,OAAO,OAAA,EAAS2F,KAAKgpC,CAAA,EACzEhxC,EAAEia,QAAQpa,EAAKqC,KAAKA,KAAK,SAAUH,GAC9B0vC,EAAa,IAAM1vC,EAAM,KAC1BA,EAAM,GAAG6vC,mBAAqB,CAAA,E,GAGlCF,EAAeD,CAAA,EACf5xC,EAAKgE,GAAGiuC,kBAAkBL,CAAA,C,CAI5B,SAAStI,EAAUtlC,GACjB,OAAO,SAAUulC,EAAe/iC,EAAGgjC,EAAGtE,GACpC,OAAOlhC,EAAGR,KAAKvD,KAAMspC,EAAc,GAAI/iC,EAAGgjC,EAAGtE,CAAA,C,EAKjD,SAASoN,EAASC,GAChB,OAAO,WACL,IAAIC,EAAO5yC,GAAG4C,OAAOvC,IAAA,EACjBkI,EAAOqqC,EAAKrqC,KAAA,EAEbA,EAAKxG,OAAS4wC,GACfC,EAAKrqC,KAAKhI,EAAEsyC,SAAStqC,EAAK,CACxBxG,OAAU4wC,C,KAMlB,SAASG,EAAStnC,EAAMya,GACtB,OAAO7lB,EAAKipC,OAAOpjB,CAAA,C,CAGrB,SAASskB,EAAWwI,GAClB,OAAQA,EAAYlB,GAAaV,C,CAUnC,SAASzK,IACP,IAAIsM,EAAmC,EAArBzI,EAAWnqC,EAAKY,CAAA,EAC9BiyC,EAAiB,EACrB1yC,EAAEia,QAAQpa,EAAKqC,KAAKA,KAAM,SAAUH,GAAaA,EAAM,GAAG6vC,oBACtDc,CAAA,E,GAGJ7yC,EAAKipC,OAAOmB,gBAAgB,CAAC,EAAGpqC,EAAKa,EAAIgwC,EAAcK,EAA0B2B,GAAmB,EAAG,EAAA,EAGvG7yC,EAAKkC,MAAMe,MAAM,CAAC,EAAGmD,KAAKC,IAAKrG,EAAKY,EAAIgyC,EAAcrB,EAAU,CAAA,EAAA,EAhBhEpxC,EAAEqI,KAAKxI,EAAKokC,OAAO2F,OAAO,SAAUpkB,GAClCA,EAAMrjB,KAAKtC,EAAKqC,IAAA,C,GAElBrC,EAAKokC,OAAOiG,KAAKyI,SAASxwC,KAAKtC,EAAKqC,IAAA,EAepCrC,EAAKokC,OAAO2F,OAAOgJ,UAAUvxC,UAAUoxC,EAAa,CAAA,EACpDhzC,GAAG4C,OAAO,KAAA,EAAOA,OAAO,GAAA,EAAKhB,UAAU,EAAIxB,EAAKqC,KAAKglB,KAAK1lB,SAAWqvC,EAAuB,CAAE,EAAIO,EAAU,EAAG,EAAIA,EAAUA,EAAU,EAAA,C,CAGzI,SAASc,EAAkB9I,GACrBhyB,EAAUgyB,EAAc,GAAGyJ,cAC/BhzC,EAAKgE,GAAGivC,0BAA0B17B,CAAA,C,CAhhBpCvX,EAAKipC,OAASrpC,GAAGwE,MAAMomC,QAAA,EACvBxqC,EAAKkC,MAAQtC,GAAGwE,MAAMC,OAAA,EAMtBrE,EAAKokC,OAAS,CACZ2F,OAAS,CACPmJ,yBAA2BlzC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,2BAA2B,CAAA,CAAA,EACpFquC,cAAgBhzC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,gBAAiB,CAAA,CAAA,EAC/DwuC,eAAiBnzC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,iBAAkB,CAAA,CAAA,EACjEouC,UAAU/yC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,YAAY,CAAA,CAAA,C,EAEtD0lC,KAAM,CACJyI,SAAS9yC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,WAAW,CAAA,CAAA,C,GAcpD3E,EAAK6E,MAAM,2BAA4B7E,EAAKokC,OAAO2F,OAAOmJ,yBAA0B,CACpFpuC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAKpD,OAJA4tB,EAAMvxB,OAAO,MAAA,EACbuxB,EAAMrxB,GAAG,YAAaywC,CAAA,EACjBzwC,GAAG,WAAW2wC,CAAA,EACd3wC,GAAG,QAAQ4wC,CAAA,EACTvf,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IACIguC,EAAkB,EAClBC,EAAe,CAAA,EAFRpzC,KAGNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IAAIytB,EAAYZ,EAASj8B,MAAMxW,KAAMyB,SAAA,EAKrC,OAJG2xC,IACDD,GAAmBlC,GAErBmC,EAAejoC,EAAK2mC,mBACb,CAAC,EAAiBuB,EApCZzC,EAoCyBuC,E,IAT7BnzC,KAYKuC,OAAO,MAAA,EAClB+C,MAAM8rC,EAAWG,CAAA,EACjBjsC,MAAM+rC,EAAQG,CAAA,EACdtwC,KAAK,IAAIqwC,CAAA,EACTrwC,KAAK,IAAIqwC,EAAe,CAAA,EACxBrwC,KAAK,QAAQ,SAAUooC,GACtB,OAAOvpC,EAAKgE,GAAGuvC,SAAShK,EAAc,GAAG2J,wBAAA,C,OAMrDlzC,EAAK6E,MAAM,gBAAiB7E,EAAKokC,OAAO2F,OAAOiJ,cAAe,CAC5DluC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAIhDwD,GAHJoqB,EAAMrxB,GAAG,YAAaywC,CAAA,EACjBzwC,GAAG,WAAW2wC,CAAA,EACd3wC,GAAG,QAAQ4wC,CAAA,EACLvf,EAAMvxB,OAAO,MAAA,GASxB,OARAmH,EAAKnH,OAAO,OAAA,EACZ0wC,EAAWvpC,EAAM,OAAA,EAEjBupC,EAAWnf,EAAO,MAAA,EAAQ5tB,QAAQ,aAAc,CAAA,CAAA,EAAM3D,OAAO,OAAA,EACxD2D,QAAQ,KAAK,CAAA,CAAA,EAAMA,QAAQ,eAAe,CAAA,CAAA,EAC1CxD,KAAK,qBAAsB,QAAA,EAC3BgH,KAAKgpC,CAAA,EAEH5e,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IAEIouC,EAAYrJ,EAAWnqC,EAAKY,CAAA,EAE5BuH,EAJOlI,KAIKuC,OAAO,MAAA,EAMnB4wC,GAJJjrC,EAAK3F,OAAO,OAAA,EAAS2F,KAAK,SAASypC,GACjC,OAAO5xC,EAAKgE,GAAGgvC,cAAcpB,EAAa,EAAA,C,GAGtB,GAClByB,EAAe,CAAA,EAXRpzC,KAaNuC,OAAO,aAAA,EAAerB,KAAK,KAAM,SAAUywC,GAC9C,MAAO,QAASA,EAAa,E,GAdpB3xC,KAiBNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACnCza,EAAK2mC,oBAAuB5xC,EAAEmoC,YAAYl9B,EAAK4M,UAAA,GACjDpY,GAAG4C,OAAOvC,IAAA,EAAMiF,UAAU,aAAA,EAAe1C,OAAO,OAAA,EAC3CrB,KAAK,IAAKvB,GAAG4C,OAAO,KAAA,EAAO0C,UAAU,iBAAA,EAAmB9D,KAAA,EAAOojC,QAAA,EAAU/iC,MAAQ8vC,EAAU,CAAA,EAC3FpwC,KAAK,IAAKqwC,CAAA,EACV7sC,QAAQ,UAAU,CAAA,CAAA,EAClBY,MAAM,SAAU,SAAA,EAEvB,IAAI+tC,EAAYZ,EAASj8B,MAAMxW,KAAMyB,SAAA,EAKrC,OAJG2xC,IACDD,GAAmBlC,GAErBmC,EAAejoC,EAAK2mC,mBACb,CAACyB,EAAYjC,EAAuB+B,EA3G9BzC,EA2G2CuC,E,IAG1DjrC,EAAK3F,OAAO,OAAA,EACP2F,KAAK,SAAUohC,GACd,IAAIe,EAAYtqC,EAAKgE,GAAGgvC,cAAczJ,EAAc,EAAA,EAIpD,OAFEe,EADGtqC,EAAKqC,KAAKqlB,SAGR4iB,EAFOf,EAAc,GAAK,KAAOe,C,GAIzCnpC,KAAK,IAAKqwC,CAAA,EACV7sC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EACxB5nC,KAAKmwC,EAA2B,EAAnBnH,EAAWnqC,EAAKY,CAAA,CAAG,EAChC4H,KAAK8pC,EA1IW,EA0IF,CAAA,C,KA+BzBtyC,EAAK6E,MAAM,iBAAkB7E,EAAKokC,OAAO2F,OAAOoJ,eAAgB,CAC9DruC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAIhDwD,GAHJoqB,EAAMrxB,GAAG,YAAagxC,CAAA,EACjBhxC,GAAG,WAAWixC,CAAA,EACdjxC,GAAG,QAAQkxC,CAAA,EACL7f,EAAMvxB,OAAO,MAAA,GAIxB,OAHAmH,EAAKnH,OAAO,OAAA,EACZ0wC,EAAWvpC,EAAM,OAAA,EAEVoqB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IACIouC,EAAiC,EAArBrJ,EAAWnqC,EAAKY,CAAA,EAAS2wC,EAErC6B,EAAkB,EAClBC,EAAe,CAAA,EAYflrC,GAhBOlI,KAMNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IAAIytB,EAAYZ,EAASj8B,MAAMxW,KAAMyB,SAAA,EAKrC,OAJG2xC,IACDD,GAAmBlC,GAErBmC,EAAejoC,EAAK2mC,mBACb,CAACyB,EAAsB,EAAVjC,EAA2B+B,EA1LlCzC,EA0L+CuC,E,IAZnDnzC,KAgBKuC,OAAO,MAAA,GAEvB2F,EAAK3F,OAAO,OAAA,EAAS2F,KAAK,SAASohC,GACjC,OAAOvpC,EAAKgE,GAAGmvC,eAAe5J,EAAc,EAAA,C,GAG9CphC,EAAK3F,OAAO,OAAA,EACP2F,KAAK,SAAUohC,GACd,OAAOvpC,EAAKgE,GAAGmvC,eAAe5J,EAAc,EAAA,C,GAE7CpoC,KAAK,KAAK,SAAUooC,GAAgB,MAAO,YAAcA,EAAc,EAAA,CAAA,EACvEpoC,KAAK,IAAKqwC,CAAA,EACV7sC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EACxB5nC,KAAKmwC,EAA6B,EAArBnH,EAAWnqC,EAAKY,CAAA,CAAK,EAClC4H,KAAK8pC,EA7NgB,EA6NP,CAAA,C,KAuBzBtyC,EAAK6E,MAAM,YAAa7E,EAAKokC,OAAO2F,OAAOgJ,UAAW,CACpDjuC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,cAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WACP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,cAAe,CAAA,CAAA,EAIhDwD,GAHJoqB,EAAMrxB,GAAG,YAAaywC,CAAA,EACjBzwC,GAAG,WAAW2wC,CAAA,EACd3wC,GAAG,QAAQ4wC,CAAA,EACLvf,EAAMvxB,OAAO,MAAA,GAIxB,OAHAmH,EAAKnH,OAAO,OAAA,EACZ0wC,EAAWvpC,EAAM,OAAA,EAEVoqB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACN,IAEI+C,EAFOlI,KAEKuC,OAAO,MAAA,EACnB4wC,EAAkB,EAClBC,EAAe,CAAA,EAEnBlrC,EAAK3F,OAAO,OAAA,EAAS2F,KAAK,SAASypC,GACjC,MAAqD,KAA7CA,EAAa,GAAGsB,yBAAmClzC,EAAKgE,GAAGkvC,yBAAyBtB,EAAa,EAAA,EAAI,IAAM,E,GAGrHzpC,EAAK3F,OAAO,OAAA,EACP2F,KAAK,SAAUohC,GAEd,MAD+D,KAA9CA,EAAc,GAAG2J,yBAAmClzC,EAAKgE,GAAGkvC,yBAAyB3J,EAAc,EAAA,EAAI,IAAM,E,GAG/HpoC,KAAK,IAAK,CAAA,EACVA,KAAK,IAAKqwC,CAAA,EACV7sC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EACxB5nC,KAAKmwC,EAA6B,EAArBnH,EAAWnqC,EAAKY,CAAA,CAAK,EAClC4H,KAAK8pC,EA7RgB,EA6RP,CAAA,EApBRryC,KAsBNuB,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACvC,IAAIytB,EAAYZ,EAASj8B,MAAMxW,KAAMyB,SAAA,EACjC8xC,EAAiC,EAArBrJ,EAAWnqC,EAAKY,CAAA,EAAS2wC,EAQzC,OAPGpxC,EAAEmoC,YAAYtoC,EAAKgE,GAAGmvC,eAAe/nC,CAAA,CAAA,IACtCooC,EAAiC,EAArBrJ,EAAWnqC,EAAKY,CAAA,EAAS2wC,GAEpC8B,IACDD,GAAmBlC,GAErBmC,EAAejoC,EAAK2mC,mBACb,CAACyB,EAAYjC,EAAuB+B,EAzR9BzC,EAyR2CuC,E,QAOhEpzC,EAAK6E,MAAM,WAAY7E,EAAKokC,OAAOiG,KAAKyI,SAAS,CAC/ChuC,SAAW,SAAUzC,GACnB,OAAOpC,KAAKiF,UAAU,SAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAS,WAEP,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAU3C8uC,GATOlhB,EAAMvxB,OAAO,GAAA,EAAKA,OAAO,MAAA,EAAQ2D,QAAQ,YAAY,CAAA,CAAA,EAAMxD,KAAK,CACzEya,OAAU,iBACVC,KAAO,M,GAET61B,EAAWnf,EAAO,MAAA,EAAQpxB,KAAK,cAAe,0BAAA,EAC9CoxB,EAAMvxB,OAAO,MAAA,EAAQuE,MAAM,SAAS,SAAA,EAAWZ,QAAQ,QAAQ,CAAA,CAAA,EAAM3D,OAAO,OAAA,EACvE2D,QAAQ,KAAK,CAAA,CAAA,EACbxD,KAAK,qBAAsB,QAAA,EAC3BgH,KA5UQ,GA4UH,EACOoqB,EAAMvxB,OAAO,GAAA,GAK1B0yC,GAJJhC,EAAW+B,EAAY,MAAA,EAAQ9uC,QAAQ,kBAAmB,CAAA,CAAA,EAC1D+sC,EAAW+B,EAAY,MAAA,EAAQ9uC,QAAQ,iBAAkB,CAAA,CAAA,EACzD+sC,EAAW+B,EAAY,MAAA,EAAQ9uC,QAAQ,kBAAmB,CAAA,CAAA,EAEnC4tB,EAAMvxB,OAAO,GAAA,GAOpC,OANA0wC,EAAWgC,EAAkB,MAAA,EAAQ/uC,QAAQ,eAAe,CAAA,CAAA,EAC5D+sC,EAAWgC,EAAkB,MAAA,EAAQ/uC,QAAQ,0BAA0B,CAAA,CAAA,EACvE+sC,EAAWgC,EAAiB,MAAA,EACvB/uC,QAAQ,OAAO,CAAA,CAAA,EAAMA,QAAQ,KAAK,CAAA,CAAA,EAClCwD,KAAK,SAASjE,GAAK,MAAO,GAAA,CAAA,EAC/BquB,EAAMvxB,OAAO,MAAA,EAAQ2D,QAAQ,MAAO,CAAA,CAAA,EAC7B4tB,C,EAETptB,OAAS,CACPuiC,KAAO,WACLznC,KAAKiO,OAAA,C,EAEP9I,MAAQ,WACJ,IAAI6jC,EAAShpC,KACTuzC,EAAYrJ,EAAWnqC,EAAKY,CAAA,EAC5BqqC,EAAgBjrC,EAAKkC,MAAMe,MAAA,EAAQ,GACnC0wC,EAAe1I,EAAgB,GAC/BmI,EAAkB,EAClBC,EAAe,CAAA,EA2Ef9gB,GAtEJ0W,EAAOznC,UAAU8nC,EAAU,SAAUl+B,EAAMya,GACrC,IAAIytB,EAAYZ,EAASj8B,MAAMxW,KAAMyB,SAAA,EAKrC,OAJG2xC,IACDD,GAAmBlC,GAErBmC,EAAejoC,EAAK2mC,mBACb,CAACyB,EAAYjC,EAAuB+B,EApVpCzC,EAoV2D,IAAVU,EAAgB6B,EAAA,CAAA,C,EAEzE7tC,MAAM,UAAU,SAAUqsC,GACzB,OAAQ5xC,EAAKgE,GAAG+tC,mBAAmBH,EAAa,EAAA,EAAO,QAAQ,M,GAGzD3I,EAAOzmC,OAAO,MAAA,EACrBmC,QAAQ,OAAQ,CAAA,CAAA,EAChBxD,KAAKkwC,EAAW,EAAA,EAChBlwC,KAAKmwC,EAAQrG,CAAA,EACb1lC,MAAM,OAAQ0rC,CAAA,EACdzvC,UApBa,GAoBUoyC,EAAuB,EAEnD3K,EAAOzmC,OAAO,YAAA,EAAcrB,KAAK,CAACmwC,OAAOrG,EAAgB,GACvD/mC,EAAI,6BAA8ByvC,EAAc,QAAUA,EAAc,W,GAG1E1K,EAAOzmC,OAAO,iBAAA,EACX2F,KAAK,SAAUohC,GAEd,OADgBvpC,EAAKgE,GAAGmvC,eAAe5J,EAAc,EAAA,CAC9C,CAAA,EACNpoC,KAAK,IAAK0yC,EAAc,EACxB1yC,KAAK,IA9BQ,EA8BH,EACVwD,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EAE7BE,EAAOzmC,OAAO,QAAA,EAAUA,OAAO,OAAA,EAASrB,KAAK,IAAI8pC,CAAA,EAAe9pC,KAAK,IAlCnD,EAkCuD,EAAaD,GAAG,QAAQ8wC,CAAA,EAEjG/I,EAAOzmC,OAAO,kBAAA,EAAoB2F,KAAK,YAAA,EAClChH,KAAK,IAAK0yC,EAAc,EACxB1yC,KAAK,IAxCiB,EAwCZ,EACVwD,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EAE/BE,EAAOzmC,OAAO,iBAAA,EAAmB2F,KAAK,cAAA,EACjChH,KAAK,IAAK8pC,EAAgB,EAAI,EAAA,EAC9B9pC,KAAK,IA9CmB,EA8Cd,EACVwD,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EAE7BE,EAAOzmC,OAAO,kBAAA,EAAoB2F,KAAK,YAAA,EAClChH,KAAK,IAAK8pC,EAAgB,EAAA,EAC1B9pC,KAAK,IApDmB,EAoDd,EACVwD,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EAE7BE,EAAOzmC,OAAO,eAAA,EAAiB2F,KAAK,+BAAA,EAC/BhH,KAAK,IAAK0yC,EAAc,EACxB1yC,KAAK,IAAKyyC,GAA2BrC,EAAU,CAAA,EAC/C5sC,QAAQ,YAAa,CAAA,CAAA,EACrBxD,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EAE7BE,EAAOzmC,OAAO,0BAAA,EAA4B2F,KAAK,yBAAA,EAC1ChH,KAAK,IAAK8pC,EAAgB,GAAA,EAC1B9pC,KAAK,IAAKyyC,GAA2BrC,EAAU,CAAA,EAC/C5sC,QAAQ,YAAa,CAAA,CAAA,EACrBA,QAAQ,eAAe,CAAC3E,EAAKqC,KAAK+1B,yBAAA,EAClCj3B,KAAKkwC,EAAWtxC,EAAQgpC,YAAA,EACxB7nC,GAAG,QAAQmxC,CAAA,EAEhBpJ,EAAOzmC,OAAO,OAAA,EACTrB,KAAK,IAAK8nC,EAAOzmC,OAAO,eAAA,EAAiBpB,KAAA,EAAOojC,QAAA,EAAU/iC,MAAQ8vC,CAAA,EAClEpwC,KAAK,IAAKyyC,GAA2BrC,EAAU,CAAA,EAEtCtI,EAAO/jC,UAAU,UAAA,EACxB7C,KAAKrC,EAAK8zC,OAAA,GAIXrI,GAFJlZ,EAAMmV,KAAA,EAAOx5B,OAAA,EAEGqkB,EAAMmZ,MAAA,EACjB1qC,OAAO,GAAA,EAAK2D,QAAQ,UAAW,CAAA,CAAA,GAKhCovC,GAHJtI,EAAUzqC,OAAO,MAAA,EACZ2D,QAAQ,SAAU,CAAA,CAAA,EAEZ3E,GACX+zC,EAAK7xC,MAAM+C,OAAO,CAAC,EAAG,EAAA,EAEtBstB,EAAM/vB,OAAO,SAAA,EACRrB,KAAKkwC,EArcU,EAqcC,EAChBlwC,KAAKmwC,EAAQ0C,GAAoB,EACjC7yC,KAAK,OAAQ8vC,CAAA,EACbzvC,UAAU,SAAU4J,EAAMya,GACzB,MAAO,CAACkuB,EAAK7xC,MAAM2jB,CAAA,EAAS,GAxchB,K,GA2clB4lB,EAAUzqC,OAAO,MAAA,EACZ2D,QAAQ,aAAc,CAAA,CAAA,EAE3B4tB,EAAM/vB,OAAO,aAAA,EACRrB,KAAKkwC,EAhdU,EAgdC,EAChBlwC,KAAKmwC,EAldM,CAkdE,EACbnwC,KAAK,OArdM,SAqdE,EACbK,UAAU,SAAU0C,EAAGsC,EAAGgjC,GACzB,OAAGxpC,EAAKqC,KAAKglB,KAAKmiB,GAAG,GAAGyK,oBACf,CAACF,EAAK7xC,MAAOlC,EAAKqC,KAAKglB,KAAKmiB,GAAG,GAAGxxB,WAAa,CAAA,EAAM,GApdlD,MAqdC,CAAC,EArdF,K,OAgiB1BhY,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAGzBiG,YAAc,SAAUnhC,EAAM8oC,GAC5B,MAAY,aAATA,EACMj0C,KAAK+D,GAAGmwC,SAASttC,IAAI,SAAU7C,GACpC,OAAOA,EAAGoH,CAAA,C,GAEG,cAAT8oC,EACCj0C,KAAK+D,GAAGowC,UAAUvtC,IAAI,SAAU7C,GACrC,OAAOA,EAAGoH,CAAA,C,GAEFnL,KAAK+D,GAAGqwC,oBAAoBxtC,IAAI,SAAU7C,GAClD,OAAOA,EAAGoH,CAAA,C,IAGhBtI,UAAY,SAAUT,GACpB,IAqCMoqC,EAmBApmC,EAQJqmC,EAhEE1sC,EAAOC,KAuFX,OArFIoC,IAASrC,EAAKqC,OAChBlC,EAAEuD,SAASrB,EAAM,CACf2B,GAAK,GACLoM,SAAW/N,EAAKA,KAAKV,OACrBoiB,YAAc,C,GAEhB/jB,EAAKgE,GAAK7D,EAAEuD,SAASrB,EAAK2B,GAAI,CAC5BkvC,yBAA2B/yC,EAAEsI,SAAS,0BAAA,EACtCuqC,cAAgB7yC,EAAEsI,SAAS,eAAA,EAC3B4rC,oBAAsBl0C,EAAEsI,SAAS,qBAAA,EACjC0rC,SAAWh0C,EAAEsI,SAAS,UAAA,EACtB2rC,UAAYj0C,EAAEsI,SAAS,WAAA,EACvBuP,WAAY7X,EAAEsI,SAAS,YAAA,EACvBlE,MAAQ,CAAC,U,GAEXpE,EAAEuD,SAASrB,EAAK2B,GAAI,CAClB4hB,WAAavjB,EAAK2B,GAAG4hB,WACrB0uB,aAAcjyC,EAAK2B,GAAGswC,Y,GAEnBn0C,EAAEuW,QAAQ1W,EAAKgE,GAAGqwC,mBAAA,IACrBr0C,EAAKgE,GAAGqwC,oBAAsB,CAACr0C,EAAKgE,GAAGqwC,sBAEpCl0C,EAAEuW,QAAQ1W,EAAKgE,GAAGmwC,QAAA,IACrBn0C,EAAKgE,GAAGmwC,SAAW,CAACn0C,EAAKgE,GAAGmwC,WAEzBh0C,EAAEuW,QAAQ1W,EAAKgE,GAAGowC,SAAA,IACrBp0C,EAAKgE,GAAGowC,UAAY,CAACp0C,EAAKgE,GAAGowC,YAE1Bj0C,EAAEuW,QAAQ1W,EAAKgE,GAAG4hB,UAAA,IACrB5lB,EAAKgE,GAAG4hB,WAAa,CAAC5lB,EAAKgE,GAAG4hB,aAE5BzlB,EAAEuW,QAAQ1W,EAAKgE,GAAGO,KAAA,IACpBvE,EAAKgE,GAAGO,MAAQ,CAACvE,EAAKgE,GAAGO,QAGvBkoC,EAAiB,SAAUrhC,EAAM8oC,GACnC,OAAO/zC,EAAEk+B,IAAIr+B,EAAKusC,YAAYnhC,EAAM8oC,CAAA,CAAA,C,EAWlCK,EAAU30C,GAAGiI,IAAIxF,EAAKA,KARN,SAAS+I,GAC3B,OAAOqhC,EAAerhC,EAAM,UAAA,C,CAOE,EAC5BopC,EAAW50C,GAAGyG,IAAIhE,EAAKA,KALN,SAAS+I,GAC5B,OAAOqhC,EAAerhC,EAAM,WAAA,C,CAIG,EAC7BqpC,EAAkBruC,KAAKU,IAAIytC,CAAA,EAAWC,EAAWpuC,KAAKU,IAAIytC,CAAA,EAAWC,EAOzEx0C,EAAKkC,MAAM+C,OAAO,CAAC,CAAC,GAFhBoB,EAAMouC,EAAkB,IAAO,IAAOA,GAEbpuC,EAAA,EAAMmiC,KAAA,EAMnCkE,GAAYA,EAHIvsC,EAAEkC,EAAKA,IAAA,GAGDwE,IAAI,SAAU3C,EAAGsC,GACrC,MAAO,CAACtC,EAAGsC,EAAI,E,GAIbnE,EAAK2B,GAAGgB,SACV0nC,EAAYA,EAAU1nC,OAAO,SAAUoG,EAAM5E,GAC3C,OAAOnE,EAAK2B,GAAGgB,OAAOoG,EAAK,GAAI5E,CAAA,C,IAKnCnE,EAAKA,KAAOqqC,EAAUxqC,MAAA,EAEtBG,EAAKglB,KAAOhlB,EAAKA,KAAKkG,OAAOlG,EAAK0hB,YAAc,GAAK1hB,EAAK+N,SAAU/N,EAAK0hB,YAAc1hB,EAAK+N,QAAA,EAE5FpQ,EAAKipC,OAAOhkC,OAAOrF,GAAGqD,MAAMZ,EAAKglB,KAAK1lB,MAAA,CAAA,EAEtC3B,EAAKqC,KAAOA,EAEZrC,EAAK8zC,QAAQ,CAAC,CAAC,EAAG,CAAC,EAAG,EAAG,EAAG,IAGvBzxC,C,OC7pBb,WACE,aAEAzC,GAAGC,MAAM,WAAA,EAAaO,OAAO,kBAAmB,CAC9CN,WAAY,SAAUC,GACpB,IAAIC,EAAOC,KAWPwqC,GAVJ1qC,EAAUA,GAAW,GAErBI,EAAEulB,aAAa3lB,EAAS,CACtBkkB,WAAY,CAAA,EACZI,WAAY,EACZD,iBAAkB,CAAA,EAClBskB,YAAa,CAAA,EACbK,aAAc,E,GAGA,UACZpnC,EAAS,QAET+yC,EAAmB,UA0FvB,SAASpO,IACP,IAAI2D,EAAUlqC,EAAQskB,WAEtBrkB,EAAKipC,OAAOmB,gBAAgB,CAAC,EAAGpqC,EAAKa,GAAIopC,EAAS,CAAA,EAGlDjqC,EAAK6E,MAAM,UAAA,EAAYrD,UAAU,EAAG,CAAA,EAEpCxB,EAAKkC,MAAMe,MAAM,CAAC,EAAGmD,KAAKC,IAAKrG,EAAK,EAAI,CAAA,EAAA,C,CA3F1CA,EAAKokC,OAAS,CACZ0O,SAAU9yC,EAAKc,KAAKE,OAAO,GAAA,EAAK2D,QAAQ,WAAY,CAAA,CAAA,C,EAGtD3E,EAAKipC,OAASrpC,GAAGwE,MAAMomC,QAAA,EACvBxqC,EAAKkC,MAAQtC,GAAGwE,MAAMC,OAAA,EAetBrE,EAAK6E,MAAM,WAAY7E,EAAKokC,OAAO0O,SAAU,CAC3ChuC,SAAU,SAAUzC,GAClB,OAAOpC,KAAKiF,UAAU,SAAA,EACjB7C,KAAKA,EAAKglB,IAAA,C,EAEjBxkB,OAAQ,WACN,IAAI0vB,EAAQtyB,KAAKe,OAAO,GAAA,EAAK2D,QAAQ,SAAU,CAAA,CAAA,EAE/C,OADA4tB,EAAMvxB,OAAO,MAAA,EAAQ2D,QAAQ,MAAO,CAAA,CAAA,EAC7B4tB,C,EAETptB,OAAQ,CACNuiC,KAAM,WACJznC,KAAKiO,OAAA,C,EAEP9I,MAAO,WACQnF,KAENuB,WA3BMwC,EA2Bc,SAAUoH,GAEnC,MAAO,CAAC,EAvBhB,SAAkBA,EAAMya,GACtB,OAAO7lB,EAAKipC,OAAOpjB,CAAA,C,EAqBYpP,MAAMxW,KAAMyB,SAAA,EA1C5B,E,EAeR,SAAU6nC,EAAe/iC,EAAGgjC,EAAGtE,GACpC,OAAOlhC,EAAGR,KAAKvD,KAAMspC,EAAc,GAAI/iC,EAAGgjC,EAAGtE,CAAA,C,IAuB9BjlC,KAQMuC,OAAO,MAAA,EACrBmC,QAAQ,OAAQ,CAAA,CAAA,EAChBxD,KAAKspC,EAAW1qC,EAAQgpC,YAAA,EACxB5nC,KAAKQ,EAAQ3B,EAAKY,CAAA,EAClB2E,MAAM,OAAQmvC,CAAA,EAZnB,IAzBa1wC,EAuCTuuB,EAdStyB,KAcMiF,UAAU,UAAA,EACxB7C,KAAKrC,EAAK8zC,OAAA,EAIXrI,GAFJlZ,EAAMmV,KAAA,EAAOx5B,OAAA,EAEGqkB,EAAMmZ,MAAA,EACjB1qC,OAAO,GAAA,EAAK2D,QAAQ,UAAW,CAAA,CAAA,GAEpC8mC,EAAUzqC,OAAO,MAAA,EACZ2D,QAAQ,SAAU,CAAA,CAAA,EAEvB4tB,EAAM/vB,OAAO,SAAA,EACRrB,KAAKspC,EAlEU,EAkEC,EAChBtpC,KAAKQ,EAAQgzC,GAAkB,EAC/BxzC,KAAK,OAAQuzC,CAAA,EACblzC,UAAU,SAAU4J,EAAMya,GACzB,MAAO,CAAuB,IAAtB7lB,EAAKkC,MAAM2jB,CAAA,EAAe,EAAK7lB,EAAKkC,MAAM2jB,CAAA,EAnEvC,CAAA,EADC,CAAA,E,GAuElB4lB,EAAUzqC,OAAO,MAAA,EACZ2D,QAAQ,aAAc,CAAA,CAAA,EAE3B4tB,EAAM/vB,OAAO,aAAA,EACRrB,KAAKspC,EA7EU,EA6EC,EAChBtpC,KAAKQ,EA/EM,CA+EE,EACbR,KAAK,OAlFM,SAkFE,EACbK,UAAU,SAAU0C,EAAGsC,EAAGgjC,GACrBoL,EAAc50C,EAAKqC,KAAKglB,KAAKmiB,GAAG,GAAGxxB,WAAa,EACpD,MAAO,CAA6B,IAA5BhY,EAAKkC,MAAM0yC,CAAA,EAAqB,EAAI50C,EAAKkC,MAAM0yC,CAAA,EAAe,CAAA,EAhF1D,CAAA,E,OAiGxB50C,EAAKkB,GAAG,eAAgBolC,CAAA,EACnBplC,GAAG,gBAAiBolC,CAAA,EACpBplC,GAAG,cAAeolC,CAAA,C,EAGzBiG,YAAa,SAAUnhC,GACrB,OAAOnL,KAAK+D,GAAG9B,MAAM2E,IAAI,SAAU7C,GACjC,OAAOA,EAAGoH,CAAA,C,IAGdtI,UAAW,SAAUT,GACnB,IAAIrC,EAAOC,KAEX,GAAIoC,IAASrC,EAAKqC,KAAM,CAiBtB,GAhBAlC,EAAEuD,SAASrB,EAAM,CACf2B,GAAI,E,GAENhE,EAAKgE,GAAK7D,EAAEuD,SAASrB,EAAK2B,GAAI,CAC5B9B,MAAO/B,EAAEsI,SAAS,YAAA,EAClBlE,MAAO,CAAC,U,GAGLpE,EAAEuW,QAAQ1W,EAAKgE,GAAG9B,KAAA,IACrBlC,EAAKgE,GAAG9B,MAAQ,CAAClC,EAAKgE,GAAG9B,QAEtB/B,EAAEuW,QAAQ1W,EAAKgE,GAAGO,KAAA,IACrBvE,EAAKgE,GAAGO,MAAQ,CAACvE,EAAKgE,GAAGO,QAIA,EAAvBvE,EAAKgE,GAAG9B,MAAMP,SACZ,CAACxB,EAAEuW,QAAQ1W,EAAKgE,GAAG8pB,UAAA,GAAe9tB,EAAKgE,GAAG8pB,WAAWnsB,SAAW3B,EAAKgE,GAAG9B,MAAMP,QAChF,MAAM,IAAI0G,MAAM,kGAAA,EAIpBrI,EAAKkC,MAAM+C,OAAO,CAAC,EAAG,EAAA,EAGtB,IAGAynC,GAAYA,EAHIvsC,EAAEkC,EAAKA,IAAA,GAGDwE,IAAI,SAAU3C,EAAGsC,GACrC,MAAO,CAACtC,EAAGsC,EAAI,E,GAIjBnE,EAAKA,KAAOqqC,EAAUxqC,MAAA,EACtBG,EAAKglB,KAAOhlB,EAAKA,KACjBrC,EAAKipC,OAAOhkC,OAAOrF,GAAGqD,MAAMZ,EAAKglB,KAAK1lB,MAAA,CAAA,EAEtC3B,EAAKqC,KAAOA,EACZrC,EAAK8zC,QAAU,CAAC,CAAC,EAAG,CAAC,EAAG,EAAG,EAAG,E,CAGhC,OAAOzxC,C,OC/Kb,WACE,aAOA,SAASwyC,EAASnrC,EAAWO,EAAQkC,EAAKjC,EAAa4C,EAAiBzD,GACtE,IAAIka,EAAKtjB,KAWL60C,GATJvxB,EAAGwxB,oBAAsB,WACvBjoC,EAAgBioC,oBAAoB1rC,EAAgB2B,SAAA,EACpDf,EAAOL,GAAG2Z,EAAGyxB,aAAA,C,EAMf9qC,EAAY2U,eAAA,EACiB1e,EAAE0N,KAAK1B,EAAI2B,SAAA,EAAY,SAAU3C,GAC5D,OAAOzB,EAAUqE,OAAO5C,EAAStB,SAAA,C,IAEnC0Z,EAAGyxB,cAAgBF,GAA0BA,EAAuBxqC,MAAMrC,KAAA,EAG1EiC,EAAYiN,kBAAA,C,0FAvBdlI,QACKC,OAAO,UAAA,EACPe,WAAW,WAAY4kC,CAAA,C,ICL9B,WACE,aAOA,SAASI,EAAiB/qC,GACxBA,EAAYiN,kBAAA,C,2BANdlI,QACKC,OAAO,SAAA,EACPe,WAAW,mBAAoBglC,CAAA,C,ICLtC,WACE,aASA,SAASC,EAAkB1oC,EAAcugC,EAAS7pB,EAAUpF,EAAS1G,EAAcI,EAAiBxF,EAAQ0F,EACjFE,EAAWE,EAAmBE,EAAYI,EAAgBE,EAAgBJ,EAC1Ei9B,EAAcC,EAAUC,EAAW7lB,EAAcnM,GAE1E,IAmDMiyB,EAnDF/xB,EAAKtjB,KAsBLs1C,GArBJhyB,EAAGvR,OAASA,EACZuR,EAAGnM,aAAe,GAClBnI,QAAQyN,KAAKtF,EAAcmM,EAAGnM,YAAA,EAC9BmM,EAAGnM,aAAaG,QAAU/K,EAAa+K,QACvCgM,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EACxDgT,EAAG2U,QAAU,GACb3U,EAAG7L,gBA6EH,SAA+B89B,GAC7B,CAAA,IACIC,EADJ,GAAGt1C,EAAEuW,QAAQ8+B,CAAA,EAUX,OATEC,EAAO,GACTD,EAAWp7B,QAAQ,SAAUhP,GACrBqqC,EAAKrqC,EAAK6N,WACZw8B,EAAKrqC,EAAK6N,WAAWU,gBAAkB,KAAOvO,EAAKuO,eAGnD87B,EAAKrqC,EAAK6N,WAAa7N,C,GAGtBjL,EAAEy5B,QAAQz5B,EAAE40B,OAAO0gB,CAAA,EAAO,cAAA,C,GAxFM/9B,CAAA,EAC3C6L,EAAGmyB,0BAA4BC,EAAc79B,CAAA,EAC7CyL,EAAGqyB,kBAAoBD,EAAc/9B,CAAA,EAErC2L,EAAG4W,cAAgB3tB,EAAa2tB,cAChC5W,EAAGsyB,iBAAmBrpC,EAAamE,YACnC4S,EAAGgC,eAAiB/Y,EAAa0tB,kBAEjC3W,EAAGuyB,OAAS,WACV/I,EAAQgJ,QAAQC,KAAA,C,EAGlBzyB,EAAGnM,aAAaY,WAAaR,GAAmBA,EAAgBQ,WAChEuL,EAAG0yB,gBAAmB1yB,EAAGnM,aAAa,iBAAsD,IAAlCmM,EAAGnM,aAAa6+B,iBAAuBnwB,QAAQ,CAAA,EAAM3lB,EAAE+1C,QAAQ9+B,CAAA,EAAiB+mB,KAAAA,EAAY,GACtJ5a,EAAGnM,aAAa++B,WAAad,EAAUe,SAAS7yB,EAAG0yB,eAAA,EAC/B1yB,EAAGnM,aAAa++B,WAAWp5B,MAAM,GAAA,GAiDrD,SAASs5B,EAAaroB,EAAM9rB,GAC1B,OAAO8rB,GACL,IAAK,KAAM,OAAO9rB,EAAQ,IAAM8rB,EAAO,OAAS9rB,EAAMizC,GAAcrvB,QAAQ,CAAA,EAAK,MAEjF,IAAK,KAAM,OAAQ5jB,EAAMizC,GAAcrvB,QAAQ,CAAA,EAAK,IAAMkI,EAAO,MAAQ9rB,EAAQ,MAEjF,IAAK,KAAM,OAAOA,EAAQ,UAAYA,EAAMkzC,GAAUtvB,QAAQ,CAAA,EAAKkI,EAEnE,IAAK,KAAM,OAAQ9rB,EAAMkzC,GAAUtvB,QAAQ,CAAA,EAAK,SAAW5jB,EAAS,IAAM8rB,C,EAqC9E,SAAS2nB,EAAcW,GACrB,IAAIC,EAAS,GAQb,OAPAD,EAAIl8B,QAAQ,SAAUo8B,GACpB,IAAIvpC,EAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAKs9B,EAAIC,gBAAA,CAAA,EAC7CxpC,IACDupC,EAAI,KAAUvpC,EAAchF,KAC5BsuC,EAAOvuC,KAAKwuC,CAAA,E,GAGTD,C,CAtGThzB,EAAGmzB,aAAsC,EAAvBnB,EAAc5zC,OAAa4zC,EAAc,GAAK,IAAMA,EAAc,GAAKA,EAAc,GAEvGhyB,EAAGvL,WAAaA,GAAcA,EAAW,GACzCuL,EAAGozB,YAyEH,WACE,IAAIrB,EAAW,GACXn1C,EAAEmoC,YAAY/kB,EAAGnM,aAAaY,UAAA,GAChCs9B,EAASttC,KAAK,CACZ4uC,UAAW,aACX5+B,WAAYuL,EAAGnM,aAAaY,U,GAG5BuL,EAAGvL,YAAc,CAAC7X,EAAEmoC,YAAY/kB,EAAGvL,WAAWA,UAAA,GAChDs9B,EAASttC,KAAK,CACZ4uC,UAAW,QAAUrzB,EAAGvL,WAAWzC,WAAa,IAAMgO,EAAGvL,WAAWpD,SACpEoD,WAAYuL,EAAGvL,WAAWA,U,GAG9B,OAAOs9B,C,EAvFQ,EACjB/xB,EAAGkG,QAAU,CAAC,GAAI,YAAa,aAAc,aAE7ClG,EAAGG,eAAiBvjB,EAAEojB,EAAGozB,WAAA,EAAa9vC,IAAI,SAASxE,GACjD,MAAO,CACLu0C,UAAYv0C,EAAKu0C,UACjBC,YAAarnB,EAAa4J,mBAAmB,CAAC,CAACphB,WAAY3V,EAAK2V,UAAA,EAAA,C,IAEjE9V,MAAA,EAEHqhB,EAAGuzB,0BAA4B,CAC7BC,SAAU7+B,EACV8+B,UAAW72C,EAAE6E,OAAOoT,EAAgB,CAAC4V,KAAM,IAAA,CAAA,EAC3CipB,UAAW92C,EAAE6E,OAAOsT,EAAgB,CAAC0V,KAAM,IAAA,CAAA,C,EAG7CzK,EAAG2zB,4BAQ6BC,EARuB5zB,EAAGuzB,0BASpDxB,EAAW,GACfn1C,EAAEi3C,OAAOD,EAAmB,SAASh1B,GAChCA,GAA4B,EAAhBA,EAASxgB,UAClB01C,EAAgBl3C,EAAEimB,MAAMjE,EAAU,SAAA,GACrB40B,SACfM,EAAc,MAAW,OAASA,EAAcN,SACxCM,EAAcL,UACtBK,EAAc,MAAWhB,EAAagB,EAAcrpB,KAAMqpB,EAAcL,SAAA,EAChEK,EAAcJ,UACtBI,EAAc,MAAWhB,EAAagB,EAAcrpB,KAAMqpB,EAAcJ,SAAA,EAExEI,EAAc,MAAW,GAE3BA,EAAc,SAAyC,IAA3BA,EAAc,SAAkBvxB,QAAQ,CAAA,EACpEwvB,EAASttC,KAAKqvC,CAAA,E,GAGX/B,GAxByB,oBAA/B9oC,EAAa2tB,gBACd5W,EAAGnM,aAAaw/B,UAAYp/B,EAAgB+gB,WAC5ChV,EAAGnM,aAAa7B,WAAagO,EAAGvL,YAAcuL,EAAGvL,WAAWzC,WAC5DgO,EAAGnM,aAAaxC,SAAW2O,EAAGvL,YAAcuL,EAAGvL,WAAWpD,UAiF5D2O,EAAG2E,qBAAuB,WACxB,IACIhY,EAAS,CACX6W,SAAYjJ,EAAQ,WAAA,EAAayF,EAAGsyB,gBAAA,EACpCjlC,OAAU2S,EAAGgC,c,EAEf,OAAOlC,EAAO6E,qBALC,gBAK8BhY,CAAA,C,wRAjJjDjB,QACKC,OAAO,4BAAA,EACPe,WAAW,oBAAqBilC,CAAA,EAChC/lC,SAAS,eAAgB,KAAA,EACzBA,SAAS,WAAY,OAAA,C,ICP5B,WACE,aAOA,SAASkI,EAAc4J,EAAIJ,EAAKtU,EAAc+qC,EAAaC,EAAgBltB,EAAWmtB,GAEpF,IAAIC,EAAwBH,EAAYv0B,eAMxC,SAA6B20B,GAC3B,OAAOv3C,EAAEiK,GAAGstC,EAAYH,EAAe10B,QAAA,C,EALzC,WACE,OAAO5B,EAAG5Q,QAAA,C,CAHgE,EAU5E,MAAO,CACLC,iBAYF,SAA0BC,GACxB,OAAOhE,EAAa+D,iBAAiBC,CAAA,C,EAZrC+G,uBAeF,SAA6B/G,EAAUgH,EAAS3G,EAAQD,GACtD,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,WAAY,CAC9GrH,OAAQ,CAACU,OAAOA,EAAQD,YAAaA,CAAA,EACrCgnC,oBAAqB,CAAA,C,EACpBF,CAAA,EAAuB9pC,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAlB1CgP,0BAqBF,SAAgClH,EAAUgH,EAAS3G,EAAQD,GACzD,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,cAAe,CACjHrH,OAAQ,CAACU,OAAOA,EAAQD,YAAaA,CAAA,EACrCgnC,oBAAqB,CAAA,C,EACpBF,CAAA,EAAuB9pC,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAxB1CkP,0BA2BF,SAAgCpH,EAAUgH,EAAS3G,EAAQD,EAAaiE,EAAUW,GAChF,OAAOsL,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,cAAe,CACjHrH,OAAQ,CAACqF,WAAYA,EAAYX,SAAUA,EAAUjE,YAAaA,EAAaC,OAAQA,CAAA,EACvF+mC,oBAAqB,CAAA,C,EACpBF,CAAA,EAAuB9pC,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA9B1CoP,6BAiCF,SAAmCtH,EAAUgH,EAAS3G,EAAQD,GAC5D,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,uBAAwB,CAC1HrH,OAAQ,CAACU,OAAOA,EAAQD,YAAaA,CAAA,C,GACpChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAnCnBsP,qCAsCF,SAA2CxH,EAAUgH,EAAS3G,EAAQD,EAAaiE,EAAUW,GAC3F,OAAOsL,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,uBAAwB,CAC1HrH,OAAQ,CAACoB,mBAAoBiE,EAAYhE,iBAAkBqD,EAAUhE,OAAOA,EAAQD,YAAaA,CAAA,C,GAChGhD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAxCnBwP,4BA2CF,SAAkC1H,EAAUK,EAAQD,EAAaiE,EAAUW,GACzE,OAAOsL,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,4BAA6B,CACrFL,OAAQ,CAACqF,WAAYA,EAAYX,SAAUA,EAAUjE,YAAaA,EAAaC,OAAQA,CAAA,C,GACtFjD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA7CnB4P,wBAgDF,SAA8B9H,EAAUgH,EAAS3G,EAAQD,GACvD,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,mBAChG,CACErH,OAAQ,CAACU,OAAQA,EAAQD,YAAaA,CAAA,C,GAE1ChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EApDlB8P,wBAuDF,SAA8BhI,EAAUgH,EAAS3G,EAAQD,GACvD,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,mBAChG,CACErH,OAAQ,CAACU,OAAQA,EAAQD,YAAaA,CAAA,C,GAE1ChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA3DlB0P,0BA8DF,SAAgC5H,EAAUgH,EAAS3G,EAAQD,GACzD,OAAOkQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAYsQ,EAAIU,gBAAgBi2B,EAAWjgC,CAAA,EAAW,qBAChG,CACErH,OAAQ,CAACU,OAAQA,EAAQD,YAAaA,CAAA,C,GACrChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,gGA7F3BwG,QACKC,OAAO,4BAAA,EACP6R,QAAQ,gBAAiB1J,CAAA,C,ICLhC,WACE,aAOA,SAASmB,EAAkByI,EAAIJ,EAAKtU,EAAc8d,GAEhD,MAAO,CACL/Z,iBAQF,SAA0BC,GACxB,OAAOhE,EAAa+D,iBAAiBC,CAAA,C,EARrCoI,wBAWF,SAAiCpI,EAAUI,EAAaC,GACtD,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,mCAAoC,CAC5FuQ,MAAO,CAAA,EACP5Q,OAAQ,CAACU,OAAQA,EAAQD,YAAaA,CAAA,C,GACrChD,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAdnBoR,oBAiBF,SAA6BtJ,EAAUgF,EAAYX,EAAUqE,EAAWtI,EAAaC,GACnF,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,sCAAuC,CAC/FuQ,MAAQ,CAAA,EACR5Q,OAAS,CAACqF,WAAaA,EAAYX,SAAWA,EAC5CqE,UAAYA,EAAWtI,YAAaA,EAAaC,OAAQA,CAAA,C,GAC1DjD,KAAKxN,EAAEsI,SAAS,YAAA,CAAA,C,EArBnBsR,sBAwBF,SAA+BxJ,EAAUgF,EAAYX,EAAUqE,EAAWU,EAAgBhJ,EAAaC,GACrG,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,kCAAmC,CAC3FuQ,MAAQ,CAAA,EACR5Q,OAAS,CAACqF,WAAaA,EAAYX,SAAWA,EAC5CqE,UAAYA,EAAWU,eAAiBA,EACxChJ,YAAaA,EAAaC,OAAQA,CAAA,C,GACnCjD,KAAKxN,EAAEsI,SAAS,YAAA,CAAA,C,EA7BnBwR,sBAgCF,SAA+B1J,EAAUgF,EAAYX,EAAUqE,EAAWU,EAAgBhJ,EAAaC,GACrG,OAAOiQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,kCAAmC,CAC3FuQ,MAAQ,CAAA,EACR5Q,OAAS,CAACqF,WAAaA,EAAYX,SAAWA,EAC5CqE,UAAYA,EAAWU,eAAiBA,EACxChJ,YAAaA,EAAaC,OAAQA,CAAA,C,GACnCjD,KAAKxN,EAAEsI,SAAS,YAAA,CAAA,C,EArCnBgQ,4BAwCF,SAAqClI,GACnC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB8I,EAAW9Z,CAAA,EAAY,sCAAuC,CAACuQ,MAAQ,CAAA,CAAA,CAAA,EAAOnT,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,qDAtDrIwG,QACKC,OAAO,uBAAA,EACP6R,QAAQ,oBAAqBvI,CAAA,C,ICLpC,WACE,aAOA,SAASo/B,EAAwB32B,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,EAAKwJ,GAE/E,MAAO,CACL/B,eAqDF,SAAwBnK,EAAMlR,EAAeotB,EAAoBC,EAAkBthB,EAC3D6+B,EAAwBtyB,EAAgBR,EAAqBiE,EAAiBC,GACpG,OApDF,SAAwB9K,EAAMlR,EAAeotB,EAAoBC,EAAkBthB,EAC3D6+B,EAAwBtyB,EAAgBR,EAAqBiE,EAAiBC,GACpG,OAAOhI,EAAGiI,KAYZ,SAAiB/K,EACAlR,EACAotB,EACAC,EACAthB,EACA6+B,EACAtyB,EACAR,EACAiE,EACAC,GAEf,OAAOpI,EAAIlX,IAhBb,SAAqBwU,EAAK5N,GAExB,OADe8Z,EAAYjd,mBAAmBmD,CAAA,EAC5B,+BAAM4N,C,EAcGA,EAAO,SAASlR,CAAA,EAAgB,CACzD6T,MAAO,CAAA,EACP5Q,OAAQ,CACNqF,WAAa8kB,EACbzlB,SAAW0lB,EACXrhB,UAAYD,EACZW,eAAiBk+B,EACjBjnC,OAAQ2U,EACR5U,YAAaoU,EACbsE,qBAAsBL,EACtBM,gBAAiBL,C,EAEnBO,aAAc,cACdC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAC8b,KAAMwL,EAAY,eAAA,CAAA,C,MA3CpCxL,EAAMlR,EAAeotB,EAAoBC,EAAkBthB,EAC9E6+B,EAAwBtyB,EAAgBR,EAAqBiE,EAAiBC,CAAA,CAAA,EAC7Etb,KAAK,SAAUsc,GACd,OAAOA,C,IA+CS9L,EAAMlR,EAAeotB,EAAoBC,EAAkBthB,EAC7E6+B,EAAwBtyB,EAAgBR,EAAqBiE,EAAiBC,CAAA,EAC7Etb,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY/Z,EAAe,kBAAmB,4BAAA,C,mFAnE/DgC,QACKC,OAAO,uBAAA,EACP6R,QAAQ,0BAA2B62B,CAAA,C,ICL1C,WACE,aAYA,SAASE,EAAuB7tC,EAAQsJ,EAAY8F,EAAiBS,EAAoBE,EACzDJ,EAAkBtN,EAAWE,EAAc+M,EAAiBE,EAAsB/M,EAClFqrC,EAAWH,EAAyBxrC,EAAQoE,EAAS4B,EACrDod,GAC9B,IAAIjM,EAAKtjB,KAYL8kB,GAXJxB,EAAGvR,OAASuB,EACZgQ,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EACxDgT,EAAGy0B,4BAA4B,CAAA,EAC/Bz0B,EAAG00B,SAAWvrC,EAAgB,mBAAA,EAC9B6W,EAAGkB,mBAAqBrS,EACxBmR,EAAGlK,gBAAkBA,EACrBkK,EAAGhK,gBAAkBA,EACrBgK,EAAG9J,qBAAuBA,EAE1B8J,EAAG+B,sBAAwB9U,EAED+S,EAAG+B,uBAAyB/B,EAAG+B,sBAAsBtU,YAAA,GAC3EuU,EAAiBR,GAAuBA,EAAoB9T,kBAAA,EAsDhE,SAASinC,EAAoB1qB,EAAQ/H,GACnClC,EAAG2jB,OAAO1Z,GAAUrtB,EAAEulB,aAAa,CAACrjB,KAAOojB,CAAA,EAAalC,EAAG2jB,OAAO1Z,GAAS,CACzEjd,SAAWgT,EAAGtW,cAAciM,IAC5BwO,SAAW,CAAA,EACX1jB,GAAK,CACH2hB,MAAQ,SAASzhB,GACf,OAAOA,EAAEyhB,K,EAEXzjB,MAAQ/B,EAAEsI,SAAS,SAAA,EACnBlE,MAAQ,UACRqhB,WAAa,SAAU1hB,GACrB,OAAoB,IAAZA,EAAEi0C,SAAeryB,QAAQ,CAAA,EAAK,G,EAExCslB,UAAY,SAAUlnC,GACpB,OAAOA,EAAEyhB,SAAWpC,EAAGs0B,wBAA0Bt0B,EAAGs0B,uBAAuBrzB,Q,KAlEnFjB,EAAGuD,wBAA0B,SAASC,GACpChC,EAAsBgC,EACtBxD,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmB6N,EAASpB,KAAA,EACxEpC,EAAGhP,OAAO,CAAA,EAAO,CAAA,EAAO,CAAA,CAAA,C,EAG1BgP,EAAG0D,sBAAwB,SAAUrW,GACnC2U,EAAiB3U,EACjB2S,EAAGmB,OAAOsC,YAAYzD,EAAGtW,cAAciM,IAAK,gBAAiBtI,EAAOsW,gBAAA,EACpE3D,EAAGhP,OAAO,CAAA,EAAO,CAAA,EAAO,CAAA,CAAA,C,EAG1BgP,EAAGmB,OAAStY,EACZmX,EAAG2jB,OAAS,CACVttB,iBAAmBA,EACnBE,mBAAqBA,EACrBE,mBAAqBA,C,EAGvBuJ,EAAG60B,cAAgB,SAAS5qB,GAC1B,OAAOjK,EAAG2jB,OAAO1Z,IAAWjK,EAAG2jB,OAAO1Z,GAAQnrB,KAAuC,EAAhCkhB,EAAG2jB,OAAO1Z,GAAQnrB,KAAKV,OAAa4hB,EAAG2jB,OAAO1Z,IAAsC,EAA3BjK,EAAG2jB,OAAO1Z,GAAQ7rB,M,EAGlI4hB,EAAGhP,OAAS,SAAU8jC,EAAgBC,EAAgBC,GACpDjsC,EAAUa,IAAI,CAAClF,KAAM,6BAA8B/F,MAAO/B,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,EACnFm/B,GAAgBh/B,EAAgBm/B,gBAAgB,IAAA,EAChDF,GAAgB/+B,EAAgBi/B,gBAAgB,IAAA,EAChDD,GAAqB9+B,EAAqB++B,gBAAgB,IAAA,EAEzDH,GAAkBC,GAAkBC,EACtCtuC,EAAOL,GAAG,IAAK,CAAC2G,SAAUgT,EAAGtW,cAAciM,GAAA,EAAM,CAACuV,QAAS,CAAA,CAAA,CAAA,EAE3DxkB,EAAOL,GAAG,IAAK,CACb2G,SAAUgT,EAAGtW,cAAciM,IAC3B3D,WAAY8D,EAAgBo/B,yBAAyB,YAAA,EACrD7jC,SAAUyE,EAAgBo/B,yBAAyB,UAAA,EACnDx/B,UAAWM,EAAgBk/B,yBAAyB,WAAA,EACpD9+B,eAAgBF,EAAqBg/B,yBAAyB,gBAAA,EAC9D9nC,YAAaoU,GAAuBA,EAAoB7T,SAAA,EACxDN,OAAQ2U,GAAkBA,EAAerU,SAAA,C,IAM/CqS,EAAGhP,OAAO,CAAA,EAAO,CAAA,EAAO,CAAA,CAAA,EAExBgP,EAAGwE,oBAAsB,SAAU9a,GACjCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,EAAM,CAAA,EAAM,CAAA,CAAA,C,EAuBxBgP,EAAG8K,OAAS,WACV9K,EAAGm1B,uBAAuBX,EAAUY,iBAAkBp1B,EAAG2jB,OAAOttB,gBAAA,EAChEs+B,EAAoBH,EAAUa,mBAAoBr1B,EAAG2jB,OAAOptB,kBAAA,EAC5Do+B,EAAoBH,EAAUc,mBAAoBt1B,EAAG2jB,OAAOltB,kBAAA,C,EAG9DuJ,EAAGm1B,uBAAyB,SAASlrB,EAAQ/H,GAC3CtlB,EAAE0G,IAAI4e,EAAY,SAAStD,GACzB,IAAIwlB,EAAY,CAACA,UAAW14B,QAAQyN,KAAK8S,EAAaspB,wBAAwB,CAAC32B,EAAA,CAAA,CAAA,EAC/EhiB,EAAEmwB,OAAOnO,EAAUwlB,CAAA,C,IAIvBpkB,EAAG8K,OAAA,EAEH9K,EAAG+E,eAAiB,SAASnK,GAC3By5B,EAAwBtvB,eAAenK,EAAMoF,EAAGtW,cAAciM,IAC1DqK,EAAGlK,gBAAgBo/B,yBAAyB,YAAA,EAC5Cl1B,EAAGlK,gBAAgBo/B,yBAAyB,UAAA,EAC5Cl1B,EAAGhK,gBAAgBk/B,yBAAyB,WAAA,EAC5Cl1B,EAAG9J,qBAAqBg/B,yBAAyB,gBAAA,EACjDlzB,GAAkBA,EAAerU,SAAA,EACjC6T,GAAuBA,EAAoB7T,SAAA,EAC3CqS,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EACrDrD,GAAuBA,EAAoBsD,kBAAA,CAAA,C,ySA7HnDpZ,QACKC,OAAO,uBAAA,EACPe,WAAW,yBAA0B6nC,CAAA,EACrC3oC,SAAS,YAAY,CACpBwpC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,mBAAqB,oB,MCT7B,WACE,aAOA,SAASE,EAAe9uC,EAAQ8K,EAAS9L,EAAkB0qB,GACzD,IAAIpQ,EAAKtjB,KAaL+4C,GAXJz1B,EAAG2Q,SAAWP,EAAWO,SACzB3Q,EAAG01B,WAAatlB,EAAWslB,WAC3B11B,EAAG+E,eAAiBqL,EAAWrL,eAC/B/E,EAAG6Q,WAAa,SAAUzpB,GACpBA,EAAOuuC,WACTjvC,EAAOL,GAAG,cAAgBe,EAAOiK,QAAA,EAEjC+e,EAAWS,WAAWzpB,CAAA,C,EAIVxK,EAAEid,OAAOnU,EAAkB,SAAUpC,EAAKsyC,GAGxD,OADAtyC,EAAIsyC,GAAO,CAAED,WAAa,CAAA,EAAMtkC,SAAWukC,EAAK//B,SAAW,CAAA,CAAA,EACpDvS,C,EACN,EAAA,GAGCuyC,GADJ71B,EAAGkT,WAAaxtB,EACA9I,EAAEq0B,QAAQr0B,EAAE6E,OAAO+P,EAAS,UAAA,EAAa,cAAA,GAEzDwO,EAAG81B,aAAe,SAAUzkC,GAC1B,MAAO,CAAC,CAACwkC,EAAUxkC,E,EAGrB2O,EAAG+1B,WAAa,SAAU1kC,GACxB,IAAIG,EAAU4e,EAAW5a,KAAKqgC,EAAUxkC,EAAA,EAIxC,OAFEG,EADmB,EAAjBA,EAAQpT,OACAoT,EAAQxM,MAAM,EAAG,CAAA,EAAGH,OAAO4wC,EAAUpkC,EAAA,EAE1CG,C,iEArCX9F,QACKC,OAAO,aAAA,EACPe,WAAW,iBAAkB8oC,CAAA,C,ICLpC,WACE,aAOA,SAASQ,EAAoBtvC,EAAQuC,EAAcuI,EAAS4e,EAAY4C,EAAenqB,EAAQG,EAAc0W,EAChFxO,EAASD,EAAc2F,EAAY1N,GAC9D,IAAI8W,EAAKtjB,KAETsjB,EAAG3O,SAAW3K,EAAOuvC,SAASn3C,MAAQ4H,EAAOuvC,SAASn3C,KAAKgY,eAE3DkJ,EAAGxO,QAAU4e,EAAW5a,KAAKhE,CAAA,EAC7BwO,EAAGQ,YAAc,EACjBR,EAAGnT,SAAW6S,EACdM,EAAGS,QAAU,EACbT,EAAG7O,YAAcF,EAAa6f,MAE9B9Q,EAAG2Q,SAAWP,EAAWO,SACzB3Q,EAAG01B,WAAatlB,EAAWslB,WAC3B11B,EAAG6Q,WAAaT,EAAWS,WAE3B7Q,EAAG+E,eAAiB,SAAU3d,GAC5B,OAAO4B,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExElE,EAAO4a,YADQ1W,EACc,kBAAmB,YAAciT,EAAG3O,SAAW,SAAA,EAC5E2hB,EAAcsB,UAAUlE,EAAWrL,eAAe3d,CAAA,EAAS,CACzDmtB,eAAiB,kBACjB2hB,SAAW,CAAA,C,GACV9rC,KAAK,KAAM,SAASoB,GACrBtC,EAAMsC,MAAM,iBAAkB,CAAEzE,MAAQ,CAAA,CAAA,CAAA,C,MAK9CiZ,EAAGwS,WAAa,SAAShS,GACvB,OAAOtP,EAAQ5G,KAAKsM,EAAYoJ,EAAG3O,SAAUpI,EAAaqI,KAAM0O,EAAGnT,SAAU2T,CAAA,EAAapW,KAAK,SAAUoH,GACvGwO,EAAGQ,YAAcA,EACjBR,EAAGxO,QAAUA,C,gKArCnB9F,QACKC,OAAO,aAAA,EACPe,WAAW,sBAAuBspC,CAAA,C,ICLzC,WACE,aAOA,SAAS5lB,EAAW1S,EAAI2S,EAAWnf,EAASxL,EAAkBywC,EAAOttC,GAEnE,IAAIutC,EAAY,CACdC,oEAAqE,OACrEC,0EAA2E,OAC3EC,WAAY,MACZC,kBAAmB,K,EAGrB,MAAO,CACLpjB,kBASF,WACE,OAAOx2B,EAAE49B,KAAK4b,CAAA,C,EATd5gC,KAYF,SAAchE,EAASilC,EAAWC,GAChC,OAAO95C,EAAEy5B,QAAQ7kB,EACbilC,GAAa,CAAC,MAIlB,SAAoBrvC,GAClB,OAAO1B,EAAiBgd,QAAQtb,EAAOuO,IAAItE,QAAA,C,EAG7C,SAAejK,GACb,IAAIuO,EAAMvO,EAAOuO,IACjB,OAAQA,EAAItE,UACV,IAAK,OACL,IAAK,QACL,IAAK,UAEH,OAAO,IAAIlP,KAAKwT,EAAIrE,MAAO6kC,EAAMtjB,MAAMld,EAAImd,KAAA,GAAUnd,EAAIqe,SAAW,EAAGre,EAAIghC,KAAO,CAAA,EACpF,IAAK,QACH,OAAOvvC,EAAOuO,IAAIjR,I,IAhBpBgyC,GAAU,CAAC,MAAO,MAAO,O,GAd7B/lB,SAAWA,EACXwC,cAAgBA,EAChBuiB,WA4CF,SAAoBtuC,GAClB,GAAIA,EAAOuuC,WACT,MAAO,gBAET,OAAQhlB,EAASvpB,CAAA,GACf,IAAK,OACL,IAAK,MACH,MAAO,kBACT,IAAK,OACH,MAAO,iBACT,IAAK,MACH,MAAO,gBACT,QAEE,OADAssB,QAAQloB,MAAM,uBAAwBpE,CAAA,EAC/B,a,GAzDXypB,WAqEF,SAAoBzpB,GAElB,IAAIwvC,EACAC,EAAc1jB,EAAc/rB,CAAA,EAC5ByvC,IACFD,EAAiBE,EAAe1vC,CAAA,GAElC,OAAOipB,EAAUb,KAAK,CACpB/iB,YAAa,iCACbyyB,aAAe,KACfxyB,WAAA,CAAA,SAAA,eAAA,QAAA,SAAA,eAAa,SAAUoE,EAAQ7H,EAAcC,EAAOgc,EAAQlc,GAC1D,IAAIgX,EAAKtjB,KACTsjB,EAAG5Y,OAASA,EACZ4Y,EAAG2G,SAAW,WACZ,OAAO3d,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAAU5C,KAAK,SAAS2C,GAExElE,EAAO4a,YADO1W,EACe,kBAAmB,sBAAA,EAChDgY,EAAe3d,CAAA,C,IAGnB4Y,EAAG+2B,MAAQjmC,EAAOkmC,QAClBh3B,EAAGmT,cAAgB0jB,IAEjBD,EAAexsC,KAAK,SAAUsc,GAC5B1G,EAAG0G,QAAUA,EAIV1G,EAAG0G,QAAQF,SACZtB,EAAOuO,QAAQzT,EAAG0G,QAAQF,QAAA,EAAUpc,KAAK,SAAU+B,GACjD6T,EAAG0G,QAAQuwB,YAAc9qC,C,GAEtB6T,EAAG0G,QAAQuwB,YAAc,I,EAC/B,WACD/tC,EAAMsC,MAAM,wBAAA,EACZwU,EAAG+2B,MAAA,C,QAvGXhyB,eAAiBA,C,EAgCnB,SAAS4L,EAASvpB,GAChB,GAAI,CAACA,EAAOuuC,WACV,OAAOS,EAAUhvC,EAAOosB,Y,CAI5B,SAASL,EAAc/rB,GACrB,MAAO,QAAUupB,EAASvpB,CAAA,C,CAqB5B,SAAS0vC,EAAe1vC,GAKtB,OAAO8J,EAAQwV,QAAQtf,EAAO0qB,QAAS,CAAA,CAAA,C,CAqDzC,SAAS/M,EAAe3d,GANpB,OAO4B0vC,EAAR1vC,CAPD,EAAQgD,KAAK,SAAUsc,GACxCC,SAASD,EAAQF,SAAUE,EAAQJ,SAAU,qBAAA,C,+EAtIrD5a,QACKC,OAAO,aAAA,EACP6R,QAAQ,aAAc4S,CAAA,C,ICL7B,WACE,aAOA,SAASlf,EAAQwM,EAAIJ,EAAKlE,EAAM+8B,EAAOjxB,EAAQxF,EAAUw3B,EAAepuC,GAEtE,IAAI8c,EAAW,UACXrI,EAAQ25B,EAAc,SAAA,EAE1B,SAASC,EAAUC,GACjB,OAAOxxB,EAAW,IAAM/b,mBAAmButC,CAAA,C,CAG7C,MAAO,CACLhxC,IAaF,SAAagxC,GACX,OAAO95B,EAAIlX,IAAI+wC,EAAUC,CAAA,EAAK,CAAE75B,MAAQA,CAAA,CAAA,EAASnT,KAAKitC,CAAA,C,EAbtDC,QAgBF,WACE,OAAOh6B,EAAIlX,IAAIwf,EAAU,CAAErI,MAAQA,CAAA,CAAA,EAASnT,KAAKitC,CAAA,C,EAhBjD/sC,KA2CF,SAAc8G,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,GAC3D,OAVF,SAAqBnmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,GAClE,OAAO,SAAUC,GACf,OAAOA,EAAWpxC,IAAIwf,EAAU,CAC9BrI,MAAQA,EACR5Q,OAAS8qC,EAAgBrmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,CAAA,C,GACvEntC,KAAKitC,CAAA,C,GAKSjmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,CAAA,EAAYj6B,CAAA,C,EA3C9EoJ,QAmEF,SAAiB0wB,EAAIM,GACnB,OAtBF,SAAuBN,EAAIM,GACzB,OAAO,SAAUF,GACf,IAAI7qC,EAAS,GAIb,OAHI+qC,IACF/qC,EAAO+qC,MAAQ,CAAA,GAEVF,EAAWpxC,IAAI+wC,EAAUC,CAAA,EAAM,WAAY,CAChD75B,MAAQ,CAAA,EACR5Q,OAASA,EACTsZ,aAAe,a,GACd7b,KAAK,SAAUwU,GAEhB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAE8b,KAAOwL,EAAY,eAAA,CAAA,C,OAO1CgxB,EAAIM,CAAA,EAAOp6B,CAAA,C,EAnEhC+W,OAsEF,SAAgBjtB,GACd,IAAItI,EAAOlC,EAAEq3B,KAAK7sB,EAAQ,CAAC,MAAO,WAAY,OAAQ,WAAY,YAAA,EAC9DuO,EAQN,SAAgBvO,GACd,IAAIzG,EAAIyG,EAAOwrB,KAEf,SAAS+kB,EAAQh3C,GACf,OAAOA,EAAEg3C,QAAA,EAAY,I,CAEvB,OAAQvwC,EAAOiK,UACb,IAAK,OACH,MAAO,CACLC,KAAOqmC,EAAQh3C,CAAA,EACfmyB,MAAQqjB,EAAMxjB,SAAShyB,CAAA,EACvBg2C,IAAMh2C,EAAE48B,QAAA,C,EAEZ,IAAK,QACH,MAAO,CACLjsB,KAAOqmC,EAAQh3C,CAAA,EACfmyB,MAAQqjB,EAAMxjB,SAAShyB,CAAA,C,EAE3B,IAAK,UACH,MAAO,CACL2Q,KAAOqmC,EAAQh3C,CAAA,EACfqzB,QAAU5sB,EAAO4sB,O,EAErB,IAAK,QACH,MAAO,CACLtvB,KAAO0C,EAAO1C,I,EAElB,QACE,MAAM,IAAII,MAAM,gCAAkCsC,EAAOiK,SAAW,GAAA,C,GApCvDjK,CAAA,EACjB,OAAO8d,EAAOmP,OAAO,CACnBlW,OAAS,OACThS,IAAMmR,EAAIS,YAAA,EAAgB6H,EAC1B9mB,KAAOlC,EAAEC,OAAOiC,EAAM6W,CAAA,C,GACrBvL,KAAKwtC,CAAA,C,EA5ER5lB,OA+GF,SAAgB5qB,GACd,OAAOkW,EAAIu6B,IAAIV,EAAU/vC,EAAO0qB,OAAA,EAAU,CAAEjc,SAAWzO,EAAOyO,SAAUoc,UAAY7qB,EAAO6qB,SAAA,CAAA,EAAa7nB,KAAKwtC,CAAA,C,EA/G7GtlB,OAkHF,SAAsB8kB,GACpB,OAAO95B,EAAIgV,OAAO6kB,EAAUC,CAAA,CAAA,EAAKhtC,KAAKwtC,CAAA,C,EAlHtC/lB,MAqHF,SAAeulB,GACb,OAAO95B,EAAIlX,IAAI+wC,EAAUC,CAAA,EAAM,QAAA,EAAUhtC,KAAKitC,CAAA,C,EArH9ClmC,YA0IF,SAAwBC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,GACrE,OAVF,SAAqBnmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,GAClE,OAAO,SAAUC,GACf,OAAOA,EAAWpxC,IAAIwf,EAAW,SAAU,CACzCrI,MAAQA,EACR5Q,OAAS8qC,EAAgBrmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,CAAA,C,GACvEntC,KAAKitC,CAAA,C,GAKSjmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,CAAA,EAAYj6B,CAAA,C,EA1I9E5L,gBA6IF,SAA4B/E,GAC1B,OAAO2Q,EAAIlX,IAAIwf,EAAW,QAAS,CACjCrI,MAAQA,EACR5Q,OAAQA,C,GACPvC,KAAKitC,CAAA,C,EAhJRzgC,WAmJF,SAAuBxF,GAErB,CAAA,IACMrH,EAFIqH,IAEJrH,EAAOjB,EAAKkB,QAAA,EAChBoH,EAAMrH,EAAKstB,UAAU,G,CAEvB,OAAOjmB,C,GA9IT,SAASqmC,EAAgBrmC,EAAKC,EAAUC,EAAMC,EAAc3E,EAAY2qC,GAClE5qC,EAAS,CACXyE,IAAKA,EACLC,SAAUA,EACVC,KAAMA,EACNC,aAAcA,GAAgBmO,EAC9B9S,WAAYA,GAAc,C,EAM5B,OAFED,EADC4qC,EACQ36C,EAAEC,OAAO8P,EAAQ,CAAC4qC,WAAYA,CAAA,CAAA,EAElC5qC,C,CA+FT,SAAS0qC,EAAOz4B,GACd,OAAOA,EAAS9f,I,CAGlB,SAAS84C,EAAWh5B,GAElB,OADArB,EAAMlS,UAAA,EACCuT,EAAS9f,I,mFArJpB4M,QACKC,OAAO,aAAA,EACP6R,QAAQ,UAAWtM,CAAA,C,ICL1B,WACE,aAOA,SAAS4mC,EAAY3uC,GACnB,OAAO,SAAU/B,GACf,GAAIA,EACF,OAAOxK,EAAEm7C,SAAS5uC,EAAgB,iBAAmB/B,EAAOuO,IAAItE,SAAUjK,EAAOuO,GAAA,CAAA,C,gCARvFjK,QACKC,OAAO,aAAA,EACPlK,OAAO,cAAeq2C,CAAA,C,ICL7B,WACE,aAUA,SAASE,EAA6B7uC,EAAgBuW,EAAS5O,EAAOpK,EAAOuC,EAAa6oC,EAAUmG,GAElG,IAAIj4B,EAAKtjB,KACTsjB,EAAGk4B,iBA8DH,SAA0B/3B,GAaxB,OAZiBvjB,EAAEy5B,QAAQlW,EAAgB,SAAUne,GACnD,OAAQge,EAAGoV,mBACT,IAAK,UACL,IAAK,WACL,IAAK,eACH,OAAOx4B,EAAE05B,UAAUt0B,EAAMytC,aAAA,EAC3B,IAAK,YACH,OAAO7yC,EAAE05B,UAAUt0B,EAAM4tC,cAAA,EAC3B,IAAK,WACH,MAAsC,KAA9B5tC,EAAM8uC,oBAA8B9uC,EAAM8uC,oBAAgD,SAAzB9wB,EAAGqV,kBAAgCrN,OAAOmwB,kBAAmBnwB,OAAOC,iB,GAEhJjI,EAAGqV,iBAAA,C,EAzERrV,EAAGo4B,eAyCH,SAAwBz5C,GACtB,OAAOmzC,EAAUe,SAASj2C,EAAEwwB,SAASzuB,CAAA,GAAkB,IAARA,GAAa4jB,QAAQ,CAAA,EAAK,EAAA,C,EAzC3EvC,EAAGq4B,gBA4CH,SAAyBn2B,EAAYnC,GACnC,IAAIu4B,EAAmB17C,EAAE6E,OAAOygB,EAAY,SAAS+wB,GACnD,GAAkF,CAAC,IAA/EA,EAAIxD,cAAc1xC,YAAA,EAAc2kB,QAAQ3C,EAAMM,aAAatiB,YAAA,CAAA,GAA2Bk1C,EAAIrD,gBAAiG,CAAC,IAAhFqD,EAAIrD,eAAe7xC,YAAA,EAAc2kB,QAAQ3C,EAAMM,aAAatiB,YAAA,CAAA,EAAwB,OAAOk1C,C,GAEzM7O,EAAYkU,EAAiBtzC,OAAO+a,EAAMS,YAAc,GAAKR,EAAGnT,SAAUkT,EAAMS,YAAcR,EAAGnT,QAAA,EAErG,MAAO,CACL0T,cAAe+3B,EAAiBl6C,QAAU,EAC1CgmC,UAAWA,GAAa,E,GAnD5BpkB,EAAGu4B,cAkCH,SAAuBxiB,EAAYG,GACjClW,EAAGoV,kBAAoBW,EACvB/V,EAAGqV,kBAAoBa,C,EAnCzBlW,EAAGw4B,UAsDH,SAAmB7rC,GACjBjG,EAAOL,GAAG,IAAKsG,EAAQ,CAACwpB,OAAQ,CAAA,CAAA,CAAA,C,EArDlCnW,EAAGnT,SAAW6S,EACdM,EAAGS,QAAU,EAEbT,EAAG2U,QAAU,GACb3U,EAAG6U,0BAA4BnuB,EAAOE,IAAI,eAAA,EAE1CoZ,EAAG/M,cAAgB,SAAUrO,GAC3B,OAAOuE,EAAgB,mBAAqBvE,CAAA,C,EAG9Cob,EAAGy4B,WAAaz4B,EAAG/M,cAAc,WAAA,EACjC+M,EAAG8U,eAAiB9U,EAAG/M,cAAc,eAAA,EACrC+M,EAAG04B,WAAe14B,EAAG04B,YAAc14B,EAAG/M,cAAc,YAAA,EACpD+M,EAAG24B,WAAa7G,EAAU8G,QAAA,EA2D1B54B,EAAGwW,WAAa,SAAUT,GACxB,OAAO/V,EAAGoV,oBAAsBW,C,EAGlC/V,EAAGyW,aAAe,SAASV,GACzB,IAAIvgB,EAAO,aACX,OAAGwK,EAAGoV,oBAAsBW,EACnBvgB,EAAK,IAAIwK,EAAGqV,kBAEZ7f,C,EAIXwK,EAAG64B,qBAAuB,SAAUnvC,EAAekR,EAAM6K,EAAiBC,EAAe4sB,GACvF2F,EAA0B3jB,UAAU5qB,EAAekR,EAAM6K,EAAiBC,EAAe4sB,CAAA,C,EA3DzFtyB,EAAGQ,YAAcvX,EAAa2D,WAV1BksC,EAAW,WACZ7vC,EAAa6I,YAAckO,EAAG8U,eAC/B9U,EAAGoV,kBAAoB0jB,EAEvB94B,EAAGoV,kBALc,iBAKMnsB,EAAauT,QAAsCvT,EAAauT,QAAUs8B,EAEnG94B,EAAGqV,kBAAoBpsB,EAAaitB,WAAalW,EAAGoV,oBAAsB0jB,EAAW,OAAS,K,CAsElG,SAASC,EAAuBryC,EAAQuC,EAAc9C,EAAW4C,EAAWiO,EAAS/E,EAAWxD,EAAQqC,EAAQkoC,EAChFC,EAAahsC,EAASqC,EAAOzG,EAAQojB,EAAcpd,GAEjF,IAAImR,EAAKtjB,KA0CL8kB,GAzCJ9V,QAAQ7O,OAAOmjB,EAAIi5B,EAAY,+BAAgC,CAACnoC,OAAQA,CAAA,CAAA,CAAA,EAExEkP,EAAGvR,OAASA,EACZuR,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EACxDgT,EAAGk5B,cAAgB,GACnBl5B,EAAGm5B,6BAA+B,GAClCn5B,EAAG2U,QAAU,GACbjpB,QAAQyN,KAAK6G,EAAG24B,WAAY34B,EAAGm5B,4BAAA,EAC/Bn5B,EAAGkB,mBAAqBrS,EACxBmR,EAAGnO,YAAajV,EAAEoa,CAAA,EAAS1T,IAAI,SAAS6K,GACtC,MAAO,CACL6D,WAAY7D,EAAE6D,WACdX,SAAUlD,EAAEkD,SACZ+nC,oBAAsBx8C,EAAEmoC,YAAY52B,EAAEukC,eAAA,EAA2D,IAAlB,IAApBvkC,EAAEukC,iBAAuBnwB,QAAQ,CAAA,EAC5FtB,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE3DrT,MAAA,EAEHqhB,EAAGnO,YAAY+D,QAAQ,CAAEqL,QAAUjB,EAAG8U,cAAA,EAAiB,CAAE7T,QAAUjB,EAAGy4B,UAAA,CAAA,EAEtEz4B,EAAGq5B,oBAAsBz8C,EAAEqV,CAAA,EAAW3O,IAAI,SAASxE,GACjD,MAAO,CACL6wC,yBAA4B/yC,EAAEmoC,YAAYjmC,EAAK4zC,eAAA,EAA8D,IAAlB,IAAvB5zC,EAAK4zC,iBAAuBnwB,QAAQ,CAAA,EACxGktB,cAAgB3wC,EAAKkV,QACrB47B,eAAiB9wC,EAAKu0C,UACtBvC,oBAAwBl0C,EAAEmoC,YAAYjmC,EAAK4zC,eAAA,EAA2C,GAAvB5zC,EAAK4zC,gBACpEj+B,WAAc7X,EAAEmoC,YAAYjmC,EAAK2V,UAAA,EAAiCmmB,KAAAA,EAAlB97B,EAAK2V,U,IAEtD9V,MAAA,EAEHqhB,EAAGs5B,sBAAwB18C,EAAEoa,CAAA,EAAS1T,IAAI,SAASxE,GACjD,MAAO,CACL6wC,yBAA4B/yC,EAAEmoC,YAAYjmC,EAAK4zC,eAAA,EAA8D,IAAlB,IAAvB5zC,EAAK4zC,iBAAuBnwB,QAAQ,CAAA,EACxGktB,cAAgB3wC,EAAKkT,WAAW,IAAIlT,EAAKuS,SACzCy/B,oBAAwBl0C,EAAEmoC,YAAYjmC,EAAK4zC,eAAA,EAA2C,GAAvB5zC,EAAK4zC,gBACpEj+B,WAAc7X,EAAEmoC,YAAYjmC,EAAK2V,UAAA,EAAiCmmB,KAAAA,EAAlB97B,EAAK2V,U,IAEtD9V,MAAA,EAEHqhB,EAAG+B,sBAAwB9U,EAED+S,EAAG+B,uBAAyB/B,EAAG+B,sBAAsBtU,YAAA,GAC3EuU,EAAiBR,GAAuBA,EAAoB9T,kBAAA,EAEhEsS,EAAGuD,wBAA0B,SAASC,GACpChC,EAAsBgC,EACtB3a,EAAO4a,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmB6N,EAASpB,KAAA,EACrEpC,EAAGhP,OAAA,C,EAGLgP,EAAG0D,sBAAwB,SAAUrW,GACnC2U,EAAiB3U,EACjBxE,EAAO4a,YAAYzD,EAAGtW,cAAciM,IAAK,gBAAiBtI,EAAOsW,gBAAA,EACjE3D,EAAGhP,OAAA,C,GAoCegP,EAAG+B,sBAAsBtU,YAAA,GAAiBuS,EAAG+B,sBAAsBtU,YAAA,EAAcE,SAAA,KAChF2B,EAAMzD,sBAAsBE,UACtCL,QAAQyN,KAAK6G,EAAG24B,WAAY34B,EAAGm5B,4BAAA,EAE/Bv8C,EAAE+N,OAAOqV,EAAGm5B,6BAA6B,CAACxjC,IAAK,wBAAA,CAAA,EAnC1DqK,EAAGwE,oBAAsB,SAAU9a,GACjCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAGhP,OAAS,SAASyT,GACnB1b,EAAUa,IAAI,CAAClF,KAAO,6BAA6B/F,MAAQkL,mBAAmBjN,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,CAAA,EACtG8O,EAOF/d,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,GAAA,EAAK,CAACuV,QAAS,CAAA,CAAA,CAAA,EAN5DxkB,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,IAAK7D,UAAWkO,EAAG1K,kBAAkB2L,QAChFjP,WAAYgO,EAAG1K,kBAAkBtD,WAAYX,SAAU2O,EAAG1K,kBAAkBjE,SAC5EjE,YAAaoU,GAAuBA,EAAoB7T,SAAA,EACxDN,OAAQ2U,GAAkBA,EAAerU,SAAA,EACzCf,WAAYoT,EAAGQ,WAAA,CAAA,C,EAMrBR,EAAGQ,YAAcvX,EAAa2D,YAAc,EACxC3D,EAAa6I,WAAa7I,EAAa6I,YAAckO,EAAG8U,eAEnD7rB,EAAa6I,YAAckO,EAAGy4B,WACrCz4B,EAAG1K,kBAAoB0K,EAAGnO,YAAY,IAEtCmO,EAAG1K,kBAAoB1Y,EAAE0N,KAAK0V,EAAGnO,YAAa,CAACG,WAAY/I,EAAa+I,WAAYX,SAAUpI,EAAaoI,QAAA,CAAA,EACvG2O,EAAG1K,oBACL0K,EAAG1K,kBAAoB0K,EAAGnO,YAAY,KANxCmO,EAAG1K,kBAAoB0K,EAAGnO,YAAY,GAmBxCmO,EAAGu5B,qBAAuB,SAASznC,GACjCkO,EAAG1K,kBAAoBxD,EACvBjJ,EAAO4a,YAAYzD,EAAGtW,cAAciM,IAAK,kBAAmBqK,EAAG1K,kBAAkB2L,OAAA,C,EAuBnFjB,EAAGw5B,oBAAsB,SAASl3B,GAChC,IAAIm3B,EAAY/tC,QAAQi+B,QAAQtsB,SAASq8B,cAAc,gBAAkBp3B,CAAA,CAAA,EAAQ,GAC7Eq3B,EAAejuC,QAAQi+B,QAAQtsB,SAASq8B,cAAc,UAAYp3B,CAAA,CAAA,EAAQ,GAC1Es3B,EAAkBH,GAAaI,iBAAiBJ,CAAA,EAChDA,GAAaG,IACiB,SAA5BA,EAAgB34B,SAClBw4B,EAAUz3C,MAAMif,QAAU,QAC1B04B,EAAaG,UAAUnvC,OAAO,eAAA,EAC9BgvC,EAAaG,UAAUC,IAAI,aAAA,IAE3BN,EAAUz3C,MAAMif,QAAU,OAC1B04B,EAAaG,UAAUnvC,OAAO,aAAA,EAC9BgvC,EAAaG,UAAUC,IAAI,eAAA,G,EAKjC/5B,EAAGg6B,sBAAwB,WACzB,IAAIloC,EAAYkO,EAAG1K,kBACnB0jC,EAAwBj0B,eAAejT,GAAaA,EAAUmP,QAC1DjB,EAAGtW,eAAiBsW,EAAGtW,cAAciM,IACrC7D,GAAaA,EAAUE,WACvBF,GAAaA,EAAUT,SACvB2Q,GAAkBA,EAAerU,SAAA,EACjC6T,GAAuBA,EAAoB7T,SAAA,EAC3CqS,EAAGoV,kBACHpV,EAAGqV,kBACH,qBACArV,EAAG+B,uBAAyB/B,EAAG+B,sBAAsB8C,oBAAA,EACrDrD,GAAuBA,EAAoBsD,kBAAA,C,GAIjD9E,EAAGsE,gBAAkB,WACnBtE,EAAGQ,YAAc,EACjBR,EAAG8V,aAAA,C,EAGL9V,EAAGiE,gBAAkB,SAASzD,GAC5BR,EAAGQ,YAAcA,GAAevX,EAAa2D,YAAc,EAC3DoT,EAAG8V,aAAA,C,EAGL9V,EAAG8V,aAAe,SAAUC,GAC1B/V,EAAGu4B,cAAcxiB,GAAc/V,EAAGoV,kBAAmBpV,EAAGqV,iBAAA,EACxD,IAjEmCtV,EAC/BI,EAgEAA,EAAiBH,EAAG1K,kBAAkB2L,UAAYjB,EAAG8U,eAAiB9U,EAAGs5B,sBAAwBt5B,EAAGq5B,oBACxGl5B,EAAiBH,EAAGk4B,iBAAiB/3B,CAAA,EACrCH,EAAGw4B,UAAU,CAAC5rC,WAAYoT,EAAGQ,YAAahE,OAAQwD,EAAGoV,kBAAmBc,UAAWlW,EAAGqV,iBAAA,CAAA,EAnE/DnT,EAoEP/B,EApEmBJ,EAoEH,CAACS,YAAaR,EAAGQ,WAAA,EAnE7CL,EAAiB,GAEnBA,EADC+B,GAAcA,EAAW9jB,OACT8jB,EAEClC,EAAG1K,mBAAqB0K,EAAG1K,kBAAkB2L,UAAYjB,EAAG8U,eAAkB9U,EAAGs5B,sBAAuBt5B,EAAGq5B,oBAE/Ht5B,EAAMM,aAAeL,EAAGk5B,cACxBl5B,EAAG2U,QAAU,GACTslB,EAAkBj6B,EAAGq4B,gBAAgBl4B,EAAgBJ,CAAA,EACzDC,EAAGO,cAAgB05B,EAAgB15B,cACnCP,EAAG2V,kBAAoBskB,EAAgB7V,UACpCpkB,EAAG1K,mBAAqB0K,EAAG1K,kBAAkB2L,UAAYjB,EAAG8U,gBAC7Dl4B,EAAE0G,IAAI0c,EAAG2V,kBAAkB,SAASsd,GAClC,IAAIrd,EAAkB,CAACA,gBAAiB3J,EAAa4J,mBAAmB,CAAC,CAACphB,WAAcw+B,EAAIx+B,UAAA,EAAA,CAAA,EAC5F7X,EAAEmwB,OAAOkmB,EAAKrd,CAAA,C,IAwDpB5V,EAAGuW,kBAAoB,SAASR,GAC9B/V,EAAGQ,YAAc,EACjBR,EAAGoV,kBAAoBW,EACvB/V,EAAGqV,kBAA6C,QAAzBrV,EAAGqV,kBAA8B,OAAS,MACjErV,EAAG8V,aAAaC,CAAA,C,EAGlB/V,EAAG0W,aAAe,SAAS1iB,GACtBgM,EAAG6U,2BAA6B7gB,IAC7BrH,EAAS/P,EAAEiF,MAAMoH,EAAc,CACjC+K,QAASA,EACT2iB,kBAAmB3U,GAAkBA,EAAe2B,iBACpDiT,cAAelwB,EAAOmwB,SAAWnwB,EAAOmwB,QAAQ/3B,MAAQ4H,EAAOmwB,QAAQ/3B,KAAKyN,MAC5EiQ,OAAQwD,EAAGoV,kBACXc,UAAWlW,EAAGqV,iB,GAEhB3uB,EAAOL,GAAG,gBAAiBsG,CAAA,E,EAI/BqT,EAAG8V,aAAA,C,CAIL,SAASokB,EAA6BxzC,EAAQuC,EAAa6H,EAAQ/H,EAAUiO,EAAQvI,EAAOoD,EAAY8N,EAASq5B,EAAwBC,EAAY1+B,EAAS1R,EAAQgG,GAEpK,IAAImR,EAAKtjB,KAwBLy9C,GAvBJzuC,QAAQ7O,OAAOmjB,EAAIi5B,EAAY,+BAAgC,CAACnoC,OAAQA,CAAA,CAAA,CAAA,EAExEkP,EAAGvR,OAASA,EACZuR,EAAGmB,OAAStY,EACZmX,EAAGo6B,aAAe,GAClBp6B,EAAGtW,cAAgB9M,EAAE0N,KAAK0V,EAAGvR,OAAQ,CAACkH,IAAK1M,EAAa+D,QAAA,CAAA,EAExDgT,EAAGnO,YAAcjV,EAAEiV,CAAA,EAAavO,IAAI,SAAU6K,GAC5C,MAAO,CACL6D,WAAY7D,EAAE6D,WACdX,SAAUlD,EAAEkD,SACZ4P,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE3DrT,MAAA,EAEHqhB,EAAG5I,SAAWxa,EAAEiV,CAAA,EAAavO,IAAI,SAAU6K,GACzC,MAAO,CACLiJ,SAAUjJ,EAAEiJ,SACZzB,IAAIxH,EAAEiJ,SACN6J,QAAS9S,EAAEksC,e,IAEZ17C,MAAA,EAEkB/B,EAAEiV,CAAA,EAAavO,IAAI,SAAU6K,GAChD,MAAO,CACLkJ,WAAYlJ,EAAEkJ,WACd1B,IAAIxH,EAAEkJ,WACN4J,QAAS9S,EAAEmsC,iB,IAEZ37C,MAAA,GAEHqhB,EAAGu6B,sBAAwB39C,EAAEoa,CAAA,EAAS1T,IAAI,SAAUxE,GAClD,MAAO,CACL6wC,0BAAkD,IAAvB7wC,EAAK4zC,iBAAuBnwB,QAAQ,CAAA,EAC/DktB,cAAe3wC,EAAKmrC,KACpB6G,oBAAqBhyC,EAAK4zC,e,IAE3Bl2B,OAAO,SAASrO,GACjB,MAA+B,CAAC,EAAzBA,EAAE2iC,mB,GACRnyC,MAAA,EAEHqhB,EAAG3I,WAAakD,EAAQ,QAAA,EAAU4/B,EAAgB,aAAc,KAAA,EAChEn6B,EAAGkB,mBAAqBrS,EAExBmR,EAAG1K,kBAAoB1Y,EAAE0N,KAAK0V,EAAGnO,YAAa,CAACG,WAAY/I,EAAa+I,WAAYX,SAAUpI,EAAaoI,QAAA,CAAA,GAAc2O,EAAGnO,YAAY,GAExImO,EAAGw6B,iBAAmB59C,EAAE0N,KAAK0V,EAAG5I,SAAU,CAACA,SAAUnO,EAAamO,QAAA,CAAA,GAAc4I,EAAG5I,SAAS,GAE5F4I,EAAGgX,mBAAqBp6B,EAAE0N,KAAK0V,EAAG3I,WAAY,CAACA,WAAYpO,EAAaoO,UAAA,CAAA,GAAgB2I,EAAG3I,WAAW,GAEtG2I,EAAGwE,oBAAsB,SAAU9a,GACjCsW,EAAGtW,cAAgBA,EACnBsW,EAAGhP,OAAO,CAAA,CAAA,C,EAGZgP,EAAGhP,OAAS,SAAUyT,GACpB1b,EAAUa,IAAI,CAAClF,KAAM,6BAA8B/F,MAAO/B,EAAE4W,SAASwM,EAAGtW,cAAciM,GAAA,CAAA,CAAA,EACtF,IAAI7D,EAAYkO,EAAG1K,kBACf8B,EAAW4I,EAAGw6B,iBACdnjC,EAAa2I,EAAGgX,mBAChBvS,EASF/d,EAAOL,GAAG,IAAK,CAAE2G,SAAWgT,EAAGtW,cAAciM,GAAA,EAAK,CAACuV,QAAS,CAAA,CAAA,CAAA,EAR5DxkB,EAAOL,GAAG,IAAK,CACb2G,SAAUgT,EAAGtW,cAAciM,IAC3B3D,WAAYF,GAAaA,EAAUE,WACnCX,SAAUS,GAAaA,EAAUT,SACjC+F,SAAUA,GAAYA,EAASA,SAC/BC,WAAYA,GAAcA,EAAWA,U,IAO3C2I,EAAGo4B,eAAA,EAeHp4B,EAAGg6B,sBAAwB,WACzB,IAAIloC,EAAYkO,EAAG1K,kBACf8B,EAAW4I,EAAGw6B,iBACdnjC,EAAa2I,EAAGgX,mBAEpBgiB,EAAwByB,mBAAmB3oC,GAAaA,EAAUmP,QAC9DjB,EAAGtW,eAAiBsW,EAAGtW,cAAciM,IACrC7D,GAAaA,EAAUE,WACvBF,GAAaA,EAAUT,SACvB+F,GAAYA,EAASA,SACrBC,GAAcA,EAAWA,WACzB2I,EAAGoV,kBACHpV,EAAGqV,kBACH,0BAAA,C,EAGNrV,EAAGsE,gBAAkB,WACnBtE,EAAGQ,YAAc,EACjBR,EAAG8V,aAAA,C,EAGL9V,EAAG8V,aAAe,SAAUC,GAC1B/V,EAAGu4B,cAAcxiB,GAAc/V,EAAGoV,kBAAmBpV,EAAGqV,iBAAA,EACxD,IApCmCtV,EAC/Bw6B,EAmCAA,EAAwBv6B,EAAGk4B,iBAAiBl4B,EAAGu6B,qBAAA,EACnDv6B,EAAGw4B,UAAU,CAAC5rC,WAAYoT,EAAGQ,YAAahE,OAAQwD,EAAGoV,kBAAmBc,UAAWlW,EAAGqV,iBAAA,CAAA,EArC/DnT,EAsCPq4B,EAtCmBx6B,EAsCI,CAACS,YAAaR,EAAGQ,WAAA,EArCpD+5B,EAAwB,GAE1BA,EADCr4B,GAAcA,EAAW9jB,OACF8jB,EAEAlC,EAAGu6B,sBAE7Bx6B,EAAMM,aAAeL,EAAGo6B,aACpBM,EAAe16B,EAAGq4B,gBAAgBkC,EAAuBx6B,CAAA,EAC7DC,EAAGO,cAAgBm6B,EAAan6B,cAChCP,EAAG2V,kBAAoB+kB,EAAatW,S,EA+BtCpkB,EAAGiE,gBAAkB,SAAUzD,GAC7BR,EAAGQ,YAAcA,GAAevX,EAAa2D,YAAc,EAC3DoT,EAAG8V,aAAA,C,EAGL9V,EAAGuW,kBAAoB,SAASR,GAC9B/V,EAAGQ,YAAc,EACjBR,EAAGoV,kBAAoBW,EACvB/V,EAAGqV,kBAA6C,QAAzBrV,EAAGqV,kBAA8B,OAAS,MACjErV,EAAG8V,aAAaC,CAAA,C,EAGlB/V,EAAG8V,aAAA,C,yfA1bHpqB,QACGC,OAAO,sBAAA,EACPe,WAAW,+BAAgCsrC,CAAA,EAC3CtrC,WAAW,+BAAgCwtC,CAAA,EAC3CxtC,WAAW,yBAA0BqsC,CAAA,EACrCt3C,OAAO,SAwbZ,WACE,OAAO,SAAU+F,GACf,OAAO5K,EAAE+9C,OAAOnzC,EAAM,SAAS2G,GAC7B,OAAOA,EAAE8S,O,IA3bM,C,ICRvB,WACE,aAOA,SAAS+3B,EAAwBt7B,EAAItE,EAAM8L,EAAQC,EAAiBtc,EAAQyU,EAAKwJ,GAE/E,MAAO,CACL/B,eA6CF,SAAwBzP,EAAmBvI,EAAkB+pB,EAAoBC,EAAkB/U,EAC3ER,EAAqByV,EAAWf,EAAU0kB,EAAYn1B,EAAiBC,GAY7F,OAAOoxB,EAAexhC,EAAmBvI,EAX5B,CACXC,SAAUD,EACViF,WAAY8kB,EACZzlB,SAAU0lB,EACV3pB,YAAaoU,EACbnU,OAAQ2U,EACRiV,UAAUA,EACVf,UAAUA,EACVpQ,qBAAsBL,EACtBM,gBAAiBL,C,EAE+Ck1B,CAAA,EAC7DxwC,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,4BAAA,C,IA5D9D0tC,mBAgEF,SAA4BnlC,EAAmBvI,EAAkB+pB,EAAoBC,EACzDyjB,EAAiBxjB,EAAoBC,EAAWf,EAAU0kB,GAUpF,OAAO9D,EAAexhC,EAAmBvI,EAT5B,CACXC,SAAUD,EACViF,WAAY8kB,EACZzlB,SAAU0lB,EACV1f,WAAW2f,EACX5f,SAASojC,EACTvjB,UAAUA,EACVf,UAAUA,C,EAEsD0kB,CAAA,EAC7DxwC,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUnB,CAAA,EAC7Ctc,EAAO4a,YAAY1W,EAAkB,kBAAmB,oCAAA,C,KA3EhE,SAAS+pC,EAAexhC,EAAmBvI,EAAkBJ,EAAOiuC,GAClE,OAAOl9B,EAAGiI,MAuB0ChZ,EAvBOA,EAwBpD2Q,EAAIlX,IAlBb,SAAqB0L,EAAW9E,EAAS4tC,GACnCh1B,EAAWkB,EAAYjd,mBAAmBmD,CAAA,EAAW,uBACzD,OAAQ4tC,GACN,IAAK,qBAEH,IAAIC,EAA+B,mBAAd/oC,EAAkC,kBAAoB,UAC3E,MAEF,IAAK,2BAEC+oC,EAAgB,uB,CAIxB,OAAOj1B,EAAWi1B,C,EApBKvlC,EAAmBvI,EAAwB6tC,CAwBH,EAAa,CAC1Er9B,MAAO,CAAA,EACP5Q,OAAQA,EACRsZ,aAAc,cACdC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAChB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAC8b,KAAMwL,EAAY,eAAA,CAAA,C,KAlCtDhc,KAAK,SAAUsc,GACd,OAAOA,C,oFAfjBhb,QACKC,OAAO,6BAAA,EACP6R,QAAQ,0BAA2Bw7B,CAAA,C,ICL1C,WACE,aAOA,SAAS8B,EAAUvyC,EAAOW,EAAOJ,EAAMpC,EAAQqC,EAAWH,GACxD,IAAIoX,EAAKtjB,KACTsjB,EAAG+6B,gBAAkB,CAAA,EAGnB/6B,EAAGjW,KAAOjB,EAAKkB,QAAA,EACZgW,EAAGjW,MACJxB,EAAMyyC,cAAch7B,EAAGjW,KAAKsJ,IAAA,EAAMjJ,KAAK,SAAU6wC,GAChB,MAA3BA,EAAgBh8B,SAClBe,EAAG+6B,gBAAkB,CAAA,E,GAS7B/6B,EAAGoU,OAAS,WACV7rB,EAAM2yC,iBAAiBl7B,EAAGjW,KAAKsJ,IAAA,EAAMjJ,KAAK,WACxClB,EAAMipB,QAAQ,yBAAA,EACdppB,EAAUa,IAAI,CAAClF,KAAM,qBAAsB/F,MAAO/B,EAAE4W,SAAS,UAAA,CAAA,CAAA,EAC7D5W,EAAEqI,KAAKyB,EAAON,IAAA,EAAM,SAASW,GACxBA,EAAMjI,MAAQiI,EAAMjI,KAAK0J,eAC1BzB,EAAMjI,KAAK0J,aAAe,CAAA,E,GAG9B9B,EAAOL,GAAGzJ,EAAEmrB,KAAKnf,EAAI2B,SAAA,CAAA,EAAYxD,MAAMrC,KAAA,CAAA,C,kEAhC7CgH,QACKC,OAAO,WAAA,EACPe,WAAW,YAAaouC,CAAA,C,ICL/B,WACE,aAEApvC,QACKC,OAAO,WAAA,EACPqN,UAAU,cAGf,WACE,MAAO,CACLiD,SAAU,IACVC,MAAM,CACJnS,KAAK,G,EAEP0C,YAAc,0B,EATY,C,ICLhC,WACE,aAOA,SAASlE,EAAM+U,EAAKxU,EAAMC,EAAW2U,GAEnC,MAAO,CACLs9B,cAAeA,EACfE,iBAUF,SAA0B7nC,GACxB,OAAOiK,EAAIsiB,KAAK,UAAUvsB,EAAK,sBAAA,C,EAV/B5K,wBAAyBA,EACzBwC,UAAWA,EACXd,WAyCF,WACE,OAAOuT,EAAG,SAAS5Q,EAAQqS,GA/B7B,IACMpV,EA+BCkB,EAAA,EACD6B,EAAQrE,EAAA,CAAA,IAhCRsB,EAAOjB,EAAKkB,QAAA,GAEPgxC,EAAcjxC,EAAKsJ,IAAA,EAAMjJ,KAC5B,SAAU6wC,GACsB,MAA3BA,EAAgBh8B,OACjBlW,EAAUa,IAAI,CAAClF,KAAM,qBAAsB/F,MAAO/B,EAAE4W,SAAS,UAAA,CAAA,CAAA,EAC3B,MAA3BynC,EAAgBh8B,QACvBlW,EAAUa,IAAI,CAAClF,KAAM,qBAAsB/F,MAAO/B,EAAE4W,SAAS,aAAA,CAAA,CAAA,C,EAGjE,SAAU2nC,GACuB,MAA3BA,EAAgBl8B,QAClBlW,EAAUa,IAAI,CAAClF,KAAM,qBAAsB/F,MAAO/B,EAAE4W,SAAS,aAAA,CAAA,CAAA,C,GAI9DkK,EAAGyB,OAAA,GAmBH/U,KAAK,WACJ0C,EAAQrE,EAAA,CAAA,C,EACR0W,CAAA,C,KA9CZ,SAAS67B,EAAc3nC,GACrB,OAAOiK,EAAIlX,IAAI,UAAYiN,EAAO,eAAA,C,CA4BpC,SAASpI,IACP,OAAOlC,EAAU3C,IAAI,oBAAA,C,CAGvB,SAASqC,IACP,IAAI2yC,EAAmBnwC,EAAA,EACvB,MAA4B,aAArBmwC,GAAwD,gBAArBA,C,4CAlD9C1vC,QACKC,OAAO,WAAA,EACP6R,QAAQ,QAASjV,CAAA,C,ICLxB,WACE,aAOA,SAAS8yC,EAAkB39B,EAAI5M,EAAQ6O,EAAUuF,EAAQo2B,EAAYpyC,EAAO2K,EAAc0nC,EAAaC,EAAUvyC,GAC/G,IAAI+W,EAAKtjB,KACTsjB,EAAGnM,aAAeA,EAClBmM,EAAGu7B,YAAcA,EAAY/pB,OAG7BxR,EAAGy7B,mBAAqB,SAAUC,GAChC,OAAOJ,EAAWK,kBAAkBD,EAAgBzyC,EAAa+D,QAAA,C,EAGnEgT,EAAGxjB,QAAU,CACXo/C,WAAY,CACV,CAACl3C,KAAM,QAASm3C,MAAO,QAASC,YAAa,CAAA,EAAMC,gBAAiB,wBAAyBC,UAAW,qBAAA,EACxG,CAACt3C,KAAM,UAAWm3C,MAAO,gBAAiBC,YAAa,CAAA,EAAMC,gBAAiB,wBAAyBC,UAAW,qBAAA,EAClH,CAACt3C,KAAM,OAAQm3C,MAAO,WAAYE,gBAAiB,wBAAyBC,UAAW,qBAAA,EACvF,CAACt3C,KAAM,SAAUm3C,MAAO,SAAUE,gBAAiB,wBAAyBC,UAAW,qBAAA,GAEzFC,0BAA2B,GAC3BpvC,SAAU,G,EAGZmT,EAAGk8B,SAAY,SAASC,EAAU75B,GAChC,GAAG65B,GAAYA,EAAS/9C,OACtB,MAAO,CACLg+C,YAAaD,EAAS75B,GAAOtV,SAC7BqvC,YAAaF,EAAS75B,GAAOxH,SAC7BwhC,iBAAkBH,EAAS75B,GAAOyS,a,GAKxC/U,EAAGu8B,wBAA0B,SAASC,GACpC,OAAGA,GAAUA,EAAOp+C,OAEXxB,EAAEia,QAAQ2lC,EAAQ,SAAU19C,GACjClC,EAAEmwB,OAAOjuB,EAAM,CAAC29C,SAAYjB,EAAShhC,eAAe1b,EAAK29C,SAAU,YAAA,CAAA,CAAA,C,GAK9D,E,EAIXz8B,EAAG08B,UAAY,WACb,OAAOpB,EAAWoB,UAAUzzC,EAAa+D,QAAA,EAAU5C,KAAK,SAAUsc,GAChEC,SAASD,EAAQF,SAAUE,EAAQJ,SAAU,qBAAA,C,8HAnDnD5a,QACKC,OAAO,cAAA,EACPe,WAAW,oBAAqB2uC,CAAA,C,ICLvC,WACE,aAOA,SAASsB,EAAcrB,EAAYE,EAAUvyC,GAClCvM,KAENkgD,kBAAoB,SAAUlB,GAC/B,OAAOJ,EAAWuB,UAAUnB,EAAgBzyC,EAAa+D,QAAA,C,EAHlDtQ,KAMNF,QAAU,CACXo/C,WAAY,CACV,CAACl3C,KAAM,YAAam3C,MAAO,OAAQC,YAAa,CAAA,EAAMC,gBAAiB,wBAAyBC,UAAW,qBAAA,EAC3G,CAACt3C,KAAM,cAAem3C,MAAO,QAASC,YAAa,CAAA,EAAMC,gBAAiB,wBAAyBC,UAAW,qBAAA,EAC9G,CAACt3C,KAAM,OAAQm3C,MAAO,OAAQE,gBAAiB,wBAAyBC,UAAW,qBAAA,GAErFC,0BAA2B,GAC3BpvC,SAAU,G,EAbHnQ,KAgBNogD,UAAa,SAASX,EAAU75B,GACjC,GAAG65B,GAAYA,EAAS/9C,OACtB,MAAO,CACL2+C,WAAYZ,EAAS75B,GAAO06B,M,GAnBzBtgD,KAwBNugD,sBAAwB,SAASxlC,GAClC,OAAGA,GAASA,EAAMrZ,OAETxB,EAAEia,QAAQY,EAAO,SAAU3Y,GAChClC,EAAEmwB,OAAOjuB,EAAM,CAAC8zB,KAAQ4oB,EAAShhC,eAAe1b,EAAK8zB,KAAM,qBAAA,CAAA,CAAA,C,GAKtD,E,qDAvCblnB,QACKC,OAAO,cAAA,EACPe,WAAW,gBAAiBiwC,CAAA,C,ICLnC,WACE,aAcA,SAASrB,EAAW59B,EAAIJ,EAAK5W,EAAQwwC,EAAe99B,EAAM8L,EAAOlc,EAAamc,EAAiB+3B,GAC7F,IAAIt3B,EAAW,UACXrI,EAAQ25B,EAAc,UAAA,EAE1B,MAAO,CACL7iB,OAQF,SAAgB5c,EAAOzK,GACjBlO,EAAO,CAAC2Y,MAAOA,CAAA,EACnB,OAAOyN,EAAOmP,OAAO,CACnBlW,OAAS,OACThS,IAAOmR,EAAIS,YAAA,EAAgBT,EAAIU,gBAAgB4H,EAAS5Y,CAAA,EACxDlO,KAAOA,C,GACNsL,KAAKwtC,CAAA,C,EAbRiF,UAgBF,SAAmBM,EAAgBnwC,GAC3B7H,EAAS,CAAEwH,OAASwwC,CAAA,EAExB,OADAh4C,EAASvI,EAAEC,OAAOsI,EAAQ+3C,CAAA,EACnB5/B,EAAIlX,IAAIkX,EAAIU,gBAAgB4H,EAAU5Y,CAAA,EAAW7H,CAAA,EAAQiF,KAAKgzC,CAAA,C,EAlBvEC,gBAyBF,SAAyBrwC,GACrB,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB4H,EAAU5Y,CAAA,EAAY,UAAWkwC,CAAA,EAAe9yC,KAAKgzC,CAAA,C,EAzB1FzB,kBAiCF,SAA2BwB,EAAgBnwC,GACzC,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB4H,EAAU5Y,CAAA,EAAW,sBAAsB,CAAEL,OAASwwC,CAAA,CAAA,EAClF/yC,KAAKgzC,CAAA,C,EAlCZE,iBAmBF,SAA0BtwC,GACtB,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB4H,EAAU5Y,CAAA,EAAY,eAAA,EAAiB5C,KAAKgzC,CAAA,C,EAnBjFV,UAoCF,SAAmB1vC,GACjB,OAAOsQ,EAAIlX,IAAIkX,EAAIU,gBAAgB4H,EAAU5Y,CAAA,EAAY,wBAAyB,CAC9EuQ,MAAO,CAAA,EACP0I,aAAc,cACdC,QAAS,CACPC,OAAUhB,C,IAEX/a,KAAK,SAAUwU,GAEhB,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAC8b,KAAMwL,EAAY,eAAA,CAAA,C,OAtB/D,SAASwxB,EAAWh5B,GAElB,OADArB,EAAMlS,UAAA,EACCuT,EAAS9f,I,CA0BlB,SAASs+C,EAAgBx+B,GAAY,OAAOA,EAAS9f,IAAA,C,kHA5EvD4M,QACKC,OAAO,cAAA,EACP6R,QAAQ,aAAc89B,CAAA,EACtB1vC,SAAS,gBAAiB,CACzBsa,QAAU,CACRq3B,gBAAiB,WACjBC,OAAU,U,OCTpB,WACE,aAEA9xC,QACKC,OAAO,cAAA,EACP6R,QAAQ,eAGb,WAYE,OAVA,SAASigC,EAAa3+C,GACpB,GAAI,EAAEpC,gBAAgB+gD,GAAe,OAAO,IAAIA,EAAa3+C,CAAA,EAC7DpC,KAAKghD,aAAe5+C,EAAK4+C,aACzBhhD,KAAKihD,YAAc7+C,EAAK6+C,YACxBjhD,KAAKkhD,KAAOlhD,KAAKihD,YAAcjhD,KAAKghD,aACpChhD,KAAKmhD,YAAc/+C,EAAK++C,YACxBnhD,KAAKohD,WAAah/C,EAAKg/C,WACvBphD,KAAKqhD,IAAMrhD,KAAKmhD,YAAcnhD,KAAKohD,U,EAZV,C,ICL/B,WACE,aAQA,SAASE,EAAiBt3C,EAAQwe,EAAQo2B,EAAYpyC,EAAOD,GAC3D,IAAI+W,EAAKtjB,KAETsjB,EAAGqT,SAAW,SAAUC,GAClB,CAAC12B,EAAE+1C,QAAQ3yB,EAAGqU,OAAO5c,KAAA,GAAU7a,EAAE+1C,QAAQrf,CAAA,EAC3CgoB,EAAWjnB,OAAOrU,EAAGqU,OAAO5c,MAAOxO,EAAa+D,QAAA,EAAU5C,KAAK,WAC7DlB,EAAMipB,QAAQ,uBAAA,EACdzrB,EAAOsK,OAAA,C,EACN,SAAU4N,GACa,MAApBA,EAASK,OACX/V,EAAMsC,MAAM,0BAA2B,CAAEzE,MAAQ,CAAA,CAAA,CAAA,EAGjDmC,EAAMsC,MAAM,oBAAA,C,GAII8nB,EAKThwB,IAAI,SAAU+rB,GACzBnmB,EAAMsC,MAAM,sDAAuD6jB,EAAK3qB,KAAO,iBAAkB,CAAEqC,MAAQ,CAAA,CAAA,CAAA,C,sEA7BjH2E,QACKC,OAAO,cAAA,EACPe,WAAW,mBAAoBsxC,CAAA,EAC/BhlC,UAAU,kBAiCf,WACE,MAAO,CACLgU,iBAAmB,CAAA,EACnBtgB,WAAa,yBACbD,YAAc,kCACdyP,MAAO,CACL8D,GAAI,G,GAvCwB,C,ICNpC,WACE,aAOA,SAASi+B,EAAc3tB,EAAY4tB,EAAWC,GAE5C,MAAO,CACLC,aAAeA,EACfC,cAYF,SAAuBC,GACrB,OAAO1hD,EAAE0hD,CAAA,EAAah7C,IAAI,SAAS40B,GACjC,OAAOgmB,EAAUK,gBAAgBrmB,EAAItF,IAAA,C,GACpCj0B,MAAA,C,EAdH6/C,iBAuCF,SAA0BC,EAAara,GACrC,OAAOxnC,EAAE0G,IAAIm7C,EAAY/6C,OAAQ,SAAUyB,GACzC,IAAIqsB,EAAS4sB,EAAaha,EAAWj/B,EAAO1D,MAAA,EAC5C,MAAO,CACL+vB,OAAQ50B,EAAE40B,CAAA,EAAQluB,IAAI,SAAS7D,GAAI,OAAOA,EAAEd,KAAA,CAAA,EAASA,MAAA,EACrD+/C,MAAO9hD,EAAE40B,CAAA,EAAQluB,IAAI,SAAS7D,GAAI,OAAOA,EAAEmzB,IAAA,CAAA,EAAQj0B,MAAA,EACnDqC,MAAOmE,EAAOnE,MACdlC,KAAM0yB,EACNgT,WAAYr/B,EAAOnE,MAAMqX,OACzB+J,MAAOkO,EAAWgB,QAAQnsB,EAAOid,KAAA,EACjC0f,aAAc38B,EAAO28B,Y,KAhDzB6c,eAqDF,SAAwBC,EAAWC,EAAWhd,EAAeid,EAAaC,EAAaC,EAASC,GAC9F,OAAOriD,EAAEiF,MAAM,CACb+8C,UAAWA,EACXryC,MAAOsyC,EACPhd,cAAeA,EACfid,YAAaA,EAEbI,aAAc5uB,EAAWgB,QAAQytB,CAAA,EACjCC,QAASA,C,EACRC,CAAA,C,GA3DL,SAASb,EAAaE,EAAaa,GAaLA,EAZiBA,EAA7C,IAY4BA,EAZxB/a,EAaGxnC,EAbyB0hD,CAavB,EAAKh7C,IAAI,SAAU40B,GAC1B,MAAO,CACLtF,KAAMsF,EAAI6D,UACVvK,OAAQ50B,EAAE6E,OAAOy2B,EAAI,aAAiBinB,CAAA,C,IAEvC3iC,OAAO,MAAA,EAAQ7d,MAAA,EAjBlB,OAAO/B,EAAE0G,IAAI8gC,EAAW,SAAStlC,GAC/B,MAAO,CAAE8zB,KAAM9zB,EAAK8zB,KAAMj0B,MAAO/B,EAAEwiD,MAAMtgD,EAAK0yB,OAAQ,OAAA,CAAA,C,gEAjB5D9lB,QACKC,OAAO,8BAAA,EACP+O,QAAQ,gBAAiBujC,CAAA,C,ICLhC,WACE,aAOA,SAASziC,EAAgBkC,EAAIzU,EAAcmQ,EAAMkE,EAAKy2B,EAAa7qC,EAAOI,EAAmB60C,GAE3F,IAAIkB,EAAU,mBAUVC,GATJh2C,EAAkB,oBAAqB,CACrCi2C,OAAQ,K,GAGVj2C,EAAkB,gBAAA,EAElBA,EAAkB,gBAAA,EAGQyqC,EAAYv0B,eAOtC,SAAiC20B,GAC/B,OAAOv3C,EAAEod,WAAWm6B,EAAY,GAAA,C,EANlC,SAA2Bz1B,GAEzB,OADAxV,EAAMsC,MAAM,8BAAA,EACLkS,EAAGyB,OAAOT,CAAA,C,CAJ2D,GAW9E,MAAO,CACLqG,eAqHF,SAAwBy6B,EAAY7yC,EAAQgkB,GAC1C,OArCF,SAAwB8uB,EAAWh+C,EAAQkvB,GACzC,OAAOjT,EAAGiI,KAgBZ,SAAiB65B,EAAY7yC,EAAQgkB,GAEnC,OAAOrT,EAAIlX,IALJi5C,EAKoBG,EAAa,CACtCjiC,MAAQ,CAAA,EACR5Q,OAAQA,EACRsZ,aAAe,cACfC,QAAS,CACPC,OAAUwK,C,EAEZyjB,oBAAqB,CAAA,C,EACrBkL,CAAA,EAAqBl1C,KAAK,SAAUwU,GACpC,IAAIwH,EAAchN,EAAKQ,qBAAqBgF,EAASsH,QAAQ,qBAAA,CAAA,EAC7D,OAAOxI,EAAG2I,IAAI,CACZC,SAAUF,EAAYG,SACtBC,SAAU,IAAIC,KAAK,CAAC7H,EAAS9f,MAAO,CAAE8b,KAAOwL,EAAY,eAAA,CAAA,C,MA9BtCq5B,EAAWh+C,EAAQkvB,CAAA,CAAA,EACrCvmB,KAAK,SAAUsc,GACd,OAAOA,C,IAkCS84B,EAAY7yC,EAAQgkB,CAAA,EACrCvmB,KAAK,SAAUsc,GACdC,SAASD,EAAQF,SAAUE,EAAQJ,SAAUqK,CAAA,C,IAvHnD9U,mBA8CF,SAA4Bf,GAC1B,OAAOwC,EAAIlX,IAAIi5C,EAAU,UAAU,CACjC9hC,MAAOjU,EAAkBlD,IAAI,gBAAA,EAC7BuG,OAAQ,CAACmO,SAAUA,CAAA,C,GAClB1Q,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EAjDnBuW,eAoDF,WACE,OAAO6B,EAAIlX,IAAI,eAAe,CAAEmX,MAAQjU,EAAkBlD,IAAI,gBAAA,CAAA,CAAA,EACzDgE,KAAK,SAAUwU,GACVtM,EAASsM,EAAS9f,KAClB4gD,EAAe9iD,EAAE0G,IAAIgP,EAAQ,SAAUsd,GACzC,MAAO,CACL9U,SAAY8U,EAAMxe,IAClBuuC,UAAa/vB,EAAMlrB,I,IAGvB,OAAO9H,EAAE4f,OAAOkjC,EAAc,CAAC,YAAA,C,IA7DrC/jC,sBAiEF,SAA+BJ,EAAYqkC,GACzC,OAAIA,IAEoB,IADlBlkC,EAAY9e,EAAE0G,IAAIiY,EAAY,UAAA,GACrBnd,OACJxB,EAAEijD,KAAKnkC,EAAU,CAAA,EAEjBA,E,EAtEXokC,gBAwHF,SAAyBC,EAAOC,GAC1BC,EAAWrjD,EAAEmG,OAAQg9C,EAAQC,GAAoBD,EAAS,IAAK,CAAA,EACnE,OAAmB,EAAXE,EAAgBA,EAAW,I,EAzHnC3jC,gBA4HF,SAAyB9P,EAAMsyC,EAAanyC,GACxC,OAAO2Q,EAAIlX,IAAIi5C,EAAU7yC,EAAO,IAAMsyC,EAAa,CACjDvhC,MAAOjU,EAAkBlD,IAAI,mBAAA,EAC7BuG,OAAQA,C,GACPvC,KAAKxN,EAAEsI,SAAS,MAAA,CAAA,C,EA/HrBg7C,iBAkCF,SAA0BC,GACxB,MAAO,CACH,CAAC3lB,KAAM2lB,GAAU,CAAChC,EAAqBhmC,OAAOC,OAAOC,QAAS1Z,MAAO,UAAA,EACrE,CAAC67B,KAAM,CAAC2jB,EAAqBhmC,OAAOM,UAAUJ,QAAS1Z,MAAO,cAAA,E,EApClEyhD,aAiIF,SAAsBC,EAAKC,GAC1B,OAAO1jD,EAAEmG,MAAOs9C,EAAKC,EAAO,IAAK,CAAA,C,EAjIhCC,uBA0IF,SAAgCpmB,GAC9B,OAAO,SAASjQ,GAMd,OALAttB,EAAEia,QAAQqT,EAAQs2B,YAAa,SAAU1hD,GACvClC,EAAEia,QAAQ/X,EAAK2hD,aAAc,SAAUC,GACrCA,EAAY/hD,MAAQ+hD,EAAY/hD,MAAMw7B,E,KAGnCjQ,C,GAhJTy2B,4BAoJF,SAAqCC,EAAcC,GACjD,OAAOjkD,EAAE+1C,QAAQ/1C,EAAEkkD,IAAIF,GAAgB,GAAIC,GAAY,EAAA,CAAA,C,EApJvDE,eAaF,SAAwBC,EAAYxvB,EAAQyvB,GAC1C,MAAO,CACLD,WAAYA,EACZxvB,OAAQA,EACRyvB,UAAWA,C,GAhBbC,eAIF,SAAwBtjC,EAAKujC,EAAaC,GACxC,MAAO,CACLxjC,IAAKA,EACLujC,YAAaA,EACbC,YAAaA,C,GAPfC,cAmBF,SAAuBrqC,EAASgqC,EAAYM,GACtCC,EAAa3kD,EAAE0N,KAAK0M,EAAS,CAACmjB,OAAQ6mB,CAAA,CAAA,EAC1C,GAAGO,EAED,OADIC,EAAkB5kD,EAAE0N,KAAKi3C,EAAWb,YAAa,CAACY,WAAYA,CAAA,CAAA,IACxCE,EAAgB7iD,K,iHAhEhD+M,QACKC,OAAO,8BAAA,EACP6R,QAAQ,kBAAmBhC,CAAA,C,ICJhC9P,QAAQC,OAAO,8BAAA,EACVqN,UAAU,4BAEf,WACE,MAAM,CACJiD,SAAU,IACVyhB,QAAS,UACTE,KAAM,SAAS9sB,EAAQ2wC,EAAK7jD,EAAM8jD,GAIhC9jD,EAAK+jD,SAAS,UAAW,SAAUC,GACjCC,EAAEJ,CAAA,EAAKK,WAAW,SAAU,UAAWF,CAAA,C,GAGzChkD,EAAK+jD,SAAS,UAAW,SAAUC,GACjCC,EAAEJ,CAAA,EAAKK,WAAW,SAAU,UAAWF,CAAA,C,GAGzC9wC,EAAO1F,OAAO,WACZ,OAAOs2C,EAAkBK,W,EACxB,SAASH,GACVC,EAAEJ,CAAA,EAAKK,WAAW,UAAWF,CAAA,C,GAI/BH,EAAIK,WAAW,CACbE,OAAQpkD,EAAK,QAAa,CAAA,EAC1BqkD,SAAU,CAAA,EACVtmB,WAAY/9B,EAAK,YAAiB,UAClCskD,OAAStkD,EAAK,YAAe,OAAS,KACtCukD,WAAY,cAAevkD,EAAK,YAAiB,gCAAiC,SAClFwkD,QAASxkD,EAAK,QACdykD,QAASzkD,EAAK,QACd0kD,SAAU,SAAU3jD,GAClBmS,EAAOq5B,OAAO,WACZuX,EAAkBa,cAAc5jD,CAAA,EAChC+iD,EAAkBc,QAAA,C,GAEpBf,EAAI3gB,MAAA,C,MAtC8B,ECF9C,WACE,aAKA,SAASv3B,EAAgBN,EAAcD,EAAcwS,EAAiB3S,EAAQC,EAAMnC,EAAa2T,EAAUsB,GAEzG,IAAI6mC,EAAe,CACjBC,aAAcC,EAA0B,CAAC,YAAa,UAAA,EACtDC,eAAgBC,EAAqB,aAAA,EACrCC,UAAaC,EAAuB,YAAa,WAC/C,OAAOnnC,EAAQonC,UAAU,CAAA,C,GAE3BC,QAAWF,EAAuB,UAAW,WAC3C,OAAOnnC,EAAQonC,UAAU,CAAA,C,GAE3BE,YAAaH,EAAuB,WAAY,WAC9C,OAAOnnC,EAAQonC,UAAU,CAAA,C,GAE3BG,cAAeJ,EAAuB,aAAc,WAClD,OAAOnnC,EAAQwnC,eAAA,C,GAEjBC,YAAeR,EAAqB,aAAA,EACpCS,UAAaX,EAA0B,CAAC,aAAc,WAAY,iBAAA,C,EAGpE,MAAO,CACLx3C,oBAUF,SAA6BJ,EAAWF,GACtC04C,EAAA,EAAgBn5C,KAAK,SAAUiH,GACzBxG,EAAQ/L,MAAS+L,EAAQnG,OAASqG,EAAUrG,OAC9CmE,EAAO8K,eAAe,OAAS9I,EAAQ/L,KAAK,KAAQ0kD,SAASC,SAAW54C,EAAQ/L,KAAK0N,KAAOg3C,SAASC,QAAA,EACrG56C,EAAO8K,eAAe,QAAS9I,EAAQ/L,KAAKyN,KAAA,EACxC1B,EAAQ/L,MAAQ+L,EAAQ/L,KAAKyN,OAC/B1D,EAAO4a,YAAYpS,EAAU,cAAexG,EAAQ/L,KAAKyN,KAAA,EAE3D1D,EAAO66C,eAAA,E,IAjBXx5C,eAsBF,WACEq5C,EAAA,EAAgBn5C,KAAK,SAAUiH,GAC7B,IAAImW,EAAc7gB,EAAY0U,YAAA,EAAgB,kBAAoB,gBAC9DtR,EAAOjB,EAAKkB,QAAA,EACZD,GACFlB,EAAO4a,YAAYpS,EAAUmW,EAAazd,EAAK45C,OAAQ,CAAA,CAAA,C,IA1B3Dr4C,mBA+BF,WACE,IAAIvB,EAAOjB,EAAKkB,QAAA,EACZD,IACFlB,EAAO8K,eAAe,aAAc5J,EAAK45C,MAAA,EACzC96C,EAAO8K,eAAe,SAAU5J,EAAK45C,MAAA,E,EAlCvCnS,oBAsCF,SAA6BoS,GAC3BL,EAAA,EAAgBn5C,KAAK,SAAUiH,GAC7BxI,EAAO4a,YAAYpS,EAAU,cAAeuyC,CAAA,C,IAvC9CC,yBA2CF,SAAkCC,EAAcC,GAC9C,IAAIC,EAAwB1pC,EAAS2pC,qBAAqBH,EAAa/nB,SAAA,EACnEmoB,EAAsB5pC,EAAS2pC,qBAAqBH,EAAa7nB,OAAA,EAErE,CAAA,IAKMxU,EALF7qB,EAAEiK,GAAGm9C,EAAuB/6C,EAAa8yB,SAAA,GAAen/B,EAAEiK,GAAGq9C,EAAqBj7C,EAAagzB,OAAA,IAC7FkoB,EAAcvnD,EAAE0N,KAAKy5C,EAAc,SAAUI,GAC/C,OAAOvnD,EAAEiK,GAAGyT,EAAS8pC,eAAeD,EAAYE,UAAA,CAAA,EAAcP,EAAa/nB,SAAA,GACvEn/B,EAAEiK,GAAGyT,EAAS8pC,eAAeD,EAAYG,QAAA,CAAA,EAAYR,EAAa7nB,OAAA,C,GAEpExU,EAAa08B,EAAcA,EAAYv/C,KAAQo/C,EAAwB,IAAME,EAEjFK,EAAA,EAAyBn6C,KAAK,SAAUiH,GACtCxI,EAAO4a,YAAYpS,EAAU,oBAAqBoW,CAAA,C,MAtDtD+8B,8BA2DF,SAAuCC,EAAkBC,GACvD,CAAA,IACMj9B,EADFjM,EAAgBmlC,4BAA4B8D,EAAkBC,CAAA,IAC5Dj9B,EAAa7qB,EAAEumB,KAAKuhC,EAAc,GAAA,EACtCH,EAAA,EAAyBn6C,KAAK,SAAUm5C,GACtC16C,EAAO4a,YAAY8/B,EAAe,aAAc97B,CAAA,C,MA9DpDk9B,sBAmEF,SAA+BC,EAAWC,GACxCN,EAAA,EAAyBn6C,KAAM,SAAUiH,GAEvCxI,EAAO4a,YAAYpS,EAAU,kBADZwzC,EAAa,WAAaD,CACK,C,IArElDE,+BAyEF,SAAwCC,GACtC,IAAIC,EAAc,GAElBpoD,EAAEqI,KAAKw9C,EAAc,SAAUwC,EAAeL,GACxCh6C,EAAQq6C,EAAcF,EAAWH,CAAA,EAClCh6C,GAAOo6C,EAAYvgD,KAAKmG,CAAA,C,GAG7B25C,EAAA,EAAyBn6C,KAAK,SAAUm5C,GACtC3mD,EAAEqI,KAAK+/C,EAAa,SAAUr4C,GAC5B9D,EAAO4a,YAAY8/B,EAAe52C,EAAO6a,YAAa7a,EAAO8a,UAAA,C,OAKnE,SAAS87B,IACP,OAAG58C,EAAY0U,YAAA,EACNkpC,EAAA,EACC59C,EAAY+M,eAAA,EAcf1K,EAAa+D,iBAAiB9D,EAAa+D,QAAA,EAd3C,KAAA,C,CAKT,SAASu3C,IACP,OAAO/oC,EAAgBC,eAAA,EAClBrR,KAAM,SAAUmR,GACXqkC,EAAoBpkC,EAAgBG,sBAAsBJ,EAAYtS,EAAa6R,QAAA,EACvF,OAAOle,EAAEumB,KAAKy8B,EAAmB,GAAA,C,GAQzC,SAASsF,EAAc19B,EAAaC,GAClC,MAAO,CACLD,YAAaA,EACbC,WAAYA,C,EAIhB,SAASs7B,EAAuBoC,EAAaC,GAQ3C,OAAO,SAAUL,EAAWH,GAC1B,IAR8BS,EAQ9B,GAAG,CAAC7pC,EAAgBmlC,4BAA4B13C,EAAak8C,GAAcJ,EAAUI,EAAA,EAGnF,OAFI39B,EAAco9B,EAAY,UATFS,EAUYD,EAAA,EAVAL,EAUeA,EAAUI,GAC1DD,EAAc19B,EAVpB5qB,EAAE+1C,QAAQoS,CAAA,GAAcvpC,EAAgBmlC,4BAA4B0E,EAAYN,CAAA,EAC1E,MAEAnoD,EAAEumB,KAAK4hC,EAAW,GAAA,CAOS,C,EAKxC,SAASlC,EAAqBsC,GAC5B,OAAO,SAAUJ,EAAWH,GAC1B,GAAG,CAAChoD,EAAEiK,GAAGk+C,EAAUI,GAAcl8C,EAAak8C,EAAA,EAAe,CACvD39B,EAAco9B,EAAY,UAC9B,GAAG,CAAChoD,EAAEmoC,YAAYggB,EAAUI,EAAA,EAC1B,OAAOD,EAAc19B,EAAau9B,EAAUI,GAAa3xC,SAAA,CAAA,C,GAMjE,SAASmvC,EAA0B2C,GACjC,OAAO,SAAUP,EAAWH,GAK1B,GAJ6BhoD,EAAEsV,KAAKozC,EAAc,SAAUC,GAC1D,MAAO,CAAC3oD,EAAEiK,GAAGk+C,EAAUQ,GAAat8C,EAAas8C,EAAA,C,GAMjD,OAAOL,EAFWN,EAAY,UACbhoD,EAAEumB,KAAKvmB,EAAE0G,IAAIgiD,EAAc,SAAU3mD,GAAS,OAAOomD,EAAUpmD,EAAA,CAAA,EAAY,GAAA,CAC1D,C,kHAxL1C+M,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,kBAAmBjU,CAAA,C,ICJlC,WACE,aAEAmC,QACKC,OAAO,kBAAA,EACPqN,UAAU,kBAGf,WACE,MAAO,CACLiD,SAAU,IACVC,MAAO,CACLsE,YAAa,G,EAEfod,KAAO,SAAU9sB,EAAQ+sB,GACvB/sB,EAAO1F,OAAO,cAAe,SAASw2C,EAAU4D,GAC3CA,GAAU5D,GACX/jB,EAAI,GAAG1gB,WAAWsoC,eAAe,CAACC,MAAO,QAASC,UAAY,QAAA,CAAA,C,KAZtC,C,ICLpC,WACE,aAEAj6C,QAAQC,OAAO,kBAAA,EACVi6C,SAAS,oBAEd,WAEElpD,KAAKmpD,KAAO,WACV,IAAIC,EAAS,GAEb,SAASC,EAAcC,EAASxpD,GAC9B,IAAIytC,EAAO,EACP9kC,EAASvI,EAAEC,OAAO,GAAIL,EAAS,CAAC46C,GAAI4O,CAAA,CAAA,EACpClnD,EAAO,GACPmnD,EAAS,GACTC,EAAW,KACXC,EAAW,KAiBb,GAdgBhhD,EAAOihD,SAcnBjhD,EAAOihD,SAAU,CACnB,GAAI,CAACxpD,EAAEwwB,SAASjoB,EAAOihD,QAAA,EAAW,MAAM,IAAIthD,MAAM,2BAAA,EAClD,GAAIK,EAAOihD,SAAW,EAAG,MAAM,IAAIthD,MAAM,oCAAA,C,CASpBy6C,EAxBTp6C,EAAOo6C,OAyBrB,GAAIA,EAAQ,CACV,GAAI,CAAC3iD,EAAEwwB,SAASmyB,CAAA,EAAS,MAAM,IAAIz6C,MAAM,yBAAA,EACzC,GAAIy6C,EAAS,EAAG,MAAM,IAAIz6C,MAAM,kCAAA,C,CASpC,SAASuhD,EAASC,GACZA,IAAUJ,IACPC,EAEMA,IAAaG,IACtBH,EAAWG,EAAMpa,MAFjBia,EAAWG,EAKbC,EAAMD,EAAMpa,KAAMoa,EAAME,IAAA,EACxBD,EAAMD,EAAOJ,CAAA,GACbA,EAAWI,GACFpa,KAAO,K,CAUpB,SAASqa,EAAME,EAAWC,GACpBD,IAAcC,IACZD,IACFA,EAAUD,KAAOE,GAEfA,KACFA,EAAUxa,KAAOua,E,CA5DlBthD,EAAOihD,WACVjhD,EAAOihD,SAAWp+B,OAAO2+B,WAsE3BjqD,KAAKm7C,IAAM,SAAUliC,EAAKhX,GACxB,IAAIioD,EAAWX,EAAOtwC,KAASswC,EAAOtwC,GAAO,CAACA,IAAKA,CAAA,GAC/Cs5B,EAAOvyC,KAIX,GAFA2pD,EAASO,CAAA,EAELhqD,CAAAA,EAAEmoC,YAAYpmC,CAAA,EAsBlB,OApBMgX,KAAO7W,GAAOmrC,CAAA,GAEpBnrC,EAAK6W,GAAO,CACVhX,MAAOA,C,EAGLwG,EAAOo6C,SACTzgD,EAAK6W,GAAK2lB,WAAY,IAAIn5B,MAAOk7B,QAAA,EAC7Bv+B,EAAK6W,GAAKkxC,WACZC,aAAahoD,EAAK6W,GAAKkxC,SAAA,EAEzB/nD,EAAK6W,GAAKkxC,UAAYE,WAAW,WAC/B9X,EAAKtkC,OAAOgL,CAAA,C,EACXxQ,EAAOo6C,MAAA,GAGRtV,EAAO9kC,EAAOihD,UAChB1pD,KAAKiO,OAAOw7C,EAASxwC,GAAA,EAGhBhX,C,EAQTjC,KAAK0J,IAAM,SAAUuP,GACnB,IAAIixC,EAAWX,EAAOtwC,GAEtB,GAAKixC,EAIL,OAFAP,EAASO,CAAA,EAEF9nD,EAAK6W,GAAKhX,K,EAQnBjC,KAAKiO,OAAS,SAAUgL,GACtB,IAAIixC,EAAWX,EAAOtwC,GAEjBixC,IAIDA,IAAaV,IACfA,EAAWU,EAASJ,MAElBI,IAAaT,IACfA,EAAWS,EAAS1a,MAEtBqa,EAAMK,EAAS1a,KAAM0a,EAASJ,IAAA,EAE9B,OAAOP,EAAOtwC,GACd,OAAO7W,EAAK6W,GACZs0B,CAAA,G,EAOFvtC,KAAK2O,UAAY,WACfvM,EAAO,GACPmrC,EAAO,EACPgc,EAAS,GACTC,EAAWC,EAAW,I,EAOxBzpD,KAAKsqD,QAAU,WAGbf,EADA9gD,EADArG,EAAO,KAGP,OAAOgnD,EAAOE,E,EAQhBtpD,KAAK2iC,KAAO,WACV,OAAOziC,EAAEC,OAAO,GAAIsI,EAAQ,CAAC8kC,KAAMA,CAAA,CAAA,C,EAUvC,SAASgd,EAAajB,EAASxpD,GAC7B,GAAIwpD,KAAWF,EACb,MAAM,IAAIhhD,MAAM,WAAakhD,EAAU,gBAAA,EAClC,GAAKppD,EAAEmL,SAASi+C,CAAA,EAKvB,OADAF,EAAOE,GAAW,IAAID,EAAcC,EAASxpD,CAAA,EACtCspD,EAAOE,GAJZ,MAAM,IAAIlhD,MAAM,2BAAA,C,CAkCpB,OAvBAmiD,EAAa5nB,KAAO,WAClB,IAAIA,EAAO,GAIX,OAHAziC,EAAEia,QAAQivC,EAAQ,SAAUvoC,EAAOyoC,GACjC3mB,EAAK2mB,GAAWzoC,EAAM8hB,KAAA,C,GAEjBA,C,EAQT4nB,EAAa7gD,IAAM,SAAU4/C,GAC3B,OAAOF,EAAOE,E,EAGhBiB,EAAa57C,UAAY,WACvBzO,EAAEqI,KAAK6gD,EAAQ,SAAUvoC,GACvBA,EAAMlS,UAAA,C,IAIH47C,C,EA9OwB,C,ICJrC,WACE,aAEAv7C,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,YAEb,WACE,MAAO,CACL+gC,gBAAiBliD,GAAGuE,KAAKsX,OAAO,UAAA,EAAYiC,MAC5C+sC,gBAAiB7qD,GAAGuE,KAAKsX,OAAO,WAAA,C,EALV,C,ICJ5B,WACE,aAEAxM,QACKC,OAAO,kBAAA,EACP6R,QAAQ,eAEb,WAEE,MAAO,CACLqY,mBAKF,SAA4BuO,GAC1B,OAAOxnC,EAAEulB,aAAa,CAACrjB,KAAMslC,CAAA,EAAY,CACvC3jC,GAAI,CACF9B,MAAO/B,EAAEsI,SAAS,YAAA,EAClBlE,MAAO,CAAC,U,KARZu0C,wBAA0BA,EAC1B/oB,qBAyBF,SAA8B4X,GAC5B,OAAOxnC,EAAEulB,aAAaozB,EAAwBnR,CAAA,EAAY,CACxD3jC,GAAI,CACF2hB,MAAQ,SAASzhB,GACf,OAAOA,EAAEyhB,K,OAjBjB,SAASmzB,EAAwBnR,GAC/B,OAAOxnC,EAAEulB,aAAa,CAACrjB,KAAM4M,QAAQyN,KAAKirB,CAAA,CAAA,EAAa,CACrDjgB,SAAW,CAAA,EACX1jB,GAAI,CACF9B,MAAQ/B,EAAEsI,SAAS,SAAA,EACnBlE,MAAQ,UACRqhB,WAAa,SAAU1hB,GACrB,OAAoB,IAAZA,EAAEi0C,SAAeryB,QAAQ,CAAA,EAAK,G,MA1BnB,C,ICL/B,WACE,aAGA7W,QAAQC,OAAO,kBAAA,EACVC,SAAS,YAAa,UAAA,EACtBA,SAAS,YAAa,iBAAA,C,ICN7B,WACE,aAKA,SAAS/C,EAAO2gC,EAASlsB,GAEvB,IAAI6pC,EAEJ,MAAO,CACL1jC,YAcF,SAAqB8/B,EAAe/7B,EAAaC,EAAY2/B,GACxDD,GACD3d,EAAQ6d,GAAG,OAAQ,QAAS,CAC1B9D,cAAeA,EACf/7B,YAAaA,EACbC,WAAYA,EACZ6/B,eAAgBF,GAAiB,CAAA,C,IAnBrC1D,eAwBF,SAAwBn3C,EAAMg7C,GACzBJ,GACD3d,EAAQ6d,GAAG,OAAQ,WAAW,CAC5B96C,MAAQA,EACRuX,KAAO0/B,SAASC,SAAW8D,C,IA3B/B/9C,gBAgCF,WA3BS8T,EAAIlX,IAAI,SAAS,CAACmX,MAAQ,CAAA,CAAA,CAAA,EAAOnT,KAAK,SAASo9C,GACpD,GAAqB,KAAlBA,EAAQvoC,OACT,OAAOuoC,EAAQ1oD,I,GA0BRsL,KAAK,SAASq9C,GACpBA,IACDN,EAAeM,EACfje,EAAQ6d,GAAG,SAAS,CAClBK,WAAaP,EACbQ,aAAe,M,OArCrBh0C,eA2CF,SAAwB4tB,EAAW5iC,GAC9BwoD,GAAgBxoD,GACjB6qC,EAAQ6d,GAAG,MAAM9lB,EAAW5iC,EAAM6U,SAAA,CAAA,C,+BAxDxC9H,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,SAAU3U,CAAA,C,ICJzB,WACE,aAUA,SAASlC,EAAYyC,EAAMjD,EAAWyC,EAAKg/C,EAA0B9hD,EAAiB+C,GAEpF,IAAIrC,EAAc,KAClB,MAAO,CACL8U,eAAgBA,EAChB1H,kBAAmBA,EACnBxN,IAWF,WACE,OAAOI,C,EAXPkE,MAcF,WACElE,EAAc,I,EAddyD,0BAiBF,SAAmCF,GAC9BA,EACU89C,CAYf,SAAyB99C,GACvB,OAAOnN,EAAE+M,SAASI,EAAK2d,WAAY,uBAAA,C,EAbN3d,CAAA,GAIzB6J,EAAA,EACA/K,EAAO8K,eAAe,aAAc7N,EAAgByB,YAAA,IAJpD+T,EAAA,EACAzS,EAAO8K,eAAe,aAAc7N,EAAgB2B,SAAA,GAMtD2B,EAAKoC,MAAM,wDAAA,C,EA1Bb6P,YAkCF,WACE,OAAOvV,EAAgB2B,YAAcjB,C,EAlCrCkN,eAqCF,WACE,OAAO5N,EAAgByB,eAAiBf,C,GAnC1C,SAASoD,EAAIk+C,GACXthD,EAAcshD,C,CAqChB,SAASxsC,IACP1R,EAAI9D,EAAgB2B,SAAA,C,CAGtB,SAASmM,IACPhK,EAAI9D,EAAgByB,YAAA,C,6FAhExBmE,QAAQC,OAAO,kBAAA,EACVC,SAAS,kBAAkB,CAC1BrE,aAAc,eACdE,UAAW,W,GAEZ+V,QAAQ,cAAe7W,CAAA,C,ICR9B,WACE,aAOA,SAASqsB,EAActV,EAAIiC,EAAU0Q,GAGnC,IAAI03B,EAAU,UACVC,EAAU,UAGd,MAAO,CACL1zB,UAOF,SAAmB9V,EAASrZ,GAE1B,IAAI8Z,EAAS8oC,EACTE,EAAc,EACd39B,GAHJnlB,EAASA,GAAU,IAGImlB,WAAa49B,EAEhCC,EAAQ93B,EAAUb,KAAK,CACzBya,KAAO,KACPx9B,YAAc,+BACdC,WAAA,CAAA,SAAa,SAAUoE,GASrB,SAASs3C,EAASC,GAChB,OAAOppC,IAAWopC,C,CATpBv3C,EAAO1F,OAAO,WACZ,OAAO68C,C,EACN,SAAUrT,GACNxX,MAAMwX,CAAA,IACT9jC,EAAO8jC,QAAUA,E,GAQrB9jC,EAAOw3C,aAAmC,CAAA,IAApBnjD,EAAO+wC,SAC7BplC,EAAOy3C,UAAY3rD,EAAE4rD,KAAKJ,EAAU,KAAML,CAAA,EAC1Cj3C,EAAO23C,UAAY7rD,EAAE4rD,KAAKJ,EAAU,KAAMJ,CAAA,EAC1Cl3C,EAAO43C,UAAY9rD,EAAE4rD,KAAKJ,EAAU,KAnC5B,OAmCkC,EAC1Ct3C,EAAOyjB,eAAiBpvB,EAAOovB,c,KAKnC,OAAO/V,EAAQpU,KAQf,SAAiBioB,GAGf,OAFA41B,EAAc,EACdhpC,EAAS+oC,EACFW,EAAA,EAAgBv+C,KAAK,WAC1B,OAAOioB,C,IAIX,SAAiB3T,GAEf,OADAO,EA1DU,QA2DH0pC,EAAA,EAAgBv+C,KAAK,WAC1B,OAAOsT,EAAGyB,OAAOT,CAAA,C,IAIrB,SAAkB9T,GAChBq9C,EAAc39B,EAAU1f,CAAA,C,CAxBY,EAEtC,SAAS+9C,IACP,OAAOhpC,EAAS,WACdwoC,EAAMpR,MAAA,C,EACL,GAAA,C,IAxCP,SAASmR,EAAiBt9C,GACxB,OAAOA,GAASA,EAAMg+C,OAASh+C,EAAMm1C,K,0CAjBzCr0C,QACKC,OAAO,kBAAA,EACP6R,QAAQ,gBAAiBwV,CAAA,C,ICLhC,WACE,aAOA,SAAS61B,EAAelpC,GACtB,MAAO,CACL1D,SAAU,IACVC,MAAO,CACL4sC,eAAgB,G,EAElBlrB,KAAM,SAAS1hB,EAAOytB,EAASof,GAC7B7sC,EAAMkjB,iBAAiB,iBAAkB,SAAUzgC,GAC7Cud,EAAM8sC,QAAQC,OAChBtpC,EAAS,WAQP,IAPA,IAAIupC,EAAoB,GACpBjpB,EAAO5iB,SAAS8rC,uBAAuBxf,EAAQ,GAAGyf,SAAA,EAClDC,EAAYppB,EAAK,GAAGqpB,YACpBC,EAAatpB,EAAK7hC,OAClBorD,EAAc7f,EAAQ,GAAG8f,kBAEzBC,EAAiBL,GADR,GAAK,IAAIG,EAAY,IAE1BvmD,EAAE,EAAEA,EAAEumD,EAAYvmD,CAAA,GAAI,CAE5B,IADA,IAAI0mD,EAAW,EACP1jB,EAAE,EAAEA,EAAEsjB,EAAWtjB,CAAA,GACpB0jB,EAAW1pB,EAAKgG,GAAG9+B,SAASlE,GAAG6mC,cAChC6f,EAAW1pB,EAAKgG,GAAG9+B,SAASlE,GAAG6mC,aAGnC,IAAI8f,EAAkB3pB,EAAK,GAAG94B,SAASlE,GAAG62C,UAAU,GACpDoP,EAAkBzkD,KAAK,CAACsxB,WAAY6zB,EAAiBC,YAAaF,CAAA,CAAA,C,CAQpE,IANA,IAIIG,EAAoBJ,EAJD9sD,EAAEid,OAAOjd,EAAE0G,IAAI1G,EAAE6E,OAAOynD,EAAmB,SAAS/6C,GACzE,MAAuB,cAAhBA,EAAE4nB,U,GACP,aAAA,EAAgB,SAASg0B,EAAM1J,GACjC,OAAO0J,EAAO1J,CAAA,EAAM,CAAA,EAGdp9C,EAAE,EAAEA,EAAEumD,EAAYvmD,CAAA,GAAI,CAE5B,IAAI+mD,EAAOC,MAAMl3C,UAAU/N,MAAM/E,KAAKod,SAAS6sC,iBAAiB,IAAMjqB,EAAK,GAAG94B,SAASlE,GAAG62C,UAAU,EAAA,EAAK,CAAA,EAErGqQ,GADJ9sC,SAAS6sC,iBAAiB,IAAKjqB,EAAK,GAAG94B,SAASlE,GAAG62C,UAAU,EAAA,EAAI,GAAG93C,MAAM9D,MAAQ,GAC9Dmf,SAAS6sC,iBAAiB,IAAMjqB,EAAK,GAAG94B,SAASlE,GAAG62C,UAAU,EAAA,EAAI,GAAGhQ,aACzFkgB,EAAKnzC,QAAQ,SAASo8B,GAChBkX,EAAgBjB,EAAkBjmD,GAAG4mD,YACvC5W,EAAIjxC,MAAM9D,MAASisD,EARR,EAQsC,KAEzB,eAArBlX,EAAI6G,UAAU,GACZoP,EAAkBjmD,GAAG4mD,YAAcC,EACpC7W,EAAIjxC,MAAM9D,MAAQ4rD,EAAoB,KAEtC7W,EAAIjxC,MAAM9D,MAASgrD,EAAkBjmD,GAAG4mD,YAAc,EAAK,KAG7D5W,EAAIjxC,MAAM9D,MAAQgrD,EAAkBjmD,GAAG4mD,YAAc,I,KAK5D,EAAG,CAAA,CAAA,C,4BA3DhBn+C,QACKC,OAAO,kBAAA,EACPqN,UAAU,iBAAkB6vC,CAAA,C,ICLnC,WACE,aAEAn9C,QACKC,OAAO,kBAAA,EACPqN,UAAU,YAGf,WACE,MAAO,CACL0kB,QAAU,UACVjxB,YAAc,wBACdyP,MAAQ,CACNkuC,QAAU,G,EAEZxsB,KAAO,SAAU9sB,EAAQ+sB,GACvB,IAAIwsB,EAASxsB,EAAIvzB,KAAK,OAAA,EAEtBuzB,EAAIlgC,GAAG,WAAY,SAAUiN,GACvBA,EAAM0/C,SAAWD,EAAO,IACxB,MAAQE,OAAOC,aAAa5/C,EAAM6/C,OAAA,IACpC7/C,EAAMM,eAAA,EACNm/C,EAAO,GAAGK,MAAA,EACV55C,EAAOq5B,OAAA,E,KAlBW,C,ICL9B,WACE,aAEAz+B,QACKC,OAAO,kBAAA,EACPlK,OAAO,YAGZ,WACE,OAAO,SAASkpD,GAEd,OADAA,EAAQA,GAAS,IACJr3C,QAAQ,SAAU,SAASs3C,GAAK,OAAOA,EAAIC,OAAO,CAAA,EAAGC,YAAA,EAAgBF,EAAIG,OAAO,CAAA,EAAGhtD,YAAA,CAAA,CAAA,C,EAN3E,C,ICL3B,WACE,aAOA,SAASitD,EAAkB1wC,GACzB,MAAO,CACL2B,SAAU,IACVyhB,QAAS,UACTxhB,MAAO,CACLkuC,QAAS,IACT/H,QAAS,IACTD,QAAS,G,EAEXxkB,KAAM,SAAU9sB,EAAQ64B,EAASof,EAAOrH,GAyCtC,SAASxpC,EAAOvZ,GACVssD,EAAYtsD,GAASsZ,OAAOtZ,CAAA,EAChC,OAAGssD,EAAUnuB,QAAA,EACJxiB,EAAS8pC,eAAe6G,CAAA,EAExB,E,CA5CXvJ,EAAkBwJ,SAAW,CAC3BC,SAAU,OACVC,gBAAiB,CAAA,C,EAGnB1J,EAAkB2J,YAAY5mD,KAAKyT,CAAA,EAEnCwpC,EAAkB4J,SAAS7mD,KAG3B,SAAoBkmD,GAClB,IAAIY,EAAYtzC,OAAO0yC,CAAA,EACnBtI,EAAUvxC,EAAOuxC,QACjBD,EAAUtxC,EAAOsxC,QAEjBoJ,EAAe,CAAA,EAEhBD,EAAUzuB,QAAA,GACRulB,GAAsC,GAA3BkJ,EAAUE,KAAKpJ,CAAA,GACxBD,GAAWmJ,EAAUE,KAAKrJ,CAAA,GAAY,IACvCoJ,EAAe,CAAA,GAQnBE,EAAYxzC,EAFVszC,EAEiBb,EAEAjJ,EAAkBK,WAFlB,EAQrB,OAHAL,EAAkBa,cAAcmJ,CAAA,EAChChK,EAAkBc,QAAA,EAEXkJ,C,CA7BuB,C,0BAvBtChgD,QACKC,OAAO,kBAAA,EACPqN,UAAU,oBAAqBgyC,CAAA,C,ICLtC,WACE,aAOA,SAASW,EAAeC,GACtB,MAAO,CACL3vC,SAAU,IACV2hB,MAIqBguB,EAJCA,EAKjB,SAAc1vC,EAAOytB,EAASof,GACnC,GAA6B,KAAzBA,EAAM4C,eACR,MAAM,IAAI7mD,MAAM,oEAAA,EAIlB,IAAI+mD,EAAmBD,EACnB,uC,EACF1vC,CAAA,EAEFytB,EAAQmiB,SAAS,MAAA,EACjBniB,EAAQoiB,MAAMF,CAAA,EAEd3vC,EAAM9Q,OAAO29C,EAAM4C,eAAgB,SAASt5B,GAC3B,CAAA,IAAXA,GACFw5B,EAAiBlhD,OAAA,EACjBg/B,EAAQqiB,YAAY,MAAA,IAEpBriB,EAAQmiB,SAAS,MAAA,EACjBniB,EAAQoiB,MAAMF,CAAA,E,MApBtB,IAAyBD,C,wBAZzBlgD,QACKC,OAAO,kBAAA,EACPqN,UAAU,iBAAkB2yC,CAAA,C,ICLnC,WACE,aAEAjgD,QACKC,OAAO,kBAAA,EACP6R,QAAQ,SAGb,WACE,MAAO,CACLosB,YAGF,SAAqB94B,GACnB,IAAIm7C,EAAgB,GAQpB,OANAn7C,EAAOhH,IAAI,WAAY,WACrB4B,QAAQmL,QAAQo1C,EAAe,SAAUC,GACvCA,EAAQruB,IAAIsuB,IAAID,EAAQthD,MAAOshD,EAAQzrD,EAAA,C,KAM3C,SAAYo9B,EAAKjzB,EAAOnK,GACtBwrD,EAAcxnD,KAAK,CACjBo5B,IAAMA,EACNjzB,MAAQA,EACRnK,GAAKA,C,GAEPo9B,EAAIlgC,GAAGiN,EAAOnK,CAAA,C,IAzBG,C,ICLzB,WACE,aAOA,SAASm0C,EAAQr6B,GACf,IAAI0jB,EAAe1jB,EAAQ,QAAA,EAC3B,OAAO,SAAU5b,EAAOytD,GAClBV,EAAYztB,EAA6B,IAAhBjW,OAAOrpB,CAAA,EAAcytD,CAAA,EAIlD,OAHIV,IACFA,GAAa,KAERA,C,wBAZXhgD,QACKC,OAAO,kBAAA,EACPlK,OAAO,UAAWmzC,CAAA,C,ICLzB,WACE,aAEAlpC,QACKC,OAAO,kBAAA,EACP6R,QAAQ,iBAAkB,WACzB,OAAOpK,OAAOi5C,c,MCNtB,WACE,aAEA3gD,QACKC,OAAO,kBAAA,EACPlK,OAAO,SAGZ,WACE,OAAO,SAASsZ,EAAOpF,EAAK0gB,GAE1B,OADgBz5B,EAAEy5B,QAAQtb,EAAO,CAACpF,GAAM,CAAC0gB,EAAA,C,EALvB,C,ICLxB,WACE,aAEA3qB,QACKC,OAAO,kBAAA,EACPlK,OAAO,OAEZ,WACE,OAAO,SAAUsI,GACf,GAAIA,EACF,OAAOA,EAAKuiD,UAAY,IAAMviD,EAAKwiD,SAAW,KAAOxiD,EAAKyiD,MAAQ,G,EALpD,C,ICLtB,WACE,aAQA,SAASC,EAAYjxC,EAAiBkxC,EAAeC,EAAmB/wC,EAAStB,EAAUrR,EAAc2jD,EACpFC,EAAqBv8B,EAAYw8B,GAEpD,MAAO,CACLlzB,QA8DF,SAAoBmzB,GAElB,SAASC,EAAeD,EAAYE,GAClC,OAAOrwD,EAAE0N,KAAKyiD,EAAW5lD,SAAU,CAACzC,KAAMuoD,CAAA,CAAA,C,CAG5C,MAAO,CACLN,EAAkBK,EAAeD,EAAY,QAAA,EAAW,SAAU,SAAUnuC,GAC1E,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,UAAA,EAAa,WAAY,SAAUnuC,GAC9E,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,SAAA,EAAY,UAAW,SAAUnuC,GAE5E,MAAO,CACL4hC,YAFqBhlC,EAAgB+kC,uBAAuB,SAAA,EAAW3hC,CAAA,EAEzC4hC,YAC9BxpC,QAAS4H,EAAS5H,O,IAGtB21C,EAAkBK,EAAeD,EAAY,KAAA,EAAQ,6BAA8B,SAAUnuC,GAC3F,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,KAAA,EAAQ,2BAA4B,SAAUnuC,GACzF,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,YAAA,EAAe,cAAe,SAAUnuC,GACnF,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,KAAA,EAAQ,0BAA2B,SAAUnuC,GACxF,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,UAAA,EAAa,oBAAqB,SAAUnuC,GACvF,OAAOA,C,GAET+tC,EAAkBK,EAAeD,EAAY,UAAA,EAAa,qBAAsB,SAAUnuC,GACxF,OAAOA,C,KAjGX/M,YAoDF,SAAwBq7C,GACtB,MAAO,CACLN,EAAgBO,EAAgBC,EAAiB,aAAc,WAC3D,iBAAkB,cAAeF,CAAA,EAAgBC,CAAA,EACrDP,EAAgBO,EAAgBC,EAAiB,uBAAwB,qBACrE,2BAA4B,wBAAyBF,CAAA,EAAgBC,CAAA,E,EAxD3EE,WA0CF,SAAuBH,GACrB,MAAO,CACLN,EAAgB,eAAgBU,EAAiB,YAAa,UAAWJ,CAAA,EACrEK,CAAA,EACJX,EAAgB,eAAgBU,EAAiB,sBAAuB,oBAAqBJ,CAAA,EACzFK,CAAA,E,EA9CND,iBAAkBA,EAClBF,iBAAkBA,EAClBI,8BA6HF,SAAuCC,GACrC,IAAIC,EAAmB9wD,EAAE6wD,CAAA,EAAYnqD,IAAI,SAAUqqD,GACjD,OAAOd,EAAoBe,YAAYD,EAAW,CAAA,C,GACjDxqC,KAAK,EAAA,EACR,OAAO,SAAU0qC,GACf,OAAOhB,EAAoBiB,WAAWD,EAAe,CAAA,EAAG1qC,KAAK,EAAA,EAAMuqC,C,GAjIrEK,gBAqIF,SAAyBC,GACvB,MAAO,CACLjyB,UAAWzhB,EAAS2pC,qBAAqB+J,EAAUjyB,SAAA,EACnDE,QAAS3hB,EAAS2pC,qBAAqB+J,EAAU/xB,OAAA,C,GAvInDgyB,uBAiJF,SAAgCD,GAC9B,IAAI/gD,EAAU2O,EAAQsyC,UAAA,EAClBzC,EAAOxzC,OAAO+1C,EAAU/xB,OAAA,EAASwvB,KAAKxzC,OAAO+1C,EAAUjyB,SAAA,EAAY,MAAA,EACvE,OAAOzhB,EAAS8pC,eAAensC,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS3C,EAAM,MAAA,CAAA,C,EAnJ7E4C,8BAsJF,SAAuCR,GACrC,MAAO,YAAchB,EAAoBiB,WAAWD,EAAe,CAAA,EAAG1qC,KAAK,EAAA,C,EAtJ3EmrC,iBAyJF,SAA0Bt3C,EAASgoC,EAASuP,GAC1C,IAAIC,EAAyB5xD,EAAEiI,OAAO,GAClCjI,EAAE0G,IAAIirD,EAAmB,SAAUp0B,GACjC,MAAO,CAACx7B,MAAOw7B,EAAO/X,MAAA,CAAA,C,GAExB,CAAEzjB,MAAM,QAAA,C,EAIR8vD,EAAe7xD,EAAE+K,QAAQq3C,EAAQ0P,QAAQl9B,OAAQ,SAAUk9B,GAC7D,OAAO9xD,EAAE0G,IAAIorD,EAAQl9B,OAAQ,SAASm9B,GACnC,IAAIC,EAAmBhyD,EAAE0G,IAAI0T,EAAS,SAAUwa,GAC9C,OAAOhW,EAAgB6lC,cAAc7vB,EAAQk9B,EAAQ1N,WAAY2N,EAAarN,WAAW3iD,KAAA,C,GAGvFkwD,EAAajyD,EAAEgiC,MAAMgwB,CAAA,EACrBE,EAAclyD,EAAE0rB,KAAKsmC,CAAA,EACrBnD,EAAO7uD,EAAEmG,OAAQ+rD,EAAcD,GAAcA,EAAc,IAAK,CAAA,EAEhEE,EAAe,CAAE,CAAC/tD,MAAO2tD,EAAa3tD,MAAOrC,MAAM2xB,EAAWgB,QAAQq9B,EAAavsC,KAAA,CAAA,GAEnF++B,EAAcnC,EAAQmC,aAAe,GACrCC,EAAcpC,EAAQoC,aAAe,GACrC4N,EAA4BpyD,EAAE0G,IAAIsrD,EAAkB,SAAUjwD,GAChE,MAAQ,CAAEqC,MAAO2tD,EAAa3tD,MAC5BrC,MAAOwiD,EAAc2L,EAA2BlwD,EAAEmG,MAAMpE,EAAO,CAAA,CAAA,EAAMyiD,CAAA,C,GAErE6N,EAAgB,CAAE,CAACjuD,MAAO2tD,EAAa3tD,MAAOrC,MAAOmuD,EAA2BrB,CAAA,EAAQ,GAAA,GAE5F,OAAO7uD,EAAEiI,OAAOkqD,EAAcC,EAA2BC,CAAA,C,KAK9D,OAAOryD,EAAE4xD,CAAA,EACJU,IAAItyD,EAAEuyD,MAAMV,CAAA,CAAA,EACZnrD,IAAI,SAAU3E,GACb,OAAO/B,EAAE20B,QAAQ5yB,CAAA,C,GAElBA,MAAA,C,EA/LLnC,QAYF,SAAiBsiD,EAAa2O,EAAY2B,EAAiBC,GACzD,IAAIC,EAAgB,CAClBxQ,YAAaA,EACbyQ,OAAQ,CACNF,cAAeA,EACf5B,WAAYA,EACZ2B,gBAAiBA,EACjBI,eAAgB,WACd,OAAOv3C,OAAOvb,KAAKiC,KAAA,EAAOuZ,OAAO,QAAA,C,IAKvC,OAAO,SAAU8mC,EAASzgB,GACxB,OAAO3hC,EAAEC,OAAOyyD,EAAe,CAC7BtQ,QAASA,EACTmC,YAAanC,EAAQmC,YACrBsO,eAzBoBlxB,EAyBYA,IAxBbA,EAAa76B,QAChC9G,EAAE2hC,EAAa76B,MAAA,EACVjC,OAAO,CAACiuD,QAAS,CAAA,CAAA,CAAA,EACjBpsD,IAAI,MAAA,EACJ3E,MAAA,C,KARTgxD,iBAiMF,SAA0B/1B,EAASg2B,EAAQrB,GACzC,OAAO3xD,EAAE0G,IAAIs2B,EAAS,SAAUO,GAC9B,OAAOy1B,EAAOz1B,CAAA,EAAQ/vB,KAAK,SAAUtL,GAC/B+wD,EAAmBjzD,EAAEkC,CAAA,EACpBwE,IAAI,SAAUwsD,EAAWxtC,GACxB,IAAIssC,EAAmBhyD,EAAEu9B,EAAO6kB,QAAQ0P,QAAQl9B,MAAA,EAC3C7pB,QAAQ,SAAUooD,GACjB,OAAOnzD,EAAEmzD,EAAcv+B,MAAA,EAClBluB,IAAI,SAAUqrD,GACb,MAAO,CACLrN,WAAYqN,EAAarN,WAAW3iD,MACpCA,MAAO6c,EAAgB6lC,cAAcyO,EAAU94C,QAAS+4C,EAAc/O,WAClE2N,EAAarN,WAAW3iD,KAAA,EAC5BqC,MAAO2tD,EAAa3tD,MACpBmgD,YAAahnB,EAAO6kB,QAAQmC,aAAe,GAC3CC,YAAajnB,EAAO6kB,QAAQoC,aAAe,E,IAG9CziD,MAAA,C,GAENA,MAAA,EAEL,MAAO,CACLqxD,YAAazB,EAAkBjsC,GAAOF,MAAA,EACtCwsC,iBAAkBA,C,IAGrBjwD,MAAA,EAmBL,MAAO,CACL8sD,KAlBS,CACTuE,YAAa71B,EAAO61B,YACpBpB,iBAAkBhyD,EAAEizD,CAAA,EACfvsD,IAAI,kBAAA,EACJ6rD,MAAA,EACA7rD,IAAI,SAAUsrD,GACb,IAAIC,EAAajyD,EAAEgiC,MAAMgwB,CAAA,EACrBE,EAAclyD,EAAE0rB,KAAKsmC,CAAA,EACrBqB,EAAYrzD,EAAEmG,OAAQ+rD,EAAYnwD,MAAQkwD,EAAWlwD,OAASkwD,EAAWlwD,MAAS,IAAK,CAAA,EAC3F,MAAO,CACL2iD,WAAYuN,EAAWvN,WACvB3iD,MAAO/B,EAAE4kC,SAASyuB,CAAA,EAAaA,EAAY,K,IAG9CtxD,MAAA,C,EAKLkxD,iBAAkBA,C,QArJ1B,SAASvC,EAAiB4C,EAAeC,EAAajD,GACpD,MAAO,CACLnxB,UAAWzhB,EAAS8pC,eAAen7C,EAAainD,IAAkBhD,EAAcnxB,SAAA,EAChFE,QAAS3hB,EAAS8pC,eAAen7C,EAAaknD,IAAgBjD,EAAcjxB,OAAA,C,EAIhF,SAASmxB,EAAiBgD,EAAgBC,EAAcC,EAAoBC,EAAiBrD,GAC3F,MAAO,CACLl7C,WAAY/I,EAAamnD,IAAmBlD,EAAcl7C,WAC1DX,SAAUpI,EAAaonD,IAAiBnD,EAAc77C,SACtDm/C,eAAgBvnD,EAAaqnD,IAAuBpD,EAAcsD,eAClEp1C,YAAaxe,EAAEmoC,YAAY97B,EAAasnD,EAAA,EAAoBtnD,EAAamS,YACrEnS,EAAasnD,E,EAIrB,SAASpD,IACP,IAAI1oB,EAAO/nC,KACX,OAAOE,EAAE,CAAC,aAAc,WAAY,iBAAA,EAC/B0G,IAAI,SAASwO,GACRnT,EAAQ8lC,EAAK9lC,MAAMmT,GACvB,MAAiB,4BAAVnT,EAAsC,cAAgBA,C,GAE9DwkB,KAAK,GAAA,C,CAmBZ,SAASoqC,IACP,OAAO3wD,EAAE0G,IAAI5G,KAAKiC,MAAO,SAAUA,GACjC,OAAO2b,EAASm2C,cAAc9xD,CAAA,C,GAC7BwkB,KAAK,KAAA,C,0LA/JZzX,QACKC,OAAO,8BAAA,EACP6R,QAAQ,cAAeivC,CAAA,EACvBjvC,QAAQ,oBA0Qb,WAWE,OATA,SAASmvC,EAAkB3N,EAASgR,EAAaU,GAC/C,GAAI,EAAEh0D,gBAAgBiwD,GACpB,OAAO,IAAIA,EAAkB3N,EAASgR,EAAaU,CAAA,EAErDh0D,KAAKsiD,QAAUA,EACftiD,KAAKszD,YAAcA,EACnBtzD,KAAKg0D,cAAgBA,C,EAlRS,EAC7BlzC,QAAQ,kBAwRb,WAWE,OATA,SAASovC,EAAgBloD,EAAM/F,EAAOyjB,GACpC,GAAI,EAAE1lB,gBAAgBkwD,GACpB,OAAO,IAAIA,EAAgBloD,EAAM/F,EAAOyjB,CAAA,EAE1C1lB,KAAKgI,KAAOA,EACZhI,KAAKiC,MAAQA,EACbjC,KAAK0lB,MAAQA,C,EAhSe,C,ICPlC,WACE,aAMA,SAASuuC,EAAkBC,EAAYC,EAASC,EAAOC,EAAeC,EAAqBC,EAC/D9S,EAAsB3iC,GAqHhD,MAAO,CACL2d,WApHe,SAAUrV,GACzB,OAAO+sC,EAAQ,aAAc/sC,EACzBgtC,EAAM,aAAc,OAAQ,UAAW,CAAA,EACnC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,KAAA,CAAA,EAC7CoyD,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,KAAA,CAAA,EACnDoyD,EAAcK,SAAS,CAAE9P,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAG1D,CAAE6c,EAAgBulC,eAAe,aAAc,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EACpEF,EAAoBG,MAAM,CAAA,CAAA,EAAQH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GACnE51C,EAAgB0lC,eAAe,cAAc,KAAM,GAAA,C,GA2GvDxK,OAvGW,SAAS5yB,GACpB,OAAO+sC,EAAQ,SAAU/sC,EACrBgtC,EAAM,SAAU,OAAQ,SAAU,CAAA,EAC9B,CAACC,EAAcG,GAAG,CAAC5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC3EP,EAAcI,MAAM,CAAC7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAClFP,EAAcQ,iBAAiB,EAAA,E,EAErC,CAAC/1C,EAAgBulC,eAAe,wBAAyB,CAACiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,EAChH31C,EAAgBulC,eAAe,iBAAkB,CAACiQ,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GACzF/1C,EAAgB0lC,eAAe,QAAA,C,GA+FnCsQ,SA3Fa,SAAS1tC,GACtB,OAAO+sC,EAAQ,WAAY/sC,EACvBgtC,EAAM,WAAY,OAAQ,SAAU,CAAA,EAChC,CAACC,EAAcG,GAAG,CAAC5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACzDN,EAAcI,MAAM,CAAC7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAChEN,EAAcQ,iBAAiB,EAAA,E,EAErC,CAAC/1C,EAAgBulC,eAAe,wBAAyB,CAACiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,EAChH31C,EAAgBulC,eAAe,iBAAkB,CAACiQ,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GACzF/1C,EAAgB0lC,eAAe,UAAA,C,GAmFnC7nB,QA/EY,SAAUvV,GACtB,OAAO+sC,EAAQ,UAAW/sC,EACtBgtC,EAAM,UAAW,OAAQ,SAAU,CAAA,EAC/B,CAAEC,EAAcG,GAAG,SAASxvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWC,GAAGvyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EACzGP,EAAcI,MAAM,SAASzvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWE,MAAMxyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EAC/GP,EAAcQ,iBAAiB,SAAS7vB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAW5qC,IAAI1nB,OAAS/B,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,E,EAGlH,CAAE91C,EAAgBulC,eAAe,eAC7B,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAOH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GAE1G/1C,EAAgB0lC,eAAe,UAAW,GAAA,C,GAqE9CuQ,IAjEQ,SAAU3tC,GAClB,OAAO+sC,EAAQ,MAAO/sC,EAClBgtC,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcQ,iBAAiB,CAAEjQ,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAGlE,CAAE6c,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAC1GH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GACvC/1C,EAAgB0lC,eAAe,eAAA,C,GAwDnCwQ,IApDQ,SAAU5tC,GAClB,OAAO+sC,EAAQ,MAAO/sC,EAClBgtC,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcQ,iBAAiB,CAAEjQ,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAGlE,CAAE6c,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAC1GH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GACvC/1C,EAAgB0lC,eAAe,aAAA,C,GA2CnCyQ,IAvCQ,SAAU7tC,GAClB,OAAO+sC,EAAQ,MAAO/sC,EAClBgtC,EAAM,MAAO,OAAQ,QAAS,CAAA,EAC1B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,KAAA,CAAA,EAC7CoyD,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,KAAA,CAAA,EACnDoyD,EAAcK,SAAS,CAAE9P,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAG1D,CAAE6c,EAAgBulC,eAAe,UAAW,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACrGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAC/B51C,EAAgB0lC,eAAe,mBAAA,C,GA8BnC0Q,SA1Ba,SAAU9tC,GACvB,OAAO+sC,EAAQ,WAAY/sC,EACvBgtC,EAAM,WAAY,OAAQ,UAAW,CAAA,EAAO,CAAEC,EAAcG,GAAA,EAAA,EAC5D,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,GAAU,CAAA,CAAA,GACjF11C,EAAgB0lC,eAAe,mBAAoB,KAAM,GAAA,C,GAuB7D2Q,SAnBa,SAAU/tC,GACvB,OAAO+sC,EAAQ,WAAY/sC,EACvBgtC,EAAM,WAAY,OAAQ,SAAU,CAAA,EAChC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWa,WAAWnzD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAAA,EACzE,CAAE71C,EAAgBulC,eAAe,qBAAsB,CAAEiQ,EAAoBE,GAAG,CAAA,EAAOD,EAAWa,UAAA,GAC9F,CAAA,CAAA,GACJt2C,EAAgB0lC,eAAe,aAAA,C,2IAtHvCx1C,QACKC,OAAO,8BAAA,EACP6R,QAAQ,oBAAqBmzC,CAAA,C,ICLpC,WACE,aAMA,SAASoB,EAAwB51C,EAAcP,EAAStB,EAAUgW,GAEhE,MAAO,CACL0hC,eAOF,SAAwBhE,GAElBvC,EAAOwG,EAAYjE,CAAA,EAEvB,OAAGvC,GAAQ,GACFtvC,EAAarE,MAET,IAAR2zC,GAAcA,EAAO,IACftvC,EAAapE,OACJ,KAAR0zC,EACDtvC,EAAanE,QADf,KAAA,C,EAfTk6C,SAAUA,EACVC,gBA0HF,SAAyBrzD,EAAMggD,EAAauQ,EAAeG,GACzD,IAAI4C,EAAY/C,EAAgBvwD,EAAOlC,EAAEijD,KAAK/gD,EAAM,CAAA,EACpD,OAAOlC,EAAE0G,IAAI8uD,EAAW,SAAU1yD,EAAO4iB,GACvC,IAlBwCxjB,EACtC4/C,EAiBE2T,EAAgB,CAClB7rB,OAAQ,CACN8rB,UAAW9C,EACX+C,SAAU,O,EAEZC,QAAS,CAAA,EACTt/B,WAAYt2B,EAAEmrB,KAAKroB,CAAA,EAAOg/C,MAC1B+T,eAzByB3T,EAyBYA,EAzBChgD,EAyBYszD,EAxBlD1T,EAAQ9hD,EAAEmrB,KAAKnrB,EAAEmrB,KAAKjpB,CAAA,CAAA,EAAO4/C,MAC7BgU,EAASR,EAASpT,EAAaljC,EAAQsyC,UAAA,EAAYF,SAAA,EAEnDjyB,EAAY9jB,OAAOrb,EAAEgiC,MAAM8f,CAAA,CAAA,EAC3BziB,EAAUhkB,OAAOrb,EAAE0rB,KAAKo2B,CAAA,CAAA,EAAQ3E,IAAI,EAAG,MAAA,EAEvC4Y,EAAsB/1D,EAAE0G,IAAIovD,EAAOlvB,MAAMzH,EAAWE,EAASy2B,EAAOjvB,cAAgB,CAAA,EACpFnpB,EAAS2pC,oBAAA,EAENrnD,EAAE0G,IAAIqvD,EAAqB,SAAUC,GAC1C,OAAOh2D,EAAE8lB,QAAQg8B,EAAOkU,CAAA,C,IAetBC,UAAW,CAAEC,OAAQ,CAAA,EACrBjzB,OAAQ,EACRkzB,UAAW,EACXC,kBAAmB,I,EASrB,OANW,EAAR1wC,GACD1lB,EAAEC,OAAOw1D,EAAc,CACrBjJ,UAAW,Y,GAIRiJ,C,IAhJTY,gBAsKF,SAAyBC,EAAWrxB,EAAesxB,EAAWr0D,GAE5D,MAAO,CACLyN,MAAO,CACL3H,KAAM0rB,EAAWgB,QAAQ6hC,CAAA,C,EAE3B7uD,IAAK,EACL8uD,WAAY,EACZ5sB,OAAQ,CACN8rB,UAAWe,C,EAEbC,eAAgB,CAAA,C,GAhLlBC,cA4FF,SAAuBzU,GACrB,OAAO,SAASn+C,GACd,OAAOm+C,GACL,KAAK3iC,EAAapE,OAChB,MAAO,WAAauC,EAAS8pC,eAAezjD,CAAA,EAC9C,KAAKwb,EAAanE,QAChB,OAAOsC,EAASk5C,UAAU7yD,CAAA,EAC5B,QACE,OAAO2Z,EAASm5C,4BAA4B9yD,CAAA,C,KAlFpD,SAASuxD,EAASpT,EAAakP,GAEzBvC,EAAOwG,EAAYjE,CAAA,EAEvB,OAAGvC,GAAQ,GACN3M,IAAgB3iC,EAAarE,MACvB47C,EAAA,EAEJ5U,IAAgB3iC,EAAapE,OACvB47C,EAAA,EACC7U,IAAgB3iC,EAAanE,QAC9B47C,EAAA,EADF,KAAA,EAKE,IAARnI,GAAcA,GAAQ,GACpB3M,IAAgB3iC,EAAarE,MACvB47C,EAAc,CAAA,EAElB5U,IAAgB3iC,EAAapE,OACvB47C,EAAA,EACC7U,IAAgB3iC,EAAanE,QAC9B47C,EAAA,EADF,KAAA,EAKE,IAARnI,GAAcA,GAAQ,IACpB3M,IAAgB3iC,EAAanE,QACvB27C,EAEAC,GAFA,EAKE,IAARnI,GAAcA,EAAO,IACnB3M,IAAgB3iC,EAAapE,OACvB47C,EAAa,CAAA,EAEbC,EAAA,EAGE,KAARnI,EACE3M,IAAgB3iC,EAAapE,OACvB67C,EAAcC,EAAcpI,CAAA,CAAA,EAE5BkI,EAAmC,EAAtBE,EAAcpI,CAAA,CAAQ,EAJ9C,KAAA,C,CAcV,SAASoI,EAAcpI,GACtB,OAAO5oD,KAAKE,MAAO0oD,EAAA,GAAW,C,CAG/B,SAASiI,EAAcjwB,GACrB,MAAO,CAACD,MAAOnnC,GAAGuE,KAAKkzD,KAAMrwB,aAAcA,GAAgB,CAAA,C,CAG7D,SAASkwB,EAAalwB,GACpB,MAAO,CAACD,MAAOnnC,GAAGuE,KAAKmzD,MAAOtwB,aAAcA,GAAgB,CAAA,C,CAG9D,SAASmwB,EAAcnwB,GACrB,MAAO,CAACD,MAAOnnC,GAAGuE,KAAKozD,OAAQvwB,aAAcA,GAAgB,CAAA,C,CAG/D,SAASwuB,EAAYjE,GACnB,OAAO/1C,OAAO+1C,EAAU/xB,OAAA,EAASwvB,KAAKxzC,OAAO+1C,EAAUjyB,SAAA,EAAY,MAAA,C,CA0DrE,SAASs3B,IACP,IAAIY,EAAiBv3D,KAAKJ,MAAME,QAAQ03D,KAAKD,eACzChxD,EAAIgxD,GAAkBA,EAAe71D,OACrCO,EAAQjC,KAAKiC,MAEjB,GAAa,KAATA,EACF,KAAOsE,CAAA,IAAK,CACV,IAAIk7B,EAAQt7B,KAAKsxD,IAAI,IAAMlxD,EAAI,CAAA,EAE/B,GAAGtE,EAAQw/B,IAAUx/B,EAAO,CAC1BA,EAAQy1D,WAAWC,aAAa11D,EAAQw/B,EAAO,CAAC,CAAA,EAAK81B,EAAehxD,GACpE,K,EAIN,OAAOtE,C,+DA7KX+M,QACKC,OAAO,8BAAA,EACP6R,QAAQ,0BAA2Bu0C,CAAA,C,ICL1C,WACE,aAUA,SAASlF,EAAoBv8B,EAAY2N,EAAcq2B,EAAiBC,EAAmBxC,GAEzF,IAAIyC,EAAuB,CACzBC,YAAa,CACX/wD,OAAQ,CACNgxD,eAAgB,KAChBtyC,MAAO,CACLuyC,iBAAkB,CAAA,C,EAEpBC,OAAQ,CACNC,MAAO,CACLrC,QAAS,CAAA,C,GAGbsC,OAAQ,CACN1nB,OAAQ,EACRwnB,OAAQ,CACNC,MAAO,CACLrC,QAAS,CAAA,EACTuC,cAAe,EACfC,WAAY,C,KAKpBC,WAAY,CACVC,SAAU,Q,GAGdjtB,QAAS,CACPktB,OAAQ,CAAA,EACRC,QAAS,CAAA,EACTl4D,QAAS,EACTm4D,UAAW,EACX7C,QAAS,CAAA,EACT8C,MAAO,M,EAETh5D,MAAO,CACLiC,OAAQ,IACRmoC,QAAS,CAAC,GAAI,GAAI,EAAG,E,EAEvB6uB,gBAAiB,CAAA,C,EAGnB,MAAO,CACLl5B,gBAMF,SAAyB7/B,GACvB,IAAIg5D,EAAcjB,EAAkBkB,eAAA,EACpC,OAAO74D,EAAEiF,MAAM,GAAI2zD,EAAahB,EAGlC,SAAoBh4D,GAClB,IAKI4kD,EALAtC,EAActiD,EAAQsiD,YACtBjd,EAAoD,SAApCrlC,EAAQwiD,QAAQ1iD,MAAMsiD,UACtCsU,EAAY12D,EAAQwiD,QAAQ1iD,MAAM42D,UAClCzF,EAAajxD,EAAQ+yD,OAAO9B,YAAc,CAAC,QAC3C2B,EAAkB5yD,EAAQ+yD,OAAOH,iBAAmBsG,EAGvC,YAAdxC,IACD9R,EAAc,KAGhB,MAAO,CACLqT,YAAa,CACX/wD,OAAQ,CACN6rD,OAAQ,CACN9tB,kBAAmBswB,EAAwBwB,cAAczU,CAAA,C,IAI/D7W,QAAS,CACPkZ,YAAa3kD,EAAQ2kD,aAAe,GACpCC,YAAaA,GAAe,GAC5BkR,UAAW,WACT,OAoFeqD,EApFMj5D,KAAKi5D,OAoFHlI,EApFWA,EAoFC2B,EApFWA,EAoFMnxB,EApFWA,EAqFjE23B,EAAah5D,EAAEmrB,KAAK4tC,CAAA,EAEpBl8C,EAAS,OAAS21C,EAAgBwG,CAAA,EAAc,QAGhDC,EAAOj5D,EAAE+4D,CAAA,EAAQzyB,QAAA,EAAUjS,QAAS,SAAU6kC,GAChD,OAAOA,EAAMpyD,OAAOgB,I,GACnBpB,IAAK,SAAUyyD,EAAarxD,GAC7B,IAAIkuC,EAAah2C,EAAEmrB,KAAKguC,CAAA,EAAaryD,OAAOsyD,YAAY5M,UACpD6M,EAAUr5D,EAAE6wD,CAAA,EACXnqD,IAAK,SAAUqqD,GACd,IAMMuI,EANFC,EAAY,MACZC,EAAax5D,EAAE0N,KAAKyrD,EAAa,SAAUp3D,GAC7C,OAAO/B,EAAEiK,GAAGlI,EAAM+E,OAAOlH,QAAQ+yD,OAAO5B,UAAWA,CAAA,GAAc/wD,EAAEiK,GAAGlI,EAAM+E,OAAOgB,KAAMA,CAAA,C,GAQ3F,OALG0xD,IACGF,EAAiBE,EAAW1yD,OAAOwyD,eACnCv3D,EAAQy3D,EAAW1yD,OAAOsyD,YAAYzG,OAAOztB,aAAes0B,EAAWrW,MAAQqW,EAAWv2D,EAC9Fs2D,EAAYD,EAAe/U,YAAcljB,EAAat/B,CAAA,EAASu3D,EAAe9U,aAEzE,gCAAmC+U,EAAY,O,GAEvDhzC,KAAK,EAAA,EACV,MAAO,cAAgByvB,EAAY,SAAWluC,EAAO,QAAUuxD,EAAU,O,GACxE9yC,KAAK,EAAA,EAED,UAAY1J,EAASo8C,EAAO,WA5BrC,IAAuBF,EAAQlI,EAAY2B,EAAiBnxB,EACtD23B,C,GAlFFt5D,MAAO,CACLse,KAAMinB,EAAgB,aAAe,Q,EAEvCw0B,WAAY/lC,EAAWgB,QAAQ90B,EAAQwiD,QAAQ1iD,MAAM8lB,KAAA,EACrD88B,aAAc5uB,EAAWgB,QAAQ90B,EAAQwiD,QAAQ1iD,MAAM2rC,OAAA,C,GAlCQzrC,CAAA,EAAUA,EAAQ+yD,MAAA,C,EAPnF+G,eA6CF,SAAwBx3D,EAAMtC,GAC5B,IAAIsiD,EAActiD,EAAQsiD,YACtBjd,EAAoD,SAApCrlC,EAAQwiD,QAAQ1iD,MAAMsiD,UACtCsU,EAAY12D,EAAQwiD,QAAQ1iD,MAAM42D,UAClC5vB,EAAa9mC,EAAQwiD,QAAQ1iD,MAAMgnC,WACnCmqB,EAAajxD,EAAQ+yD,OAAO9B,YAAc,CAAC,QAC3CgC,EAAgBjzD,EAAQizD,cACxBD,EAAiBhzD,EAAQ+yD,OAAOC,eAEpC,MAAO,CACLpvD,MAAO2xD,EAAwBI,gBAAgBrzD,EAAMggD,EAAatiD,EAAQ+yD,OAAOF,cAAeG,CAAA,EAChGnvD,MAAO0xD,EAAwBkB,gBAAgBC,EAAWrxB,EAAeyB,EAAYxkC,CAAA,EACrF4E,OAmBJ,SAA0B5E,EAAMuwD,EAAe5B,EAAYgC,GACzD,OAAO7yD,EAAE+K,QAAQ7I,EAAM,SAAUY,EAAO4iB,GACtC,OAAO1lB,EAAE0G,IAAI5D,EAAO,SAAUgE,EAAQ6yD,GACpC,MAAO,CACL7xD,KAAMhB,EAAO0e,MACbgnC,UAAW1lD,EAAO1C,MAAMwX,MACxBpY,MAAOivD,EAAgB/sC,EAAQ,EAC/BotC,QAAS,CAACD,GAAiB7yD,EAAE+M,SAAS8lD,EAAe/rD,EAAO0e,KAAA,EAC5DE,MAAO5iB,EAAMtB,OAASm4D,EACtBhH,OAAQ,CACNztB,aAAcp+B,EAAOo+B,aACrB00B,WAAYl0C,EACZqrC,UAAWF,EAAWnrC,E,EAExBxjB,KAAMlC,EAAE0G,IAAII,EAAO8tB,OAAQ,SAAUkQ,EAAGz+B,GACtC,MAAO,CACLpD,EAAG6hC,EACHozB,OAAQ,CAACtC,QAhCrB,SAA2B7zD,EAAO2jB,EAAOm0C,EAAY/yD,GAG/C8uD,EAAoB,OAAV7zD,IACN2jB,EAAQ,EAAI,GAA2B,OAAtB5e,EAAO4e,EAAQ,MAChCA,EAAQ,GAAK5e,EAAOtF,QAAgC,OAAtBsF,EAAO4e,EAAQ,IAErD,GAAgB,EAAbm0C,EAED,OADIC,EAAiB7zD,KAAKE,MAAMW,EAAOtF,OAASk2D,CAAA,EACzC9B,GAA8B,IAAnBkE,GAA0Bp0C,EAAQo0C,GAAoB,EAG1E,OAAOlE,C,EAoBuC9wB,EAAGz+B,EAAGqf,EAAO5e,EAAO8tB,MAAA,EACtDmlC,OAAgB,EAARr0C,EAAY,SAAW,SAAU8qB,OAAQ,CAAA,C,UArClCtuC,EAAMtC,EAAQ+yD,OAAOF,cAAe5B,EAAYgC,CAAA,C,GAxD3E7B,YAAaA,EACbE,WAAYA,C,EAoGd,SAASF,EAAYhpD,EAAMgyD,GACzB,MAAO,yCAA2CA,GAAW,GAAK,KAAOhyD,EAAO,O,CAGlF,SAASkpD,EAAWD,EAAe+I,GACjC,OAAOh6D,EAAE0G,IAAIuqD,EAAcnqD,OAAOpH,MAAME,QAAQ4D,MAAO,SAAU0B,GAC3D8wB,EAAO9wB,EAAKoxB,WAAW26B,EAAciI,MAAMxzC,OAE/C,OAAOsrC,EADch7B,GAAQi7B,EAAcnqD,OAAOlH,QAAQ+yD,OAAO9tB,kBAAkB7O,CAAA,GAAU,MAC3DgkC,CAAA,C,GAItC,SAASlB,EAAqB7H,GAC5B,OAAOC,EAAWD,EAAe,CAAA,EAAG1qC,KAAK,EAAA,C,0GAzK7CzX,QACKC,OAAO,8BAAA,EACPC,SAAS,iBAAkB,CAAA,EAC3BA,SAAS,cAAe,CAAC,EAAE,EAAE,EAAE,EAAA,EAC/BA,SAAS,kBAAmB,EAAA,EAC5B4R,QAAQ,sBAAuBqvC,CAAA,C,ICRtC,WACE,aAqBA,SAASgK,EAAyB5Y,EAAeC,EAAW1iC,EAAiBqxC,GAC3E,IAAI7sC,EAAKtjB,KAILo6D,GAHJ92C,EAAGg/B,QAAUh/B,EAAG+2C,cAAc/X,QAC9Bh/B,EAAGg3C,SAAWh3C,EAAGg/B,QAAQ0P,QAAQl9B,OAEb,CAClBwtB,QAASh/B,EAAGg/B,QACZmC,YAAanhC,EAAGg/B,QAAQmC,YACxBrC,YAAa9+B,EAAGi3C,UAAUnY,YAC1ByQ,OAAQ,CACNC,eAAgB,WACd,IAAI0H,EAAgBj/C,OAAOvb,KAAKiC,KAAA,EAAOuZ,OAAO,QAAA,EAC9C,OAAOtb,EAAEs6D,CAAA,EAAeC,MAAA,EAAQh0C,KAAK,OAAA,C,KAK3CnD,EAAGue,aAAesuB,EAAoBxwB,gBAAgBy6B,CAAA,EAEtD92C,EAAGo3C,QAAU,WACX,OAAO57C,EAAgBc,gBAAgB0D,EAAGg/B,QAAQphC,IAAKoC,EAAGi3C,UAAUnY,YAAa9+B,EAAGi3C,UAAU56C,WAAA,EACzFjS,KAAK,SAASo9C,GACb,OAAOxnC,EAAGq3C,cAAc,CAACntC,QAASs9B,CAAA,CAAA,C,IAI1CxnC,EAAGs3C,YAAc,SAASptC,GACpBqtC,EAAgBtZ,EAAcO,iBAAiBx+B,EAAGg/B,QAAQ1iD,MAAO4tB,EAAQs2B,WAAA,EAE7E,OAAOqM,EAAoByJ,eAAe,CAACiB,GAAgB36D,EAAEiF,MAAM,GAAIi1D,EAAe92C,EAAGue,YAAA,CAAA,C,EAG3Fve,EAAGw3C,gBAAkB,SAASD,GAC5Bv3C,EAAGy3C,YAAcF,EAAcvgD,O,EAGjCgJ,EAAGoN,SAAW,SAAUsqC,GACtB,OAAO96D,EAAEwwB,SAASsqC,CAAA,C,EAGpB13C,EAAG2uC,aAAe,SAASrN,EAAYN,GACrC,IAAIhqC,EAAUpa,EAAE0N,KAAK0V,EAAGy3C,YAAa,CAACt9B,OAAQ6mB,CAAA,CAAA,EAC9C,GAAGhqC,EAED,OADIwqC,EAAkB5kD,EAAE0N,KAAK0M,EAAQ0pC,YAAa,CAACY,WAAYA,EAAW3iD,KAAA,CAAA,IAChD/B,EAAEmG,MAAMy+C,EAAgB7iD,MAAM,CAAA,C,EAI5DqhB,EAAG23C,oBAAsB,SAASrW,EAAYN,GAC5C,IAAIhqC,EAAUpa,EAAE0N,KAAK0V,EAAGy3C,YAAa,CAACt9B,OAAQ6mB,CAAA,CAAA,EAC9C,GAAGhqC,EAED,OADIwqC,EAAkB5kD,EAAE0N,KAAK0M,EAAQ0pC,YAAa,CAACY,WAAYA,EAAW3iD,KAAA,CAAA,IAChD/B,EAAEmG,MAAMy+C,EAAgBoW,aAAa,CAAA,C,EAInE53C,EAAG63C,YAAc,SAASvW,EAAYN,GAChCX,EAAMrgC,EAAG2uC,aAAarN,EAAYN,CAAA,EAClCV,EAAMtgC,EAAG2uC,aAAarN,EAAY,uBAAA,EAEtC,OAAO9lC,EAAgBskC,gBAAgBO,EAAKC,CAAA,C,kFA/EhD50C,QAAQC,OAAO,8BAAA,EACVqN,UAAU,0BAIf,WACE,MAAO,CACLkD,MAAQ,CACN66C,cAAe,IACfM,cAAe,IACfJ,UAAW,G,EAEbvqD,WAAa,oCACbsgB,iBAAmB,CAAA,EACnBvgB,YAAc,qE,EAbwB,EACrCC,WAAW,8BAA+BmqD,CAAA,C,ICLjD,WACE,aAEAnrD,QACKC,OAAO,8BAAA,EACPe,WAAW,iBAGhB,WACE,IAEIpQ,EAAOg7D,EAAaQ,EAFpB93C,EAAKtjB,KAqBT,SAASq7D,EAAUv7D,EAAS2/B,EAAS67B,GACnC17D,GAASA,EAAM0qD,QAAA,EACf1qD,EAAQ83D,WAAW93D,MAAMw7D,EAAWt7D,CAAA,EAEjC2/B,EACD7/B,EAAM27D,YAAY,2HACd,EAEDD,EACD17D,EAAM27D,YAAY,uBAA0BD,EAAW,QAAA,EAGpD17D,EAAMoH,QAAU9G,EAAEsV,KAAK5V,EAAMoH,OAAQ,SAAUw0D,GAChD,OAAOA,EAAYC,QAAA,C,GAEnB77D,EAAM87D,YAAA,EAEN97D,EAAM27D,YAAY,mCAAA,C,CAlC1Bj4C,EAAGq4C,OAAS,SAAUC,GACpBR,EAAYQ,EACZP,EAAU/3C,EAAGxjB,QAAS,CAAA,CAAA,EAEtBwjB,EAAGo3C,QAAA,EACEhtD,KAAK,SAAUtL,GACdw4D,EAAct3C,EAAGu4C,iBAAiB,CAAEruC,QAASprB,CAAA,CAAA,EAC7C,IAAIy/B,EAAe3hC,EAAEiF,MAAM,GAAIme,EAAGxjB,QAAS86D,CAAA,EAC3Ct3C,EAAGxjB,QAAU+hC,EACbve,EAAGw3C,iBAAmBx3C,EAAGw3C,gBAAgB,CAAED,cAAez4D,CAAA,CAAA,EAC1Di5D,EAAUx5B,EAAc,CAAA,CAAA,C,GAEzB9f,MAAM,WACLs5C,EAAU/3C,EAAGxjB,QAAS,CAAA,EAAO,2BAAA,C,IArBL,C,ICLpC,WACE,aAEAkP,QACKC,OAAO,8BAAA,EACPqN,UAAU,UAAW,WACpB,MAAO,CACLiD,SAAU,IACVvP,WAAa,uBACb8rD,WAAY,CAAA,EACZxrC,iBAAkB,CAAA,EAClBvgB,YAAc,kDACdyP,MAAO,CACLk7C,QAAS,IACT56D,QAAS,IACT+7D,iBAAkB,IAClBf,gBAAiB,I,EAEnB55B,KAAM,SAAU1hB,EAAOytB,GACrB,IAAImuB,EAAYnuB,EAAQ,GAAG+P,cAAc,sBAAA,EAEzCx9B,EAAM8D,GAAGq4C,OAAOP,CAAA,EAEhB57C,EAAM9Q,OAAO,aAAc,SAASqtD,EAAQC,GACtCD,GAAU,CAAC77D,EAAEkiC,QAAQ25B,EAAQC,CAAA,GAC/Bx8C,EAAM8D,GAAGq4C,OAAOP,CAAA,C,EAEjB,CAAA,CAAA,C,QC3Bf,WACE,aAEApsD,QACKC,OAAO,8BAAA,EACP6R,QAAQ,oBAEb,WAEE,IAAIg4C,EAAc,CAChBjpD,MAAO,CAAA,EACPosD,QAAS,CACPnG,QAAS,CAAA,C,EAEXiC,YAAa,CACX/wD,OAAQ,CACNk1D,UAAW,CAAA,EACXhE,OAAQ,CACNC,MAAO,CACLrC,QAAS,CAAA,C,GAGbsC,OAAQ,CACNtC,QAAS,CAAA,EACToC,OAAQ,CACNC,MAAO,CACLrC,QAAS,CAAA,C,MAMnB7nB,OAAQ,CACN6nB,QAAS,CAAA,C,EAEXvqB,QAAS,CACPuqB,QAAS,CAAA,C,EAEXl2D,MAAO,CACLu8D,WAAY,CAAA,EACZD,UAAW,CAAA,C,GAIf,MAAO,CACLnD,eAGF,WACE,OAAOD,C,GA5CuB,C,ICLpC,WACE,aAOA,SAASsD,EAAc3yD,EAAWO,EAAQoC,EAAMyS,EAAY5U,EAAaiC,EAAKW,EAAiBzD,GAC7F,IAAIka,EAAKtjB,KAULq8D,GARJ/4C,EAAGg5C,iBAAmB,WACpBzvD,EAAgBioC,oBAAoB1rC,EAAgByB,YAAA,EACpDb,EAAOL,GAAG2Z,EAAGi5C,iBAAA,C,EAKftyD,EAAYiN,kBAAA,EACoBhX,EAAE0N,KAAK1B,EAAI2B,SAAA,EAAY,SAAU3C,GAC/D,OAAOzB,EAAUqE,OAAO5C,EAAStB,SAAA,GAAcsB,EAASX,a,IAE1D+Y,EAAGi5C,kBAAoBF,GAA6BA,EAA0BhyD,MAAMrC,KAAA,EAGpFiC,EAAY2U,eAAA,EACZ0E,EAAGjW,KAAOjB,EAAKkB,QAAA,EACfgW,EAAGzE,WAAaA,C,8GAxBlB7P,QACKC,OAAO,8BAAA,EACPe,WAAW,gBAAiBosD,CAAA,C,ICLnC,WACE,aAOA,SAASI,EAAqBx9C,EAAWzO,EAASuO,EAAiBlB,EAAUoyC,EAAeyM,EAC9DC,EAAmBpI,EAAqBqI,EAAwBpI,GAC5F,IAAIjxC,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YACjC1iC,EAAexf,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,EAE3DsE,EAAGvW,UAAY,CAAA,EAEfuW,EAAGu5C,uBAAyBJ,EAAiBK,cAAA,EAE7Cx5C,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGy5C,MAAQN,EAAiBM,MAE5Bz5C,EAAG05C,kBAAoB,SAAUC,EAAMv3C,GACjCtjB,EAAMlC,EAAE0N,KAAKqvD,EAAKlZ,aAAc,CAAEr+B,MAAOA,CAAA,CAAA,EAC7C,OAAOu3C,EAAKn9D,QAAQ4sC,mBAAmBtqC,GAAQA,EAAKH,KAAA,C,EAGtD/B,EAAEqI,KAAK+a,EAAGy5C,MAAO,SAASE,GACxBA,EAAKvC,QAAU,WACb,OAAO57C,EAAgBc,gBAAgB,oBAAqBwiC,EAAa1iC,CAAA,C,EAG3Eu9C,EAAKp7B,aAAe46B,EAAiB56B,aAAA,EAErCo7B,EAAKrC,YAAc,SAASptC,GACtB0vC,EAAgBh9D,EAAE0N,KAAK4f,EAAS,CAAE+S,WAAY08B,EAAKhkD,GAAA,CAAA,EAUvD,OATAgkD,EAAKE,OAASD,EAAcC,OAE5BF,EAAKlZ,aAAe7jD,EAAE0G,IAAIs2D,EAAchL,iBAAkB,SAAU9vD,GAClE,IAAIg7D,EAAcl9D,EAAE0N,KAAKqvD,EAAK/K,iBAAkB,SAAUh0C,GACxD,OAAOhe,EAAEkiC,QAAQlkB,EAAK0mC,WAAW3iD,MAAOG,EAAKwiD,UAAA,C,GAE/C,OAAO8X,EAAkBU,EAAY13C,MAAO03C,EAAYlnB,WAAYknB,EAAYxY,WAAW3iD,MAAOG,EAAKH,KAAA,C,GAGlGw6D,EAAiBZ,iBAAiBoB,CAAA,C,IAK7C35C,EAAG+5C,iBAAmB,CACpBV,EAAuB,8BAA+B3M,EAAckF,SAASt1D,MAAM8lB,MAAO,kBAAA,EAC1Fi3C,EAAuB,8BAA+B3M,EAAcsN,mBAAmB19D,MAAM8lB,MAAO,qBAAA,EACpGi3C,EAAuB,6BAA+B3M,EAAcuN,UAAU39D,MAAM8lB,MAAO,oBAAA,GAG7FpC,EAAG+5C,iBAAiBljD,QAAQ,SAAUlY,GACpC6c,EAAgBc,gBAAgB3d,EAAMu7D,cAAepb,EAAa1iC,CAAA,EAAchS,KAAK,SAAU+vD,GAC7Fn6C,EAAGrhB,EAAMu7D,eAAiB1+C,EAAgB6lC,cAAc8Y,EAAUnjD,QAAS,YAAai6C,EAAWC,GAAGvyD,KAAA,C,uLAxD5G+M,QACKC,OAAO,8BAAA,EACPe,WAAW,uBAAwBwsD,CAAA,C,ICL1C,WACE,aAQA,SAASC,EAAiBiB,EAAsBjc,EAAsBoW,EAAmBvD,EAC/Dx1C,EAAiBsxC,EAA4BJ,GAErE,IAAI2N,EAA0B,CAC5B5F,YAAa,CACX/wD,OAAQ,CACN42D,KAAM,CAAA,EACNpF,SAAU,Q,GAGd54D,MAAO,CACLse,KAAM,SACNrc,OAAQ,IACRmoC,QAAS,CAAC,GAAI,EAAG,GAAI,E,EAEvBtmC,MAAO,CACLomC,OAAQ,CACNgsB,QAAS,CAAA,C,IAgDf,SAAS+H,EAAc57D,GACrB,MAAO,IAAMmuD,EAA2BnuD,CAAA,C,CAG1C,SAAS67D,EAAS77D,GAChB,OAAOmuD,EAA2BnuD,CAAA,C,CAGpC,SAASnC,EAAQ4sC,GACf,MAAO,CACLA,mBAAoBA,C,EAkCxB,MAAO,CACLqwB,MAxFqB,CACrBW,EAAqB,MAAO,OAAQ59D,EAAQg+D,CAAA,EACxC,CACExJ,EAAoBE,GAAA,EAAKxE,EAAc+N,OAAA,EACvCzJ,EAAoBG,MAAA,EAAQzE,EAAc+N,OAAA,EAC1CzJ,EAAoBI,SAAA,EAAW1E,EAAc+N,OAAA,E,EAGnDL,EAAqB,aAAc,OAAQ59D,EA+B7C,SAAuBmC,GACrB,OAAOmuD,EAA2BnuD,CAAA,EAAS,G,CAhCQ,EAC/C,CACEqyD,EAAoBE,GAAA,EAAKxE,EAAcgO,cAAA,EACvC1J,EAAoBG,MAAA,EAAQzE,EAAcgO,cAAA,EAC1C1J,EAAoBI,SAAA,EAAW1E,EAAcgO,cAAA,E,EAEnDN,EAAqB,MAAO,SAAU59D,EAAQ+9D,CAAA,EAC1C,CACEvJ,EAAoBE,GAAA,EAAKxE,EAAciO,OAAA,EACvC3J,EAAoBG,MAAA,EAAQzE,EAAciO,OAAA,EAC1C3J,EAAoBI,SAAA,EAAW1E,EAAciO,OAAA,E,EAEnDP,EAAqB,MAAO,SAAU59D,EAAQg+D,CAAA,EAC1C,CACExJ,EAAoBE,GAAA,EAAKxE,EAAckO,OAAA,EACvC5J,EAAoBG,MAAA,EAAQzE,EAAckO,OAAA,EAC1C5J,EAAoBI,SAAA,EAAW1E,EAAckO,OAAA,E,EAEnDR,EAAqB,OAAQ,SAAU59D,EAAQ+9D,CAAA,EAC3C,CACEvJ,EAAoBE,GAAA,EAAKxE,EAAcmO,QAAA,EACvC7J,EAAoBG,MAAA,EAAQzE,EAAcmO,QAAA,EAC1C7J,EAAoBI,SAAA,EAAW1E,EAAcmO,QAAA,E,GA2DnDrB,cAvDF,WACE,IAAIsB,EAAiB,CAACtgC,KAAM,CAAC2jB,EAAqBhmC,OAAOQ,UAAUN,QAAS1Z,MAAO,UAAA,EACnF,OAAO6c,EAAgB0kC,iBAAA,EAAmBr7C,OAAOi2D,CAAA,C,EAsDjDv8B,aAjCF,WACE,IAAIi3B,EAAcjB,EAAkBkB,eAAA,EACpC,OAAO74D,EAAEiF,MAAM,GAAI2zD,EAAa6E,CAAA,C,EAgChC9B,iBA7BF,SAA0BoB,GACxB,MAAO,CACLt5D,MAAO,CACLkM,MAAO,CAAA,EACPjI,IAAK,EACLkiC,OAAQ,CACN8rB,UAAW,WACT,OAAOqH,EAAKn9D,QAAQ4sC,mBAAmB1sC,KAAKiC,KAAA,C,IAIlD+E,OAAQ,CACN,CACE5E,KAAMlC,EAAE0G,IAAIq2D,EAAKlZ,aAAc,SAAUsa,GACvC,MAAO,CACLl7D,EAAGk7D,EAAcp8D,OAAS,KAC1ByqD,UAAW2R,EAAcnoB,U,IAG7BooB,aAAc,G,MAexB,SAASC,EAAgBvO,EAAesE,GAetC,OAbA,SAASoJ,EAAqBzkD,EAAKulD,EAAiB1+D,EAASoyD,GAC3D,GAAI,EAAElyD,gBAAgB09D,GAAuB,OAAO,IAAIA,EAAqBzkD,EAAKulD,EAAiB1+D,EAASoyD,CAAA,EAE5GlyD,KAAKiZ,IAAMA,EACXjZ,KAAK6P,MAAQykD,EAAoBkK,GAAA,EAAmBxO,EAAc/2C,EAAA,EAAMyM,MACxE1lB,KAAKwiD,aAAe8R,EAAoBkK,GAAA,EAAmBxO,EAAc/2C,EAAA,EAAMsyB,QAC/EvrC,KAAKo9D,YAAcpN,EAAc/2C,GAAKA,IACtCjZ,KAAKy+D,cAAgBzO,EAAc/2C,GAAKrZ,MAAM2rC,QAC9CvrC,KAAKF,QAAUA,EACfE,KAAKkyD,iBAAmBA,EACxBlyD,KAAKm9D,OAAS,I,uNAxIlBnuD,QACKC,OAAO,8BAAA,EACP6R,QAAQ,mBAAoB27C,CAAA,EAC5B37C,QAAQ,uBAAwBy9C,CAAA,EAChCz9C,QAAQ,oBA0Ib,WAWE,OATA,SAAS47C,EAAkBh3C,EAAOwwB,EAAY0O,EAAY3iD,GACxD,GAAI,EAAEjC,gBAAgB08D,GAAoB,OAAO,IAAIA,EAAkBh3C,EAAOwwB,EAAY0O,EAAY3iD,CAAA,EAEtGjC,KAAK0lB,MAAQA,EACb1lB,KAAKk2C,WAAaA,EAClBl2C,KAAK4kD,WAAaA,EAClB5kD,KAAKiC,MAAQA,C,EAlJiB,C,ICPpC,WACE,aAuBA,SAASy8D,EAAend,EAAeziC,EAAiB6/C,EAASC,EAAUrK,EAAYD,GAErF,IAAIuK,EAAY,CACdrK,GAAIoK,EAAS,SAAU,IAAA,EACvBnK,MAAOmK,EAAS,YAAa,QAAA,EAC7B/J,iBAAkB+J,EAAS,YAAa,iBAAA,EACxCE,QAASF,EAAS,SAAU,WAAY,OAAA,EACxCG,aAAcH,EAAS,aAAc,YAAA,EACrCziD,eAAgByiD,EAAS,iBAAkB,MAAA,EAC3CxiD,qBAAsBwiD,EAAS,uBAAwB,WAAA,EACvDviD,aAAcuiD,EAAS,eAAgB,iBAAA,C,EAGrCI,EAAe,SAAUpa,EAAYqa,GAGvC,OAAO/+D,EAAEiF,MAFS85D,EAAc,GAAK,CAAEtK,MAAO,CAAA,CAAA,EACrB,CAAC/P,WAAYA,CAAA,CACV,C,EAG9B,MAAO,CACLsa,YAUF,SAAqB98D,EAAM+8D,EAAYC,GACrC,IAAIC,EAAWn/D,EAAE0G,IAAIu4D,EAAWG,WAAY,SAAU72D,GACpD,IAAIi/B,EAAY6Z,EAAcG,aAAat/C,EAAK0hD,YAAar7C,EAAO1D,MAAA,EACpE,MAAO,CAAEw6D,SAAU92D,EAAO+2D,YAAA,EAAep9D,KAAMslC,EAAWhiB,MAAOjd,EAAOwI,SAAA,CAAA,C,GAGtEwuD,EAAcv/D,EAAEid,OAAOgiD,EAAWO,cAAe,SAAUh6B,EAAIyB,GACjE,IAAIO,EAAY6Z,EAAcG,aAAat/C,EAAK0hD,YAAakb,EAAa73B,EAAKyd,WAAW3iD,MACtFklC,EAAKyd,aAAe2P,EAAW5qC,GAAA,CAAA,EAEnC,OADA+b,EAAIyB,EAAKq2B,eAAiBt9D,EAAEmG,MAAM+4D,EAAM13B,EAAW,OAAA,CAAA,EAC5ChC,C,EACN,EAAA,EAECi6B,EAAiBz/D,EAAEid,OAAOgiD,EAAWO,cAAe,SAAUh6B,EAAIyB,GACpE,IAEMy4B,EAIN,OANGz4B,EAAK04B,4BACFn4B,EAAY6Z,EAAcG,aAAat/C,EAAK0hD,YAAakb,EAAa73B,EAAKyd,WAAWp1C,OAAQ,CAAA,CAAA,CAAA,EAC9FowD,EAAaz4B,EAAKyd,WAAWp1C,SAAW+kD,EAAW5qC,IAAI1nB,MAASw9D,EAAYjL,GAAKiL,EAAYhL,MAC7Fv0D,EAAEmG,MAAM+4D,EAAM13B,EAAW,OAAA,CAAA,EAC7BhC,EAAIyB,EAAK04B,2BAA6B/gD,EAAgB4kC,aAAa+b,EAAYt4B,EAAKq2B,eAAgBoC,CAAA,GAE/Fl6B,C,EACN,EAAA,EAEH,OAAOxlC,EAAEiF,MAAM,CAACk6D,SAAUA,CAAA,EAAWI,EAAaE,CAAA,C,EAhClDG,iBAmCF,SAA0B5d,EAAWE,EAAaE,GAChD,IAAIyd,EAAcpB,EAAQqB,iBAAiB,CACzC1L,EAAoBE,GAAGlS,CAAA,EACvBgS,EAAoBG,MAAMnS,CAAA,EAC1BgS,EAAoBO,iBAAiBvS,CAAA,E,EAEvC,OAAOpiD,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAOE,CAAA,EAAU,CACpFgd,WAAW,CACTY,EAAY3L,EAAWC,GAAIqK,EAAUrK,EAAA,EACrC0L,EAAY3L,EAAWE,MAAOoK,EAAUpK,KAAA,EACxCyL,EAAY3L,EAAW5qC,IAAKk1C,EAAUhK,iBAAkB,CAAA,CAAA,E,IA5C5DsL,mBAiDF,SAA4Bje,EAAWE,EAAaE,GAClD,IAAIyd,EAAcpB,EAAQyB,cAAc,CACtC9L,EAAoB+L,aAAa/d,EAAS,KAAMiS,EAAWC,EAAA,EAC3DF,EAAoByK,aAAazc,EAAS,KAAMiS,EAAW+L,KAAA,EAC3DhM,EAAoBn4C,eAAemmC,EAAS,KAAMiS,EAAWgM,SAAA,EAC7DjM,EAAoBl4C,qBAAqBkmC,EAAS,KAAMiS,EAAWiM,eAAA,EACnElM,EAAoBj4C,aAAaimC,EAAS,KAAMiS,EAAWkM,OAAA,E,EAE7D,OAAOvgE,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAME,CAAA,EAAU,CACnFgd,WAAY,CACVY,EAAY3L,EAAWgM,UAAW1B,EAAU1iD,cAAA,EAC5C+jD,EAAY3L,EAAWiM,gBAAiB3B,EAAUziD,oBAAA,EAClD8jD,EAAY3L,EAAWkM,QAAS5B,EAAUxiD,YAAA,E,IA5D9CqkD,cA+GF,SAAuBxe,EAAWE,EAAaE,GAC7C,IAAIyd,EAAcpB,EAAQyB,cAAc,CACtC9L,EAAoB+L,aAAa/d,EAAS,KAAMiS,EAAWa,UAAA,EAC3Dd,EAAoByK,aAAazc,EAAS,KAAMiS,EAAWoM,QAAA,EAC3DrM,EAAoBn4C,eAAemmC,EAAS,KAAMiS,EAAWqM,YAAA,EAC7DtM,EAAoBl4C,qBAAqBkmC,EAAS,KAAMiS,EAAWsM,kBAAA,EACnEvM,EAAoBj4C,aAAaimC,EAAS,KAAMiS,EAAWuM,UAAA,E,EAE7D,OAAO5gE,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAME,CAAA,EAAU,CACnFgd,WAAW,CACTY,EAAY3L,EAAWqM,aAAc/B,EAAU1iD,cAAA,EAC/C+jD,EAAY3L,EAAWsM,mBAAoBhC,EAAUziD,oBAAA,EACrD8jD,EAAY3L,EAAWuM,WAAajC,EAAUxiD,YAAA,E,IA1HlD0kD,iBA6IF,SAA0B3+D,GAWxB,MAAO,CACLi9D,SALa,CACX,CAACE,SAAU,SAAUn9D,KAPNlC,EAAE0G,IAAIxE,EAAK0hD,YAAa,SAAUE,GACnD,MAAO,CACL9tB,KAAM8tB,EAAY3kB,UAClBp9B,MAAO+hD,EAAY/hD,K,IAIsByjB,MAAO,IAAA,GAI9B+3C,UAAWr7D,EAAK4+D,S,GAxJtCC,4BA+DF,SAAqC/e,EAAWE,EAAaE,GAC3D,IAAIyd,EAAcpB,EAAQqB,iBAAiB,CACzC1L,EAAoB4M,qBAAqB5e,EAAS,KAAMiS,EAAW+L,KAAA,EACnEhM,EAAoB6M,yBAAyB7e,EAAS,KAAMiS,EAAWgM,SAAA,EACvEjM,EAAoB8M,+BAA+B9e,EAAS,KAAMiS,EAAWiM,eAAA,E,EAE/E,OAAOtgE,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAOE,CAAA,EAAU,CACpFgd,WAAY,CACVY,EAAY3L,EAAW+L,MAAOzB,EAAUE,YAAA,EACxCmB,EAAY3L,EAAWgM,UAAW1B,EAAU1iD,cAAA,EAC5C+jD,EAAY3L,EAAWiM,gBAAiB3B,EAAUziD,oBAAA,E,IAxEtDilD,2BA6EF,SAAoCnf,EAAWE,EAAaE,GAE1D,IAAIyd,EAAcpB,EAAQqB,iBAAiB,CACzC1L,EAAoBgN,WAAWhf,EAAS,KAAMiS,EAAWoM,QAAA,EACzDrM,EAAoBiN,eAAejf,EAAS,KAAMiS,EAAWqM,YAAA,EAC7DtM,EAAoBkN,qBAAqBlf,EAAS,KAAMiS,EAAWsM,kBAAA,E,EAErE,OAAO3gE,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAME,CAAA,EAAU,CACnFgd,WAAW,CACTY,EAAY3L,EAAWqM,aAAc/B,EAAU1iD,cAAA,EAC/C+jD,EAAY3L,EAAWsM,mBAAoBhC,EAAUziD,oBAAA,E,IAtFzDqlD,+BA2FF,SAAwCvf,EAAWE,EAAaE,GAE9D,IAAIyd,EAAcpB,EAAQqB,iBAAiB,CACzC1L,EAAoB4M,qBAAqB5e,EAAS,KAAMiS,EAAWoM,QAAA,EACnErM,EAAoB6M,yBAAyB7e,EAAS,KAAMiS,EAAWqM,YAAA,EACvEtM,EAAoB8M,+BAA+B9e,EAAS,KAAMiS,EAAWsM,kBAAA,E,EAE/E,OAAO3gE,EAAEiF,MAAM86D,EAAiBF,EAAa7d,EAAWE,EAAa,CAAA,EAAOE,CAAA,EAAU,CACpFgd,WAAW,CACTY,EAAY3L,EAAWoM,SAAU9B,EAAUE,YAAA,EAC3CmB,EAAY3L,EAAWqM,aAAc/B,EAAU1iD,cAAA,EAC/C+jD,EAAY3L,EAAWsM,mBAAoBhC,EAAUziD,oBAAA,E,KAsB3D,SAAS8jD,EAAYtb,EAAY8c,EAAUzC,GACzC,OAAO/+D,EAAEiF,MAAMu8D,EAAU,CAAC38D,OAAQi6D,EAAapa,EAAW3iD,MAAOg9D,CAAA,CAAA,CAAA,C,CAGnE,SAASgB,EAAiB0B,EAAkBzf,EAAWE,EAAajd,EAAemd,GACjF,MAAO,CACLod,cAAeiC,EAAiB5B,YAChC6B,YAAa,SAAS/xD,EAAOgyD,GAC3B,OAAOtgB,EAAcU,eAAeC,EAAWryC,EAAOs1B,EAAeid,EAAayf,EAAkBvf,CAAA,C,EAEtGwf,cAAeH,C,yGAtLrB3yD,QACKC,OAAO,8BAAA,EACP6R,QAAQ,iBAAkB49C,CAAA,EAC1BxvD,SAAS,aAAc,CACtBya,IAAK,CAAE1nB,MAAO,KAAA,EACduyD,GAAK,CAAEvyD,MAAO,UAAWuN,OAAQ,KAAA,EACjCilD,MAAO,CAAExyD,MAAO,aAAcuN,OAAQ,KAAA,EACtC8wD,MAAO,CAAEr+D,MAAO,oBAAqBuN,OAAQ,SAAA,EAC7C+wD,UAAW,CAAEt+D,MAAO,wBAAyBuN,OAAQ,mBAAA,EACrDgxD,gBAAiB,CAACv+D,MAAO,8BAA+BuN,OAAQ,mBAAA,EAChEixD,QAAS,CAAEx+D,MAAO,sBAAuBuN,OAAQ,SAAA,EACjD4lD,WAAY,CAACnzD,MAAO,iBAAA,EACpB0+D,SAAU,CAAC1+D,MAAO,uBAAwBuN,OAAQ,iBAAA,EAClDoxD,aAAc,CAAC3+D,MAAO,2BAA4BuN,OAAQ,sBAAA,EAC1DqxD,mBAAoB,CAAC5+D,MAAO,iCAAkCuN,OAAQ,sBAAA,EACtEsxD,WAAY,CAAC7+D,MAAO,yBAA0BuN,OAAQ,iBAAA,EACtDuyD,UAAW,CAAC9/D,MAAO,gBAAA,EACnB+/D,cAAe,CAAC//D,MAAO,qBAAsBuN,OAAQ,gBAAA,EACrDyyD,oBAAqB,CAAChgE,MAAO,2BAA4BuN,OAAQ,gBAAA,C,MCrBzE,WACE,aAMA,SAAS0yD,EAAehO,EAAYC,EAASC,EAAOC,EAAeC,EAAqBC,EAChE9S,EAAsB3iC,GA2X5C,MAAO,CACLm2C,IA1XQd,EAAQ,MAAOD,EAAWiO,gBAChC/N,EAAM,MAAO,OAAQ,QAAS,CAAA,EAC1B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,KAAA,CAAA,EAC7CoyD,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,KAAA,CAAA,E,EAGzD,CAAE6c,EAAgBulC,eAAe,UAAW,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACrGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAC/B51C,EAAgB0lC,eAAe,mBAAA,C,EAmXjC4d,WAhXe,SAAU9f,GACzB,OAAO6R,EAAQ,MAAOD,EAAWiO,gBAC7B/N,EAAM,MAAO,OAAQ,SAAU9R,EAC3B,CAAE+R,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAGvE,CAAE71C,EAAgBulC,eAAe,gCAAiC,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EACzFF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GAC5B31C,EAAgB0lC,eAAe,eAAA,C,GAwWnC6d,gBApWoB,SAAU/f,GAC9B,OAAO6R,EAAQ,kBAAmBD,EAAWiO,gBACzC/N,EAAM,kBAAmB,OAAQ,SAAU9R,EACvC,CAAE+R,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAGvE,CAAE71C,EAAgBulC,eAAe,sBAAuB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GAClH31C,EAAgB0lC,eAAe,kBAAA,C,GA8VnC8d,qBA1VyBnO,EAAQ,uBAAwBD,EAAWY,SAClEV,EAAM,uBAAwB,OAAQ,SAAU,CAAA,EAC5C,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEvE,CAAE71C,EAAgBulC,eAAe,wBAAyB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GACpH31C,EAAgB0lC,eAAe,UAAA,C,EAqVjC+d,cAlVkBpO,EAAQ,gBAAiBD,EAAWY,SACpDV,EAAM,gBAAiB,OAAQ,SAAU,CAAA,EACrC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcQ,iBAAiB,SAAU5yD,GAAS,OAAOA,EAAM0yD,KAAA,EAAU,KAAM,KAAM,CAAA,CAAA,E,EAG3F,CAAE71C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAW5qC,IAAK83B,EAAqBhmC,OAAOQ,SAAA,EAAA,EACpF6C,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAW5qC,IAAK83B,EAAqBhmC,OAAOQ,SAAA,EAAA,GAC5F6C,EAAgB0lC,eAAe,UAAA,C,EAwUjCge,WArUerO,EAAQ,aAAcD,EAAWY,SAC9CV,EAAM,aAAc,OAAQ,SAAU,CAAA,EAClC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcoO,WAAW,SAAUxgE,GAAS,OAAOA,EAAM2iD,aAAe2P,EAAWC,GAAGvyD,OAClFA,EAAM0yD,KAAA,EAAU,KAAM,KAAM,CAAA,CAAA,E,EAGtC,CAAE71C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWC,GAAI/S,EAAqBhmC,OAAOC,MAAA,EAAA,EACnFoD,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAWC,GAAI/S,EAAqBhmC,OAAOC,MAAA,EAAA,GAC3FoD,EAAgB0lC,eAAe,UAAA,C,EA2TjCke,cAxTkBvO,EAAQ,gBAAiBD,EAAWY,SACpDV,EAAM,gBAAiB,OAAQ,SAAU,CAAA,EACrC,CAAEC,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcsO,cAAc,SAAU1gE,GAAS,OAAOA,EAAM2iD,aAAe2P,EAAWE,MAAMxyD,OACxFA,EAAM0yD,KAAA,EAAU,KAAM,KAAM,CAAA,CAAA,E,EAGtC,CAAE71C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWE,MAAOhT,EAAqBhmC,OAAOM,SAAA,EAAA,EACtF+C,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAWE,MAAOhT,EAAqBhmC,OAAOM,SAAA,EAAA,GAC9F+C,EAAgB0lC,eAAe,UAAA,C,EA+SjCuQ,IA5SQZ,EAAQ,MAAOD,EAAW0O,YAChCxO,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcQ,iBAAiB,CAAEjQ,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAGlE,CAAE6c,EAAgBulC,eAAe,gBAC7B,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAOH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GAC1G/1C,EAAgB0lC,eAAe,eAAA,C,EAoSjCqe,MAjSU1O,EAAQ,QAASD,EAAW0O,YACpCxO,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAAEC,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC1FN,EAAch4C,aAAa,CAAEuoC,WAAY2P,EAAWkM,QAAQx+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhF,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWC,EAAA,EAAA,EACrG11C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAMxK,EAAW+L,KAAA,EAClGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,EAC7D1hD,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoBj4C,aAAa,CAAA,EAAMk4C,EAAWkM,OAAA,EAAA,GACtG3hD,EAAgB0lC,eAAe,eAAA,C,EAuRjCwQ,IApRQb,EAAQ,MAAOD,EAAW0O,YAChCxO,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC3DN,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjEN,EAAcQ,iBAAiB,CAAEjQ,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAGlE,CAAE6c,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAC1GH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GACvC/1C,EAAgB0lC,eAAe,aAAA,C,EA4QjCse,MAzQU3O,EAAQ,QAASD,EAAW0O,YACpCxO,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAAEC,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC1FN,EAAch4C,aAAa,CAAEuoC,WAAY2P,EAAWkM,QAAQx+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhF,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWC,EAAA,EAAA,EACrG11C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAMxK,EAAW+L,KAAA,EAClGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,EAC7D1hD,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoBj4C,aAAa,CAAA,EAAMk4C,EAAWkM,OAAA,EAAA,GACtG3hD,EAAgB0lC,eAAe,aAAA,C,EA+PjC2Q,SA5PahB,EAAQ,WAAYD,EAAW0O,YAC1CxO,EAAM,WAAY,OAAQ,SAAU,CAAA,EAChC,CAAEC,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWqM,aAAa3+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjFN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWsM,mBAAmB5+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC7FN,EAAch4C,aAAa,CAAEuoC,WAAY2P,EAAWuM,WAAW7+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEnF,CAAE71C,EAAgBulC,eAAe,qBAAsB,CAAEiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWa,UAAA,EAAA,EAC1Gt2C,EAAgBulC,eAAe,qBAAsB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAMxK,EAAWoM,QAAA,EACvGrM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWqM,YAAA,EACrDtM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWsM,kBAAA,EAAA,EAC7D/hD,EAAgBulC,eAAe,qBAAsB,CAAEiQ,EAAoBj4C,aAAa,CAAA,EAAMk4C,EAAWuM,UAAA,EAAA,GAC3GhiD,EAAgB0lC,eAAe,aAAA,C,EAmPjC0Q,SAhPa,SAAU5S,GACvB,OAAO6R,EAAQ,WAAYD,EAAWgB,SAClCd,EAAM,WAAY,OAAQ,UAAW9R,EAAS,CAAE+R,EAAcG,GAAA,EAAA,EAC9D,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBmJ,UAAU,CAAA,CAAA,GAAU,CAAA,CAAA,GACxF3+C,EAAgB0lC,eAAe,mBAAoB,KAAM,GAAA,C,GA6O7D8b,MAzOU,SAAUhe,GACpB,OAAO6R,EAAQ,QAASD,EAAWgB,SAC/Bd,EAAM,QAAS,OAAQ,UAAW9R,EAAS,CAAE+R,EAAcG,GAAA,EAAA,EAC3D,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBmJ,UAAU,CAAA,CAAA,GAAU,CAAA,CAAA,GACxF3+C,EAAgB0lC,eAAe,8BAA+B,KAAM,GAAA,C,GAsOxE8Y,mBAlOuB,SAAUhb,GACjC,OAAO6R,EAAQ,aAAcD,EAAWgB,SACpCd,EAAM,aAAc,OAAQ,UAAW9R,EAAS,CAAE+R,EAAcG,GAAA,EAAA,EAChE,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBmJ,UAAU,CAAA,CAAA,GAAU,CAAA,CAAA,GACxF3+C,EAAgB0lC,eAAe,sBAAuB,KAAM,GAAA,C,GA+NhEue,iBA3NqB,SAAUzgB,GAC/B,OAAO6R,EAAQ,WAAYD,EAAWgB,SAClCd,EAAM,WAAY,OAAQ,UAAW9R,EAAS,CAAE+R,EAAcG,GAAA,EAAA,EAC9D,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBmJ,UAAU,CAAA,CAAA,GAAU,CAAA,CAAA,GACxF3+C,EAAgB0lC,eAAe,oBAAqB,KAAM,GAAA,C,GAwN9D+Y,UApNc,SAAUjb,GACxB,OAAO6R,EAAQ,YAAaD,EAAWgB,SACnCd,EAAM,YAAa,OAAQ,UAAW9R,EAAS,CAAE+R,EAAcG,GAAA,EAAA,EAC/D,CAAE11C,EAAgBulC,eAAe,YAAa,CAAEiQ,EAAoBmJ,UAAU,CAAA,CAAA,GAAU,CAAA,CAAA,GACxF3+C,EAAgB0lC,eAAe,qBAAsB,KAAM,GAAA,C,GAkN/Dwe,UA9Mc7O,EAAQ,QAASD,EAAW+O,KACxC7O,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAW+L,MAAMr+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACvEN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhG,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAW+L,KAAA,EACrGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,GAC7D1hD,EAAgB0lC,eAAe,oBAAA,C,EAsMjC0e,UAnMc/O,EAAQ,QAASD,EAAW+O,KACxC7O,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAW+L,MAAMr+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACvEN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhG,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAW+L,KAAA,EACrGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,GAC7D1hD,EAAgB0lC,eAAe,kBAAA,C,EA2LjC2e,gBAxLoBhP,EAAQ,cAAeD,EAAW+O,KACpD7O,EAAM,cAAe,OAAQ,SAAU,CAAA,EACnC,CAACC,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWqM,aAAa3+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAChFN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWsM,mBAAmB5+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEnG,CAAE71C,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAWoM,QAAA,EACvGrM,EAAoBn4C,eAAe,CAAA,EAAMo4C,EAAWqM,YAAA,EACpDtM,EAAoBl4C,qBAAqB,CAAA,EAAMm4C,EAAWsM,kBAAA,EAAA,GAC5D/hD,EAAgB0lC,eAAe,kBAAA,C,EAiLjC4e,mBA9KuBjP,EAAQ,yBAA0BD,EAAW+O,KAClE7O,EAAM,yBAA0B,OAAQ,SAAU,CAAA,EAC9C,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAWoM,SAAS1+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC1EN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWqM,aAAa3+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjFN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWsM,mBAAmB5+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEnG,CAAE71C,EAAgBulC,eAAe,2BAA4B,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAWoM,QAAA,EAChHrM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWqM,YAAA,EACrDtM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWsM,kBAAA,EAAA,GAC7D/hD,EAAgB0lC,eAAe,kBAAA,C,EAsKjC6e,oBAnKwBlP,EAAQ,2BAA4BD,EAAW+O,KAAM,KAC3E,CAAEnkD,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB4M,qBAAqB,CAAA,EAAO3M,EAAWwN,SAAA,EAC/GzN,EAAoB6M,yBAAyB,CAAA,EAAO5M,EAAWyN,aAAA,EAC/D1N,EAAoB8M,+BAA+B,CAAA,EAAO7M,EAAW0N,mBAAA,EAAA,GACvEnjD,EAAgB0lC,eAAe,kBAAA,C,EAgKjC8e,4BA7JgCnP,EAAQ,+BAAgCD,EAAW+O,KAAM,KACvF,CAAEnkD,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB4M,qBAAqB,CAAA,EAAO3M,EAAWwN,SAAA,EAC/GzN,EAAoB6M,yBAAyB,CAAA,EAAO5M,EAAWyN,aAAA,EAC/D1N,EAAoB8M,+BAA+B,CAAA,EAAO7M,EAAW0N,mBAAA,EAAA,GACvEnjD,EAAgB0lC,eAAe,kBAAA,C,EA4JjC+e,SAzJapP,EAAQ,QAASD,EAAWsP,IACvCpP,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAW+L,MAAMr+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACvEN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhG,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAW+L,KAAA,EACrGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,GAC7D1hD,EAAgB0lC,eAAe,mBAAA,C,EAiJjCif,SA9IatP,EAAQ,QAASD,EAAWsP,IACvCpP,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAW+L,MAAMr+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACvEN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWgM,UAAUt+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC9EN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWiM,gBAAgBv+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEhG,CAAE71C,EAAgBulC,eAAe,gBAAiB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAW+L,KAAA,EACrGhM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWgM,SAAA,EACrDjM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWiM,eAAA,EAAA,GAC7D1hD,EAAgB0lC,eAAe,iBAAA,C,EAsIjCkf,eAnImBvP,EAAQ,cAAeD,EAAWsP,IACnDpP,EAAM,cAAe,OAAQ,SAAU,CAAA,EACnC,CAACC,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWqM,aAAa3+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAChFN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWsM,mBAAmB5+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEnG,CAAE71C,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAWoM,QAAA,EACvGrM,EAAoBn4C,eAAe,CAAA,EAAMo4C,EAAWqM,YAAA,EACpDtM,EAAoBl4C,qBAAqB,CAAA,EAAMm4C,EAAWsM,kBAAA,EAAA,GAC5D/hD,EAAgB0lC,eAAe,iBAAA,C,EA4HjCmf,kBAzHsBxP,EAAQ,yBAA0BD,EAAWsP,IACjEpP,EAAM,yBAA0B,OAAQ,SAAU,CAAA,EAC9C,CAACC,EAAc0K,aAAa,CAAEna,WAAY2P,EAAWoM,SAAS1+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EAC1EN,EAAcl4C,eAAe,CAAEyoC,WAAY2P,EAAWqM,aAAa3+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACjFN,EAAcj4C,qBAAqB,CAAEwoC,WAAY2P,EAAWsM,mBAAmB5+D,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEnG,CAAE71C,EAAgBulC,eAAe,2BAA4B,CAAEiQ,EAAoByK,aAAa,CAAA,EAAOxK,EAAWoM,QAAA,EAChHrM,EAAoBn4C,eAAe,CAAA,EAAOo4C,EAAWqM,YAAA,EACrDtM,EAAoBl4C,qBAAqB,CAAA,EAAOm4C,EAAWsM,kBAAA,EAAA,GAC7D/hD,EAAgB0lC,eAAe,iBAAA,C,EAiHjCof,mBA9GuBzP,EAAQ,2BAA4BD,EAAWsP,IAAK,KACzE,CAAE1kD,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB4M,qBAAqB,CAAA,EAAO3M,EAAWwN,SAAA,EAC/GzN,EAAoB6M,yBAAyB,CAAA,EAAO5M,EAAWyN,aAAA,EAC/D1N,EAAoB8M,+BAA+B,CAAA,EAAO7M,EAAW0N,mBAAA,EAAA,GACvEnjD,EAAgB0lC,eAAe,iBAAA,C,EA2GjCqf,2BAxG+B1P,EAAQ,+BAAgCD,EAAWsP,IAAK,KACrF,CAAE1kD,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB4M,qBAAqB,CAAA,EAAO3M,EAAWwN,SAAA,EAC/GzN,EAAoB6M,yBAAyB,CAAA,EAAO5M,EAAWyN,aAAA,EAC/D1N,EAAoB8M,+BAA+B,CAAA,EAAO7M,EAAW0N,mBAAA,EAAA,GACvEnjD,EAAgB0lC,eAAe,iBAAA,C,EAsGjCsf,YAnGgB3P,EAAQ,MAAOD,EAAW6P,gBACxC3P,EAAM,MAAO,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,WAAA,C,EAmGhFwf,eAhGmB7P,EAAQ,SAAUD,EAAW6P,gBAC9C3P,EAAM,SAAU,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,cAAA,C,EAgGnFyf,eA7FmB9P,EAAQ,SAAUD,EAAW6P,gBAC9C3P,EAAM,SAAU,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,cAAA,C,EA6FnF0f,eA1FmB/P,EAAQ,SAAUD,EAAW6P,gBAC9C3P,EAAM,SAAU,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,cAAA,C,EA0FnF2f,mBAvFuBhQ,EAAQ,aAAcD,EAAW6P,gBACtD3P,EAAM,aAAc,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,mBAAA,C,EAuFvF4f,iBApFqBjQ,EAAQ,WAAYD,EAAW6P,gBAClD3P,EAAM,WAAY,MAAO,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,iBAAA,C,EAqFrF6f,oBAlFwBlQ,EAAQ,cAAeD,EAAW6P,gBACxD3P,EAAM,cAAe,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EAkF3F8f,qBA/EyBnQ,EAAQ,eAAgBD,EAAW6P,gBAC1D3P,EAAM,eAAgB,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EA+E5F+f,iBA5EqBpQ,EAAQ,WAAYD,EAAW6P,gBAClD3P,EAAM,WAAY,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EA4ExFggB,mBAzEuBrQ,EAAQ,aAAcD,EAAW6P,gBACtD3P,EAAM,aAAc,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EAyE1FigB,kBAtEsBtQ,EAAQ,YAAaD,EAAW6P,gBACpD3P,EAAM,YAAa,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EAsEzFkgB,kBAnEsBvQ,EAAQ,YAAaD,EAAW6P,gBACpD3P,EAAM,YAAa,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EAmEzFmgB,oBAhEwBxQ,EAAQ,cAAeD,EAAW6P,gBACxD3P,EAAM,cAAe,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EAgE3FogB,cA7DkBzQ,EAAQ,QAASD,EAAW6P,gBAC5C3P,EAAM,QAAS,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,EA6DrFqgB,kBA1DsB1Q,EAAQ,YAAaD,EAAW6P,gBACpD3P,EAAM,YAAa,SAAU,UAAW,CAAA,EAAO,EAAA,EAAK,GAAIt1C,EAAgB0lC,eAAe,YAAA,C,0IA3X7Fx1C,QACKC,OAAO,8BAAA,EACP6R,QAAQ,iBAAkBohD,CAAA,C,ICLjC,WACE,aAMA,SAAS4C,EAAalkD,EAAKmkD,EAAgBxjB,EAAeziC,EAAiBw1C,GAEzE,MAAO,CACL0Q,kBASF,SAA2BvoC,GACzBA,EAAWwoC,YAAY9qD,QAAQ,SAASpX,GACtC7C,EAAEia,QAAQpX,EAAEghD,aAAc,SAAS9/C,GAC9BA,EAAEhC,MAAQ8iE,IACX9gE,EAAEhC,MAAQ8iE,E,MAZhBG,+BAiCF,SAAwC9iE,EAAM48D,EAAcmG,GAC1D,IAAIC,EAAeC,EAAoB,CAACC,SAAU,CAAA,CAAA,EAAO,CAACA,SAAU,CAAA,CAAA,CAAA,EACnEljE,EAAM48D,CAAA,EAEHrtC,EAAiB,CACnB6iC,GAAIp2B,EAAIl+B,EAAE0N,KAAKw3D,EAAa/F,SAAU,CAACE,SAAU,QAAA,CAAA,EAAWn9D,IAAA,EAC5DqyD,MAAOr2B,EAAIl+B,EAAE0N,KAAKw3D,EAAa/F,SAAU,CAACE,SAAU,WAAA,CAAA,EAAcn9D,IAAA,C,EAGhEsyD,EAAW/iC,EAAe6iC,GAAK7iC,EAAe8iC,MAE9C8Q,EAAwBrlE,EAAEid,OAAOwU,EAAgB,SAAU+T,EAAKzjC,EAAOujE,GAEzE,OADA9/B,EAAI4uB,EAAoBkR,GAAUL,CAAA,EAAgBtF,2BAA6B/gD,EAAgB4kC,aAAazhD,EAAOyyD,CAAA,EAC5GhvB,C,EACN,EAAA,EAEH,OAAOxlC,EAAEC,OAAOilE,EAAczzC,EAAgB4zC,CAAA,C,EAhD9CE,2BAmBF,SAAoCrjE,EAAM48D,EAAc0G,GAClDN,EAAeC,EAAoB,CAACzgB,WAAY,SAAA,EAAY,CAACA,WAAY,YAAA,CAAA,EAC5ExiD,EAAK0hD,YAAakb,CAAA,EAEfrtC,EAAiB,CACnB6iC,GAAIt0D,EAAEmG,MAAMjE,EAAKujE,KAAKC,QAASF,CAAA,EAC/BjR,MAAOv0D,EAAEmG,MAAMjE,EAAKujE,KAAKE,WAAYH,CAAA,EACrChR,SAAUx0D,EAAEmG,MAAMjE,EAAKujE,KAAKG,SAAUJ,CAAA,C,EAGxC,OAAOxlE,EAAEC,OAAOilE,EAAczzC,CAAA,C,EA5B9Bo0C,yBAgEF,SAAkC3jE,EAAM48D,EAAcgH,EAAeC,EAAmBvgD,GACtF,IAAIs4B,EAAgBuD,EAAcG,aAAat/C,EAAM48D,CAAA,EACjDS,EAAcv/D,EAAE6E,OAAOihE,EAAc5jE,CAAA,EAAMi9D,SAAU4G,CAAA,EAErD1iB,EAAWnlB,EAAI4f,CAAA,EACfsF,EAAmBllB,EAAIl+B,EAAE+K,QAAQw0D,EAAa,MAAA,CAAA,EAC9CtE,EAAcr8C,EAAgBskC,gBAAgBG,EAAWD,EAAkBA,CAAA,EAC3E4iB,EAAgB,CAClB,CAAC3G,SAAU,YAAan9D,KAAM47C,EAAct4B,MAAOA,EAAO0f,aAAc,CAAA,CAAA,GAG1E,MAAO,CACLie,MAAOE,EAAWD,EAClBA,iBAAkBA,EAClB6X,YAAaA,EACbkE,SAAUn/D,EAAEiI,OAAOs3D,EAAayG,CAAA,C,GA9ElCC,oBAgHF,SAA6B/jE,EAAMgkE,GACjC,IAAI39D,EAAS49D,EAAmB,CAACzhB,WAAY,MAAO+P,MAAO,CAAA,CAAA,EAAO,iBAAA,EAE9D0K,EAAWn/D,EAAE0G,IAAI6B,EAAQ,SAAU0+B,GACrC,IAAI6W,EAAeuD,EAAcG,aAAat/C,EAAM+kC,EAAKpiC,MAAA,EACzD,MAAO,CAACw6D,SAAUp4B,EAAKo4B,SAAUn9D,KAAM47C,EAAct4B,MAAOyhB,EAAKzhB,MAAO0f,aAAc+B,EAAK/B,YAAA,C,GAGzFq6B,EAAcv/D,EAAEid,OAAO1U,EAAQ,SAAUi9B,EAAIyB,GAC/C,IAAI/kC,EAAOlC,EAAE0N,KAAKyxD,EAAU,CAACE,SAAUp4B,EAAKo4B,QAAA,CAAA,EAAWn9D,KAGvD,OADAsjC,EADiB4uB,EAAoBntB,EAAKm/B,gBAAgBF,CAAA,EAC3C5I,eAAiBp/B,EAAIh8B,CAAA,EAC7BsjC,C,EACN,EAAA,EAOC6gC,GAJJ9G,EAAY5K,iBAAmBz2B,EAAImjB,EAAcG,aAAat/C,EAAM,SAAUq7B,GAC5E,OAAOv9B,EAAEiK,GAAGszB,EAAOmnB,WAAY,KAAA,GAAU1kD,EAAEmoC,YAAY5K,EAAOk3B,KAAA,C,IAGvC8K,EAAYjL,GAAKiL,EAAYhL,OAElDkL,EAAiBz/D,EAAEid,OAAO1U,EAAQ,SAAUi9B,EAAIyB,GAC9Cq/B,EAAalS,EAAoBntB,EAAKm/B,gBAAgBF,CAAA,EAG1D,OAFGI,EAAW3G,4BACZn6B,EAAI8gC,EAAW3G,2BAA6B/gD,EAAgB4kC,aAAa+b,EAAY+G,EAAWhJ,eAAgB+I,CAAA,GAC3G7gC,C,EACN,EAAA,EAEH,OAAOxlC,EAAEiF,MAAM,CAACk6D,SAAUA,CAAA,EAAWI,EAAaE,CAAA,C,EA5IlD8G,mBA+IF,SAA4BrkE,EAAMq7B,GAChC,IAAIh1B,EAAS49D,EAAA,EAEThH,EAAWn/D,EAAE0G,IAAI6B,EAAQ,SAAU0+B,GACrC,IAAI6W,EAAeuD,EAAcG,aAAat/C,EAAK0hD,YAAa3c,EAAKpiC,MAAA,EACrE,MAAO,CAACw6D,SAAUp4B,EAAKo4B,SAAUn9D,KAAM47C,EAAct4B,MAAOyhB,EAAKzhB,KAAA,C,GAG/Dw3C,EAAgB96D,EAAKq7B,GAErBgiC,EAAc,CAChBtC,OAAQD,EAAcwJ,KACtBlS,GAAI0I,EAAcyI,KAAKC,QACvBnR,MAAOyI,EAAcyI,KAAKE,WAC1Bc,SAAUzJ,EAAcyI,KAAKiB,a,EAG/B,OAAO1mE,EAAEiF,MAAM,CAACk6D,SAAUA,CAAA,EAAWI,CAAA,C,EA/JrCoH,+BA6FF,SAAwCzkE,GAWtC,MAAO,CACLi9D,SALa,CACb,CAACE,SAAU,SAAUn9D,KAPHlC,EAAE0G,IAAIxE,EAAK0hD,YAAa,SAAUA,GACpD,MAAO,CACL5tB,KAAM4tB,EAAYzkB,UAClBp9B,MAAO/B,EAAEmG,MAAMy9C,EAAY7hD,KAAA,C,IAIayjB,MAAO,IAAA,GAKjD8uC,GAAIt0D,EAAEmG,MAAMjE,EAAK,uBAAA,C,IA7FrB,SAASg8B,EAAIiY,GAAO,OAAOn2C,EAAEwiD,MAAMrM,EAAK,OAAA,CAAA,CAkCxC,SAASgvB,EAAoByB,EAAUC,GACrC,OAAO,SAAS3kE,EAAM48D,GAIpB,MAAO,CACLK,SAAU,CACR,CAACE,SAAU,SAAUn9D,KALJm/C,EAAcG,aAAat/C,EAAMlC,EAAEC,OAAO6+D,EAAc8H,CAAA,CAAA,EAK9BphD,MAAO,IAAA,EAClD,CAAC65C,SAAU,YAAan9D,KALJm/C,EAAcG,aAAat/C,EAAMlC,EAAEC,OAAO6+D,EAAc+H,CAAA,CAAA,EAK3BrhD,MAAO,QAAA,E,GAyBhE,SAAS2gD,EAAmBW,EAAgBC,GAC1C,IAAI12D,EAAU,CACZ,CAAExL,OAAQ,CAAC6/C,WAAY,UAAW+P,MAAO,CAAA,CAAA,EAAQ4K,SAAU,SAAU75C,MAAO,KAAM4gD,eAAgB,IAAA,EAClG,CAAEvhE,OAAQ,CAAC6/C,WAAY,aAAc+P,MAAO,CAAA,CAAA,EAAQ4K,SAAU,YAAa75C,MAAO,SAAU4gD,eAAgB,OAAA,GAO9G,OAJGU,GACDz2D,EAAQxI,KAAK,CAAEhD,OAAQiiE,EAAgBzH,SAAU,YAAa75C,MAAOuhD,EACnEX,eAAgB,mBAAoBlhC,aAAc,CAAA,CAAA,CAAA,EAE/C70B,C,6FAvGXvB,QACKC,OAAO,8BAAA,EACP6R,QAAQ,qBAAsBgkD,CAAA,C,ICLrC,WACE,aAMA,SAASoC,EAAmBhT,EAAYC,EAASC,EAAOC,EAAeC,EAAqBC,EAChE9S,EAAsB3iC,GAuNhD,MAAO,CACL2d,WAtNe03B,EAAQ,aAAcD,EAAWiT,mBAC9C/S,EAAM,aAAc,OAAQ,UAAW,CAAA,EACnC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,KAAA,CAAA,EAC7CoyD,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,KAAA,CAAA,E,EAEzD,CAAE6c,EAAgBulC,eAAe,yBAA0B,CAAEiQ,EAAoBoS,KAAK,CAAA,CAAA,EAAA,EACpF5nD,EAAgBulC,eAAe,aAAc,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EACpEF,EAAoBG,MAAM,CAAA,CAAA,EAAQH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GACnE51C,EAAgB0lC,eAAe,cAAc,KAAM,GAAA,C,EA+MrDxK,OA5MW,SAASsI,GACpB,OAAO6R,EAAQ,SAAUD,EAAWiT,mBAChC/S,EAAM,SAAU,OAAQ,SAAU9R,EAC9B,CAAC+R,EAAcG,GAAG,CAAC5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC3EP,EAAcI,MAAM,CAAC7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,E,EAExF,CAAC91C,EAAgBulC,eAAe,wBAAyB,CAACiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GAClH31C,EAAgB0lC,eAAe,QAAA,C,GAsMnCsQ,SAlMa,SAASxS,GACtB,OAAO6R,EAAQ,WAAYD,EAAWiT,mBAClC/S,EAAM,WAAY,OAAQ,SAAU9R,EAChC,CAAC+R,EAAcG,GAAG,CAAC5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACzDN,EAAcI,MAAM,CAAC7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAEtE,CAAC71C,EAAgBulC,eAAe,wBAAyB,CAACiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GAClH31C,EAAgB0lC,eAAe,UAAA,C,GA6LnC4iB,oBAzLyBjT,EAAQ,sBAAuBD,EAAWla,OACjEoa,EAAM,sBAAuB,OAAQ,SAAU,CAAA,EAC3C,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC7EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,E,EAEzF,CAAE91C,EAAgBulC,eAAe,wBAAyB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAA,GACpH31C,EAAgB0lC,eAAe,QAAA,C,EAoLjC6iB,YAjLgBlT,EAAQ,cAAeD,EAAWla,OAChDoa,EAAM,cAAe,OAAQ,SAAU,CAAA,EACnC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC7EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EACnFP,EAAcQ,iBAAiB,SAAU5yD,GAAS,OAAOA,EAAM0yD,OAAS,CAAC1yD,EAAM2yD,SAAA,EAAc,KAAM,KAAM,CAAA,CAAA,E,EAG/G,CAAE91C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAW5qC,IAAK83B,EAAqBhmC,OAAOQ,SAAA,EAAA,EACpF6C,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAW5qC,IAAK83B,EAAqBhmC,OAAOQ,SAAA,EAAA,GAC5F6C,EAAgB0lC,eAAe,QAAA,C,EAuKjC8iB,SApKanT,EAAQ,WAAYD,EAAWla,OAC1Coa,EAAM,WAAY,OAAQ,SAAU,CAAA,EAChC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC7EP,EAAcoO,WAAW,SAAUxgE,GAAS,OAAOA,EAAM2iD,aAAe2P,EAAWC,GAAGvyD,QACjFA,EAAM0yD,OAAS,CAAC1yD,EAAM2yD,UAAA,EAAe,KAAM,KAAM,CAAA,CAAA,E,EAG5D,CAAE91C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWC,GAAI/S,EAAqBhmC,OAAOC,MAAA,EAAA,EACnFoD,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAWC,GAAI/S,EAAqBhmC,OAAOC,MAAA,EAAA,GAC3FoD,EAAgB0lC,eAAe,QAAA,C,EA0JjC+iB,YAvJgBpT,EAAQ,cAAeD,EAAWla,OAChDoa,EAAM,cAAe,OAAQ,SAAU,CAAA,EACnC,CAAEC,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EACnFP,EAAcsO,cAAc,SAAU1gE,GAAS,OAAOA,EAAM2iD,aAAe2P,EAAWE,MAAMxyD,QACvFA,EAAM0yD,OAAS,CAAC1yD,EAAM2yD,UAAA,EAAe,KAAM,KAAM,CAAA,CAAA,E,EAG5D,CAAE91C,EAAgBulC,eAAe,iBAAkB,CACjDiQ,EAAoB+L,aAAa,CAAA,EAAO9L,EAAWE,MAAOhT,EAAqBhmC,OAAOM,SAAA,EAAA,EACtF+C,EAAgBulC,eAAe,wBAAyB,CACtDiQ,EAAoBhR,iBAAiB,CAAA,EAAOiR,EAAWE,MAAOhT,EAAqBhmC,OAAOM,SAAA,EAAA,GAC9F+C,EAAgB0lC,eAAe,QAAA,C,EA8IjC7nB,QA3IYw3B,EAAQ,UAAWD,EAAWv3B,QACxCy3B,EAAM,UAAW,OAAQ,SAAU,CAAA,EAC/B,CAAEC,EAAcG,GAAG,SAASxvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWC,GAAGvyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EACzGP,EAAcI,MAAM,SAASzvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWE,MAAMxyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EAC/GP,EAAcQ,iBAAiB,SAAS7vB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAW5qC,IAAI1nB,OAAS+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,EAAc,KAAM,KAAM,CAAA,CAAA,E,EAGvJ,CAAE91C,EAAgBulC,eAAe,eAC7B,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAOH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GAE1G/1C,EAAgB0lC,eAAe,UAAW,GAAA,C,EAkI5CgjB,IA/HQrT,EAAQ,MAAOD,EAAWv3B,QAChCy3B,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,SAASxvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWC,GAAGvyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EACzGP,EAAcI,MAAM,SAASzvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWE,MAAMxyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,E,EAGrH,CAAE91C,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB6I,OAAO,CAAA,CAAA,EAAA,EAC/Er+C,EAAgBulC,eAAe,UAAW,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACnGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAEjC51C,EAAgB0lC,eAAe,UAAW,GAAA,C,EAsH5CijB,IAnHQtT,EAAQ,MAAOD,EAAWv3B,QAChCy3B,EAAM,MAAO,OAAQ,SAAU,CAAA,EAC3B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,EAC5EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,E,EAGxF,CAAE91C,EAAgBulC,eAAe,wBAAyB,CAAEiQ,EAAoB6I,OAAO,CAAA,CAAA,EAAA,EACrFr+C,EAAgBulC,eAAe,UAAW,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACnGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAEjC51C,EAAgB0lC,eAAe,sBAAuB,GAAA,C,EA0GxDkjB,KAvGSvT,EAAQ,OAAQD,EAAWv3B,QAClCy3B,EAAM,OAAQ,OAAQ,SAAU,CAAA,EAC5B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,EAC5EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,E,EAGxF,CAAE91C,EAAgBulC,eAAe,WAAY,CAAEiQ,EAAoB6I,OAAO,CAAA,CAAA,EAAA,EACxEr+C,EAAgBulC,eAAe,WAAY,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACpGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAEjC51C,EAAgB0lC,eAAe,2BAA4B,GAAA,C,EA8F7DmjB,KA3FSxT,EAAQ,OAAQD,EAAWv3B,QACpCy3B,EAAM,OAAQ,OAAQ,SAAU,CAAA,EAC5B,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,EAC1EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAMC,UAAW,CAAA,CAAA,CAAA,E,EAG1F,CAAE91C,EAAgBulC,eAAe,+BAAgC,CAAEiQ,EAAoB6I,OAAO,CAAA,CAAA,EAAA,EAC1Fr+C,EAAgBulC,eAAe,WAAY,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EAClGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAErC51C,EAAgB0lC,eAAe,8BAA+B,GAAA,C,EAkF9DojB,IA/EQzT,EAAQ,MAAOD,EAAWv3B,QAChCy3B,EAAM,MAAO,OAAQ,QAAS,CAAA,EAC1B,CAAEC,EAAcG,GAAG,SAASxvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWC,GAAGvyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EACzGP,EAAcI,MAAM,SAASzvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWE,MAAMxyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,E,EAGrH,CAAE91C,EAAgBulC,eAAe,kBAAmB,CAAEiQ,EAAoB6I,OAAO,CAAA,CAAA,EAAA,EAC/Er+C,EAAgBulC,eAAe,UAAW,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACnGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAEjC51C,EAAgB0lC,eAAe,SAAA,C,EAsEjCqjB,MAnEU1T,EAAQ,QAASD,EAAWv3B,QACpCy3B,EAAM,QAAS,OAAQ,SAAU,CAAA,EAC7B,CAAEC,EAAcG,GAAG,SAASxvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWC,GAAGvyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EACzGP,EAAcI,MAAM,SAASzvB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAWE,MAAMxyD,OAAS,CAAC+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,CAAA,EAC/GP,EAAcQ,iBAAiB,SAAS7vB,GAAI,OAAOA,EAAE4f,aAAe2P,EAAW5qC,IAAI1nB,OAAS+iC,EAAE2vB,OAASz0D,EAAEmoC,YAAYrD,EAAE4vB,SAAA,CAAA,EAAc,KAAM,KAAM,CAAA,CAAA,E,EAGvJ,CAAE91C,EAAgBulC,eAAe,aAC7B,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAAOH,EAAoBO,iBAAiB,CAAA,CAAA,EAAA,GAE1G/1C,EAAgB0lC,eAAe,SAAA,C,EA2DjCsjB,cAxDkB,SAAUxlB,GAC5B,OAAO6R,EAAQ,gBAAiBD,EAAW6T,UACvC3T,EAAM,gBAAiB,OAAQ,SAAU9R,EACrC,CAAE+R,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EAC7EP,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,EAAOC,UAAW,CAAA,CAAA,CAAA,EACnFP,EAAcQ,iBAAiB,CAAEjQ,WAAY2P,EAAW5qC,IAAI1nB,KAAA,CAAA,E,EAGlE,CAAE6c,EAAgBulC,eAAe,oBAAqB,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAOF,EAAoBG,MAAM,CAAA,CAAA,EAC9GH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAC/B51C,EAAgB0lC,eAAe,gBAAA,C,GA+CnCwjB,aA3CiB,SAAU1lB,GAC3B,OAAO6R,EAAQ,MAAOD,EAAW6T,UAC7B3T,EAAM,MAAO,OAAQ,SAAU9R,EAC3B,CAAC+R,EAAcG,GAAG,CAAC5P,WAAY2P,EAAWC,GAAGvyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,EACzDN,EAAcI,MAAM,CAAC7P,WAAY2P,EAAWE,MAAMxyD,MAAO0yD,MAAO,CAAA,CAAA,CAAA,E,EAGtE,CAAC71C,EAAgBulC,eAAe,gCAAiC,CAACiQ,EAAoBE,GAAG,CAAA,CAAA,EACvFF,EAAoBG,MAAM,CAAA,CAAA,EAAOH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAChE51C,EAAgB0lC,eAAe,eAAA,C,GAmCnCyjB,cA/BkB9T,EAAQ,aAAcD,EAAW6T,UACjD3T,EAAM,aAAc,OAAQ,QAAS,CAAA,EACjC,CAAEC,EAAcG,GAAG,CAAE5P,WAAY2P,EAAWC,GAAGvyD,KAAA,CAAA,EAC7CoyD,EAAcI,MAAM,CAAE7P,WAAY2P,EAAWE,MAAMxyD,KAAA,CAAA,E,EAGzD,CAAE6c,EAAgBulC,eAAe,WAAY,CAAEiQ,EAAoBE,GAAG,CAAA,CAAA,EAAQF,EAAoBG,MAAM,CAAA,CAAA,EACtGH,EAAoBI,SAAS,CAAA,CAAA,EAAA,GAC/B51C,EAAgB0lC,eAAe,yBAAA,C,0IAzNrCx1C,QACKC,OAAO,8BAAA,EACP6R,QAAQ,qBAAsBomD,CAAA,C,ICLrC,WACE,aAEAl4D,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,WAEb,WAEE,MAAO,CACLizC,cAAgB,SAAS9vD,GAAK,OAAOsX,OAAOtX,CAAA,EAAGuX,OAAO,cAAA,CAAA,EACtDksC,eAAgB,SAAUzjD,GAAK,OAAOsX,OAAOtX,CAAA,EAAGuX,OAAO,aAAA,CAAA,EACvDs7C,UAAW,SAAU7yD,GAAK,OAAOsX,OAAOtX,CAAA,EAAGuX,OAAO,UAAA,CAAA,EAClDu7C,4BAA6B,SAAU9yD,GAAK,OAAOsX,OAAOtX,CAAA,EAAGuX,OAAO,iBAAA,CAAA,EACpE+rC,qBAAsB,SAAStjD,GAAK,OAAOsX,OAAOtX,CAAA,EAAGuX,OAAO,YAAA,CAAA,C,EATvC,C,ICJ3B,WACE,aAEA,CACI,WACA,UACFrB,QA2CF,SAAyB+D,GACvB,IAAIlW,EAAO,MAAQkW,EAAO,SAC1BlP,QACKC,OAAO,mCAAA,EACPqN,UAAUtU,EAGf,WACE,MAAO,CACLwX,MAAQ,CACNjP,QAAU,IACV23D,WAAa,G,EAEfl4D,WAAakO,EAAO,mBACpBoS,iBAAmB,CAAA,EACnBvgB,YAAc,6BAA+BmO,EAAO,kB,EAXnC,C,CA/Cb,EAEVlP,QACKC,OAAO,mCAAA,EACPqN,UAAU,0BA+Bf,WACE,MAAO,CACLiD,SAAU,IACVxP,YAAc,2DACdyP,MAAO,CAAA,C,EAnC+B,EACrCxP,WAAW,qBAIhB,WACE,IAAIsT,EAAKtjB,KACTsjB,EAAGsyB,iBAAmBtyB,EAAG/S,SAAW+S,EAAG/S,QAAQQ,YAAA,EAC/CuS,EAAG6kD,oBAAsB,WACpB7kD,EAAGsyB,kBACJtyB,EAAG/S,QAAQ63D,YAAY9kD,EAAGsyB,iBAAiBlwB,KAAA,EAC3CpC,EAAG4kD,WAAW,CAACphD,SAAUxD,EAAGsyB,gBAAA,CAAA,GAE5BtyB,EAAGsyB,iBAAmBtyB,EAAG/S,SAAW+S,EAAG/S,QAAQQ,YAAA,C,EAZf,EACjCf,WAAW,mBAgBhB,WACE,IAAIsT,EAAKtjB,KACTsjB,EAAGgC,eAAiBhC,EAAG/S,SAAW+S,EAAG/S,QAAQS,kBAAA,EAC7CsS,EAAG+kD,kBAAoB,WAClB/kD,EAAGgC,gBACJhC,EAAG/S,QAAQ+3D,kBAAkBhlD,EAAGgC,eAAeI,KAAA,EAC/CpC,EAAG4kD,WAAW,CAACv3D,OAAQ2S,EAAGgC,cAAA,CAAA,GAE1BhC,EAAGgC,eAAiBhC,EAAG/S,SAAW+S,EAAG/S,QAAQS,kBAAA,C,EAxBf,C,ICZtC,WACE,aA8BA,SAASu3D,EAAgBC,GACvB,IACIC,EADKzoE,KACU8pC,OAAO94B,kBAAA,GADjBhR,KAEF8pC,OAAO94B,kBAAA,EAAoBiW,iBAFzBjnB,KAGN0oE,cAA8B,QAAdD,EAAsBD,EAAaC,EAH7CzoE,KAIN2oE,gBAJM3oE,KAIe8pC,OAAO1hB,kBAAA,C,0BAjCjC,CACE,WACA,UACAjO,QAiCF,SAAyB+D,GACvB,IAAIlW,EAAO,MAAQkW,EAAO,QAC1BlP,QACKC,OAAO,kBAAA,EACPqN,UAAUtU,EAGf,WACE,MAAO,CACLwX,MAAQ,CACNsqB,OAAS,IACTkO,SAAW,G,EAEbhoC,WAAakO,EAAO,kBACpBoS,iBAAmB,CAAA,EACnBvgB,YAAc,4BAA8BmO,EAAO,Y,EAXlC,C,CArCb,EAEVlP,QACKC,OAAO,kBAAA,EACPqN,UAAU,yBAKf,WACE,MAAO,CACLiD,SAAU,IACVxP,YAAc,yDACdyP,MAAO,CAAA,C,EAT8B,EACpCxP,WAAW,oBAahB,WACWhQ,KACN0oE,cADM1oE,KACa8pC,OAAO/4B,YAAA,GADpB/Q,KACwC8pC,OAAO/4B,YAAA,EAAcE,SAAA,EAD7DjR,KAEN2oE,gBAFM3oE,KAEe8pC,OAAO3hB,oBAAA,C,CAhBI,EAChCnY,WAAW,kBAAmBu4D,CAAA,EAC9Br5D,SAAS,aAAc,aAAA,C,ICb9B,WACE,aAmBA,SAAS05D,EAAyBx8D,GACvBpM,KACN6oE,2BAA6Bz8D,EAAKlC,IAAI,oBAAA,C,oBAnB3C8E,QACKC,OAAO,gCAAA,EACPqN,UAAU,uBAGf,WACE,MAAO,CACLiD,SAAU,IACVvP,WAAW,iCACXD,YAAc,qDACdugB,iBAAkB,CAAA,EAClB9Q,MAAQ,CACNspD,kBAAkB,G,GAVe,EAClC94D,WAAW,2BAA4B44D,CAAA,C,ICN9C,WACE,aA4CA,SAASG,EAAmBp1C,GAC1B,IAAIrQ,EAAKtjB,KACTsjB,EAAG0lD,UAAY,SAAUz7B,GACH5Z,EAAUb,KAAK,CACjCopC,UAAW54C,EAAG4U,kBACdnoB,YAAa,oDACbC,WAAY,0BACZwyB,aAAc,KACd+K,KAAMA,EACNn9B,QAAS,CACPpD,cAAe,WACb,OAAOsW,EAAGtW,a,EAEZ+E,OAAQ,WACN,OAAOuR,EAAGvR,M,EAEZuC,OAAQ,WACN,OAAOgP,EAAGhP,M,MAOpB,SAAS20D,EAAwBj8D,EAAek8D,EAAmBn3D,EAAQuC,EAAQjI,EAAWrC,EAAQm/D,EAAyBC,GAC7H,IAAI9lD,EAAKtjB,KACTsjB,EAAGtW,cAAgBA,EACnBsW,EAAG+lD,mBAAqB,WACtB,OAAO/lD,EAAGvR,OAAOrQ,QAAUynE,C,EAE7B7lD,EAAGgmD,gBAAkB,WACnB,OAAOhmD,EAAGvR,OAAOrQ,OAAS0nE,C,EAE5B9lD,EAAGvR,OAASA,EACZuR,EAAGhP,OAASA,EACZgP,EAAGimD,OAAS,WACVL,EAAkBM,QAAQ,QAAA,C,EAE5BlmD,EAAGmmD,eAAiB,SAAS3jD,GAC3BxC,EAAGtW,cAAgB8Y,EACnBxC,EAAGhP,OAAOwR,CAAA,EACVojD,EAAkBM,QAAQ,QAAA,C,EAE5BlmD,EAAGomD,cAAgB,SAAS5jD,GAC1B,OAAOA,IAAUxC,EAAGtW,a,EAEtBsW,EAAGsiC,SAAW,SAAU+jB,EAAOC,EAAQC,GACrCvmD,EAAGtW,cAAgB28D,EACnBrmD,EAAGhP,OAAOgP,EAAGtW,aAAA,EACbk8D,EAAkBM,QAAQ,QAAA,C,EAE5BlmD,EAAGwmD,aAAe,SAASt/C,GACzB,OAAO,SAAU1E,GACf,MAAO,CAAC0E,GAA6F,GAAnF1E,EAAM9d,KAAKqmD,OAAO,EAAG7jC,EAAO9oB,MAAA,EAAQL,YAAA,EAAc2kB,QAAQwE,EAAOnpB,YAAA,CAAA,C,mKA/FzF2N,QACKC,OAAO,6BAAA,EACPqN,UAAU,oBAOf,WACE,MAAO,CACLiD,SAAU,IACVvP,WAAa,2BACbD,YAAc,+CACdugB,iBAAmB,CAAA,EACnB9Q,MAAQ,CACNxS,cAAgB,IAChB+E,OAAQ,IACRuC,OAAQ,G,GAhBsB,EAC/BtE,WAAW,qBAAsB+4D,CAAA,EACjC/4D,WAAW,0BAA2Bi5D,CAAA,EACtC3sD,UAAU,6BAkBf,WACE,MAAO,CACLiD,SAAU,IACVyhB,QAAQ,UACRE,KAAM,SAAU1hB,EAAOytB,EAASof,GAC9B,IAAI0d,EAAY98B,EAAQ,GACrB88B,IACGC,EAAe9pE,EAAEwJ,IAAI8V,EAAO6sC,EAAMqB,OAAA,EACtCqc,EAAU3lC,MAAA,EACV2lC,EAAU9nE,MAAQ+nE,EAAahiE,KAC/B+hE,EAAUxnE,OAAA,EACVwnE,EAAUE,QAAU,WAClBF,EAAUxnE,OAAA,C,KA9BwB,EACvC2M,SAAS,0BAA2B,GAAA,EACpCA,SAAS,uBAAuB,EAAA,C,ICVvC,WACE,aAYA,SAASg7D,EAAsB91D,EAAQ+1D,EAAU/oC,EAAQgpC,GACvD,IAAIC,EAAa93B,EAAOvyC,KACxBA,KAAK6/B,KAAO,SAASyqC,IACnBD,EAAcC,GACFxkB,QAAU,WAChB5lD,EAAEmoC,YAAYj0B,EAAOimB,gBAAA,GACvBgwC,EAAYxkB,cAAczxC,EAAOimB,gBAAA,EAGnCkY,EAAKuT,QAAQukB,EAAYE,UAAA,C,GAK7Bn2D,EAAOo2D,WAAa,SAASr/D,GAC3B,IAAIs/D,EAAUt/D,EACXjL,EAAEwqE,SAASv/D,CAAA,IACZiJ,EAAOimB,iBAAmBowC,EAE1BJ,EAAYvkB,QAAA,E,EAIhB1xC,EAAOu2D,YAAc,SAAUC,GAC7B,IAAI10B,EAAa,GAUjB,MATY,IAAR00B,EACF10B,EAAa,yBACJ00B,GAAQR,EAAoBS,KACrC30B,EAAa,iBACJk0B,EAAoBS,KAAOD,GAAQA,GAAQR,EAAoBU,IACxE50B,EAAa,mBACJ00B,EAAOR,EAAoBU,MACpC50B,EAAa,iBAERA,C,EAKX,SAAS60B,EAAiBX,GACxB,MAAM,CACJ7qD,SAAU,KACVC,MAAM,CACJwrD,sBAAuB,G,EAEzBhqC,QAAS,CAAC,mBAAmB,WAC7BhxB,WAAY,uBACZD,YAAa,qDACbmxB,KAAM,SAAS1hB,EAAOyrD,EAAI/pE,EAAMmgC,GAC9B,IAAI6oC,EAAuB7oC,EAAM,GAAIgpC,EAAchpC,EAAM,GACrD6pC,EAAkBhqE,EAAKiqE,yBAA2D,IAAhCjqE,EAAKiqE,wBACvD3tD,KAAKC,MAAMvc,EAAKiqE,uBAAA,EAAyBf,EAAoB7lD,QAejE,SAAS6mD,EAAeC,GACtB7rD,EAAM6a,iBAAmC,OAAfgxC,EAAuBA,EAAaH,C,CAdhE1rD,EAAM8rD,uBAAyB9rD,EAAMwrD,sBAErCd,EAAqBrqC,KAAKwqC,CAAA,EAC1BH,EAAqBpkB,QAAU,SAASulB,GACtCD,EAAeC,CAAA,C,EAMfD,EAAeF,CAAA,C,oGAzEvBl8D,QAAQC,OAAO,gCAAA,EACVqN,UAAU,mBAAmByuD,CAAA,EAC7B/6D,WAAW,uBAAuBk6D,CAAA,EAClCh7D,SAAS,sBAAuB,CAC/BqV,QAAS,WACTumD,IAAI,CAAC,GACLD,KAAK,E,MCTb,WACE,aAkCA,IAA2C7iE,EAhC3CgH,QACKC,OAAO,6BAAA,EACPqN,UAAU,oBAkBf,WACE,MAAO,CACLiD,SAAW,IACX3I,QAAU,CAAA,EACVklD,WAAa,CAAA,EACbxrC,iBAAmB,CAAA,EACnBtgB,WAAa,2BACbD,YAAc,+CACdyP,MAAQ,E,EA1BwB,EAC/BxP,WAAW,qBAQhB,WACWhQ,KAENurE,SAAW,SAAUC,GACtBxrE,KAAKyrE,UAAYD,C,EAZiB,EACjClvD,UAAU,8BA8Cf,WACE,MAAO,CACL0kB,QAAU,qBACVE,KAAO,SAAU9sB,EAAQ+sB,EAAKC,EAAQsqC,GACpCt3D,EAAO1F,OACH,WACE,OAAOg9D,EAAkBtqC,EAAOuqC,4B,EAElC,SAAU/8B,GACI,MAARA,IACFzN,EAAIyN,KAAK,EAAA,EACTzN,EAAIpgC,OAAO6tC,CAAA,E,KAzDqB,EA4BH5mC,EAxBT,QAyBhCgH,QACGC,OAAO,6BAAA,EACLqN,UAAU,oBAAsBtU,EAAM,WACrC,MAAO,CACLuX,SAAW,IACXu8C,WAAa,CAAA,EACblsD,SAAW,GACXgH,QAAU,CAAA,EACVoqB,QAAU,qBACVE,KAAO,SAAU9sB,EAAQ+sB,EAAKyqC,EAAOF,EAAmB5P,GACtD4P,EAAkB,MAAQ1jE,GAAM8zD,EAAA,CAAA,C,QC9C9C,WACE,aAEA9sD,QACKC,OAAO,8BAAA,EACPqN,UAAU,qBAGf,WACE,MAAO,CACLiD,SAAU,IACV3I,QAAS,CAAA,EACT4I,MAAM,CAAA,EAEN0hB,KAAM,SAAS9sB,EAAOlT,GACpB,IAAI2qE,EAAW,KAEXvoD,EAAKlP,EAAOkP,GAChBA,EAAGwoD,WAAa,SAAU3gE,GACxB,OAAO0gE,IAAa1gE,C,EAGtBmY,EAAGyoD,eAAiB,SAAU5gE,GAExB0gE,EADAvoD,EAAGwoD,WAAW3gE,CAAA,EACH,KAEAA,C,EAGjBmY,EAAGsiC,SAAW,SAASz6C,GACrBmY,EAAGyoD,eAAe5gE,CAAA,EACPA,EACDV,UAAmC,EAAvBU,EAAKV,SAAS/I,QAClC4hB,EAAGvV,QAAQ5C,CAAA,C,EAGfmY,EAAG0oD,aAAe,SAAS7gE,GACzBmY,EAAGsiC,SAASz6C,CAAA,EACRA,EAAKV,UAAmC,EAAvBU,EAAKV,SAAS/I,SAC7BuqE,EAAuB/rE,EAAE0N,KAAKzC,EAAKV,SAAU,SAAUW,GACzD,OAAOkY,EAAG1Z,UAAUwB,CAAA,C,KAGpBkY,EAAGvV,QAAQk+D,CAAA,C,EAIjB3oD,EAAGiP,WAAa,SAAUpnB,GACxB,OAAOmY,EAAGnK,SAAShO,CAAA,C,IA3CU,C,ICLvC,WACE,aAUA,SAAS+gE,EAAcrB,EAAMC,GAC3B,OAAO,SAAUqB,GACf,GAAIA,EACF,MAAqB,QAAbA,EAAuBtB,EAAKC,C,EAM1C,SAAS11B,EAAUy1B,EAAMC,EAAKr+D,GAE5B,IAAIwvC,EAAa,CAAC,CAAChjC,IAAK,iBAAkBhX,MAAOwK,EAAgB,0BAAA,CAAA,EAC/D,CAACwM,IAAK,mBAAoBhX,MAAOwK,EAAgB,4BAAA,CAAA,EACjD,CAACwM,IAAK,gBAAiBhX,MAAOwK,EAAgB,yBAAA,CAAA,EAC9C,CAACwM,IAAK,yBAA0BhX,MAAOwK,EAAgB,iCAAA,CAAA,GAEzD,MAAO,CACLyvC,QAIF,WACE,OAAOD,C,EAJP9F,SAOF,SAAkBy0B,GAChB,IAAI10B,EAAa,GACN,IAAR00B,EACD10B,EAAa+F,EAAW,GAAGhjC,IACV4xD,GAARD,EACT10B,EAAa+F,EAAW,GAAGhjC,IACX2xD,EAAPC,GAAuBC,GAARF,EACxB10B,EAAa+F,EAAW,GAAGhjC,IAClB2xD,EAAOE,IAChB50B,EAAa+F,EAAW,GAAGhjC,KAE7B,OAAOi9B,C,uEA5CXlnC,QACKC,OAAO,kBAAA,EACP6R,QAAQ,YAAas0B,CAAA,EACrBlmC,SAAS,OAAO,EAAA,EAChBA,SAAS,MAAM,CAAC,EAAA,EAChBnK,OAAO,gBAAiBmnE,CAAA,C,ICR/B,WACE,aAEAl9D,QACKC,OAAO,kBAAA,EACPqN,UAAU,iBAEf,WACE,MAAO,CACLiD,SAAU,IACV3I,QAAS,CAAA,EACT4I,MAAO,CACLy8B,WAAY,QACZmwB,YAAa,G,EAEfr8D,YAAa,wC,EAVgB,C,ICLnC,WACE,aAKA,SAASs8D,EAAY5sD,EAAa7B,EAAU0uD,EAAkBC,EAAcC,EAAwBC,GAElG,SAASC,EAAYC,EAAcC,GAC7B/nC,EAAY3kC,EAAEysE,CAAA,EAAc/+D,KAAK,CAAC5F,KAAQ4kE,CAAA,CAAA,EAC9C,OAAO/nC,EAAYA,EAAU/P,OAAS,E,CAOxC,SAASzsB,EAAQjG,EAAMyqE,EAAmB9kC,GACxCA,EAAKzpB,WAAaguD,EAAiBI,EAAYtqE,EAAM,YAAA,EAAeyqE,CAAA,EAAmB/3C,OAAA,EACvFiT,EAAKp3B,OAAS47D,EAAaG,EAAYtqE,EAAM,QAAA,EAAWyqE,CAAA,EAAmB/3C,OAAA,EAC3EiT,EAAK3yB,UAAYo3D,EAAuBE,EAAYtqE,EAAM,WAAA,EAAcyqE,EACpE,KAAA,EAAO/3C,OAAA,EACXiT,EAAK+kC,qBAAuBN,EAAuBE,EAAYtqE,EAAM,uBAAA,EACjEyqE,EAAmB,yBAAA,EAA2B/3C,OAAA,EAClDiT,EAAKqa,YAAcqqB,EAAkBhtD,EAAcotD,CAAA,EAAmB/3C,OAAA,EACtEiT,EAAKglC,SAXqB,GADPC,EAYSN,EAAYtqE,EAAM,cAAA,GAX7BV,OAAa,sBAAwBxB,EAAEmrB,KAAK2hD,CAAA,EAD/D,IAaMvb,EAAkBvxD,EAAEkG,IAAIlG,EAAE0G,IAAI8lE,EAAYtqE,EAAM,aAAA,EAAgBwb,EAAS2pC,oBAAA,CAAA,EACzE0lB,EAAmBrvD,EAAS2pC,qBAAqBhsC,OAAOk2C,CAAA,EAAgBC,SAAS,EAAG,QAAA,CAAA,EAOxF,OANA3pB,EAAKupB,UAAY,CACfjyB,UAAWwtC,EAAkBxtC,WAAY4tC,EACzC1tC,QAASstC,EAAkBttC,SAAWkyB,C,EAExC1pB,EAAK0pB,eAAiBA,EACtB1pB,EAAKrpB,YAAcmuD,EAAkBnuD,aAAe,CAAA,EAC7CqpB,C,CAeT,OANA,SAAS3kB,EAAOhhB,EAAMyqE,GACpB,GAAI,EAAE7sE,gBAAgBojB,GAAS,OAAO,IAAIA,EAAOhhB,EAAMyqE,CAAA,EACvDxkE,EAAQjG,EAAMyqE,EAAmB7sE,IAAA,EACjCA,KAAKgO,MAAQ,WAAY,OAAO3F,EAAQjG,EAAM,GAAIpC,IAAA,CAAA,C,uHA3CtDgP,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,uBAAwBurD,CAAA,C,ICJvC,WACE,aASA,SAASa,EAAYv5C,EAAWw5C,EAAWvvD,EAAUwvD,EAAU/X,GAE7D,MAAO,CACLz9B,UAGF,WACE,IAAIy1C,EAAar+D,QAAQi+B,QAAQkgC,EAAU,GAAGnwB,cAAc,mBAAA,CAAA,EACxDswB,EAAgB35C,EAAUb,KAAK,CACjCya,KAAM,KACNx9B,YAAa,gDACbw9D,eAAgB,yBAChBC,SAAUH,EACVr9D,WAAA,CAAA,SAAA,UAAA,SAAA,kBAAY,SAAUoE,EAAQ8K,EAASlV,EAAQ6C,GAC7C,IAAIyW,EAAKlP,EAELq5D,EAAa,SAAS1oE,GAAU,OAAO7E,EAAE0N,KAAK7I,EAAQ,CAACwtB,WAAY,CAAA,CAAA,CAAA,CAAA,EAyCnEm7C,GAjCJpqD,EAAGqqD,kBAAoB,SAASC,GANX,IAASv3B,EAAKw3B,EAALx3B,EAON/yB,EAAGve,OAAOq9C,YAPCyrB,EAOYD,EAN7C1tE,EAAE0G,IAAIyvC,EAAK,SAAU7a,GACnBA,EAAIjJ,WAAaiJ,EAAIxzB,OAAS6lE,EAAe7lE,I,IAQjDsb,EAAGwqD,cAAgB,SAASC,GAE1B,OADAA,EAAYC,cAAgB,CAAA,EACrB9tE,EAAEia,QA0EX,SAAS8zD,EAAcF,GACrB,OAAO7tE,EAAEid,OAAO4wD,EAAYj5C,OAAQ,SAAU4Q,EAAKlK,GAMjD,OALAkK,EAAI39B,KAAKyzB,CAAA,EACNA,EAAI1G,QAAU0G,EAAI1G,OAAOpzB,SACtB0J,EAAQ6iE,EAAczyC,CAAA,EAC1BkK,EAAMA,EAAIv9B,OAAOiD,CAAA,GAEZs6B,C,EACN,EAAA,C,EAlF4BqoC,CAAA,EAAc,SAASt8D,GACpDA,EAAE8gB,WAAaw7C,EAAYx7C,WAC3B9gB,EAAEu8D,cAAgB,CAAA,C,IAItB1qD,EAAG4qD,mBAAsB,SAAS1+D,EAAQ+iC,GACxCjvB,EAAGwqD,cAAcv7B,CAAA,EACjB47B,EAAoB3+D,CAAA,C,EAGtB8T,EAAGimD,OAAS,WACV+D,EAAcjzB,MAAA,C,EAGhB/2B,EAAG8qD,aAAe,WAChBlvD,EAAQmvD,UAAU/qD,EAAGve,MAAA,EACrB2oE,EAAA,EACApqD,EAAGimD,OAAA,C,EAGLjmD,EAAGtV,MAAQ,WACTkR,EAAQovD,YAAA,EACRZ,EAAA,EACApqD,EAAGimD,OAAA,C,EAGkB,WACrB,IAAIgF,EAAervD,EAAQI,gBAAA,EACvBZ,EAAcQ,EAAQsyC,UAAA,EAAY9yC,YAClCiB,EAAczf,EAAEiF,MAAMopE,EAAa5uD,YAAa4uD,EAAa3R,WAAY,CAACl+C,YAAaA,CAAA,CAAA,EAC3F7R,EAAgBu7C,+BAA+BzoC,CAAA,EAC/C3V,EAAOL,GAAG,IAAKgW,CAAA,C,GAqDjB,SAASwuD,EAAoB3+D,GACxBA,EAAOslB,QAAUtlB,EAAOslB,OAAOpzB,SAChCxB,EAAEia,QAAQ3K,EAAOslB,OAAQq5C,CAAA,EACzB3+D,EAAO+iB,WAAaryB,EAAEsV,KAAKhG,EAAOslB,OAAQ,CAACvC,WAAY,CAAA,CAAA,CAAA,EACvD/iB,EAAOw+D,cAAgBx+D,EAAO+iB,YAAcryB,EAAEsV,KAAKhG,EAAOslB,OAAQ,SAAUnkB,GACtE,MAAO,CAACA,EAAO4hB,YAAc5hB,EAAOq9D,a,IA/C5C1qD,EAAGve,OAASma,EAAQsyC,UAAA,EACpBluC,EAAGkrD,aAAe5wD,EAAS8pC,eAAe0lB,CAAA,EAC1C9pD,EAAGoiC,QAAU9nC,EAAS8pC,eAAepkC,EAAGve,OAAO0sD,cAAA,EAC/CnuC,EAAGve,OAAOusD,UAAUjyB,UAAYzhB,EAAS8pC,eAAepkC,EAAGve,OAAOusD,UAAUjyB,SAAA,EAC5E/b,EAAGve,OAAOusD,UAAU/xB,QAAU3hB,EAAS8pC,eAAepkC,EAAGve,OAAOusD,UAAU/xB,OAAA,EACjDjc,EAAGve,OAAOq9C,YAT/BjoC,QAAQ,SAASqhB,GAAKA,EAAIxzB,KAAO9H,EAAEuuE,WAAWjzC,EAAIxzB,IAAA,CAAA,CAAA,EAUtDsb,EAAGve,OAAO6oE,oBAAsBH,EAAWnqD,EAAGve,OAAOq9C,WAAA,EACrD9+B,EAAGorD,kBAAoB,GAClBxuE,EAAE+1C,QAAQ3yB,EAAGve,OAAO4L,MAAA,GACvB2S,EAAGorD,kBAAkB3mE,KAAK,CACxBhD,OAAQ,SAAU4pE,YAAa,CAAA,EAC/B/+D,SAAU,mD,GAGT1P,EAAE+1C,QAAQ3yB,EAAGve,OAAOuZ,UAAA,GACvBgF,EAAGorD,kBAAkB3mE,KAAK,CACxBhD,OAAQ,aAAc4pE,YAAa,CAAA,EACnC/+D,SAAU,mD,GAId0T,EAAG1K,kBAAoBsG,EAAQsH,aAAA,EAC/BlD,EAAGorD,kBAAkB3mE,KAAK,CACxBhD,OAAQ,YAAa4pE,YAAa,CAAA,EAClC/+D,SAAU,sD,GAGZ1P,EAAEqI,KAAK+a,EAAGve,OAAOuZ,WAAY,SAAUA,GAAc6vD,EAAoB7vD,CAAA,CAAA,CAAA,EACzEpe,EAAEqI,KAAK+a,EAAGve,OAAO4L,OAAQ,SAAUA,GAAUw9D,EAAoBx9D,CAAA,CAAA,CAAA,C,KA0BvE,OAAO28D,C,GAgBX,SAASsB,EAA0B1B,GACjC,IAEII,EACAuB,EAAS,CAAA,EAHJ7uE,KAKNgpE,UAAY,WACR6F,EAGHvB,GAAiBA,EAAcjzB,MAAA,EAF/BizB,EAAgBJ,EAAYt1C,UAAA,EAI9B01C,EAAcuB,OAAOnhE,KAAK,WAAcmhE,EAAS,CAAA,CAAA,CAAA,EACjDvB,EAAcwB,OAAOphE,KAAK,WAAcmhE,EAAS,CAAA,CAAA,CAAA,C,gHAnKrD7/D,QAAQC,OAAO,8BAAA,EACVqN,UAAU,2BA0If,WACE,MAAO,CACLiD,SAAU,IACVC,MAAQ,CAAA,EACRzP,YAAc,2CACdC,WAAa,kCACbsgB,iBAAkB,CAAA,C,EAhJqB,EACtCxP,QAAQ,cAAeosD,CAAA,EACvBl9D,WAAW,4BAA6B4+D,CAAA,C,ICN/C,WACE,aAKA,SAAS1vD,EAAQ3S,EAAcwiE,EAAsBnxD,GAgBnD,IAAI7Y,EAAS,GAEb,MAAO,CACLysD,UAAWA,EACX8c,YAsBF,WAEE,OADAvpE,EAASA,EAAOiJ,MAAA,EACTwjD,EAAA,C,EAvBPlyC,gBA2BF,WACE,IAAI0vD,EAAmBjqE,EAAO,WAAckqE,EAAoBl+D,EAAYhM,EAAOuZ,UAAA,EAAYrc,MAAA,CAAA,EAAW,GACtGitE,EAAqB,GACrBC,EAAoB,GACpBC,EAAoB,GACpBx2D,EAAoB,GAEpB1Y,EAAE+1C,QAAQlxC,EAAO4L,MAAA,IACnBu+D,EAAqBG,EAAwBtqE,EAAO4L,OAAQ,CAAA,EAC5Dw+D,EAAoBE,EAAwBtqE,EAAO4L,OAAQ,CAAA,EAC3Dy+D,EAAoBC,EAAwBtqE,EAAO4L,OAAQ,CAAA,GAEzDzQ,EAAE+1C,QAAQlxC,EAAOqQ,SAAA,IACnBwD,EAAoB02D,EAAmB,GAIzC,IAAI1S,EAAa,CAACxa,YAAaliD,EAAE05B,UAAU15B,EAAEmrB,KAAKkkD,EAAUx+D,EAAYhM,EAAOq9C,WAAA,CAAA,CAAA,CAAA,CAAA,EAC3EziC,EAAczf,EAAEiF,MAAM,CAACk6B,UAAWzhB,EAAS2pC,qBAAqBxiD,EAAOusD,UAAUjyB,SAAA,CAAA,EACjF,CAACE,QAAS3hB,EAAS2pC,qBAAqBxiD,EAAOusD,UAAU/xB,OAAA,CAAA,EACzD,CAACjhB,WAAY0wD,CAAA,EACb,CAACxwD,QAAS2wD,CAAA,EACV,CAAC1wD,SAAU2wD,CAAA,EACX,CAAC7wD,UAAW2wD,CAAA,EACZt2D,EACA7T,EAAOyqE,uBAAA,EAEX,OAAOtvE,EAAEiF,MAAM,CAACwa,YAAaA,CAAA,EAAc,CAACi9C,WAAYA,CAAA,CAAA,C,EArDxDyR,UAYF,SAAmBoB,GACjB1qE,EAAS0qE,C,EAZTpwD,aAMF,SAAsBqwD,EAAW7C,GAE/B,OADA9nE,EAASgqE,EAAqBW,EAAW7C,CAAA,EAClCrb,EAAA,C,EAPPlL,UAqGF,SAAmBqpB,GACjB,OAAOC,EAAgB7qE,EAAO4L,OAAQg/D,CAAA,C,EArGtCjpB,eAwGF,WACE,OAAOuoB,EAAoBlqE,EAAOuZ,UAAA,C,EAxGlCkI,aAAc8oD,C,EAYhB,SAAS9d,IACP,OAAOxiD,QAAQyN,KAAK1X,CAAA,C,CA6CtB,SAASuqE,IACP,IAAIO,EAAc9qE,EAAO2Z,YAAc3Z,EAAO+nE,qBAAuB/nE,EAAOqQ,UACxEA,EAAYlV,EAAEmrB,KAAKta,EAAY8+D,CAAA,EAAa5tE,MAAA,CAAA,EAC5C0S,EAAWzU,EAAEmrB,KAAKta,EAAYqE,EAAU0f,MAAA,EAAQ7yB,MAAA,CAAA,EACpD,MAAO,CACLqT,WAAYF,EAAUpN,KACtB2M,SAAUA,EAAS3M,KACnB8rD,eAAgB5zD,EAAEmrB,KAAKta,EAAY4D,EAASmgB,MAAA,EAAQ7yB,MAAA,CAAA,EAAS+F,I,EAIjE,SAASunE,EAAUl5B,GACjB,OAAOn2C,EAAEm2C,CAAA,EAAKzvC,IAAI,SAAS6K,GAAG,OAAOA,EAAEzJ,IAAA,CAAA,EAAO/F,MAAA,C,CAGhD,SAASgtE,EAAoBa,GAC3B,OAAO5vE,EAAE+K,QAAQ6kE,EAAa,SAAUxxD,GACtC,OAAkC,EAA3BA,EAAWwW,OAAOpzB,OAAaxB,EAAE0G,IAAImK,EAAYuN,EAAWwW,MAAA,EAAQ7yB,MAAA,EAAS,SAAU8tE,GAC5F,OAAOzxD,EAAWtW,KAAO,IAAM+nE,EAAc/nE,I,GAC1CsW,EAAWtW,I,GAIpB,SAAS4nE,EAAgBj/D,EAAQg/D,GAC/B,OAAoB,EAAjBA,EAEMC,EADY1vE,EAAE+K,QAAQ0F,EAAQ,QAAA,EACAg/D,EAAiB,CAAA,EAG/Ch/D,C,CAGX,SAAS0+D,EAAwB1+D,EAAQg/D,GAEvC,OAAOJ,EAAUx+D,EADE6+D,EAAgBj/D,EAAQg/D,CAAA,CACd,CAAA,C,CAG/B,SAAS5+D,EAAYslC,GACnB,OAAOn2C,EAAEm2C,CAAA,EAAKtxC,OAAO,CAACwtB,WAAY,CAAA,CAAA,CAAA,C,+DA7HtCvjB,QAAQC,OAAO,8BAAA,EACV+O,QAAQ,UAAWkB,CAAA,C,ICJ1B,WACE,aAMA,SAASy/C,EAAQrK,GAEf,MAAO,CACL0L,iBAQF,SAA0B1d,GACxB,MAAO,CACLA,QAASA,EACT1yC,SAAU,qD,GAVZwwD,cAcF,SAAuB9d,GACrB,MAAO,CACLA,QAASA,EACT1yC,SAAU,kD,GAhBZogE,uBAoBF,SAAgC1tB,GAC9B,MAAO,CACLA,QAASA,EACT1yC,SAAU,2D,GAtBZqgE,WA0BF,SAAoB3tB,GAClB,MAAO,CACLA,QAASA,EACT1yC,SAAU,+C,GA5BZsgE,mBAgCF,SAA4B5tB,GAE1B,MAAO,CACLA,QAASA,EACT1yC,SAAU,uD,GAnCZugE,sBAwCF,SAA+B7tB,EAAS8tB,EAAWC,EAAWC,GAC5D,MAAO,CACLhuB,QAASA,EACT8tB,UAAWA,EACXC,UAAWA,EACXE,UAAWD,C,sCAzDjBthE,QACKC,OAAO,8BAAA,EACP6R,QAAQ,UAAW69C,CAAA,C,ICL1B,WACE,aAwBA,SAAS6R,EAA4BjvB,GAEnC,IAAIj+B,EAAKtjB,KA6BT,SAASywE,EAAMruE,EAAMsjB,GACnB,MAAO,CACLA,MAAOA,EACPzjB,MAAOG,EAAKsjB,EAAMk/B,WAAW3iD,QAAUG,EAAKsjB,EAAMk/B,WAAW3iD,OAAOA,K,EA9BxEqhB,EAAGitD,UAAA,EAAY7iE,KAAK,SAAUtL,GAS9B,IAAqCguE,EAAWC,EAAWxV,EAErDz4D,EAVJkhB,EAAGmtD,OAQgCL,EAP/B9sD,EAAG8sD,UAOuCC,EAN1C/sD,EAAG+sD,UAMkDxV,EALrDz4D,EAeG,CACLguE,UAAWK,EATTruE,EAAQlC,EAAEid,OAAOjd,EAAEiI,OAAOioE,EAAWC,CAAA,EAAY,SAAU16C,EAAQjQ,GAKrE,OAJAiQ,EAAOjQ,EAAMk/B,WAAW3iD,OAAS/B,EAAE0rB,KAAK21B,EAAcG,aAClDmZ,EAAc/W,YACd,CAACc,WAAYl/B,EAAMk/B,WAAW3iD,MAAO0yD,MAAO,CAAA,CAAA,C,GAEzCh/B,C,EACP,EAAA,EAGuBy6C,CAAA,EACvBC,UAAWnwE,EAAE0G,IAAIypE,EAAW,SAAU3qD,GACpC,OAAO+qD,EAAMruE,EAAMsjB,CAAA,C,mCAhD3B1W,QAAQC,OAAO,8BAAA,EACVqN,UAAU,0BAMf,WACE,MAAO,CACLiD,SAAU,IACVC,MAAQ,CACN4wD,UAAW,IACXC,UAAW,IACXE,UAAW,G,EAEbxgE,YAAc,4DACdC,WAAa,oCACbsgB,iBAAkB,CAAA,C,EAhBoB,EACrCtgB,WAAW,8BAA+BwgE,CAAA,C,ICLjD,WACE,aAqBA,SAASE,EAAUC,GAEjB,MAAO,CACLjgE,YAAckgE,EAAI,eAAgBD,EAAaE,gBAAiB,aAAA,EAChEC,SAAUF,EAAI,WAAYD,EAAaE,gBAAiB,UAAA,EACxDE,iBAAkBH,EAAI,mBAAoBD,EAAaE,gBAAiB,oBAAqB,mBAAA,EAC7FG,YAAaJ,EAAI,cAAeD,EAAaE,gBAAiB,aAAA,C,EAIlE,SAAS3c,EAAWwc,EAAWO,GAC7B,IAAIC,EAAqB,CAACD,EAAWE,IAAKF,EAAWG,KAErD,MAAO,CACLjK,mBAAoBkK,EAAK,UAAWX,EAAUhgE,YAAa,UAAWwgE,CAAA,EACtEl3B,OAAQq3B,EAAK,SAAUX,EAAUhgE,YAAa,SAAUwgE,CAAA,EACxDv0C,QAAS00C,EAAK,UAAWX,EAAUhgE,YAAa,UAAWwgE,CAAA,EAC3D/O,gBAAiBkP,EAAK,UAAWX,EAAUI,SAAU,UAAWI,CAAA,EAChEpc,SAAUuc,EAAK,WAAYX,EAAUI,SAAU,WAAYI,CAAA,EAC3DtO,YAAayO,EAAK,cAAeX,EAAUI,SAAU,eAAgBI,EAAmB,cAAA,EACxFhc,SAAUmc,EAAK,WAAYX,EAAUI,SAAU,WAAYI,CAAA,EAC3DjO,KAAMoO,EAAK,OAAQX,EAAUI,SAAU,OAAQI,EAAmB,MAAA,EAClE1N,IAAK6N,EAAK,MAAOX,EAAUI,SAAU,MAAOI,EAAmB,KAAA,EAC/D52D,QAAS+2D,EAAK,UAAWX,EAAUK,iBAAkB,UAAWG,CAAA,EAChEnJ,UAAWsJ,EAAK,aAAcX,EAAUhgE,YAAa,aAAcwgE,EAAmB,YAAA,EACtFI,oBAAqBD,EAAK,YAAaX,EAAUM,YAAa,wBAAyBE,EAAoB,YAAA,EAC3GK,oBAAqBF,EAAK,YAAaX,EAAUM,YAAa,uBAAwBE,CAAA,EACtFnN,gBAAiBsN,EAAK,kBAAmBX,EAAUI,SAAU,mBACzD,CAACG,EAAWO,MAAOP,EAAWG,KAAK,kBAAA,C,EAI3C,SAASphB,EAAckE,EAAYC,EAAS+S,EAAoBhF,EAAgBjO,GAG9E,IAAIc,EAAMmN,EAAenN,IACrBwN,EAAgBL,EAAeK,cAC/B8E,EAAcH,EAAmBG,YACjC/E,EAAuBJ,EAAeI,qBACtC8E,EAAuBF,EAAmBE,oBAC1CvE,EAAQX,EAAeW,MACvBlmC,EAAUuqC,EAAmBvqC,QAGjC,MAAO,CAELohC,QAAS5J,EAAQ,eAAgBD,EAAW55C,OAAA,EAC5C0jD,eAAgB7J,EAAQ,iBAAkBD,EAAW55C,OAAA,EACrD2jD,QAAS9J,EAAQ,UAAWD,EAAW55C,OAAA,EACvC4jD,QAAS/J,EAAQ,UAAWD,EAAW55C,OAAA,EACvC6jD,SAAUhK,EAAQ,WAAYD,EAAW55C,OAAA,EAIzCw6C,SAAWoS,EAAmBpS,SAASyN,CAAA,EACvCvoB,OAASktB,EAAmBltB,OAAOqtB,CAAA,EACnC5qC,WAAayqC,EAAmBzqC,WAEhC2qC,oBAAqBA,EACrBC,YAAaA,EACbC,SAAUJ,EAAmBI,SAC7BC,YAAaL,EAAmBK,YAEhC5qC,QAASA,EAET6qC,IAAKN,EAAmBM,IACxBC,IAAKP,EAAmBO,IACxBC,KAAMR,EAAmBQ,KACzBC,KAAMT,EAAmBS,KACzBC,IAAKV,EAAmBU,IACxBC,MAAOX,EAAmBW,MAE1BC,cAAgBZ,EAAmBY,cAAcV,CAAA,EACjDY,aAAed,EAAmBc,aAAajT,CAAA,EAC/CkT,cAAgBf,EAAmBe,cAEnChT,IAAMiN,EAAejN,IACrBmN,WAAaF,EAAeE,WAAWrN,CAAA,EACvCsN,gBAAkBH,EAAeG,gBAAgBC,CAAA,EAEjDA,qBAAuBA,EACvBC,cAAgBA,EAChBC,WAAaN,EAAeM,WAC5BE,cAAgBR,EAAeQ,cAE/B3N,IAAKA,EACL8N,MAAOA,EACP7N,IAAKkN,EAAelN,IACpB8N,MAAOZ,EAAeY,MACtB3N,SAAU+M,EAAe/M,SAEzBD,SAAUgN,EAAehN,SAASH,CAAA,EAClCuL,MAAO4B,EAAe5B,MAAMuC,CAAA,EAC5BvF,mBAAoB4E,EAAe5E,mBAAmBiF,CAAA,EACtDQ,iBAAkBb,EAAea,iBAAiBsE,CAAA,EAClD9J,UAAW2E,EAAe3E,UAAU5gC,CAAA,EAEpCqmC,UAAWd,EAAec,UAC1BE,UAAWhB,EAAegB,UAC1BC,gBAAiBjB,EAAeiB,gBAChCC,mBAAoBlB,EAAekB,mBACnCC,oBAAqBnB,EAAemB,oBACpCC,4BAA6BpB,EAAeoB,4BAE5CC,SAAUrB,EAAeqB,SACzBE,SAAUvB,EAAeuB,SACzBC,eAAgBxB,EAAewB,eAC/BC,kBAAmBzB,EAAeyB,kBAClCC,mBAAoB1B,EAAe0B,mBACnCC,2BAA4B3B,EAAe2B,2BAE3CC,YAAa5B,EAAe4B,YAC5BE,eAAgB9B,EAAe8B,eAC/BC,eAAgB/B,EAAe+B,eAC/BC,eAAgBhC,EAAegC,eAC/BC,mBAAoBjC,EAAeiC,mBACnCC,iBAAkBlC,EAAekC,iBAEjCC,oBAAqBnC,EAAemC,oBACpCC,qBAAsBpC,EAAeoC,qBACrCC,iBAAkBrC,EAAeqC,iBACjCC,mBAAoBtC,EAAesC,mBACnCC,kBAAmBvC,EAAeuC,kBAClCC,kBAAmBxC,EAAewC,kBAClCC,oBAAqBzC,EAAeyC,oBACpCC,cAAe1C,EAAe0C,cAC9BC,kBAAmB3C,EAAe2C,kBAElC4M,0BAA2Bxd,EAAkBja,OAAOka,EAAWod,mBAAA,EAC/DI,4BAA6Bzd,EAAkBa,SAASZ,EAAWod,mBAAA,EACnEK,2BAA4B1d,EAAkBt3B,QAAQu3B,EAAWod,mBAAA,EACjEM,uBAAwB3d,EAAkBc,IAAIb,EAAWod,mBAAA,EACzDO,uBAAwB5d,EAAkBe,IAAId,EAAWod,mBAAA,EACzDQ,8BAA+B7d,EAAkBx3B,WAAWy3B,EAAWod,mBAAA,EACvES,uBAAwB9d,EAAkBgB,IAAIf,EAAWod,mBAAA,EACzDU,4BAA6B/d,EAAkBiB,SAAShB,EAAWod,mBAAA,EACnEW,4BAA6Bhe,EAAkBkB,SAASjB,EAAWod,mBAAA,EAEnEY,0BAA2Bje,EAAkBja,OAAOka,EAAWqd,mBAAA,EAC/DY,4BAA6Ble,EAAkBa,SAASZ,EAAWqd,mBAAA,EACnEa,2BAA4Bne,EAAkBt3B,QAAQu3B,EAAWqd,mBAAA,EACjEc,uBAAwBpe,EAAkBc,IAAIb,EAAWqd,mBAAA,EACzDe,uBAAwBre,EAAkBe,IAAId,EAAWqd,mBAAA,EACzDgB,8BAA+Bte,EAAkBx3B,WAAWy3B,EAAWqd,mBAAA,EACvEiB,uBAAwBve,EAAkBgB,IAAIf,EAAWqd,mBAAA,EACzDkB,4BAA6Bxe,EAAkBiB,SAAShB,EAAWqd,mBAAA,EACnEmB,4BAA6Bze,EAAkBkB,SAASjB,EAAWqd,mBAAA,C,EAKvE,SAASjd,EAAoBC,EAAY9S,GAEvC,IAAIkxB,EAAa,GAEjB,SAAS15D,EAAImtD,EAAgBqC,GAC3B,OAAOrC,EAAentD,IAAM,IAAMwvD,C,CAGpC,SAAS5nD,EAAMulD,EAAgBqC,EAAWpW,GACxC,OAAIA,EAGFsgB,EAAW15D,EAAImtD,EAAgBqC,CAAA,GAAcpW,EAFtCsgB,EAAW15D,EAAImtD,EAAgBqC,CAAA,E,CAO1C,SAASmK,EAAmB5qE,EAAM1D,EAAOuuE,EAAmBjuB,GAC1D,OAAO,SAAUkuB,EAAaC,EAAoBC,GAChD,OAAO,SAAU1wB,GACX8jB,EAAiB9jB,EAAQ0P,QAE7B,OAAGnxC,EAAMulD,EAAgBp+D,CAAA,EAChB6Y,EAAMulD,EAAgBp+D,CAAA,EAEtB6Y,EACHulD,EACAp+D,EACAirE,EACIjrE,EACAgrE,GAAiB1uE,EACjB8hE,EACAyM,EACAE,GAAsBnuB,EACtBkuB,C,KAQhB,MAAO,CACLte,GAAIoe,EAAmB,KAAMnxB,EAAqBhmC,OAAOC,OAAQ,sBAAuB64C,EAAWC,EAAA,EACnGC,MAAOme,EAAmB,QAASnxB,EAAqBhmC,OAAOM,UAAU,yBAA0Bw4C,EAAWE,KAAA,EAC9GC,SAAUke,EAAmB,WAAYnxB,EAAqBhmC,OAAOQ,UAAW,4BAA6Bs4C,EAAW5qC,GAAA,EACxHkrC,iBAAkB+d,EAAmB,mBAAoBnxB,EAAqBhmC,OAAOQ,UAAW,sCAAuCs4C,EAAW5qC,GAAA,EAClJ05B,MAAOuvB,EAAmB,QAASnxB,EAAqBhmC,OAAOC,OAAQ,wBAAA,EACvE2kD,aAAcuS,EAAmB,QAASnxB,EAAqBhmC,OAAOC,MAAA,EACtEqjD,aAAc6T,EAAmB,eAAgBnxB,EAAqBhmC,OAAOS,UAAA,EAC7EC,eAAgBy2D,EAAmB,iBAAkBnxB,EAAqBhmC,OAAOU,eAAgB,iCAAA,EACjGC,qBAAsBw2D,EAAmB,uBAAwBnxB,EAAqBhmC,OAAOW,qBAAsB,6BAAA,EACnHC,aAAcu2D,EAAmB,eAAgBnxB,EAAqBhmC,OAAOY,aAAc,kCAAA,EAC3FohD,UAAWmV,EAAmB,YAAanxB,EAAqBhmC,OAAOC,OAAQ,KAAM64C,EAAWC,EAAA,EAChGlR,iBAAkBsvB,EAAmB,mBAAoBnxB,EAAqBhmC,OAAOC,MAAA,EACrFyhD,OAAQyV,EAAmB,SAAUnxB,EAAqBhmC,OAAOC,OAAQ,KAAM64C,EAAWC,EAAA,EAC1FkS,KAAMkM,EAAmB,OAAQnxB,EAAqBhmC,OAAOC,OAAQ,KAAM64C,EAAWC,EAAA,EAEtF0M,qBAAsB0R,EAAmB,uBAAwBnxB,EAAqBhmC,OAAOS,UAAA,EAC7FilD,yBAA0ByR,EAAmB,2BAA4BnxB,EAAqBhmC,OAAOU,cAAA,EACrGilD,+BAAgCwR,EAAmB,iCAAkCnxB,EAAqBhmC,OAAOW,oBAAA,EACjHklD,WAAYsR,EAAmB,aAAcnxB,EAAqBhmC,OAAOS,UAAA,EACzEqlD,eAAgBqR,EAAmB,iBAAkBnxB,EAAqBhmC,OAAOU,cAAA,EACjFqlD,qBAAsBoR,EAAmB,uBAAwBnxB,EAAqBhmC,OAAOW,oBAAA,C,EAIjG,SAASi4C,EAAcE,EAAY9S,GAEjC,IAAIkxB,EAAa,GAEjB,SAAS15D,EAAImtD,EAAgBqC,GAC3B,OAAOrC,EAAentD,IAAM,IAAMwvD,C,CAGpC,SAAS5nD,EAAMulD,EAAgBqC,EAAWpW,GACxC,OAAIA,EAGFsgB,EAAW15D,EAAImtD,EAAgBqC,CAAA,GAAcpW,EAFtCsgB,EAAW15D,EAAImtD,EAAgBqC,CAAA,E,CAO1C,SAASyK,EAAalrE,EAAM1D,EAAOuuE,EAAmBjuB,GACpD,OAAO,SAAU7/C,EAAQguE,EAAoBC,EAAe5tC,GAC1D,OAAO,SAAUkd,GACX8jB,EAAiB9jB,EAAQ1iD,MAE7B,OAAGihB,EAAMulD,EAAgBp+D,CAAA,EAChB6Y,EAAMulD,EAAgBp+D,CAAA,EAEtB6Y,EACHulD,EACAp+D,EACAmrE,EACInrE,EACAgrE,GAAiB1uE,EACjB8hE,EACAyM,EACAE,GAAsBnuB,EACtB7/C,EACAqgC,C,KAQhB,MAAO,CACLovB,GAAI0e,EAAa,KAAMzxB,EAAqBhmC,OAAOC,OAAQ,sBAAuB64C,EAAWC,EAAA,EAC7FiO,WAAYyQ,EAAa,aAAczxB,EAAqBhmC,OAAOQ,UAAW,gCAAiCs4C,EAAWC,EAAA,EAC1HC,MAAOye,EAAa,QAASzxB,EAAqBhmC,OAAOM,UAAU,yBAA0Bw4C,EAAWE,KAAA,EACxGkO,cAAeuQ,EAAa,gBAAiBzxB,EAAqBhmC,OAAOQ,UAAU,mCAAoCs4C,EAAWE,KAAA,EAClIC,SAAUwe,EAAa,WAAYzxB,EAAqBhmC,OAAOQ,UAAW,4BAA6Bs4C,EAAW5qC,GAAA,EAClHkrC,iBAAkBqe,EAAa,mBAAoBzxB,EAAqBhmC,OAAOQ,UAAW,sCAAuCs4C,EAAW5qC,GAAA,EAC5Io1C,aAAcmU,EAAa,eAAgBzxB,EAAqBhmC,OAAOS,WAAY,6BAAA,EACnFC,eAAgB+2D,EAAa,iBAAkBzxB,EAAqBhmC,OAAOU,eAAgB,iCAAA,EAC3FC,qBAAsB82D,EAAa,uBAAwBzxB,EAAqBhmC,OAAOW,qBAAsB,6BAAA,EAC7GC,aAAc62D,EAAa,eAAgBzxB,EAAqBhmC,OAAOY,aAAc,kCAAA,EACrF6kD,qBAAsBgS,EAAa,uBAAwBzxB,EAAqBhmC,OAAOS,UAAA,EACvFilD,yBAA0B+R,EAAa,2BAA4BzxB,EAAqBhmC,OAAOU,cAAA,EAC/FilD,+BAAgC8R,EAAa,iCAAkCzxB,EAAqBhmC,OAAOW,oBAAA,EAC3GklD,WAAY4R,EAAa,aAAczxB,EAAqBhmC,OAAOS,UAAA,EACnEqlD,eAAgB2R,EAAa,iBAAkBzxB,EAAqBhmC,OAAOU,cAAA,EAC3EqlD,qBAAsB0R,EAAa,uBAAwBzxB,EAAqBhmC,OAAOW,oBAAA,C,+PAxS3FpN,QACKC,OAAO,8BAAA,EACP6R,QAAQ,eAUb,WAEE,MAAO,CACL+vD,gBAFoBuC,EAAO,kBAAoB,C,EAXtB,EACxBtyD,QAAQ,YAAa4vD,CAAA,EACrB5vD,QAAQ,aAAcozC,CAAA,EACtBpzC,QAAQ,gBAAiBkvC,CAAA,EACzBlvC,QAAQ,sBAAuBwzC,CAAA,EAC/BxzC,QAAQ,UAkWb,WACE,SAASqzC,EAAQnsD,EAAMof,EAAMxnB,EAAO06D,EAAUx6D,GAC5C,GAAI,EAAEE,gBAAgBm0D,GAAU,OAAO,IAAIA,EAAQnsD,EAAMof,EAAMxnB,EAAO06D,EAAUx6D,CAAA,EAChFE,KAAKqzE,YAAYrrE,EAAMof,CAAA,EAEvBu3C,EAAQ3+D,KAAMs6D,CAAA,EACd16D,GAASA,EAAMI,IAAA,EACfA,KAAKJ,OAASI,KAAKJ,MAAM0zE,oBAAsBtzE,KAAKuzE,gBAAkBvzE,KAAKwzE,iBAAiBxzE,KAAKJ,MAAM0zE,iBAAA,GACvGpzE,EAAEC,OAAOH,KAAMF,CAAA,C,CAUjB,OAPAI,EAAEC,OAAOg0D,EAAQ99C,UAAWo9D,EAAW,CACrCD,iBAAkB,SAAUF,GAE1B,OADgBA,EAAkB9jE,OAAO3F,UACtB,aAAeypE,EAAkBtrE,KAAO,K,IAIxDmsD,C,CApXe,EACnBrzC,QAAQ,QAsYb,WACE,SAASszC,EAAMpsD,EAAMk6C,EAAWsU,EAAW8c,EAAmBtsE,GAC5D,IAEI+gC,EAFJ,OAAM/nC,gBAAgBo0D,IAElBrsB,EAAO/nC,MACNgI,KAAOA,EACZ+/B,EAAKma,UAAYA,EACjBna,EAAKyuB,UAAYA,EACjBzuB,EAAKurC,kBAAoBA,EAElB,SAAUhxB,GACfva,EAAKsrC,YAAY,QAAS/wB,CAAA,EAC1Bva,EAAKriB,MAAQqiB,EAAK9uB,IAAM,SACxB8uB,EAAKwD,QAAUxD,EAAK9uB,IAAM,WAC1B8uB,EAAKnB,WAAcmB,EAAK9uB,IAAM,cAC9B8uB,EAAK/gC,OAAS9G,EAAE0G,IAAII,EAAQ,SAAUmgC,GACpC,OAAOA,EAAKmb,CAAA,C,KAdqB,IAAI8R,EAAMpsD,EAAMk6C,EAAWsU,EAAW8c,EAAmBtsE,CAAA,C,CAoBhG,OAFA9G,EAAEC,OAAOi0D,EAAM/9C,UAAWo9D,CAAA,EAEnBrf,C,CA5Za,EACjBtzC,QAAQ,gBAAiBuzC,CAAA,EAmS9B,IAAIof,EAAY,CACd/pE,IAAK,SAAUgqE,EAAWx1D,GACpBy1D,EAAS3zE,KAAK4zE,QAAQxoE,MAAO8S,CAAA,EACjC,OAAOle,KAAKyK,SAASkpE,E,EAEvBE,KAAM,SAAUzoE,EAAO8S,GACjBy1D,EAAS3zE,KAAK4zE,QAAQxoE,EAAO8S,CAAA,EACjC,GAAGle,KAAK2zE,GACN,MAAM,IAAIvrE,MAAM,yEAA2EurE,CAAA,EAI7F,OAFA3zE,KAAK2zE,GAAUvoE,EACfpL,KAAKyK,SAAS1C,KAAKqD,CAAA,EACZpL,I,EAETqzE,YAAa,SAAUrrE,EAAMwH,EAAQskE,GACnC9zE,KAAKgI,KAAOA,EACZhI,KAAKiZ,KAAOzJ,EAASA,EAAOyJ,IAAM,IAAMjR,EAAOA,IAAS8rE,EAAY,IAAMA,EAAW,IACrF9zE,KAAKyK,SAAW,IAChBzK,KAAKwP,OAASA,IACJA,EAAOqkE,KAAK7zE,IAAA,C,EAGxB4zE,QAAS,SAAUxoE,EAAO8S,GACxB,OAAOA,EAAOA,EAAO,IAAM9S,EAAMpD,KAAOoD,EAAMpD,I,EAEhD+rE,cAAe,SAAUC,EAAWC,GAClCj0E,KAAKk0E,WAAaF,EAAYA,EAAY,IAAM,KAAOC,GAAYj0E,KAAKgI,K,GAa5E,SAASorE,EAAOprE,GACd,GAAI,EAAEhI,gBAAgBozE,GAAS,OAAO,IAAIA,EAAOprE,CAAA,EACjDhI,KAAKqzE,YAAYrrE,CAAA,C,CAGnB,SAAS4oE,EAAI5oE,EAAMiH,EAAQqkD,EAAa6gB,GACtC,GAAI,EAAEn0E,gBAAgB4wE,GAAM,OAAO,IAAIA,EAAI5oE,EAAMiH,EAAQqkD,EAAa6gB,CAAA,EACtEn0E,KAAKqzE,YAAYrrE,EAAMiH,CAAA,EACvBjP,KAAK+zE,cAAc,GAAII,CAAA,EACvBn0E,KAAKszD,YAAcA,C,CAGrB,SAAS+d,EAAKrpE,EAAMi1B,EAAKq2B,EAAa8gB,EAAaD,GACjD,GAAI,EAAEn0E,gBAAgBqxE,GAAO,OAAO,IAAIA,EAAKrpE,EAAMi1B,EAAKq2B,EAAa8gB,EAAaD,CAAA,EAClFn0E,KAAKqzE,YAAYrrE,EAAMi1B,CAAA,EACvBj9B,KAAK+zE,cAAc92C,EAAIi3C,UAAWC,CAAA,EAClCn0E,KAAKq0E,UAAYr0E,KAAKk0E,UAAY,gBAClCl0E,KAAK6J,UAAYozB,EAAIj1B,KAAO,IAAMA,EAClChI,KAAKszD,YAAcr2B,EAAIq2B,YAAc,MAAQA,EAC7CtzD,KAAKo0E,YAAcA,C,CAwBrB,SAASzV,EAAQrc,EAASgY,GACxB,GAAI,EAAEt6D,gBAAgB2+D,GAAU,OAAO,IAAIA,EAAQrc,EAASgY,CAAA,EAC5Dt6D,KAAKqzE,YAAY,UAAW/wB,CAAA,EAE5B,IAAIva,EAAO/nC,KACX+nC,EAAKjT,OAAS50B,EAAE0G,IAAI0zD,EAAU,SAAUtI,GACtC,IAAIx2B,EAAM,GAMV,OALAA,EAAI3rB,MAAQ,CAACmiD,EAAQzN,WAAaxc,EAAK9uB,IAAM,SAC7CuiB,EAAI8oB,WAAa0N,EAAQ1N,WACzB9oB,EAAI1G,OAAS50B,EAAE0G,IAAIorD,EAAQl9B,OAAQ,SAAU7yB,GAC3C,OAAOA,EAAMqgD,CAAA,C,GAER9mB,C,GA6BX,SAASy3C,EAAajrE,EAAM1D,EAAO8hE,EAAgByM,EAAmBjuB,EAAYkuB,GAChF,GAAI,EAAE9yE,gBAAgBizE,GACpB,OAAO,IAAIA,EAAajrE,EAAM1D,EAAO8hE,EAAgByM,EAAmBjuB,EAAYkuB,CAAA,EAE3E9yE,KACNqzE,YAAYrrE,EAAMo+D,CAAA,EADZpmE,KAGNw9D,cAAgBx9D,KAAKgI,KAHfhI,KAIN0lB,MAAQmtD,GAAqB7yE,KAAKiZ,IAAM,SAJlCjZ,KAKNurC,QAAUvrC,KAAKiZ,IAAM,WALfjZ,KAMN4kD,WAAaA,EANP5kD,KAONsE,MAAQA,EAAMqX,OAPR3b,KAQNk2C,WAAa5xC,EAAMwX,MARb9b,KASN8yE,YAAcA,C,CAGrB,SAASK,EAAOnrE,EAAM1D,EAAOgwE,EAAczB,EAAmBjuB,EAAY7/C,EAAQqgC,GAChF,GAAI,EAAEplC,gBAAgBmzE,GACpB,OAAO,IAAIA,EAAOnrE,EAAM1D,EAAOgwE,EAAczB,EAAmBjuB,EAAY7/C,EAAQqgC,CAAA,EAE3EplC,KACNqzE,YAAYrrE,EAAMssE,CAAA,EADZt0E,KAGNw9D,cAAgBx9D,KAAKgI,KAHfhI,KAIN0lB,MAAQmtD,GAAqB7yE,KAAKiZ,IAAM,SAJlCjZ,KAKN4kD,WAAaA,EALP5kD,KAMNsE,MAAQA,EANFtE,KAON+E,OAASA,EAPH/E,KAQNolC,aAAeA,C,CAzHtBllC,EAAEC,OAAOizE,EAAO/8D,UAAWo9D,CAAA,EAC3BvzE,EAAEC,OAAOywE,EAAIv6D,UAAWo9D,CAAA,EACxBvzE,EAAEC,OAAOkxE,EAAKh7D,UAAWo9D,CAAA,EACzBvzE,EAAEC,OAAOw+D,EAAQtoD,UAAWo9D,CAAA,EAC5BvzE,EAAEC,OAAO8yE,EAAa58D,UAAWo9D,CAAA,EACjCvzE,EAAEC,OAAOgzE,EAAO98D,UAAWo9D,CAAA,C,IClV7B,WACE,aASA,SAASc,EAAqBhzC,EAAcizC,GAC1C,OAAO,SAAUxZ,GACf,OAAIA,EACKz5B,EAEAizC,GAFaxZ,CAAA,C,EAe1B,SAASyZ,EAAmBD,GAC1B,OAAO,SAAUxZ,GACf,OAAIA,EACK96D,EAAEw0E,IAAI1Z,EAAQ,CAAA,EAAK,IAAMA,EAASA,EAElCwZ,EAAkCxZ,CAAA,C,iHA9B/ChsD,QACKC,OAAO,8BAAA,EACPlK,OAAO,8BAgBZ,WACE,OAAO,SAAUi2D,GACf,OAAO96D,EAAE4kC,SAASk2B,CAAA,GAAW96D,EAAEmL,SAAS2vD,CAAA,EAAUA,EAAS,K,EAlBpB,EACtCj2D,OAAO,uBAAwBwvE,CAAA,EAC/BxvE,OAAO,qBAAsB0vE,CAAA,C,ICPpC,WACE,aAQA,SAASl5B,EAA0B5nB,GAEjC,MAAO,CACLiE,UAGF,SAAmB5qB,EAAe2nE,EAAeC,EAAYC,EAAUj/B,GACrE,IAAI03B,EAAgB35C,EAAUb,KAAK,CACjCya,KAAM,KACNx9B,YAAa,gEACbC,WAAA,CAAA,SAAY,SAAUoE,GAEpBkP,EAAGsxD,WAAaA,EAChBtxD,EAAGuxD,SAAWA,EACdvxD,EAAGsyB,iBAAmBA,EACtBtyB,EAAGwxD,kBAAoB,WAAaH,EAAgB,YACpDrxD,EAAGyxD,eAAiB,WAAaJ,GAAkBrxD,EAAG,WAAc,YAAc,KAAQA,EAAG,SAAY,UAAY,IAAM,YAC3HA,EAAGtW,cAAgBA,EACnBsW,EAAGimD,OAAS,WACV+D,EAAcjzB,MAAA,C,QAQxB,SAAS26B,EAAwBz5B,GAC/B,MAAO,CACLh8B,SAAU,IACVxP,YAAc,2DACdyP,MAAQ,CACNxS,cAAgB,SAChB2nE,cAAe,QACfC,WAAY,IACZC,SAAU,IACVj/B,iBAAiB,G,EAEnBkmB,WAAY,CAAA,EACZ56B,KAAO,SAAU1hB,EAAMytB,EAAQof,GAC7B,IAAI/oC,EAAK9D,EACSxQ,QAAQimE,UAAU5oB,EAAM6oB,WAAA,GAAgD,CAAA,IAAhC5xD,EAAG6xD,MAAM9oB,EAAM6oB,WAAA,IAGvE7oB,EAAM+oB,KAAK,UAAW,iCAAA,EACtBnoC,EAAQooC,WAAW,eAAA,EACnBnmB,SAASjiB,CAAA,EAAS3pB,CAAA,GAGpBA,EAAGgyD,8BAAgC,WACjC/5B,EAA0B3jB,UAAUpY,EAAMxS,cAAcwS,EAAMm1D,cAAcn1D,EAAMo1D,WAAWp1D,EAAMq1D,SAASr1D,EAAMo2B,gBAAA,C,oEAxD1H5mC,QACKC,OAAO,mCAAA,EACP6R,QAAQ,4BAA4By6B,CAAA,EACpCj/B,UAAU,0BAA2B04D,CAAA,C,eCe1C,SAASO,EAA8BvrE,EAAQuC,EAAcqR,EAAUwvD,EAASluD,EAASs2D,EAClD3oE,GACrC,IAAIyW,EAAKtjB,KAELuQ,EAAU2O,EAAQsyC,UAAA,EAoCtB,SAAS3xB,IACPvc,EAAGguC,UAAUjyB,UAAYzhB,EAAS8pC,eAAepkC,EAAGguC,UAAUjyB,SAAA,EAC9D/b,EAAGguC,UAAU/xB,QAAU3hB,EAAS8pC,eAAepkC,EAAGguC,UAAU/xB,OAAA,EAC5Djc,EAAGmyD,eAAiBzmE,QAAQyN,KAAK6G,EAAGguC,SAAA,C,CAtCtChuC,EAAGkrD,aAAe5wD,EAAS8pC,eAAe0lB,CAAA,EAC1C9pD,EAAGoyD,kBAAoB93D,EAAS8pC,eAAen3C,EAAQkhD,cAAA,EACvDnuC,EAAGypD,SAAWx8D,EAAQw8D,SACtBzpD,EAAGwP,KAAO,CAAA,EAEV+M,EAAA,EAEAvc,EAAG+jC,aAAemuB,EAAgBnuB,aAAA,EAElC/jC,EAAGqyD,aAAe,SAAUrkB,GAC1BhuC,EAAGguC,UAAUjyB,UAAYzhB,EAAS8pC,eAAe4J,EAAU3J,UAAA,CAAA,EAC3DrkC,EAAGguC,UAAU/xB,QAAU3hB,EAAS8pC,eAAe4J,EAAU1J,QAAA,CAAA,C,EAG3DtkC,EAAGsyD,SAAW,SAAS9iD,GAClB,CAACA,GAAS5yB,EAAEiK,GAAGmZ,EAAGguC,UAAUjyB,UAAW9yB,EAAa8yB,SAAA,GAChDn/B,EAAEiK,GAAGmZ,EAAGguC,UAAU/xB,QAAShzB,EAAagzB,OAAA,GAC7CM,EAAA,C,EAIJvc,EAAGuyD,gBAAkB,WACnBvyD,EAAGmyD,eAAiBzmE,QAAQyN,KAAK6G,EAAGguC,SAAA,EACpCzkD,EAAgBs6C,yBAAyB7jC,EAAGguC,UAAWhuC,EAAG+jC,YAAA,EACtD/jC,EAAGwyD,WAMLxyD,EAAGyyD,QAAA,EACHzyD,EAAGwP,KAAO,CAAA,GANV9oB,EAAOL,GAAG,IAAK,CACb01B,UAAWzhB,EAAS2pC,qBAAqBjkC,EAAGguC,UAAUjyB,SAAA,EACtDE,QAAS3hB,EAAS2pC,qBAAqBjkC,EAAGguC,UAAU/xB,OAAA,EAAU6iB,YAAa,I,IAenF,SAASozB,EAAgBt2D,EAASkuD,GA0ChC,OAvCMoB,EAAejzD,OAAO6xD,CAAA,EA+BnB,CACL/lB,aAAcA,EACd2uB,SAAW,SAAUC,GACnB,OAAO/1E,EAAE0N,KAAKy5C,EAAc,CAAEn/C,KAAM+tE,CAAA,CAAA,C,GAhCrB,SAAf5uB,IACF,IAAI92C,EAAU2O,EAAQsyC,UAAA,EACtB,MAAO,CACL,CACEtpD,KAAM,gBACNy/C,UAAW,WAAa,OAAOpsC,OAAOnV,IAAIooE,EAAcjzD,OAAOhL,EAAQkhD,cAAA,EAAgBykB,QAAQ,OAAA,CAAA,CAAA,EAC/FtuB,QAAS,WAAa,OAAOrsC,OAAOhL,EAAQkhD,cAAA,CAAA,C,EAC5C,CACAvpD,KAAM,eACNy/C,UAAW,WAAa,OAAOpsC,OAAOnV,IAAIooE,EAAcjzD,OAAOhL,EAAQkhD,cAAA,EAAgBykB,QAAQ,MAAA,CAAA,CAAA,EAC/FtuB,QAAS,WAAa,OAAOrsC,OAAOhL,EAAQkhD,cAAA,CAAA,C,EAC5C,CACAvpD,KAAM,YACNy/C,UAAW,WAAa,OAAOpsC,OAAOnV,IAAIooE,EACtCjzD,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS,EAAG,MAAA,EAAQykB,WAAW,CAAA,CAAA,CAAA,EAClEvuB,QAAS,WAAa,OAAOrsC,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS,EAAG,MAAA,EAAQykB,WAAW,CAAA,CAAA,C,EAC1F,CACDjuE,KAAM,aACNy/C,UAAW,WAAa,OAAOpsC,OAAOnV,IAAIooE,EACtCjzD,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS,EAAG,OAAA,EAASwkB,QAAQ,OAAA,CAAA,CAAA,EAChEtuB,QAAS,WAAa,OAAOrsC,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS,EAAG,OAAA,EAAS0kB,MAAM,OAAA,CAAA,C,EACtF,CACDluE,KAAM,YACNy/C,UAAW,WAAa,OAAOpsC,OAAOnV,IAAIooE,EAAcjzD,OAAOhL,EAAQkhD,cAAA,EAAgBC,SAAS,EAAG,MAAA,CAAA,CAAA,EACnG9J,QAAS,WAAa,OAAOrsC,OAAOhL,EAAQkhD,cAAA,CAAA,C,GA3BpD,IACM+c,C,0IAtERx/D,QAAQC,OAAO,kBAAA,EACVqN,UAAU,4BAIf,WACE,MAAM,CACJiD,SAAU,IACVC,MAAQ,CACN8xC,UAAW,IACXykB,QAAS,IACTD,UAAW,G,EAEb/lE,YAAc,qEACdC,WAAa,sCACbsgB,iBAAkB,CAAA,C,EAdsB,EACvCtgB,WAAW,gCAAiCulE,CAAA,EAC5Cz0D,QAAQ,kBAAmB00D,CAAA,C,ICJlC,WACE,aAKA,SAASa,EAAcC,GAErB,IAAIhxD,EACJ,SAASixD,EAASn0E,GAChB,GAAI,EAAEpC,gBAAgBu2E,GAAW,OAAO,IAAIA,EAASn0E,CAAA,EACrDpC,KAAKw2E,QAAU,GACfx2E,KAAKqI,QAAQjG,CAAA,C,CAiCf,OA9BAlC,EAAEC,OAAOo2E,EAASlgE,UAAW,CAC3BogE,YAAeF,EACfluE,QAAU,SAAUjG,GACPpC,KACN0lB,MAAQtjB,EAAKsO,YADP1Q,KAENw2E,QAAUt2E,EAAEA,EAAE0G,IAAIxE,EAAKuO,OAAQ,SAAUA,GAC5C,OAAO2lE,EAAO3lE,CAAA,C,IACZmP,OAAO,kBAAA,EAAoB7d,MAAA,C,EAEjCqmE,kBAAmB,SAAU33D,GAEzB2U,EADC3U,EACgBzQ,EAAE0N,KAAK5N,KAAKw2E,QAAS,CAAC9wD,MAAO/U,CAAA,CAAA,EAE7B3Q,KAAKooB,kBAAA,EAAsBpoB,KAAKw2E,QAAQ,GAAK,I,EAGlEvlE,SAAU,WACR,OAAOjR,KAAK0lB,K,EAEdgxD,WAAY,WACV,OAAO12E,KAAKw2E,O,EAEdxlE,kBAAmB,WACjB,OAAOsU,C,EAET8C,kBAAmB,WACjB,OAAOpoB,KAAKw2E,SAAiC,EAAtBx2E,KAAKw2E,QAAQ90E,M,IAIjC60E,C,sBA1CTvnE,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,WAAYu1D,CAAA,C,ICJ3B,WACE,aAKA,SAASM,EAAoBJ,EAAUjqE,EAAcsG,GAEnD,IACIgjC,EADAghC,EAAa,GAGjB,OAuBA,SAAwBllD,EAAUhhB,EAAaC,GAC7C,OAAO+gB,EAAA,EAAWhkB,KAAK,SAAS6C,GAU9B,OATAqmE,EAAa12E,EAAE0G,IAAI2J,EAAS,SAAUxL,GACpC,OAAOwxE,EAASxxE,CAAA,C,IAEJrD,QACZ0mE,EAAY13D,IAtBTmmE,EAAA,EAAqBjkE,EAAMzD,sBAAsBC,OAASwnE,EAAW,GAAGlxD,MAsBnC,EACxCkwB,EAAiB0yB,kBAAkB33D,CAAA,GAEnCilC,EAAmB,KAEd,CACL7kC,YAAaA,EACbq3D,YAAaA,EACb0O,cAAeA,EACf3uD,oBAAqB0uD,C,KApC3B,SAAS9lE,IACP,OAAO6kC,C,CAOT,SAASwyB,EAAY1iD,GAEnB,OADAkwB,EAAmB11C,EAAE0N,KAAKgpE,EAAY,CAAClxD,MAAOA,CAAA,CAAA,EACvC1lB,I,CAGT,SAAS82E,IACP,OAAOF,C,CAGT,SAASC,IACP,OAAOD,GAAkC,EAApBA,EAAWl1E,M,gDA5BpCsN,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,iBAAkB61D,CAAA,C,ICJjC,WACE,aAKA,SAAStK,EAAY5/D,GAEnB,MAAO,CACLwb,qBAIF,SAA8B86B,EAAW9yC,GACvC,IAAI8mE,EAAa,GAMjB,OAFAA,GAFAA,GADAA,GAActqE,EAAgB,WAAYs2C,EAAW,eAAgB9yC,CAAA,IACvDA,EAAOU,QAAUV,EAAOU,OAAOjP,OAAS+K,EAAgB,WAAYs2C,EAAW,mBACzF,CAACpyC,OAA6B,QAAlBV,EAAOU,OAAkBlE,EAAgB,oBAAA,EAAwBwD,EAAOU,MAAA,CAAA,EAAY,MACtFV,EAAOa,WAAab,EAAOa,UAAUpP,OAAS+K,EAAgB,WAAYs2C,EAAW,sBAC/F,CAACjyC,UAAab,EAAOa,UAAUzP,YAAA,CAAA,CAAA,EAAkB,IAC9CnB,EAAEm7C,SAAS07B,CAAA,C,iCAjBtB/nE,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,SAAUurD,CAAA,C,ICJzB,WACE,aAEAr9D,QAAQC,OAAO,kBAAA,EACV6R,QAAQ,SAEb,WAEE,SAASw1D,EAAOl0E,GACd,GAAI,EAAEpC,gBAAgBs2E,GAAS,OAAO,IAAIA,EAAOl0E,CAAA,EACjDpC,KAAKqI,QAAQjG,CAAA,C,CAef,OAZAlC,EAAEC,OAAOm2E,EAAOjgE,UAAW,CACzBogE,YAAeH,EACfjuE,QAAU,SAAUjG,GACPpC,KACN0lB,MAAQtjB,EAAK40E,WADPh3E,KAENinB,iBAAmB7kB,EAAK63B,iB,EAE/BhpB,SAAU,WACR,OAAOjR,KAAK0lB,K,IAIT4wD,C,CArBc,C,ICJzB,WACE,aAkBA,SAASW,EAAeh0D,GACtB,MAAO,CACL1D,SAAU,IACVC,MAAO,GACPzP,YAAc,yCACd+rD,WAAY,CAAA,EACZxrC,iBAAmB,CAAA,EACnBtgB,WAAa,wBACbkxB,KAAM,SAAU1hB,EAAO+jB,GACrB/jB,EAAM03D,mBAAqB,CAAA,EAC3Bj0D,EAAS,WACPzD,EAAM03D,mBAA0D,OAArC3zC,EAAK,GAAGyZ,cAAc,SAAA,C,EACjD,EAAE,CAAA,CAAA,C,0BA5BVhuC,QACKC,OAAO,kBAAA,EACPqN,UAAU,iBAAkB26D,CAAA,EAC5BjnE,WAAW,kBAEhB,WAEEhQ,KAAK2uE,YAAc,CAAA,EADV3uE,KAGNm3E,UAAY,WACb,IAAI5yD,EAAUvkB,KAAK2uE,YAAc,QAAU,OAC3C3uE,KAAK2uE,YAAc,CAAC3uE,KAAK2uE,YACzB3/D,QAAQi+B,QAAQtsB,SAAS8rC,uBAAuB,UAAA,CAAA,EAAa2qB,IAAI,CAAC7yD,QAAUA,CAAA,CAAA,C,EAT7C,C,ICNpC,WACG,aAMA,SAAS8yD,EAAqBC,GAE1B,SAAS/9D,EAAgBZ,EAAY4+D,EAAgBn+D,GACjD,GAAI,EAAEpZ,gBAAgBuZ,GAAkB,OAAO,IAAIA,EAAgBZ,EAAY4+D,EAAgBn+D,CAAA,EAC/Fk+D,EAAW/zE,KAAKvD,KAAM,kBAAA,EAY1B,SAAiB2Y,EAAY4+D,EAAgBn+D,GACrChX,EAAOlC,EAAEyY,CAAA,EAAY/R,IAAI,SAAU6K,GACnC,MAAO,CACHuH,UAAWvH,EAAEwH,IACbsL,QAAS9S,EAAExP,K,IAEhBA,MAAA,EAEHjC,KAAKoZ,gBAAkBA,EAEvBk+D,EAAWjhE,UAAUhO,QAAQ9E,KAAKvD,KAAKoC,CAAA,EAY3C,SAAgBm1E,GACZ,IAAIn1E,EAAOpC,KAAK06D,QAAA,EACZ8c,EAAiC,MAAlBD,EAAyBn1E,GAAQA,EAAK,GAAKlC,EAAE0N,KAAKxL,EAAM,CACvE4W,UAAWu+D,C,GAEfv3E,KAAKu4C,gBAAgBi/B,CAAA,C,EAhBdj0E,KAAKvD,KAAMu3E,CAAA,C,EArBVh0E,KAAKvD,KAAK2Y,EAAY4+D,EAAgBn+D,CAAA,C,CAQlD,OALAG,EAAgBlD,UAAYnW,EAAEu3E,OAAOH,EAAWjhE,UAAW,CACvDqhE,gBAoBJ,WACI,MAAO,yD,EApBPC,UAuBJ,WACI,OAAOC,QAAQ53E,KAAKoZ,gBAAgBy+D,gBAAA,CAAA,C,IArBjCt+D,C,0BAlBXvK,QACKC,OAAO,qBAAA,EACP6R,QAAQ,kBAAmBu2D,CAAA,C,ICLnC,WACG,aAMA,SAASS,EAA0BR,GAE/B,SAAS79D,EAAqBhC,EAAiBsgE,EAAqBz+D,GAChE,GAAI,EAAEtZ,gBAAgByZ,GAAuB,OAAO,IAAIA,EAAqBhC,EAAiBsgE,EAAqBz+D,CAAA,EACnHg+D,EAAW/zE,KAAKvD,KAAM,wBAAA,EAY1B,SAAiByX,EAAiBiC,EAAgBJ,GAC1ClX,EAAOlC,EAAEuX,CAAA,EAAiB7Q,IAAI,SAAU6K,GACxC,MAAO,CACHiI,eAAgBjI,EAAEwH,IAClBsL,QAAS9S,EAAExP,K,IAEhBA,MAAA,EAEHjC,KAAKsZ,gBAAkBA,EAEvBg+D,EAAWjhE,UAAUhO,QAAQ9E,KAAKvD,KAAKoC,CAAA,EAY3C,SAAgB21E,GACZ,IAAI31E,EAAOpC,KAAK06D,QAAA,EACZ8c,EAAsC,MAAvBO,EAA8B31E,GAAQA,EAAK,GAAKlC,EAAE0N,KAAKxL,EAAM,CAC5EsX,eAAgBq+D,C,GAEpB/3E,KAAKu4C,gBAAgBi/B,CAAA,C,EAhBdj0E,KAAKvD,KAAM0Z,CAAA,C,EArBVnW,KAAKvD,KAAKyX,EAAiBsgE,EAAqBz+D,CAAA,C,CAQ5D,OALAG,EAAqBpD,UAAYnW,EAAEu3E,OAAOH,EAAWjhE,UAAW,CAC5DqhE,gBAoBJ,WACI,MAAO,wE,EApBPC,UAuBJ,WACI,OAAOC,QAAQ53E,KAAKsZ,gBAAgBu+D,gBAAA,CAAA,C,IArBjCp+D,C,0BAlBXzK,QACKC,OAAO,qBAAA,EACP6R,QAAQ,uBAAwBg3D,CAAA,C,ICLxC,WACG,aAMA,SAASE,EAAW7rE,GAChB,IAAImX,EAAKtjB,KACL+E,EAASue,EAAGve,OAEhBA,EAAOkzE,YAAY30D,EAAGtW,cAAciM,GAAA,EACpCqK,EAAGlhB,KAAO2C,EAAO21D,QAAA,EAEjBp3C,EAAG40D,aAAenzE,EAAO2yE,gBAAA,EACzBp0D,EAAGqT,SAAW,WACV5xB,EAAOwzC,gBAAgBj1B,EAAGk0D,YAAA,EAC1B,IAAIW,EAAMpzE,EAAOqzE,gBAAA,EACjBjsE,EAAO4a,YAAYoxD,EAAItxB,cAAesxB,EAAIrtD,YAAaqtD,EAAIptD,UAAA,EAC3DzH,EAAGhP,OAAA,C,EAGPgP,EAAGq0D,UAAY5yE,EAAO4yE,UAAA,EAEtBr0D,EAAG+0D,WAAatzE,EAAOszE,WAAA,EAEvB/0D,EAAGk0D,aAAezyE,EAAO8yE,gBAAA,C,sBAvB7B7oE,QACKC,OAAO,qBAAA,EACPe,WAAW,aAAcgoE,CAAA,C,ICLjC,WACG,aAEAhpE,QACKC,OAAO,qBAAA,EACPqN,UAAU,YAEf,WACI,MAAO,CACHiD,SAAU,IACVxP,YAAa,gCACbC,WAAY,mBACZsgB,iBAAkB,CAAA,EAClB9Q,MAAO,CACHza,OAAQ,IACRuP,OAAQ,IACRtH,cAAe,G,GAXC,C,ICL/B,WACG,aAEAgC,QACKC,OAAO,qBAAA,EACP6R,QAAQ,aAEb,WAEI,SAASsC,EAAOk1D,GACZ,GAAI,EAAEt4E,gBAAgBojB,GAAS,OAAO,IAAIA,EAAOk1D,CAAA,EAEjDt4E,KAAKu4E,cAAgB,KACrBv4E,KAAKw4E,UAAY,KACjBx4E,KAAKy4E,YAAcH,EACnBt4E,KAAK04E,MAAQ,E,CAoCjB,OAjCAx4E,EAAEC,OAAOijB,EAAO/M,UAAW,CACvBqkD,QAAS,WACL,OAAO16D,KAAK04E,K,EAEhBrwE,QAAS,SAAUjG,GACfpC,KAAK04E,MAAQt2E,C,EAEjBs1E,gBAAiBiB,EAAc,iBAAA,EAC/BN,WAAY,WACR,OAAOr4E,KAAK04E,OAA+B,IAAtB14E,KAAK04E,MAAMh3E,M,EAEpCi2E,UAAWgB,EAAc,WAAA,EACzBpgC,gBAAiB,SAAUqgC,GACvB54E,KAAKu4E,cAAgBK,C,EAEzBf,gBAAiB,WACb,OAAO73E,KAAKu4E,a,EAEhBH,gBAAiB,WACb,MAAO,CACHvxB,cAAe7mD,KAAKw4E,UACpB1tD,YAAa9qB,KAAKy4E,YAClB1tD,WAAY/qB,KAAKu4E,eAAiBv4E,KAAKu4E,cAAch0D,O,GAG7D0zD,YAAc,SAAU3nE,GACpBtQ,KAAKw4E,UAAYloE,C,EAErBkoC,yBAA0B,SAAUx/B,GAChC,OAAOhZ,KAAKu4E,eAAiBv4E,KAAKu4E,cAAcv/D,E,IAIjDoK,EAEP,SAASu1D,EAAcl3D,GACnB,OAAO,WACHuV,QAAQloB,MAAM,IAAI1G,MAAM,IAAMqZ,EAAS,wBAA0BzhB,KAAKy4E,WAAA,CAAA,C,GAlDvD,C,ICL9B,WACG,aAMA,SAASI,EAAqBvB,GAE1B,SAASj+D,EAAgBZ,EAAsBqgE,EAAgBC,EAAiBC,GAC5E,GAAI,EAAEh5E,gBAAgBqZ,GAAkB,OAAO,IAAIA,EAAgBZ,EAAsBqgE,EAAgBC,EAAiBC,CAAA,EAE1H1B,EAAW/zE,KAAKvD,KAAM,iBAAA,EAW1B,SAAiByY,EAAsBqgE,EAAgBC,EAAiBC,GAChE52E,EAAOlC,EAAEuY,CAAA,EAAsB7R,IAAI,SAAU6K,GAC7C,MAAO,CACH6D,WAAY7D,EAAE6D,WACdX,SAAUlD,EAAEkD,SACZ4P,QAAS9S,EAAEkD,SAAWlD,EAAE6D,WAAa,IAAM7D,EAAEkD,SAAWlD,EAAE6D,U,IAE/DrT,MAAA,EAEHq1E,EAAWjhE,UAAUhO,QAAQ9E,KAAKvD,KAAKoC,CAAA,EAY3C,SAAgB22E,EAAiBC,GAC7B,IAAI52E,EAAOpC,KAAK06D,QAAA,EAGhB8c,EAAkC,MAAnBuB,GAA4C,MAAjBC,EAAwB52E,EAAK,GAAKlC,EAAE0N,KAAKxL,EAAM,CACrFkT,WAAYyjE,EACZpkE,SAAUqkE,C,GAGdh5E,KAAKu4C,gBAAgBi/B,CAAA,C,EApBdj0E,KAAKvD,KAAM+4E,EAAiBC,CAAA,C,EApB3Bz1E,KAAKvD,KAAKyY,EAAsBqgE,EAAgBC,EAAiBC,CAAA,C,CAQ7E,OALA3/D,EAAgBhD,UAAYnW,EAAEu3E,OAAOH,EAAWjhE,UAAW,CACvDqhE,gBAmBJ,WACI,MAAO,yD,EAnBPC,UAsBJ,WACI,MAAO,CAAA,C,IApBJt+D,C,0BAlBXrK,QACKC,OAAO,qBAAA,EACP6R,QAAQ,kBAAmB+3D,CAAA,C,ICLpC,WACE,aAEA7pE,QACKC,OAAO,yBAAA,EACPqN,UAAU,gBAEf,WACE,MAAO,CACLiD,SAAU,IACVxP,YAAc,uCACdyP,MAAM,CACJqE,cAAe,IACf1T,SAAW,IACX2T,YAAa,IACbm1D,eAAgB,IAChBl1D,QAAS,G,GAXiB,C,ICLlC,WACE,aAOA,SAASm1D,EAAmBlvE,EAAQuC,EAAcH,EAAMS,GACtD,IAAIyW,EAAKtjB,KAmBT,SAASm5E,IACP,IAwBIC,EAQel2B,EAhCfm2B,EAgBGn5E,EAAE6E,OAAOue,EAAGzE,WAAY,CAAC0T,WAAY,CAAA,CAAA,CAAA,EAVxCvT,GAJD9e,EAAE+1C,QAAQojC,CAAA,IACXA,GAqBED,EAAiB7sE,EAAa6R,SAC9Ble,EAAEuW,QAAQlK,EAAa6R,QAAA,EAAY7R,EAAa6R,SAAU,CAAC7R,EAAa6R,UAAW,IAEhE,OAAUle,EAAE6E,OAAOue,EAAGzE,WAAY,SAAUqU,GACjE,OAAOhzB,EAAE+M,SAASmsE,EAAgBlmD,EAAM9U,QAAA,C,GACd,GAAvBkF,EAAGzE,WAAWnd,OAAc,CAACxB,EAAEmrB,KAAK/H,EAAGzE,UAAA,GAAeyE,EAAGzE,YAvB9C3e,EAAE0G,IAAIyyE,EAAe,UAAA,GAMrC,OAoBmBn2B,EAxBPlkC,EAyBZ9e,EAAEia,QAAQmJ,EAAGzE,WAAW,SAASqU,GAC/BA,EAAMX,WAAaryB,EAAE+M,SAASi2C,EAAmBhwB,EAAM9U,QAAA,C,GAM9B,GAFDi7D,EA7BPA,GA+BD33E,OAChB4hB,EAAGg2D,gBAAkBp5E,EAAEmrB,KAAKguD,CAAA,EAAgBp2B,UAAY,MAAQ/iD,EAAEwrB,KAAK2tD,CAAA,EAAgB33E,OACrD,IAA1B23E,EAAe33E,SACvB4hB,EAAGg2D,gBAAkBp5E,EAAEmrB,KAAKguD,CAAA,EAAgBp2B,WAjC9Cs2B,EAAA,EAEOv6D,C,CAOT,SAASu6D,IACPj2D,EAAGk2D,cAAgB,CAACt5E,EAAEu5E,MAAMn2D,EAAGzE,WAAY,CAAC0T,WAAYryB,EAAEmrB,KAAK/H,EAAGzE,UAAA,EAAY0T,UAAA,CAAA,C,CAtChFjP,EAAGo2D,WAAqC,GAAvBp2D,EAAGzE,WAAWnd,QAAgB0K,EAAKkB,QAAA,GAAalB,EAAKkB,QAAA,EAAUqsE,WAEhFr2D,EAAGsyD,SAAW,SAAS9iD,GACjBA,IACE9T,EAAYm6D,EAAA,EAChBtsE,EAAgBi7C,8BAA8Bv7C,EAAa6R,SAAUY,CAAA,EACrEhV,EAAOL,GAAG,IAAK,CAACyU,SAAUY,CAAA,EAAY,CAACwP,QAAS,CAAA,CAAA,CAAA,E,EAIpDlL,EAAGs2D,kBAAoB,WACrBL,EAAA,C,EAIFJ,EAAA,C,8DAvBFnqE,QACKC,OAAO,6BAAA,EACPe,WAAW,qBAAsBkpE,CAAA,EACjC58D,UAAU,oBAwEf,WACE,MAAO,CACLiD,SAAU,IACV+Q,iBAAmB,CAAA,EACnBtgB,WAAa,2BACbD,YAAc,+CACdyP,MAAO,CACLX,WAAY,G,GA/EkB,C,ICNrC,WACG,aAUA,SAASg7D,EAAW74D,EAAI5M,EAAQ6O,EAAU62D,GACtC,IAAIC,EAAY,EACZC,EAAW,EACXC,EAAW,GACXC,EAAiB,GACjBC,EAAmB,CAAC,EACpBC,EAAU,GACVp7B,EAAiB,GAEjB17B,EAAKtjB,KAyBT,SAASq6E,EAAYC,GACjB,OAAOt5D,EAAGiI,KAYd,SAAqBqxD,GACblzD,EAAQkzD,IAAoBR,EAAcS,QAAW,EAAEP,EAAW,EAAED,EAExE,OAAwB3yD,GAApB+yD,EACOn5D,EAAGiI,KAAKixD,EAAe9yD,EAAA,EAGvB9D,EAAGk3D,UAAU,CAACx7B,eAAgBA,CAAA,CAAA,EAAiBtxC,KAAK,SAAUzL,GAEjE,OADAi4E,EAAe,EAAEC,GAAoBl4E,C,GAEtC8f,MAAM,SAAUjT,GACf,OAAOwU,EAAGm3D,QAAQC,eAAeC,WAAA,C,IAvBdL,CAAA,CAAA,EAAkB5sE,KAAK,SAASktE,GAMvD,OALAX,EAAWW,EAAgBX,SAC3BG,EAAU92D,EAAGw+B,iBAAiB,CAAC7xC,OAAO2qE,EAAgB9lD,MAAA,CAAA,EACtD50B,EAAEmwB,OAAO2uB,EAAgB17B,EAAGu3D,kBAAkB,CAACz4E,KAAMg4E,EAASx0D,MAAOw0D,EAAQ14E,OAAS,CAAA,CAAA,CAAA,EACtF4hB,EAAGm3D,QAAQC,eAAeI,qBAAA,EAC1Bx3D,EAAGy3D,YAAY34E,KAAQk4E,IAAoBR,EAAcS,QAAWj3D,EAAGy3D,YAAY34E,KAAK+F,OAAOiyE,CAAA,EAAWA,EAAQjyE,OAAOmb,EAAGy3D,YAAY34E,IAAA,EACjIkhB,EAAGm3D,QAAQC,eAAeC,WAAuB,EAAZZ,EAA2B,MAAZE,CAAY,EAAMvsE,KAAK,WAsB1F,IAAyBstE,EAAAA,EArBIV,IAAoBR,EAAcS,QAAWT,EAAcmB,SAAWnB,EAAcS,QAuBlF,EAAvBP,EAAWD,IAEXz2D,EAAGm3D,QAAQC,eAAeI,qBAAA,EACtBE,IAAqBlB,EAAcmB,UACnC33D,EAAGy3D,YAAY34E,KAAOkhB,EAAGy3D,YAAY34E,KAAKkG,MAAMgb,EAAGxjB,QAAQqQ,QAAA,EAC3D4pE,CAAA,GACA92D,EAAS,WAELK,EAAGm3D,QAAQC,eAAeQ,eAA2B,EAAZnB,EAA2B,MAAZE,CAAY,C,KAGxE32D,EAAGy3D,YAAY34E,KAAOkhB,EAAGy3D,YAAY34E,KAAKkG,MAAM,EAAyB,EAAtBgb,EAAGxjB,QAAQqQ,QAAW,EACzE6pE,CAAA,GACA95E,EAAEmwB,OAAO2uB,EAAgB17B,EAAGu3D,kBAAkB,CAACz4E,KAAMg4E,EAASx0D,MAAOw0D,EAAQ14E,OAAS,CAAA,CAAA,CAAA,EACtFuhB,EAAS,WAELK,EAAGm3D,QAAQC,eAAeS,kBAA8B,EAAZpB,EAA2B,MAAZE,CAAY,C,SAvEvF32D,EAAGy3D,YAAc,CACbK,cAAe,CAAA,EACf77B,0BAA2Bj8B,EAAGxjB,QAAQy/C,0BACtC87B,iBAAkB,CAAA,EAClBC,mBAAoB,CAAA,EACpBl5E,KAUAkhB,KAAAA,EAAGk3D,UAAA,EAAY9sE,KAAK,SAAUtL,GAC1B63E,EAAW73E,EAAK63E,SAChBC,EAAe,EAAEC,GAAoB/3E,EACjCm5E,EAAiBj4D,EAAGw+B,iBAAiB,CAAC7xC,OAAO7N,EAAK0yB,MAAA,CAAA,EACtD50B,EAAEmwB,OAAO2uB,EAAgB17B,EAAGu3D,kBAAkB,CAACz4E,KAAMm5E,EAAgB31D,MAAO21D,EAAe75E,OAAS,CAAA,CAAA,CAAA,EACpG4hB,EAAGy3D,YAAY34E,KAAOm5E,C,GAd1BC,cAAe,SAASf,GACpBA,EAAQC,eAAez5E,GAAGw6E,iBAAiBrnE,EAAQimE,EAAYvuB,KAAK,KAAMguB,EAAcS,OAAA,CAAA,EACxFE,EAAQC,eAAez5E,GAAGy6E,oBAAoBtnE,EAAQimE,EAAYvuB,KAAK,KAAMguB,EAAcmB,QAAA,CAAA,EAC3F33D,EAAGm3D,QAAUA,C,EAEjBv7B,WAAY57B,EAAGxjB,QAAQo/C,U,uDA7B/BlwC,QACKC,OAAO,qBAAA,EACPe,WAAW,aAAc6pE,CAAA,EACzB3qE,SAAS,gBAAiB,CACvBqrE,QAAW,UACXU,SAAY,U,MCRvB,WACG,aAEAjsE,QACKC,OAAO,qBAAA,EACPqN,UAAU,YAEf,WACI,MAAO,CACHiD,SAAU,IACVxP,YAAa,6CACbC,WAAY,mBACZsgB,iBAAkB,CAAA,EAClB9Q,MAAO,CACH1f,QAAS,IACT06E,UAAW,IACX14B,iBAAkB,IAClB+4B,kBAAmB,G,GAZH,C,ICLhC,WACE,aAEA7rE,QACKC,OAAO,8BAAA,EACPe,WAAW,2BAGhB,WACE,IAAIsT,EAAKtjB,KAETsjB,EAAGq4D,qBAAuB,WACxBr4D,EAAGs4D,WAAa17E,EAAEojB,EAAGxjB,QAAQkH,MAAA,EACxBJ,IAAI,SAAUM,GACb,OAAOhH,EAAEq3B,KAAKrwB,EAAG,CAAC,OAAQ,UAAW,YAAA,C,GACpC+2C,OAAO,MAAA,EAAQh8C,MAAA,EAEtBqhB,EAAGu4D,aAAe37E,EAAEojB,EAAGxjB,QAAQkH,MAAA,EAC1ButB,QAAQ,SAAUvtB,GACjB,OAAOA,EAAO6rD,OAAOiH,U,GAEtBlzD,IAAI,SAAUkuB,EAAQ7b,GACrB,MAAO,CACLjR,KAAMsb,EAAGxjB,QAAQixD,YAAcztC,EAAGxjB,QAAQixD,WAAW93C,GACrD6iE,aAAc57E,EAAE0G,IAAIkuB,EAAQ,WAAA,EAC5BsjC,OAAc,EAANn/C,C,IAGXhX,MAAA,C,EAGPqhB,EAAGy4D,sBAAwB,SAAU9iE,GACnC,IAAI0+D,EAAYz3E,EAAE0N,KAAK0V,EAAGxjB,QAAQkH,OAAQ,CAACgB,KAAMiR,CAAA,CAAA,EAAM+5C,QACvD9yD,EAAEojB,EAAGxjB,QAAQkH,MAAA,EAAQjC,OAAO,CAACiD,KAAMiR,CAAA,CAAA,EAAMkB,QAAQ,SAAUjT,GACzDA,EAAE8rD,QAAU,CAAC2kB,C,IA7ByB,C,ICL9C,WACE,aAEA3oE,QACKC,OAAO,8BAAA,EACPqN,UAAU,uBAAwB,WACjC,MAAO,CACLiD,SAAU,IACVvP,WAAa,iCACbsgB,iBAAkB,CAAA,EAClBvgB,YAAc,kFACdyP,MAAO,CACL1f,QAAS,G,EAEXohC,KAAM,SAAU1hB,GACdA,EAAM9Q,OAAO,aAAc,SAASqtD,GAC9BA,GACFv8C,EAAM8D,GAAGq4D,qBAAA,C,EAEV,CAAA,CAAA,C,QCnBf,WACE,aAOA,SAASK,EAAyBh7D,EAAIhX,EAAQuC,EAAcyS,EAAWzO,EAASuO,EAAiByiC,EAC/D4O,EAAqBvyC,EAAUmyC,EAAaqd,EAAUlZ,EAAYh1C,GAClG,IAAIoE,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YACjC1iC,EAAexf,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,EAUvD+xC,GARJztC,EAAGrF,cAAgB1R,EAAa0R,eAAiB,EACjDqF,EAAG4Z,QAAU6yB,EAAY7yB,QAAQg3B,EAAWod,mBAAA,EAC5ChuD,EAAG24D,eAAiB/7E,EAAE0N,KAAK0V,EAAG4Z,QAAS,SAAUO,GAC/C,OAAOv9B,EAAEiK,GAAGszB,EAAO6kB,QAAQt6C,KAAMuE,EAAa2vE,gBAAA,C,IAC1Ch8E,EAAEmrB,KAAK/H,EAAG4Z,OAAA,EAEhB5Z,EAAGguC,UAAYvB,EAAYY,WAAWpgD,EAAQoP,WAAA,EAC9C2D,EAAGkrD,aAAe5wD,EAAS8pC,eAAe0lB,CAAA,EACzBltE,EAAE0G,IAAI0c,EAAGguC,UAAW,MAAA,GAEjC6qB,EAAcpsB,EAAYjwD,QAAQsiD,EAAa2O,EAAYhB,EAAY4B,8BAA+B,CAAA,CAAA,EA6E1G,SAASyqB,EAAaC,EAAqBJ,EAAgBh+D,GACzD,IAAI1N,EAAU2O,EAAQsyC,UAAA,EAEtBjhD,EAAQi/D,wBAA0B,CAChC8M,oBAAqB1+D,EAAS2pC,qBAAqB80B,EAAoBp6E,MAAMo9B,SAAA,EAC7Ek9C,kBAAmB3+D,EAAS2pC,qBAAqB80B,EAAoBp6E,MAAMs9B,OAAA,EAC3E28C,iBAAkBD,EAClBh+D,cAAeA,C,EAGjBiB,EAAQmvD,UAAU99D,CAAA,C,CArFpB+S,EAAGk5D,aAAe,WAChBl5D,EAAGm5D,aAAe1sB,EAAYwB,uBAAuBjuC,EAAGguC,UAAU,GAAGrvD,KAAA,EAErE,IAAI8sD,EAAOxzC,OAAO+H,EAAGguC,UAAU,GAAGrvD,MAAMs9B,OAAA,EAASwvB,KAAKxzC,OAAO+H,EAAGguC,UAAU,GAAGrvD,MAAMo9B,SAAA,EAAY,MAAA,EAC/F/b,EAAGguC,UAAU,GAAGrvD,MAAMo9B,UAAYzhB,EAAS8pC,eAAevhD,KAAKyB,IAAI2T,OAAO+H,EAAGguC,UAAU,GAAGrvD,MAAMo9B,SAAA,EAC5F9jB,OAAO+H,EAAGm5D,YAAA,CAAA,CAAA,EACdn5D,EAAGguC,UAAU,GAAGrvD,MAAMs9B,QAAU3hB,EAAS8pC,eAAensC,OAAO+H,EAAGguC,UAAU,GAAGrvD,MAAMo9B,SAAA,EAAWge,IAAI0R,EAAM,MAAA,CAAA,C,EAG5GzrC,EAAGhP,OAAS,WACV,IAAIooE,EAAsBx8E,EAAE0G,IAAI0c,EAAGguC,UAAW,SAAUtuD,GACtD,OAAO+sD,EAAYsB,gBAAgBruD,EAAMf,KAAA,C,GAG3C+H,EAAOL,GAAG,IAAK,CAAC8zB,OAAQna,EAAG24D,eAAe35B,QAAQt6C,KAChDq3B,UAAWq9C,EAAoB,GAAGr9C,UAAWE,QAASm9C,EAAoB,GAAGn9C,QAC7E+8C,oBAAqBI,EAAoB,GAAGr9C,UAAWk9C,kBAAmBG,EAAoB,GAAGn9C,QACjGthB,cAAeqF,EAAGrF,aAAA,CAAA,C,EAGtBqF,EAAGq5D,kBAAoB,WACrBP,EAAa94D,EAAGguC,UAAU,GAAIhuC,EAAG24D,eAAe35B,QAAQt6C,KAAMsb,EAAGrF,aAAA,EAEjEqF,EAAGue,aAAesuB,EAAoBxwB,gBAAgBw8C,EAAY74D,EAAG24D,eAAe35B,QAASh/B,EAAGue,YAAA,CAAA,C,EAGlGve,EAAGo3C,QAAU,SAAUuhB,GACrB,IAAIW,EAAsB18E,EAAE0G,IAAI0c,EAAGguC,UAAW,SAAUtuD,GACtD,IAAIke,EAAM+6D,EAAe35B,QAAQphC,IACjC,OAAOpC,EAAgBc,gBAAgBsB,EAAKkhC,EACxCliD,EAAEiF,MAAM,GAAIua,EAAcqwC,EAAYsB,gBAAgBruD,EAAMf,KAAA,CAAA,CAAA,C,GAGlE,OAAO+e,EAAG2I,IAAIizD,CAAA,EAAqBlvE,KAAM,SAAUmvE,GACjD,OAAO38E,EAAE0G,IAAIi2E,EAAW,SAAU36D,GAC5B9f,EAAO65E,EAAejoB,cAAc9xC,CAAA,EAExC,MAAO,CACLm9C,SAFkB9d,EAAcO,iBAAiBm6B,EAAe35B,QAAQ1iD,MAAOwC,EAAK0hD,WAAA,EAGpFxpC,QAASlY,EAAKkY,O,OAMtBgJ,EAAGs3C,YAAc,SAAUC,GACzB,OAAO1K,EAAoByJ,eAAe15D,EAAE0G,IAAIi0D,EAAe,UAAA,EAC3DshB,EAAY74D,EAAG24D,eAAe35B,QAASh/B,EAAGue,YAAA,CAAA,C,EAGhDve,EAAGw3C,gBAAkB,SAAUD,GAC7Bv3C,EAAGw5D,cAAgB/sB,EAAY6B,iBAAiB1xD,EAAE0G,IAAIi0D,EAAe,SAAA,EACjEv3C,EAAG24D,eAAe35B,QAASh/B,EAAGguC,SAAA,C,EAGpChuC,EAAGy5D,YAAc,SAASC,GACxB15D,EAAGrF,cAAgB++D,EACnBZ,EAAa94D,EAAGguC,UAAU,GAAIhuC,EAAG24D,eAAe35B,QAAQt6C,KAAMsb,EAAGrF,aAAA,C,EAOnE+C,EAAG2I,IAAIomC,EAAYkD,iBAAiB3vC,EAAG4Z,QAJvC,WACE,OAAOlc,EAAG5Q,QAAQkT,EAAGguC,SAAA,C,EAG0ChuC,EAAGguC,SAAA,CAAA,EAAY5jD,KAAK,SAAUuvE,GAC7F35D,EAAG25D,kBAAoBA,EAEnBC,EAAantB,EAAYkD,iBAAiB3vC,EAAG4Z,QAAS5Z,EAAGo3C,QAASp3C,EAAGguC,SAAA,EAEzEtwC,EAAG2I,IAAIuzD,CAAA,EAAYxvE,KAAK,SAAUuvE,GAChC35D,EAAG25D,kBAAoBA,C,KAkB3B35D,EAAGk5D,aAAA,EACHl5D,EAAGq5D,kBAAA,C,mLAjHL3tE,QACKC,OAAO,8BAAA,EACPe,WAAW,2BAA4BgsE,CAAA,C,ICL9C,WACE,aAOA,SAASmB,EAAyBn8D,EAAIhX,EAAQuC,EAAcyS,EAAWzO,EAASuO,EAAiByiC,EAC/D4O,EAAqBJ,EAAa7wC,EAASg1C,GAC3E,IAAI5wC,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YACjC1iC,EAAexf,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,EAevD+xC,GAbJztC,EAAGrF,cAAgB1R,EAAa0R,eAAiB,EACjDqF,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAG4Z,QAAU6yB,EAAY7yB,QAAQg3B,EAAWqd,mBAAA,EAC5CjuD,EAAG24D,eAAiB/7E,EAAE0N,KAAK0V,EAAG4Z,QAAS,SAAUO,GAC/C,OAAOv9B,EAAEiK,GAAGszB,EAAO6kB,QAAQt6C,KAAMuE,EAAa2vE,gBAAA,C,IAC1Ch8E,EAAEmrB,KAAK/H,EAAG4Z,OAAA,EAEhB5Z,EAAGnO,YAAc46C,EAAY56C,YAAY5E,EAAQoP,WAAA,EACjD2D,EAAGve,OAASma,EAAQsyC,UAAA,EACpBluC,EAAG85D,iBAAmBl+D,EAAQsyC,UAAA,EAC9BluC,EAAG85D,iBAAiB1+D,YAAc4E,EAAGnO,YAAY,GAAGlT,MAAMyc,YAEzCxe,EAAE0G,IAAI0c,EAAGnO,YAAa,SAAUC,GAC/C,OAAOA,EAAUpN,KAAA,C,IAGfm0E,EAAcpsB,EAAYjwD,QAAQsiD,EAAa2O,EAAYhB,EAAYe,8BAA8BC,CAAA,CAAA,EAqEzG,SAASqrB,EAAaiB,EAAqBpB,EAAgBh+D,GACzD,IAAI1N,EAAU2O,EAAQsyC,UAAA,EAEtBjhD,EAAQi/D,wBAA0B,CAChC8N,qBAAsBD,EAAoBp7E,MAAMqT,WAChDioE,mBAAoBF,EAAoBp7E,MAAM0S,SAC9C6oE,yBAA0BH,EAAoBp7E,MAAM6xD,eACpD31C,sBAAuBk/D,EAAoBp7E,MAAMyc,aAAe,CAAA,EAChEw9D,iBAAkBD,EAClBh+D,cAAeA,C,EAGjBiB,EAAQmvD,UAAU99D,CAAA,C,CA/EpB+S,EAAGhP,OAAS,WACV,IAAImpE,EAAqB1tB,EAAYsB,gBAAgB/tC,EAAGguC,SAAA,EAExDtnD,EAAOL,GAAG,IAAKzJ,EAAEiF,MAAMs4E,EAAoB,CAAEhgD,OAAQna,EAAG24D,eAAe35B,QAAQt6C,KAC7EsN,WAAYgO,EAAGnO,YAAY,GAAGlT,MAAMqT,WAAYX,SAAU2O,EAAGnO,YAAY,GAAGlT,MAAM0S,SAClFm/C,eAAgBxwC,EAAGnO,YAAY,GAAGlT,MAAM6xD,eAAgBp1C,YAAa4E,EAAGve,OAAO2Z,YAC/E4+D,qBAAsBh6D,EAAGnO,YAAY,GAAGlT,MAAMqT,WAC9CioE,mBAAoBj6D,EAAGnO,YAAY,GAAGlT,MAAM0S,SAC5C6oE,yBAA0Bl6D,EAAGnO,YAAY,GAAGlT,MAAM6xD,eAClD31C,sBAAuBmF,EAAG85D,iBAAiB1+D,aAAe,CAAA,EAC1DT,cAAeqF,EAAGrF,aAAA,CAAA,CAAA,C,EAGtBqF,EAAGq5D,kBAAoB,WACrBP,EAAa94D,EAAGnO,YAAY,GAAImO,EAAG24D,eAAe35B,QAAQt6C,KAAMsb,EAAGrF,aAAA,EAEnEqF,EAAGue,aAAesuB,EAAoBxwB,gBAAgBw8C,EAAY74D,EAAG24D,eAAe35B,QAASh/B,EAAGue,YAAA,CAAA,C,EAGlGve,EAAGo3C,QAAU,SAASuhB,GACpB,IAAIW,EAAsB18E,EAAE0G,IAAI0c,EAAGnO,YAAa,SAAUC,GACxD,IAAI8L,EAAM+6D,EAAe35B,QAAQphC,IACjC,OAAOpC,EAAgBc,gBAAgBsB,EAAKkhC,EACxCliD,EAAEiF,MAAM,GAAIua,EAAcqwC,EAAYsB,gBAAgB/tC,EAAGguC,SAAA,EAAYl8C,EAAUnT,KAAA,CAAA,C,GAGrF,OAAO+e,EAAG2I,IAAIizD,CAAA,EAAqBlvE,KAAM,SAAUmvE,GACjD,OAAO38E,EAAE0G,IAAIi2E,EAAW,SAAU36D,GAC5B9f,EAAO65E,EAAejoB,cAAc9xC,CAAA,EAExC,MAAO,CACLm9C,SAFkB9d,EAAcO,iBAAiBm6B,EAAe35B,QAAQ1iD,MAAOwC,EAAK0hD,WAAA,EAGpFxpC,QAASlY,EAAKkY,O,OAMtBgJ,EAAGs3C,YAAc,SAAUC,GACzB,OAAO1K,EAAoByJ,eAAe15D,EAAE0G,IAAIi0D,EAAe,UAAA,EAC3DshB,EAAY74D,EAAG24D,eAAe35B,QAASh/B,EAAGue,YAAA,CAAA,C,EAGhDve,EAAGw3C,gBAAkB,SAAUD,GAC7Bv3C,EAAGw5D,cAAgB/sB,EAAY6B,iBAAiB1xD,EAAE0G,IAAIi0D,EAAe,SAAA,EACjEv3C,EAAG24D,eAAe35B,QAASh/B,EAAGnO,WAAA,C,EAGpCmO,EAAGy5D,YAAc,SAASC,GACxB15D,EAAGrF,cAAgB++D,EACnBZ,EAAa94D,EAAGnO,YAAY,GAAImO,EAAG24D,eAAe35B,QAAQt6C,KAAMsb,EAAGrF,aAAA,C,EAOrE+C,EAAG2I,IAAIomC,EAAYkD,iBAAiB3vC,EAAG4Z,QAJvC,WACE,OAAOlc,EAAG5Q,QAAQkT,EAAGnO,WAAA,C,EAG0CmO,EAAGnO,WAAA,CAAA,EAAczH,KAAK,SAAUuvE,GAC/F35D,EAAG25D,kBAAoBA,EAEnBC,EAAantB,EAAYkD,iBAAiB3vC,EAAG4Z,QAAS5Z,EAAGo3C,QAASp3C,EAAGnO,WAAA,EAEzE6L,EAAG2I,IAAIuzD,CAAA,EAAYxvE,KAAK,SAAUuvE,GAChC35D,EAAG25D,kBAAoBA,C,KAmB3B35D,EAAGq5D,kBAAA,C,6JAjHL3tE,QACKC,OAAO,8BAAA,EACPe,WAAW,2BAA4BmtE,CAAA,C,ICL9C,WACE,aAEAnuE,QACKC,OAAO,8BAAA,EACPe,WAAW,kBAGhB,YAHmC,C,ICLrC,WACE,aAEAhB,QACKC,OAAO,8BAAA,EACPqN,UAAU,cAAe,WACxB,MAAO,CACLiD,SAAU,IACVvP,WAAa,wBACbsgB,iBAAkB,CAAA,EAClBvgB,YAAc,+DACdyP,MAAO,CACLq8D,aAAc,G,QCZ1B,WACE,aAOA,SAAS6B,EAAgB1+D,EAAWzO,EAASqN,EAAU2jC,EAAeziC,EACzC6/C,EAASD,EAAgB1O,EAAeuE,EAAY9S,GAC/E,IAAIn+B,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YAUjC1iC,GARJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAiB,CACzD/B,EAAqBhmC,OAAOY,aAAaV,OACzC8lC,EAAqBhmC,OAAOW,qBAAqBT,OACjD8lC,EAAqBhmC,OAAOU,eAAeR,O,EAG5Bzb,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAC3DsE,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAGq6D,WAAahf,EAAQqB,iBAAiBhQ,EAAc+E,GAAA,EACvDzxC,EAAGs6D,4BAA8B,SAASpwD,GACxC,OAAOA,C,EAGTlK,EAAGu6D,aAAelf,EAAQyB,cAAcpQ,EAAc6S,KAAA,EACtDv/C,EAAGw6D,8BAAgC,SAAStwD,GAC1C,OAAOA,C,EAGTlK,EAAGy6D,WAAapf,EAAQqB,iBAAiBhQ,EAAcgF,GAAA,EACvD1xC,EAAG06D,0BAA4B,SAASxwD,GACtC,OAAOA,C,EAGTlK,EAAG26D,aAAetf,EAAQyB,cAAcpQ,EAAc8S,KAAA,EACtDx/C,EAAG46D,4BAA8B,SAAS1wD,GACxC,IAAI2wD,EAAiB58B,EAAcG,aAAal0B,EAAQs2B,YAAa,CAACc,WAAY,iBAAkB+P,MAAO,CAAA,CAAA,CAAA,EACvGypB,EAAqBl+E,EAAE0rB,KAAKuyD,CAAA,EAGhC,OAFA76D,EAAG+6D,eAAiBD,GAAsBA,EAAmBn8E,MAEtDurB,C,EAITlK,EAAGg7D,gBAAkB3f,EAAQyB,cAAcpQ,EAAcmF,QAAA,EACzD7xC,EAAGi7D,kBAAoB,SAAS/wD,GAE9B,OADAlK,EAAG8xC,WAAat2C,EAAgB6lC,cAAcn3B,EAAQlT,QAAS,qBAAsBi6C,EAAWa,WAAWnzD,KAAA,EACpGurB,C,gKAlDXxe,QACKC,OAAO,8BAAA,EACPe,WAAW,kBAAmB0tE,CAAA,C,ICLpC,WACC,aAEA1uE,QACKC,OAAO,8BAAA,EACP6R,QAAQ,WAEb,WAEE,SAAS89C,EAASW,EAAU75C,EAAO84D,GACjC,GAAI,EAAEx+E,gBAAgB4+D,GAAW,OAAO,IAAIA,EAASW,EAAU75C,EAAO84D,CAAA,EAEtEx+E,KAAKu/D,SAAWA,EAChBv/D,KAAK0lB,MAAQA,EACb1lB,KAAKw+E,SAAWA,C,CAelB,OAZAt+E,EAAEC,OAAOy+D,EAASvoD,UAAW,CAC3BmpD,YAAa,WACX,OAAOx/D,KAAKu/D,Q,EAEdtuD,SAAU,WACR,OAAOjR,KAAK0lB,K,EAEd+4D,YAAa,WACX,OAAOz+E,KAAKw+E,Q,IAIT5f,C,CAxBgB,C,ICL3B,WACE,aAEA5vD,QACKC,OAAO,8BAAA,EACP6R,QAAQ,kBAEb,WAEE,SAAS49D,EAAgBjhD,EAAQkhD,EAAmBr8B,EAASs8B,GAC3D,GAAI,EAAE5+E,gBAAgB0+E,GACpB,OAAO,IAAIA,EAAgBjhD,EAAQkhD,EAAmBr8B,EAASs8B,CAAA,EAEjE5+E,KAAKy9B,OAASA,EACdz9B,KAAK2+E,kBAAoBA,EACzB3+E,KAAKsiD,QAAUA,EACftiD,KAAK4+E,aAAeA,C,CAkBtB,OAfA1+E,EAAEC,OAAOu+E,EAAgBroE,UAAW,CAClCwoE,UAAW,WACT,OAAO7+E,KAAKy9B,M,EAEdqhD,qBAAsB,WACpB,OAAO9+E,KAAK2+E,iB,EAEdI,WAAY,WACV,OAAO/+E,KAAKsiD,O,EAEd08B,gBAAiB,WACf,OAAOh/E,KAAK4+E,Y,IAITF,C,CA7BuB,C,ICLlC,WACE,aAOA,SAASO,EAAoBjgE,EAAWzO,EAASqN,EAAU2jC,EAAemd,EAAgB5/C,EAAiB6/C,EAC9E+f,EAAiB/hB,EAAwB3M,EAAeuE,GACnF,IAAIjxC,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAJJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAE3DsE,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAG47D,sBAAwB,CACnBlvB,EAAckF,SACdlF,EAAcsQ,MACdtQ,EAAcsN,mBACdtN,EAAc+S,iBACd/S,EAAcuN,WACpB32D,IAAI,SAAU07C,GACd,MAAO,CACL+X,cAAesE,EAAQqB,iBAAiB1d,CAAA,EACxCs8B,aAAc,SAAUpxD,GAEtB,OADAlK,EAAGg/B,EAAQt6C,MAAQ8W,EAAgB6lC,cAAcn3B,EAAQlT,QAAS,YAAai6C,EAAWC,GAAGvyD,KAAA,EACtFurB,C,KAKblK,EAAG+5C,iBAAmB,CAClBV,EACI,8BACA3M,EAAckF,SAASt1D,MAAM8lB,MAC7BsqC,EAAckF,SAASltD,I,EAE3B20D,EACI,8BACA3M,EAAcsN,mBAAmB19D,MAAM8lB,MACvCsqC,EAAcsN,mBAAmBt1D,I,EAErC20D,EACI,6BACA3M,EAAcuN,UAAU39D,MAAM8lB,MAC9BsqC,EAAcuN,UAAUv1D,I,qLAjDlCgH,QACKC,OAAO,8BAAA,EACPe,WAAW,sBAAuBivE,CAAA,C,ICLzC,WACE,aAEAjwE,QACKC,OAAO,8BAAA,EACP6R,QAAQ,yBAEb,WAEE,SAAS67C,EAAuBwiB,EAAiBz5D,EAAO83C,GACtD,GAAI,EAAEx9D,gBAAgB28D,GACpB,OAAO,IAAIA,EAAuBwiB,EAAiBz5D,EAAO83C,CAAA,EAE5Dx9D,KAAKm/E,gBAAkBA,EACvBn/E,KAAK0lB,MAAQA,EACb1lB,KAAKw9D,cAAgBA,C,CAevB,OAZAt9D,EAAEC,OAAOw8D,EAAuBtmD,UAAW,CACzC+oE,mBAAoB,WAClB,OAAOp/E,KAAKm/E,e,EAEdluE,SAAU,WACR,OAAOjR,KAAK0lB,K,EAEd25D,iBAAkB,WAChB,OAAOr/E,KAAKw9D,a,IAITb,C,CAzB8B,C,ICLzC,WACE,aAUA,SAAS2iB,EAAiBtgE,EAAWzO,EAASuO,EAAiB4/C,EAAgB1O,EAAe2O,EAASrK,EAAqBC,EAAYgrB,GAEtI,IAEIC,EAAqB7gB,EAAQwR,sBAC7BngB,EAAcqT,oBACdrT,EAAcqT,oBAAoBrR,QAAQl9B,OAAO,GAAGA,OAAO,GAC3D,CACEk7B,EAAcqT,oBAAoBrR,QAAQl9B,OAAO,GAAGA,OAAO,GAC3Dk7B,EAAcqT,oBAAoBrR,QAAQl9B,OAAO,GAAGA,OAAO,IAE7DyqD,EAAkBE,iBAAiB,mBAAoBzgE,EAAWzO,EAAS,mBAAA,C,EAG3EmvE,EAAqB/gB,EAAQwR,sBAC7BngB,EAAcsT,4BACdtT,EAAcsT,4BAA4BtR,QAAQl9B,OAAO,GAAGA,OAAO,GACnE,CACEk7B,EAAcsT,4BAA4BtR,QAAQl9B,OAAO,GAAGA,OAAO,GACnEk7B,EAAcsT,4BAA4BtR,QAAQl9B,OAAO,GAAGA,OAAO,IAErEyqD,EAAkBE,iBAAiB,mBAAoBzgE,EAAWzO,EAAS,oBAAA,C,EAI/EgvE,EAAkBI,kBACd3gE,EACAzO,EACA,CACA,CACE+xC,QAAU0N,EAAcmT,gBACxByc,WAAY9gE,EAAgB+kC,uBAAuB,mBAAA,C,EAErD,CACEvB,QAAU0N,EAAcoT,mBACxBwc,WAAY9gE,EAAgB+kC,uBAAuB,oBAAA,C,EAErD,CACEvB,QAAU0N,EAAcgT,S,EAE1B,CACE1gB,QAAU0N,EAAckT,UACxB0c,WAAY9gE,EAAgB+kC,uBAAuB,oBAAA,C,GAGrD,CAAE27B,EAAoBE,GA3CjB1/E,IA2CsC,C,CAIjD,SAAS6/E,EAAgB7gE,EAAWzO,EAASuO,EAAiB4/C,EAAgB1O,EAAe2O,EAASrK,EAAqBC,EAAYgrB,GACrI,IAEIC,EAAqB7gB,EAAQwR,sBAC7BngB,EAAc4T,mBACd5T,EAAc4T,mBAAmB5R,QAAQl9B,OAAO,GAAGA,OAAO,GAC1D,CACEk7B,EAAc4T,mBAAmB5R,QAAQl9B,OAAO,GAAGA,OAAO,GAC1Dk7B,EAAc4T,mBAAmB5R,QAAQl9B,OAAO,GAAGA,OAAO,IAE5DyqD,EAAkBE,iBAAiB,kBAAmBzgE,EAAWzO,EAAS,mBAAA,C,EAG1EmvE,EAAqB/gB,EAAQwR,sBAC7BngB,EAAc6T,2BACd7T,EAAc6T,2BAA2B7R,QAAQl9B,OAAO,GAAGA,OAAO,GAClE,CACEk7B,EAAc6T,2BAA2B7R,QAAQl9B,OAAO,GAAGA,OAAO,GAClEk7B,EAAc6T,2BAA2B7R,QAAQl9B,OAAO,GAAGA,OAAO,IAEpEyqD,EAAkBE,iBAAiB,kBAAmBzgE,EAAWzO,EAAS,oBAAA,C,EAG9EgvE,EAAkBI,kBACd3gE,EACAzO,EACA,CACA,CACE+xC,QAAU0N,EAAc0T,eACxBkc,WAAY9gE,EAAgB+kC,uBAAuB,mBAAA,C,EAErD,CACEvB,QAAU0N,EAAc2T,kBACxBic,WAAY9gE,EAAgB+kC,uBAAuB,oBAAA,C,EAErD,CACEvB,QAAU0N,EAAcuT,Q,EAE1B,CACEjhB,QAAU0N,EAAcyT,SACxBmc,WAAY9gE,EAAgB+kC,uBAAuB,oBAAA,C,GAGrD,CAAE27B,EAAoBE,GA1CjB1/E,IA0CsC,C,CAIjD,SAASu/E,EAAkBzgE,EAAiB4/C,EAAgBjd,EAAsBkd,GAGhF,MAAO,CACLghB,kBAKF,SAA2B3gE,EAAWzO,EAASuvE,EAAqBC,EAAoBz8D,GACtF,IAAI8+B,EAAc7xC,EAAQqsD,WAAWxa,YAUjC1iC,GARJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAiB,CAC3D/B,EAAqBhmC,OAAOS,WAAWP,OACvC8lC,EAAqBhmC,OAAOW,qBAAqBT,OACjD8lC,EAAqBhmC,OAAOU,eAAeR,O,EAG1Bzb,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAC3DsE,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAG08D,YAAc9/E,EAAE0G,IAAIm5E,EAAmB,SAAA,EAE1CA,EAAmB5lE,QAAQ,SAAU8lE,GACnC38D,EAAG28D,EAAc39B,QAAQt6C,MAAQi4E,C,GAGnCH,EAAoB3lE,QAAQ,SAAU8lE,GAEpC,IAAI39B,EAAU29B,EAAc39B,QACxBiO,EAAcjO,EAAQt6C,KACtB43E,EAAaK,EAAcL,WAC3BM,EAAmB3vB,EAAc,YAGrCjtC,EAFsBitC,EAAc,WAEdoO,EAAQqB,iBAAiB1d,CAAA,EAC/Ch/B,EAAG48D,GAAoB,SAAU1yD,GAC/B,MAAO,CACLs2B,aAAa87B,EAAaA,EAAWpyD,CAAA,EAAuBA,GAAds2B,YAC9CxpC,QAASkT,EAAQlT,O,MApCvBqgD,cA6CF,SAAuBwlB,EAAgBC,GACrC,OAAO,SAAU33E,GACf,OAAO,SAAS+kB,GACVqtC,EAAgBulB,EAAiBA,EAAe5yD,CAAA,EAAWA,EAC/D,OAAOkxC,EAAeQ,YAClBrE,EACA36D,EAAEq3B,KAAK9uB,EAAQ,CAAC,aAAc,gBAAA,EAC9B03E,C,KAnDRV,iBAyDF,SAA0Bv+D,EAAKlC,EAAWzO,EAAS8vE,GACjD,OAAO,WACL,OAAOvhE,EAAgBc,gBACnBsB,EACA3Q,EAAQqsD,WAAWxa,YACnBliD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,C,EAC1CtR,KAAK,SAAUtL,GACX,OAAO0c,EAAgB+kC,uBAAuBw8B,CAAA,EAAaj+E,CAAA,C,kYA9KvE4M,QACKC,OAAO,8BAAA,EACP6R,QAAQ,oBAAqBy+D,CAAA,EAC7BvvE,WAAW,mBAAoBsvE,CAAA,EAC/BtvE,WAAW,kBAAmB6vE,CAAA,C,ICPrC,WACE,aAOA,SAASS,EAAoBthE,EAAWzO,EAASqN,EAAU2jC,EAAeg/B,EAAoBzhE,EACjE6/C,EAAS3O,EAAesE,EAAqB7S,GACxE,IAAIn+B,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAJJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAGvDsjD,GAFJh/C,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAE7BswC,EAAcsS,sBACrCC,EAAgBvS,EAAcuS,cAC9BC,EAAaxS,EAAcwS,WAC3BE,EAAgB1S,EAAc0S,cAElCp/C,EAAGk9D,4BAA8B7hB,EAAQqB,iBAAiBsC,CAAA,EAC1Dh/C,EAAGm9D,+BAAiC,SAASjzD,GAC3C,OAAOA,C,EAGTlK,EAAGo9D,qBAAuB/hB,EAAQqR,uBAAuBzN,CAAA,EACzDj/C,EAAGq9D,sBAAwB,SAASnzD,GAClC,OAAOA,C,EAGTlK,EAAGs9D,kBAAoBjiB,EAAQqR,uBAAuBxN,CAAA,EACtDl/C,EAAGu9D,mBAAqB,SAASrzD,GAC/B,OAAOA,C,EAGTlK,EAAGw9D,qBAAuBniB,EAAQqR,uBAAuBtN,CAAA,EACzDp/C,EAAGy9D,sBAAwB,SAASvzD,GAClC,OAAOA,C,6KAxCXxe,QACKC,OAAO,8BAAA,EACPe,WAAW,sBAAuBswE,CAAA,C,ICLzC,WACE,aAQA,SAASU,EAAoBzwE,EAASyO,EAAWrM,EAAYsuE,EAAiBx/B,EAAsBuO,EACvElxC,EAAiBW,EAAcP,GAC1D,IAAIoE,EAAKtjB,KACL0f,EAAexf,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,EAWvDkiE,GATJ59D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EACvFjc,EAAGu5C,uBAAyB,CAC1B,CAAC/+B,KAAM,CAAC2jB,EAAqBhmC,OAAOC,OAAOC,QAAS1Z,MAAO,gBAAA,GAE7DqhB,EAAG3Q,WAAaA,EAChB2Q,EAAGgK,eAAiB3a,GAAcA,EAAW,IAAMA,EAAW,GAAG3P,MAEjEsgB,EAAG69D,cAAgBF,EAAgBG,cAEN,CAAEpxB,EAAc8T,YAAa9T,EAAcgU,eAAgBhU,EAAciU,eACpGjU,EAAckU,eAAgBlU,EAAcmU,mBAAoBnU,EAAcoU,mBAEtDpU,EAAcqU,oBAAqBrU,EAAcsU,qBACzEtU,EAAcuU,iBAAkBvU,EAAcwU,mBAAoBxU,EAAcyU,kBAChFzU,EAAc0U,kBAAmB1U,EAAc2U,oBAAqB3U,EAAc4U,cAClF5U,EAAc6U,kBAiEhB,SAASuX,IACP,IAAI7rE,EAAU2O,EAAQsyC,UAAA,EAElB6vB,EAAanhF,EAAEojB,EAAGg+D,oBAAA,EACjBv8E,OAAO,SAAUnF,GAChB,MAAO,CAACM,EAAEqhF,MAAM3hF,EAAMiiC,aAAa2/C,YAAA,C,GAEpCrkE,OAAO,SAAUuoB,EAAK9lC,GAErB,OADA8lC,EAAI9lC,EAAMiiC,aAAa75B,KAAO,QAAUpI,EAAMiiC,aAAa2/C,aACpD97C,C,EACN,EAAA,EAEPn1B,EAAQi/D,wBAA0BtvE,EAAEiF,MAAM,GAAIk8E,EAAY,CAAE5uE,OAAQ6Q,EAAGgK,cAAA,CAAA,EAEvEpO,EAAQmvD,UAAU99D,CAAA,C,CA7EpB+S,EAAGm+D,WAAa,WAqBhB,IAA4ChvE,EAnB1C6Q,EAAGg+D,sBAmBuC7uE,EAnBiC6Q,EAAGgK,eAoBvEptB,EApB4CghF,CAoB1C,EACJn8E,OAAO,SAAUu9C,GAChB,MAAO,CAACpiD,EAAEiK,GAAGm4C,EAAS0N,EAAcoU,gBAAA,GAC/BlkE,EAAEiK,GAAGm4C,EAAS0N,EAAcoU,gBAAA,GAA2C,SAAtB9gD,EAAGgK,c,GAE1D1mB,IAAI,SAAS07C,GACZ,MAAO,CACLoY,QAAS,WACP,OAAO57C,EAAgBc,gBAAgB0iC,EAAQphC,IAAKzB,EAAarE,MAAOsE,CAAA,C,EAE1EmiB,aAAco/C,EAAgBthD,gBAAgB2iB,CAAA,EAC9CsY,YAAa,SAAUptC,GACrB,IAAIg0D,EAAexhF,KAAK6hC,cAAgB7hC,KAAK6hC,aAAa2/C,aAC1D,OAAOP,EAAgBrnB,eAAepsC,EAAS/a,EAAQ+uE,EAAcP,EAAgBS,mBAAA,C,EAEvF5mB,gBAAiB,WACfshB,EAAA,C,EAEFuF,aAAc,SAAUH,GACtBxhF,KAAK6hC,aAAeo/C,EAAgBthD,gBAAgB2iB,EAASk/B,CAAA,EAC7DpF,EAAA,C,KAILn6E,MAAA,GA3CLqhB,EAAGs+D,gBAAkB,E,EAYvBt+D,EAAGu+D,eAAiB,WAClB,OAAO3hF,EAAEsV,KAAK8N,EAAGs+D,gBAAiB,SAAUhiF,GAC1C,OAAOA,EAAMiiC,aAAaigD,UAAA,C,IA+D9Bx+D,EAAGm+D,WAAA,C,oJA5GLzyE,QACKC,OAAO,8BAAA,EACPe,WAAW,sBAAuBgxE,CAAA,C,ICLzC,WACE,aAMA,SAASC,EAAgBjgE,EAAI4S,EAAYikC,GAEvC,IAAIkqB,EAAkB,CACpBhqB,YAAa,CACX/wD,OAAQ,CACN42D,KAAM,CAAA,EACNpF,SAAU,Q,IAsDZ32B,EAAe,CACjBmgD,IAlD8B9hF,EAAEiF,MAAM,GAAI48E,EAAiB,CAC3DniF,MAAO,CACLse,KAAM,MACNrc,OAAQ,IACRmoC,QAAS,CAAC,EAAG,GAAI,EAAG,E,EAEtBtmC,MAAO,CACL,CACEomC,OAAQ,CACNm4C,MAAO,OACPC,aAAc,CAAA,C,GAGlB,CACEp4C,OAAQ,CACNm4C,MAAO,OACPC,aAAc,CAAA,C,MAmCpBC,OA7B4BjiF,EAAEiF,MAAM,GAAI48E,EAAiB,CACzDniF,MAAO,CACLse,KAAM,SACNrc,OAAQ,IACRmoC,QAAS,CAAC,GAAI,EAAG,GAAI,E,EAEvBtmC,MAAO,CACL,CACEomC,OAAQ,CACNs4C,aAAc,CAAA,EACdF,aAAc,CAAA,EACdtsB,UAAW,WACT,OAAO11D,EAAEF,KAAKiC,KAAA,EAAOw4D,MAAA,EAAQh0C,KAAK,KAAA,C,EAEpCnhB,MAAO,CACL+8E,aAAc,M,IAIpB,CACEv4C,OAAQ,CACNs4C,aAAc,CAAA,C,OAWtB,MAAO,CACLziD,gBA6CF,SAAyB2iB,EAASk/B,GAChC,IAAI1oB,EAAcjB,EAAkBkB,eAAA,EACpC,OAAO74D,EAAEiF,MAAM,GAAI2zD,EAAaj3B,EAAaygB,EAAQ1iD,MAAMsiD,WAAY,CACrEyX,WAAY/lC,EAAWgB,QAAQ0tB,EAAQ1iD,MAAM8lB,KAAA,EAC7C1d,KAAMs6C,EAAQt6C,KACdw5E,aAAcA,EACdM,UAAW,WACT,MAAO,CAAC9hF,KAAKgH,QAAU9G,EAAEsV,KAAKxV,KAAKgH,OAAO,GAAG5E,KAAM,SAAUkgF,GAC3D,OAAuB,EAAhBA,EAAYn/E,C,OApDzBy2D,eA0DF,SAAwB9O,EAASr4C,EAAQ8vE,EAAiBnC,GACxD,IAAIoC,EAAmBC,EAAgB33B,EAASr4C,EAAQ,MAAA,EACpDiwE,EAA0BH,GAAmBC,EAAiB,GAC9DpgF,EAAOg+E,EAAet1B,EAASr4C,EAAQiwE,CAAA,EAGvCC,EAASziF,EAAEimB,MAAM/jB,EAAM,OAAA,EACvBwgF,EAAOz8E,KAAKC,IAAI,GAA6C,GAAzCD,KAAKogB,KAAKo8D,GAAUA,EAAO1gF,MAAQ,EAAA,CAAM,EAGjE,MAAO,CACL4lE,MAAO2a,EACPhB,aAAckB,EACd/+E,MAAO,CACLiE,IAAK,EACLxB,IAAKw8E,EACL5vB,QAAS,CAAA,EACT6vB,UAAW,CAAA,EACXhzE,MAAO,CAAA,C,EAETnM,MAAO,CACL,CACE8yB,WAAYt2B,EAAE0G,IAAIxE,EAAM,OAAA,C,EAE1B,CACE0gF,SAAU,CAAA,EACVC,SAAU,EACVvsD,WAAYt2B,EAAE0G,IAAIxE,EAAM,SAAU4lC,GAChC,OAAO9nC,EAAEmG,MAAM2hC,EAAI/lC,KAAA,EAAS,G,KAIlC+E,OAAQ,CACN,CACE5E,KAAMlC,EAAE0G,IAAIxE,EAAM,SAAU4lC,GAC1B,MAAO,CACL7kC,EAAGy/E,EAAO56C,EAAI/lC,MACdimC,MAAO,EACPwkB,UAAW,sB,KAIjB,CACEtqD,KAAMlC,EAAE0G,IAAIxE,EAAM,SAAU4lC,GAC1B,IAAIkO,EAA2B,gBAAdlO,EAAIhlC,MAA0B,YAAc,WAC7D,MAAO,CACLG,EAAG6kC,EAAI/lC,MACPimC,MAAO,EACPwkB,UAAWxW,EAAa,a,QAzGlCusC,gBAAiBA,EACjBf,oBASF,SAA6Bt/E,EAAMqQ,EAAQsb,GACrCpb,EAAazS,EAAEkC,EAAKyd,aAAA,EAAe9a,OAAQ,CAAE0N,OAAQA,CAAA,CAAA,EACrDuwE,EAAe9iF,EAAEyS,CAAA,EAAY/E,KAAM,CAAEmgB,KAAMA,CAAA,CAAA,GAAY7tB,EAAEyS,CAAA,EAAYuvB,MAAA,EACzE,OAAO8gD,GAAgB9iF,EAAE0G,IAAIo8E,EAAaC,kBAAmB,SAAUj+C,GACrE,MAAO,CAAChiC,MAAOgiC,EAAEhiC,MAAOf,MAPX,IAO2B+iC,EAAE/iC,KAAA,C,IAZ5CihF,cAgBF,SAAuB9gF,EAAMqQ,EAAQ0wE,GAC/BD,EAAgBhjF,EAAEkC,EAAKyd,aAAA,EAAejS,KAAM,CAAE6E,OAAQA,EAAQ0wE,UAAWA,CAAA,CAAA,EAC7E,OAAOD,GAAiBhjF,EAAEgjF,EAAcD,iBAAA,EACnCl+E,OAAO,SAAUigC,GAAK,MAAmB,QAAZA,EAAEhiC,KAAU,CAAA,EACzC4D,IAAI,SAAUo+B,GACb,MAAO,CAAChiC,MAAOgiC,EAAEhiC,MAAOf,MAhBf,IAgB+B+iC,EAAE/iC,KAAA,C,GAE3CA,MAAA,C,EAtBLm/E,cAyBF,SAAuB3uE,GAErB,OADyC,gBAAjBA,EAAOzP,MAA0B,kBAAoByP,EAAOzP,OACzD,MAAQ9C,EAAEmG,MAvBtB,IAuBqCoM,EAAOxQ,KAAA,EAAU,kB,GAGvE,SAASwgF,EAAgBrgF,EAAMqQ,EAAQuG,GACrC,OAAO9Y,EAAEkC,EAAKyd,aAAA,EACL9a,OAAQ,CAAE0N,OAAQA,CAAA,CAAA,EAClB7L,IAAIoS,CAAA,EACJjU,OAAO,SAAU/B,GAChB,MAAO,CAAC9C,EAAEqhF,MAAMv+E,CAAA,C,GAEjB8c,OAAA,EAAS0mB,QAAA,EAAUvkC,MAAA,C,oDAhHhC+M,QACKC,OAAO,8BAAA,EACP6R,QAAQ,kBAAmBmgE,CAAA,C,ICLlC,WACE,aAOA,SAASmC,EAAmBpkE,EAAWzO,EAASqN,EAAU2jC,EAAeg/B,EAAoBzhE,EACjE6/C,EAAS3O,EAAeuE,GAClD,IAAIjxC,EAAKtjB,KACLoiD,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAJJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAKvDi2C,GAHJ3xC,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAG9CswC,EAAciF,KACpBF,EAAM/E,EAAcoS,WACpBC,EAAkBrS,EAAcqS,gBAEpC/+C,EAAG+/D,WAAa1kB,EAAQqB,iBAAiB/K,CAAA,EACzC3xC,EAAGggE,yBAA2B,SAAUC,GAGtC,OAFAjgE,EAAGkgE,oBAAsB1kE,EAAgB6lC,cAAc4+B,EAAgBjpE,QAAS,sBAAuBi6C,EAAWC,GAAGvyD,KAAA,EAE9GshF,C,EAGTjgE,EAAGq6D,WAAahf,EAAQqB,iBAAiBjL,CAAA,EACzCzxC,EAAGmgE,2BAA6B,SAAUzb,GAGxC,OAFA1kD,EAAGogE,WAAa5kE,EAAgB6lC,cAAcqjB,EAAa1tD,QAAS,aAAci6C,EAAWC,GAAGvyD,KAAA,EAEzF+lE,C,EAGT1kD,EAAGqgE,sBAAwBhlB,EAAQqB,iBAAiBqC,CAAA,EACpD/+C,EAAGsgE,wBAA0B,SAAUvhB,GACrC,OAAOA,C,6IAvCXrzD,QACKC,OAAO,8BAAA,EACPe,WAAW,qBAAsBozE,CAAA,C,ICLxC,WACE,aAOA,SAASS,EAAqB7kE,EAAWzO,EAASqN,EAAU2jC,EAAeziC,EAAiByhE,EAC5D5hB,EAAS3O,EAAeuE,GACtD,IAAIjxC,EAAKtjB,KACLoiD,EAAc7xC,EAAQqsD,WAAWxa,YAOjC1iC,GALJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAGzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAGvD+1C,EAAM/E,EAAcgY,aACpBF,EAAgB9X,EAAc8X,cAC9BG,EAAgBjY,EAAciY,cAElC3kD,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAGwgE,oBAAsBnlB,EAAQqB,iBAAiB8H,CAAA,EAClDxkD,EAAGygE,sBAAyB,SAAUjc,GACpC,OAAOA,C,EAGTxkD,EAAGq6D,WAAahf,EAAQqB,iBAAiBjL,CAAA,EACzCzxC,EAAGmgE,2BAA6B,SAAUzb,GAGxC,OAFA1kD,EAAGogE,WAAa5kE,EAAgB6lC,cAAcqjB,EAAa1tD,QAAS,aAAci6C,EAAWC,GAAGvyD,KAAA,EAEzF+lE,C,EAGT1kD,EAAG0gE,WAAarlB,EAAQqB,iBAAiBiI,CAAA,EACzC3kD,EAAG2gE,uBAAyB,SAAUhc,GAGpC,OAFA3kD,EAAG4gE,kBAAoBplE,EAAgB6lC,cAAcsjB,EAAc3tD,QAAS,oBAAqBi6C,EAAWC,GAAGvyD,KAAA,EAExGgmE,C,6IAxCXj5D,QACKC,OAAO,8BAAA,EACPe,WAAW,uBAAwB6zE,CAAA,C,ICL1C,WACE,aAOA,SAASM,EAAsBnlE,EAAW4U,EAAYrjB,EAASqN,EAAU2jC,EAAeg/B,EAAoBzhE,EAC7E6/C,EAASrK,EAAqBtE,EAAevO,GAC1E,IAAIn+B,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAJJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAC3DsE,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAG8gE,2BAA6BzlB,EAAQqB,iBAAiBhQ,EAAcoX,mBAAA,EACvE9jD,EAAG+gE,6BAA+B,SAAU72D,GAC1C,OAAOA,C,EAITlK,EAAGghE,mBAAqB3lB,EAAQqR,uBAAuBhgB,EAAcqX,WAAA,EACrE/jD,EAAGihE,oBAAsB,SAAS/2D,GAChC,OAAOA,C,EAGTlK,EAAGkhE,gBAAkB7lB,EAAQqR,uBAAuBhgB,EAAcsX,QAAA,EAClEhkD,EAAGmhE,iBAAmB,SAASj3D,GAC7B,OAAOA,C,EAGTlK,EAAGohE,mBAAqB/lB,EAAQqR,uBAAuBhgB,EAAcuX,WAAA,EACrEjkD,EAAGqhE,oBAAsB,SAASn3D,GAChC,OAAOA,C,0LApCXxe,QACKC,OAAO,8BAAA,EACPe,WAAW,wBAAyBm0E,CAAA,C,ICL3C,WACE,aAOA,SAASS,EAAuB5lE,EAAWzO,EAASqN,EAAU2jC,EAAeg/B,EAAoBzhE,EAAiB6/C,EAClF3O,EAAesE,GAC7C,IAAIhxC,EAAKtjB,KAELoiD,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAJJ4D,EAAGguC,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAEvFjc,EAAGu5C,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAC3DsE,EAAGi3C,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAExD4D,EAAGuhE,eAAiBlmB,EAAQqB,iBAAiBhQ,EAAcrzB,OAAA,EAC3DrZ,EAAGwhE,iBAAmB,SAASt3D,GAE7B,MAAO,CACLs2B,YAFqBhlC,EAAgB+kC,uBAAuB,SAAA,EAAWr2B,CAAA,EAEzCs2B,YAC9BxpC,QAASkT,EAAQlT,O,GAIrBgJ,EAAGyhE,WAAapmB,EAAQuR,mBAAmBlgB,EAAcwX,GAAA,EACzDlkD,EAAG0hE,aAAe,SAASx3D,GAEzB,MAAO,CACLs2B,YAFqBhlC,EAAgB+kC,uBAAuB,KAAA,EAAOr2B,CAAA,EAErCs2B,YAC9BxpC,QAASkT,EAAQlT,O,GAIrBgJ,EAAG2hE,WAAatmB,EAAQuR,mBAAmBlgB,EAAcyX,GAAA,EACzDnkD,EAAG4hE,aAAe,SAAS13D,GACzB,OAAOA,C,EAGTlK,EAAG6hE,YAAcxmB,EAAQuR,mBAAmBlgB,EAAc0X,IAAA,EAC1DpkD,EAAG8hE,cAAgB,SAAS53D,GAC1B,OAAOA,C,EAGTlK,EAAG+hE,YAAc1mB,EAAQuR,mBAAmBlgB,EAAc2X,IAAA,EAC1DrkD,EAAGgiE,cAAgB,SAAS93D,GAC1B,OAAOA,C,EAGTlK,EAAGiiE,WAAa5mB,EAAQuR,mBAAmBlgB,EAAc4X,GAAA,EACzDtkD,EAAGkiE,aAAe,SAASh4D,GAEzB,MAAO,CACLs2B,YAFqBhlC,EAAgB+kC,uBAAuB,KAAA,EAAOr2B,CAAA,EAErCs2B,YAC9BxpC,QAASkT,EAAQlT,O,GAIrBgJ,EAAGmiE,aAAe9mB,EAAQqB,iBAAiBhQ,EAAc6X,KAAA,EACzDvkD,EAAGoiE,eAAiB,SAASl4D,GAE3B,MAAO,CACLs2B,YAFqBhlC,EAAgB+kC,uBAAuB,OAAA,EAASr2B,CAAA,EAEvCs2B,YAC9BxpC,QAASkT,EAAQlT,O,uJAjEvBtL,QACKC,OAAO,8BAAA,EACPe,WAAW,yBAA0B40E,CAAA,C,ICL5C,WACE,aAOA,SAASe,EAAuB3mE,EAAWzO,EAASqN,EAAU2jC,EAAeziC,EAAiByhE,EAC9D5hB,EAAS3O,EAAesE,GACtD,IACIlS,EAAc7xC,EAAQqsD,WAAWxa,YAMjC1iC,GAPK1f,KAGNsxD,UAAY,CAACjyB,UAAW9uB,EAAQoP,YAAY0f,UAAWE,QAAShvB,EAAQoP,YAAY4f,OAAA,EAH9Ev/B,KAKN68D,uBAAyB/9C,EAAgB0kC,iBAAA,EAEzBtjD,EAAEiF,MAAMoL,EAAQoP,YAAa,CAACvB,SAAUY,CAAA,CAAA,GAEvD81C,EAAW9E,EAAc8E,SACzB9a,EAASgW,EAAchW,OACvBvd,EAAauzB,EAAcvzB,WAXtBz8B,KAaNu6D,UAAY,CAAEnY,YAAaA,EAAaziC,YAAaD,CAAA,EAb/C1f,KAeN4lF,eAAiBjnB,EAAQqB,iBAAiBlL,CAAA,EAfpC90D,KAiBN6lF,aAAelnB,EAAQqB,iBAAiBhmB,CAAA,EAjBlCh6C,KAmBN8lF,kBAAoBnnB,EAAQsR,WAAWxzC,CAAA,EAnBjCz8B,KAqBN+lF,iBAAmB,SAAUv4D,GAC9B,OAAOA,C,EAtBAxtB,KAyBNgmF,eAAiB,SAAUx4D,GAC5B,OAAOA,C,EA1BAxtB,KA6BNimF,oBAAsB,SAAUz4D,GACjC,OAAOA,C,sJArCXxe,QACKC,OAAO,8BAAA,EACPe,WAAW,yBAA0B21E,CAAA,C,ICL5C,WACE,aAEA32E,QACKC,OAAO,8BAAA,EACPe,WAAW,kBAGhB,WACE,IAAIsT,EAAKtjB,KAETsjB,EAAG4iE,WAAa,WAEd,OAAG5iE,EAAGs1D,SACAt1D,EAAG0qD,cAGE,kBAFA,kBAKF,a,EAfsB,EAC9B1xD,UAAU,cAmBf,WACE,MAAO,CACLiD,SAAU,IACV+Q,iBAAmB,CAAA,EACnBtgB,WAAa,wBACbwP,MAAO,CACLmX,SAAU,IACViiD,SAAU,IACV5K,cAAe,G,EAEjBj+D,YAAa,kD,EA7Ba,C,ICNhC,WACE,aAYA,SAASo2E,EAAoBn8E,EAAOuC,EAAcuS,EAAiBI,EAASg1C,EAAYrnD,EAAiBokE,GACvG,IAEImV,EAAiBlmF,EAAEid,OAAOjd,EAAE40B,OAAOo/B,CAAA,EAAa,SAASxuB,EAAK2gD,GAEhE,OADA3gD,EAAI2gD,EAAQx8E,WAAaw8E,EAClB3gD,C,EACN,EAAA,EAEH,SAAS4gD,IACP,IAAIj8E,EAAQL,EAAOmwB,QAAQnyB,KAC5B,OAAOo+E,EAAe/7E,E,CAGvB,SAASk8E,EAAWtyD,EAAUuyD,GAC5B,OAAO,WACL,IAAIH,EAAUC,EAAA,EACXD,GACDvnE,EAAgBC,eAAA,EACXrR,KAAM,SAAUmR,GACXqkC,EAAoBpkC,EAAgBG,sBAAsBJ,EAAYtS,EAAa6R,QAAA,EACnFuB,EAAczf,EAAEC,OAAO+e,EAAQI,gBAAA,EAAkBK,YAAa,CAACvB,SAAU8kC,CAAA,CAAA,EAC7EpkC,EAAgBuJ,eAAeg+D,EAAQhS,UAAW10D,EAAasU,CAAA,EAC/DpnB,EAAgBo7C,sBAAsBu+B,EAAOH,EAAQ/yB,WAAA,C,IA+BjE,IAAI8gB,EAAc,CAChB,CAAEl2D,KAAM+yD,EAAWE,IAAInpE,KAAMu+E,WAAYA,EAAWtV,EAAWE,IAAIl9C,SAAUg9C,EAAWE,IAAIqV,KAAA,CAAA,EAC5F,CAAEtoE,KAAM+yD,EAAWG,IAAIppE,KAAMu+E,WA3B/B,WACE,IAAI18D,EAAW,iBAAmBy8D,EAAA,EAAiBhzB,YAAY18C,QAAQ,YAAa,GAAA,EAEpF6vE,YAAY9lE,SAAS+lE,eAAe,gBAAA,EAAmB,CAAEC,QAAS,CAACjwE,OAAOiwE,OAAA,CAAA,EACrEj5E,KAAK,SAAUk5E,GACdxkF,EAAOwkF,EAAOC,UAAA,EAuChB52E,EAASiP,EAAQI,gBAAA,EAIjB1J,EAASrJ,EAAa6R,SAAW0oE,EAAiB,WAAav6E,EAAa6R,QAAA,EAAY,GAExF2oE,EAAuBD,EAAiB,iBAAkB,CAAC72E,EAAO2sD,WAAWxa,YAAA,EAE7E0tB,EAAcgX,EAAiB,gBAAiB5mF,EAAE0G,IAAIqJ,EAAO0P,YAAYrB,WAAY,SAAUrc,GACjG,OAAOA,EAAM2U,QAAQ,IAAK,GAAA,C,IAGxBowE,EAAaF,EAAiB,eAAiB72E,EAAO0P,YAAYpB,SAAA,EAElE0oE,EAAYH,EAAiB,cAAgB72E,EAAO0P,YAAYnB,OAAA,EAEhE0oE,EAAUJ,EAAiB,YAAc72E,EAAO0P,YAAYlB,QAAA,EAE5DtJ,EAAc2xE,EACd,gBACA,CACE72E,EAAO0P,YAAYrK,WACnBrF,EAAO0P,YAAYhL,SACnB1E,EAAO0P,YAAYm0C,gBAErB,K,EAhEF,IAuCE7jD,EAIA2F,EAIAk6D,EAIAkX,EAEAC,EAEAC,EAnDEl9D,EAAU,CA8BT,CAAE9hB,KAAO,cAAgBo+E,EAAA,EAAiBhzB,YAAa6zB,KAAM,CAAA,EAAM55C,KAAM,EAAA,GA7BzEplC,OA+DD,CA3Ba,CAACD,KAAM,uBAAwBi/E,KAAM,CAAA,EAAM55C,KAAM,EAAA,EA6BlEw5C,EACAnxE,EACAk6D,EACAkX,EACAC,EACAC,EACA/xE,EAvEY,EACPhN,OAAO,CAAC,KAAK,KAAA,EACbA,OAAO,CACNi/E,MAAOhlF,EACPZ,MAAO,G,GAMb6lF,QAAQC,UAHY,CAClBt9D,QAASA,C,CAEO,EAAeC,SAASJ,CAAA,EAC1Chd,EAAgBo7C,sBAAsBgpB,EAAWG,IAAIoV,MAAOF,EAAA,EAAiBhzB,WAAA,C,GAMtC,EACzC,CAAEp1C,KAAM+yD,EAAWO,MAAMxpE,KAAMu+E,WAAYA,EAAWtV,EAAWO,MAAMv9C,SAAUg9C,EAAWO,MAAMgV,KAAA,CAAA,GA0DpG,SAASM,EAAiBS,EAAc3+B,EAAc4+B,GACpD,MAAO,CACLt/E,KAAM,CACJ,CAACA,KAAMq/E,EAAch6C,KAAM,EAAA,EAC3Bqb,EAAalnD,OAASxB,EAAE0G,IAAIgiD,EAAc1oD,EAAEunF,UAAA,EAAYhhE,KAAK+gE,GAAuB,IAAA,EAAO,M,EArHxFxnF,KA0DN0nF,YAAc,WACf,IAAIrB,EAAUC,EAAA,EACd,OAAOD,GAAWnmF,EAAE0G,IAAIy/E,EAAQjS,YAAa,SAAUl2D,GACrD,OAAOhe,EAAE0N,KAAKwmE,EAAa,CAAEl2D,KAAMA,EAAKlW,IAAA,CAAA,C,gHAxE9CgH,QACKC,OAAO,8BAAA,EACPe,WAAW,sBAAuBm2E,CAAA,EAClC7pE,UAAU,qBAoIf,WACE,MAAO,CACLiD,SAAU,IACV+Q,iBAAmB,CAAA,EACnBtgB,WAAa,4BACbwP,MAAO,GACPzP,YAAa,gE,EA1IoB,EAChCb,SAAS,aAAc,CACtBiiE,IAAQ,CAAEnpE,KAAM,MAAOisB,SAAU,WAAYuyD,MAAO,KAAA,EACpDhV,MAAU,CAAExpE,KAAM,QAASisB,SAAU,oEAAqEuyD,MAAO,OAAA,EACjHpV,IAAO,CAAEppE,KAAM,MAAOisB,SAAU,MAAOuyD,MAAO,KAAA,C,MCVtD,WACE,aAMA,SAASmB,EAAoBC,GAE3B,SAASC,EAAeC,EAAYC,GAClC,GAAI,EAAE/nF,gBAAgB6nF,GAAiB,OAAO,IAAIA,EAAeC,EAAYC,CAAA,EAE7E/nF,KAAK8nF,WAAaA,EAClB9nF,KAAK+nF,YAAcA,C,CAmBrB,SAASpP,EAAcl3D,GACrB,OAAO,WACLuV,QAAQloB,MAAM,IAAI1G,MAAM,IAAMqZ,EAAS,kBAAA,CAAA,C,EAW3C,OA7BAvhB,EAAEC,OAAO0nF,EAAexxE,UAAW,CACjCye,OAqBF,WACE,IAAIkzD,EAAkBhoF,KAAKioF,mBAAmBjoF,KAAK8nF,UAAA,EAC/C73E,EAASjQ,KAAKkoF,eAAeloF,KAAK+nF,WAAA,EAClCx1D,EAAavyB,KAAKmoF,iBAAiBl4E,CAAA,EACvC,OAAO23E,EAAcQ,mBAAmBJ,EAAiBz1D,CAAA,C,EArBzD01D,mBAAoBtP,EAAc,oBAAA,EAIlCuP,eAAgBvP,EAAc,gBAAA,EAI9BwP,iBAAkBxP,EAAc,kBAAA,C,GAgB3BkP,C,6BA1CT74E,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,iBAAkB6mE,CAAA,EAC1B3pE,QAAQ,gBA4Cb,WAEE,MAAO,CACLqqE,iBAAkBA,EAClBC,iBAYF,SAASA,EAAiBjyC,GACxB,OAAOn2C,EAAEm2C,CAAA,EAAKzvC,IAAI,SAAU2hF,GAC1B,MAAO,CACLvgF,KAAMugF,EAAOvgF,KACbuqB,WAAY,CAAA,EACZo8C,YAAa,CAAA,EACb75C,QAAqC,SAA5ByzD,EAAO,cACZD,EAAkCD,GAAjBE,EAAOzzD,MAAA,C,IAE7BhV,OAAO,MAAA,EAAQ7d,MAAA,C,EApBlBmmF,mBAuBF,SAASA,EAAmBI,EAAoBxkF,GAC9C,OAAO9D,EAAEsoF,CAAA,EAAoB5hF,IAAI,SAAU2hF,GAKzC,OAJAA,EAAOh2D,WAAaryB,EAAEmrB,KAAKrnB,CAAA,EAAYukF,CAAA,EACpC,CAACroF,EAAEmoC,YAAYkgD,EAAOzzD,MAAA,GAAWyzD,EAAOh2D,YACzC61D,EAAmBG,EAAOzzD,OAAQ50B,EAAEwrB,KAAK1nB,CAAA,CAAA,EAEpCukF,C,GACNtmF,MAAA,C,EA7BHwmF,kBAgCF,SAA2BV,GACzB,OAAO,SAAUQ,GACf,OAAOR,GAAe7nF,EAAE+M,SAAS86E,EAAaQ,EAAOvgF,IAAA,C,GAjCvD0gF,gBAqCF,SAAyBX,GACvB,OAAO,SAAUQ,GACf,OAAOR,GAAe7nF,EAAEiK,GAAG49E,EAAaQ,EAAOvgF,IAAA,C,IApCnD,SAASqgF,EAAiBhyC,GACxB,OAAOn2C,EAAEm2C,CAAA,EAAKzvC,IAAI,SAAU3E,GAC1B,MAAO,CAAC+F,KAAQ/F,EAAOswB,WAAc,CAAA,CAAA,C,GACpCtwB,MAAA,C,EAzDuB,C,ICLhC,WACE,aAKA,SAAS0mF,EAAuBd,EAAgBD,EAAenoE,GAE7D,SAASgtD,EAAkBqb,EAAYC,GACrC,GAAI,EAAE/nF,gBAAgBysE,GAAoB,OAAO,IAAIA,EAAkBqb,EAAYC,CAAA,EAEnFF,EAAetkF,KAAKvD,KAAM8nF,EAAYC,CAAA,C,CAiBxC,OAdAtb,EAAkBp2D,UAAYnW,EAAEu3E,OAAOoQ,EAAexxE,UAAW,CAC/D4xE,mBAAoBL,EAAcS,iBAClCH,eAAgB,SAAUH,GACxB,OAAyBA,EAQR3lC,aAAe3iC,EAAarE,K,EAN/C+sE,iBAAkB,SAAUl4E,GAC1B,MAAO,CAAC23E,EAAcc,gBAAgBz4E,CAAA,E,IAQnCw8D,C,6DAzBTz9D,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,oBAAqB6nE,CAAA,C,ICJpC,WACE,aAKA,SAASC,EAAsBf,EAAgBD,GAE7C,SAAStb,EAAiBwb,EAAYC,GACpC,GAAI,EAAE/nF,gBAAgBssE,GAAmB,OAAO,IAAIA,EAAiBwb,EAAYC,CAAA,EAEjFF,EAAetkF,KAAKvD,KAAM8nF,EAAYC,CAAA,C,CAkBxC,SAASc,EAAmBf,GACtBgB,EAAc5oF,EAAE0G,IAAIkhF,EAAY,SAASiB,GAAU,OAAOA,EAAOjsE,MAAM,GAAA,CAAA,CAAA,EACvEksE,EAAgB9oF,EAAEq0B,QAAQu0D,EAAa,SAASC,GAAU,OAAO7oF,EAAEmrB,KAAK09D,CAAA,CAAA,CAAA,EAC5E,OAAO7oF,EAAE0G,IAAIoiF,EAAe,SAAS/mF,EAAMgX,GACzC,MAAO,CACLjR,KAAMiR,EACNgwE,cAAe,OACfn0D,OAAQ50B,EAAE+K,QAAQhJ,EAAO,SAAS+iC,GAAK,OAAO9kC,EAAEwrB,KAAKsZ,CAAA,CAAA,CAAA,C,IAgB3D,OAtCAsnC,EAAiBj2D,UAAYnW,EAAEu3E,OAAOoQ,EAAexxE,UAAW,CAC9D4xE,mBAAoB,SAAUH,GACxBoB,EAAkBL,EAAmBf,CAAA,EACzC,OAAOF,EAAcU,iBAAiBY,CAAA,C,EAExChB,eAAgB,SAAUH,GACjBoB,IAsBLrZ,EAAasZ,EADQrB,EArBEA,EAAYzpE,WA6BvC,OANGypE,IACGmB,EAAkBL,EAAmBd,CAAA,EACzCjY,EAAc5vE,EAAE0G,IAAIsiF,EAAiB,MAAA,EACrCE,EAAiBlpF,EAAE+K,QAAQi+E,EAAiB,QAAA,GAGvC,CAACpZ,EAAasZ,E,EA3BrBjB,iBAAkB,SAAUJ,GAC1B,OAAO7nF,EAAE0G,IAAImhF,EAAa,SAAUzpE,GAClC,OAAOspE,EAAca,kBAAkBnqE,CAAA,C,MA4BtCguD,C,8CAjDTt9D,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,mBAAoB8nE,CAAA,C,ICJnC,WACE,aAKA,SAASS,EAA4BxB,EAAgBD,GAEnD,SAASpb,EAAuBsb,EAAYC,EAAauB,GACvD,GAAI,EAAEtpF,gBAAgBwsE,GAAyB,OAAO,IAAIA,EAAuBsb,EAAYC,EAAauB,CAAA,EAC1GtpF,KAAKspF,aAAeA,EAEpBzB,EAAetkF,KAAKvD,KAAM8nF,EAAYC,CAAA,C,CA4BxC,OAzBAvb,EAAuBn2D,UAAYnW,EAAEu3E,OAAOoQ,EAAexxE,UAAW,CACpE4xE,mBAAoBL,EAAcU,iBAClCJ,eAAgB,SAAUH,GACxB,OASuBA,EATEA,EASWuB,EATEtpF,KAAKspF,aAUzCC,EAAkB,CAAC,aAAc,WAAY,kBAC7C74B,EAAmBxwD,EAAEqpF,CAAA,EACpBC,QAAA,EACAl2D,UAAU,WAAc,OAAOg2D,CAAA,CAAA,EAC/BrnF,MAAA,EAKE,EAJH2W,EAAoB1Y,EAAE6nF,CAAA,EACrBxwD,KAAKgyD,CAAA,EACL9lF,SAASitD,CAAA,EACTzuD,MAAA,GACqBqT,WAAYsD,EAAkBjE,SAAUiE,EAAkBk7C,gBAVtF,IAAwCw1B,EAClCC,EACA74B,C,EATJy3B,iBAAkB,SAAUJ,GAC1B,OAAO7nF,EAAE0G,IAAImhF,EAAa,SAAU3yE,GAClC,OAAOwyE,EAAcc,gBAAgBtzE,CAAA,C,MAkBpCo3D,C,8CArCTx9D,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,yBAA0BuoE,CAAA,C,ICJzC,WACE,aAKA,SAASI,EAAkB5B,EAAgBD,GAEzC,SAASrb,EAAaub,EAAYC,GAChC,GAAI,EAAE/nF,gBAAgBusE,GAAe,OAAO,IAAIA,EAAaub,EAAYC,CAAA,EAEzEF,EAAetkF,KAAKvD,KAAM8nF,EAAYC,CAAA,C,CAmBxC,OAhBAxb,EAAal2D,UAAYnW,EAAEu3E,OAAOoQ,EAAexxE,UAAW,CAC1D4xE,mBAAoBL,EAAcU,iBAClCJ,eAAgB,SAAUH,GACxB,MAUK,CAVoBA,EAUPxpE,UAVOwpE,EAUgBvpE,QAVhBupE,EAUqCtpE,S,EARhE0pE,iBAAkB,SAAUl4E,GAC1B,OAAO/P,EAAE0G,IAAIqJ,EAAQ,SAAUU,GAC7B,OAAOi3E,EAAca,kBAAkB93E,CAAA,C,MAStC47D,C,8CA3BTv9D,QAAQC,OAAO,8BAAA,EACV6R,QAAQ,eAAgB2oE,CAAA,C,ICJ/B,WACE,aAEAz6E,QAAQC,OAAO,8BAAA,EACVqN,UAAU,kBAIf,WACE,MAAO,CACLiD,SAAU,IACVC,MAAQ,CACNd,YAAa,IACbtJ,UAAW,IACX03D,qBAAsB,IACtBl0D,kBAAmB,G,EAErB5I,WAAa,4BACbsgB,iBAAmB,CAAA,EACnBvgB,YAAc,sE,EAfgB,EAC7BC,WAAW,sBAmBhB,WACE,IAAIsT,EAAKtjB,KAET,SAAS6/B,EAAKjnB,GACZ0K,EAAGusD,YAAcrpD,EAAA,EACjBlD,EAAG8W,mBAAqBl6B,EAAE0N,KAAK0V,EAAGusD,YAAa,CAAE7nE,KAAO4Q,GAAqBA,EAAkBtD,YACzFo0E,EAAA,CAAA,CAAA,EACNpmE,EAAGqmE,mBAAmB/wE,CAAA,EACtB0K,EAAGsmE,mBAA6C,EAAxBtmE,EAAGusD,YAAYnuE,M,CAiCzC,SAASgoF,IACP,OAAOpmE,EAAG5E,YAAc,0BAA4B,K,CAGtD,SAAS8H,IACP,OAAOlD,EAAG5E,YAAc4E,EAAGwpD,qBAAuBxpD,EAAGlO,S,CAGvD,SAASy0E,EAAgBC,EAAeC,GASlCpa,EARJ,SAASqa,EAAqBl1D,EAAQi1D,GACpC,OAAa,IAAVA,EAAsBj1D,EAGhBk1D,EADiB9pF,EAAE0N,KAAKknB,EAAQ,CAACvC,WAAY,CAAA,CAAA,CAAA,EACNuC,OAAQi1D,EAAQ,CAAA,C,EAIxBvjE,EAAA,EAAgBujE,CAAA,EAC1D7pF,EAAEia,QAAQw1D,EAAgB,SAAUv6D,GAClCA,EAAUmd,WAAand,EAAUpN,OAAS8hF,C,GAhD9CxmE,EAAGqmE,mBAAqB,SAAS/wE,GAC/BixE,EAAgBvmE,EAAG8W,mBAAmBpyB,KAAM,CAAA,EAC5Csb,EAAG1K,kBAAkBtD,WAAagO,EAAG8W,mBAAmBpyB,KAExDsb,EAAGkT,WAAalT,EAAG8W,mBAAmBtF,OACtCxR,EAAG+W,iBAAmBn6B,EAAE0N,KAAK0V,EAAGkT,WAAY,CAAExuB,KAAO4Q,GAAqBA,EAAkBjE,UACtF+0E,EAAA,CAAA,CAAA,EACNpmE,EAAG4T,iBAAiBte,CAAA,C,EAGtB0K,EAAG4T,iBAAmB,SAASte,GAC7BixE,EAAgBvmE,EAAG+W,iBAAiBryB,KAAM,CAAA,EAC1Csb,EAAG1K,kBAAkBjE,SAAW2O,EAAG+W,iBAAiBryB,KAEpDsb,EAAG2mE,gBAAkB3mE,EAAG+W,iBAAiBvF,OACzCxR,EAAG4mE,uBAAyBhqF,EAAE0N,KAAK0V,EAAG2mE,gBAAiB,CAAEjiF,KAAO4Q,GAAqBA,EAAkBk7C,gBACjG41B,EAAA,CAAA,CAAA,EACNpmE,EAAG6mE,uBAAuBvxE,CAAA,C,EAG5B0K,EAAG6mE,uBAAyB,SAASvxE,GACnCixE,EAAgBvmE,EAAG4mE,uBAAuBliF,KAAM,CAAA,EAChDsb,EAAG1K,kBAAkBk7C,eAAiBxwC,EAAG4mE,uBAAuBliF,I,EAGlEsb,EAAG8mE,kBAAoB,WACrBvqD,EAAA,C,EA0BFA,EAAKvc,EAAG1K,iBAAA,C,CAnF6B,C","file":"retailer.min.js","sourcesContent":["(function () {\n 'use strict';\n\n d3.chart('ChartBase', {\n initialize : function (options) {\n var plot = this;\n\n plot.options = options = options || {};\n\n // plot padding\n plot._padding = _.extend({\n top : 0,\n bottom : 0,\n left : 0,\n right : 0\n }, options.padding);\n\n // outer dimensions (including padding)\n plot._w = 0;\n plot._h = 0;\n\n // inner dimensions (excluding padding)\n plot.w = 0;\n plot.h = 0;\n\n plot.wrap = plot.base.append('g');\n\n if (plot.isRoot()) {\n // if this the root chart, set the svg to its OUTER size\n plot\n .on('change:width', function () {\n plot.base.attr('width', plot._w);\n })\n .on('change:height', function () {\n plot.base.attr('height', plot._h);\n });\n }\n },\n isRoot : function () {\n return this.base.node().nodeName.toLowerCase() === 'svg';\n },\n _update : function () {\n var plot = this;\n plot.w = plot._w - plot._padding.left - plot._padding.right;\n plot.h = plot._h - plot._padding.top - plot._padding.bottom;\n\n plot.wrap.translate(plot._padding.left, plot._padding.top);\n },\n width : function (w) {\n var plot = this;\n if (!arguments.length) return plot._w;\n\n plot._w = w;\n plot._update();\n\n plot.trigger('change:width');\n\n plot.redraw();\n\n return plot;\n },\n height : function (h) {\n var plot = this;\n if (!arguments.length) return plot._h;\n\n plot._h = h;\n plot._update();\n\n plot.trigger('change:height');\n plot.redraw();\n\n return plot;\n },\n padding : function (padding) {\n var plot = this;\n if (!arguments.length) return _.clone(plot._padding);\n\n if (typeof padding === 'number') {\n padding = {\n top : padding,\n bottom : padding,\n left : padding,\n right : padding\n };\n }\n\n _.extend(plot._padding, padding);\n plot._update();\n\n plot.trigger('change:padding');\n\n plot.redraw();\n\n return plot;\n },\n pad : function (side, value) {\n var plot = this;\n if (arguments.length < 2) return plot._padding[side];\n\n var p = {};\n p[side] = value;\n\n return plot.padding(p);\n },\n redraw : function () {\n this.redrawing = true;\n if (this.data) this.draw(this.data);\n this.redrawing = false;\n },\n // returns the root svg element surrounding this chart\n svg : function () {\n var base = this.base.node();\n // all svg elements have an ownerSVGElement -- except for an svg\n return d3.select(base.ownerSVGElement || base);\n },\n /**\n * Returns the existing (or creates a new) node in this svg.\n */\n defsNode : function () {\n var svg = this.svg();\n var defs = svg.select('defs');\n\n if (defs.empty()) {\n defs = svg.insert('defs');\n }\n\n return defs;\n },\n transform : function (data) {\n if (!this.redrawing) {\n this.trigger('change:data');\n }\n return data;\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('Plot', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n _.defaults(options, {\n xAxis : true,\n yAxis : true,\n xFormat : null,\n yFormat : null,\n showGrid : true\n });\n\n if (options.contextMode) {\n options.yAxis = false;\n options.showGrid = false;\n }\n\n // set default padding, but don't override the ones set by options\n plot.padding({\n left : 50,\n bottom : 30\n });\n plot.padding(options.padding);\n\n /*\n * Lowest-level accessors that get values from a datum.\n * You can override these with an options.fn object.\n *\n * Each series can also override these functions to\n * access different fields of the same data array.\n *\n * When drawing a series, use plot.withSeries so the\n * correct accessors are switched out.\n *\n * GOTCHA: Plots assume each series accesses `x` in the same way,\n * so if you override the `x` accessor, do it at the top level\n * rather than on a series.\n */\n plot.fn = plot.defaultFns = _.defaults({}, options.fn, {\n x : function (d) { return d.x; },\n y : function (d) { return d.y; }\n });\n\n plot.x = d3.time.scale();\n plot.y = d3.scale.linear();\n\n // allows for having a fixed y-range (e.g. always starting at 0).\n // GOTCHA: Requires each sub-class of Plot to implement this\n plot.yDomain = options.yDomain || {};\n\n plot.color = d3.scale.category10();\n\n plot.clipperId = '';\n\n // visualization group containing the graph series lines\n plot.viz = plot.wrap.append('g').classed('vis', true);\n\n // dark horizontal line at y = 0\n plot.centerAxis = plot.wrap.append('g').classed('centerAxis', !options.contextMode);\n plot.layer('centerAxis', plot.centerAxis, {\n dataBind : function (__) {\n var data = [0].filter(function (d) {\n var domain = plot.y.domain();\n return domain[0] < d && d < domain[1];\n });\n return this.selectAll('line')\n .data(data);\n },\n insert : function () {\n return this.insert('line');\n },\n events : {\n merge : function () {\n var domain = plot.x.domain();\n this.attr('x1', plot.x(domain[0]))\n .attr('x2', plot.x(domain[1]))\n .attr('y1', plot.y)\n .attr('y2', plot.y);\n }\n }\n });\n\n plot.axisSvgs = {\n x : plot.wrap.append('g').classed('axis x', true),\n y : plot.wrap.append('g').classed('axis y', true)\n };\n\n plot.axes = {\n x : d3.svg.axis().scale(plot.x).orient('bottom'),\n y : d3.svg.axis().scale(plot.y).orient('left')\n };\n\n if (!options.xAxis) {\n plot.axisSvgs.x.style('display', 'none');\n }\n\n if (!options.yAxis) {\n plot.axisSvgs.y.style('display', 'none');\n }\n\n if (options.xFormat) {\n plot.axes.x.tickFormat(options.xFormat);\n }\n\n if (options.yFormat) {\n plot.axes.y.tickFormat(options.yFormat);\n }\n\n // The function that defines what text to display on\n // the inspector tip as the first row (for the 'x' value).\n // Should return a pair of strings: [label, value].\n // `this` will be a reference to the `plot`\n plot.domainTipText = options.domainTipText ||\n function (d) {\n return ['Date', new Date(plot.fn.x(d)).toLocaleString()];\n };\n\n function calcXRange() {\n plot.x.range([0, plot.w]);\n\n if (options.showGrid) {\n plot.axes.y\n .tickPadding(10)\n .innerTickSize(-plot.w);\n }\n\n plot.axisSvgs.x\n .call(plot.axes.x);\n }\n\n function calcYRange() {\n plot.y.range([plot.h, 0]);\n\n if (options.showGrid) {\n plot.axes.x\n .tickPadding(10)\n .innerTickSize(-plot.h);\n }\n\n plot.axisSvgs.x\n .translate(0, plot.y.range()[0])\n .call(plot.axes.x);\n\n plot.axisSvgs.y\n .call(plot.axes.y);\n }\n\n plot\n .on('change:width', function () {\n calcXRange();\n plot.cullData();\n })\n .on('change:height', calcYRange)\n .on('change:data', function () {\n calcXRange();\n calcYRange();\n });\n },\n cullData : function () {\n var plot = this;\n\n var data = plot.data,\n allData = data.allData,\n // The domain of the full data set\n allDomain = data.allDomain,\n // The domain of the visible portion\n curDomain = plot.x.domain();\n\n // Compare scalar width of the visible data vs the full data set\n var allSize = allDomain[1] - allDomain[0],\n curSize = curDomain[1] - curDomain[0],\n visiblePercent = curSize / allSize;\n\n // Calculate the approximate number of data per pixel.\n // Anything more than 1 means we're drawing more data than we need to.\n var approxNewLength = allData.length * visiblePercent;\n var dataPerPixel = Math.max(1, Math.round(approxNewLength / plot.w));\n\n // Avoid needlessly culling data if the density hasn't changed\n if (plot.cullingFactor !== dataPerPixel) {\n plot.cullingFactor = dataPerPixel;\n\n plot.data.data = allData.filter(function (__, i) {\n // Cull the data to one datum per pixel\n return i % dataPerPixel === 0;\n });\n }\n },\n setXDomain : function (extent) {\n this.x.domain(extent);\n this.cullData();\n },\n setYDomain : function (extent) {\n var plot = this,\n maxAbs;\n if (plot.yDomain === 'centered') {\n // vertically center 0\n maxAbs = d3.max(extent.map(Math.abs));\n extent = [-maxAbs, maxAbs];\n }\n\n if (extent[0] === extent[1]) {\n // Avoid the very unlikely case where all y-values are the same.\n // When that happens, the y-axis becomes invisible.\n // This will (almost certainly) only ever happen when there's\n // a single data point or with fake data.\n extent[1] += 1;\n }\n\n this.y.domain(extent);\n },\n brushed : function (extent, clipperId) {\n var plot = this;\n\n plot.setXDomain(extent);\n\n plot.axisSvgs.x\n .call(plot.axes.x);\n plot.redraw();\n\n plot.clipperId = clipperId;\n plot.trigger('change:clip');\n\n return plot;\n },\n /**\n * Set the current set of datum accessors (`plot.fn`) to the\n * given series' functions. `plot.fn` will be reverted to `defaultFns`\n * after the series has used the data.\n *\n * If called with a single function, this returns a function\n * that expects a series as its first argument and will call `withSeries`\n * with the given function and the passed series. This is useful\n * when doing e.g. `data.series.each(plot.withSeries(function() {...})`\n *\n * In both cases, the current series will be passed to the callback.\n */\n withSeries : function (series, callback) {\n var plot = this, ret;\n if (typeof series === 'function') {\n // allows for mapping over series and doing the same thing with each one\n return function (s) {\n return plot.withSeries(s, series);\n };\n }\n plot.fn = series.fn;\n ret = callback(series);\n plot.fn = plot.defaultFns;\n return ret;\n },\n describeDatumUnder : function (coords) {\n var plot = this;\n var scaleX = plot.x.invert(coords[0]);\n var extent = plot.x.domain();\n\n if (!plot.data) {\n // plot.data is the only thing this class doesn't set.\n throw new Error('No plot.data -- did you forget to set it in the transform?');\n }\n\n var dx = plot.fn.x;\n // find the datum that's closest to the coords\n var datum = _(plot.data.data).filter(function (d) {\n // don't inspect anything outside of the current context\n var xVal = dx(d);\n return extent[0] <= xVal && xVal <= extent[1];\n }).min(function (d) {\n return Math.abs(dx(d) - scaleX);\n });\n\n // min() returns Infinity if the array was empty.\n // this can happen if there are no data within\n // the brush's extent\n if (datum === Infinity) {\n datum = null;\n return null;\n } else {\n var yVals = [];\n var tipTextRows = _.filter(plot.data.series, 'tipText').map(plot.withSeries(function (series) {\n\n yVals.push(plot.y(plot.fn.y(datum)));\n\n return [series.name, series.tipText.call(plot, datum)];\n }));\n\n return {\n x : plot.x(dx(datum)),\n y : yVals,\n text : [\n plot.domainTipText(datum)\n ].concat(tipTextRows)\n };\n }\n },\n // called when the plot receives a new set of data\n setData : function (data) {\n var plot = this;\n\n plot.data = data;\n\n // The ContextChart creates 2 instances of the same Plot.\n // The main plot, called the focus, will set `data.allData`.\n // The context plot also calls `setData`, but at that\n // point, `data.data` is the already culled data, so we\n // don't want to overwrite `allData`.\n if (!data.allData) {\n data.allData = data.data.slice();\n // cache the full domain because it won't change.\n data.allDomain = d3.extent(data.allData.map(plot.fn.x));\n // clear the previous cullingFactor so we always cull a new set of data.\n plot.cullingFactor = null;\n }\n\n _.each(data.series, function (series) {\n // allows a series to override the default data accessor functions\n series.fn = _.defaults(series.fn || {}, plot.defaultFns);\n });\n\n // resets the domain to the full data set\n plot.setXDomain(data.allDomain);\n\n plot.color.domain(data.series.map(_.property('name')));\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer', [\n 'ngAnimate',\n 'tfc.sso',\n 'tf.retailer.Api',\n 'tf.retailer.Util',\n 'tf.retailer.i18n',\n 'tf.retailer.Analytics',\n 'tfc.retailer.Brand',\n 'tfc.retailer.Consumer',\n 'tfc.retailer.FitConsistency',\n 'tfc.retailer.Returns',\n 'tfc.retailer.Purchase',\n 'tfc.Reports',\n 'tfc.News',\n 'tfc.Help',\n 'tfc.Terms',\n 'tfc.Files',\n 'tfc.Products',\n 'ui.bootstrap',\n 'ui.grid',\n 'ui.grid.infiniteScroll',\n 'tfc.retailer.DashboardDescription',\n 'tfc.retailer.BrandSelection',\n 'tfc.retailer.CollapsibleBox',\n 'tfc.retailer.CategorySelection',\n 'tfc.retailer.CollapsibleMenu',\n 'tfc.retailer.ProductDetail',\n 'tfc.retailer.ActivityRegionFilter',\n 'tfc.retailer.Filter',\n 'tfc.retailer.Pagination',\n 'tfc.Toast',\n 'tfc.retailer.AggregationDetail',\n 'tfc.retailer.ConsumerSampling',\n 'tfc.retailer.UIGrid',\n 'tfc.retailer.StandardReports',\n 'tfc.retailer.StoreSelection'\n ])\n .config(config)\n .run(run)\n .constant(\"ExcelReportType\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\")\n .constant('Enums',{\n 'TransactionFilterType' : {\n 'Direct' : 'direct',\n 'Wholesale': 'wholesale'\n }\n });\n\n // @ngInject\n function config($urlRouterProvider, $httpProvider, $uiViewScrollProvider, $provide, NavProvider, AuthProvider, ReportCategories, $uibModalProvider, BrandReportKeys, ConsumerReportKeys, LookAndFeelType) {\n\n AuthProvider.setBasePath('/retailer/ui');\n\n $httpProvider.interceptors.push('ApiErrorHandler');\n\n $uiViewScrollProvider.useAnchorScroll();\n\n $urlRouterProvider.otherwise(function ($injector) {\n var $state = $injector.get('$state');\n $state.go('login');\n });\n\n var canAccess = function (stateName, lookAndFeel) {\n // @ngInject\n function canAccessOverride($injector) {\n var $state = $injector.get('$state');\n var LookAndFeel = $injector.get('LookAndFeel');\n return $state.can(stateName) && _.eq(LookAndFeel.get(), lookAndFeel);\n }\n return canAccessOverride;\n };\n\n var brandMetricsMenuItems = [\n {\n state : 'news',\n translate : 'app.menu.news',\n iconCls : 'fa fa-newspaper-o fa-fw fa-lg',\n isBrandMetric: false,\n openAccess: false\n },\n {\n translate : 'app.menu.consumerDashboard',\n iconCls : 'fa fa-area-chart fa-fw fa-lg',\n isBrandMetric: true,\n children : []\n .concat(_.map(ConsumerReportKeys, function (report) {\n return { state : 'consumerReports.' + report, translate : 'app.menu.consumerReports.' + report }\n }))\n .concat(_.map(BrandReportKeys, function (report) {\n return { state : 'brandReports.' + report, translate : 'app.menu.brandReports.' + report }\n }))\n .concat({state : 'purchase.attributes', translate : 'app.menu.purchaseAttributes'})\n .concat({state : 'consumer.sampling', translate : 'app.menu.consumerSampling'})\n },\n {\n translate : 'app.menu.product',\n iconCls : 'fa fa-level-down fa-rotate-90 fa-fw fa-lg',\n isBrandMetric: true,\n children : [\n {\n state: 'returns.Performance',\n translate: 'app.menu.returns.performance'\n },\n {\n state: 'returns.PerformanceBySize',\n translate: 'app.menu.returns.performanceBySize'\n },\n {\n state : 'fitConsistency.Consistency',\n translate : 'app.menu.consistency'\n }\n ]\n },\n {\n state: 'analytics',\n translate : 'app.menu.analytics',\n iconCls : 'fa fa-pie-chart fa-fw fa-lg',\n isBrandMetric: true\n },\n {\n state : 'help',\n translate : 'app.menu.help',\n iconCls : 'fa fa-question-circle fa-fw fa-lg',\n isBrandMetric: false,\n openAccess: true\n }\n ];\n\n var analyticsMenuItems = [\n {\n translate : 'app.menu.executive.summary',\n children : [\n {\n state: 'executiveSummary.summary',\n translate: 'app.menu.executiveSummary.summary'\n }\n ]\n },\n {\n translate : 'app.menu.shoppers',\n children : [\n {\n state: 'shoppers.summary',\n translate: 'app.menu.shoppers.summary'\n },\n {\n state: 'shoppers.sessions',\n translate: 'app.menu.shoppers.sessions'\n },\n {\n state: 'shoppers.activeUsers',\n translate: 'app.menu.shoppers.active.users'\n },\n {\n state: 'shoppers.adoption',\n translate: 'app.menu.shoppers.adoption'\n },\n {\n state: 'shoppers.kids',\n translate: 'app.menu.shoppers.kids'\n },\n {\n state: 'shoppers.sfo',\n translate: 'app.menu.shoppers.sfo'\n },\n {\n state: 'shoppers.shopperProfiles',\n translate: 'app.menu.shoppers.profiles'\n }\n ]\n },\n {\n translate : 'app.menu.transactions',\n children : [\n {\n state: 'transactions.summary',\n translate: 'app.menu.transactions.summary'\n },\n {\n state: 'transactions.orders',\n translate: 'app.menu.transactions.orders'\n },\n {\n state: 'transactions.revenue',\n translate: 'app.menu.transactions.revenue'\n },\n {\n state: 'transactions.ordersRate',\n translate: 'app.menu.transactions.orders.rate'\n }\n ]\n },\n {\n translate : 'app.menu.comparisons',\n children : [\n {\n state: 'comparisons.dateRange',\n translate: 'app.menu.comparisons.date.range'\n },\n {\n state: 'comparisons.hierarchy',\n translate: 'app.menu.comparisons.hierarchy'\n }\n ]\n },\n ];\n\n var menuItemsMap = [\n {\n lookAndFeelType: LookAndFeelType.BrandMetrics,\n items: brandMetricsMenuItems\n },\n {\n lookAndFeelType: LookAndFeelType.Analytics,\n items: analyticsMenuItems\n }\n ];\n\n function overrideCanAccess(menuItems, lookAndFeel) {\n return _.map(menuItems, function (item) {\n if(item.state) {\n item.canAccess = canAccess(item.state, lookAndFeel);\n }\n if(item.children) {\n _.each(item.children, function (child) {\n if(_.isString(child.state)) {\n child.canAccess = canAccess(child.state, lookAndFeel)\n }\n else if(child.state && child.state.name){\n child.canAccess = canAccess(child.state.name, lookAndFeel)\n }\n })\n }\n return item;\n });\n }\n\n var menuItems = _.flatMap(menuItemsMap, function (menuItem) {\n return overrideCanAccess(menuItem.items, menuItem.lookAndFeelType);\n });\n\n NavProvider\n .setAppTitle({\n translate : 'app.menu.title'\n });\n\n _.each(menuItems, function (menuItem) {\n NavProvider.addMain(menuItem);\n });\n\n // Always use custom modal window template\n _.extend($uibModalProvider.options, {\n // can't hide their backdrop with javascript because the function called\n // when clicking the backdrop (close) exits if backdrop is false.\n //backdrop : false,\n windowTemplateUrl : 'Util/Modal.tmpl.html'\n });\n\n $provide.decorator('$state', function ($delegate, $injector) {\n var originalCan = $delegate.can;\n $delegate.termCan = function (stateName) {\n var state = $delegate.get(stateName);\n var Terms = $injector.get('Terms');\n return !(state.data && state.data.requireTerms) || Terms.cookieExistsAndAccepted();\n };\n\n $delegate.can = function (stateName) {\n return originalCan(stateName) && $delegate.termCan(stateName);\n };\n\n return $delegate;\n });\n }\n\n // @ngInject\n function run($rootScope, $state, $injector, Nav, GaUtil, Auth, CookieJar, Terms,BrandReports,$stateParams, Toast,\n translateFilter, $log, ApiErrorHandler, LookAndFeel, UtilCacheProvider, AnalyticsHelper) {\n GaUtil.createGaTracker();\n $rootScope.isLoading = true;\n\n // TODO Temporary handling for existing invalid cookies. Safe to remove in future\n var selectedBrand = CookieJar.get('tfc-insight-selected-brand');\n if(selectedBrand && selectedBrand.includes(' ')) {\n CookieJar.set({name : 'tfc-insight-selected-brand',value : encodeURIComponent(selectedBrand)});\n }\n\n $rootScope.$on('auth.login', function () {\n var user = Auth.getUser();\n\n LookAndFeel.setLookAndFeelOnUserLogin(user);\n\n AnalyticsHelper.sendLoginEvent();\n\n $rootScope.isLoading = false;\n\n Terms.isAccepted()\n .then(function(isAccepted){\n if(isAccepted){\n $rootScope.isLoading = true;\n invokeFirstItem(user);\n } else{\n $rootScope.isLoading = true;\n $state.go('terms');\n }\n });\n });\n\n $rootScope.$on('auth.logout', function () {\n LookAndFeel.reset();\n CookieJar.remove('tfc-insight-selected-brand');\n });\n\n $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState){\n var isAuthenticated = Auth.isAuthenticated();\n if(isAuthenticated) {\n\n if (Terms.getCookie() && !$state.termCan(toState.name)) {\n event.preventDefault();\n $state.go('terms');\n } else {\n Terms.isAccepted().then(function(isAccepted){\n if(!isAccepted){\n event.preventDefault();\n $state.go('terms');\n }\n });\n }\n }\n\n if(isAuthenticated){\n AnalyticsHelper.sendPageChangeEvent(fromState, toState);\n }\n\n });\n\n $rootScope.$watch(Auth.isAuthenticated, function() {\n UtilCacheProvider.removeAll();\n var user = Auth.getUser();\n if (user) {\n AnalyticsHelper.setUserIdDimension();\n }\n });\n\n $rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {\n $log.error(error);\n var status = ApiErrorHandler.toastError(error);\n\n // If on transition to desired state fails and 'fromState' is empty then go to 'help'\n if(status && !fromState.name) {\n $state.go('help');\n }\n });\n\n\n function invokeFirstItem() {\n $rootScope.isLoading = true;\n\n var firstItem = _.find(Nav.mainMenu(), function (menuItem) {\n return $injector.invoke(menuItem.canAccess);\n });\n $injector.invoke(firstItem.onClick);\n\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Brand', [])\n .constant('BrandReportKeys', ['BrandAffinity'])\n .constant('BrandAffinityTimeFrames', ['Last3Months', 'LastYear'])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('brandReports', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/brand',\n data : {\n // TODO: This will change once we figure out the menu organization\n auth : { privilege : 'report.BrandSalesAffinity' },\n requireTerms:true\n },\n template : ''\n })\n .state('brandReports.all', {\n url : '/all',\n data:{\n title:'Brand Report',\n path:'brand/all'\n },\n templateUrl : 'Brand/BrandReports.tmpl.html',\n controller : 'BrandReportsCtrl as vm'\n })\n .state('brandReports.BrandAffinity', {\n url : '/BrandAffinity?{brandKey}&timeFrame&focusDepartment&focusCategory&affinityDepartment&affinityCategory&{pageNumber:int}&{pageSize:int}&transaction®ion',\n params : {\n pageNumber : 0,\n pageSize : 100 // default page size\n },\n data:{\n title: 'Brand Purchase Affinity',\n path:'brand/BrandAffinity'\n },\n templateUrl : 'Brand/BrandAffinity.tmpl.html',\n controller : 'BrandAffinityCtrl as vm',\n resolve : {\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n filters: function (BrandReports, $stateParams, activityRegion, selectedBrandKey) {\n return activityRegion(function() {\n return BrandReports.getBrandAffinityFilters(selectedBrandKey)\n },$stateParams.transaction, $stateParams.region);\n },\n reportData : function (BrandReports, BrandAffinityTimeFrames, $stateParams, filters, selectedBrandKey) {\n if($stateParams.timeFrame == null) $stateParams.timeFrame = BrandAffinityTimeFrames[1];\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return BrandReports.getBrandAffinity(selectedBrandKey, $stateParams.timeFrame, $stateParams.focusDepartment,\n $stateParams.focusCategory, $stateParams.affinityDepartment, $stateParams.affinityCategory,\n region, transaction && transaction.getLabel(), 100);\n },\n focusHierarchies : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n return BrandReports.findFocusHierarchies(selectedBrandKey, transaction && transaction.getLabel()).then(function (focusHierarchies) {\n return _(focusHierarchies).filter(function (o) {\n // Not including Baby, Girls, Boys or UnisexKids\n return BrandReports.filterBrandCategories(o);\n }).value();\n });\n },\n affinityHierarchies : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n return BrandReports.findAffinityHierarchies(selectedBrandKey, $stateParams.focusDepartment,\n $stateParams.focusCategory, transaction && transaction.getLabel()).then(function (affinityHierarchies) {\n return _(affinityHierarchies).filter(function (o) {\n // Not including Baby, Girls, Boys or UnisexKids\n return BrandReports.filterBrandCategories(o);\n }).value();\n });\n },\n pricePointData : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return BrandReports.getPricePointData(selectedBrandKey, $stateParams.timeFrame,\n $stateParams.focusDepartment, $stateParams.focusCategory, $stateParams.affinityDepartment,\n $stateParams.affinityCategory, region, transaction && transaction.getLabel());\n },\n brands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n itemCount : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return BrandReports.getPurchaseBrandItemCount(selectedBrandKey, $stateParams.timeFrame, $stateParams.focusDepartment,\n $stateParams.focusCategory, $stateParams.affinityDepartment, $stateParams.affinityCategory,\n region, transaction && transaction.getLabel());\n },\n aggregationLogDetails: function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('BrandSalesAffinity')\n }\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Consumer', [])\n .constant('ConsumerReportKeys', [\n 'ConsumerProfile'\n ])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('consumerReports', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/consumer?brandKey&transaction®ion',\n data : {\n // TODO: This will change once we figure out the menu organization\n auth : { privilege : 'report.ConsumerProfile' },\n requireTerms:true\n },\n template : ''\n })\n .state('consumerReports.all', {\n url : '/all',\n templateUrl : 'Consumer/ConsumerReports.tmpl.html',\n controller : 'ConsumerReportsCtrl as vm'\n })\n .state('consumerReports.ConsumerProfile', {\n url : '/ConsumerProfile',\n templateUrl : 'Consumer/ConsumerProfile.tmpl.html',\n data:{\n title:'Demographic & Body Shape',\n path:'consumer/ConsumerProfile'\n },\n params: {\n gender: null\n },\n controller : 'ConsumerProfileCtrl as vm',\n resolve : {\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n filters: function($stateParams, ConsumerReports, selectedBrandKey, activityRegion) {\n return activityRegion(function() {\n return ConsumerReports.getConsumerProfileFilters(selectedBrandKey)\n },$stateParams.transaction, $stateParams.region);\n },\n genderData : function(ConsumerReports, filters, BrandReports, $stateParams, Enums, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return ConsumerReports.getGenderAggregations(selectedBrandKey, region, transaction && transaction.getLabel());\n },\n stateParamsGender : function($stateParams, genderData) {\n if(!$stateParams.gender && genderData.womenPercent) {\n return $stateParams.gender = \"Female\";\n } else if(!$stateParams.gender && genderData.menPercent) {\n return $stateParams.gender = \"Male\";\n } else {\n return $stateParams.gender;\n }\n },\n ageData : reportData('getAgeAggregations'),\n heightData : reportData('getHeightAggregations'),\n weightData : reportData('getWeightAggregations'),\n inseamData : reportData('getInseamAggregations'),\n footLengthData : reportData('getFootLengthAggregations'),\n bustSizeData : reportData('getBustSizeAggregations'),\n userBrands : function (ConsumerReports) {\n return ConsumerReports.findBrandNames();\n },\n aggregationLogDetails : function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('ConsumerProfile');\n }\n }\n });\n\n function reportData(fnName) {\n // We can't just return function here, because ngInject doesn't work in that case, and\n // ui-router does not adhere to the strictDi setting, so we didn't know until we got to staging\n // @ngInject\n function resolver(ConsumerReports, stateParamsGender, selectedBrandKey, filters) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if(stateParamsGender) {\n return ConsumerReports[fnName](selectedBrandKey, stateParamsGender, region, transaction && transaction.getLabel());\n } else {\n return [];\n }\n }\n return resolver;\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ConsumerSampling', [])\n .constant(\"SplitRange\", {\n regex : /[\\<\\>\\-]/\n })\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('consumer', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/consumer',\n data : {\n // TODO: This will change once we figure out the menu organization\n auth : { privilege : 'report.ConsumerSampling' },\n requireTerms:true\n },\n template : ''\n })\n .state('consumer.sampling', {\n url : '/consumerSampling?brandKey',\n templateUrl : 'ConsumerSampling/ConsumerSampling.tmpl.html',\n controller : 'ConsumerSamplingCtrl as vm',\n data:{\n title:'Consumer Sampling',\n path:'consumer/consumerSampling'\n },\n resolve: {\n userBrands: function(BrandReports){\n return BrandReports.findUserBrandNames();\n },\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n samplingSummary: function(BrandReports, selectedBrandKey, consumerSampling){\n return consumerSampling( function(){\n return BrandReports.getConsumerSamplingSummary(selectedBrandKey)\n });\n },\n aggregationLogDetails : function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('ConsumerSampling');\n },\n samplingGender: function(BrandReports, selectedBrandKey, consumerSampling) {\n return consumerSampling( function(){\n return BrandReports.getConsumerSamplingGenderDetails(selectedBrandKey);\n });\n },\n samplingAgeRange: function(BrandReports, selectedBrandKey, consumerSampling){\n return consumerSampling( function(){\n return BrandReports.getConsumerSamplingAgeRangeDetails(selectedBrandKey);\n });\n }\n }\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Files',\n [\n 'ngFileUpload',\n 'ngSanitize'\n ])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('fileBase', {\n parent : 'pageWithMenu',\n data:{\n requireTerms:true\n },\n resolve : {\n retailers : function (Retailer) {\n return Retailer.find();\n }\n }\n })\n .state('upload', {\n parent : 'fileBase',\n url : '/upload?tla&year&category',\n data : {\n auth : {\n privilege : 'retailerManageReports'\n },\n path:'upload',\n title:'Upload Report',\n requireTerms:true\n },\n views : {\n '@pageWithMenu' : {\n templateUrl: 'Files/Upload.tmpl.html',\n controller : function ($state, $scope) {\n $scope.onUpload = function () {\n $state.reload();\n };\n }\n }\n }\n })\n .state('files', {\n parent : 'fileBase',\n url : '/files?tla&year&category',\n data : {\n auth : {\n privilege : 'retailerManageReports'\n },\n requireTerms:true,\n path:'files',\n title:'Uploaded Files'\n },\n resolve : {\n reportsCount: function(Reports, $stateParams){\n return Reports.reportCount($stateParams.tla, $stateParams.category, $stateParams.year, $stateParams.itemsPerPage, $stateParams.pageNumber);\n },\n reports : function (Reports, $stateParams) {\n return Reports.find($stateParams.tla, $stateParams.category, $stateParams.year, $stateParams.itemsPerPage, $stateParams.pageNumber);\n },\n tlaTree : function(Reports, $stateParams) {\n if($stateParams.tla){\n return Reports.tlaFilterReport($stateParams);\n }\n }\n },\n views : {\n '@pageWithMenu' : {\n templateUrl : 'Files/Files.tmpl.html',\n controller : 'FilesCtrl as vm'\n },\n 'fileTree@pageWithMenu' : {\n templateUrl: 'Files/FileTree.tmpl.html',\n controller: 'FileTreeCtrl as vm'\n }\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.FitConsistency', [])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('fitConsistency', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/fitConsistency',\n data : {\n // TODO: This will change once we figure out the menu organization\n auth : { privilege : 'report.FitConsistency' },\n requireTerms:true\n },\n template : ''\n })\n .state('fitConsistency.Consistency', {\n url : '/Consistency?brandKey&hierarchy&department&category&{pageNumber:int}&{pageSize:int}&transaction®ion&sortBy&sortOrder',\n params : {\n pageNumber : 1,\n pageSize : 100 // default page size\n },\n templateUrl : 'FitConsistency/FitConsistency.tmpl.html',\n controller : 'FitConsistencyCtrl as vm',\n data:{\n title:'Fit Consistency',\n path:'fitConsistency/Consistency'\n },\n resolve : {\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n filters: function (BrandReports, $stateParams, activityRegion, selectedBrandKey) {\n return activityRegion(function() {\n return BrandReports.getConsistencyFilters(selectedBrandKey)\n },$stateParams.transaction, $stateParams.region);\n },\n hierarchies : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if(!$stateParams.hierarchy) {\n $stateParams.hierarchy = \"All Categories\";\n }\n return BrandReports.findConsistencyHierarchies(selectedBrandKey,region, transaction && transaction.getLabel()).then(function (hierarchies) {\n return _(hierarchies).filter(function (o) {\n // Not including Baby, Girls, Boys or UnisexKids\n return o.department !== \"Baby\" && o.department !== \"Girls\" && o.department !== \"Boys\" && o.department !== \"UnisexKids\";\n }).value();\n });\n },\n styleData : function (BrandReports, $stateParams, hierarchies, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n var selectedHierarchy = _.some(hierarchies, {department: $stateParams.department,\n category: $stateParams.category});\n if(!selectedHierarchy) {\n $stateParams.hierarchy = \"All Categories\";\n delete $stateParams.department;\n delete $stateParams.category;\n }\n return BrandReports.findConsistencySizeAdvices(selectedBrandKey, $stateParams.department,\n $stateParams.category, region, transaction && transaction.getLabel());\n },\n brands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n aggregationLogDetails: function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('FitConsistency');\n }\n }\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics', [\n 'tf.retailer.Api',\n 'tf.retailer.Util',\n 'tf.retailer.Charts'\n ])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('analytics', {\n parent : 'pageWithMenu',\n url : '/analytics?tla',\n data : {\n auth : {\n privilege : 'retailerViewAnalytics'\n },\n requireTerms:true,\n title:'True Fit Analytics',\n path:'analytics'\n },\n controller : 'AnalyticsCtrl as vm',\n templateUrl : 'Analytics/Analytics.tmpl.html',\n resolve : {\n experiments : function ($stateParams, ExperimentApi) {\n return ExperimentApi.find($stateParams.tla);\n },\n stores : function (Auth, Retailer) {\n if (Auth.can('retailerChangeTla')) {\n return Retailer.find();\n }\n }\n }\n })\n .state('results', {\n parent : 'pageWithMenu',\n url : '/analytics/results/:tla?experiment',\n data : {\n auth : {\n privilege : 'retailerViewAnalytics',\n },\n title:'True Fit Analytics A/B Test Design',\n path:'analytics/results'\n },\n resolve : {\n experiment : function ($stateParams, ExperimentApi) {\n if ($stateParams.experiment) {\n return ExperimentApi.get($stateParams.tla, $stateParams.experiment);\n } else {\n return null;\n }\n },\n intervals : function (AnalyticsApi) {\n return AnalyticsApi.getIntervals();\n }\n },\n controller : function ($scope, $stateParams, experiment, intervals) {\n $scope.experiment = experiment;\n $scope.intervals = intervals;\n $scope.tla = $stateParams.tla;\n },\n template : ''\n })\n ;\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Help', [])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('help', {\n parent : 'pageWithMenu',\n url : '/contact',\n templateUrl : 'Help/Help.tmpl.html',\n controller : 'HelpCtrl as vm',\n data:{\n requireTerms:false,\n title:'Help',\n path:'contact'\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Charts', []);\n\n d3.selection.prototype.translate = function (x, y) {\n var fn;\n if (_.isFunction(x)) {\n fn = x;\n return this.attr('transform', function () {\n return translateText(fn.apply(this, arguments));\n });\n } else {\n return this.attr('transform', translateText(x, y));\n }\n\n function translateText(x, y) {\n if (_.isArray(x)) {\n y = x[1];\n x = x[0];\n }\n return 'translate(' + x + ',' + y + ')';\n }\n };\n\n function randomInt(min, max) {\n return min + Math.floor(((max - min) + 1) * Math.random());\n }\n\n window.uuid = function () {\n // Per RFC4122 version 4:\n // \"x\" gets replaced a random hex value 0-F\n // \"y\" gets replaced with the bits \"10rr\" where r is a random bit\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (xy) {\n return (xy === 'x' ? randomInt(0, 15) : (8 | randomInt(0, 3))).toString(16);\n });\n };\n\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('tfc.News',[])\n .config(config);\n\n\n // @ngInject\n function config($stateProvider){\n\n $stateProvider.state('news',{\n parent : 'pageWithMenu',\n url : '/news',\n templateUrl : 'News/News.tmpl.html',\n data : {\n title:'True Fit News',\n path:'news'\n },\n controller: \"NewsCtrl as vm\"\n })\n }\n\n})();\n\n","(function () {\n 'use strict';\n\n // tfc.Nav is defined in tfc-sso\n angular\n .module('tfc.Nav')\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('pageWithMenu', {\n parent : 'page',\n abstract : true,\n templateUrl : 'Nav/PageWithMenu.tmpl.html',\n controller: 'PageWithMenuCtrl as vm',\n onEnter: function (LookAndFeel, LookAndFeelType, GaUtil) {\n if(!LookAndFeel.isBrandMetrics()) {\n GaUtil.setGaDimension('dimension2', LookAndFeelType.BrandMetrics);\n LookAndFeel.setToBrandMetrics();\n }\n }\n });\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ProductDetail', [])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('productDetail', {\n parent : 'pageWithMenu',\n url : '/productDetail?brandKey&{styleId:string}&department&category®ion®ionDescription&transaction&previousState&sortBy&sortOrder',\n templateUrl : 'ProductDetail/ProductDetail.tmpl.html',\n controller : 'ProductDetailCtrl as vm',\n data : {\n auth : { privilege : 'report.productDetail' },\n requireTerms:true,\n title:'Product Detail',\n path:'productDetail/ProductDetail'\n },\n resolve : {\n brands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n styleSummary : function (ProductDetail, $stateParams) {\n return ProductDetail.getProductStyleSummary($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n },\n styleSizeAdvice: function (ProductDetail, $stateParams){\n return ProductDetail.getProductStyleSizeAdvice($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n },\n attributeValues : function(ProductDetail, $stateParams){\n return ProductDetail.getPurchaseAttributeStyle($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction, $stateParams.category, $stateParams.department);\n },\n topBrands : function(ProductDetail, $stateParams){\n return ProductDetail.getPurchaseAffinityTopBrands($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n },\n categoryTopBrands : function(ProductDetail, $stateParams){\n return ProductDetail.getPurchaseAffinityCategoryTopBrands($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction, $stateParams.category, $stateParams.department);\n },\n sizeAdvice : function(ProductDetail, $stateParams){\n return ProductDetail.getFitConsistencySizeAdvice($stateParams.brandKey,\n $stateParams.region, $stateParams.transaction, $stateParams.category, $stateParams.department);\n },\n consumerAgeRange: function(ProductDetail, $stateParams){\n return ProductDetail.getConsumerStylesAgeRange($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n },\n consumerHeight: function(ProductDetail, $stateParams){\n return ProductDetail.getConsumerStylesHeight($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n },\n consumerWeight: function(ProductDetail, $stateParams){\n return ProductDetail.getConsumerStylesWeight($stateParams.brandKey, $stateParams.styleId,\n $stateParams.region, $stateParams.transaction);\n }\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Purchase', [])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('purchase', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/purchase',\n data : {\n auth : { privilege : 'report.PurchaseAttribute' }\n },\n template : ''\n })\n .state('purchase.attributes', {\n url : '/attributes?brandKey&department&category&attribute&attributeValue&transaction®ion',\n templateUrl : 'Purchase/PurchaseAttributes.tmpl.html',\n controller : 'PurchaseAttributesCtrl as vm',\n data : {\n requireTerms:true,\n title:'Purchase Attributes',\n path:'purchase/PurchaseAttributes'\n },\n resolve : {\n selectedBrandKey: function (PurchaseAttribute, $stateParams) {\n return PurchaseAttribute.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n filters: function (PurchaseAttribute, $stateParams, activityRegion, selectedBrandKey) {\n return activityRegion( function() {\n return PurchaseAttribute.getPurchaseAttributeFilters(selectedBrandKey)\n },$stateParams.transaction, $stateParams.region);\n },\n userBrands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n attributeHierarchies : function(PurchaseAttribute, BrandReports, filters, Enums, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return PurchaseAttribute.getAttributeHierarchies(selectedBrandKey, transaction && transaction.getLabel(), region);\n },\n attributes : function(attributeHierarchies, $stateParams) {\n var selectedHierarchy = _.find(attributeHierarchies, function(o){\n return o.department === $stateParams.department && o.category === $stateParams.category\n });\n if(selectedHierarchy){\n return _.uniq(_.map(selectedHierarchy.attributes, 'attribute')).sort();\n }\n },\n attributeValues : function(attributeHierarchies, attributes, $stateParams) {\n var selectedHierarchy = _.find(attributeHierarchies, function(o){\n return o.department === $stateParams.department && o.category === $stateParams.category\n });\n if(selectedHierarchy){\n var selectedAttribute = _.find(selectedHierarchy.attributes, function(o){\n return o.attribute.key === $stateParams.attribute;\n });\n if(selectedAttribute){\n var attributeValues = selectedAttribute.attributeValues.sort();\n attributeValues.unshift({key: 'ALL',value: 'ALL',isActive: true});\n return attributeValues;\n }\n }\n },\n hierarchyFilter : function(attributeHierarchies, HierarchyFilter, $stateParams) {\n return HierarchyFilter(attributeHierarchies,\n $stateParams.hierarchy, $stateParams.department, $stateParams.category);\n },\n attributeFilter : function(attributes, hierarchyFilter, AttributeFilter, $stateParams) {\n return AttributeFilter(attributes,\n $stateParams.attribute, hierarchyFilter);\n },\n attributeValueFilter : function(attributeValues, attributeFilter, AttributeValueFilter, $stateParams) {\n return AttributeValueFilter(attributeValues, $stateParams.attributeValue, attributeFilter);\n },\n salesByAttribute : function (PurchaseAttribute, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if($stateParams.department && $stateParams.category && $stateParams.attribute && $stateParams.attributeValue)\n return PurchaseAttribute.getSalesByAttribute(selectedBrandKey, $stateParams.department, $stateParams.category, $stateParams.attribute,\n transaction && transaction.getLabel(), region);\n },\n salesByConsumerAge : function(PurchaseAttribute, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if($stateParams.department && $stateParams.category && $stateParams.attribute && $stateParams.attributeValue)\n return PurchaseAttribute.getSalesByConsumerAge(selectedBrandKey, $stateParams.department, $stateParams.category, $stateParams.attribute,\n $stateParams.attributeValue, transaction && transaction.getLabel(), region);\n },\n salesByConsumerBmi : function(PurchaseAttribute, $stateParams, filters, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if($stateParams.department && $stateParams.category && $stateParams.attribute && $stateParams.attributeValue)\n return PurchaseAttribute.getSalesByConsumerBmi(selectedBrandKey, $stateParams.department, $stateParams.category, $stateParams.attribute,\n $stateParams.attributeValue, transaction && transaction.getLabel(), region);\n },\n aggregationLogDetails: function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('PurchaseAttribute');\n }\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports', [])\n .constant('ReportCategories', [\n 'week', 'month', 'quarter', 'other'\n ])\n .config(config);\n\n // @ngInject\n function config($stateProvider, ReportCategories) {\n\n $stateProvider\n .state('reportList', {\n parent : 'pageWithMenu',\n url : '/reports?tla',\n abstract : true,\n template : '
'\n })\n .state('reportList.all', {\n url : '/all',\n data : {\n auth : {\n privilege : 'retailerViewReports',\n defaultTo : 'help'\n },\n requireTerms:true,\n title:'All Reports',\n path:'reports/all'\n },\n controller : 'AllReportsCtrl as vm',\n templateUrl : 'Reports/AllReports.tmpl.html',\n resolve : {\n reports : function (Reports, $stateParams) {\n var tla = Reports.defaultTla($stateParams.tla);\n return tla ? Reports.find(tla) : [];\n }\n }\n })\n ;\n\n ReportCategories.forEach(function (category) {\n $stateProvider\n .state('reportList.' + category, {\n data : {\n reportCategory : category,\n auth : {\n privilege : 'retailerViewReports',\n defaultTo: 'help'\n },\n requireTerms:true,\n title: 'Category Report - ' + category,\n path:'reports/' + category\n },\n url : '/' + category,\n controller : 'CategoryReportsCtrl as vm',\n templateUrl : 'Reports/CategoryReports.tmpl.html',\n resolve : {\n defaultTla : function(Reports, $stateParams){\n return Reports.defaultTla($stateParams.tla);\n },\n reports : function (Reports, defaultTla) {\n return defaultTla ? Reports.find(defaultTla, category) : [];\n },\n reportsCount: function(Reports, defaultTla){\n return Reports.reportCount(defaultTla, category);\n }\n }\n })\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Returns', [])\n .config(config)\n .constant('PageSize', 100);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('returns', {\n abstract : true,\n parent : 'pageWithMenu',\n url : '/returns',\n data : {\n auth : { privilege : 'report.BrandReturnsPerformance' },\n requireTerms:true\n },\n template : ''\n })\n .state('returns.Performance', {\n url : '/Performance?brandKey&hierarchy&department&category&{pageNumber:int}&{pageSize:int}&transaction®ion&sortBy&sortOrder',\n params : {\n pageNumber : 1,\n pageSize : 100 // default page size\n },\n data:{\n title:'Returns Benchmark',\n path:'returns/Performance'\n },\n templateUrl : 'Returns/ReturnsPerformance.tmpl.html',\n controller : 'ReturnsPerformanceCtrl as vm',\n resolve : {\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n filters: function (BrandReports, $stateParams, activityRegion, selectedBrandKey) {\n return activityRegion( function() {\n return BrandReports.getReturnsPerformanceFilters(selectedBrandKey)\n },$stateParams.transaction, $stateParams.region);\n },\n summary : function (filters, BrandReports, $stateParams, selectedBrandKey) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n if(!$stateParams.hierarchy) {\n $stateParams.hierarchy = \"All Categories\";\n }\n return BrandReports.getReturnsPerformanceSummary(selectedBrandKey, transaction && transaction.getLabel(), region);\n },\n styleData : function (BrandReports, $stateParams, filters, selectedBrandKey) {\n if($stateParams.hierarchy) {\n var transaction = filters.getSelected();\n var region = transaction && transaction.getSelectedRegion() && transaction.getSelectedRegion().getLabel();\n return BrandReports.getReturnsPerformance(selectedBrandKey, $stateParams.department, $stateParams.category, transaction && transaction.getLabel(), region);\n }\n },\n brands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n aggregationLogDetails : function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('ReturnsPerformance');\n }\n }\n })\n .state('returns.PerformanceBySize', {\n url : '/Performance/returnsBySize?brandKey&hierarchy&department&category&sizeType&localeCode&{pageNumber:int}&{pageSize:int}',\n params : {\n pageNumber : 1,\n pageSize : 100 // default page size\n },\n data : {\n auth : { privilege : 'report.BrandReturnsPerformanceBySize' },\n requireTerms:true,\n title:'Returns Benchmark By Size',\n path:'returns/PerformanceBySize'\n },\n templateUrl: 'ReturnsBySize/ReturnsPerformanceBySize.tmpl.html',\n controller : 'ReturnsPerformanceBySizeCtrl as vm',\n resolve : {\n selectedBrandKey: function(BrandReports, $stateParams){\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey){\n $stateParams.brandKey = selectedBrandKey;\n return selectedBrandKey;\n });\n },\n hierarchies : function (BrandReports, $stateParams, selectedBrandKey) {\n return BrandReports.getReturnsPerformanceBySizeHierarchies(selectedBrandKey);\n },\n summary: function (BrandReports, $stateParams,hierarchies, selectedBrandKey) {\n if(hierarchies && hierarchies.length) {\n $stateParams.brandKey = selectedBrandKey;\n $stateParams.department = $stateParams.department || (hierarchies[0] && hierarchies[0].department);\n $stateParams.category = $stateParams.category || (hierarchies[0] && hierarchies[0].category);\n $stateParams.sizeType = $stateParams.sizeType || (hierarchies[0] && hierarchies[0].sizeType);\n $stateParams.localeCode = $stateParams.localeCode || (hierarchies[0] && hierarchies[0].localeCode);\n return BrandReports.getReturnsPerformanceBySizeSummary(selectedBrandKey, $stateParams.department,\n $stateParams.category, $stateParams.localeCode, $stateParams.sizeType);\n }\n },\n brands : function (BrandReports) {\n return BrandReports.findUserBrandNames();\n },\n aggregationLogDetails : function(BrandReports) {\n return BrandReports.getDashboardAggregationLogDetails('ReturnPerformanceBySize');\n }\n }\n })\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Terms',[])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('terms', {\n parent:'pageWithMenu',\n url : '/terms',\n controller : 'TermsCtrl as vm',\n templateUrl : 'Terms/Terms.tmpl.html',\n data:{\n requireTerms:false,\n title:'Terms',\n path:'terms'\n }\n });\n }\n\n})();\n\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.i18n', [\n 'pascalprecht.translate',\n 'ngSanitize'\n ])\n .config(config);\n\n // @ngInject\n function config($translateProvider) {\n\n $translateProvider.useStaticFilesLoader({\n files: [{\n prefix: 'i18n/message-bundle-',\n suffix: '.json'\n }, {\n prefix: 'i18n/message-bundle-terms-v1-',\n suffix: '.json'\n },{\n prefix: 'i18n/message-bundle-news-v1-',\n suffix: '.json'\n }]\n });\n $translateProvider.preferredLanguage('en');\n $translateProvider.useSanitizeValueStrategy('sanitizeParameters');\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Products',\n [\n 'ui.bootstrap',\n 'ngFileUpload',\n 'ngSanitize'\n ])\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n $stateProvider\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports', [])\n .constant('ReportFormat', {\n Daily: 'daily',\n Weekly: 'weekly',\n Monthly: 'monthly'\n })\n .constant('MIN_DATE', moment(new Date('10/01/2020')).format('YYYY-MM-DD'))\n .constant('MAX_CONVERSION', 100)\n .constant('ConsumerChartDisplay', {\n 'Colors' : { // key & arr of stroke & fill color\n 'tfLine': { stroke: '#4a90e1', fill: '#5A9AE4', opacity: 'none' , class: 'tf-color'},\n 'nonTFLine': { stroke: '#f4a622', fill: '#927852', opacity: 'none', class: 'nontf-color'},\n 'botLine' : { stroke: '#727479', fill: '#5b5d64', opacity: '0.5', class: 'bot-color'},\n 'totalLine' : { stroke: '#C4C4C5', fill: '#5C5E65', opacity: '0.5', class: 'sitewide-color'},\n 'registered' : { stroke: '#4169E1', fill: '#4169E1', opacity: '0.5', class: 'registered-color'},\n 'siteRegistered' : { stroke: '#569AE1', fill: '#569AE1', opacity: 'none', class: 'site-registered-color'},\n 'travellingRegistered' : { stroke: '#437BB2', fill: '#437BB2', opacity: '0.5', class: 'traveling-registered-color'},\n 'ipRegistered' : { stroke: '#35628C', fill: '#35628C', opacity: '0.5', class: 'ip-registered-color'}\n }\n })\n .constant('StandardReportPrivileges', ['report.TransactionAndImpact'])\n .directive('extendedTfcMainNav', function (tfcMainNavDirective) {\n //creating a copy of the existing tfcNav and changing the templateUrl to the store reporting nav template\n var tfcMainNav = angular.copy(tfcMainNavDirective[0]);\n tfcMainNav.templateUrl = 'StandardReports/Nav/StoreNav.tmpl.html';\n return tfcMainNav;\n });\n\n})();","(function () {\n 'use strict';\n\n var util = {\n parseJwt : function (jwt) {\n var parts = jwt.split('.');\n return {\n header : base64Json(parts[0]),\n payload : base64Json(parts[1])\n };\n },\n parseMultipartHeader : function (header) {\n var parts = header.split(/; */); // the space is technically optional\n return _.reduce(parts, function (map, part) {\n var pair = part.split('=');\n if (pair.length === 1) {\n pair.push(true); // e.g content-disposition: inline; ...\n } else if (_.startsWith(pair[1], '\"') && _.endsWith(pair[1], '\"')) {\n pair[1] = JSON.parse(pair[1]); // parse value as a string\n }\n map[pair[0]] = pair[1];\n return map;\n }, {});\n }\n };\n\n function base64Json(encoded) {\n return JSON.parse(atob(encoded));\n }\n\n angular\n .module('tf.retailer.Util', [])\n .constant('util', util)\n .service('dateUtil', DateUtil);\n\n function DateUtil($filter) {\n return {\n formatJsonDate : formatJsonDate\n };\n\n function formatJsonDate(json, format) {\n if (!json) return \"\";\n var date = $filter('date')(json, format);\n return date;\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('comparisons', {\n abstract: true,\n parent : 'storePage',\n url : '/comparisons?comparisonMetric',\n template : ''\n })\n .state('comparisons.dateRange', {\n url : '/date-range?comparisonStartDate&comparisonEndDate&comparisonTab',\n data: {\n auth : { privilege : 'report.Comparisons' },\n title: 'Compare Date Ranges',\n path:'comparisons/date-range'\n },\n params: {\n comparisonTab: {type: 'int'}\n },\n templateUrl : 'StandardReports/Comparisons/DateRange/ComparisonsDateRange.tmpl.html',\n controller : 'ComparisonsDateRangeCtrl as vm'\n })\n .state('comparisons.hierarchy', {\n url : '/hierarchy?comparisonDepartment&comparisonCategory&comparisonClassification&comparisonAddressable&comparisonTab',\n data: {\n auth : { privilege : 'report.Comparisons' },\n title: 'Compare Hierarchies',\n path:'comparisons/hierarchy'\n },\n params: {\n comparisonAddressable: {type: 'bool'},\n comparisonTab: {type: 'int'}\n },\n templateUrl : 'StandardReports/Comparisons/Hierarchy/ComparisonsHierarchy.tmpl.html',\n controller : 'ComparisonsHierarchyCtrl as vm'\n });\n }\n\n})();","(function () {\n 'use strict';\n\n // tfc.Nav is defined in tfc-sso\n angular\n .module('tfc.retailer.StandardReports')\n .directive('topNav', topNav)\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('storePage', {\n abstract : true,\n templateUrl : 'StandardReports/Nav/StorePage.tmpl.html',\n controller: 'StorePageCtrl as vm',\n url : '/standard-report?storeKey&startDate&endDate&country&continent&deviceType&' +\n 'department&category&classification&detailLevel&addressable&uiLocale',\n params: {\n storeKey: {array: true},\n deviceType: {array: true},\n continent: {array: true},\n country: {array: true},\n uiLocale: {array: true},\n addressable: {type: 'bool'}\n },\n onEnter: function(LookAndFeel, LookAndFeelType, GaUtil) {\n if(!LookAndFeel.isAnalytics()) {\n GaUtil.setGaDimension('dimension2', LookAndFeelType.Analytics);\n LookAndFeel.setToAnalytics();\n }\n },\n resolve: {\n userStores: function (StandardReports) {\n return StandardReports.findUserStores();\n },\n storeKeys: function (StandardReports, userStores, $stateParams) {\n return StandardReports.defaultSelectedStores(userStores, $stateParams.storeKey);\n },\n filters: function (StandardReports, $stateParams, Filters, storeKeys) {\n return StandardReports.getConsumerFilters(storeKeys).then(function (filters) {\n var dimensions = filters.dimensions;\n Filters.createFilter(dimensions, $stateParams);\n return Filters.getFilterParams();\n });\n }\n }\n });\n }\n\n function topNav() {\n return {\n restrict: 'E',\n templateUrl : 'StandardReports/Nav/TopNav.tmpl.html',\n scope: true\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('executiveSummary', {\n abstract: true,\n parent : 'storePage',\n url : '/executive-summary',\n template : ''\n })\n .state('executiveSummary.summary', {\n url : '/summary',\n data: {\n auth : { privilege : 'report.ExecutiveSummary' },\n title:'Executive Summary',\n path:'executiveSummary/summary'\n },\n templateUrl : 'StandardReports/ExecutiveSummary/ExecutiveSummary.tmpl.html',\n controller : 'ExecutiveSummaryCtrl as vm'\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('shoppers', {\n abstract: true,\n parent : 'storePage',\n url : '/shoppers',\n template : ''\n })\n .state('shoppers.summary', {\n url : '/summary',\n data: {\n auth : { privilege : 'report.Shoppers' },\n title:'Shoppers Summary',\n path:'shoppers/summary'\n },\n templateUrl : 'StandardReports/Shoppers/Summary/ShopperSummary.tmpl.html',\n controller : 'ShopperSummaryCtrl as vm'\n })\n .state('shoppers.sessions', {\n url : '/sessions',\n data: {\n auth : { privilege : 'report.Shoppers' },\n title:'Shoppers Sessions',\n path:'shoppers/sessions'\n },\n templateUrl : 'StandardReports/Shoppers/Sessions/ShopperSessions.tmpl.html',\n controller : 'ShopperSessionsCtrl as vm'\n })\n .state('shoppers.activeUsers', {\n url : '/active-users',\n data: {\n auth : { privilege : 'report.Shoppers' },\n title:'Shoppers Active Users',\n path:'shoppers/active-users'\n },\n templateUrl : 'StandardReports/Shoppers/ActiveUsers/ActiveUsers.tmpl.html',\n controller : 'ActiveUsersCtrl as vm'\n })\n .state('shoppers.adoption', {\n url : '/adoption',\n data: {\n auth : { privilege : 'report.Shoppers' },\n title:'Shoppers Adoption',\n path:'shoppers/adoption'\n },\n templateUrl : 'StandardReports/Shoppers/Adoption/ShopperAdoption.tmpl.html',\n controller : 'ShopperAdoptionCtrl as vm'\n })\n .state('shoppers.kids', {\n url : '/kids',\n data: {\n auth : { privilege : 'report.KidsProfiles' },\n title:'Shoppers Kids',\n path:'shoppers/kids'\n },\n templateUrl : 'StandardReports/Shoppers/RecipientProfiles/RecipientProfiles.tmpl.html',\n controller : 'KidsProfilesCtrl as vm'\n })\n .state('shoppers.sfo', {\n url : '/sfo',\n data: {\n auth : { privilege : 'report.SFOProfiles' },\n title:'Shoppers SFO',\n path:'shoppers/sfo'\n },\n templateUrl : 'StandardReports/Shoppers/RecipientProfiles/RecipientProfiles.tmpl.html',\n controller : 'SFOProfilesCtrl as vm'\n })\n .state('shoppers.shopperProfiles', {\n url : '/shopper-profiles',\n data: {\n auth : { privilege : 'report.ShopperProfiles' },\n title:'Shoppers Profiles',\n path:'shoppers/shopper-profiles'\n },\n resolve: {\n genderData: function (filters, storeKeys, StandardReports, ReportFormat) {\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n return StandardReports.getConsumerData('gender', ReportFormat.Daily, queryFilters).then(function (data) {\n return _(data.profileValues)\n .flatMap('rangeMetricValues')\n .sortBy('range')\n .value();\n\n });\n }\n },\n templateUrl : 'StandardReports/Shoppers/ShopperProfiles/ShopperProfiles.tmpl.html',\n controller : 'ShopperProfilesCtrl as vm'\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .config(config);\n\n // @ngInject\n function config($stateProvider) {\n\n $stateProvider\n .state('transactions', {\n abstract: true,\n parent : 'storePage',\n url : '/transaction',\n template : ''\n })\n .state('transactions.summary', {\n url : '/summary',\n data: {\n auth : { privilege : 'report.TransactionAndImpact' },\n title:'Transaction Summary',\n path:'transaction/summary'\n },\n templateUrl : 'StandardReports/Transactions/Summary/TransactionSummary.tmpl.html',\n controller : 'TransactionSummaryCtrl as vm'\n })\n .state('transactions.orders', {\n url : '/orders',\n data: {\n auth : { privilege : 'report.TransactionAndImpact' },\n title:'Transaction Orders',\n path:'transaction/orders'\n },\n templateUrl : 'StandardReports/Transactions/Orders/TransactionOrders.tmpl.html',\n controller : 'TransactionOrdersCtrl as vm'\n })\n .state('transactions.revenue', {\n url : '/revenue',\n data: {\n auth : { privilege : 'report.TransactionAndImpact' },\n title:'Transaction Revenue',\n path:'transaction/revenue'\n },\n templateUrl : 'StandardReports/Transactions/Revenue/TransactionRevenue.tmpl.html',\n controller : 'TransactionRevenueCtrl as vm'\n })\n .state('transactions.ordersRate', {\n url : '/order-rate',\n data: {\n auth : { privilege : 'report.TransactionAndImpact' },\n title:'Transaction Order Rate',\n path:'transaction/order-rate'\n },\n templateUrl : 'StandardReports/Transactions/OrderRateSummary/OrderRateSummary.tmpl.html',\n controller : 'OrderRateSummaryCtrl as vm'\n });\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ActivityRegionFilter',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.AggregationDetail',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.BrandSelection',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.CategorySelection',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.CollapsibleBox',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.CollapsibleMenu',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.DashboardDescription',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Pagination',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StoreSelection',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.UIGrid',[]);\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer')\n .controller('AppCtrl', AppCtrl);\n\n // @ngInject\n function AppCtrl($scope, $state) {\n var vm = this;\n\n $scope.$state = $state;\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer')\n .controller('DashboardCtrl', DashboardCtrl);\n\n // @ngInject\n function DashboardCtrl() {\n var vm = this;\n\n }\n\n})();\n","(function(i,s,o,g,r,a,m){\n\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function(){\n (i[r].q = i[r].q||[]).push(arguments)\n },i[r].l = 1 * new Date();\n a = s.createElement(o),\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a,m)\n\n})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer')\n .factory('Retailer', Retailer);\n\n // @ngInject\n function Retailer(Api) {\n\n return {\n find : find\n };\n\n // TODO: Should handle api success in api.js (Remove this boilerplate code)\n function find() {\n return Api.get('/retailer', { cache : true }).then(_.property('data'));\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Api', [])\n .factory('Api', Api)\n .constant('ApiStatusCodes', {\n \"NotFound\": 404,\n \"InternalError\": 500\n }\n )\n .factory('ApiFallback', ApiFallback)\n .factory('ApiErrorHandler', ApiErrorHandler);\n\n // @ngInject\n function Api($http, $q) {\n var BASE = '/retailer/ui';\n var api = createApi(BASE);\n api.withBasePath = withBasePath;\n api.getBasePath = getBasePath;\n api.withEncodedPath = getEncodedPath;\n return api;\n\n function withBasePath(path) {\n return createApi(BASE + path);\n }\n\n // Method to get base path of url\n function getBasePath(){\n return BASE;\n }\n\n // Method to get url with encoded value\n function getEncodedPath(path, pathParam) {\n return path + encodeURIComponent(pathParam)\n }\n\n function createApi(basePath) {\n\n // add shortcut methods\n ['get', 'delete', 'head', 'jsonp'].map(createShortMethod);\n ['post', 'put', 'patch'].map(createShortMethodWithData);\n\n // readonly property\n apiRequest.basePath = basePath;\n\n return apiRequest;\n\n function apiRequest(config) {\n config.url = apiUrl(config.url);\n return handleRequest($http(config));\n }\n\n function apiUrl(url) {\n return basePath + url;\n }\n\n function createShortMethod(method) {\n apiRequest[method] = function (url, config, fallBack) {\n return handleRequest($http[method](apiUrl(url), config), fallBack);\n };\n }\n\n function createShortMethodWithData(method) {\n apiRequest[method] = function (url, data, config, fallBack) {\n return handleRequest($http[method](apiUrl(url), data, config), fallBack);\n };\n }\n\n function handleRequest(promise, fallBack) {\n return promise\n .catch(function (reason) { return apiFailure(reason, fallBack) });\n }\n\n //fallBack to be passed as array of objects specifying error codes and their handler functions\n function apiFailure(response, fallBacks) {\n var handler = _.isArray(fallBacks) && _.find(fallBacks, function (fallback) {\n return fallback.isStatusCodeHandled(response.status);\n });\n if (handler) {\n return handler.handle(response);\n } else {\n return $q.reject(response);\n }\n\n }\n\n }\n }\n\n function ApiFallback() {\n\n return {\n createFallback : function (isStatusCodeHandled, handle) {\n return [{\n \"isStatusCodeHandled\": isStatusCodeHandled,\n \"handle\": handle\n }];\n }\n };\n }\n\n function ApiErrorHandler($q, $injector) {\n\n return {\n responseError: function(err) {\n if(!err.config[\"specificallyHandled\"]) {\n toastError(err);\n }\n return $q.reject(err);\n },\n toastError: toastError\n };\n\n function toastError(error) {\n var Toast = $injector.get('Toast');\n var status = error && error.status;\n switch(status) {\n case 403: // Forbidden\n Toast.error(\"Site.Error.LackPrivilege\");\n break;\n case 404: // Page not found\n Toast.error(\"Site.Error.ServiceUnavailable\");\n break;\n default:\n if (status >= 500) {\n Toast.error(\"Site.Error.ServiceUnavailable\");\n }\n }\n return status;\n }\n\n }\n\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Brand')\n .controller('BrandAffinityCtrl', BrandAffinityCtrl)\n .constant('BrandDisplaySize', 250);\n\n // @ngInject\n function BrandAffinityCtrl($state, $scope, $filter, PageSize, BrandAffinityTimeFrames, reportData, $stateParams,\n focusHierarchies, affinityHierarchies, pricePointData, brands, itemCount, $timeout,\n translateFilter, BrandAffinityReport, BrandDisplaySize, CookieJar, filters, GaUtil,\n aggregationLogDetails, Filter) {\n var vm = this;\n vm.brands = _.isArray(brands) ? brands : [];\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n vm.timeFrames = BrandAffinityTimeFrames;\n vm.unfilteredData = reportData && reportData.relatedBrands;\n vm.filteredText = \"\";\n vm.pricePointData = pricePointData;\n vm.itemCount = itemCount;\n vm.pageSize = PageSize;\n vm.totalCount = vm.unfilteredData ? vm.unfilteredData.length : 0;\n vm.filteredCount = vm.totalCount;\n vm.currentPage = $stateParams.pageNumber;\n vm.maxSize = 7;\n vm.options = {\n horizontal : true,\n horizontalLabelSize : 40,\n verticalLabelSize : 15,\n dashedLabelBoxes : true,\n barSpacing : .3,\n disableBar : true,\n labelSize: 240\n };\n vm.focusHierarchies= _(focusHierarchies).map(function(o){\n return {\n focusDepartment: o.department,\n focusCategory: o.category,\n display: o.category ? o.department + \"/\" + o.category : o.department\n }\n }).value();\n\n vm.aggregationDetails = aggregationLogDetails;\n\n vm.affinityHierarchies= _(affinityHierarchies).map(function(o){\n return {\n affinityDepartment: o.department,\n affinityCategory: o.category,\n display: o.category ? o.department + \"/\" + o.category : o.department\n }\n }).value();\n\n vm.gaUtil = GaUtil;\n\n vm.isHierarchyNullOrEmpty = function (hierarchy, isFocus) {\n if (isFocus) {\n return hierarchy.focusDepartment == null || _.trim(hierarchy.focusDepartment) === '';\n }\n else return hierarchy.affinityDepartment == null || _.trim(hierarchy.affinityDepartment) === '';\n };\n\n vm.clean = function(hierarchies, isFocus) {\n _.remove(hierarchies, function(hierarchy) {\n return vm.isHierarchyNullOrEmpty(hierarchy, isFocus);\n });\n };\n\n vm.clean(vm.focusHierarchies, true);\n vm.clean(vm.affinityHierarchies, false);\n\n var ANY_DEPARTMENT = translateFilter('reports.brand.anydepartment');\n vm.focusHierarchies.unshift({ display : ANY_DEPARTMENT });\n vm.affinityHierarchies.unshift({ display : ANY_DEPARTMENT });\n\n vm.findInHierarchies = function(hierarchies, isFocus, department, category) {\n if (isFocus)\n return _.find(hierarchies, function(hierarchy) {return (hierarchy.focusDepartment === department && (hierarchy.focusCategory === category || (!category && hierarchy.focusCategory === '')))});\n else\n return _.find(hierarchies, function(hierarchy) {return (hierarchy.affinityDepartment === department && (hierarchy.affinityCategory === category || (!category && hierarchy.affinityCategory ==='')))});\n };\n\n vm.selectedFocusHierarchy = ($stateParams.focusDepartment == null ? vm.focusHierarchies[0] : vm.findInHierarchies(vm.focusHierarchies, true, $stateParams.focusDepartment, $stateParams.focusCategory)) || vm.focusHierarchies[0];\n vm.selectedAffinityHierarchy = ($stateParams.affinityDepartment == null ? vm.affinityHierarchies[0] : vm.findInHierarchies(vm.affinityHierarchies, false, $stateParams.affinityDepartment, $stateParams.affinityCategory)) || vm.affinityHierarchies[0];\n vm.selectedTimeFrame = $stateParams.timeFrame;\n vm.seriesFields = ['itemPercent', 'salesPercent'];\n vm.selectedSeries = vm.seriesFields[0];\n\n vm.activityRegionFilters = filters;\n\n var selectedTransaction = vm.activityRegionFilters && vm.activityRegionFilters.getSelected();\n var selectedRegion = selectedTransaction && selectedTransaction.getSelectedRegion();\n\n vm.selectActivityAndReload = function(activity){\n selectedTransaction = activity;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Activity Filter', activity.label);\n vm.reload(false, false);\n };\n\n vm.selectRegionAndReload = function (region) {\n selectedRegion = region;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Region Filter', region.labelDescription);\n vm.reload(false, false);\n };\n\n vm.isAnyDepartment = function (hierarchy) {\n return hierarchy.display === ANY_DEPARTMENT;\n };\n\n vm.getChartHeight = function () {\n var reportLength = (vm.report && vm.report.page) ? vm.report.page.length : vm.unfilteredData.length;\n return {'height': reportLength * 40 +'px'} ;\n };\n\n vm.lengthData = function () {\n return {brandsLength: (vm.unfilteredData.length > PageSize) ? PageSize : vm.unfilteredData.length};\n };\n\n function setBrandData(dataObject, other) {\n $timeout(function() {\n vm.report = _.defaultsDeep({ data : dataObject }, other, vm.report, {\n brandKey : reportData && reportData.brandKey,\n filteredText : vm.filteredText,\n currentPage : 1,\n pageSize : vm.pageSize,\n fn : {\n label : _.property('brandName'),\n value : _.property(vm.seriesFields[0]),\n color : ['#7C0A40'],\n valueLabel : function (item, index) {\n var value = vm.report.fn.value[0].apply(this, arguments);\n return (value * 100).toFixed(1) + '%';\n },\n filter : function (brand) {\n return brand.brandName.toLowerCase().indexOf(vm.report.filteredText.toLowerCase()) !== -1;\n },\n brandDataRange : function (item) {\n var maxPercentByCount = _.maxBy(item,'itemPercent').itemPercent;\n var maxPercentBySales = _.maxBy(item,'salesPercent').salesPercent;\n return Math.ceil(Math.max(maxPercentByCount,maxPercentBySales)*10)/10;\n }\n }\n });\n });\n };\n\n function setPriceData(other) {\n $timeout(function() {\n vm.pricePoint = _.defaultsDeep({ data :vm.pricePointData }, other, vm.pricePoint, {\n brandKey : reportData && reportData.brandKey,\n dontRank : true,\n fn : {\n label : function(item){\n var label;\n if(item.priceLow == -1) label = \"$0 - $\" + item.priceHigh;\n else if(item.priceHigh == -1) label = \"$\" + item.priceLow + \"+\";\n else label = \"$\"+item.priceLow + \" - $\" + item.priceHigh;\n return label;\n },\n value : _.property('quantity'),\n color : ['#7C0A40'],\n valueLabel : function (item, index) {\n var value = vm.pricePoint.fn.value.apply(this, arguments);\n return (value * 100).toFixed(1) + '%';\n }\n }\n });\n });\n };\n\n $scope.$watch('vm.report.data.length', function(length){\n vm.filteredCount = length;\n });\n\n vm.applyPagination = function(currentPage){\n setBrandData(vm.unfilteredData, {currentPage : currentPage});\n };\n\n setBrandData(vm.unfilteredData);\n setPriceData();\n\n vm.setFilteredText = function () {\n vm.currentPage = 1;\n setBrandData(vm.unfilteredData,{currentPage : vm.currentPage,filteredText : vm.filteredText});\n };\n\n vm.setValueSeries = function () {\n vm.currentPage = 1;\n setBrandData(vm.unfilteredData,{ currentPage : vm.currentPage, fn : { value : _.property(vm.selectedSeries) } })\n };\n\n vm.selectedBrandReload = function(selectedBrand){\n vm.selectedBrand = selectedBrand;\n vm.reload(true, true);\n };\n\n vm.reload = function(resetBrand , resetHierarchies) {\n CookieJar.set({name : 'tfc-insight-selected-brand',value : encodeURIComponent(_.toString(vm.selectedBrand.key))});\n\n if(!resetBrand && !resetHierarchies) {\n $state.go('.', { brandKey : vm.selectedBrand.key, timeFrame : vm.selectedTimeFrame,\n focusDepartment: vm.selectedFocusHierarchy.focusDepartment, focusCategory: vm.selectedFocusHierarchy.focusCategory,\n affinityDepartment: vm.selectedAffinityHierarchy.affinityDepartment,\n affinityCategory: vm.selectedAffinityHierarchy.affinityCategory, transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel() }\n );\n }else if (!resetBrand && resetHierarchies) {\n $state.go('.', { brandKey : vm.selectedBrand.key, timeFrame : vm.selectedTimeFrame,\n focusDepartment: vm.selectedFocusHierarchy.focusDepartment, focusCategory: vm.selectedFocusHierarchy.focusCategory,\n affinityDepartment: null, affinityCategory: null , transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel() }\n );\n }\n else {\n $state.go('.', { brandKey : vm.selectedBrand.key, timeFrame : null, focusDepartment: null, focusCategory: null, affinityDepartment: null, affinityCategory: null, transaction: null, region: null });\n }\n };\n\n vm.translateText = function(text){\n return translateFilter('reports.brand.' + text)\n };\n\n vm.getFilterSummaryText = function () {\n var pageName = 'brandAffinity';\n var params = {\n 'quantity': vm.itemCount.quantity,\n 'name': vm.selectedBrand.name,\n 'activity': vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity() ? selectedTransaction && selectedTransaction.getLabel() : '',\n 'region': selectedTransaction && selectedTransaction.hasMultipleRegion() ? selectedRegion && selectedRegion.labelDescription : '',\n 'timeFrame': vm.translateText(vm.selectedTimeFrame)\n };\n return Filter.getFilterSummaryText(pageName, params);\n };\n\n vm.downloadReport = function(type){\n BrandAffinityReport.downloadReport(type, vm.selectedBrand.key, vm.selectedTimeFrame,\n vm.selectedFocusHierarchy.focusDepartment, vm.selectedFocusHierarchy.focusCategory,\n vm.selectedAffinityHierarchy.affinityDepartment, vm.selectedAffinityHierarchy.affinityCategory,\n selectedRegion && selectedRegion.getLabel(),\n selectedTransaction && selectedTransaction.getLabel(),\n vm.selectedSeries, vm.activityRegionFilters.hasMultipleActivity(),\n selectedTransaction && selectedTransaction.hasMultipleRegion());\n };\n\n function getHierarchy(department, category) {\n var hierarchy = _.join([department, category], \"/\");\n return hierarchy === '/' ? ANY_DEPARTMENT : hierarchy;\n }\n\n function doReload(selectedHierarchy, isFocusHierarchy) {\n var currStateHierarchy = isFocusHierarchy ?\n getHierarchy($stateParams.focusDepartment, $stateParams.focusCategory) :\n getHierarchy($stateParams.affinityDepartment, $stateParams.affinityCategory);\n\n return selectedHierarchy.display !== currStateHierarchy;\n }\n\n vm.onFocusHierarchyChange = function () {\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Category Filter', vm.selectedFocusHierarchy.display);\n if(doReload(vm.selectedFocusHierarchy, true)) {\n vm.reload(false, true);\n }\n };\n\n vm.onAffinityHierarchyChange = function () {\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Affinity Category Filter', vm.selectedAffinityHierarchy.display);\n if(doReload(vm.selectedAffinityHierarchy, false)) {\n vm.reload(false, false);\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Brand')\n .factory('BrandAffinityReport', BrandAffinityReport);\n\n // @ngInject\n function BrandAffinityReport($q, util, Upload, ExcelReportType, GaUtil, Api){\n\n return {\n downloadReport : downloadReport\n };\n\n function generateURL(type) {\n var BASE_URL = '/brand/report/affinity';\n return BASE_URL + '/' + type;\n }\n\n function content(type, selectedBrandKey, selectedTimeFrame, selectedFocusDepartment, selectedFocusCategory,\n selectedAffinityDepartment, selectedAffinityCategory,region,transaction,fields,\n isActivityExist, isRegionExist) {\n return Api.get(generateURL(type + 'Report'), {\n cache : false,\n // remove all empty values\n params: _.pickBy({\n brandKey: selectedBrandKey,\n timeFrame: selectedTimeFrame,\n focusDepartment: selectedFocusDepartment,\n focusCategory: selectedFocusCategory,\n affinityDepartment: selectedAffinityDepartment,\n affinityCategory: selectedAffinityCategory,\n region: region,\n transaction: transaction,\n fields:fields,\n addTransactionHeader: isActivityExist,\n addRegionHeader: isRegionExist\n },_.identity),\n responseType : 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], { type : disposition['content-type'] })\n });\n });\n }\n\n function downloadReport(type, selectedBrandKey, selectedTimeFrame, selectedFocusDepartment, selectedFocusCategory,\n selectedAffinityDepartment, selectedAffinityCategory,region,transaction,fields,\n isActivityExist, isRegionExist) {\n return $q.when(content(type, selectedBrandKey, selectedTimeFrame, selectedFocusDepartment, selectedFocusCategory,\n selectedAffinityDepartment, selectedAffinityCategory,region,transaction,fields,isActivityExist, isRegionExist))\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Brand Affinity Report');\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Brand')\n .controller('BrandReportsCtrl', BrandReportsCtrl);\n\n // @ngInject\n function BrandReportsCtrl(BrandReportKeys) {\n var vm = this;\n vm.BrandReportKeys = BrandReportKeys;\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Brand')\n .factory('BrandReports', BrandReports);\n\n // @ngInject\n function BrandReports($q, $location, CookieJar, GaUtil, Api, Auth, BRAND_URL) {\n\n return {\n selectedBrandKey : selectedBrandKey,\n findBrandNames : findBrandNames,\n findUserBrandNames : findUserBrandNames,\n findFocusHierarchies : findFocusHierarchies,\n findAffinityHierarchies : findAffinityHierarchies,\n findConsistencyHierarchies: findConsistencyHierarchies,\n getBrandAffinity : getBrandAffinity,\n getPricePointData : getPricePointData,\n getPurchaseBrandItemCount : getPurchaseBrandItemCount,\n findConsistencySizeAdvices : findConsistencySizeAdvices,\n getReturnsPerformanceSummary : getReturnsPerformanceSummary,\n getReturnsPerformance : getReturnsPerformance,\n getReturnsPerformanceInsufficientDataStylesCount : getReturnsPerformanceInsufficientDataStylesCount,\n getConsistencyInsufficientDataStylesCount:getConsistencyInsufficientDataStylesCount,\n getReturnsPerformanceFilters: getReturnsPerformanceFilters,\n getReturnsPerformanceBySizeSummary :getReturnsPerformanceBySizeSummary,\n getReturnsPerformanceBySizeHierarchies : getReturnsPerformanceBySizeHierarchies,\n filterBrandCategories: filterBrandCategories,\n getBrandAffinityFilters:getBrandAffinityFilters,\n sendGAEventOnEnter:sendGAEventOnEnter,\n getConsistencyFilters : getConsistencyFilters,\n getDashboardAggregationLogDetails: getDashboardAggregationLogDetails,\n getConsumerSamplingSummary: getConsumerSamplingSummary,\n getConsumerSamplingGenderDetails: getConsumerSamplingGenderDetails,\n getConsumerSamplingAgeRangeDetails:getConsumerSamplingAgeRangeDetails\n };\n\n function selectedBrandKey(brandKey) {\n //TODO CookieJar should decode and encode for get & set cookie values respectively\n var promise, selectedBrandFromCookie = decodeURIComponent(CookieJar.get('tfc-insight-selected-brand'));\n promise = findUserBrandNames().then(function (brands) {\n var selectedBrand = brandKey || selectedBrandFromCookie;\n if((_.isArray(brands) && brands.length) && !_.find(brands, ['key', selectedBrand])){\n selectedBrand = _.minBy(brands, 'name').key;\n $location.search('brandKey', selectedBrand);\n } else if(_.isArray(brands) && brands.length===0){\n return $q.reject(\"Site.Error.LackPrivilege\");\n }\n CookieJar.set({name : 'tfc-insight-selected-brand',value : encodeURIComponent(_.toString(selectedBrand))});\n return $q.when(selectedBrand);\n });\n return promise;\n }\n\n function findBrandNames() {\n return Api.get('/brand/names', { cache : true })\n .then(_.property('data'));\n }\n\n function findUserBrandNames() {\n return Api.get('/brand/userbrands', { cache : true })\n .then(_.property('data'));\n }\n\n function findFocusHierarchies(brandKey, transaction) {\n return Api.get('/brand/report/affinity/hierarchies/focus', {\n params : { brandKey : brandKey, transaction: transaction }\n }).then(_.property('data'));\n }\n\n function findAffinityHierarchies(brandKey, focusDepartment, focusCategory, transaction) {\n return Api.get('/brand/report/affinity/hierarchies/affinity', {\n params : { brandKey : brandKey, department : focusDepartment, category: focusCategory, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function findConsistencyHierarchies(brandKey, region, transaction) {\n return Api.get('/brand/report/consistency/hierarchies', {\n cache : true,\n params : { brandKey : brandKey, region: region, transaction: transaction }\n }).then(_.property('data'));\n }\n\n function findConsistencySizeAdvices(brandKey, department, category, region, transaction) {\n if(department && category){\n return Api.get('/brand/report/consistency/sizeAdvice', {\n cache : true,\n params : { brandKey : brandKey ,department : department, category: category, region: region, transaction: transaction }\n }).then(_.property('data'));\n }\n }\n\n function getConsistencyInsufficientDataStylesCount(brandKey, department, category, region, transaction) {\n return Api.get('/brand/report/consistency/insufficientDataStylesCount', {\n cache : true,\n params : { brandKey : brandKey ,department : department, category: category, region: region, transaction: transaction }\n }).then(_.property('data'));\n }\n\n function getConsistencyFilters(brandKey) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/consistency/filters', {cache : true}).then(_.property('data'));\n }\n\n function getBrandAffinity(brandKey, timeFrame, focusDepartment, focusCategory, affinityDepartment, affinityCategory, region, transaction, limit) {\n return Api.get('/brand/report/affinity/sales', {\n params : { brandKey : brandKey, timeFrame : timeFrame, focusDepartment : focusDepartment, focusCategory: focusCategory,\n affinityDepartment : affinityDepartment, affinityCategory: affinityCategory, region: region, transaction: transaction, limit : limit}\n }).then(_.property('data'));\n }\n\n function getPricePointData(brandKey, timeFrame, focusDepartment, focusCategory, affinityDepartment, affinityCategory, region, transaction) {\n return Api.get('/brand/report/affinity/price', {\n params : { brandKey : brandKey, timeFrame : timeFrame, focusDepartment : focusDepartment, focusCategory: focusCategory,\n affinityDepartment : affinityDepartment, affinityCategory: affinityCategory, region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function getPurchaseBrandItemCount(brandKey, timeFrame, focusDepartment, focusCategory, affinityDepartment, affinityCategory, region, transaction) {\n return Api.get('/brand/report/affinity/itemCount', {\n params : { brandKey : brandKey, timeFrame : timeFrame, focusDepartment : focusDepartment, focusCategory: focusCategory,\n affinityDepartment : affinityDepartment, affinityCategory: affinityCategory, region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function getReturnsPerformanceSummary(brandKey, transaction, region){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/returns/summary', {\n cache : true,\n params: { transaction : transaction, region : region}\n }).then(_.property('data'));\n }\n\n function getReturnsPerformance(brandKey, department, category, transaction, region){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/returns', {\n cache : true,\n params : { department : department, category: category, transaction : transaction, region : region }\n }).then(_.property('data'));\n }\n\n function getReturnsPerformanceFilters(brandKey) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/returns/filters', {cache : true}).then(_.property('data'));\n }\n\n function getReturnsPerformanceInsufficientDataStylesCount(brandKey, department, category, region, transaction) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/insufficientDataStylesCount', {\n params : { department : department, category: category, region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function getReturnsPerformanceBySizeSummary(brandKey, department, category, localeCode, sizeType) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/returnsBySize/summary', {\n params : { department : department, category: category,localeCode: localeCode,sizeType: sizeType }\n }).then(_.property('data'));\n }\n\n function getReturnsPerformanceBySizeHierarchies(brandKey){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/performance/returnsBySize/hierarchies').then(_.property('data'));\n }\n\n function filterBrandCategories(hierarchyObj) {\n return hierarchyObj.department !== \"Baby\" && hierarchyObj.department !== \"Girls\" && hierarchyObj.department !== \"Boys\" && hierarchyObj.department !== \"UnisexKids\" && hierarchyObj.category;\n }\n\n function getBrandAffinityFilters(brandKey) {\n return Api.get('/brand/report/affinity/filters',{ params: { brandKey : brandKey } } ).then(_.property('data'));\n }\n\n function sendGAEventOnEnter(selectedBrandKey, eventAction, eventLabel){\n GaUtil.sendGaEvent(selectedBrandKey, eventAction, eventLabel);\n }\n\n // TODO: Deprecated Method, replace calls with ActivityRegionFactor methods\n function getRegionFilter(filters, selectedActivity){\n var regions = [];\n if(_.find(filters,'transaction')){\n regions = _(filters).filter({transaction: selectedActivity && selectedActivity.transaction}).map('region').flatten().value();\n } else {\n regions = (filters.length && filters[0].region) ? _(filters[0].region).value() : [];\n }\n if(regions.length > 2){\n return regions;\n } else {\n return [];\n }\n }\n\n function getAggregationLogDetails() {\n var user = Auth.getUser();\n if(user && _.includes(user.privileges, 'viewAggregationLog')){\n return Api.get('/log/aggregations/latest', {cache : true}).then(_.property('data'));\n }\n }\n\n function getDashboardAggregationLogDetails(report) {\n // making a promise so as to consider the else case if user don't have privilege\n return $q.when(getAggregationLogDetails()).then(function(data){\n return _.find(data, {report: report});\n });\n }\n\n function getConsumerSamplingSummary(brandKey){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) +'/consumer/sampling/summary').then(_.property('data'));\n }\n\n function getConsumerSamplingGenderDetails(brandKey) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) +'/consumer/sampling/gender').then(_.property('data'));\n }\n\n function getConsumerSamplingAgeRangeDetails(brandKey) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) +'/consumer/sampling/ageRange').then(_.property('data'));\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Consumer')\n .controller('ConsumerProfileCtrl', ConsumerProfileCtrl);\n\n // @ngInject\n function ConsumerProfileCtrl($state, ageData, genderData, heightData, weightData, userBrands, ConsumerProfileReport,\n CookieJar, filters, $stateParams, Enums, GaUtil, aggregationLogDetails,\n inseamData, bustSizeData, footLengthData, Filter) {\n var vm = this;\n\n vm.brands = userBrands;\n vm.selectedBrand = _.find(vm.brands, {key: $state.params.brandKey });\n vm.rawAgeData = _.sortBy(ageData.age, 'range');\n vm.rawGenderData = genderData;\n vm.rawHeightData = _.sortBy(heightData.height, function(height){return toNumericValue(height.range) });\n vm.rawWeightData = _.sortBy(weightData.weight, function(weight){return toNumericValue(weight.range) });\n vm.rawInseamData = _.sortBy(inseamData.inseam, function(inseam){return toNumericValue(inseam.range) });\n vm.rawBustSizeData = _.sortBy(bustSizeData.bustSize, function(bustSize){return toNumericValue(bustSize.range) });\n vm.rawFootLengthData = _.sortBy(footLengthData.footLength, function(footLength){return toNumericValue(footLength.range) });\n vm.aggregationDetails = aggregationLogDetails;\n\n function toNumericValue(label) {\n var labelSplit = label.split(\" \");\n var head = (labelSplit.length > 1) ? _.head(labelSplit) : (label === \"Unspecified\")? Number.POSITIVE_INFINITY: parseFloat(label.substring(0, label.indexOf('-')));\n var tail = (labelSplit.length > 1) ? _.toInteger(_.last(labelSplit)): (label === \"Unspecified\")? Number.POSITIVE_INFINITY : parseFloat(label.substring(0, label.indexOf('-')));\n if(head === \"<\") return tail - 1.0;\n else if(head === \">\") return tail + 1.0;\n else return tail\n }\n\n vm.color = \"#7C0A40\";\n vm.weightUnit = ['kg', 'lb'];\n vm.lengthUnit = ['cm', 'in'];\n vm.selectedWeightUnit = angular.copy(vm.weightUnit[1]);\n vm.selectedHeightUnit = angular.copy(vm.lengthUnit[1]);\n vm.selectedInseamUnit = angular.copy(vm.lengthUnit[1]);\n vm.selectedBustSizeUnit = angular.copy(vm.lengthUnit[1]);\n vm.selectedFootLengthUnit = angular.copy(vm.lengthUnit[1]);\n\n vm.options = {\n horizontal : true,\n horizontalLabelSize : 40,\n verticalLabelSize : 15,\n barSpacing : .5,\n popupLabels: false,\n hideBarLabels : true,\n dashedLabelBoxes : true,\n hideTotalLabels : false\n };\n\n vm.genders = getGenderArr();\n\n function getGenderArr() {\n var genderArr = [];\n if (vm.rawGenderData.menPercent) {\n genderArr.push({\n name: 'Male',\n value: vm.rawGenderData.menPercent,\n display: 'Male - ' + toPercentLabel('of consumers', vm.rawGenderData.menPercent)\n });\n }\n if (vm.rawGenderData.womenPercent) {\n genderArr.push({\n name: 'Female',\n value: vm.rawGenderData.womenPercent,\n display: 'Female - ' + toPercentLabel('of consumers', vm.rawGenderData.womenPercent)\n });\n }\n return genderArr;\n }\n\n vm.selectedGender = _.find(vm.genders, {name: (!$stateParams.gender) ? 'Female' : $stateParams.gender});\n\n vm.activityRegionFilters = filters;\n\n var selectedTransaction = vm.activityRegionFilters && vm.activityRegionFilters.getSelected();\n var selectedRegion = selectedTransaction && selectedTransaction.getSelectedRegion();\n\n vm.selectActivityAndReload = function(activity){\n selectedTransaction = activity;\n GaUtil.sendGaEvent(vm.selectedBrand.key, 'Activity Filter', activity.label);\n vm.reload(false, true, true);\n };\n\n vm.selectRegionAndReload = function (region) {\n selectedRegion = region;\n GaUtil.sendGaEvent(vm.selectedBrand.key, 'Region Filter', region.labelDescription);\n vm.reload(false, false, true);\n };\n\n vm.setHeight = function () {\n var filteredData = _.filter(vm.rawHeightData, function(d) {\n return d.unit === vm.selectedHeightUnit;\n });\n setData('heightData', filteredData);\n };\n\n vm.setWeight = function () {\n var filteredData = _.filter(vm.rawWeightData, function(d) {\n return d.unit === vm.selectedWeightUnit;\n });\n setData('weightData', filteredData);\n };\n\n vm.setInseam = function () {\n var filteredData = _.filter(vm.rawInseamData, function(d) {\n return d.unit === vm.selectedInseamUnit;\n });\n setData('inseamData', filteredData);\n };\n\n vm.setFootLength = function () {\n var filteredData = _.filter(vm.rawFootLengthData, function(d) {\n return d.unit === vm.selectedFootLengthUnit;\n });\n setData('footLengthData', filteredData);\n };\n\n vm.setBustSize = function () {\n var filteredData = _.filter(vm.rawBustSizeData, function(d) {\n return d.unit === vm.selectedBustSizeUnit;\n });\n setData('bustSizeData', filteredData);\n };\n\n vm.setAll = function () {\n setData('ageData', vm.rawAgeData);\n vm.setHeight();\n vm.setWeight();\n vm.setBustSize();\n vm.setFootLength();\n vm.setInseam();\n };\n\n vm.selectedBrandReload = function(selectedBrand){\n vm.selectedBrand = selectedBrand;\n vm.reload(true, true, true);\n }\n\n vm.reload = function(resetActivity, resetRegion, resetGender) {\n CookieJar.set({ name: 'tfc-insight-selected-brand', value : _.toString(vm.selectedBrand.key)});\n\n var gender = (!resetGender) ? vm.selectedGender && vm.selectedGender.name: null;\n if(resetActivity && resetRegion && resetGender){ // on brand reload\n $state.go('.', { brandKey : vm.selectedBrand.key }, {inherit: false}, { reload : 'consumerReports' });\n }else {\n $state.go('.', {\n brandKey : vm.selectedBrand.key,\n gender: gender,\n transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel()\n }, { reload : 'consumerReports.ConsumerProfile' });\n }\n };\n\n function toPercentLabel(label, value) {\n return value.toFixed(1) + '%\\n ' + label;\n }\n\n vm.downloadReport = function(type){\n ConsumerProfileReport.downloadReport(type, vm.selectedBrand.key, vm.selectedGender && vm.selectedGender.name,\n vm.selectedHeightUnit, vm.selectedWeightUnit, vm.selectedInseamUnit, vm.selectedFootLengthUnit,\n vm.selectedBustSizeUnit, vm.activityRegionFilters.getSelected() &&\n selectedRegion && selectedRegion.getLabel(),\n selectedTransaction && selectedTransaction.getLabel(),\n vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity(),\n selectedTransaction && selectedTransaction.hasMultipleRegion());\n };\n\n function setData(source, rawData, other) {\n var percentFn = _.property('percent');\n\n var valueFn, colorFn, genderSlice;\n\n if(vm.selectedGender && vm.selectedGender.name){\n valueFn = percentFn;\n colorFn = vm.color;\n genderSlice = vm.selectedGender.name;\n }\n\n vm[source] = _.defaultsDeep(other, vm[source], {\n dontRank : true,\n fn : {\n label : _.property('range'),\n stackLabel : genderSlice\n }\n });\n\n //dont update in defaultsDeep\n vm[source].fn.value = valueFn;\n vm[source].fn.color = colorFn;\n vm[source].fn.valueLabel = valueFn;\n vm[source].data = rawData;\n vm[source].pageSize = rawData.length;\n }\n\n vm.setAll();\n\n vm.getFilterSummaryText = function(){\n var pageName = 'consumer';\n var params = {\n 'gender': vm.selectedGender && vm.selectedGender.name,\n 'name': vm.selectedBrand.name,\n 'activity': vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity() ? selectedTransaction && selectedTransaction.getLabel() : '',\n 'region': selectedTransaction && selectedTransaction.hasMultipleRegion() ? selectedRegion && selectedRegion.labelDescription : ''\n };\n return Filter.getFilterSummaryText(pageName, params);\n }\n\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Consumer')\n .factory('ConsumerProfileReport', ConsumerProfileReport);\n\n // @ngInject\n function ConsumerProfileReport($q, util, Upload, ExcelReportType, GaUtil, Api){\n\n return {\n downloadReport : downloadReport\n };\n\n function getFileContent(type, selectedBrandKey, selectedGender, selectedHeightUnit, selectedWeightUnit, selectedInseamUnit, selectedFootLengthUnit, selectedBustSizeUnit, region, transaction, isActivityExist, isRegionExist) {\n return $q.when(content(type, selectedBrandKey, selectedGender, selectedHeightUnit, selectedWeightUnit, selectedInseamUnit, selectedFootLengthUnit, selectedBustSizeUnit, region, transaction, isActivityExist, isRegionExist))\n .then(function (content) {\n return content;\n });\n }\n\n function generateURL(type) {\n return '/consumer/' + type;\n }\n\n function content(type, selectedBrandKey, selectedGender, selectedHeightUnit, selectedWeightUnit, selectedInseamUnit, selectedFootLengthUnit, selectedBustSizeUnit, region, transaction, isActivityExist, isRegionExist) {\n\n var ageUnitValue = 'years';\n\n return Api.get(generateURL(type + 'Report'), {\n cache : false,\n params: {\n brandKey: selectedBrandKey,\n gender: selectedGender,\n ageUnit: ageUnitValue,\n weightUnit: selectedWeightUnit,\n heightUnit: selectedHeightUnit,\n inseamUnit: selectedInseamUnit,\n footLengthUnit: selectedFootLengthUnit,\n bustSizeUnit: selectedBustSizeUnit,\n region: region,\n transaction: transaction,\n isActivityExist: isActivityExist,\n isRegionExist: isRegionExist\n },\n responseType : 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], { type : disposition['content-type'] })\n });\n });\n }\n\n function downloadReport(type, selectedBrandKey, selectedGender, selectedHeightUnit, selectedWeightUnit, selectedInseamUnit, selectedFootLengthUnit, selectedBustSizeUnit, region, transaction, isActivityExist, isRegionExist) {\n return getFileContent(type, selectedBrandKey, selectedGender, selectedHeightUnit, selectedWeightUnit, selectedInseamUnit, selectedFootLengthUnit, selectedBustSizeUnit, region, transaction, isActivityExist, isRegionExist)\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Demographic & Body Shape Report');\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Consumer')\n .controller('ConsumerReportsCtrl', ConsumerReportsCtrl);\n\n // @ngInject\n function ConsumerReportsCtrl(ConsumerReportKeys) {\n var vm = this;\n vm.ConsumerReportKeys = ConsumerReportKeys;\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Consumer')\n .factory('ConsumerReports', ConsumerReports);\n\n // @ngInject\n function ConsumerReports(Api, BRAND_URL) {\n var BASE_URL = '/consumer';\n\n return {\n getAgeAggregations : getAggregationsFn(\"/age\"),\n getGenderAggregations : getGenderAggregations,\n getWeightAggregations : getAggregationsFn(\"/weight\"),\n getHeightAggregations : getAggregationsFn(\"/height\"),\n getInseamAggregations : getAggregationsFn(\"/inseam\"),\n getFootLengthAggregations : getAggregationsFn(\"/footLength\"),\n getBustSizeAggregations : getAggregationsFn(\"/bustSize\"),\n getConsumerProfileFilters: getConsumerProfileFilters,\n findBrandNames : findBrandNames\n };\n\n function getAggregationsFn(path) {\n return function (brandKey, gender, region, transaction) {\n return Api.get(BASE_URL + path, {\n params: {brandKey: brandKey, gender: gender, region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n }\n\n function getGenderAggregations(brandKey, region, transaction) {\n return Api.get(BASE_URL + '/gender', { params: { brandKey: brandKey, region: region,\n transaction: transaction }}).then(_.property('data'))\n }\n\n function getConsumerProfileFilters(brandKey) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/consumer/filters',{ cache: true } ).then(_.property('data'));\n }\n\n function findBrandNames() {\n return Api.get(BASE_URL + '/brands', { cache : true })\n .then(_.property('data'));\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ConsumerSampling')\n .directive('tfcAgeRangeChart', tfcAgeRangeChart)\n .controller('tfcAgeRangeChartCtrl',tfcAgeRangeChartCtrl);\n\n function tfcAgeRangeChart(){\n return {\n restrict: 'E',\n templateUrl : 'ConsumerSampling/AgeRangeChart.tmpl.html',\n scope: {\n samplingAgeRangeObj: '='\n },\n controller : 'tfcAgeRangeChartCtrl as vm',\n bindToController : true\n }\n }\n\n // @ngInject\n function tfcAgeRangeChartCtrl(ChartService, SplitRange){\n var vm = this;\n\n var options = {\n horizontal : false,\n hideBarLabels : true,\n dashedLabelBoxes : false,\n isDashedLabelBoxesExist: false,\n labelSize: 80,\n showFirstLastLabels: true\n };\n\n function constructSamplingChart(data){\n var samplingChart = {};\n if(data.length){\n samplingChart = ChartService.getBarChartWithLabel(_.sortBy(data, 'label'));\n if(!vm.samplingAgeRange || !vm.samplingAgeRange.viewChartDetails){\n samplingChart.data = _.dropRight(samplingChart.data);\n samplingChart.data[0].label = _.head(samplingChart.data).label.split(SplitRange.regex)[0];\n samplingChart.data[samplingChart.data.length-1].label = _.last(samplingChart.data).label.split(SplitRange.regex)[1];\n }\n }\n return samplingChart;\n }\n\n function getSamplingAgeRangeObj(sampleObj, options){\n return {\n samplingChart: constructSamplingChart(sampleObj.samplingPercent),\n viewChartDetails: false,\n options: _.cloneDeep(options)\n }\n }\n\n vm.samplingAgeRange = getSamplingAgeRangeObj(vm.samplingAgeRangeObj, options);\n\n vm.toggleChartSummaryView = function () {\n vm.samplingAgeRange.viewChartDetails = !vm.samplingAgeRange.viewChartDetails;\n vm.samplingAgeRange.samplingChart = constructSamplingChart(vm.samplingAgeRangeObj.samplingPercent);\n vm.samplingAgeRange.options = _.assign(options, {horizontal: vm.samplingAgeRange.viewChartDetails,\n showFirstLastLabels: !vm.samplingAgeRange.viewChartDetails});\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ConsumerSampling')\n .controller('ConsumerSamplingCtrl', ConsumerSamplingCtrl)\n .constant('SamplingSegmentMap', {\n 'One and Done': {title: 'NON SAMPLERS', imgSrc: 'images/consumer-sampling/non-sample.svg'},\n 'Style Samplers': {title: 'STYLE ONLY SAMPLERS', imgSrc: 'images/consumer-sampling/style-sample.svg'},\n 'Omni Samplers': {title: 'SIZE & STYLE SAMPLERS', imgSrc: 'images/consumer-sampling/size-style-sample.svg'},\n 'Size Samplers': {title: 'SIZE ONLY SAMPLERS', imgSrc: 'images/consumer-sampling/size-sample.svg'}\n });\n\n // @ngInject\n function ConsumerSamplingCtrl($state, CookieJar, selectedBrandKey, userBrands, samplingSummary,\n samplingGender, samplingAgeRange, ConsumerSamplingReport, aggregationLogDetails) {\n var vm = this;\n\n vm.brands = _.isArray(userBrands) ? userBrands : [];\n vm.selectedBrand = _.find(vm.brands, {key: selectedBrandKey });\n vm.aggregationDetails = aggregationLogDetails;\n vm.samplingSummary = samplingSummary;\n vm.samplingAgeRangeArr = samplingAgeRange;\n vm.samplingGender = samplingGender;\n\n vm.getLabel = function(value){\n return _.isNumber(value) ? (value * 100).toFixed(1) : \"\";\n };\n\n vm.appliedSamplingClass = function (sampling) {\n if(sampling.showBenchmark){\n return 'text-right display-flex';\n } else {\n if(!sampling.showBenchmark && !sampling.isBrandConsumerDetailsAvailable){\n return 'text-center display-flex';\n } else return '';\n }\n }\n\n vm.selectedBrandReload = function(selectedBrand){\n vm.selectedBrand = selectedBrand;\n vm.reload(true);\n };\n\n vm.reload = function(resetBrand){\n CookieJar.set({ name: 'tfc-insight-selected-brand', value : _.toString(vm.selectedBrand.key)});\n if(resetBrand){\n $state.go('.',{ brandKey : vm.selectedBrand.key });\n }\n };\n\n vm.downloadReport = function(){\n ConsumerSamplingReport.downloadReport(vm.selectedBrand.key);\n };\n\n vm.isBrandSampling = function(){\n return vm.samplingSummary.length && _.some(samplingSummary,'isBrandConsumerDetailsAvailable');\n };\n\n vm.getSamplingSegmentDetails = function (samplingData, segment) {\n return _.find(samplingData, function (data) {return data.samplingSegment === segment});\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ConsumerSampling')\n .factory('ConsumerSamplingReport', ConsumerSamplingReport);\n\n // @ngInject\n function ConsumerSamplingReport($q, util, Upload, ExcelReportType, GaUtil, Api, BRAND_URL){\n\n return {\n downloadReport : downloadReport\n };\n\n function generateURL(brandKey) {\n var BASE_URL = BRAND_URL + encodeURIComponent(brandKey) + '/consumer/sampling/report';\n return BASE_URL;\n }\n\n function content(selectedBrandKey) {\n return Api.get(generateURL(selectedBrandKey), {\n cache : false,\n responseType : 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], { type : disposition['content-type'] })\n });\n });\n }\n\n function downloadReport(selectedBrandKey) {\n return $q.when(content(selectedBrandKey)).then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Consumer Sampling Report');\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ConsumerSampling')\n .factory('consumerSampling', consumerSampling);\n\n // @ngInject\n function consumerSampling(ChartService, SamplingSegmentMap){\n\n return consumerSampling;\n\n function setSampling(summaryDetails){\n if(_.isArray(summaryDetails)){\n var isBrandSampling = _.some(summaryDetails,\n function(s) { return s.brandConsumerSamplingDetail && s.brandConsumerSamplingDetail.brandKey; });\n return _(summaryDetails).map(function(samplingObj){\n var samplingSegment = (samplingObj.brandConsumerSamplingDetail) ? SamplingSegmentMap[samplingObj.brandConsumerSamplingDetail.samplingSegment] : SamplingSegmentMap[samplingObj.universalConsumerSamplingDetail.samplingSegment];\n return _.assign(samplingObj, {\n 'samplingSegment': samplingSegment.title,\n 'imgSrc': samplingSegment.imgSrc,\n 'showBenchmark': false,\n 'isBrandConsumerDetailsAvailable': isBrandSampling,\n 'showBenchmarkLabel': samplingObj.hasOwnProperty('universalConsumerSamplingDetail')\n });\n }).sortBy(function (o) {\n return o.samplingSegment.length;\n }).value();\n }\n }\n\n function consumerSampling(fillFunc) {\n return fillFunc().then(function(summaryDetails){\n return setSampling(summaryDetails);\n });\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Files')\n .controller('FileTreeCtrl', FileTreeCtrl);\n\n // @ngInject\n function FileTreeCtrl($rootScope, $interpolate, $state, $scope, retailers, Reports, tlaTree) {\n var vm = this;\n vm.retailers = _.keyBy(retailers, 'tla');\n vm.params = _.cloneDeep($state.params);\n\n function getTreeStructure(dataObject) {\n var tree = [];\n dataObject.name = vm.retailers[dataObject.tla].name;\n tree.push(dataObject);\n tree = _.toArray(\n _.mapValues(tree, function(retailerGroup) {\n if(retailerGroup.tla == vm.params.tla) {\n vm.toggleOpen(retailerGroup);\n if(vm.params.year) {\n retailerGroup.years = _.map(retailerGroup.years, function (yearGroup) {\n if(yearGroup.year == vm.params.year) {\n yearGroup.isSelected = true;\n }\n return yearGroup;\n });\n }\n }\n return retailerGroup;\n })\n );\n return tree;\n }\n\n vm.toggleOpen = function (group) {\n group.isSelected = !group.isSelected;\n if(group.years && group.years.length == 1) {\n vm.toggleOpen(group.years[0]);\n }\n };\n\n vm.goTo = function (tla, year, category) {\n $state.go('files', {tla: tla, year: year, category: category});\n };\n\n vm.goToUpload = function (file, tla, year, category) {\n $state.go('upload', {tla: tla, year: year, category: category}).then(function () {\n var $off = $scope.$on('uploadFormLoaded', function () {\n $off();\n $rootScope.$broadcast('dragndropfile', file);\n });\n });\n };\n\n vm.open = function (isDragging, group) {\n group.isSelected = true;\n };\n\n vm.activeRetailerList = function(){\n $rootScope.fileStructure = retailers.filter(function(store) {\n return store.status !== \"X\";\n });\n };\n\n vm.getActiveRetailerList = function(){\n if(tlaTree){\n $rootScope.fileStructure = getTreeStructure(tlaTree);\n }else{\n vm.activeRetailerList();\n }\n }\n\n vm.getActiveRetailerList();\n }\n\n\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Files')\n .controller('FilesCtrl', FilesCtrl);\n\n // @ngInject\n function FilesCtrl($filter,\n reports,\n reportsCount,\n retailers,\n ReportUtil,\n $uibModal,\n Reports,\n Toast,\n Auth,\n PageSize,\n $interpolate,\n $stateParams,\n $translate) {\n var vm = this;\n var editingReport = null;\n var reportTitleFilter = $filter('reportTitle'),\n translateFilter = $filter('translate');\n retailers = _.keyBy(retailers, 'tla');\n vm.fileType = ReportUtil.fileType;\n vm.openReport = ReportUtil.openReport;\n vm.reports = getSortedReports(reports);\n vm.params = _.cloneDeep($stateParams);\n vm.reportCount = reportsCount.count;\n vm.currentPage = 1;\n vm.pageSize = PageSize;\n vm.maxSize = 7;\n\n vm.treeStructure = getTreeStructure();\n\n if (vm.params.tla) {\n vm.retailerFilter = (retailers[vm.params.tla] && retailers[vm.params.tla].name) || '';\n vm.reports = vm.treeStructure[vm.params.tla] || [];\n if (vm.params.year) {\n vm.yearFilter = vm.params.year;\n vm.reports = vm.reports[vm.params.year];\n if (vm.params.category) {\n vm.categoryFilter = $translate.instant('report.category.' + vm.params.category);\n vm.reports = vm.reports[vm.params.category]\n } else { // there's no category, stopping and flattening\n vm.reports = _.flatten(_.values(vm.reports));\n }\n } else { // there's no year, stopping and flattening\n vm.reports = _.mapValues(vm.reports, function (yearGroup) {\n var yearGroupArrays = _.values(yearGroup);\n return _.flatten(yearGroupArrays);\n });\n vm.reports = _.flatten(_.values(vm.reports));\n }\n }\n\n vm.canAudit = function () {\n return Auth.can('retailerAuditor');\n };\n\n vm.editReport = function (report) {\n if (vm.isEditing(report)) {\n editingReport = null;\n } else {\n editingReport = report;\n }\n if (vm.canAudit() && !report.audit) {\n Reports.audit(report.fileKey).then(function (audit) {\n report.audit = audit;\n });\n }\n };\n\n vm.isEditing = function (report) {\n return report === editingReport;\n };\n\n vm.toggleActive = function (report) {\n Reports.update({ fileKey : report.fileKey, isActive : !report.isActive, sendEmail: report.sendEmail }).then(function (updated) {\n report.sendEmail = false;\n _.extend(report, updated);\n Toast.success(\n report.isActive ? 'files.mgmt.activated' : 'files.mgmt.deactivated',\n { data : { report : report } }\n );\n });\n };\n\n vm.deleteReport = function (report) {\n var modal = $uibModal.open({\n templateUrl : 'Files/ConfirmDelete.tmpl.html',\n controller : function ($scope) {\n $scope.report = report;\n }\n });\n\n modal.result.then(function () {\n Reports.delete(report.fileKey).then(function () {\n var index = vm.reports.indexOf(report);\n if (~index) {\n vm.reports.splice(index, 1);\n }\n Toast.success('files.mgmt.deleted', { data : { report : report }});\n });\n });\n };\n\n vm.pageChange = function(currentPage){\n vm.currentPage = currentPage;\n Reports.find($stateParams.tla, $stateParams.category, $stateParams.year, vm.pageSize, vm.currentPage, vm.search).then(function (response) {\n vm.reports = [];\n vm.reports = getSortedReports(response);\n callUploadFiles(response);\n });\n };\n\n function callUploadFiles(reports){\n _.each(reports, function (report) {\n // attach other fields so they can be searched\n report.retailerName = retailers[report.tla] && retailers[report.tla].name; // condition for in case retailer doesn't exist for tla\n report.title = reportTitleFilter(report);\n report.fileType = translateFilter('report.fileType.' + ReportUtil.fileType(report));\n });\n }\n\n function getTreeStructure() {\n // retailer->reports Map\n var retailerGroups = _.groupBy(vm.reports, 'tla');\n // return retailer->years, year->categories, category->reports map\n return _.mapValues(retailerGroups, function (retailerGroup) {\n //take each retailer->reports Map and make it into a retailer->years, year->reports Map\n var retailerYearGroups = _.groupBy(retailerGroup, function (report) {\n var getYear = $interpolate(\"{{ created | date: 'yyyy' }}\");\n return getYear(report);\n });\n //take each year->reports Map and make it into a year->categories, category->reports Map\n return _.mapValues(retailerYearGroups, function (yearGroup) {\n return _.groupBy(yearGroup, 'key.category');\n });\n });\n }\n\n function getSortedReports(reports) {\n return ReportUtil.sort(reports,'lastUpdated', 'desc');\n }\n\n vm.searchTextChange = function () {\n Reports.reportCount($stateParams.tla, $stateParams.category, $stateParams.year, vm.pageSize, vm.currentPage,vm.search).then(function (response) {\n if (response.count> 0) {\n vm.pageChange(1);\n } else {\n vm.reports = [];\n }\n vm.reportCount = response.count;\n });\n };\n\n callUploadFiles(reports);\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Files')\n .factory('Month', Month);\n\n // @ngInject\n function Month() {\n\n var MONTHS = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec'\n ];\n\n return {\n getMonth : getMonth,\n toInt : toInt\n };\n\n function getMonth(date) {\n if (date instanceof Date) {\n return getMonth(date.getMonth() + 1);\n } else {\n return MONTHS[date - 1];\n }\n }\n\n function toInt(month) {\n var index = MONTHS.indexOf(month);\n if (~index) {\n return index + 1;\n }\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Files')\n .controller('UploadFormCtrl', UploadFormCtrl)\n .directive('tfcUploadForm', tfcUploadForm);\n\n // @ngInject\n function UploadFormCtrl($rootScope,\n $scope,\n Retailer,\n Toast,\n ReportCategories,\n ProgressModal,\n Reports,\n ReportUtil,\n Upload,\n $stateParams,\n $state,\n ApiErrorHandler) {\n var vm = this;\n\n\n vm.report = { isActive : true, sendEmail : true };\n vm.contentUrl = null;\n vm.categories = ReportCategories;\n vm.isPreviewable = ReportUtil.isPreviewable;\n vm.validContentTypes = function () {\n return ReportUtil.validContentTypes().join(',');\n };\n vm.params = _.cloneDeep($stateParams);\n\n if (vm.params.tla) {\n vm.report.tla = vm.params.tla;\n if (vm.params.category) {\n vm.report.category = vm.params.category;\n }\n }\n\n vm.onChange = function (invalidFiles) {\n if (invalidFiles.length) {\n Toast.warn('files.publish.invalid');\n }\n var file = vm.report.file;\n // So isPreviewable works.\n vm.report.contentType = file && file.type;\n if (file) {\n // There's a race condition when using ngf-src=\"vm.report.file\".\n // If the tag is made visible before Upload creates the dataUrl,\n // it doesn't appear on some computers. Doing it this way fixes that.\n Upload.dataUrl(file).then(function (url) {\n vm.contentUrl = url;\n });\n } else {\n vm.contentUrl = null;\n }\n };\n\n $scope.$on('dragndropfile', function (event, file) {\n if (!_.includes(vm.validContentTypes(), file.type)) {\n $state.go('files', vm.params);\n Toast.warn('files.publish.invalid');\n } else {\n vm.report.file = file;\n console.log(file);\n vm.report.name = file.name;\n vm.onChange([]);//pass an empty array because I already checked for invalid files\n }\n });\n $rootScope.$broadcast('uploadFormLoaded');\n\n Retailer.find().then(function (stores) {\n // filter out the stores that are defunct\n vm.stores = stores.filter(function(store) {\n return ['L','SL','M','O'].includes(store.status)\n });\n });\n\n vm.onCategoryChange = function () {\n updateDatepickerOptions();\n vm.report = _.pick(vm.report, [\n 'fileKey',\n 'tla',\n 'category',\n 'file',\n 'isActive'\n ]);\n };\n\n function updateDatepickerOptions() {\n vm.datepickerOptions = {\n week : {\n label : 'files.publish.date',\n format : 'yyyy-MM-dd',\n minMode : 'day'\n },\n month : {\n label : 'files.publish.month',\n format : 'yyyy-MM',\n minMode : 'month'\n },\n quarter : {\n label : 'files.publish.year',\n format : 'yyyy',\n minMode : 'year'\n }\n }[vm.report.category];\n }\n\n vm.showDatepicker = function (category) {\n return category && category !== 'other';\n };\n\n vm.updateSendEmail = function () {\n vm.report.sendEmail = vm.report.isActive;\n };\n\n vm.submit = function () {\n var promise = Reports.upload(vm.report);\n ProgressModal.showModal(promise, {\n translationKey : 'files.publish.uploading'\n }).then(function () {\n Toast.success('files.publish.success');\n vm.onUpload();\n }, function (response) {\n if (response.status === 409) {\n Toast.error('files.publish.duplicate', { state : true });\n } else {\n ApiErrorHandler.toastError(response);\n }\n });\n };\n\n vm.getStoreName = function (tla) {\n return _.get(_.find(vm.stores, { tla : tla }), 'name');\n };\n }\n\n // @ngInject\n function tfcUploadForm() {\n return {\n bindToController : true,\n controller : 'UploadFormCtrl as vm',\n templateUrl : 'Files/UploadForm.tmpl.html',\n scope : {\n onUpload : '&'\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.FitConsistency')\n .controller('FitConsistencyCtrl', FitConsistencyCtrl);\n\n // @ngInject\n function FitConsistencyCtrl($state, $stateParams, PageSize, hierarchies, brands, translateFilter, CookieJar,\n styleData, $scope, FitConsistencyReport, GaUtil, ChartService,\n filters, aggregationLogDetails) {\n var vm = this;\n vm.brands = brands;\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n vm.pageSize = PageSize;\n vm.totalCount = styleData ? styleData.totalCount : 0;\n vm.filteredCount = vm.totalCount;\n vm.maxSize = 7;\n vm.offsets = [];\n\n vm.gaUtil = GaUtil;\n vm.filteredText = \"\";\n vm.animationsEnabled = true;\n vm.isProductDetailAccessible = $state.can('productDetail');\n vm.aggregationDetails = aggregationLogDetails;\n\n function initSortConfig() {\n if($stateParams.hierarchy === ALL_CATEGORIES){\n vm.selectedSortField = 'categoryName';\n }else{\n vm.selectedSortField = $stateParams.sortBy === 'categoryName' ? 'styleTitle' : $stateParams.sortBy;\n }\n vm.selectedSortOrder = $stateParams.sortOrder || 'asc';\n }\n\n function setSortConfig(columnName, order) {\n vm.selectedSortField = columnName;\n vm.selectedSortOrder = order;\n }\n\n function initializeState(){\n vm.currentPage = $stateParams.pageNumber || 1;\n initSortConfig();\n vm.sortByColumn();\n }\n\n vm.hierarchies= _(hierarchies).map(function(o){\n return {\n department: o.department,\n category: o.category,\n display: o.category ? o.department + \"/\" + o.category : o.department\n }\n }).value();\n\n vm.translateText = function (text) {\n return translateFilter('reports.returns.' + text)\n };\n\n var ALL_CATEGORIES = vm.translateText('allCategories');\n\n vm.hierarchies.unshift({ display : ALL_CATEGORIES });\n\n if(!$stateParams.hierarchy || $stateParams.hierarchy === ALL_CATEGORIES) {\n vm.selectedHierarchy = vm.hierarchies[0];\n vm.currentPage = 1;\n } else {\n vm.selectedHierarchy = _.find(vm.hierarchies, {department: $stateParams.department, category: $stateParams.category});\n vm.currentPage = 1;\n if(!vm.selectedHierarchy){\n vm.selectedHierarchy = vm.hierarchies[0];\n }\n }\n\n vm.unfilteredData = _(styleData && styleData.items).map(function(data){\n return {\n supplierStyle : data.supplierStyle,\n styleTitle : data.styleTitle,\n sizeAdvice: data.sizeAdvice\n }\n }).value();\n\n vm.unfilteredCategoryData = _(hierarchies).map(function(data) {\n return {\n styleTitle : data.category ? data.department + \"/\" + data.category : data.department,\n sizeAdvice : data.sizeAdvice\n }\n }).value();\n\n vm.activityRegionFilters = filters;\n\n var selectedTransaction = vm.activityRegionFilters && vm.activityRegionFilters.getSelected();\n var selectedRegion = selectedTransaction && selectedTransaction.getSelectedRegion();\n\n vm.selectActivityAndReload = function(activity){\n selectedTransaction = activity;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Activity Filter', activity.label);\n vm.reload(false);\n };\n\n vm.selectRegionAndReload = function (region) {\n selectedRegion = region;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Region Filter', region.labelDescription);\n vm.reload(false);\n };\n\n vm.selectedBrandReload = function(selectedBrand){\n vm.selectedBrand = selectedBrand;\n vm.reload(true);\n };\n\n vm.reload = function(resetBrand) {\n CookieJar.set({name : 'tfc-insight-selected-brand',value : encodeURIComponent(_.toString(vm.selectedBrand.key))});\n\n if(!resetBrand) {\n $state.go('.', { brandKey : vm.selectedBrand.key, hierarchy: vm.selectedHierarchy.display,\n department: vm.selectedHierarchy.department, category: vm.selectedHierarchy.category,\n transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel(),\n pageNumber: vm.currentPage} );\n } else {\n $state.go('.', { brandKey : vm.selectedBrand.key},{inherit: false});\n }\n };\n\n vm.downloadFctReport = function () {\n var hierarchy = vm.selectedHierarchy;\n FitConsistencyReport.downloadReport(hierarchy && hierarchy.display, vm.selectedBrand && vm.selectedBrand.key,\n hierarchy && hierarchy.department, hierarchy && hierarchy.category,\n selectedRegion && selectedRegion.getLabel(),\n selectedTransaction && selectedTransaction.getLabel(),\n vm.selectedSortField, vm.selectedSortOrder,\n vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity(),\n selectedTransaction && selectedTransaction.hasMultipleRegion());\n };\n\n function getUnfilteredData(){\n return (vm.selectedHierarchy && vm.selectedHierarchy.display === ALL_CATEGORIES) ? vm.unfilteredCategoryData: vm.unfilteredData;\n }\n\n function getFilteredData(data){\n return _.filter(data, function(row) {\n if((row.supplierStyle && row.supplierStyle.toLowerCase().indexOf(vm.filteredText.toLowerCase()) !== -1) ||\n (row.styleTitle && row.styleTitle.toLowerCase().indexOf(vm.filteredText.toLowerCase()) !== -1)) return row;\n });\n }\n\n vm.setFitChart = function(dataObject, other){\n var unFilterDataArray = [];\n if(dataObject && dataObject.length) {\n unFilterDataArray = dataObject;\n } else {\n unFilterDataArray = getUnfilteredData();\n }\n vm.offsets = [];\n var finalDataArray = other.isFiltered ? getFilteredData(unFilterDataArray) : unFilterDataArray;\n vm.filteredCount = finalDataArray.length;\n vm.chartVarianceData = _(finalDataArray.slice((other.currentPage - 1) * vm.pageSize, other.currentPage * vm.pageSize)).map(function (data) {\n return {\n supplierStyle : data.supplierStyle,\n styleTitle : data.styleTitle,\n sizeAdviceChart : ChartService.getSizeAdviceChart([{sizeAdvice: data.sizeAdvice}])\n }\n }).value();\n };\n \n vm.setFilteredText = function (filteredText) {\n vm.currentPage = 1;\n vm.filteredText = filteredText;\n vm.isFiltered = true;\n vm.sortByColumn();\n };\n\n vm.applyPagination = function(currentPage){\n vm.currentPage = currentPage;\n vm.sortByColumn();\n };\n\n function updateUrl(){\n var paramsObj = {\n pageNumber: vm.currentPage,\n sortBy: vm.selectedSortField,\n sortOrder: vm.selectedSortOrder\n };\n $state.go('.', paramsObj, {notify: false});\n }\n\n vm.sortByColumn = function (columnName) {\n setSortConfig(columnName || vm.selectedSortField, vm.selectedSortOrder);\n updateUrl();\n\n var selectedData = getUnfilteredData();\n var unfilteredData = _.orderBy(selectedData,function(style){\n switch(vm.selectedSortField) {\n case 'supplierStyle' :\n return _.lowerCase(style.supplierStyle);\n case 'styleTitle' :\n case 'categoryName':\n return _.lowerCase(style.styleTitle);\n case 'trueToSize' :\n return Math.abs(style.sizeAdvice);\n case 'runsLarge' :\n return -1 * style.sizeAdvice;\n case 'runsSmall' :\n return style.sizeAdvice;\n }\n }, vm.selectedSortOrder);\n vm.setFitChart(unfilteredData, {currentPage: vm.currentPage, isFiltered: vm.isFiltered});\n };\n\n vm.onColumnSelection = function(columnName) {\n vm.currentPage = 1; //reset to first page\n //toggle the sort order if same column is selected again\n if(columnName === vm.selectedSortField) {\n vm.selectedSortOrder = vm.selectedSortOrder === 'asc' ? 'desc' : 'asc';\n } else {\n vm.selectedSortOrder = 'asc';\n }\n vm.sortByColumn(columnName);\n };\n\n vm.isUnsorted = function(columnName) {\n return vm.selectedSortField !== columnName;\n };\n\n vm.getSortClass = function(columnName){\n var sort = 'fa fa-sort';\n if(vm.selectedSortField === columnName) {\n return sort+'-'+vm.selectedSortOrder;\n }else {\n return sort;\n }\n };\n\n vm.navigatePage = function(styleId){\n if(vm.isProductDetailAccessible && styleId) {\n var params = _.merge($stateParams, {\n styleId: styleId,\n regionDescription: selectedRegion && selectedRegion.labelDescription,\n previousState: $state.current && $state.current.data && $state.current.data.title,\n sortBy: vm.selectedSortField,\n sortOrder: vm.selectedSortOrder\n });\n $state.go('productDetail', params);\n }\n };\n\n initializeState();\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.FitConsistency')\n .factory('FitConsistencyReport', FitConsistencyReport);\n\n // @ngInject\n function FitConsistencyReport($q, util, Upload, ExcelReportType, GaUtil, Api) {\n\n return {\n downloadReport: downloadReport\n };\n\n function getFileContent(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedRegion,\n selectedTransaction, sortField, sortOrder, isActivityExist, isRegionExist) {\n return $q.when(content(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedRegion,\n selectedTransaction, sortField, sortOrder, isActivityExist, isRegionExist))\n .then(function (content) {\n return content;\n });\n }\n\n function generateURL(hierarchy) {\n var BASE_URL = '/brand/report/consistency/';\n var path = hierarchy === 'All Categories' ? 'hierarchies' : 'sizeAdvice';\n return BASE_URL + path;\n }\n\n function content(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedRegion,\n selectedTransaction, sortField, sortOrder, isActivityExist, isRegionExist) {\n\n return Api.get(generateURL(selectedHierarchy), {\n cache: false,\n params: {\n brandKey: selectedBrandKey,\n department: selectedDepartment,\n category: selectedCategory,\n region: selectedRegion,\n transaction: selectedTransaction,\n sortField: sortField,\n sortOrder: sortOrder,\n addTransactionHeader: isActivityExist,\n addRegionHeader: isRegionExist\n },\n responseType: 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], {type: disposition['content-type']})\n });\n });\n }\n\n function downloadReport(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedLocaleCode,\n selectedTransaction, sortField, sortOrder, isActivityExist, isRegionExist) {\n return getFileContent(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedLocaleCode,\n selectedTransaction, sortField, sortOrder, isActivityExist, isRegionExist)\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Fit Consistency Report');\n });\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer')\n .controller('AnalyticsCtrl', AnalyticsCtrl);\n\n // @ngInject\n function AnalyticsCtrl($state, experiments, stores, orderByFilter, Auth) {\n var vm = this;\n\n vm.userTlas = Auth.getUser().storeTlas;\n vm.tla = $state.params.tla;\n vm.experiments = experiments;\n // There will be no stores if the user doesn't have permission to change retailers\n if (stores) {\n // Sort them here so we can force the first option\n stores = orderByFilter(stores, 'name');\n // The first option is 'None'\n stores.unshift({ tla : null, name : 'dashboard.retailer.none' });\n }\n vm.stores = stores;\n\n vm.assumeRole = function () {\n $state.go('.', { tla : vm.tla });\n };\n\n vm.goToAnalytics = function (experiment) {\n var params = { tla : experiment.tla };\n if (experiment.key) {\n params.experiment = experiment.key;\n }\n $state.go('results', params);\n };\n\n vm.canSeeReports = function () {\n return vm.userTlas.length || Auth.can('retailerChangeTla');\n };\n\n vm.getUserTlas = function () {\n var tlas = vm.userTlas;\n if (vm.tla && Auth.can('retailerChangeTla')) {\n tlas = _.uniq(tlas.concat(vm.tla));\n }\n return tlas;\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .factory('AnalyticsApi', AnalyticsApi);\n\n // @ngInject\n function AnalyticsApi($translate, Api) {\n\n return {\n getIntervals : getIntervals,\n getAllMetricData : getAllMetricData\n };\n\n function getIntervals() {\n return Api.get('/analytics/interval', { cache : true });\n }\n\n function getAllMetricData(tla, params) {\n return Api.get('/analytics/results/' + encodeURIComponent(tla), { params : params })\n .then(function (resultSet) {\n angular.forEach(resultSet, addMetricNames);\n return resultSet;\n });\n }\n\n function addMetricNames(metricData) {\n // add names here so d3 can use them (it doesn't have access to $translate\n addNames([metricData], 'metric');\n addNames(metricData.variations, 'variation', metricData);\n addNames(metricData.series, 'series', metricData);\n\n return metricData;\n }\n\n function addNames(objects, key, values) {\n _.each(objects, function (obj) {\n obj.name = $translate.instant(['analytics', key, obj[key]].join('.'), values);\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .factory('AnalyticsConfig', AnalyticsConfig);\n\n // @ngInject\n function AnalyticsConfig() {\n var MET_SESSIONS = 'sessions',\n MET_CHECKOUTS = 'checkouts',\n MET_CONVERSION_RATE = 'conversionRate',\n\n MET_REVENUE = 'revenue',\n MET_USERS = 'users',\n MET_REVENUE_PER_VISIT = 'revenuePerVisit',\n\n MET_RETURNS = 'returnUnits',\n MET_ORDERS = 'orderUnits',\n MET_RETURN_RATE = 'returnRate';\n\n var TAB_CONVERSION = 'conversion',\n TAB_REVENUE = 'revenue',\n TAB_RETURNS = 'returns',\n TAB_OVERVIEW = 'overview';\n\n return {\n getTabs : getTabs,\n summaryMetrics : summaryMetrics,\n chartMetrics : chartMetrics,\n viewType : viewType\n };\n\n function defaultOrder(tab) {\n switch (tab) {\n case TAB_CONVERSION: return [MET_SESSIONS, MET_CHECKOUTS, MET_CONVERSION_RATE];\n case TAB_REVENUE: return [MET_REVENUE, MET_USERS, MET_REVENUE_PER_VISIT];\n case TAB_RETURNS: return [MET_ORDERS, MET_RETURNS, MET_RETURN_RATE];\n case TAB_OVERVIEW: return [MET_CONVERSION_RATE, MET_REVENUE_PER_VISIT, MET_RETURN_RATE];\n }\n }\n\n function getTabs(experimentType) {\n if (experimentType) {\n return [TAB_OVERVIEW, TAB_CONVERSION, TAB_REVENUE, TAB_RETURNS];\n } else {\n return [TAB_CONVERSION];\n }\n }\n\n function summaryMetrics(experimentType) {\n if (experimentType) {\n return {\n conversion : defaultOrder(TAB_CONVERSION),\n revenue : defaultOrder(TAB_REVENUE),\n returns : defaultOrder(TAB_RETURNS),\n overview : defaultOrder(TAB_OVERVIEW)\n };\n } else {\n return {\n // no conversion summary on live view\n conversion : [MET_SESSIONS, MET_CHECKOUTS]\n };\n }\n }\n\n function chartMetrics(experimentType) {\n if (experimentType) {\n return {\n conversion : kpiToTop(defaultOrder(TAB_CONVERSION)),\n revenue : kpiToTop(defaultOrder(TAB_REVENUE)),\n returns : kpiToTop(defaultOrder(TAB_RETURNS)),\n overview : defaultOrder(TAB_OVERVIEW)\n };\n } else {\n return {\n conversion : defaultOrder(TAB_CONVERSION)\n };\n }\n }\n\n function viewType(experimentType) {\n return experimentType ? 'experiment' : 'live';\n }\n\n function kpiToTop(metrics) {\n var kpi = metrics.pop();\n metrics.unshift(kpi);\n return metrics;\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .controller('AnalyticsViewCtrl', AnalyticsViewCtrl)\n .directive('tfcAnalyticsView', tfcAnalyticsView);\n\n // @ngInject\n function AnalyticsViewCtrl($scope, AnalyticsConfig, AnalyticsApi) {\n var vm = this,\n experimentType = vm.experiment && vm.experiment.experimentType,\n experimentKey = vm.experiment && vm.experiment.key;\n\n vm.tabs = AnalyticsConfig.getTabs(experimentType);\n vm.tab = vm.tabs[0];\n vm.summaryMetrics = AnalyticsConfig.summaryMetrics(experimentType);\n vm.chartMetrics = AnalyticsConfig.chartMetrics(experimentType);\n // map of Metric -> MetricResults\n // will be null until the first metric loads\n vm.metrics = null;\n\n var allMetrics = Object.keys(angular.merge(\n concatMetrics(vm.summaryMetrics),\n concatMetrics(vm.chartMetrics)\n ));\n loadMetrics(allMetrics);\n\n function loadMetrics(metrics, params) {\n return AnalyticsApi.getAllMetricData(vm.tla, angular.merge({}, params, {\n metric : metrics,\n experiment : experimentKey\n })).then(function (resultSet) {\n vm.metrics = angular.extend(vm.metrics || {}, resultSet);\n });\n }\n\n vm.metricData = function (metric) {\n return vm.metrics && vm.metrics[metric];\n };\n\n vm.lastUpdated = function () {\n return _.max(_.map(vm.metrics, 'lastUpdated'));\n };\n\n vm.refresh = function () {\n $scope.$broadcast('chart.reload');\n };\n\n vm.loadMetric = function (metric, params) {\n return loadMetrics(metric, params);\n };\n\n // Map[String, Set[Metric]] => Set[Metric]\n function concatMetrics(metricMap) {\n var all = {};\n angular.forEach(metricMap, function (metrics) {\n angular.forEach(metrics, function (m) {\n all[m] = m;\n });\n });\n return all;\n }\n }\n\n // @ngInject\n function tfcAnalyticsView() {\n return {\n controller : 'AnalyticsViewCtrl as vm',\n bindToController : true,\n templateUrl: 'Analytics/AnalyticsView.tmpl.html',\n scope : {\n tla : '@',\n experiment : '=',\n intervals : '='\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .factory('ExperimentApi', ExperimentApi);\n\n // @ngInject\n function ExperimentApi(Api) {\n\n return {\n find : find,\n get : get\n };\n\n function find(tla) {\n if (tla == undefined) {\n return Api.get('/experiment');\n } else {\n return Api.get('/experiment/' + encodeURIComponent(tla));\n }\n }\n\n function get(tla, experimentKey) {\n return Api.get('/experiment/' + encodeURIComponent(tla) + '/' + encodeURIComponent(experimentKey));\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .controller('ExperimentDesignCtrl', ExperimentDesignCtrl)\n .directive('tfcExperimentDesign', tfcExperimentDesign);\n\n // @ngInject\n function ExperimentDesignCtrl() {\n var vm = this;\n\n vm.completeness = function () {\n var variations = _.get(vm, 'metrics.sessions.variations'),\n totalSessions = _.sum(variations, function (variation) {\n return variation.summary;\n });\n var completeness = totalSessions / vm.experiment.targetSessions;\n return Math.min(1, completeness);\n };\n }\n\n // @ngInject\n function tfcExperimentDesign() {\n return {\n restrict : 'E',\n controller : 'ExperimentDesignCtrl as vm',\n bindToController : true,\n templateUrl : 'Analytics/ExperimentDesign.tmpl.html',\n scope : {\n experiment : '=',\n metrics : '='\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .controller('MetricChartCtrl', MetricChartCtrl)\n .directive('tfcMetricChart', tfcMetricChart);\n\n // @ngInject\n function MetricChartCtrl($stateParams, dateFilter, AnalyticsConfig, MetricConfig) {\n var vm = this;\n vm.options = null;\n vm.params = null;\n vm.dateError = null;\n vm.dateFormat = 'yyyy-MM-dd';\n vm.loading = false;\n vm.viewType = AnalyticsConfig.viewType($stateParams.experiment);\n vm.initMetric = initMetric;\n\n vm.intervalMap = _.reduce(vm.intervals, function (map, interval) {\n map[interval.interval] = interval;\n return map;\n }, {});\n\n var analyticsVm;\n\n vm.init = function (_analyticsVm) {\n analyticsVm = _analyticsVm;\n };\n\n vm.loadingOverlay = function (promise) {\n vm.loading = true;\n promise.finally(function () {\n vm.loading = false;\n });\n };\n\n vm.reload = function (force) {\n // close the date pickers when loading\n vm.startOpen = vm.endOpen = false;\n\n vm.dateError = null;\n // vm.params starts out null\n var isValid = vm.params == null || vm.isCurrentRangeValid();\n if (isValid === true) {\n // avoid re-fetching the same data\n if (force || !angular.equals(vm.params, initParams(vm.metric))) {\n vm.loadingOverlay(\n analyticsVm.loadMetric(vm.metricName, queryParams(vm.params))\n );\n }\n } else if (isValid !== false) {\n // isValid is the error type\n vm.dateError = 'error.dateRange.' + isValid;\n }\n };\n\n function queryParams(params) {\n params = _.extend({}, $stateParams, params);\n params.start = dateToStr(params.start);\n params.end = dateToStr(params.end);\n return params;\n }\n\n vm.isCurrentRangeValid = function () {\n return vm.isRangeValid(vm.params.interval, vm.params.start, vm.params.end);\n };\n\n vm.isRangeValid = function (interval, start, end) {\n if (!_.isDate(start) || isNaN(start.getTime()) ||\n !_.isDate(end) || isNaN(end.getTime())) {\n // either start or end is invalid\n return false;\n }\n // todo: test across DST boundaries\n // get 23:59 of the end date because analytics does the same thing\n end = new Date(end);\n end.setDate(end.getDate() + 1);\n end.setMinutes(end.getMinutes() - 1);\n var maxRange = vm.intervalMap[interval].maxRangeMs;\n var range = end - start;\n if (range < 0) {\n return 'negative';\n }\n if (range > maxRange) {\n return 'tooBig';\n }\n return true;\n };\n\n function fixDate(timestamp) {\n var date = new Date(timestamp);\n if (date.getMinutes()) {\n // adjust for timezone so the dates' times are always 00:00:00\n date.setMinutes(date.getMinutes() + date.getTimezoneOffset());\n }\n return date;\n }\n\n function dateToStr(date) {\n return dateFilter(date, vm.dateFormat);\n }\n\n function initMetric(metric) {\n vm.options = MetricConfig.getChartOptions(metric);\n vm.metric = metric;\n vm.params = initParams(metric);\n }\n\n function initParams(metric) {\n return {\n interval : metric.interval.interval,\n start : fixDate(metric.startDate),\n end : fixDate(metric.endDate)\n };\n }\n }\n\n // @ngInject\n function tfcMetricChart() {\n return {\n require : ['tfcMetricChart', '^^tfcAnalyticsView'],\n controller : 'MetricChartCtrl as vm',\n bindToController : true,\n templateUrl : 'Analytics/MetricChart.tmpl.html',\n scope : {\n metricName : '@',\n hideControls : '&',\n intervals : '='\n },\n link : function ($scope, $el, $attrs, ctrls) {\n var vm = ctrls[0],\n analyticsVm = ctrls[1];\n vm.init(analyticsVm);\n // fired by the AnalyticsCtrl\n $scope.$on('chart.reload', function () {\n vm.reload(true);\n });\n $scope.$watch(function () {\n return analyticsVm.metricData(vm.metricName);\n }, function (data) {\n if (data) {\n vm.initMetric(data);\n }\n });\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .factory('MetricConfig', MetricConfig);\n\n // @ngInject\n function MetricConfig($translate, percentFilter, numberFilter) {\n\n var defaultXFormat = d3.time.format.multi([\n ['%-I:%M %p', function (d) { return d.getMinutes(); }],\n ['%a, %-I %p', function (d) { return d.getHours(); }],\n ['%b %d', function () { return true; }]\n ]);\n\n return {\n getChartOptions : getChartOptions\n };\n\n function getChartOptions(metric) {\n switch (metric.metric) {\n case 'sessions':\n case 'checkouts':\n case 'revenue':\n case 'users':\n case 'revenuePerVisit':\n case 'returnUnits':\n case 'orderUnits':\n case 'returnRate':\n return setupLineChart(metric);\n break;\n case 'conversionRate':\n return setupDeltaSigmaChart(metric);\n break;\n default:\n throw new Error('Unsupported metric type: ' + metric.metric);\n }\n }\n\n function dateTimeFormat(time) {\n return new Date(time).toLocaleString();\n }\n\n function domainTipText(d) {\n return [$translate.instant('analytics.series.domain'), dateTimeFormat(this.fn.x(d))];\n }\n\n function percentFormat(y) {\n return percentFilter(y, 2);\n }\n\n function currencyFormatter(unit) {\n return function (y) {\n return $translate.instant('currency.' + unit, { value : y });\n };\n }\n\n function setupLineChart(metricData) {\n var series = metricData.series,\n seriesLen = series.length,\n yDomain, yFormat, unit;\n if (seriesLen !== 1) {\n throw new Error('Unexpected number of series: ' + seriesLen);\n }\n series[0].tipText = function (d) {\n var y = this.fn.y(d);\n return yFormat ? yFormat(y) : y;\n };\n\n unit = series[0].unit;\n if (unit === 'percent') {\n yFormat = percentFormat;\n // force the y-axis to be centered around 0\n yDomain = 'centered';\n } else {\n if (unit) {\n yFormat = currencyFormatter(unit);\n }\n // force the y-axis to start at 0\n yDomain = { min : 0 };\n }\n\n return {\n chartOptions : {\n yDomain : yDomain,\n domainTipText : domainTipText,\n yFormat : yFormat,\n xFormat : defaultXFormat\n }\n };\n }\n\n function setupDeltaSigmaChart(metricData) {\n\n metricData.series[0].tipText = function (d) {\n var plot = this;\n return percentFormat(plot.fn.y(d)) + ' ± ' + percentFormat(plot.fn.sigma(d));\n };\n\n return {\n chart : 'DeltaSigma',\n chartOptions : {\n domainTipText : domainTipText,\n yFormat : percentFormat,\n xFormat : defaultXFormat,\n yDomain : 'centered',\n fn : {\n // todo: this will eventually be a property of the experiment\n // the confidence threshold factor\n confidence : function (d) { return 1.96; }\n }\n }\n };\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .directive('tfcMetricSummary', tfcMetricSummary);\n\n // @ngInject\n function tfcMetricSummary() {\n return {\n controller : function ($filter, $translate, $stateParams, AnalyticsConfig) {\n var vm = this;\n var percentFilter = $filter('percent'),\n numberFilter = $filter('number');\n vm.metrics = {};\n vm.viewType = AnalyticsConfig.viewType($stateParams.experiment);\n\n vm.updateVariations = function () {\n // get the lists of variations from each metric chart\n var variationSets = _.map(vm.chartMetrics, function (metric) {\n return _.map(metric.variations, 'variation');\n });\n\n // validate they're all in the same order\n var first = _.head(variationSets);\n _.each(_.tail(variationSets), function (varSet) {\n if (!_.isEqual(first, varSet)) {\n throw new Error('Metrics returned variations in a different order');\n }\n });\n // array of VariationType strings\n vm.variations = first;\n\n // Only add the incoming chart metrics to our list of metrics the first time.\n // This prevents the summary table from updating when the user changes the range / interval\n _.each(vm.chartMetrics, function (metric, name) {\n if (!vm.metrics[name]) {\n vm.metrics[name] = metric;\n }\n });\n };\n\n vm.variationSign = function (variation) {\n // delta variations should always have a sign\n return variation.variation === 'delta'\n && variation.summary > 0\n ? '+' : '';\n };\n\n vm.variation = function (metric, variation) {\n return _.find(_.get(vm.metrics[metric], 'variations'), { variation : variation });\n };\n\n vm.summary = function (metric, variationType) {\n var variation = vm.variation(metric, variationType),\n summaryText = vm.variationSign(variation);\n\n var unit = variation.unit;\n if (unit === 'percent') {\n summaryText += percentFilter(variation.summary);\n } else if (unit) {\n summaryText += $translate.instant('currency.' + unit, { value : variation.summary });\n } else {\n summaryText += numberFilter(variation.summary);\n }\n\n if (variation.sigma != null) {\n // todo: 1.6 is duplicated in metric chart, and should not be hard-coded\n summaryText += ' ± ' + percentFilter(variation.sigma * 1.96);\n }\n\n return summaryText;\n };\n },\n controllerAs : 'vm',\n bindToController : true,\n templateUrl : 'Analytics/MetricSummary.tmpl.html',\n scope : {\n // metric data coming from charts\n chartMetrics : '=metrics',\n experimentType : '@',\n metricNames : '='\n },\n link : function ($scope, $el, $attrs, vm) {\n // can't use $watch('', fn) because vm.chartMetrics will only change once.\n // can't use $watch('', fn, objectEquality = true) that'd be non-performant\n $scope.$watchCollection('vm.chartMetrics', function (metrics) {\n if (metrics) {\n vm.updateVariations();\n }\n });\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Analytics')\n .directive('infoIcon', infoIcon);\n\n // @ngInject\n function infoIcon() {\n return {\n restrict : 'E',\n templateUrl : 'Analytics/infoIcon.tmpl.html',\n scope : {\n // todo: this will be a key that will indicate which text to show\n info : '@',\n placement : '@'\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Help')\n .controller('HelpCtrl', HelpCtrl);\n\n // @ngInject\n function HelpCtrl(Help, Toast) {\n var vm = this;\n\n vm.subject = '';\n vm.message = '';\n\n vm.submit = function () {\n Help.send(vm.subject, vm.message).then(function () {\n Toast.success('help.send.confirmation');\n });\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Help')\n .factory('Help', Help);\n\n // @ngInject\n function Help(Api) {\n\n return {\n send : send\n };\n\n function send(subject, message) {\n return Api.post('/help', {\n subject : subject,\n message : message\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('AreaLineChart', {\n initialize : function (options) {\n var plot = this;\n\n options = options || {};\n\n var margin = {\n top: 20,\n right: 40,\n bottom: 40,\n left: 60\n };\n\n plot.padding(margin);\n\n _.defaultsDeep(options, {\n width : 1000,\n height : 180,\n xAxis : false,\n yAxis : true,\n xFormat : null,\n yFormat : null,\n showGrid : true,\n drawAreaChart: false,\n baseTick: false,\n tooltipRowHeight: 35,\n tooltipDefaultXPos: 10,\n tooltipDefaultYPos: -20,\n tooltipXPadding: 15\n });\n\n\n plot.x = d3.time.scale();\n\n plot.y = d3.scale.linear();\n\n // allows for having a fixed y-range (e.g. always starting at 0).\n plot.yDomain = options.yDomain || {};\n\n plot.axisSvgs = {\n x : plot.wrap.append('g').classed('chart-axis x', true),\n y : plot.wrap.append('g').classed('chart-axis y', true)\n };\n\n plot.axes = {\n x : d3.svg.axis().scale(plot.x).orient('bottom'),\n y : d3.svg.axis().scale(plot.y).orient('left')\n };\n\n\n plot.axisLabels = {\n y: plot.wrap.append('g').classed('y-label', true)\n };\n\n plot.axisLabels.y\n .append(\"text\")\n .attr(\"class\", \"y-label-text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"y\", -margin.left)\n .attr(\"dy\", \"1em\")\n .text(options.yAxisLabel);\n\n if (!options.xAxis) {\n plot.axisSvgs.x.style('display', 'none');\n }\n\n if (!options.yAxis) {\n plot.axisSvgs.y.style('display', 'none');\n }\n\n if(options.xAxisTicks){\n plot.axes.x.ticks(options.xAxisTicks.ticks, options.xAxisTicks.tickInterval || null);\n }\n // allows to format x axis\n if (options.xFormat) {\n plot.axes.x.tickFormat(options.xFormat);\n }\n\n // allows to format y axis\n if (options.yFormat) {\n plot.axes.y.tickFormat(options.yFormat);\n }\n\n if(options.tickValues){\n plot.axes.y.tickValues(options.tickValues);\n }\n\n plot.layers = {\n charts: plot.wrap.append(\"g\").classed(\"charts\", true),\n lonePoints: plot.wrap.append(\"g\").classed(\"lonePoints\", true),\n focus: plot.wrap.append(\"g\").classed(\"focus\", true).style(\"display\", \"none\"),\n rect: plot.wrap.append(\"rect\")\n .attr(\"class\", \"overlay\")\n };\n\n // Plotting the line chart\n plot.line = d3.svg.line().interpolate('monotone')\n .defined(function (d) { return _.isFinite(d.y); }) //Draw with missing points\n .x(function(d, i) { return plot.x(plot.xLabel.values[i]); })\n .y(function(d) { return plot.y(d.yPos); });\n\n //Plotting area charts\n plot.area = d3.svg.area().interpolate('monotone')\n .defined(function (d) { return _.isFinite(d.y); }) //Draw with missing points\n .x(function(d, i) { return plot.x(plot.xLabel.values[i]);})\n .y0(function(d) { return plot.y(d.y0); })\n .y1(function(d) { return plot.y(d.yPos); });\n\n plot.layer('charts', plot.layers.charts, {\n dataBind : function (data) {\n return this.selectAll('.chart')\n .data(plot.data);\n },\n insert : function () {\n var chartLine = this;\n\n chartLine.append(\"g\")\n .attr(\"class\", \"chart\")\n .append(\"path\")\n .attr(\"class\", (options.drawAreaChart) ? \"area\" : \"line\");\n\n return chartLine;\n },\n events : {\n merge: function () {\n var that = this;\n that.select(\"path\")\n .attr(\"d\", function(d) {\n return (options.drawAreaChart) ? plot.area(d.values) : plot.line(d.values);\n })\n .style(\"fill\", function(d) {\n return options.drawAreaChart ? d.color.fill : \"none\";\n })\n .style(\"fill-opacity\", function(d) {\n return options.drawAreaChart ? d.color.opacity : \"none\";\n })\n .style(\"stroke\", function(d) {\n return d.color.stroke;\n });\n },\n exit : function () {\n this.remove();\n }\n }\n });\n\n plot.layer('lonePoints', plot.layers.lonePoints, {\n dataBind : function (data) {\n var lonePoints = _.flatMap(plot.data, function (chartData) {\n return _(chartData.values)\n .map( function (value, index) {\n return { x: index, y: value.yPos, color: chartData.color.stroke };\n })\n .filter( function (value, index) {\n // If the current value is not null and it has both the adjacent data points as null or beyond the\n // array bounds, we should plot a single point.\n return value.y !== null\n && (index - 1 < 0 || chartData.values[index - 1].yPos === null)\n && (index + 1 >= chartData.values.length || chartData.values[index + 1].yPos === null);\n })\n .value();\n });\n\n return this.selectAll('.lonePoint')\n .data(lonePoints);\n },\n insert : function () {\n var chartLine = this;\n\n chartLine\n .append(\"g\")\n .attr(\"class\", \"lonePoint\")\n .append(\"circle\").classed('line-per-circle', true)\n .attr(\"r\", 3.5)\n .attr(\"stroke-width\", 2);\n\n return chartLine;\n },\n events : {\n merge: function () {\n var that = this;\n that.select(\"circle\")\n .attr(\"cx\", function (d) {\n return plot.x(plot.xLabel.values[d.x]);\n })\n .attr(\"cy\", function (d) {\n return plot.y(d.y);\n })\n .attr(\"stroke\", function (d) {\n return d.color;\n })\n\n },\n exit : function () {\n this.remove();\n }\n }\n });\n\n plot.layer('focus', plot.layers.focus, {\n dataBind : function (data) {\n return this.selectAll('.focus')\n .data([1]);\n },\n insert : function () {\n\n var focus = this;\n\n // Making sure only one focus svg is created\n if(!this[0].parentNode.hasChildNodes()) {\n var numberOfLines = plot.data.length;\n var rowHeight = options.tooltipRowHeight;\n var padding = options.tooltipXPadding;\n\n var tooltipElem = focus.insert('svg').classed('tooltip-elem', true);\n\n tooltipElem.append(\"rect\")\n .classed(\"focus-tooltip\", true)\n .attr(\"height\", (numberOfLines + 1) * options.tooltipRowHeight)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n\n tooltipElem.append(\"rect\")\n .classed(\"date-rect\", true)\n .attr(\"height\", options.tooltipRowHeight)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n\n tooltipElem.append(\"text\")\n .classed(\"tooltip-date\", true)\n .attr(\"x\", padding)\n .attr(\"y\", (rowHeight / 2));\n\n _.forEach(plot.data, function(d, i){\n tooltipElem.append(\"text\")\n .classed(\"tooltip-label-\"+ i, true)\n .text(d.label)\n .style(\"fill\", d.labelColor)\n .attr(\"x\", padding)\n .attr(\"y\", (rowHeight * (i + 1)) + (rowHeight / 2));\n\n tooltipElem.append(\"text\")\n .classed(\"tooltip-value-\"+ i, true)\n .style(\"fill\", d.labelColor)\n .attr(\"y\", (rowHeight * (i + 1)) + (rowHeight / 2));\n });\n\n focus.insert(\"g\")\n .attr(\"class\", \"hover-line\")\n .append(\"line\")\n .attr(\"y1\", 0);\n\n focus.insert('g').classed('circle', true);\n }\n\n return focus;\n },\n events : {\n merge: function () {\n var that = this;\n\n if(that.classed('circle')){\n _.forEach(plot.data, function(d, i){\n that.append(\"circle\").classed('line-per-circle', true)\n .attr(\"r\", 3)\n .attr(\"stroke\", d.color.stroke)\n .attr(\"stroke-width\", 2);\n });\n }\n },\n exit : function () {\n this.remove();\n }\n }\n });\n\n function formatDate(d){\n return d.getDate() + \"/\" + (d.getMonth() + 1) + \"/\" + d.getFullYear();\n }\n\n function mousemove() {\n var bisect = d3.bisector(function (d) { return d; }).left;\n var xLabels = plot.xLabel.values;\n var mouse = d3.mouse(this)[0],\n xMousePos = plot.x.invert(mouse),\n idx = bisect(xLabels, xMousePos, 1),\n i = (xMousePos - xLabels[idx]) > (xLabels[idx - 1] - xMousePos) ? idx : idx - 1,\n x0 = xLabels[i],\n y = d3.max(_.map(plot.data, function(d) { return d.values[i] && d.values[i].yPos; })),\n elem = plot.layers.focus.select('.tooltip-elem');\n if(_.isFinite(y)){\n plot.layers.focus.selectAll('.line-per-circle')\n .attr(\"transform\", function (d, x) {\n return \"translate(\" + plot.x(x0) + \",\" + plot.y(plot.data[x].values[i].yPos) + \")\";\n });\n plot.layers.focus.select('.hover-line line')\n .attr(\"x1\", plot.x(x0)).attr(\"x2\", plot.x(x0));\n\n plot.layers.focus.style(\"display\", null);\n updateContent(elem);\n positionTooltip(plot.x(x0), plot.y(y));\n }\n\n function updateContent(elem){\n elem.select(\".tooltip-date\").text(options.prependXLabelText(plot.xLabel.label(x0)));\n _.forEach(plot.data, function(v, k){\n var yValue = v.values[i].y;\n if (plot.options.drawAreaChart && v.stackedTotal){\n yValue = v.values[i].yPos;\n }\n elem.select(\".tooltip-value-\" + k).text(_.isNull(yValue) ? '-.-' : options.formatYLabelText(yValue));\n });\n\n //get max widths of all elements\n var maxElemWidths = getMaxElemWidths();\n var labelValueMaxWidth = maxElemWidths.maxLabelWidth + maxElemWidths.maxValueWidth + options.tooltipXPadding;\n var tooltipWidth = _.max([labelValueMaxWidth, maxElemWidths.date]) + (options.tooltipXPadding * 2);\n\n //set the x attr for tooltip value to right align it\n _.forEach(plot.data, function (v, k) {\n elem.select(\".tooltip-value-\" + k).attr(\"x\", tooltipWidth - maxElemWidths.maxValueWidth - options.tooltipXPadding);\n });\n\n //set the width calculated above to avoid overflows\n elem.select(\".focus-tooltip\").style(\"width\", tooltipWidth);\n elem.select(\".date-rect\").style(\"width\", tooltipWidth);\n }\n\n function getMaxElemWidths() {\n var tooltipElem = plot.layers.focus;\n var dateWidth = getDimension(tooltipElem.select('.tooltip-date'), \"width\");\n var labelValueWidth = _.map(plot.data, function(d, i) {\n return ['label', 'value'].reduce(function (acc, currentValue) {\n var elem = \".tooltip-\"+ currentValue + \"-\" + i;\n acc[currentValue] = getDimension(tooltipElem.select(elem), \"width\");\n return acc;\n },{});\n });\n return {\n 'maxLabelWidth': _.maxBy(labelValueWidth, 'label').label,\n 'maxValueWidth': _.maxBy(labelValueWidth, 'value').value,\n 'date': dateWidth\n }\n\n }\n\n function getDimension(elem, dim){\n return elem.node().getBBox()[dim];\n }\n\n function positionTooltip(currentXPosition, currentYPosition){\n var xPosFunc = function (dimension) {\n //mirror tooltip over y-axis if the tooltip gets clipped\n return currentXPosition - dimension - options.tooltipDefaultXPos;\n };\n var yPosFunc = function (dimension) {\n //move tooltip up by the value required to bring tooltip in the charts area\n return currentYPosition + (plot.h + margin.bottom - Math.ceil(currentYPosition + dimension))\n };\n\n var newXPos = getUpdatedPosition(\"width\", plot.w, currentXPosition, options.tooltipDefaultXPos, xPosFunc);\n var newYPos = getUpdatedPosition(\"height\", plot.h + margin.bottom, currentYPosition, options.tooltipDefaultYPos, yPosFunc);\n updateTooltipPosition(newXPos, newYPos);\n }\n\n function getUpdatedPosition(dim, totalDim, currPos, initialPos, posFunc) {\n var focus = plot.layers.focus;\n var focusTooltip = focus.select('.focus-tooltip');\n var dimension = getDimension(focusTooltip, dim);\n\n if(totalDim <= Math.ceil(currPos + dimension + initialPos)){ //if the tooltip overflows at right or bottom\n return posFunc(dimension);\n } else {\n return currPos + initialPos;\n }\n }\n\n function updateTooltipPosition(xPos, yPos) {\n var tooltipElem = plot.layers.focus.select('.tooltip-elem');\n tooltipElem.attr(\"x\", xPos)\n .attr(\"y\", yPos);\n }\n\n }\n\n function calcRange() {\n\n plot.x.range([0, plot.w]);\n plot.y.range([plot.h, 0]);\n\n if(plot.w > 0 && plot.h > 0) {\n plot.layers.rect\n .attr(\"width\", plot.w)\n .attr(\"height\", plot.h);\n }\n\n plot.layers.focus.select('.hover-line line').attr(\"y2\", plot.h);\n\n if (options.showGrid) {\n plot.axes.y.tickPadding(10).innerTickSize(-plot.w);\n }\n\n plot.axisSvgs.x\n .translate(0, plot.y.range()[0])\n .call(plot.axes.x)\n .selectAll('.x .tick text')\n .call(function(t) {\n t.each(function (d) {\n var label = d3.select(this);\n var date = label.text().split(' ');\n label.text(''); // clear the text\n _(date)\n .reverse()\n .each(function(v) {\n label.append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", \"1em\")\n .text(v)\n });\n })\n });\n\n plot.axisSvgs.y\n .call(plot.axes.y);\n\n plot.axisLabels.y.select('.y-label-text')\n .attr(\"x\", -plot.h/2);\n\n if(options.baseTick){\n plot.axisSvgs.y.select('.tick').select('text').style(\"opacity\", 0);\n }\n\n // Pointer events on graph\n plot.layers.rect\n .on(\"mouseout\", function() { plot.layers.focus.style(\"display\", \"none\"); })\n .on(\"mousemove\", mousemove);\n\n // Transform graph\n d3.select(\"svg\").select(\"g\").attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n transform: function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n\n plot.xLabel = data['xData'];\n\n plot.data = [];\n\n _(data['yData']).map(function (obj, k){\n var map = {};\n map[k] = obj;\n plot.data.push(obj);\n }).value();\n\n plot.data.forEach(function(x) { x.values = _.map(x.values, function(val) {return {y: val, yPos: val}}) });\n\n // TODO refactor AreaLineChart, so that we do not need to check plot.drawAreaChart every time to handle logic\n // specific to area or line chart\n if(plot.options.drawAreaChart) {\n var stack = d3.layout.stack()\n .values(function (d) { return d.values;});\n\n stack(plot.data); // This sets the offset for y as 'y0' for each value.\n\n plot.data.forEach(function(x) { _.forEach(x.values, function(val) {\n return _.extend(val, {yPos: val.y + val.y0});\n }) });\n }\n\n // Set domain of x axis\n plot.x.domain(d3.extent(plot.xLabel.values, function(d){ return d}));\n\n // Set domain range of y axis\n plot.y.domain(['min', 'max'].map(function (minOrMax) {\n var setValue = plot.yDomain[minOrMax];\n return !_.isUndefined(setValue) ? setValue :\n d3[minOrMax](_.map(plot.data, function(c){\n return d3[minOrMax](c.values)}\n ));\n })).nice();\n }\n\n return data;\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('BarChart', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n _.defaultsDeep(options, {\n horizontal : true,\n labelSize : 120,\n barSpacing : .5,\n popupLabels : false,\n dashedLabelBoxes : true,\n isDashedLabelBoxesExist : true,\n zebraLabels : false,\n hideBarLabels : false,\n horizontalTotalLabelSize : 50,\n verticalTotalLabelSize : 20,\n hideTotalLabels : true,\n groups : 1,\n sortingAmongGroups : 'horizontal',\n barThickness : 30,\n groupPadding : 20,\n disableBar : false,\n showFirstLastLabels: false\n });\n var disableBars = options.disableBar;\n var horizontal = options.horizontal;\n var groups = options.groups;\n var sortingAmongGroups = options.sortingAmongGroups;\n\n plot.layers = {\n totalLabels : plot.wrap.append('g').classed('total-labels', true),\n bars : plot.wrap.append('g').classed('bars', true),\n labels : plot.wrap.append('g').classed('labels', true),\n rankLabel: plot.wrap.append('g').classed('labels',true)\n };\n\n plot.bucket = d3.scale.ordinal();\n plot.value = d3.scale.linear();\n\n function barThickness() {\n return plot.bucket.rangeBand();\n }\n\n function getElemShape(elem){\n var bbox = {};\n try {\n bbox = elem.getBBox();\n } catch(e) {\n // Firefox 3.0.x plays badly here\n } finally {\n bbox = bbox || {};\n }\n return bbox;\n }\n\n // TODO - move this to a common file\n function wrapText(limitChar) {\n return function(){\n var self = d3.select(this),\n text = self.text();\n\n if(text.length > limitChar){\n self.text(_.truncate(text,{\n 'length': limitChar\n }));\n }\n };\n }\n\n // We wrap the original datum in an array with its rank.\n // This augments the given function to just get the datum\n function origDatum(fn) {\n return function (datumRankPair, i, j, k) {\n return fn.call(this, datumRankPair[0], i, j, k);\n };\n }\n\n function getXpos(index, plotLength) {\n var itemsInOneGroup = Math.ceil(plot.data.page.length/groups);\n var groupNumber = Math.ceil((index + 1)/itemsInOneGroup);\n return sortingAmongGroups === 'horizontal' ? ((plotLength / groups) + options.groupPadding) * (index % groups) :\n (options.groupPadding + (plotLength / groups))*(groupNumber -1);\n }\n\n function getYpos(index) {\n var itemsInOneGroup = Math.ceil(plot.data.page.length/groups);\n return sortingAmongGroups === 'horizontal' ? Math.floor(index / groups) :\n Math.floor(index%itemsInOneGroup);\n }\n\n plot.layer('labels', plot.layers.labels, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n\n var text = group.append('text');\n text.append(\"title\");\n text.append('tspan')\n .classed('bar-label-text', true)\n .attr('alignment-baseline', 'middle')\n .attr('font-family', 'Gotham, sans-serif');\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var thickness = horizontal ? 'height' : 'width';\n var length = horizontal ? 'width' : 'height';\n var labelWidth = getLabelWidth();\n\n that.translate(origDatum(function (item, index) {\n var plotLength = horizontal ? plot.w : plot.h;\n var xPos = getXpos(index, plotLength);\n var yPos = getYpos(index);\n return horizontal ? [xPos, plot.bucket(yPos)] : [plot.bucket(yPos), xPos];\n }));\n\n var textX = barThickness() / 2;\n var textY = horizontal ? (barThickness() / 2) : (plot.h/groups - labelWidth/2);\n\n var text = that.select('text');\n\n function labelText(datumPair) {\n return plot.fn.label(datumPair[0]);\n }\n\n text.select('title').text(function(datumRankPair){\n return plot.fn.label(datumRankPair[0]);\n });\n\n text.select('tspan')\n .text(labelText)\n .attr('x', function (d, i) {\n var x = (options.showFirstLastLabels) ? (i === 0) ? 2 : (i === (plot.data.page.length - 1)) ? -2 : 0: 0;\n return textX + x;\n })\n .attr('y', textY)\n .attr(\"dx\", function(){\n return (horizontal) ? \"\": (this.getComputedTextLength() > labelWidth) ? \"-1.2em\" : \"\";\n })\n .classed('no-border', true)\n .attr(thickness, barThickness())\n .attr(length, labelWidth)\n .classed('display-none',function(d, i) { return (options.showFirstLastLabels) && !(i === 0 || i === (plot.data.page.length - 1)) })\n .attr('text-anchor', horizontal ? 'start' : 'middle');\n }\n }\n });\n\n plot.layer('rankLabel', plot.layers.rankLabel, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n\n var text = group.append('text');\n text.append(\"title\");\n text.append('tspan')\n .classed('bar-label-text', true)\n .attr('alignment-baseline', 'middle')\n .attr('font-family', 'Gotham, sans-serif');\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var thickness = horizontal ? 'height' : 'width';\n var length = horizontal ? 'width' : 'height';\n var labelWidth = getLabelWidth();\n\n that.translate(origDatum(function (item, index) {\n var plotLength = horizontal ? plot.w : plot.h;\n var xPos = getXpos(index, plotLength);\n var yPos = getYpos(index);\n return horizontal ? [xPos, plot.bucket(yPos)] : [plot.bucket(yPos), xPos];\n }));\n\n var textX = barThickness() / 2;\n var textY = horizontal ? (barThickness() / 2) : (plot.h/groups - labelWidth/2);\n\n var text = that.select('text');\n\n function labelText(datumPair) {\n return datumPair[1];\n }\n\n text.select('tspan')\n .text(labelText)\n .attr('x', textX)\n .attr('y', textY)\n .classed('no-border', true)\n .attr(thickness, barThickness())\n .attr(length, labelWidth)\n .attr('text-anchor', horizontal ? 'start' : 'middle')\n }\n }\n })\n\n plot.layer('bars', plot.layers.bars, {\n dataBind : function (data) {\n return this.selectAll('.bucket')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('bucket', true);\n group.append('rect').classed('bar-bg', true);\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var bucket = this;\n var thickness = horizontal ? 'height' : 'width';\n var length = horizontal ? 'width' : 'height';\n\n function lengthFn(item, barIndex) {\n return plot.value(plot.fn.value[barIndex](item));\n }\n\n function totalLengthFn(item) {\n return plot.value(_.sum(plot.valuesArray(item)));\n }\n var halfThickness = barThickness() / 2;\n var fullBarLength = plot.value.range()[1];\n\n //TODO : implement grouping for vertical graphs\n bucket.translate(origDatum(function (item, index) {\n var plotLength = horizontal ? plot.w : plot.h;\n var xPos = getXpos(index, plotLength);\n var yPos = getYpos(index);\n return horizontal ? [xPos, plot.bucket(yPos)] : [plot.bucket(yPos), xPos];\n }));\n\n var barBg = bucket.select('.bar-bg')\n .attr(thickness, barThickness())\n .attr(length, fullBarLength + options.groupPadding / 2)\n .translate(0, horizontal ? 0 : -fullBarLength - options.groupPadding / 2)\n .classed('display-none', !options.isDashedLabelBoxesExist);\n\n if (options.dashedLabelBoxes) {\n barBg\n .classed('even',true)\n .attr('stroke-dasharray',function (datumrankPair) {\n return plot.fn.highlight(datumrankPair[0]) ? '0,0' : '2,2';\n }).classed('stroke-highlight',function (datumrankPair) {\n return plot.fn.highlight(datumrankPair[0])\n });\n }\n\n var group = bucket.selectAll('.bar-group')\n .data(d3.range(plot.fn.value.length));\n\n group.exit().remove();\n\n // augment group functions to give you the original datum\n function parentDatum(fn) {\n return function (index, __, j) {\n return origDatum(fn).call(this, plot.data.page[j], index, j);\n };\n }\n\n group.translate(parentDatum(function (item, index) {\n var barsToCheck = horizontal ? index : index + 1;\n var translation = d3.sum(d3.range(barsToCheck), function (prevBarIndex) {\n return lengthFn(item, prevBarIndex);\n });\n return horizontal ? [translation, 0] : [0, - translation];\n }));\n\n var newGroups = group.enter()\n .append('g').classed('bar-group', true);\n newGroups.append('rect').classed('bar', true);\n newGroups.append('text').classed('bar-value', true)\n .attr('alignment-baseline', horizontal ? 'middle' : 'hanging')\n .attr('text-anchor', horizontal ? 'end' : 'middle');\n\n group.select('.bar')\n .attr(thickness, barThickness())\n .transition()\n .duration(750)\n .attr(length, parentDatum(lengthFn))\n .attr('fill', function (d, i) {\n return plot.fn.color[i];\n });\n\n if (options.popupLabels) {\n\n var tooltip = d3.select(\"body\")\n .append(\"div\")\n .classed(\"chart-popup\", true)\n .style(\"visibility\", \"hidden\");\n\n group\n .on(\"mouseover\", parentDatum(function (item, idx) {\n return tooltip\n .style(\"visibility\", \"visible\")\n .text(plot.fn.popupLabel[idx].apply(this, arguments));\n }))\n .on(\"mousemove\", function () {\n return tooltip\n .style(\"top\", (d3.event.pageY - 45) + \"px\") // using d3.event instead of event since it's stores the current event and is not defined in browser Firefox and Edge\n .style(\"left\", (d3.event.pageX - 20) + \"px\");\n })\n .on(\"mouseout\", function () { return tooltip.style(\"visibility\", \"hidden\"); });\n }\n\n\n function putLabel(elem, barLength, anchorAttr, outsideAnchor, insideAnchor) {\n var labelPadding = 20;\n // Get the size of the value label in the direction of the bars\n var valueSize = getElemShape(elem)[horizontal ? 'width' : 'height'];\n // We'll put the label outside the bar if there isn't enough padding\n var putOutside = barLength - valueSize < labelPadding;\n // The position is calculated from the 'base' of the bar -- this gets inverted for vertical bars\n var position = barLength + (putOutside ? 1 : -1) * labelPadding;\n d3.select(elem)\n // Set the anchor point of label on the appropriate edge\n .attr(anchorAttr, putOutside ? outsideAnchor : insideAnchor)\n // Change the text color if it's outside the bar so it's visible\n .classed('outside-bar', putOutside);\n return position;\n }\n\n if (!options.hideBarLabels) {\n group.select('.bar-value').text(parentDatum(function (item, index) {\n return plot.fn.valueLabel[index](item);\n }))\n .attr('x', horizontal ? parentDatum(function (item, index) {\n return putLabel(this, lengthFn(item, index), 'text-anchor', 'start', 'end');\n }) : halfThickness)\n .attr('y', horizontal ? halfThickness : parentDatum(function (item, index) {\n var length = totalLengthFn(item);\n return length - putLabel(this, length, 'alignment-baseline', 'baseline', 'hanging');\n }));\n }\n }\n }\n });\n\n plot.layer('total-labels', plot.layers.totalLabels, {\n dataBind : function (data) {\n return this.selectAll('.total-label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('total-label-group', true);\n\n group.append('text').classed('total-bar-label-text', true)\n .attr('alignment-baseline', 'middle')\n .attr('font-family', 'Gotham, sans-serif');\n\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n\n var totalLabelWidth = getTotalLabelWidth();\n\n //TODO : implement grouping for vertical\n that.translate(origDatum(function (item, index) {\n var plotLength = horizontal ? plot.w : plot.h;\n var xPos = getXpos(index, plotLength);\n var yPos = getYpos(index);\n return horizontal ? [xPos + (plot.w/groups) - totalLabelWidth, plot.bucket(yPos)] : [plot.bucket(yPos),0];\n }));\n\n if(!options.hideTotalLabels){\n var text = that.select('text')\n .text(origDatum(function(d) {\n var value = plot.fn.valueLabel.reduce(function (value, fn) {\n return value + fn(d);\n }, 0);\n return value.toFixed(0) + '%';\n }));\n\n var textX = barThickness() / 2;\n var textY = horizontal ? (barThickness() / 2) : (totalLabelWidth/2);\n\n text.attr('x', textX)\n .attr('y', textY);\n\n if(!horizontal) text.attr('text-anchor','middle'); //centers labels with bars when vertical\n\n }\n }\n }\n });\n\n function getLabelWidth() {\n var maxLabelWidth = d3.max(plot.layers.labels.selectAll('.bar-label-text')[0], function (elem) {\n getElemShape(elem)[horizontal ? 'width' : 'height'];\n });\n\n return Math.max((horizontal ? 1 : 0.5) * options.labelSize, maxLabelWidth || 0);\n }\n\n function getTotalLabelWidth() {\n return options.hideTotalLabels ? 0 : (horizontal ? options.horizontalTotalLabelSize : options.verticalTotalLabelSize);\n }\n\n function calcRange() {\n var spacing = options.barSpacing;\n var totalLabel = getTotalLabelWidth();\n if (horizontal) {\n if (groups > 1) plot.bucket.domain(d3.range(plot.data.page.length / groups));\n plot.bucket.rangeRoundBands([0, plot.h], spacing, 0);\n } else {\n plot.bucket.rangeRoundBands([0, plot.w], spacing, 0);\n }\n // Draw labels so we can accurately calculate their maximum size.\n // This needs to be done AFTER setting the bucket.range to avoid an exception.\n plot.layer('labels').draw(plot.data);\n var labelWidth = getLabelWidth();\n if (horizontal) {\n if(disableBars){\n plot.layers.bars.remove();\n plot.layers.rankLabel.translate(labelWidth, 0);\n }else {\n plot.layers.rankLabel.remove();\n plot.value.range([0, Math.max(plot.w / groups - labelWidth - totalLabel - groups * options.groupPadding, 0)]);\n plot.layers.bars.translate(labelWidth , 0);\n }\n } else {\n plot.layers.rankLabel.remove();\n plot.value.range([0, Math.max(plot.h/groups - labelWidth - totalLabel - groups * options.groupPadding, 0)]);\n plot.layers.bars.translate(0, plot.h/groups - labelWidth);\n }\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n valuesArray : function (item) {\n return this.fn.value.map(function (fn) {\n return fn(item);\n });\n },\n transform : function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n _.defaults(data, {\n fn : {},\n pageSize : data.data.length,\n currentPage : 1\n });\n plot.fn = _.defaults(data.fn, {\n label : _.property('label'),\n value : _.property('value'),\n popupLabel : _.property('value'),\n color : [\"#7C0A40\"],\n highlight: function() { return false; }\n });\n _.defaults(data.fn, {\n valueLabel : data.fn.valueLabel\n });\n if (!_.isArray(plot.fn.value)) {\n plot.fn.value = [plot.fn.value];\n }\n if (!_.isArray(plot.fn.valueLabel)) {\n plot.fn.valueLabel = [plot.fn.valueLabel];\n }\n if (!_.isArray(plot.fn.popupLabel)) {\n plot.fn.popupLabel = [plot.fn.popupLabel];\n }\n if(!_.isArray(plot.fn.color)){\n plot.fn.color = [plot.fn.color];\n }\n\n // developer errors\n if (plot.fn.value.length > 1) {\n if (!_.isArray(plot.fn.stackLabel) || plot.fn.stackLabel.length !== plot.fn.value.length) {\n throw new Error('plot.fn.value has more than 1 function yet plot.fn.stackLabel is not an array of the same length');\n }\n if (plot.fn.valueLabel.length !== plot.fn.value.length) {\n throw new Error('plot.fn.value has more a different number of functions than plot.fn.valueLabel');\n }\n }\n\n var sumOfAllValues = function (item) {\n return _.sum(plot.valuesArray(item));\n };\n\n var range = data.fn.brandDataRange ? data.fn.brandDataRange(data.data):d3.max(data.data, sumOfAllValues);\n plot.value.domain([0, range]);\n\n // setup a lazily evaluated chain of transformations\n var dataChain = _(data.data);\n\n // Only order if we want the rank numbers\n if (!data.dontRank) {\n dataChain = dataChain.orderBy(sumOfAllValues, ['desc']);\n }\n\n // Hold onto the original ranking number, or else it'd be erased when filtering or paging\n dataChain = dataChain.map(function (d, i) {\n return [d, i + 1];\n });\n\n // Support for arbitrary filtering\n if (data.fn.filter) {\n dataChain = dataChain.filter(function (item, i) {\n return data.fn.filter(item[0], i);\n });\n }\n\n // Finally evaluate the chain of transformations above to a concrete values\n data.data = dataChain.value();\n\n data.page = data.data.slice((data.currentPage - 1) * data.pageSize, data.currentPage * data.pageSize);\n\n plot.bucket.domain(d3.range(data.page.length));\n\n plot.data = data;\n }\n\n return data;\n }\n });\n\n})();","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('BarChartWithAxes', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n _.defaultsDeep(options, {\n xAxis: true,\n yAxis: true\n });\n\n var margin = {\n top: 20,\n right: 10,\n bottom: 20,\n left: 40\n };\n\n plot.padding(margin);\n\n plot.x = d3.scale.ordinal();\n\n plot.y = d3.scale.linear();\n\n plot.axisSvgs = {\n x : plot.wrap.append('g').classed('chart-axis x', true),\n y : plot.wrap.append('g').classed('chart-axis y', true)\n };\n\n plot.axes = {\n x : d3.svg.axis().scale(plot.x).orient('bottom').tickFormat(\"\"),\n y : d3.svg.axis().scale(plot.y).orient('left').ticks(3).tickFormat(options.metricValuesFormat)\n };\n\n if (!options.xAxis) {\n plot.axisSvgs.x.style('display', 'none');\n }\n\n if (!options.yAxis) {\n plot.axisSvgs.y.style('display', 'none');\n }\n\n plot.layers = {\n bars : plot.wrap.append('g').classed('bars', true)\n };\n\n plot.layer('bars', plot.layers.bars, {\n dataBind : function (data) {\n return this.selectAll('.bar')\n .data(data);\n },\n insert : function () {\n var bar = this;\n\n bar.append(\"g\")\n .attr(\"class\", \"bar\")\n .append(\"rect\");\n\n return bar;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge: function () {\n var that = this;\n if(plot.h > 0) {\n that.select(\"rect\")\n .attr(\"x\", function (d) {\n return plot.x(d[\"label\"]);\n })\n .attr(\"y\", function (d) {\n return d[\"value\"] && plot.y(d[\"value\"]);\n })\n .attr(\"width\", plot.x.rangeBand())\n .attr(\"height\", function (d) {\n return d[\"value\"] && (plot.h - plot.y(d[\"value\"]));\n })\n .attr(\"fill\", function (d) {\n return d[\"color\"];\n })\n }\n }\n }\n });\n\n function calcRange() {\n\n plot.x.rangeRoundBands([0, plot.w], .6);\n plot.y.range([plot.h, 0]);\n\n if (!options.showGrid) {\n plot.axes.y.tickPadding(10).innerTickSize(-plot.w);\n }\n\n plot.axisSvgs.x\n .translate(0, plot.y.range()[0])\n .call(plot.axes.x);\n\n plot.axisSvgs.y\n .call(plot.axes.y);\n\n // Transform graph\n d3.select(\"svg\").select(\"g\").attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n transform: function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n\n var chartData = {};\n chartData.xLabel = _.map(data, 'label');\n chartData.data = _.map(data, 'value');\n\n\n plot.data = [];\n\n data.forEach(function (item) {\n plot.data.push(item);\n });\n\n plot.x.domain(_.map(plot.data, 'label'))\n .rangeRoundBands([0, plot.w]);\n\n plot.y.domain([0, _.ceil(d3.max(_.map(plot.data, 'value')))])\n .range([plot.h, 0]);\n }\n\n return data;\n }\n });\n\n})();","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('BarChartWithoutLabel', {\n initialize : function () {\n var plot = this;\n\n plot.layers = {\n bars : plot.wrap.append('g').classed('bars', true)\n };\n\n plot.bucket = d3.scale.ordinal();\n plot.value = d3.scale.linear();\n\n function getElemShape(elem){\n var bbox = {};\n try {\n bbox = elem.getBBox();\n } catch(e) {\n // Firefox 3.0.x plays badly here\n } finally {\n bbox = bbox || {};\n }\n return bbox;\n }\n\n // We wrap the original datum in an array with its rank.\n // This augments the given function to just get the datum\n function origDatum(fn) {\n return function (datumRankPair, i, j, k) {\n return fn.call(this, datumRankPair[0], i, j, k);\n };\n }\n\n plot.layer('bars', plot.layers.bars, {\n dataBind : function (data) {\n return this.selectAll('.bucket')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('bucket', true);\n group.append('rect').classed('bar-bg', true);\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var bucket = this;\n\n function lengthFn(item, barIndex) {\n var barValue = parseFloat(plot.fn.valueLabel[barIndex](item));\n if(barValue === 100) barValue = 97;\n var bgBarWidth = plot.value.range()[1];\n var barWidth = (barValue*bgBarWidth)/100;\n return barWidth;\n }\n\n bucket.select('.bar-bg')\n .attr('height', plot.bucket.rangeBand())\n .attr('width', plot.value.range()[1])\n .translate(0, 0)\n .classed('even',true)\n .attr('stroke-dasharray', '2,2');\n\n var group = bucket.selectAll('.bar-group')\n .data(d3.range(plot.fn.value.length));\n\n group.exit().remove();\n\n // augment group functions to give you the original datum\n function parentDatum(fn) {\n return function (index, __, j) {\n return origDatum(fn).call(this, plot.data.page[j], index, j);\n };\n }\n\n group.translate(parentDatum(function (item, index) {\n var translation = d3.sum(d3.range(index), function (prevBarIndex) {\n return lengthFn(item, prevBarIndex);\n });\n return [translation, 0];\n }));\n\n var newGroups = group.enter()\n .append('g').classed('bar-group', true);\n newGroups.append('rect').classed('bar', true);\n newGroups.append('text').classed('bar-value', true)\n .attr('alignment-baseline', 'middle')\n .attr('text-anchor', 'start');\n\n group.select('.bar')\n .attr('height', plot.bucket.rangeBand())\n .transition()\n .duration(750)\n .attr('width', parentDatum(lengthFn))\n .attr('fill', function (d, i) {\n return plot.fn.color[i];\n });\n\n function putLabel(elem, barLength, anchorAttr, outsideAnchor, insideAnchor) {\n var labelPadding = 20;\n // Get the size of the value label in the direction of the bars\n var valueSize = getElemShape(elem)['width'];\n // We'll put the label outside the bar if there isn't enough padding\n var putOutside = barLength - valueSize < labelPadding;\n // The position is calculated from the 'base' of the bar -- this gets inverted for vertical bars\n var position = barLength + (putOutside ? 1 : -1) * labelPadding;\n d3.select(elem)\n // Set the anchor point of label on the appropriate edge\n .attr(anchorAttr, putOutside ? outsideAnchor : insideAnchor)\n // Change the text color if it's outside the bar so it's visible\n .classed('outside-bar', putOutside);\n return position;\n }\n\n group.select('.bar-value').text(parentDatum(function (item, index) {\n return plot.fn.valueLabel[index](item);\n }))\n .attr('x', parentDatum(function (item, index) {\n return putLabel(this, lengthFn(item, index), 'text-anchor', 'start', 'end');\n }))\n .attr('y', plot.bucket.rangeBand()/2);\n }\n }\n });\n\n function calcRange() {\n plot.bucket.rangeRoundBands([0, plot.h], 0, 0);\n plot.value.range([0, Math.max(plot.w, 0)]);\n plot.layers.bars.translate(0, 0);\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n valuesArray : function (item) {\n return this.fn.value.map(function (fn) {\n return fn(item);\n });\n },\n transform : function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n _.defaults(data, {\n fn : {},\n pageSize : data.data.length,\n currentPage : 1\n });\n plot.fn = _.defaults(data.fn, {\n value : _.property('value'),\n color : [\"#7C0A40\"],\n });\n _.defaults(data.fn, {\n valueLabel : data.fn.valueLabel\n });\n if (!_.isArray(plot.fn.value)) {\n plot.fn.value = [plot.fn.value];\n }\n if (!_.isArray(plot.fn.valueLabel)) {\n plot.fn.valueLabel = [plot.fn.valueLabel];\n }\n if(!_.isArray(plot.fn.color)){\n plot.fn.color = [plot.fn.color];\n }\n\n // developer errors\n if (plot.fn.value.length > 1) {\n if (!_.isArray(plot.fn.stackLabel) || plot.fn.stackLabel.length !== plot.fn.value.length) {\n throw new Error('plot.fn.value has more than 1 function yet plot.fn.stackLabel is not an array of the same length');\n }\n if (plot.fn.valueLabel.length !== plot.fn.value.length) {\n throw new Error('plot.fn.value has more a different number of functions than plot.fn.valueLabel');\n }\n }\n\n var sumOfAllValues = function (item) {\n return _.sum(plot.valuesArray(item));\n };\n\n var range = data.fn.brandDataRange ? data.fn.brandDataRange(data.data):d3.max(data.data, sumOfAllValues);\n plot.value.domain([0, range]);\n\n // setup a lazily evaluated chain of transformations\n var dataChain = _(data.data);\n\n // Only order if we want the rank numbers\n if (!data.dontRank) {\n dataChain = dataChain.orderBy(sumOfAllValues, ['desc']);\n }\n\n // Hold onto the original ranking number, or else it'd be erased when filtering or paging\n dataChain = dataChain.map(function (d, i) {\n return [d, i + 1];\n });\n\n // Finally evaluate the chain of transformations above to a concrete values\n data.data = dataChain.value();\n\n data.page = data.data;\n\n plot.bucket.domain(d3.range(data.page.length));\n\n plot.data = data;\n }\n\n return data;\n }\n });\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Charts')\n .directive('tfcChart', tfcChart);\n\n // @ngInject\n function tfcChart($window, ngUtil) {\n return {\n restrict : 'E',\n scope : {\n chart : '@',\n data : '=',\n options : '='\n },\n link : function ($scope, $el, $attrs) {\n var $w = angular.element($window);\n var eventBinder = ngUtil.eventBinder($scope);\n\n var svg = d3.select($el[0]).append('svg');\n var chart;\n\n function createChart() {\n if (!chart) {\n chart = svg.chart($scope.chart, $scope.options || {});\n }\n }\n\n $scope.$watch('data', function (data) {\n if (data && _.size(data) !== 0) {\n createChart();\n chart.draw(data);\n updateChartSize(elemSize());\n }\n $el[0].parentNode.scrollTop = $el[0].scrollTop;\n });\n\n function elemSize() {\n return {\n width : $el[0].offsetWidth,\n height : $el[0].offsetHeight\n };\n }\n\n eventBinder($w, 'resize', function () {\n $scope.$apply();\n });\n\n $scope.$watch(elemSize, updateChartSize, true);\n function updateChartSize(size) {\n if (chart) {\n chart\n .width(size.width)\n .height(size.height);\n }\n }\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('ContextChart', {\n initialize : function (options) {\n var plot = this,\n bases, clipperId;\n options = options || {};\n\n options.chart = options.chart || 'Line';\n plot.ctxHeight = options.ctxHeight || 80;\n\n // set default padding, but don't override the ones set by options\n plot.padding({ top : 20, bottom : 5, left : 5, right : 5});\n plot.padding(options.padding);\n\n bases = {\n focus : plot.wrap.append('g').classed('focus', true),\n context : plot.wrap.append('g').classed('context', true),\n legend : plot.wrap.append('g'),\n brush : plot.wrap.append('g').classed('brush', true),\n inspector : plot.wrap.append('g')\n };\n\n // the main chart\n plot.focus = bases.focus\n .chart(options.chart, options.chartOptions);\n\n // the zooming context beneath the main chart\n plot.context = bases.context\n .chart(options.chart, _.defaults({\n contextMode : true\n }, options.chartOptions));\n\n plot.legend = bases.legend\n .chart('Legend', { color : plot.focus.color });\n\n plot.attach('focus', plot.focus);\n plot.attach('context', plot.context);\n plot.attach('legend', plot.legend);\n\n // indicates information about the datum under the mouse\n plot.inspector = bases.inspector\n .chart('Inspector', { focus : plot.focus });\n\n clipperId = uuid();\n // the clipPath masks the plot series\n plot.clipper = plot.defsNode()\n .append('clipPath')\n .attr('id', clipperId)\n .append('rect');\n\n plot.brush = d3.svg.brush()\n .x(plot.context.x)\n .on('brush', function () {\n var extent = plot.brush.empty() ? plot.brush.x().domain() : plot.brush.extent();\n plot.focus.brushed(extent, clipperId);\n if (plot.brush.empty()) {\n // kick the inspector because it's only listening for mousemove\n plot.inspector.check();\n }\n });\n\n plot.on('change:width', layout)\n .on('change:height', layout)\n .on('change:data', function () {\n // clear the brush and redraw it\n plot.brush.clear();\n bases.brush.call(plot.brush);\n });\n\n function layout() {\n var width = plot.w;\n var focusHeight = plot.h - plot.ctxHeight;\n var padding = plot.focus.padding();\n\n plot.focus\n .width(width)\n .height(focusHeight);\n\n // clip the focus to its own internal size\n plot.clipper\n .attr('width', Math.max(0, plot.focus.w))\n .attr('height', Math.max(0, plot.focus.h));\n\n plot.context\n .width(width)\n .height(plot.ctxHeight);\n\n bases.context\n .translate(0, focusHeight);\n\n bases.brush\n .translate(padding.left, focusHeight)\n .call(plot.brush)\n .selectAll('rect')\n .attr('height', plot.context.h);\n\n bases.inspector\n .translate(padding.left, padding.top);\n\n bases.legend\n .translate(padding.left + 30, -plot.pad('top'));\n }\n\n plot.focus.on('change:height', function () {\n plot.inspector.height(plot.focus.h);\n });\n },\n transform : function (data) {\n // otherwise plot.redraw() won't work\n this.data = data;\n return data;\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n // todo: rename to LineSigma as it's not necessarily a Delta\n d3.chart('Plot').extend('DeltaSigma', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n // defaults so if options set any in Plot we don't override them\n _.defaults(plot.defaultFns, {\n // the value of 1 sigma\n sigma : function (d) { return d.sigma; },\n // the confidence threshold factor\n confidence : function (d) { return 1; },\n // the low side of the confidence interval\n y0 : function (d) { return plot.fn.y(d) - plot.fn.confidence(d) * plot.fn.sigma(d); },\n // the high side of the confidence interval\n y1 : function (d) { return plot.fn.y(d) + plot.fn.confidence(d) * plot.fn.sigma(d); }\n });\n\n plot.layers = {\n sigma : plot.viz.append('g').classed('series sigma', true),\n delta : plot.viz.append('g').classed('series delta', true)\n };\n\n plot.line = d3.svg.line()\n .x(function (d) { return plot.x(plot.fn.x(d)); })\n .y(function (d) { return plot.y(plot.fn.y(d)); });\n\n plot.area = d3.svg.area()\n .x(function (d) { return plot.x(plot.fn.x(d)); })\n .y0(function (d) { return plot.y(plot.fn.y0(d)); })\n .y1(function (d) { return plot.y(plot.fn.y1(d)); });\n\n plot.layer('delta', plot.layers.delta, {\n dataBind : function (data) {\n return this.selectAll('path')\n .data([data.series[0]]);\n },\n insert : function () {\n return this.append('path');\n },\n events : {\n merge : function () {\n this\n .attr('d', plot.withSeries(function () {\n return plot.line(plot.data.data);\n }))\n .style('stroke', function (series) {\n return plot.color(series.name);\n })\n }\n }\n });\n\n plot.layer('sigma', plot.layers.sigma, {\n dataBind : function (data) {\n return this.selectAll('path')\n .data([data.series[1]]);\n },\n insert : function () {\n return this.insert('path');\n },\n events : {\n merge : function () {\n this\n .attr('d', plot.withSeries(function () {\n return plot.area(plot.data.data);\n }))\n .style('fill', function (series) {\n return plot.color(series.name);\n })\n }\n }\n });\n\n plot\n .on('change:clip', function () {\n plot.wrap.selectAll('.series path')\n .style('clip-path', 'url(#' + plot.clipperId + ')');\n });\n },\n transform : function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n plot.setData(data);\n\n plot.withSeries(data.series[1], function () {\n var yDomain = _.map({\n min : 'y0',\n max : 'y1'\n }, function (yFn, minOrMax) {\n var setValue = plot.yDomain[minOrMax];\n return !_.isUndefined(setValue) ? setValue :\n d3[minOrMax](data.data.map(plot.fn[yFn]));\n });\n\n plot.setYDomain(yDomain);\n });\n }\n\n return data;\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('Inspector', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n plot.focus = options.focus;\n if (!plot.focus || !plot.focus.describeDatumUnder) {\n throw new Error('Inspector requires a focus option');\n }\n\n plot.g = plot.wrap.append('g').classed('inspector', true);\n\n plot.line = plot.g.append('line')\n .classed('vertical-bar', true);\n\n plot.layer('data', plot.g.append('g').classed('inspector-bar', true), {\n dataBind : function (data) {\n return this.selectAll('.datum')\n .data(data.y);\n },\n insert : function () {\n return this.insert('circle')\n .classed('datum', true)\n .attr('r', 4);\n },\n events : {\n merge : function () {\n this.attr('cy', _.identity);\n }\n }\n });\n\n var TIP_MARGIN = 10;\n var tipGroup = plot.g.append('g')\n .classed('tip-wrap', true)\n .translate(TIP_MARGIN, 0);\n var tipBox = tipGroup.append('rect')\n .classed('tip-box', true);\n var tip = tipGroup.append('text')\n .classed('tip', true)\n .translate(5, 3);\n\n plot.layer('tip', tip, {\n dataBind : function (data) {\n return this.selectAll('tspan.tip-row')\n .data(data.text);\n },\n insert : function () {\n return this.insert('tspan')\n .classed('tip-row', true)\n .attr('x', 0)\n .attr('dy', '1.1em')\n },\n events : {\n merge : function () {\n this.html(function (pair) {\n var name = pair[0],\n value = pair[1];\n return '' + name + ': ' +\n '' + value + ' plot.focus.w / 2;\n var boxWidth = Number(tipBox.attr('width'));\n var fullWidth = boxWidth + 2 * TIP_MARGIN;\n\n var currentX = currentTranslateX(this);\n var targetX = leftSide ? -(boxWidth + TIP_MARGIN) : TIP_MARGIN;\n\n // avoid jittering by scaling the duration by how far it has to go.\n // this makes the transition always move at the same speed\n var remainingPortion = Math.abs(targetX - currentX) / fullWidth;\n\n if (plot.g.style('display') === 'none') {\n // the inspector was previously hidden -- snap into position\n remainingPortion = 0;\n }\n\n this.duration(250 * remainingPortion)\n .ease('linear') // this has to be linear for the above math to work\n .attr('transform', 'translate(' + targetX + ', 0)');\n }\n }\n });\n\n plot.on('change:height', function () {\n plot.line.attr('y2', plot.h);\n });\n\n plot.svg()\n .on('mousemove', function () {\n plot.check();\n })\n .on('mouseleave', function () {\n plot.g.style('display', 'none');\n });\n },\n check : function () {\n var plot = this;\n var coords = d3.mouse(plot.wrap.node());\n var datum = plot.focus.describeDatumUnder(coords);\n plot.inspect(datum);\n },\n inspect : function (datum) {\n var plot = this;\n\n if (datum) {\n plot.g.translate(datum.x, 0);\n plot.draw(datum);\n }\n\n // do this after so the layers know when we're hidden\n plot.g.style('display', datum ? 'initial' : 'none');\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('Legend', {\n initialize : function (options) {\n var plot = this,\n bases;\n options = options || {};\n\n plot.color = options.color;\n if (!plot.color) {\n throw new Error('Legend requires a color option which is the ordinal scale for series color');\n }\n\n bases = {\n legend : plot.wrap.append('g').classed('legend', true)\n };\n\n plot.layer('series', bases.legend, {\n dataBind : function (data) {\n return this.selectAll('.legend-series')\n .data(data.series);\n },\n insert : function () {\n var group = this.append('g')\n .classed('legend-series', true);\n\n group.append('rect')\n .classed('legend-box', true)\n .attr('width', 10)\n .attr('height', 10);\n\n group.append('text')\n .classed('legend-text', true)\n .translate(20, 10);\n\n return group;\n },\n events : {\n merge : function () {\n this.select('rect')\n .style({\n fill : function (d) { return plot.color(d.name); },\n stroke : '#000',\n 'shape-rendering' : 'crispEdges'\n });\n\n this.select('text')\n .text(_.property('name'));\n\n // todo: this could be abstracted into a utility\n var lefts = [0]; // the first one starts at 0\n var SPACING = 20;\n this.each(function () {\n var left = lefts[lefts.length - 1];\n var next = left + this.getBBox().width + SPACING;\n lefts.push(next);\n\n d3.select(this).translate(left, 0);\n });\n }\n }\n });\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('Plot').extend('Line', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n plot.layers = {\n series : plot.viz.append('g').classed('series', true)\n };\n\n plot.line = d3.svg.line()\n .x(function (d) { return plot.x(plot.fn.x(d)); })\n .y(function (d) { return plot.y(plot.fn.y(d)); });\n\n plot.layer('series', plot.layers.series, {\n dataBind : function (data) {\n return this.selectAll('path')\n .data(data.series);\n },\n insert : function () {\n return this.insert('path');\n },\n events : {\n merge : function () {\n this\n .attr('d', plot.withSeries(function () {\n return plot.line(plot.data.data);\n }))\n .style('stroke', function (series) {\n return plot.color(series.name);\n });\n },\n exit : function () {\n this.remove();\n }\n }\n });\n\n plot\n .on('change:clip', function () {\n plot.layers.series.selectAll('path')\n .style('clip-path', 'url(#' + plot.clipperId + ')');\n });\n },\n transform : function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n plot.setData(data);\n\n var yDomain = ['min', 'max'].map(function (minOrMax) {\n var setValue = plot.yDomain[minOrMax];\n return !_.isUndefined(setValue) ? setValue :\n d3[minOrMax](data.series.map(plot.withSeries(function () {\n return d3[minOrMax](data.data.map(plot.fn.y));\n })));\n });\n\n plot.setYDomain(yDomain);\n }\n\n return data;\n }\n });\n\n})();\n","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('PieChart', {\n\n initialize: function () {\n var plot = this;\n\n plot.base.classed('PieChart', true);\n\n plot.layers = {\n legend : plot.wrap.append('g').classed('legend', true),\n slices : plot.wrap.append('g').classed('slices', true),\n labels : plot.wrap.append('g').classed('labels', true)\n };\n\n plot.layer('slices', plot.layers.slices, {\n dataBind: function (data) {\n return this.selectAll('.slice-group')\n .data(plot.pie(data.data));\n },\n insert: function () {\n var group = this.append('g').classed('slice-group', true);\n\n group.append('path')\n .classed('slice', true)\n .attr('fill', function (d, i) {\n return d.data.color;\n });\n\n return group;\n },\n events : {\n exit : function() {\n this.remove();\n },\n merge : function () {\n var slice = this;\n\n slice.select('.slice')\n .attr('d', plot.arc)\n .attr('fill', function (d) {\n return d.data.color;\n })\n .transition()\n .duration(750)\n .attrTween('d', function(d){\n var i = d3.interpolate(d.startAngle+0.1, d.endAngle);\n return function(t){\n d.endAngle = i(t);\n return plot.arc(d);\n }\n });\n }\n }\n });\n\n plot.layer('labels', plot.layers.labels, {\n dataBind: function (data) {\n return this.selectAll('.labels-group')\n .data(plot.pie(data.data));\n },\n insert: function () {\n var group = this.append('g').classed('labels-group', true);\n\n group.append('text')\n .classed('labels-value', true)\n .style(\"font-weight\",\"bold\")\n .attr('alignment-baseline', 'middle')\n .attr('text-anchor', 'middle')\n .attr('font-family', 'Gotham Medium, sans-serif');\n\n return group;\n },\n events : {\n exit : function() {\n this.remove();\n },\n merge : function () {\n var slice = this;\n\n function positionLabel(startAngle, endAngle, trigFn) {\n var radius = plot.data.data.length > 1 ? plot.r : 0;\n return radius/2 * trigFn((endAngle + startAngle)/2 - Math.PI / 2);\n }\n\n slice.select('.labels-value')\n .text(function (d) {return plot.data.fn.sliceLabel(d);})\n .attr('x', function(d){return positionLabel(d.startAngle, d.endAngle, Math.cos)})\n .attr('y', function(d){return positionLabel(d.startAngle, d.endAngle, Math.sin)});\n\n }\n }\n });\n\n plot.layer('legend', plot.layers.legend, {\n dataBind : function (data) {\n return this.selectAll('.legend-series')\n .data(data.data);\n },\n insert: function () {\n\n var boxSize = 15;\n\n var group = this.append('g')\n .classed('legend-series', true);\n\n group.append('rect')\n .classed('legend-box', true)\n .attr('width', boxSize)\n .attr('height', boxSize);\n\n group.append('text')\n .classed('legend-text', true)\n .attr('font-family', 'Gotham, sans-serif')\n .attr(\"dominant-baseline\", \"central\")\n .translate(20, boxSize/2);\n\n return group;\n },\n events : {\n exit : function() {\n this.remove();\n },\n merge : function () {\n this.select('rect')\n .style({fill : function (d) { return d.color }});\n\n this.select('text')\n .text(_.property('name'));\n\n // todo: this could be abstracted into a utility\n var lefts = [0]; // the first one starts at 0\n var SPACING = 25;\n this.each(function () {\n var left = lefts[lefts.length - 1];\n var next = left + this.getBBox().width + SPACING;\n lefts.push(next);\n\n d3.select(this).translate(function(d,i){\n return [plot.width() / 2 - left + SPACING/2, plot.height() - 30]});\n });\n }\n }\n });\n\n function onDimensionChange() {\n var chartSpacing = 20;\n var centerX = plot.width() / 2,\n centerY = plot.height() / 2 - chartSpacing;\n\n plot.layers.slices\n .translate(centerX, centerY);\n\n plot.layers.labels\n .translate(centerX, centerY);\n }\n\n plot.on(\"change:height\", onDimensionChange);\n plot.on(\"change:width\", onDimensionChange);\n },\n transform: function (data) {\n\n if(data !== this.data) {\n this.data = data;\n\n _.defaults(data, {\n radius : 100,\n data : []\n });\n\n this.data = data;\n this.r = this.data.radius;\n\n this.arc = d3.svg.arc()\n .outerRadius(this.r);\n\n this.pie = d3.layout.pie()\n .sort(null)\n .value(function (d) {\n return d.value;\n });\n }\n\n return data;\n\n }\n });\n\n})();","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('ReturnsPerformanceChart', {\n initialize : function (options) {\n var plot = this;\n options = options || {};\n\n _.defaultsDeep(options, {\n barThickness : 30,\n axisWidth : 25\n });\n var AXIS_WIDTH = options.axisWidth;\n var LABEL_WIDTH_RATIO = 0.05;\n var DEFAULT_PAGE_LENGTH = 100;\n var SIZE_ADVICE_COLOR = '#7C0A40';\n var PLOT_LINE_BAR_COLOR = '#DBDBDB';\n var SIZE_ADVICE_WIDTH = 7 ;\n var SIZE_ADVISE_THICKNESS = 15;\n var Y_MARKER_COORDINATE = 47.5;\n var MARKER_ADJUSTMENT = 6;\n var CONST_ADDITIONAL_HEIGHT = 100;\n var CARET_DOWN = '\\uf0d7';\n var CARET_UP = '\\uf0d8';\n var CROSS_ICON = '\\uf00d';\n\n var THICKNESS = 'height';\n var LENGTH = 'width';\n var PADDING = 20;\n var HALF_THICKNESS = options.barThickness / 2;\n var KEY_WIDTH = 10;\n\n plot.bucket = d3.scale.ordinal();\n plot.value = d3.scale.linear();\n\n function getAllowedLength(label) {\n return label === 'Two' ? 16 : 32;\n }\n\n plot.layers = {\n labels : {\n performanceCategoryLabel : plot.wrap.append('g').classed('performanceCategoryLabel',true),\n dataNameLabel : plot.wrap.append('g').classed('dataNameLabel', true),\n dataTitleLabel : plot.wrap.append('g').classed('dataTitleLabel', true),\n labelFour:plot.wrap.append('g').classed('labelFour',true),\n },\n bars: {\n plotLine:plot.wrap.append('g').classed('plotLine',true)\n }\n };\n\n function setYTranslate(bucketPos) {\n return bucketPos + AXIS_WIDTH;\n }\n\n function appendText(group, elem) {\n return group.append(elem).classed('bar-label-text', true)\n .attr('alignment-baseline', 'middle')\n .attr('font-family', 'Gotham, sans-serif')\n }\n\n plot.layer('performanceCategoryLabel', plot.layers.labels.performanceCategoryLabel, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n group.append('rect');\n group.on(\"mouseover\", handleMouseOver)\n .on(\"mouseout\",handleMouseOut)\n .on(\"click\",handleOnClick);\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var additionalWidth = 0;\n var includeWidth = false;\n that.translate(origDatum(function (item, index) {\n var bucketPos = byBucket.apply(this, arguments);\n if(includeWidth){\n additionalWidth += CONST_ADDITIONAL_HEIGHT;\n }\n includeWidth = item.isSizeAdviceEnable;\n return [0, setYTranslate(bucketPos) + additionalWidth];\n }));\n\n var rect = that.select('rect');\n rect.style(THICKNESS, HALF_THICKNESS)\n .style(LENGTH, KEY_WIDTH)\n .attr('x',HALF_THICKNESS)\n .attr('y',HALF_THICKNESS/2)\n .attr('class',function (datumRankPair) {\n return plot.fn.keyColor(datumRankPair[0].performanceCategoryLabel);\n });\n }\n }\n });\n\n plot.layer('dataNameLabel', plot.layers.labels.dataNameLabel, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n group.on(\"mouseover\", handleMouseOver)\n .on(\"mouseout\",handleMouseOut)\n .on(\"click\",handleOnClick);\n var text = group.append('text');\n text.append(\"title\");\n appendText(text, 'tspan');\n\n appendText(group, 'text').classed('caretClass', true).append('tspan')\n .classed('fa',true).classed('display-none',true)\n .attr('alignment-baseline', 'middle')\n .text(CARET_DOWN);\n\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var allowedLength = getAllowedLength('Two');\n var labelXPos = labelWidth(plot.w);\n\n var text = that.select('text');\n\n text.select('title').text(function(dataRankPair){\n return plot.fn.dataNameLabel(dataRankPair[0]);\n });\n\n var additionalWidth = 0;\n var includeWidth = false;\n\n that.select('.caretClass').attr(\"id\", function (dataRankPair) {\n return \"caret\"+ dataRankPair[1];\n });\n\n that.translate(origDatum(function (item, index) {\n if(!item.isSizeAdviceEnable && !_.isUndefined(item.sizeAdvice)) {\n d3.select(this).selectAll('.caretClass').select('tspan')\n .attr('x', d3.select('svg').selectAll('.bar-label-text').node().getBBox().width + PADDING / 2)\n .attr('y', HALF_THICKNESS)\n .classed('display',true)\n .style(\"cursor\", \"pointer\");\n }\n var bucketPos = byBucket.apply(this, arguments);\n if(includeWidth){\n additionalWidth += CONST_ADDITIONAL_HEIGHT;\n }\n includeWidth = item.isSizeAdviceEnable;\n return [labelXPos + PADDING, setYTranslate(bucketPos) + additionalWidth]\n }));\n\n text.select('tspan')\n .text(function (datumRankPair) {\n var rankLabel = plot.fn.dataNameLabel(datumRankPair[0]);\n if (!plot.data.dontRank) {\n rankLabel = datumRankPair[1] + '. ' + rankLabel;\n }\n return rankLabel;\n })\n .attr('y', HALF_THICKNESS)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness)\n .attr(LENGTH, labelWidth(plot.w)*2)\n .each(wrapText(allowedLength));\n }\n }\n });\n\n function handleMouseOver(dataRankPair) {\n if(!_.isUndefined(plot.fn.sizeAdvice(dataRankPair[0]))) {\n d3.select(this).select('text').select('tspan').style(\"cursor\", \"pointer\");\n }\n }\n\n function handleMouseOut(dataRankPair) {\n if(!_.isUndefined(plot.fn.sizeAdvice(dataRankPair[0]))) {\n d3.select(this).select('g').style(\"cursor\", \"default\");\n }\n }\n\n function handleOnClick(dataRankPair) {\n if(!plot.fn.isSizeAdviceEnable(dataRankPair[0]) && (!_.isUndefined(plot.fn.sizeAdvice(dataRankPair[0])))) {\n d3.select('svg').select('#caret' + dataRankPair[1]).select('tspan').text(CARET_UP);\n d3.select(this).datum()[0].isSizeAdviceEnable = true;\n plot.fn.changeChartHeight(dataRankPair);\n } else {\n if(plot.fn.isSizeAdviceEnable(dataRankPair[0])){\n d3.select('svg').select('#caret' + dataRankPair[1]).select('tspan').text(CARET_DOWN);\n closeSizeAdviceTip(dataRankPair);\n }\n }\n }\n\n\n plot.layer('dataTitleLabel', plot.layers.labels.dataTitleLabel, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n group.on(\"mouseover\", handleMouseOverStyleName)\n .on(\"mouseout\",handleMouseOutFromStyleName)\n .on(\"click\",handleMouseClickOverStyleName);\n var text = group.append('text');\n text.append('title');\n appendText(text, 'tspan');\n\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var labelXPos = labelWidth(plot.w) * 3 + PADDING;\n var allowedLength = getAllowedLength('Three');\n var additionalWidth = 0;\n var includeWidth = false;\n\n that.translate(origDatum(function (item, index) {\n var bucketPos = byBucket.apply(this, arguments);\n if(includeWidth){\n additionalWidth += CONST_ADDITIONAL_HEIGHT;\n }\n includeWidth = item.isSizeAdviceEnable;\n return [labelXPos + PADDING * 2, setYTranslate(bucketPos) + additionalWidth];\n }));\n\n\n var text = that.select('text');\n\n text.select('title').text(function(datumRankPair){\n return plot.fn.dataTitleLabel(datumRankPair[0]);\n });\n\n text.select('tspan')\n .text(function (datumRankPair) {\n return plot.fn.dataTitleLabel(datumRankPair[0]);\n })\n .attr('id',function (datumRankPair) {return 'dataLabel' + datumRankPair[1];})\n .attr('y', HALF_THICKNESS)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness)\n .attr(LENGTH, labelWidth(plot.w) * 4)\n .each(wrapText(allowedLength));\n }\n }\n });\n\n function handleMouseOverStyleName(datumRankPair) {\n if(plot.data.isProductDetailAccessible) {\n d3.select(this).select('text').select('tspan').style(\"cursor\", \"pointer\");\n d3.select(this).select('#dataLabel'+ datumRankPair[1]).attr('text-decoration','underline');\n }\n }\n\n function handleMouseOutFromStyleName(datumRankPair) {\n d3.select(this).select('text').select('tspan').style(\"cursor\", \"default\");\n d3.select(this).select('#dataLabel'+ datumRankPair[1]).attr('text-decoration','none');\n }\n\n function handleMouseClickOverStyleName(datumRankPair) {\n if (plot.data.isProductDetailAccessible) {\n showProductDetail(datumRankPair);\n }\n }\n\n plot.layer('labelFour', plot.layers.labels.labelFour, {\n dataBind : function (data) {\n return this.selectAll('.label-group')\n .data(data.page);\n },\n insert : function () {\n var group = this.append('g').classed('label-group', true);\n group.on(\"mouseover\", handleMouseOver)\n .on(\"mouseout\",handleMouseOut)\n .on(\"click\",handleOnClick);\n var text = group.append('text');\n text.append(\"title\");\n appendText(text, 'tspan');\n\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var that = this;\n var allowedLength = getAllowedLength();\n var text = that.select('text');\n var additionalWidth = 0;\n var includeWidth = false;\n\n text.select('title').text(function(dataRankPair){\n return (dataRankPair[0].performanceCategoryLabel !== \"\") ? plot.fn.performanceCategoryLabel(dataRankPair[0])+'%' : \"\";\n });\n\n text.select('tspan')\n .text(function (datumRankPair) {\n var rankLabel = (datumRankPair[0].performanceCategoryLabel !== \"\") ? plot.fn.performanceCategoryLabel(datumRankPair[0])+'%' : \"\";\n return rankLabel;\n })\n .attr('x', 0)\n .attr('y', HALF_THICKNESS)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness)\n .attr(LENGTH, labelWidth(plot.w) * 4)\n .each(wrapText(allowedLength));\n\n that.translate(origDatum(function (item, index) {\n var bucketPos = byBucket.apply(this, arguments);\n var labelXPos = labelWidth(plot.w) * 4 + PADDING;\n if(_.isUndefined(plot.fn.dataTitleLabel(item))){\n labelXPos = labelWidth(plot.w) * 3 - PADDING;\n }\n if(includeWidth){\n additionalWidth += CONST_ADDITIONAL_HEIGHT;\n }\n includeWidth = item.isSizeAdviceEnable;\n return [labelXPos + PADDING, setYTranslate(bucketPos) + additionalWidth]\n }));\n\n }\n }\n });\n\n plot.layer('plotLine', plot.layers.bars.plotLine,{\n dataBind : function (data) {\n return this.selectAll('.bucket')\n .data(data.page);\n },\n insert : function () {\n\n var group = this.append('g').classed('bucket', true);\n var path = group.append('g').append('path').classed('indicator',true).attr({\n 'stroke' :\"rgba(0,0,0,.2)\",\n 'fill':'none'\n });\n appendText(group, 'text').attr('font-family', 'GothamMedium, sans-serif');\n group.append('text').style('cursor','pointer').classed('cross',true).append('tspan')\n .classed('fa',true)\n .attr('alignment-baseline', 'middle')\n .text(CROSS_ICON);\n var labelGroup = group.append('g');\n appendText(labelGroup, 'text').classed('runs-small-text', true);\n appendText(labelGroup, 'text').classed('runs-true-text', true);\n appendText(labelGroup, 'text').classed('runs-large-text', true);\n\n var transactionLabel = group.append('g');\n appendText(transactionLabel, 'text').classed('transactions',true);\n appendText(transactionLabel, 'text').classed('navigate-product-detail',true);\n appendText(transactionLabel,'text')\n .classed('info',true).classed('fa',true)\n .text(function(d) { return '\\uf05a' });\n group.append('rect').classed('bar', true);\n return group;\n },\n events : {\n exit : function () {\n this.remove();\n },\n merge : function () {\n var bucket = this;\n var labelXPos = labelWidth(plot.w);\n var fullBarLength = plot.value.range()[1];\n var popoverWidth = fullBarLength + 30;\n var additionalWidth = 0;\n var includeWidth = false;\n var sizeAdviceLabelsYCor = 40;\n var leftPadding = 15;\n var yCoordinate = 15;\n\n bucket.translate(origDatum(function (item, index) {\n var bucketPos = byBucket.apply(this, arguments);\n if(includeWidth){\n additionalWidth += CONST_ADDITIONAL_HEIGHT;\n }\n includeWidth = item.isSizeAdviceEnable;\n return [labelXPos + PADDING, setYTranslate(bucketPos) + PADDING * 1.7 + additionalWidth];})\n )\n .style('display',function (dataRankPair) {\n return (plot.fn.isSizeAdviceEnable(dataRankPair[0])) ? \"block\":\"None\";\n });\n\n var barBg = bucket.select('.bar')\n .classed('even', true)\n .attr(THICKNESS, 10)\n .attr(LENGTH, fullBarLength)\n .style('fill', PLOT_LINE_BAR_COLOR)\n .translate(leftPadding, sizeAdviceLabelsYCor + 10);\n\n bucket.select('.indicator').attr({LENGTH:fullBarLength + 30,\n 'd':'M29,-11 L12,0 -8,0 -8,100 '+ popoverWidth +',100 ' + popoverWidth +',0 48,0 z',\n });\n\n bucket.select('.bar-label-text')\n .text(function (datumRankPair) {\n var rankLabel = plot.fn.dataTitleLabel(datumRankPair[0]);\n return rankLabel;})\n .attr('x', leftPadding - 5)\n .attr('y', yCoordinate)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness);\n\n bucket.select('.cross').select('tspan').attr('x',fullBarLength).attr('y',yCoordinate).on(\"click\",closeSizeAdviceTip);\n\n bucket.select('.runs-small-text').text('RUNS SMALL')\n .attr('x', leftPadding - 5)\n .attr('y', sizeAdviceLabelsYCor)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness);\n\n bucket.select('.runs-true-text').text('TRUE TO SIZE')\n .attr('x', fullBarLength / 2 - 30)\n .attr('y', sizeAdviceLabelsYCor)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness);\n\n bucket.select('.runs-large-text').text('RUNS LARGE')\n .attr('x', fullBarLength - 60)\n .attr('y', sizeAdviceLabelsYCor)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness);\n\n bucket.select('.transactions').text('Based on 100s of transactions')\n .attr('x', leftPadding - 5)\n .attr('y', sizeAdviceLabelsYCor * 2 + PADDING / 2)\n .classed('no-border', true)\n .attr(THICKNESS, options.barThickness);\n\n bucket.select('.navigate-product-detail').text('More about this product')\n .attr('x', fullBarLength - 120)\n .attr('y', sizeAdviceLabelsYCor * 2 + PADDING / 2)\n .classed('no-border', true)\n .classed('display-none',!plot.data.isProductDetailAccessible)\n .attr(THICKNESS, options.barThickness)\n .on(\"click\",showProductDetail);\n\n bucket.select('.info')\n .attr('x', bucket.select('.transactions').node().getBBox().width + PADDING)\n .attr('y', sizeAdviceLabelsYCor * 2 + PADDING / 2)\n\n var group = bucket.selectAll('.bar-grp')\n .data(plot.markers);\n\n group.exit().remove();\n\n var newGroups = group.enter()\n .append('g').classed('bar-grp', true);\n\n newGroups.append('rect')\n .classed('marker', true);\n\n var temp = plot;\n temp.value.domain([0, 4]);\n\n group.select('.marker')\n .attr(THICKNESS, SIZE_ADVISE_THICKNESS)\n .attr(LENGTH, SIZE_ADVICE_WIDTH / 2)\n .attr('fill', PLOT_LINE_BAR_COLOR)\n .translate(function (item, index) {\n return [temp.value(index) + 2 * MARKER_ADJUSTMENT, Y_MARKER_COORDINATE];\n });\n\n newGroups.append('rect')\n .classed('sizeAdvice', true);\n\n group.select('.sizeAdvice')\n .attr(THICKNESS, SIZE_ADVISE_THICKNESS)\n .attr(LENGTH, SIZE_ADVICE_WIDTH)\n .attr('fill', SIZE_ADVICE_COLOR)\n .translate(function (d, i, j) {\n if(plot.data.page[j][0].isSizeAdviceVisible) {\n return [temp.value((plot.data.page[j][0].sizeAdvice + 2)) + 2 * MARKER_ADJUSTMENT, Y_MARKER_COORDINATE];\n }else return [0,Y_MARKER_COORDINATE];\n });\n }\n }\n });\n\n function closeSizeAdviceTip(dataRankPair) {\n d3.select(this).select('.bucket').remove();\n d3.select('svg').select('#caret' + dataRankPair[1]).select('tspan').text(CARET_DOWN);\n _.forEach(plot.data.data,function (value) {\n if(dataRankPair[1] == value[1]) {\n value[0].isSizeAdviceEnable = false;\n }\n });\n handleMouseOut(dataRankPair);\n plot.fn.changeChartHeight(dataRankPair);\n }\n // We wrap the original datum in an array with its rank.\n // This augments the given function to just get the datum\n function origDatum(fn) {\n return function (datumRankPair, i, j, k) {\n return fn.call(this, datumRankPair[0], i, j, k);\n };\n }\n\n // TODO - move this to a common file\n function wrapText(limitChar) {\n return function(){\n var self = d3.select(this),\n text = self.text();\n\n if(text.length > limitChar){\n self.text(_.truncate(text,{\n 'length': limitChar\n }));\n }\n };\n }\n\n function byBucket(item, index) {\n return plot.bucket(index);\n }\n\n function labelWidth(plotWidth){\n return (plotWidth - KEY_WIDTH) * LABEL_WIDTH_RATIO;\n }\n\n function plotLayers() {\n _.each(plot.layers.labels,function (label) {\n label.draw(plot.data);\n });\n plot.layers.bars.plotLine.draw(plot.data);\n }\n\n function calcRange() {\n var labelXWidth = labelWidth(plot.w) * 7;\n var sizeAdviceCount =0;\n _.forEach(plot.data.data, function (value) { if (value[0].isSizeAdviceEnable) {\n sizeAdviceCount++;\n }\n });\n plot.bucket.rangeRoundBands([0, plot.h - AXIS_WIDTH - (CONST_ADDITIONAL_HEIGHT * sizeAdviceCount)], 0, 0.4);\n // Draw labels so we can accurately calculate their maximum size.\n // This needs to be done AFTER setting the bucket.range to avoid an exception.\n plot.value.range([0, Math.max((plot.w - labelXWidth - PADDING), 0)]);\n plotLayers();\n plot.layers.labels.labelFour.translate(labelXWidth, 0);\n d3.select(\"svg\").select(\"g\").translate(0, (plot.data.page.length !== DEFAULT_PAGE_LENGTH) ? - 2 * PADDING : - (3 * PADDING + PADDING / 2));\n }\n\n function showProductDetail(datumRankPair){\n var styleId = datumRankPair[0].dataNameLabel;\n plot.fn.navigateProductDetailPage(styleId);\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n\n valuesArray : function (item, edge) {\n if(edge === 'leftEdge')\n return this.fn.leftEdge.map(function (fn) {\n return fn(item);\n });\n else if(edge === 'rightEdge')\n return this.fn.rightEdge.map(function (fn) {\n return fn(item);\n });\n else return this.fn.returnVariationData.map(function (fn) {\n return fn(item);\n });\n },\n transform : function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n _.defaults(data, {\n fn : {},\n pageSize : data.data.length,\n currentPage : 1\n });\n plot.fn = _.defaults(data.fn, {\n performanceCategoryLabel : _.property('performanceCategoryLabel'),\n dataNameLabel : _.property('dataNameLabel'),\n returnVariationData : _.property('returnVariationData'),\n leftEdge : _.property('leftEdge'),\n rightEdge : _.property('rightEdge'),\n sizeAdvice: _.property('sizeAdvice'),\n color : [\"#7C0A40\"]\n });\n _.defaults(data.fn, {\n valueLabel : data.fn.valueLabel,\n changeHeight: data.fn.changeHeight\n });\n if (!_.isArray(plot.fn.returnVariationData)) {\n plot.fn.returnVariationData = [plot.fn.returnVariationData];\n }\n if (!_.isArray(plot.fn.leftEdge)) {\n plot.fn.leftEdge = [plot.fn.leftEdge];\n }\n if (!_.isArray(plot.fn.rightEdge)) {\n plot.fn.rightEdge = [plot.fn.rightEdge];\n }\n if (!_.isArray(plot.fn.valueLabel)) {\n plot.fn.valueLabel = [plot.fn.valueLabel];\n }\n if(!_.isArray(plot.fn.color)){\n plot.fn.color = [plot.fn.color];\n }\n\n var sumOfAllValues = function (item, edge) {\n return _.sum(plot.valuesArray(item, edge));\n };\n\n var sumOfLeftEdge = function(item) {\n return sumOfAllValues(item, 'leftEdge');\n };\n\n var sumOfRightEdge = function(item) {\n return sumOfAllValues(item, 'rightEdge');\n };\n\n var leftMin = d3.min(data.data, sumOfLeftEdge);\n var rightMax = d3.max(data.data, sumOfRightEdge);\n var maxIntermediate = Math.abs(leftMin) > rightMax ? Math.abs(leftMin) : rightMax;\n\n /*While refining maxIntermediate threshold should be kept as high as 0.015 in the least as below that the number is rounded off to\n a number less than or equal to one and then since it is tried to derive five ticks out of it markers repeat. Same is true for\n the value and that too can't go lower than 0.02 for the same reason.*/\n var max = maxIntermediate < 0.02 ? 0.02 : maxIntermediate;\n\n plot.value.domain([-1 * max, max]).nice();\n\n // setup a lazily evaluated chain of transformations\n var dataChain = _(data.data);\n\n // Hold onto the original ranking number, or else it'd be erased when filtering or paging\n dataChain = dataChain.map(function (d, i) {\n return [d, i + 1];\n });\n\n // Support for arbitrary filtering\n if (data.fn.filter) {\n dataChain = dataChain.filter(function (item, i) {\n return data.fn.filter(item[0], i);\n });\n }\n\n // Finally evaluate the chain of transformations above to a concrete values\n data.data = dataChain.value();\n\n data.page = data.data.slice((data.currentPage - 1) * data.pageSize, data.currentPage * data.pageSize);\n\n plot.bucket.domain(d3.range(data.page.length));\n\n plot.data = data;\n\n plot.markers=[-2, -1, 0, 1, 2];\n }\n\n return data;\n }\n });\n\n})();","(function () {\n 'use strict';\n\n d3.chart('ChartBase').extend('SizeAdviceChart', {\n initialize: function (options) {\n var plot = this;\n options = options || {};\n\n _.defaultsDeep(options, {\n horizontal: true,\n barSpacing: 0,\n dashedLabelBoxes: false,\n zebraLabels: false,\n barThickness: 10\n });\n\n var thickness = 'height';\n var length = 'width';\n var sizeAdviceColor = '#7C0A40';\n var plotLineBarColor = '#DBDBDB';\n var sizeAdviseWidth = 7;\n var sizeAdviseThickness = 15;\n var yBarOffset = 5;\n var yMarkerCoordinate = -3;\n var markerAdjustment = -3;\n\n plot.layers = {\n plotLine: plot.wrap.append('g').classed('plotLine', true)\n };\n\n plot.bucket = d3.scale.ordinal();\n plot.value = d3.scale.linear();\n\n\n // We wrap the original datum in an array with its rank.\n // This augments the given function to just get the datum\n function origDatum(fn) {\n return function (datumRankPair, i, j, k) {\n return fn.call(this, datumRankPair[0], i, j, k);\n };\n }\n\n function byBucket(item, index) {\n return plot.bucket(index);\n }\n\n plot.layer('plotLine', plot.layers.plotLine, {\n dataBind: function (data) {\n return this.selectAll('.bucket')\n .data(data.page);\n },\n insert: function () {\n var group = this.append('g').classed('bucket', true);\n group.append('rect').classed('bar', true);\n return group;\n },\n events: {\n exit: function () {\n this.remove();\n },\n merge: function () {\n var bucket = this;\n\n bucket.translate(origDatum(function (item) {\n var bucketPos = byBucket.apply(this, arguments) + yBarOffset;\n return [0, bucketPos];\n }));\n\n\n var barBg = bucket.select('.bar')\n .classed('even', true)\n .attr(thickness, options.barThickness)\n .attr(length, plot.w)\n .style('fill', plotLineBarColor);\n\n var group = bucket.selectAll('.bar-grp')\n .data(plot.markers);\n\n group.exit().remove();\n\n var newGroups = group.enter()\n .append('g').classed('bar-grp', true);\n\n newGroups.append('rect')\n .classed('marker', true);\n\n group.select('.marker')\n .attr(thickness, sizeAdviseThickness)\n .attr(length, sizeAdviseWidth / 2)\n .attr('fill', plotLineBarColor)\n .translate(function (item, index) {\n return [plot.value(index) === 0 ? 0 : (plot.value(index) + markerAdjustment), yMarkerCoordinate];\n });\n\n newGroups.append('rect')\n .classed('sizeAdvice', true);\n\n group.select('.sizeAdvice')\n .attr(thickness, sizeAdviseThickness)\n .attr(length, sizeAdviseWidth)\n .attr('fill', sizeAdviceColor)\n .translate(function (d, i, j) {\n var markerIndex = plot.data.page[j][0].sizeAdvice + 2;\n return [plot.value(markerIndex) === 0 ? 0 : plot.value(markerIndex) + 2 * markerAdjustment, yMarkerCoordinate];\n });\n }\n }\n });\n\n function calcRange() {\n var spacing = options.barSpacing;\n\n plot.bucket.rangeRoundBands([0, plot.h], spacing, 0);\n // Draw labels so we can accurately calculate their maximum size.\n // This needs to be done AFTER setting the bucket.range to avoid an exception.\n plot.layer('plotLine').translate(0, 0);\n\n plot.value.range([0, Math.max((plot.w), 0)]);\n }\n\n plot.on('change:width', calcRange)\n .on('change:height', calcRange)\n .on('change:data', calcRange);\n },\n\n valuesArray: function (item) {\n return this.fn.value.map(function (fn) {\n return fn(item);\n });\n },\n transform: function (data) {\n var plot = this;\n\n if (data !== plot.data) {\n _.defaults(data, {\n fn: {}\n });\n plot.fn = _.defaults(data.fn, {\n value: _.property('sizeAdvice'),\n color: [\"#ABABAB\"]\n });\n\n if (!_.isArray(plot.fn.value)) {\n plot.fn.value = [plot.fn.value];\n }\n if (!_.isArray(plot.fn.color)) {\n plot.fn.color = [plot.fn.color];\n }\n\n // developer errors\n if (plot.fn.value.length > 1) {\n if (!_.isArray(plot.fn.stackLabel) || plot.fn.stackLabel.length !== plot.fn.value.length) {\n throw new Error('plot.fn.value has more than 1 function yet plot.fn.stackLabel is not an array of the same length');\n }\n }\n\n plot.value.domain([0, 4]);\n\n // setup a lazily evaluated chain of transformations\n var dataChain = _(data.data);\n\n // Hold onto the original ranking number, or else it'd be erased when filtering or paging\n dataChain = dataChain.map(function (d, i) {\n return [d, i + 1];\n });\n\n // Finally evaluate the chain of transformations above to a concrete values\n data.data = dataChain.value();\n data.page = data.data;\n plot.bucket.domain(d3.range(data.page.length));\n\n plot.data = data;\n plot.markers = [-2, -1, 0, 1, 2];\n }\n\n return data;\n }\n })\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.News')\n .controller('NewsCtrl', NewsCtrl);\n\n // @ngInject\n function NewsCtrl($injector, $state, Nav, LookAndFeel, AnalyticsHelper, LookAndFeelType) {\n var vm = this;\n\n vm.sendViewChangeEvent = function () {\n AnalyticsHelper.sendViewChangeEvent(LookAndFeelType.Analytics);\n $state.go(vm.firstMenuItem);\n };\n\n\n // TODO - Need to solve this by separating menu items\n //setting lookAndFeel to Analytics so that only analytics menu items would be seen on UI\n LookAndFeel.setToAnalytics();\n var analyticsFirstMenuItem = _.find(Nav.mainMenu(), function (menuItem) {\n return $injector.invoke(menuItem.canAccess);\n });\n vm.firstMenuItem = analyticsFirstMenuItem && analyticsFirstMenuItem.state.name();\n\n //setting lookAndFeel back to Brand Metrics so that only brand metrics menu items would be seen on UI\n LookAndFeel.setToBrandMetrics();\n\n }\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Nav')\n .controller('PageWithMenuCtrl', PageWithMenuCtrl);\n\n // @ngInject\n function PageWithMenuCtrl(LookAndFeel) {\n LookAndFeel.setToBrandMetrics();\n }\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ProductDetail')\n .controller('ProductDetailCtrl', ProductDetailCtrl)\n .constant(\"INCHES_TO_CM\", 0.39370)\n .constant(\"KG_TO_LB\", 2.20462);\n\n // @ngInject\n function ProductDetailCtrl($stateParams, $window, $timeout, $filter, styleSummary, styleSizeAdvice, brands, attributeValues,\n topBrands, categoryTopBrands, sizeAdvice, consumerHeight, consumerWeight, consumerAgeRange,\n INCHES_TO_CM, KG_TO_LB, ColorCode, ChartService, Filter) {\n\n var vm = this;\n vm.brands = brands;\n vm.styleSummary = {};\n angular.copy(styleSummary, vm.styleSummary);\n vm.styleSummary.styleId = $stateParams.styleId;\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n vm.offsets = [];\n vm.attributeValues = filterAttributeValues(attributeValues);\n vm.selectedCategoryTopBrands = getBrandsList(categoryTopBrands);\n vm.selectedTopBrands = getBrandsList(topBrands);\n\n vm.previousState = $stateParams.previousState;\n vm.selectedActivity = $stateParams.transaction;\n vm.selectedRegion = $stateParams.regionDescription;\n\n vm.goBack = function(){\n $window.history.back();\n };\n\n vm.styleSummary.sizeAdvice = styleSizeAdvice && styleSizeAdvice.sizeAdvice;\n vm.returnVariation = (vm.styleSummary.returnVariation) ? (vm.styleSummary.returnVariation * 100).toFixed(1) : (_.isEmpty(styleSummary)) ? undefined : \"\";\n vm.styleSummary.colorClass = ColorCode.getColor(vm.returnVariation);\n var colorClassArr = vm.styleSummary.colorClass.split(\"-\");\n vm.keyClassName = colorClassArr.length > 3 ? colorClassArr[0] + \"-\" + colorClassArr[1] : colorClassArr[0];\n\n vm.sizeAdvice = sizeAdvice && sizeAdvice[0];\n vm.chartObject = createChartObject();\n vm.headers = [\"\", \"runsSmall\", \"trueToSize\", \"runsLarge\"];\n\n vm.unfilteredData = _(vm.chartObject).map(function(data) {\n return {\n styleName : data.styleName,\n offsetChart: ChartService.getSizeAdviceChart([{sizeAdvice: data.sizeAdvice}])\n }\n }).value();\n\n vm.consumerDemographicObject = {\n ageRange: consumerAgeRange,\n heightLow: _.filter(consumerHeight, {unit: 'in'}),\n weightLow: _.filter(consumerWeight, {unit: 'lb'})\n };\n\n vm.consumerDemographicSummary = getDemographicsSummary(vm.consumerDemographicObject);\n\n if($stateParams.previousState === 'Fit Consistency'){\n vm.styleSummary.styleName = styleSizeAdvice.styleTitle;\n vm.styleSummary.department = vm.sizeAdvice && vm.sizeAdvice.department;\n vm.styleSummary.category = vm.sizeAdvice && vm.sizeAdvice.category;\n }\n\n function getDemographicsSummary(demographicObject){\n var finalArr = [];\n _.forOwn(demographicObject, function(response) {\n if(response && response.length>0){\n var maxPercentObj = _.maxBy(response, 'percent');\n if(maxPercentObj.ageRange){\n maxPercentObj['range'] = 'age ' + maxPercentObj.ageRange;\n } else if(maxPercentObj.heightLow){\n maxPercentObj['range'] = convertUnits(maxPercentObj.unit, maxPercentObj.heightLow);\n } else if(maxPercentObj.weightLow){\n maxPercentObj['range'] = convertUnits(maxPercentObj.unit, maxPercentObj.weightLow);\n } else {\n maxPercentObj['range'] = '';\n }\n maxPercentObj['percent'] = (maxPercentObj['percent'] * 100).toFixed(1);\n finalArr.push(maxPercentObj);\n }\n });\n return finalArr;\n }\n\n function convertUnits(unit, value){\n switch(unit){\n case 'in': return value + ' ' + unit + ' / ' + (value/INCHES_TO_CM).toFixed(1) + ' cm';\n break;\n case 'cm': return (value*INCHES_TO_CM).toFixed(1) + ' ' + unit + ' / ' + value + ' cm';\n break;\n case 'kg': return value + ' lb / ' + (value*KG_TO_LB).toFixed(1) + unit;\n break;\n case 'lb': return (value/KG_TO_LB).toFixed(1) + ' kg / ' + value + ' ' + unit;\n break;\n }\n }\n\n function filterAttributeValues(collection){\n if(_.isArray(collection)){\n var hash = {};\n collection.forEach(function (item) {\n if (hash[item.attribute]) {\n hash[item.attribute].attributeValue += ', ' + item.attributeValue;\n }\n else {\n hash[item.attribute] = item;\n }\n });\n return _.orderBy(_.values(hash), 'displayOrder');\n }\n }\n\n function createChartObject(){\n var finalArr = [];\n if(!_.isUndefined(vm.styleSummary.sizeAdvice)) {\n finalArr.push({\n styleName: 'This Style',\n sizeAdvice: vm.styleSummary.sizeAdvice\n });\n }\n if (vm.sizeAdvice && !_.isUndefined(vm.sizeAdvice.sizeAdvice)) {\n finalArr.push({\n styleName: 'Your ' + vm.sizeAdvice.department + \"/\" + vm.sizeAdvice.category,\n sizeAdvice: vm.sizeAdvice.sizeAdvice\n });\n }\n return finalArr;\n }\n\n function getBrandsList(arr){\n var newArr = [];\n arr.forEach(function (res) {\n var selectedBrand = _.find(vm.brands, {key: res.affinitybrandKey});\n if(selectedBrand){\n res['name'] = selectedBrand.name;\n newArr.push(res);\n }\n });\n return newArr;\n }\n\n vm.getFilterSummaryText = function(){\n var pageName = 'productDetail';\n var params = {\n 'activity': $filter('titleCase')(vm.selectedActivity),\n 'region': vm.selectedRegion\n };\n return Filter.getFilterSummaryText(pageName, params);\n }\n\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.ProductDetail')\n .factory('ProductDetail', ProductDetail);\n\n // @ngInject\n function ProductDetail($q, Api, BrandReports, ApiFallback, ApiStatusCodes, BRAND_URL, STYLE_URL) {\n\n var productDetailFallBack = ApiFallback.createFallback(isStatusCodeHandled, handleNotFoundError);\n\n function handleNotFoundError() {\n return $q.resolve();\n }\n\n function isStatusCodeHandled(statusCode) {\n return _.eq(statusCode, ApiStatusCodes.NotFound);\n }\n\n return {\n selectedBrandKey : selectedBrandKey,\n getProductStyleSummary: productStyleSummary,\n getProductStyleSizeAdvice: productStyleSizeAdvice,\n getPurchaseAttributeStyle: purchaseAttributeStyle,\n getPurchaseAffinityTopBrands: purchaseAffinityTopBrands,\n getPurchaseAffinityCategoryTopBrands : purchaseAffinityCategoryTopBrands,\n getFitConsistencySizeAdvice : fitConsistencySizeAdvice,\n getConsumerStylesHeight: consumerStylesHeight,\n getConsumerStylesWeight: consumerStylesWeight,\n getConsumerStylesAgeRange: consumerStylesAgeRange\n };\n\n function selectedBrandKey(brandKey) {\n return BrandReports.selectedBrandKey(brandKey);\n }\n\n function productStyleSummary(brandKey, styleId, region, transaction){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/summary', {\n params: {region:region, transaction: transaction},\n specificallyHandled: true\n }, productDetailFallBack).then(_.property('data'));\n }\n\n function productStyleSizeAdvice(brandKey, styleId, region, transaction){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/sizeAdvice', {\n params: {region:region, transaction: transaction},\n specificallyHandled: true\n }, productDetailFallBack).then(_.property('data'));\n }\n\n function purchaseAttributeStyle(brandKey, styleId, region, transaction, category, department){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/attributes', {\n params: {department: department, category: category, transaction: transaction, region: region},\n specificallyHandled: true\n }, productDetailFallBack).then(_.property('data'));\n }\n\n function purchaseAffinityTopBrands(brandKey, styleId, region, transaction){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/affinity/brands/top', {\n params: {region:region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function purchaseAffinityCategoryTopBrands(brandKey, styleId, region, transaction, category, department){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/affinity/brands/top', {\n params: {affinityDepartment: department, affinityCategory: category, region:region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function fitConsistencySizeAdvice(brandKey, region, transaction, category, department){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/styles/sizeAdvice', {\n params: {department: department, category: category, transaction: transaction, region: region}\n }).then(_.property('data'));\n }\n\n function consumerStylesHeight(brandKey, styleId, region, transaction) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/consumer/height',\n {\n params: {region: region, transaction: transaction}\n }\n ).then(_.property('data'));\n }\n\n function consumerStylesWeight(brandKey, styleId, region, transaction) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/consumer/weight',\n {\n params: {region: region, transaction: transaction}\n }\n ).then(_.property('data'));\n }\n\n function consumerStylesAgeRange(brandKey, styleId, region, transaction) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + Api.withEncodedPath(STYLE_URL, styleId) + '/consumer/ageRange',\n {\n params: {region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Purchase')\n .factory('PurchaseAttribute', PurchaseAttribute);\n\n // @ngInject\n function PurchaseAttribute($q, Api, BrandReports, BRAND_URL) {\n\n return {\n selectedBrandKey : selectedBrandKey,\n getAttributeHierarchies : getAttributeHierarchies,\n getSalesByAttribute : getSalesByAttribute,\n getSalesByConsumerAge : getSalesByConsumerAge,\n getSalesByConsumerBmi : getSalesByConsumerBmi,\n getPurchaseAttributeFilters: getPurchaseAttributeFilters\n };\n\n function selectedBrandKey(brandKey) {\n return BrandReports.selectedBrandKey(brandKey);\n }\n\n function getAttributeHierarchies(brandKey, transaction, region) {\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/purchase/attributes/meta', {\n cache: true,\n params: {region: region, transaction: transaction}\n }).then(_.property('data'));\n }\n\n function getSalesByAttribute(brandKey, department, category, attribute, transaction, region){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/purchase/attributes/summary', {\n cache : true,\n params : {department : department, category : category,\n attribute : attribute, transaction: transaction, region: region}\n }).then(_.property('data.sales'));\n }\n\n function getSalesByConsumerAge(brandKey, department, category, attribute, attributeValue, transaction, region){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/purchase/attributes/age', {\n cache : true,\n params : {department : department, category : category,\n attribute : attribute, attributeValue : attributeValue,\n transaction: transaction, region: region}\n }).then(_.property('data.sales'));\n }\n\n function getSalesByConsumerBmi(brandKey, department, category, attribute, attributeValue, transaction, region){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/purchase/attributes/bmi', {\n cache : true,\n params : {department : department, category : category,\n attribute : attribute, attributeValue : attributeValue,\n transaction: transaction, region: region}\n }).then(_.property('data.sales'));\n }\n\n function getPurchaseAttributeFilters(brandKey){\n return Api.get(Api.withEncodedPath(BRAND_URL, brandKey) + '/report/purchase/attributes/filters', {cache : true}).then(_.property('data'));\n }\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Purchase')\n .factory('PurchaseAttributeReport', PurchaseAttributeReport);\n\n // @ngInject\n function PurchaseAttributeReport($q, util, Upload, ExcelReportType, GaUtil, Api, BRAND_URL) {\n\n return {\n downloadReport: downloadReport\n };\n\n function getFileContent(type, selectedBrand, selectedDepartment, selectedCategory, selectedAttribute,\n selectedAttributeValue, selectedRegion, selectedTransaction, isActivityExist, isRegionExist) {\n return $q.when(content(type, selectedBrand, selectedDepartment, selectedCategory, selectedAttribute,\n selectedAttributeValue, selectedRegion, selectedTransaction, isActivityExist, isRegionExist))\n .then(function (content) {\n return content;\n });\n }\n\n function generateURL(type,brandKey) {\n var BASE_URL = BRAND_URL + encodeURIComponent(brandKey) + '/report/purchase/attributes'\n return BASE_URL + '/' + type;\n }\n\n function content(type,\n selectedBrand,\n selectedDepartment,\n selectedCategory,\n selectedAttribute,\n selectedAttributeValue,\n selectedRegion,\n selectedTransaction,\n isActivityExist,\n isRegionExist) {\n\n return Api.get(generateURL(type + 'Report',selectedBrand), {\n cache: false,\n params: {\n department : selectedDepartment,\n category : selectedCategory,\n attribute : selectedAttribute,\n attributeValue : selectedAttributeValue,\n region: selectedRegion,\n transaction: selectedTransaction,\n addTransactionHeader: isActivityExist,\n addRegionHeader: isRegionExist\n },\n responseType: 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], {type: disposition['content-type']})\n });\n });\n }\n\n function downloadReport(type, selectedBrand, selectedDepartment, selectedCategory, selectedAttribute,\n selectedAttributeValue, selectedRegion, selectedTransaction, isActivityExist, isRegionExist) {\n return getFileContent(type, selectedBrand, selectedDepartment, selectedCategory, selectedAttribute,\n selectedAttributeValue, selectedRegion, selectedTransaction, isActivityExist, isRegionExist)\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrand, 'Download Report', 'Purchase Attributes Report');\n });\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Purchase')\n .controller('PurchaseAttributesCtrl', PurchaseAttributesCtrl)\n .constant('ChartType',{\n SalesByAttribute :'salesByAttribute',\n SalesByConsumerAge: 'salesByConsumerAge',\n SalesByConsumerBmi : 'salesByConsumerBmi'\n });\n\n // @ngInject\n function PurchaseAttributesCtrl($state, userBrands, hierarchyFilter, salesByConsumerAge, salesByConsumerBmi,\n salesByAttribute, CookieJar, $stateParams, attributeFilter, attributeValueFilter, translateFilter,\n ChartType, PurchaseAttributeReport, GaUtil, filters, aggregationLogDetails,\n ChartService) {\n var vm = this;\n vm.brands = userBrands;\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n vm.showAllPurchaseByAttributes=false;\n vm.pageType = translateFilter('reports.purchases');\n vm.aggregationDetails = aggregationLogDetails;\n vm.hierarchyFilter = hierarchyFilter;\n vm.attributeFilter = attributeFilter;\n vm.attributeValueFilter = attributeValueFilter;\n\n vm.activityRegionFilters = filters;\n\n var selectedTransaction = vm.activityRegionFilters && vm.activityRegionFilters.getSelected();\n var selectedRegion = selectedTransaction && selectedTransaction.getSelectedRegion();\n\n vm.selectActivityAndReload = function(activity){\n selectedTransaction = activity;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Activity Filter', activity.label);\n vm.reload(false, false, false);\n };\n\n vm.selectRegionAndReload = function (region) {\n selectedRegion = region;\n vm.gaUtil.sendGaEvent(vm.selectedBrand.key, 'Region Filter', region.labelDescription);\n vm.reload(false, false, false);\n };\n\n vm.gaUtil = GaUtil;\n vm.charts = {\n salesByAttribute : salesByAttribute,\n salesByConsumerAge : salesByConsumerAge,\n salesByConsumerBmi : salesByConsumerBmi\n };\n\n vm.dataAvailable = function(source) {\n return vm.charts[source] && vm.charts[source].data ? vm.charts[source].data.length > 0 : vm.charts[source] && vm.charts[source].length > 0;\n };\n\n vm.reload = function (resetHierarchy, resetAttribute, resetAttributeValue) {\n CookieJar.set({name: 'tfc-insight-selected-brand', value: _.toString(vm.selectedBrand.key)});\n if(resetHierarchy) hierarchyFilter.setSelectedItem(null);\n if(resetAttribute) attributeFilter.setSelectedItem(null);\n if(resetAttributeValue) attributeValueFilter.setSelectedItem(null);\n\n if (resetHierarchy && resetAttribute && resetAttributeValue) {\n $state.go('.', {brandKey: vm.selectedBrand.key}, {inherit: false});\n } else {\n $state.go('.', {\n brandKey: vm.selectedBrand.key,\n department: hierarchyFilter.getSelectedItemAttribute('department'),\n category: hierarchyFilter.getSelectedItemAttribute('category'),\n attribute: attributeFilter.getSelectedItemAttribute('attribute'),\n attributeValue: attributeValueFilter.getSelectedItemAttribute('attributeValue'),\n transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel()\n });\n }\n };\n\n\n vm.reload(false, false, false);\n\n vm.selectedBrandReload = function (selectedBrand) {\n vm.selectedBrand = selectedBrand;\n vm.reload(true, true, true);\n };\n\n function setSalesByAttribute(source, dataObject) {\n vm.charts[source] = _.defaultsDeep({data : dataObject}, vm.charts[source], {\n brandKey : vm.selectedBrand.key,\n dontRank : true,\n fn : {\n label : function(d) {\n return d.label;\n },\n value : _.property('percent'),\n color : '#7C0A40',\n valueLabel : function (d) {\n return (d.percent * 100).toFixed(1) + '%';\n },\n highlight : function (d) {\n return d.label === (vm.selectedAttributeValue && vm.selectedAttributeValue.display);\n }\n }\n });\n }\n\n vm.setAll = function () {\n vm.setSalesAttributeChart(ChartType.SalesByAttribute, vm.charts.salesByAttribute);\n setSalesByAttribute(ChartType.SalesByConsumerAge, vm.charts.salesByConsumerAge);\n setSalesByAttribute(ChartType.SalesByConsumerBmi, vm.charts.salesByConsumerBmi);\n };\n\n vm.setSalesAttributeChart = function(source, dataObject){\n _.map(dataObject, function(response) {\n var chartData = {chartData: angular.copy(ChartService.getBarChartWithoutLabel([response]))};\n _.assign(response, chartData);\n });\n };\n\n vm.setAll();\n\n vm.downloadReport = function(type) {\n PurchaseAttributeReport.downloadReport(type, vm.selectedBrand.key,\n vm.hierarchyFilter.getSelectedItemAttribute('department'),\n vm.hierarchyFilter.getSelectedItemAttribute('category'),\n vm.attributeFilter.getSelectedItemAttribute('attribute'),\n vm.attributeValueFilter.getSelectedItemAttribute('attributeValue'),\n selectedRegion && selectedRegion.getLabel(),\n selectedTransaction && selectedTransaction.getLabel(),\n vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity(),\n selectedTransaction && selectedTransaction.hasMultipleRegion());\n }\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports')\n .controller('AllReportsCtrl', AllReportsCtrl);\n\n // @ngInject\n function AllReportsCtrl($state, reports, ReportCategories, ReportUtil) {\n var vm = this;\n\n vm.fileType = ReportUtil.fileType;\n vm.reportIcon = ReportUtil.reportIcon;\n vm.downloadReport = ReportUtil.downloadReport;\n vm.openReport = function (report) {\n if (report.isShowMore) {\n $state.go('reportList.' + report.category);\n } else {\n ReportUtil.openReport(report);\n }\n };\n\n var showMores = _.reduce(ReportCategories, function (map, cat) {\n // include isActive so it's not filtered out from the ng-repeat\n map[cat] = { isShowMore : true, category : cat, isActive : true };\n return map;\n }, {});\n\n vm.categories = ReportCategories;\n var reportMap = _.groupBy(_.filter(reports, 'isActive'), 'key.category');\n\n vm.showCategory = function (category) {\n return !!reportMap[category];\n };\n\n vm.getReports = function (category) {\n var reports = ReportUtil.sort(reportMap[category]);\n if (reports.length > 4) {\n reports = reports.slice(0, 3).concat(showMores[category]);\n }\n return reports;\n };\n\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports')\n .controller('CategoryReportsCtrl', CategoryReportsCtrl);\n\n // @ngInject\n function CategoryReportsCtrl($state, $stateParams, reports, ReportUtil, ProgressModal, GaUtil, BrandReports, PageSize,\n Reports, reportsCount, defaultTla, Toast) {\n var vm = this;\n\n vm.category = $state.$current.data && $state.$current.data.reportCategory;\n\n vm.reports = ReportUtil.sort(reports);\n vm.currentPage = 1;\n vm.pageSize = PageSize;\n vm.maxSize = 7;\n vm.reportCount = reportsCount.count;\n\n vm.fileType = ReportUtil.fileType;\n vm.reportIcon = ReportUtil.reportIcon;\n vm.openReport = ReportUtil.openReport;\n\n vm.downloadReport = function (report) {\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey) {\n var brandKey = selectedBrandKey;\n GaUtil.sendGaEvent(brandKey, 'Download Report', 'Download ' + vm.category + ' report');\n ProgressModal.showModal(ReportUtil.downloadReport(report), {\n translationKey : 'reports.loading',\n progress : false\n }).then(null, function(error){\n Toast.error('reports.failed', { state : true });\n });\n });\n };\n\n vm.pageChange = function(currentPage){\n return Reports.find(defaultTla, vm.category, $stateParams.year, vm.pageSize, currentPage).then(function (reports) {\n vm.currentPage = currentPage;\n vm.reports = reports;\n });\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports')\n .factory('ReportUtil', ReportUtil);\n\n // @ngInject\n function ReportUtil($q, $uibModal, Reports, ReportCategories, Month, GaUtil) {\n\n var FileTypes = {\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'text/csv': 'csv',\n 'application/pdf': 'pdf'\n };\n\n return {\n validContentTypes : validContentTypes,\n sort : sort,\n fileType : fileType,\n isPreviewable : isPreviewable,\n reportIcon : reportIcon,\n openReport : openReport,\n downloadReport : downloadReport\n };\n\n function validContentTypes() {\n return _.keys(FileTypes);\n }\n\n function sort(reports, iteratees, orders) {\n return _.orderBy(reports,\n iteratees || ['tla', byCategory, byKey],\n orders || ['asc', 'asc', 'desc']\n );\n\n function byCategory(report) {\n return ReportCategories.indexOf(report.key.category);\n }\n\n function byKey(report) {\n var key = report.key;\n switch (key.category) {\n case 'week':\n case 'month':\n case 'quarter':\n // Not an accurate date in the case of 'quarter', but the sorting will be correct\n return new Date(key.year, (Month.toInt(key.month) || key.quarter) - 1, key.day || 1);\n case 'other':\n return report.key.name;\n }\n }\n }\n\n\n function fileType(report) {\n if (!report.isShowMore) {\n return FileTypes[report.contentType];\n }\n }\n\n function isPreviewable(report) {\n return 'pdf' === fileType(report);\n }\n\n function reportIcon(report) {\n if (report.isShowMore) {\n return 'fa-ellipsis-h';\n }\n switch (fileType(report)) {\n case 'xlsx':\n case 'csv':\n return 'fa-file-excel-o';\n case 'docx':\n return 'fa-file-word-o';\n case 'pdf':\n return 'fa-file-pdf-o';\n default:\n console.error('Invalid content type', report);\n return 'fa-question';\n }\n }\n\n function getFileContent(report) {\n // I'm not really clear on the details, but there's a point in the $digest when comparing a File's name\n // before the File has been initialized (or something?), which was throwing a TypeError.\n // Calling this $content tells angular to skip it when dirty checking on the File.\n // https://docs.angularjs.org/api/ng/function/angular.equals\n return Reports.content(report.fileKey, true);\n }\n\n function openReport(report) {\n // Do this asynchronously so the modal opens immediately, preventing a double click\n var contentPromise;\n var previewable = isPreviewable(report);\n if (previewable) {\n contentPromise = getFileContent(report);\n }\n return $uibModal.open({\n templateUrl: 'Reports/ReportViewer.tmpl.html',\n controllerAs : 'vm',\n controller : function ($scope, $stateParams, Toast, Upload, BrandReports) {\n var vm = this;\n vm.report = report;\n vm.download = function () {\n return BrandReports.selectedBrandKey($stateParams.brandKey).then(function(selectedBrandKey) {\n var brandKey = selectedBrandKey;\n GaUtil.sendGaEvent(brandKey, 'Download Report', 'All Reports Download');\n downloadReport(report);\n });\n };\n vm.close = $scope.$close;\n vm.isPreviewable = previewable;\n if (previewable) {\n contentPromise.then(function (content) {\n vm.content = content;\n // There's a race condition when using ngf-src=\"vm.content.dataBlob\".\n // If the tag is made visible before Upload creates the dataUrl,\n // it doesn't appear on some computers. Doing it this way fixes that.\n if(vm.content.dataBlob) {\n Upload.dataUrl(vm.content.dataBlob).then(function (url) {\n vm.content.dataBlobUrl = url;\n });\n } else vm.content.dataBlobUrl = null;\n }, function () {\n Toast.error('reports.downloadFailed');\n vm.close();\n });\n }\n }\n });\n }\n\n function reportDownload(report) {\n return function (fileContent) {\n return fileContent(report).then(function (content) {\n download(content.dataBlob, content.fileName, \"application/vnd-xls\");\n });\n }\n }\n\n function downloadReport(report) {\n return reportDownload(report)(getFileContent);\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports')\n .factory('Reports', Reports);\n\n // @ngInject\n function Reports($q, Api, util, Month, Upload, PageSize, $cacheFactory, Auth) {\n\n var BASE_URL = '/report';\n var cache = $cacheFactory('Reports');\n\n function reportUrl(id) {\n return BASE_URL + '/' + encodeURIComponent(id);\n }\n\n return {\n get : get,\n findAll : findAll,\n find : find,\n content : content,\n upload : upload,\n update : update,\n delete : deleteReport,\n audit : audit,\n reportCount : getReportCount,\n tlaFilterReport: getTlaFilterReport,\n defaultTla: getDefaultTla\n };\n\n function get(id) {\n return Api.get(reportUrl(id), { cache : cache }).then(unpack);\n }\n\n function findAll() {\n return Api.get(BASE_URL, { cache : cache }).then(unpack);\n }\n\n function getReportParams(tla, category, year, itemsPerPage, pageNumber, searchText) {\n var params = {\n tla: tla,\n category: category,\n year: year,\n itemsPerPage: itemsPerPage || PageSize,\n pageNumber: pageNumber || 1\n };\n\n if(searchText)\n params = _.extend(params, {searchText: searchText});\n\n return params;\n }\n \n function findReports(tla, category, year, itemsPerPage, pageNumber, searchText) {\n return function (apiFactory) {\n return apiFactory.get(BASE_URL, {\n cache : cache,\n params : getReportParams(tla, category, year, itemsPerPage, pageNumber, searchText)\n }).then(unpack);\n }\n }\n\n function find(tla, category, year, itemsPerPage, pageNumber, searchText) {\n return findReports(tla, category, year, itemsPerPage, pageNumber, searchText)(Api);\n }\n\n function reportContent(id, embed) {\n return function (apiFactory) {\n var params = {};\n if (embed) {\n params.embed = true;\n }\n return apiFactory.get(reportUrl(id) + '/content', {\n cache : true, // Can always cache content\n params : params,\n responseType : 'arraybuffer'\n }).then(function (response) {\n // parse the header as a map\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], { type : disposition['content-type'] })\n });\n });\n }\n }\n\n function content(id, embed) {\n return reportContent(id, embed)(Api);\n }\n\n function upload(report) {\n var data = _.pick(report, ['tla', 'category', 'file', 'isActive', 'sendEmail']);\n var key = getKey(report);\n return Upload.upload({\n method : 'POST',\n url : Api.getBasePath() + BASE_URL,\n data : _.extend(data, key)\n }).then(clearCache);\n }\n\n function getKey(report) {\n var d = report.date;\n\n function getYear(d) {\n return d.getYear() + 1900;\n }\n switch (report.category) {\n case 'week':\n return {\n year : getYear(d),\n month : Month.getMonth(d),\n day : d.getDate()\n };\n case 'month':\n return {\n year : getYear(d),\n month : Month.getMonth(d)\n };\n case 'quarter':\n return {\n year : getYear(d),\n quarter : report.quarter\n };\n case 'other':\n return {\n name : report.name\n };\n default:\n throw new Error('Unsupported report category [' + report.category + ']');\n }\n }\n\n function update(report) {\n return Api.put(reportUrl(report.fileKey), { isActive : report.isActive, sendEmail : report.sendEmail }).then(clearCache);\n }\n\n function deleteReport(id) {\n return Api.delete(reportUrl(id)).then(clearCache);\n }\n\n function audit(id) {\n return Api.get(reportUrl(id) + '/audit').then(unpack);\n }\n\n function unpack(response) {\n return response.data;\n }\n\n function clearCache(response) {\n cache.removeAll();\n return response.data;\n }\n \n function reportCount(tla, category, year, itemsPerPage, pageNumber, searchText) {\n return function (apiFactory) {\n return apiFactory.get(BASE_URL + '/count', {\n cache : cache,\n params : getReportParams(tla, category, year, itemsPerPage, pageNumber, searchText)\n }).then(unpack);\n }\n }\n\n function getReportCount(tla, category, year, itemsPerPage, pageNumber, searchText){\n return reportCount(tla, category, year, itemsPerPage, pageNumber, searchText)(Api);\n }\n\n function getTlaFilterReport(params){\n return Api.get(BASE_URL + '/tree', {\n cache : cache,\n params: params\n }).then(unpack);\n }\n\n function getDefaultTla(tla) {\n var tla = tla;\n if (!tla) {\n var user = Auth.getUser();\n tla = user.storeTlas[0];\n }\n return tla;\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Reports')\n .filter('reportTitle', reportTitle);\n\n // @ngInject\n function reportTitle(translateFilter) {\n return function (report) {\n if (report) {\n return _.unescape(translateFilter('reports.title.' + report.key.category, report.key));\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Returns')\n .controller('ReturnsPerformanceParentCtrl', ReturnsPerformanceParentCtrl)\n .controller('ReturnsPerformanceBySizeCtrl', ReturnsPerformanceBySizeCtrl)\n .controller('ReturnsPerformanceCtrl', ReturnsPerformanceCtrl)\n .filter('unique',UniqueFilter);\n\n // @ngInject\n function ReturnsPerformanceParentCtrl(translateFilter,PageSize,$scope,$state,$stateParams,ColorCode,DashboardDescriptionModal){\n\n var vm = this;\n vm.sortCommonColumn = sortCommonColumn;\n vm.getColorSwatch = getColorSwatch;\n vm.getReturnsChart = getReturnsChart;\n vm.setSortConfig = setSortConfig;\n vm.updateUrl = updateUrl;\n\n vm.pageSize = PageSize;\n vm.maxSize = 7;\n\n vm.offsets = [];\n vm.isProductDetailAccessible = $state.can('productDetail');\n\n vm.translateText = function (text) {\n return translateFilter('reports.returns.' + text)\n };\n\n vm.ALL_STYLES = vm.translateText('allStyles');\n vm.ALL_CATEGORIES = vm.translateText('allCategories');\n vm.activeView = (!vm.activeView) ? vm.translateText('view.Basic') : vm.activeView;\n vm.reportKeys = ColorCode.getKeys();\n\n function initSortConfig(){\n var categoryName = 'categoryName';\n var variance = 'variance';\n if($stateParams.hierarchy === vm.ALL_CATEGORIES){\n vm.selectedSortField = variance;\n }else{\n vm.selectedSortField = $stateParams.sortBy === categoryName ? variance : $stateParams.sortBy || variance;\n }\n vm.selectedSortOrder = $stateParams.sortOrder || vm.selectedSortField === variance ? 'desc' : 'asc';\n }\n\n function initializeState(){\n vm.currentPage = $stateParams.pageNumber;\n initSortConfig();\n }\n\n function setSortConfig(columnName, sortOrder){\n vm.selectedSortField = columnName;\n vm.selectedSortOrder = sortOrder;\n }\n\n function getColorSwatch(value){\n return ColorCode.getColor(_.isNumber(value) ? (value * 100).toFixed(1) : \"\");\n }\n\n function getReturnsChart(dataObject, other) {\n var filterDataObject = _.filter(dataObject, function(res) {\n if((res.dataNameLabel.toLowerCase().indexOf(other.filteredText.toLowerCase()) !== -1) || (res.dataTitleLabel && res.dataTitleLabel.toLowerCase().indexOf(other.filteredText.toLowerCase()) !== -1)) return res;\n });\n var chartData = filterDataObject.slice((other.currentPage - 1) * vm.pageSize, other.currentPage * vm.pageSize);\n\n return {\n filteredCount: filterDataObject.length || 0,\n chartData: chartData || []\n };\n }\n\n function updateUrl(params){\n $state.go('.', params, {notify: false});\n }\n\n function sortCommonColumn(unfilteredData) {\n var sortedData = _.orderBy(unfilteredData, function (style) {\n switch (vm.selectedSortField) {\n case 'styleId' :\n case 'sizeName' :\n case 'categoryName':\n return _.lowerCase(style.dataNameLabel);\n case 'styleName' :\n return _.lowerCase(style.dataTitleLabel);\n case 'variance' :\n return (style.returnVariationData !== \"\") ? style.returnVariationData : (vm.selectedSortOrder === 'desc') ? Number.NEGATIVE_INFINITY: Number.POSITIVE_INFINITY;\n }\n }, vm.selectedSortOrder);\n return sortedData;\n }\n\n vm.isUnsorted = function (columnName) {\n return vm.selectedSortField !== columnName\n };\n\n vm.getSortClass = function(columnName){\n var sort = 'fa fa-sort';\n if(vm.selectedSortField === columnName) {\n return sort+'-'+vm.selectedSortOrder;\n }else {\n return sort;\n }\n };\n\n vm.openDescriptionModal = function (selectedBrand, type, isActivityExist, isRegionExist, selectedActivity) {\n DashboardDescriptionModal.showModal(selectedBrand, type, isActivityExist, isRegionExist, selectedActivity);\n };\n\n initializeState();\n\n }\n // @ngInject\n function ReturnsPerformanceCtrl($state, $stateParams, $injector, CookieJar, summary, styleData, brands, $scope, ReturnPerformanceReport,\n $controller, filters, Enums, GaUtil, ChartService, aggregationLogDetails) {\n\n var vm = this;\n angular.extend(vm, $controller('ReturnsPerformanceParentCtrl', {$scope: $scope}));\n\n vm.brands = brands;\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n vm.filteredStyle = \"\";\n vm.returnsPerformanceReportKeys = [];\n vm.offsets = [];\n angular.copy(vm.reportKeys, vm.returnsPerformanceReportKeys);\n vm.aggregationDetails = aggregationLogDetails;\n vm.hierarchies= _(summary).map(function(o){\n return {\n department: o.department,\n category: o.category,\n variationPercentage:(!_.isUndefined(o.returnVariation)) ? (o.returnVariation * 100).toFixed(1) : \"\",\n display: o.category ? o.department + \"/\" + o.category : o.department\n }\n }).value();\n\n vm.hierarchies.unshift({ display : vm.ALL_CATEGORIES },{ display : vm.ALL_STYLES });\n\n vm.unfilteredStyleData = _(styleData).map(function(data) {\n return {\n performanceCategoryLabel: (!_.isUndefined(data.returnVariation)) ? (data.returnVariation * 100).toFixed(1) : \"\",\n dataNameLabel : data.styleId,\n dataTitleLabel : data.styleName,\n returnVariationData : (!_.isUndefined(data.returnVariation)) ? data.returnVariation : \"\",\n sizeAdvice: (!_.isUndefined(data.sizeAdvice)) ? data.sizeAdvice : undefined\n }\n }).value();\n\n vm.unfilteredSummaryData = _(summary).map(function(data) {\n return {\n performanceCategoryLabel: (!_.isUndefined(data.returnVariation)) ? (data.returnVariation * 100).toFixed(1) : \"\",\n dataNameLabel : data.department+'/'+data.category,\n returnVariationData : (!_.isUndefined(data.returnVariation)) ? data.returnVariation : \"\",\n sizeAdvice: (!_.isUndefined(data.sizeAdvice)) ? data.sizeAdvice : undefined\n }\n }).value();\n\n vm.activityRegionFilters = filters;\n\n var selectedTransaction = vm.activityRegionFilters && vm.activityRegionFilters.getSelected();\n var selectedRegion = selectedTransaction && selectedTransaction.getSelectedRegion();\n\n vm.selectActivityAndReload = function(activity){\n selectedTransaction = activity;\n GaUtil.sendGaEvent(vm.selectedBrand.key, 'Activity Filter', activity.label);\n vm.reload();\n };\n\n vm.selectRegionAndReload = function (region) {\n selectedRegion = region;\n GaUtil.sendGaEvent(vm.selectedBrand.key, 'Region Filter', region.labelDescription);\n vm.reload();\n };\n\n getReturnsPerformanceKeyArr();\n\n vm.selectedBrandReload = function (selectedBrand) {\n vm.selectedBrand = selectedBrand;\n vm.reload(true);\n };\n\n vm.reload = function(resetBrand) {\n CookieJar.set({name : 'tfc-insight-selected-brand',value : encodeURIComponent(_.toString(vm.selectedBrand.key))});\n if(!resetBrand) {\n $state.go('.', { brandKey : vm.selectedBrand.key, hierarchy: vm.selectedHierarchy.display,\n department: vm.selectedHierarchy.department, category: vm.selectedHierarchy.category,\n transaction: selectedTransaction && selectedTransaction.getLabel(),\n region: selectedRegion && selectedRegion.getLabel(),\n pageNumber: vm.currentPage} );\n }else {\n $state.go('.', { brandKey : vm.selectedBrand.key},{inherit: false});\n }\n };\n\n vm.currentPage = $stateParams.pageNumber || 1;\n if(!$stateParams.hierarchy || $stateParams.hierarchy === vm.ALL_CATEGORIES) {\n vm.selectedHierarchy = vm.hierarchies[0];\n }else if($stateParams.hierarchy === vm.ALL_STYLES){\n vm.selectedHierarchy = vm.hierarchies[1];\n }else {\n vm.selectedHierarchy = _.find(vm.hierarchies, {department: $stateParams.department, category: $stateParams.category});\n if(!vm.selectedHierarchy){\n vm.selectedHierarchy = vm.hierarchies[0];\n }\n }\n\n function getReturnsPerformanceKeyArr(){\n var transaction = vm.activityRegionFilters.getSelected() && vm.activityRegionFilters.getSelected().getLabel();\n if(transaction === Enums.TransactionFilterType.Wholesale) {\n return angular.copy(vm.reportKeys, vm.returnsPerformanceReportKeys);\n } else {\n return _.remove(vm.returnsPerformanceReportKeys,{key: 'one-retailer-color-key'})\n }\n }\n\n vm.setSelectedHierarchy = function(hierarchy) {\n vm.selectedHierarchy = hierarchy;\n GaUtil.sendGaEvent(vm.selectedBrand.key, \"Category Filter\", vm.selectedHierarchy.display);\n };\n\n function setReturnsChart(dataObject, other){\n var unfilteredData = [];\n if(dataObject && dataObject.length){\n unfilteredData = dataObject;\n } else {\n unfilteredData = (vm.selectedHierarchy && vm.selectedHierarchy.display === vm.ALL_CATEGORIES) ? vm.unfilteredSummaryData: vm.unfilteredStyleData;\n }\n other.filteredText = vm.filteredStyle;\n vm.offsets = [];\n var returnsChartObj = vm.getReturnsChart(unfilteredData, other);\n vm.filteredCount = returnsChartObj.filteredCount;\n vm.chartVarianceData = returnsChartObj.chartData;\n if(vm.selectedHierarchy && vm.selectedHierarchy.display !== vm.ALL_CATEGORIES){\n _.map(vm.chartVarianceData,function(res) {\n var sizeAdviceChart = {sizeAdviceChart: ChartService.getSizeAdviceChart([{'sizeAdvice': res.sizeAdvice}])};\n _.assign(res, sizeAdviceChart);\n });\n }\n }\n\n vm.showSizeAdviceChart = function(index) {\n var divStatus = angular.element(document.querySelector('.chart-block-' + index))[0];\n var currentCaret = angular.element(document.querySelector('.caret-' + index))[0];\n var divCurrentStyle = divStatus && getComputedStyle(divStatus);\n if (divStatus && divCurrentStyle) {\n if (divCurrentStyle.display === \"none\") {\n divStatus.style.display = \"block\";\n currentCaret.classList.remove('fa-caret-down');\n currentCaret.classList.add('fa-caret-up');\n } else {\n divStatus.style.display = \"none\";\n currentCaret.classList.remove('fa-caret-up');\n currentCaret.classList.add('fa-caret-down');\n }\n }\n };\n\n vm.downloadReturnsReport = function () {\n var hierarchy = vm.selectedHierarchy;\n ReturnPerformanceReport.downloadReport(hierarchy && hierarchy.display,\n vm.selectedBrand && vm.selectedBrand.key,\n hierarchy && hierarchy.department,\n hierarchy && hierarchy.category,\n selectedRegion && selectedRegion.getLabel(),\n selectedTransaction && selectedTransaction.getLabel(),\n vm.selectedSortField,\n vm.selectedSortOrder,\n \"ReturnsPerformance\",\n vm.activityRegionFilters && vm.activityRegionFilters.hasMultipleActivity(),\n selectedTransaction && selectedTransaction.hasMultipleRegion()\n );\n };\n\n vm.setFilteredText = function () {\n vm.currentPage = 1;\n vm.sortByColumn();\n };\n\n vm.applyPagination = function(currentPage) {\n vm.currentPage = currentPage || $stateParams.pageNumber || 1;\n vm.sortByColumn();\n };\n\n vm.sortByColumn = function (columnName) {\n vm.setSortConfig(columnName || vm.selectedSortField, vm.selectedSortOrder);\n var unfilteredData = vm.selectedHierarchy.display === vm.ALL_CATEGORIES ? vm.unfilteredSummaryData : vm.unfilteredStyleData;\n unfilteredData = vm.sortCommonColumn(unfilteredData);\n vm.updateUrl({pageNumber: vm.currentPage, sortBy: vm.selectedSortField, sortOrder: vm.selectedSortOrder});\n setReturnsChart(unfilteredData, {currentPage: vm.currentPage});\n };\n\n vm.onColumnSelection = function(columnName){\n vm.currentPage = 1;\n vm.selectedSortField = columnName;\n vm.selectedSortOrder = vm.selectedSortOrder === 'asc' ? 'desc' : 'asc';\n vm.sortByColumn(columnName);\n };\n\n vm.navigatePage = function(styleId){\n if(vm.isProductDetailAccessible && styleId) {\n var params = _.merge($stateParams, {\n styleId: styleId,\n regionDescription: selectedRegion && selectedRegion.labelDescription,\n previousState: $state.current && $state.current.data && $state.current.data.title,\n sortBy: vm.selectedSortField,\n sortOrder: vm.selectedSortOrder\n });\n $state.go('productDetail', params);\n }\n };\n\n vm.sortByColumn();\n\n };\n\n function ReturnsPerformanceBySizeCtrl($state, $stateParams,$scope, CookieJar,summary,brands,hierarchies,$timeout,ReturnPerformanceReport,$controller,$filter, GaUtil, aggregationLogDetails) {\n\n var vm = this;\n angular.extend(vm, $controller('ReturnsPerformanceParentCtrl', {$scope: $scope}));\n\n vm.brands = brands;\n vm.gaUtil = GaUtil;\n vm.filteredSize = \"\";\n vm.selectedBrand = _.find(vm.brands, {key: $stateParams.brandKey});\n\n vm.hierarchies = _(hierarchies).map(function (o) {\n return {\n department: o.department,\n category: o.category,\n display: o.category ? o.department + \" \" + o.category : o.department\n }\n }).value();\n\n vm.sizeType = _(hierarchies).map(function (o) {\n return {\n sizeType: o.sizeType,\n key:o.sizeType,\n display: o.displaySizeType\n }\n }).value();\n\n var unsortedLocale = _(hierarchies).map(function (o) {\n return {\n localeCode: o.localeCode,\n key:o.localeCode,\n display: o.displayLocaleCode\n }\n }).value();\n\n vm.unfilteredSizeSummary = _(summary).map(function (data) {\n return {\n performanceCategoryLabel: (data.returnVariation * 100).toFixed(1),\n dataNameLabel: data.size,\n returnVariationData: data.returnVariation\n }\n }).sortBy(function(o){\n return o.returnVariationData * -1\n }).value();\n\n vm.localeCode = $filter('sortBy')(unsortedLocale, 'localeCode', 'asc');\n vm.aggregationDetails = aggregationLogDetails;\n\n vm.selectedHierarchy = _.find(vm.hierarchies, {department: $stateParams.department, category: $stateParams.category}) || vm.hierarchies[0];\n\n vm.selectedSizeType = _.find(vm.sizeType, {sizeType: $stateParams.sizeType}) || vm.sizeType[0];\n\n vm.selectedLocaleCode = _.find(vm.localeCode, {localeCode: $stateParams.localeCode}) || vm.localeCode[0];\n\n vm.selectedBrandReload = function (selectedBrand) {\n vm.selectedBrand = selectedBrand;\n vm.reload(true);\n };\n\n vm.reload = function (resetBrand) {\n CookieJar.set({name: 'tfc-insight-selected-brand', value: _.toString(vm.selectedBrand.key)});\n var hierarchy = vm.selectedHierarchy;\n var sizeType = vm.selectedSizeType;\n var localeCode = vm.selectedLocaleCode;\n if(!resetBrand){\n $state.go('.', {\n brandKey: vm.selectedBrand.key,\n department: hierarchy && hierarchy.department,\n category: hierarchy && hierarchy.category,\n sizeType: sizeType && sizeType.sizeType,\n localeCode: localeCode && localeCode.localeCode\n });\n }else {\n $state.go('.', { brandKey : vm.selectedBrand.key},{inherit: false});\n }\n };\n\n vm.getColorSwatch();\n\n function setReturnsChart(dataObject, other) {\n var unfilteredSizeSummary = [];\n if(dataObject && dataObject.length){\n unfilteredSizeSummary = dataObject;\n } else {\n unfilteredSizeSummary = vm.unfilteredSizeSummary;\n }\n other.filteredText = vm.filteredSize;\n var filteredData = vm.getReturnsChart(unfilteredSizeSummary, other);\n vm.filteredCount = filteredData.filteredCount;\n vm.chartVarianceData = filteredData.chartData;\n }\n\n vm.downloadReturnsReport = function () {\n var hierarchy = vm.selectedHierarchy;\n var sizeType = vm.selectedSizeType;\n var localeCode = vm.selectedLocaleCode;\n\n ReturnPerformanceReport.downloadSizeReport(hierarchy && hierarchy.display,\n vm.selectedBrand && vm.selectedBrand.key,\n hierarchy && hierarchy.department,\n hierarchy && hierarchy.category,\n sizeType && sizeType.sizeType,\n localeCode && localeCode.localeCode,\n vm.selectedSortField,\n vm.selectedSortOrder,\n \"ReturnsPerformanceBySize\");\n };\n\n vm.setFilteredText = function () {\n vm.currentPage = 1;\n vm.sortByColumn();\n };\n\n vm.sortByColumn = function (columnName) {\n vm.setSortConfig(columnName || vm.selectedSortField, vm.selectedSortOrder);\n var unfilteredSizeSummary = vm.sortCommonColumn(vm.unfilteredSizeSummary);\n vm.updateUrl({pageNumber: vm.currentPage, sortBy: vm.selectedSortField, sortOrder: vm.selectedSortOrder});\n setReturnsChart(unfilteredSizeSummary, {currentPage: vm.currentPage});\n };\n\n vm.applyPagination = function (currentPage) {\n vm.currentPage = currentPage || $stateParams.pageNumber || 1;\n vm.sortByColumn();\n };\n\n vm.onColumnSelection = function(columnName){\n vm.currentPage = 1;\n vm.selectedSortField = columnName;\n vm.selectedSortOrder = vm.selectedSortOrder === 'asc' ? 'desc' : 'asc';\n vm.sortByColumn(columnName);\n };\n\n vm.sortByColumn();\n }\n\n function UniqueFilter() {\n return function (items) {\n return _.uniqBy(items,function(o){\n return o.display;\n });\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.FitConsistency')\n .factory('ReturnPerformanceReport', ReturnPerformanceReport);\n\n // @ngInject\n function ReturnPerformanceReport($q, util, Upload, ExcelReportType, GaUtil, Api, BRAND_URL) {\n\n return {\n downloadReport: downloadReport,\n downloadSizeReport : downloadSizeReport\n };\n\n function getFileContent(selectedHierarchy, selectedBrandKey, params,reportType) {\n return $q.when(content(selectedHierarchy, selectedBrandKey,params,reportType)\n .then(function (content) {\n return content;\n }));\n }\n\n function generateURL(hierarchy, brandKey,reportType) {\n var BASE_URL = BRAND_URL + encodeURIComponent(brandKey) +'/report/performance/';\n switch (reportType) {\n case \"ReturnsPerformance\":\n {\n var returnApiType = (hierarchy === 'All Categories') ? 'returns/summary' : 'returns';\n break;\n }\n case \"ReturnsPerformanceBySize\":\n {\n var returnApiType = 'returnsBySize/summary';\n break;\n }\n }\n return BASE_URL + returnApiType;\n }\n\n function content(selectedHierarchy, selectedBrandKey, params,reportType) {\n return Api.get(generateURL(selectedHierarchy, selectedBrandKey,reportType), {\n cache: false,\n params: params,\n responseType: 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], {type: disposition['content-type']})\n });\n });\n }\n\n function downloadReport(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory, selectedRegion,\n selectedTransaction, sortField, sortOrder,reportType, isActivityExist, isRegionExist) {\n var params = {\n brandKey: selectedBrandKey,\n department: selectedDepartment,\n category: selectedCategory,\n transaction: selectedTransaction,\n region: selectedRegion,\n sortField:sortField,\n sortOrder:sortOrder,\n addTransactionHeader: isActivityExist,\n addRegionHeader: isRegionExist\n };\n return getFileContent(selectedHierarchy, selectedBrandKey, params,reportType)\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Returns Performance Report');\n });\n }\n\n function downloadSizeReport(selectedHierarchy, selectedBrandKey, selectedDepartment, selectedCategory,\n selectedSizeType,selectedLocaleCode, sortField, sortOrder,reportType){\n var params = {\n brandKey: selectedBrandKey,\n department: selectedDepartment,\n category: selectedCategory,\n localeCode:selectedLocaleCode,\n sizeType:selectedSizeType,\n sortField:sortField,\n sortOrder:sortOrder\n };\n return getFileContent(selectedHierarchy, selectedBrandKey, params,reportType)\n .then(function (content) {\n download(content.dataBlob, content.fileName, ExcelReportType);\n GaUtil.sendGaEvent(selectedBrandKey, 'Download Report', 'Returns Performance By Size Report');\n });\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Terms')\n .controller('TermsCtrl', TermsCtrl);\n\n // @ngInject\n function TermsCtrl(Terms, Toast, Auth, $state, CookieJar, Nav) {\n var vm = this;\n vm.isTermsAccepted = false;\n\n function setTermsAccepted() {\n vm.user = Auth.getUser();\n if(vm.user) {\n Terms.getTermsOfUse(vm.user.uuid).then(function (responseSuccess) {\n if (responseSuccess.status === 200) {\n vm.isTermsAccepted = true;\n }\n });\n }\n }\n\n\n setTermsAccepted();\n\n vm.submit = function () {\n Terms.acceptTermsOfUse(vm.user.uuid).then(function () {\n Toast.success('Site.Feed.AcceptedTerms');\n CookieJar.set({name: 'tfc-retailer-terms', value: _.toString('accepted')});\n _.each($state.get(),function(state){\n if(state.data && state.data.requireTerms){\n state.data.requireTerms = false;\n }\n });\n $state.go(_.head(Nav.mainMenu()).state.name());\n });\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Terms')\n .directive('tfcAppTerms', tfcAppTerms);\n\n // @ngInject\n function tfcAppTerms() {\n return {\n restrict: 'E',\n scope:{\n user:'='\n },\n templateUrl : 'Terms/TermsNav.tmpl.html'\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Terms')\n .factory('Terms', Terms);\n\n // @ngInject\n function Terms(Api, Auth, CookieJar, $q) {\n\n return {\n getTermsOfUse: getTermsOfUse,\n acceptTermsOfUse: acceptTermsOfUse,\n cookieExistsAndAccepted: cookieExistsAndAccepted,\n getCookie: getCookie,\n isAccepted: isAccepted\n };\n\n function getTermsOfUse(uuid) {\n return Api.get('/users/' + uuid + '/terms-of-use');\n }\n\n function acceptTermsOfUse(uuid) {\n return Api.post('/users/'+uuid+'/terms-of-use/accept');\n }\n\n function setTermsCookie() {\n var user = Auth.getUser();\n if(user){\n return getTermsOfUse(user.uuid).then(\n function (responseSuccess) {\n if(responseSuccess.status === 200) {\n CookieJar.set({name: 'tfc-retailer-terms', value: _.toString('accepted')});\n }else if(responseSuccess.status === 204){\n CookieJar.set({name: 'tfc-retailer-terms', value: _.toString('notRequired')});\n }\n },\n function (responseFailure) {\n if (responseFailure.status === 404) {\n CookieJar.set({name: 'tfc-retailer-terms', value: _.toString('notAccepted')});\n }\n });\n }else {\n return $q.reject();\n }\n }\n\n function getCookie() {\n return CookieJar.get('tfc-retailer-terms');\n }\n\n function cookieExistsAndAccepted() {\n var termsCookieValue = getCookie();\n return termsCookieValue === 'accepted' || termsCookieValue === 'notRequired';\n }\n\n function isAccepted() {\n return $q(function(resolve,reject){\n if(getCookie()){\n resolve(cookieExistsAndAccepted());\n }else{\n setTermsCookie()\n .then(function () {\n resolve(cookieExistsAndAccepted());\n },reject);\n }\n });\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Products')\n .controller('ProdDashboardCtrl', ProdDashboardCtrl);\n\n // @ngInject\n function ProdDashboardCtrl($q, $scope, $timeout, Upload, ProductMgr, Toast, styleSummary, recentFiles, dateUtil, $stateParams) {\n var vm = this;\n vm.styleSummary = styleSummary;\n vm.recentFiles = recentFiles.values;\n\n // Ui-grid Data Options\n vm.missingStyleDataFn = function (lastIdentifier) {\n return ProductMgr.findMissingStyles(lastIdentifier, $stateParams.brandKey);\n };\n\n vm.options = {\n columnDefs: [\n {name: 'brand', field: 'brand', cellTooltip: true, headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'},\n {name: 'style #', field: 'supplierStyle', cellTooltip: true, headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'},\n {name: 'date', field: 'shipDate', headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'},\n {name: 'status', field: 'status', headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'}\n ],\n infiniteScrollRowsFromEnd: 50,\n pageSize: 500\n };\n\n vm.getStyle = function(gridData, index) {\n if(gridData && gridData.length){\n return {\n 'brand-key': gridData[index].brandKey,\n 'store-key': gridData[index].storeKey,\n 'supplier-style': gridData[index].supplierStyle\n }\n }\n };\n\n vm.formatMissingStylesData = function(styles) {\n if(styles && styles.length)\n {\n return _.forEach(styles, function (data) {\n _.assign(data, {'shipDate': dateUtil.formatJsonDate(data.shipDate, 'dd/MM/yyyy')})\n });\n }\n else\n {\n return [];\n }\n };\n\n vm.getReport = function () {\n return ProductMgr.getReport($stateParams.brandKey).then(function (content) {\n download(content.dataBlob, content.fileName, \"application/vnd-xls\");\n });\n };\n }\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Products')\n .controller('ProdFilesCtrl', ProdFilesCtrl);\n\n // @ngInject\n function ProdFilesCtrl(ProductMgr, dateUtil, $stateParams) {\n var vm = this;\n\n vm.recentFilesDataFn = function (lastIdentifier) {\n return ProductMgr.findFiles(lastIdentifier, $stateParams.brandKey);\n };\n\n vm.options = {\n columnDefs: [\n {name: 'File Name', field: 'name', cellTooltip: true, headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'},\n {name: 'Uploaded By', field: 'email', cellTooltip: true, headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'},\n {name: 'Date', field: 'date', headerCellClass: 'ui-grid-header-custom', cellClass: 'ui-grid-cell-custom'}\n ],\n infiniteScrollRowsFromEnd: 40,\n pageSize: 100\n };\n\n vm.getFileId = function(gridData, index) {\n if(gridData && gridData.length){\n return {\n 'file-key': gridData[index].fileId\n }\n }\n };\n\n vm.formatRecentFilesData = function(files) {\n if(files && files.length)\n {\n return _.forEach(files, function (data) {\n _.assign(data, {'date': dateUtil.formatJsonDate(data.date, 'dd/MM/yyyy HH:mm:ss')})\n });\n }\n else\n {\n return [];\n }\n };\n }\n\n})();\n","(function (){\n 'use strict';\n\n angular\n .module('tfc.Products')\n .factory('ProductMgr', ProductMgr)\n .constant('noCacheHeader', {\n headers : {\n 'Cache-Control': 'no-cache',\n 'Pragma': 'no-cache'\n }\n });\n\n\n // @ngInject\n function ProductMgr($q, Api, $state, $cacheFactory, util, Upload,BrandReports,ExcelReportType, noCacheHeader) {\n var BASE_URL = '/brand/';\n var cache = $cacheFactory('Products');\n\n return {\n upload: upload,\n findFiles: findFiles,\n findRecentFiles: findRecentFiles,\n findMissingStyles: findMissingStyles,\n findStyleSummary: findStyleSummary,\n getReport: getReport\n };\n\n function upload(files, brandKey) {\n var data = {files: files};\n return Upload.upload({\n method : 'POST',\n url : Api.getBasePath() + Api.withEncodedPath(BASE_URL,brandKey),\n data : data\n }).then(clearCache);\n }\n\n function findFiles(fileIdentifier, brandKey) {\n var config = { params : fileIdentifier };\n config = _.extend(config, noCacheHeader);\n return Api.get(Api.withEncodedPath(BASE_URL, brandKey), config).then(getResponseData);\n }\n\n function findStyleSummary(brandKey) {\n return Api.get(Api.withEncodedPath(BASE_URL, brandKey) + '/styleSummary').then(getResponseData);\n }\n\n function findRecentFiles(brandKey) {\n return Api.get(Api.withEncodedPath(BASE_URL, brandKey) + '/recent', noCacheHeader).then(getResponseData);\n }\n\n function clearCache(response) {\n cache.removeAll();\n return response.data;\n }\n\n function findMissingStyles(fileIdentifier, brandKey) {\n return Api.get(Api.withEncodedPath(BASE_URL, brandKey) +'/missingStyles/live',{ params : fileIdentifier })\n .then(getResponseData);\n }\n\n function getReport(brandKey) {\n return Api.get(Api.withEncodedPath(BASE_URL, brandKey) + '/missingStyles/report', {\n cache: true, // Can always cache content\n responseType: 'arraybuffer',\n headers: {\n 'Accept': ExcelReportType\n }\n }).then(function (response) {\n // parse the header as a map\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], {type: disposition['content-type']})\n });\n });\n }\n\n function unpack(response) { return response.data.value; }\n function getResponseData(response) { return response.data; }\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.Products')\n .factory('StyleSummary', StyleSummaryClass);\n\n\n function StyleSummaryClass() {\n\n function StyleSummary(data){\n if (!(this instanceof StyleSummary)) return new StyleSummary(data);\n this.highReceived = data.highReceived;\n this.highMissing = data.highMissing;\n this.high = this.highMissing + this.highReceived;\n this.lowReceived = data.lowReceived;\n this.lowMissing = data.lowMissing;\n this.low = this.lowReceived + this.lowMissing;\n }\n\n return StyleSummary;\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.Products')\n .controller('UploadButtonCtrl', UploadButtonCtrl)\n .directive('tfcUploadButton', tfcUploadButton);\n\n // @ngInject\n function UploadButtonCtrl($state, Upload, ProductMgr, Toast, $stateParams) {\n var vm = this;\n\n vm.onChange = function (invalidFiles) {\n if (!_.isEmpty(vm.upload.files) && _.isEmpty(invalidFiles)) {\n ProductMgr.upload(vm.upload.files, $stateParams.brandKey).then(function () {\n Toast.success('files.publish.success');\n $state.reload();\n }, function (response) {\n if (response.status === 409) {\n Toast.error('files.publish.duplicate', { state : true });\n }\n else {\n Toast.error(\"Site.Error.General\");\n }\n })\n } else {\n errorSizeLimitToast(invalidFiles);\n }\n };\n\n function errorSizeLimitToast(invalidFiles){\n invalidFiles.map(function (file) {\n Toast.error(\"Sorry, there is a maximum file upload size of 8mb: \"+ file.name + \" exceeds limit\", { state : true });\n });\n }\n\n }\n\n // @ngInject\n function tfcUploadButton() {\n return {\n bindToController : true,\n controller : 'UploadButtonCtrl as vm',\n templateUrl : 'Products/UploadButton.tmpl.html',\n scope: {\n vm: '='\n }\n };\n }\n\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .service('ConsumerChart', ConsumerChart);\n\n\n function ConsumerChart($translate, ChartUtil, ConsumerChartDisplay){\n\n return {\n getChartData : getChartData,\n getXLabelData: getXLabelData,\n getFormattedData: getFormattedData,\n getChartConfig: getChartConfig\n };\n\n function getChartData(consumerArr, filterCnfg){\n var chartData = filterChartData(consumerArr, filterCnfg);\n return _.map(chartData, function(data) {\n return { date: data.date, value: _.sumBy(data.values, 'value') };\n });\n }\n\n function getXLabelData(consumerArr){\n return _(consumerArr).map(function(obj){\n return ChartUtil.chartDateParser(obj.date);\n }).value();\n }\n\n function filterChartData(arr, filterCnfg) {\n return _(arr).map(function (obj) {\n return {\n date: obj.startDate,\n values: _.filter(obj['metricValues'], filterCnfg)\n }\n }).sortBy('date').value();\n }\n\n /**\n * @chartData array : [{chartLine: chartData},...]\n *\n * @result object: {\n * chartLine1: {\n * values: [2,4,5,6...],\n * color: ['#dffdfd',..],\n * label: fn()}\n * },\n * ...\n * }\n *\n */\n function getFormattedData(chartConfig, chartData){\n return _.map(chartConfig.series, function (config) {\n var values = getChartData(chartData, config.filter);\n return {\n values: _(values).map(function(x){ return x.value }).value(),\n dates: _(values).map(function(x){ return x.date }).value(),\n color: config.color,\n data: values,\n labelColor: config.color.stroke,\n label: $translate.instant(config.label),\n stackedTotal: config.stackedTotal\n };\n });\n }\n\n function getChartConfig(chartType, titleProp, drawAreaChart, detailLevel, tooltipProp, section, optionalParams) {\n return _.merge({\n chartType: chartType,\n title: titleProp,\n drawAreaChart: drawAreaChart,\n detailLevel: detailLevel,\n // Because this cannot be translated in UI\n titleTooltip: $translate.instant(tooltipProp),\n section: section\n }, optionalParams);\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('StandardReports', StandardReports);\n\n // @ngInject\n function StandardReports($q, $stateParams, util, Api, ApiFallback, Toast, UtilCacheProvider, ConsumerChartDisplay){\n\n var baseUrl = '/store/consumer/';\n UtilCacheProvider('consumerDataCache', {\n maxAge: 86400000 // Keeping cache for 1 day\n });\n\n UtilCacheProvider('filterApiCache');\n\n UtilCacheProvider('userStoreCache');\n\n\n var exportErrorFallBack = ApiFallback.createFallback(serverErrorCodesHandled, handleExportError);\n\n function handleExportError(reason) {\n Toast.error('standard.report.export.error');\n return $q.reject(reason);\n }\n\n function serverErrorCodesHandled(statusCode) {\n return _.startsWith(statusCode, '5'); // this will handle 5XX error codes\n }\n\n return {\n downloadReport : downloadReport,\n getConsumerFilters: getConsumerFilters,\n findUserStores: findUserStores,\n defaultSelectedStores: defaultSelectedStores,\n filteredPercent: filteredPercent,\n getConsumerData: getConsumerData,\n getColorSwatches: getColorSwatches,\n percentTotal: percentTotal,\n transformIntoChartData: transformIntoChartData,\n doArraysContainSameElements: doArraysContainSameElements,\n calloutOptions: calloutOptions,\n sectionOptions: sectionOptions,\n findInSummary: findInSummary\n };\n\n function sectionOptions(api, valuePrefix, valueSuffix) {\n return {\n api: api,\n valuePrefix: valuePrefix,\n valueSuffix: valueSuffix\n }\n }\n\n function calloutOptions(summaryKey, values, hideTitle) {\n return {\n summaryKey: summaryKey,\n values: values,\n hideTitle: hideTitle\n };\n }\n\n function findInSummary(summary, summaryKey, userCohort) {\n var summaryVal = _.find(summary, {metric: summaryKey});\n if(summaryVal) {\n var userCohortValue = _.find(summaryVal.metricValue, {userCohort: userCohort});\n return userCohortValue && userCohortValue.value;\n }\n\n }\n\n function getColorSwatches(tfKeys) {\n return [\n {keys: tfKeys || [ConsumerChartDisplay.Colors.tfLine.stroke], value: 'True Fit'},\n {keys: [ConsumerChartDisplay.Colors.nonTFLine.stroke], value: 'Non-True Fit'}\n ];\n }\n\n function getConsumerFilters(storeKey) {\n return Api.get(baseUrl + 'filters',{\n cache: UtilCacheProvider.get('filterApiCache'),\n params: {storeKey: storeKey}\n }).then(_.property('data'));\n }\n\n function findUserStores() {\n return Api.get('/user-stores',{ cache : UtilCacheProvider.get('userStoreCache') })\n .then(function (response) {\n var stores = response.data;\n var mappedStores = _.map(stores, function (store) {\n return {\n 'storeKey': store.tla,\n 'storeName': store.name\n }\n });\n return _.sortBy(mappedStores, ['storeName'])\n });\n }\n\n function defaultSelectedStores(userStores, selectedStoreKeys) {\n if(!selectedStoreKeys) {\n var storeKeys = _.map(userStores, 'storeKey');\n if(storeKeys.length > 10){\n return _.take(storeKeys,1);\n } else {\n return storeKeys;\n }\n } else {\n return selectedStoreKeys;\n }\n }\n\n function getFileContent(dashboard, filter, fileType) {\n return $q.when(content(dashboard, filter, fileType))\n .then(function (content) {\n return content;\n });\n }\n\n /**\n *\n * @param pathPrefix URL prefix for dashboard to be used in download URL\n * @param params params with currently applied filters\n * @returns {string}\n */\n function generateURL(pathPrefix) {\n return baseUrl + pathPrefix;\n }\n\n function content(pathPrefix, params, fileType) {\n\n return Api.get(generateURL(pathPrefix), {\n cache : false,\n params: params,\n responseType : 'arraybuffer',\n headers: {\n 'Accept': fileType\n },\n specificallyHandled: true,\n },exportErrorFallBack).then(function (response) {\n var disposition = util.parseMultipartHeader(response.headers('content-disposition'));\n return $q.all({\n fileName: disposition.filename,\n dataBlob: new Blob([response.data], { type : disposition['content-type'] })\n });\n });\n }\n\n function downloadReport(pathPrefix, params, fileType) {\n return getFileContent(pathPrefix, params, fileType)\n .then(function (content) {\n download(content.dataBlob, content.fileName, fileType);\n });\n }\n\n function filteredPercent(total, usedForReporting) {\n var filtered = _.round(((total - usedForReporting) / total) * 100, 2);\n return (filtered > 1) ? filtered : \"<1\";\n }\n\n function getConsumerData(path, detailLevel, params) {\n return Api.get(baseUrl + path + \"/\" + detailLevel, {\n cache: UtilCacheProvider.get('consumerDataCache'),\n params: params\n }).then(_.property('data'));\n }\n\n function percentTotal(num, den) {\n return _.round((num/ den) * 100, 2)\n }\n\n /**\n * This method returns a function which takes rawData as the input and transform the rawData into format expected by Chart.\n * Here metric param will be used to extract the values (datapoints) to be used displayed in charts.\n * @param metric\n * @returns {function(*): *}\n */\n function transformIntoChartData(metric) {\n return function(rawData){\n _.forEach(rawData.dateMetrics, function (data) {\n _.forEach(data.metricValues, function (metricValue) {\n metricValue.value = metricValue.value[metric];\n })\n });\n return rawData;\n };\n }\n\n function doArraysContainSameElements(currentArray, newArray) {\n return _.isEmpty(_.xor(currentArray || [], newArray || []))\n }\n\n }\n\n})();\n","(function(){\n angular.module('tfc.retailer.StandardReports')\n .directive('standardReportsDatePicker', standardReportsDatePicker);\n\n function standardReportsDatePicker(){\n return{\n restrict: 'A',\n require: 'ngModel',\n link: function($scope, elm, attr, ngModelController){\n // Had to keep shared scope as two isolated scope are not allowed on single element\n // and this directive is sharing the isolated scope with validateInputDate directive\n\n attr.$observe('minDate', function (newValue) {\n $(elm).datepicker('option', 'minDate', newValue);\n });\n\n attr.$observe('maxDate', function (newValue) {\n $(elm).datepicker('option', 'maxDate', newValue);\n });\n\n $scope.$watch(function () {\n return ngModelController.$modelValue;\n }, function(newValue) {\n $(elm).datepicker(\"setDate\", newValue);\n });\n \n // Datepicker Settings\n elm.datepicker({\n inline: attr[\"inline\"] || false,\n autoSize: true,\n dateFormat: attr[\"dateformat\"] || 'M d, yy',\n showOn: (attr.displayIcon) ? 'both' : null,\n buttonText: '',\n maxDate: attr[\"maxDate\"],\n minDate: attr[\"minDate\"],\n onSelect: function (value) {\n $scope.$apply(function () {\n ngModelController.$setViewValue(value);\n ngModelController.$render();\n });\n elm.focus();\n }\n\n });\n\n }\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('AnalyticsHelper', AnalyticsHelper);\n\n function AnalyticsHelper($stateParams, BrandReports, StandardReports, GaUtil, Auth, LookAndFeel, DateUtil, Filters) {\n\n var filterEvents = {\n \"Date Range\": combinationSelectionEvent([\"startDate\", \"endDate\"]),\n \"Detail Level\": singleSelectionEvent(\"detailLevel\"),\n \"Continent\": multipleSelectionEvent(\"continent\", function () {\n return Filters.getRegion(0);\n }),\n \"Country\": multipleSelectionEvent(\"country\", function () {\n return Filters.getRegion(1);\n }),\n \"UI Locale\": multipleSelectionEvent(\"uiLocale\", function () {\n return Filters.getRegion(2);\n }),\n \"Device Type\": multipleSelectionEvent(\"deviceType\", function () {\n return Filters.getDeviceTypes();\n }),\n \"Addressable\": singleSelectionEvent(\"addressable\"),\n \"Hierarchy\": combinationSelectionEvent([\"department\", \"category\", \"classification\"])\n };\n\n return {\n sendPageChangeEvent: sendPageChangeEvent,\n sendLoginEvent: sendLoginEvent,\n setUserIdDimension: setUserIdDimension,\n sendViewChangeEvent: sendViewChangeEvent,\n sendDateRangeChangeEvent: sendDateRangeChangeEvent,\n sendStoreSelectionChangeEvent: sendStoreSelectionChangeEvent,\n sendDataDownloadEvent: sendDataDownloadEvent,\n sendAnalyticsFilterChangeEvent: sendAnalyticsFilterChangeEvent\n };\n\n function sendPageChangeEvent(fromState, toState) {\n eventCategory().then(function (category) {\n if (toState.data && (toState.name !== fromState.name)) {\n GaUtil.setGaDimension('path', (toState.data.path) ? location.pathname + toState.data.path : location.pathname);\n GaUtil.setGaDimension('title', toState.data.title);\n if (toState.data && toState.data.title) {\n GaUtil.sendGaEvent(category, 'Report View', toState.data.title);\n }\n GaUtil.sendGaPageView();\n }\n });\n }\n\n function sendLoginEvent() {\n eventCategory().then(function (category) {\n var eventAction = LookAndFeel.isAnalytics() ? 'Analytics Login' : 'Insight Login';\n var user = Auth.getUser();\n if (user) {\n GaUtil.sendGaEvent(category, eventAction, user.userId, false);\n }\n });\n }\n \n function setUserIdDimension() {\n var user = Auth.getUser();\n if (user) {\n GaUtil.setGaDimension('dimension1', user.userId);\n GaUtil.setGaDimension('userId', user.userId);\n }\n }\n\n function sendViewChangeEvent(toView) {\n eventCategory().then(function (category) {\n GaUtil.sendGaEvent(category, 'Change View', toView);\n });\n }\n\n function sendDateRangeChangeEvent(newDateRange, presetRanges) {\n var formattedNewStartDate = DateUtil.formatToYearMonthDay(newDateRange.startDate);\n var formattedNewEndDate = DateUtil.formatToYearMonthDay(newDateRange.endDate);\n\n if(!_.eq(formattedNewStartDate, $stateParams.startDate) || !_.eq(formattedNewEndDate, $stateParams.endDate)) {\n var presetRange = _.find(presetRanges, function (presetRange) {\n return _.eq(DateUtil.shortMonthDate(presetRange.dateStart()), newDateRange.startDate) &&\n _.eq(DateUtil.shortMonthDate(presetRange.dateEnd()), newDateRange.endDate);\n });\n var eventLabel = presetRange ? presetRange.text : (formattedNewStartDate + \",\" + formattedNewEndDate);\n\n analyticsEventCategory().then(function (category) {\n GaUtil.sendGaEvent(category, 'Date Range Filter', eventLabel);\n })\n }\n }\n\n function sendStoreSelectionChangeEvent(currentSelection, newSelection) {\n if(!StandardReports.doArraysContainSameElements(currentSelection, newSelection)) {\n var eventLabel = _.join(newSelection, \",\");\n analyticsEventCategory().then(function (eventCategory) {\n GaUtil.sendGaEvent(eventCategory, 'TLA Change', eventLabel);\n });\n }\n }\n\n function sendDataDownloadEvent(eventType, reportName) {\n analyticsEventCategory().then( function (category) {\n var eventLabel = reportName + ' Report ' + eventType;\n GaUtil.sendGaEvent(category, 'Download Report', eventLabel);\n });\n }\n\n function sendAnalyticsFilterChangeEvent(newFilter) {\n var eventParams = [];\n\n _.each(filterEvents, function (eventParamsFn, eventType) {\n var event = eventParamsFn(newFilter, eventType);\n if(event) eventParams.push(event);\n });\n\n analyticsEventCategory().then(function (eventCategory) {\n _.each(eventParams, function (params) {\n GaUtil.sendGaEvent(eventCategory, params.eventAction, params.eventLabel);\n });\n });\n }\n\n function eventCategory() {\n if(LookAndFeel.isAnalytics()) {\n return analyticsEventCategory();\n } else if(LookAndFeel.isBrandMetrics()) {\n return brandMetricsEventCategory();\n }\n }\n\n function analyticsEventCategory() {\n return StandardReports.findUserStores()\n .then( function (userStores) {\n var selectedStoreKeys = StandardReports.defaultSelectedStores(userStores, $stateParams.storeKey);\n return _.join(selectedStoreKeys, \",\");\n });\n }\n\n function brandMetricsEventCategory() {\n return BrandReports.selectedBrandKey($stateParams.brandKey);\n }\n\n function gaEventParams(eventAction, eventLabel) {\n return {\n eventAction: eventAction,\n eventLabel: eventLabel\n };\n }\n\n function multipleSelectionEvent(filterValue, allValuesFn) {\n function multipleSelectionLabel(allFilters, newFilter) {\n if(_.isEmpty(newFilter) || StandardReports.doArraysContainSameElements(allFilters, newFilter)) {\n return \"All\";\n } else {\n return _.join(newFilter, \",\");\n }\n }\n return function (newFilter, eventType) {\n if(!StandardReports.doArraysContainSameElements($stateParams[filterValue], newFilter[filterValue])) {\n var eventAction = eventType + \" Filter\";\n var eventLabel = multipleSelectionLabel(allValuesFn(), newFilter[filterValue]);\n return gaEventParams(eventAction, eventLabel);\n }\n }\n }\n\n function singleSelectionEvent(filterValue) {\n return function (newFilter, eventType) {\n if(!_.eq(newFilter[filterValue], $stateParams[filterValue])) {\n var eventAction = eventType + \" Filter\";\n if(!_.isUndefined(newFilter[filterValue])) {\n return gaEventParams(eventAction, newFilter[filterValue].toString());\n }\n }\n }\n }\n\n function combinationSelectionEvent(filterValues) {\n return function (newFilter, eventType) {\n var areFilterValuesChanged = _.some(filterValues, function (filterType) {\n return !_.eq(newFilter[filterType], $stateParams[filterType]);\n });\n\n if(areFilterValuesChanged) {\n var eventAction = eventType + \" Filter\";\n var eventLabel = _.join(_.map(filterValues, function (value) { return newFilter[value]; }), \",\");\n return gaEventParams(eventAction, eventLabel);\n }\n }\n }\n\n\n\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcAnchorScroll', AnchorScroll);\n\n // @ngInject\n function AnchorScroll() {\n return {\n restrict: 'A',\n scope: {\n currentPage: '='\n },\n link : function ($scope, $el) {\n $scope.$watch('currentPage', function(newValue, oldValue){\n if(oldValue!=newValue){\n $el[0].parentNode.scrollIntoView({block: 'start', behaviour : 'smooth'});\n }\n });\n }\n };\n }\n\n})();\n","(function(){\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .provider('UtilCacheProvider', CacheFactoryProvider);\n\n function CacheFactoryProvider() {\n\n this.$get = function () {\n var caches = {};\n\n function cacheProvider(cacheId, options) {\n var size = 0,\n config = _.extend({}, options, {id: cacheId}),\n data = {},\n lruObj = {},\n freshEnd = null,\n staleEnd = null;\n\n // validate options\n _validateCapacity(config.capacity);\n _validateMaxAge(config.maxAge);\n\n // Set the default capacity\n if (!config.capacity) {\n config.capacity = Number.MAX_VALUE;\n }\n\n /**\n * @method _validateCapacity\n * @desc Validates the capacity.\n * @param capacity: Integer\n */\n function _validateCapacity(capacity) {\n if (config.capacity) {\n if (!_.isNumber(config.capacity)) throw new Error('capacity must be a number');\n if (config.capacity < 0) throw new Error('capacity must be greater than zero');\n }\n }\n\n /**\n * @method _validateMaxAge\n * @desc Validates the maxAge.\n * @param maxAge: Integer\n */\n function _validateMaxAge(maxAge) {\n if (maxAge) {\n if (!_.isNumber(maxAge)) throw new Error('maxAge must be a number');\n if (maxAge < 0) throw new Error('maxAge must be greater than zero');\n }\n }\n\n /**\n * @method refresh\n * @desc Makes the `entry` the freshEnd of the LRU linked list.\n * @param entry : Object {}\n */\n function _refresh(entry) {\n if (entry !== freshEnd) {\n if (!staleEnd) {\n staleEnd = entry;\n } else if (staleEnd === entry) {\n staleEnd = entry.next;\n }\n\n _link(entry.next, entry.prev);\n _link(entry, freshEnd);\n freshEnd = entry;\n freshEnd.next = null;\n }\n }\n\n /**\n * @method link\n * @desc Bidirectionally links two entries of the LRU linked list\n * @param nextEntry: Object\n * @param prevEntry: Object\n */\n function _link(nextEntry, prevEntry) {\n if (nextEntry !== prevEntry) {\n if (nextEntry) {\n nextEntry.prev = prevEntry;\n }\n if (prevEntry) {\n prevEntry.next = nextEntry;\n }\n }\n }\n\n /**\n * @method cacheProvider.put\n * @param key: string => The identifier for the item to add to the cache.\n * @param value: any => The value of the item to add to the cache.\n * @returns The value of the item added to the cache.\n */\n this.put = function (key, value) {\n var lruEntry = lruObj[key] || (lruObj[key] = {key: key}),\n self = this;\n\n _refresh(lruEntry);\n\n if (_.isUndefined(value)) return;\n\n if (!(key in data)) size++;\n\n data[key] = {\n value: value\n };\n\n if (config.maxAge) {\n data[key].timestamp = new Date().getTime();\n if (data[key].timeoutId) {\n clearTimeout(data[key].timeoutId);\n }\n data[key].timeoutId = setTimeout(function () {\n self.remove(key);\n }, config.maxAge);\n }\n\n if (size > config.capacity) {\n this.remove(staleEnd.key);\n }\n\n return value;\n };\n\n /**\n * @method cacheProvider.get\n * @param key: string The key of the item to retrieve.\n * @returns The value of the item in the cache with the specified key.\n */\n this.get = function (key) {\n var lruEntry = lruObj[key];\n\n if (!lruEntry) return;\n\n _refresh(lruEntry);\n\n return data[key].value;\n };\n\n /**\n * @method cacheProvider.remove\n * @desc Remove the specified key-value pair from this cache.\n * @param key: String => The key of the key-value pair to remove.\n */\n this.remove = function (key) {\n var lruEntry = lruObj[key];\n\n if (!lruEntry) {\n return;\n }\n\n if (lruEntry === freshEnd) {\n freshEnd = lruEntry.prev;\n }\n if (lruEntry === staleEnd) {\n staleEnd = lruEntry.next;\n }\n _link(lruEntry.next, lruEntry.prev);\n\n delete lruObj[key];\n delete data[key];\n size--;\n };\n\n /**\n * @method cacheProvider.removeAll\n * @desc Clear this cache.\n */\n this.removeAll = function () {\n data = {};\n size = 0;\n lruObj = {};\n freshEnd = staleEnd = null;\n };\n\n /**\n * @method cacheProvider.destroy\n * @desc Completely destroy this cache.\n */\n this.destroy = function () {\n data = null;\n config = null;\n lruObj = null;\n delete caches[cacheId];\n };\n\n /**\n * @method cacheProvider.info\n * @returns Object containing config information about this cache.\n *\n */\n this.info = function () {\n return _.extend({}, config, {size: size});\n };\n }\n\n /**\n * @class cacheFactory\n * @param cacheId : string => The id of the new cache.\n * @param [options] { capacity: {number}, maxAge: {number} }\n * @returns {cacheProviderObjects}\n */\n function cacheFactory(cacheId, options) {\n if (cacheId in caches) {\n throw new Error('cacheId ' + cacheId + ' already exist');\n } else if (!_.isString(cacheId)) {\n throw new Error('cacheId must be a string!');\n }\n\n caches[cacheId] = new cacheProvider(cacheId, options);\n return caches[cacheId];\n }\n\n /**\n * @method cacheFactory.info\n * @returns object containing information about all caches of this factory.\n */\n cacheFactory.info = function () {\n var info = {};\n _.forEach(caches, function (cache, cacheId) {\n info[cacheId] = cache.info();\n });\n return info;\n };\n\n /**\n * @method advancedCacheFactory.get\n * @param {string} cacheId The id of the desired cache.\n * @returns {cacheProviderObject} The cache with the specified cachedId.\n */\n cacheFactory.get = function (cacheId) {\n return caches[cacheId];\n };\n\n cacheFactory.removeAll = function () {\n _.each(caches, function (cache) {\n cache.removeAll();\n })\n };\n\n return cacheFactory;\n };\n }\n\n})();","(function() {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('ChartUtil', ChartUtil);\n\n function ChartUtil(){\n return {\n chartDateParser: d3.time.format(\"%Y-%m-%d\").parse,\n dateLabelFormat: d3.time.format(\"%m, %d %Y\")\n }\n\n }\n\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .factory('ChartService', ChartService);\n\n function ChartService(){\n\n return {\n getSizeAdviceChart : getSizeAdviceChart,\n getBarChartWithoutLabel : getBarChartWithoutLabel,\n getBarChartWithLabel: getBarChartWithLabel\n };\n\n function getSizeAdviceChart(chartData) {\n return _.defaultsDeep({data: chartData}, {\n fn: {\n value: _.property('sizeAdvice'),\n color: ['#ABABAB']\n }\n });\n }\n\n function getBarChartWithoutLabel(chartData){\n return _.defaultsDeep({data: angular.copy(chartData)}, {\n dontRank : true,\n fn: {\n value : _.property('percent'),\n color : '#7C0A40',\n valueLabel : function (d) {\n return (d.percent * 100).toFixed(1) + '%';\n }\n }\n });\n }\n\n function getBarChartWithLabel(chartData) {\n return _.defaultsDeep(getBarChartWithoutLabel(chartData), {\n fn: {\n label : function(d) {\n return d.label;\n }\n }\n });\n }\n\n }\n})();","(function () {\n 'use strict';\n\n // Moving all constants at a common place\n angular.module('tf.retailer.Util')\n .constant('BRAND_URL', '/brands/')\n .constant('STYLE_URL', '/report/styles/');\n\n\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('GaUtil', GaUtil);\n\n function GaUtil($window, Api) {\n\n var gaTrackingId;\n\n return {\n sendGaEvent: sendGaEvent,\n sendGaPageView: sendGaPageView,\n createGaTracker: createGaTracker,\n setGaDimension: setGaDimension\n };\n\n function loadGaId() {\n return Api.get('/ga-id',{cache : true}).then(function(apiData){\n if(apiData.status == 200){\n return apiData.data;\n }\n });\n }\n\n function sendGaEvent(eventCategory, eventAction, eventLabel, isInteractive) {\n if(gaTrackingId){\n $window.ga('send', 'event', {\n eventCategory: eventCategory,\n eventAction: eventAction,\n eventLabel: eventLabel,\n nonInteraction: isInteractive || true\n });\n }\n }\n\n function sendGaPageView(title,pagePath) {\n if(gaTrackingId){\n $window.ga('send', 'pageview',{\n title : title,\n page : location.pathname + pagePath\n });\n }\n }\n\n function createGaTracker() {\n loadGaId().then(function(gaId){\n if(gaId){\n gaTrackingId = gaId;\n $window.ga('create',{\n trackingId : gaTrackingId,\n cookieDomain : 'auto'\n });\n }\n });\n }\n\n function setGaDimension(dimension, value) {\n if(gaTrackingId && value){\n $window.ga('set',dimension, value.toString());\n }\n }\n\n }\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .constant('LookAndFeelType',{\n BrandMetrics: 'BrandMetrics',\n Analytics: 'Analytics'\n })\n .factory('LookAndFeel', LookAndFeel);\n\n // @ngInject\n function LookAndFeel($log, $injector, Nav, StandardReportPrivileges, LookAndFeelType, GaUtil) {\n\n var lookAndFeel = null;\n return {\n setToAnalytics: setToAnalytics,\n setToBrandMetrics: setToBrandMetrics,\n get: get,\n reset: reset,\n setLookAndFeelOnUserLogin: setLookAndFeelOnUserLogin,\n isAnalytics: isAnalytics,\n isBrandMetrics: isBrandMetrics\n };\n\n function set(currentLookAndFeel) {\n lookAndFeel = currentLookAndFeel;\n }\n\n function get() {\n return lookAndFeel;\n }\n\n function reset(){\n lookAndFeel = null;\n }\n\n function setLookAndFeelOnUserLogin(user){\n if(user){\n if(user && isAnalyticsUser(user)){\n setToAnalytics();\n GaUtil.setGaDimension('dimension2', LookAndFeelType.Analytics);\n }else {\n setToBrandMetrics();\n GaUtil.setGaDimension('dimension2', LookAndFeelType.BrandMetrics);\n }\n } else {\n $log.error(\"User needs to be logged in for setting the lookEndFeel\")\n }\n }\n\n function isAnalyticsUser(user){\n return _.includes(user.privileges, \"InsightsAnalyticsUser\")\n }\n\n function isAnalytics(){\n return LookAndFeelType.Analytics === lookAndFeel;\n }\n\n function isBrandMetrics(){\n return LookAndFeelType.BrandMetrics === lookAndFeel;\n }\n\n function setToAnalytics(){\n set(LookAndFeelType.Analytics);\n }\n\n function setToBrandMetrics(){\n set(LookAndFeelType.BrandMetrics);\n }\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .factory('ProgressModal', ProgressModal);\n\n // @ngInject\n function ProgressModal($q, $timeout, $uibModal) {\n\n // statuses\n var PENDING = 'pending',\n SUCCESS = 'success',\n FAILURE = 'error';\n\n return {\n showModal : showModal\n };\n\n function defaultPercentFn(event) {\n return event && event.loaded / event.total;\n }\n\n function showModal(promise, config) {\n config = config || {};\n var status = PENDING;\n var percentDone = 0;\n var percentFn = config.percentFn || defaultPercentFn;\n\n var modal = $uibModal.open({\n size : 'sm',\n templateUrl : 'Util/ProgressModal.tmpl.html',\n controller : function ($scope) {\n $scope.$watch(function () {\n return percentDone;\n }, function (percent) {\n if (!isNaN(percent)) {\n $scope.percent = percent;\n }\n });\n\n function isStatus(expected) {\n return status === expected;\n }\n\n $scope.showProgress = config.progress !== false;\n $scope.isPending = _.bind(isStatus, null, PENDING);\n $scope.isSuccess = _.bind(isStatus, null, SUCCESS);\n $scope.isFailure = _.bind(isStatus, null, FAILURE);\n $scope.translationKey = config.translationKey;\n }\n });\n\n\n return promise.then(success, failure, progress);\n\n function deferredClose() {\n return $timeout(function () {\n modal.close();\n }, 1000);\n }\n\n function success(result) {\n percentDone = 1;\n status = SUCCESS;\n return deferredClose().then(function () {\n return result;\n });\n }\n\n function failure(reason) {\n status = FAILURE;\n return deferredClose().then(function () {\n return $q.reject(reason);\n });\n }\n\n function progress(event) {\n percentDone = percentFn(event);\n }\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('setChartLayout', SetChartLayout);\n\n // @ngInject\n function SetChartLayout($timeout) {\n return {\n restrict: 'A',\n scope: {\n setChartLayout: '='\n },\n link: function(scope, element, attrs) {\n scope.$watchCollection('setChartLayout', function (value) {\n if (scope.$parent.$last){\n $timeout(function(){\n var childElemWidthArr = [];\n var elem = document.getElementsByClassName(element[0].className);\n var elemWidth = elem[0].clientWidth;\n var elemCounts = elem.length;\n var childCounts = element[0].childElementCount;\n var margin = 30 + 40*(childCounts-1);\n var remainingWidth = elemWidth - margin;\n for(var i=0;i childElemWidthArr[i].columnWidth){\n res.style.width = (firstDivWidth + caretWidth) + 'px';\n }else{\n if(res.classList[1] === 'style-name'){\n if(childElemWidthArr[i].columnWidth > styleNameColWidth){\n res.style.width = styleNameColWidth + 'px';\n }else{\n res.style.width = (childElemWidthArr[i].columnWidth + 2) + 'px';\n }\n }else{\n res.style.width = childElemWidthArr[i].columnWidth + 'px';\n }\n }\n });\n }\n }, 0, false);\n }\n });\n }\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcSwitch', tfcSwitch);\n\n // @ngInject\n function tfcSwitch() {\n return {\n require : 'ngModel',\n templateUrl : 'Util/Switch.tmpl.html',\n scope : {\n ngModel : '='\n },\n link : function ($scope, $el) {\n var $input = $el.find('input');\n // toggle when pressing space\n $el.on('keypress', function (event) {\n if (event.target !== $input[0] &&\n ' ' === String.fromCharCode(event.keyCode)) {\n event.preventDefault();\n $input[0].click();\n $scope.$apply();\n }\n });\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .filter('titleCase', titleCase);\n\n // @ngInject\n function titleCase() {\n return function(input) {\n input = input || '';\n return input.replace(/\\w\\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('validateInputDate', validateInputDate);\n\n // @ngInject\n function validateInputDate(DateUtil) {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '=',\n minDate: '@',\n maxDate: '@'\n },\n link: function ($scope, element, attrs, ngModelController) {\n\n ngModelController.$options = {\n updateOn: 'blur',\n updateOnDefault: false\n };\n\n ngModelController.$formatters.push(format);\n\n ngModelController.$parsers.push(parseInput);\n\n\n function parseInput(input) {\n var inputDate = moment(input);\n var minDate = $scope.minDate;\n var maxDate = $scope.maxDate;\n\n var isInputValid = false;\n\n if(inputDate.isValid()){\n if(minDate && inputDate.diff(minDate) >= 0){\n if(maxDate && inputDate.diff(maxDate) <= 0){\n isInputValid = true;\n }\n }\n }\n\n var formatted;\n if (isInputValid) {\n // set the view back to the formatted model value\n formatted = format(input);\n } else {\n formatted = format(ngModelController.$modelValue);\n }\n\n ngModelController.$setViewValue(formatted);\n ngModelController.$render();\n\n return formatted;\n }\n\n function format(value) {\n var momentObj = value && moment(value);\n if(momentObj.isValid()){\n return DateUtil.shortMonthDate(momentObj);\n } else {\n return \"\";\n }\n }\n\n }\n };\n }\n\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcLoadingPane', tfcLoadingPane);\n\n // @ngInject\n function tfcLoadingPane($compile) {\n return {\n restrict: 'A',\n link: getLinkFunction($compile)\n };\n }\n\n function getLinkFunction($compile) {\n return function link(scope, element, attrs) {\n if (attrs.tfcLoadingPane === '') {\n throw new Error('show-when-loaded expects an expression that evaluates to a boolean');\n }\n\n // NOTE: HTML snippet for loading indicator\n var loadingIndicator = $compile(\n '
'\n )(scope);\n\n element.addClass('hide');\n element.after(loadingIndicator);\n\n scope.$watch(attrs.tfcLoadingPane, function(result) {\n if (result === true) {\n loadingIndicator.remove();\n element.removeClass('hide');\n } else {\n element.addClass('hide');\n element.after(loadingIndicator);\n }\n });\n };\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .factory('ngUtil', ngUtil);\n\n // @ngInject\n function ngUtil() {\n return {\n eventBinder: eventBinder\n };\n\n function eventBinder($scope) {\n var eventBindings = [];\n\n $scope.$on('$destroy', function () {\n angular.forEach(eventBindings, function (binding) {\n binding.$el.off(binding.event, binding.fn);\n });\n });\n\n return on;\n\n function on($el, event, fn) {\n eventBindings.push({\n $el : $el,\n event : event,\n fn : fn\n });\n $el.on(event, fn);\n }\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .filter('percent', percent);\n\n // @ngInject\n function percent($filter) {\n var numberFilter = $filter('number');\n return function (value, digits) {\n var formatted = numberFilter(Number(value) * 100, digits);\n if (formatted) {\n formatted += '%';\n }\n return formatted;\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .factory('sessionStorage', function () {\n return window.sessionStorage;\n });\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .filter('sortBy', sortBy);\n\n // @ngInject\n function sortBy() {\n return function(array, key, orderBy) {\n var formatted = _.orderBy(array, [key], [orderBy]);\n return formatted;\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .filter('user', user);\n\n function user() {\n return function (user) {\n if (user) {\n return user.firstName + ' ' + user.lastName + ' <' + user.email + '>';\n }\n };\n }\n\n})();\n","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('Comparisons', Comparisons)\n .factory('ComparisonsMetric', ComparisonsMetricClass)\n .factory('ComparisonsType', ComparisonsTypeClass);\n\n function Comparisons(StandardReports, SectionConfig, ComparisonsMetric, Filters, DateUtil, $stateParams, ComparisonsType,\n AreaLineChartConfig, $translate, standardReportNumberFilter){\n\n return {\n metrics : getMetrics,\n hierarchies: getHierarchies,\n dateRanges: getDateRanges,\n defaultDateRange: defaultDateRange,\n defaultHierarchy: defaultHierarchy,\n hierarchyCompareTooltipHeader: hierarchyCompareTooltipHeader,\n formatDateRange: formatDateRange,\n maxComparisonStartDate : maxComparisonStartDate,\n dateRangeCompareTooltipHeader: dateRangeCompareTooltipHeader,\n getSummaryValues: getSummaryValues,\n options: options,\n allMetricSummary: allMetricSummary\n };\n\n function getVisibleSeries(chartOptions) {\n return chartOptions && chartOptions.series &&\n _(chartOptions.series)\n .filter({visible: true})\n .map('name')\n .value();\n }\n\n function options(detailLevel, groupNames, headerFormatter, multipleXAxis) {\n var staticOptions = {\n detailLevel: detailLevel,\n custom: {\n multipleXAxis: multipleXAxis,\n groupNames: groupNames,\n headerFormatter: headerFormatter,\n xAxisFormatter: function () {\n return moment(this.value).format('DD MMM');\n }\n }\n };\n\n return function (section, chartOptions) {\n return _.extend(staticOptions, {\n section: section,\n valuePrefix: section.valuePrefix,\n visibleSeries: getVisibleSeries(chartOptions)\n })\n }\n }\n\n function getDateRanges(defaultParams) {\n return [\n ComparisonsType('Date Range 1', defaultDateRange('startDate', 'endDate', defaultParams),\n dateRangeSummaryLabel),\n ComparisonsType('Date Range 2', defaultDateRange('comparisonStartDate', 'comparisonEndDate', defaultParams),\n dateRangeSummaryLabel)\n ];\n }\n\n function getHierarchies(defaultParams) {\n return [\n ComparisonsType(hierarchyLabel, defaultHierarchy('department', 'category',\n 'classification', 'addressable', defaultParams), hierarchyLabel),\n ComparisonsType(hierarchyLabel, defaultHierarchy('comparisonDepartment', 'comparisonCategory',\n 'comparisonClassification', 'comparisonAddressable', defaultParams), hierarchyLabel)\n ];\n }\n\n function getMetrics(pageConfig) {\n\n function sectionForPage(pageConfig, sectionName) {\n return _.find(pageConfig.children, {name: sectionName});\n }\n\n return [\n ComparisonsMetric(sectionForPage(pageConfig, 'orders'), 'Orders', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'sessions'), 'Sessions', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'revenue'), 'Revenue', function (response) {\n var formattedRawData = StandardReports.transformIntoChartData('revenue')(response);\n return {\n dateMetrics: formattedRawData.dateMetrics,\n summary: response.summary\n };\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'mau'), 'Monthly Active Users (MAU)', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'dau'), 'Daily Active Users (DAU)', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'conversion'), 'Conversions', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'spu'), 'Sessions per User (SPU)', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'adoption'), 'True Fit Adoption', function (response) {\n return response;\n }),\n ComparisonsMetric(sectionForPage(pageConfig, 'newUsers'), 'New True Fit Users', function (response) {\n return response;\n })\n ];\n }\n\n function defaultDateRange(startDateAttr, endDateAttr, defaultParams) {\n return {\n startDate: DateUtil.shortMonthDate($stateParams[startDateAttr] || defaultParams.startDate),\n endDate: DateUtil.shortMonthDate($stateParams[endDateAttr] || defaultParams.endDate)\n };\n }\n\n function defaultHierarchy(departmentAttr, categoryAttr, classificationAttr, addressableAttr, defaultParams) {\n return {\n department: $stateParams[departmentAttr] || defaultParams.department,\n category: $stateParams[categoryAttr] || defaultParams.category,\n classification: $stateParams[classificationAttr] || defaultParams.classification,\n addressable: _.isUndefined($stateParams[addressableAttr]) ? $stateParams.addressable :\n $stateParams[addressableAttr]\n };\n }\n\n function hierarchyLabel() {\n var that = this;\n return _(['department', 'category', 'classification'])\n .map(function(hierarchy) {\n var value = that.value[hierarchy];\n return value === 'All TrueFit Addressable' ? 'All TF Addr' : value;\n })\n .join('/');\n }\n\n function hierarchyCompareTooltipHeader(groupNames) {\n var groupNamesHeader = _(groupNames).map(function (groupName) {\n return AreaLineChartConfig.tableHeader(groupName, 1);\n }).join('');\n return function (selectedPoint) {\n return AreaLineChartConfig.dateHeader(selectedPoint, 1).join('') + groupNamesHeader;\n }\n }\n\n function formatDateRange(dateRange) {\n return {\n startDate: DateUtil.formatToYearMonthDay(dateRange.startDate),\n endDate: DateUtil.formatToYearMonthDay(dateRange.endDate)\n }\n }\n\n function dateRangeSummaryLabel() {\n return _.map(this.value, function (value) {\n return DateUtil.fullMonthDate(value);\n }).join(' - ');\n }\n\n function maxComparisonStartDate(dateRange) {\n var filters = Filters.getFilter();\n var diff = moment(dateRange.endDate).diff(moment(dateRange.startDate), 'days');\n return DateUtil.shortMonthDate(moment(filters.maxAllowedDate).subtract(diff, 'days'));\n }\n\n function dateRangeCompareTooltipHeader(selectedPoint) {\n return '' + AreaLineChartConfig.dateHeader(selectedPoint, 1).join('');\n }\n\n function getSummaryValues(summary, section, comparisonMetrics) {\n var comparisonMetricLabels = _.concat('',\n _.map(comparisonMetrics, function (metric) {\n return {value: metric.label()};\n }),\n { value:'Diff %' }\n );\n\n\n var valueColumns = _.flatMap(section.callout.values, function (callout) {\n return _.map(callout.values, function(calloutValue) {\n var userCohortValues = _.map(summary, function (values) {\n return StandardReports.findInSummary(values, callout.summaryKey, calloutValue.userCohort.value);\n });\n\n var firstRange = _.first(userCohortValues);\n var secondRange = _.last(userCohortValues);\n var diff = _.round(((secondRange - firstRange) / firstRange) * 100, 2);\n\n var calloutLabel = [ {color: calloutValue.color, value:$translate.instant(calloutValue.label)}];\n\n var valuePrefix = section.valuePrefix || '';\n var valueSuffix = section.valueSuffix || '';\n var formattedUserCohortValues = _.map(userCohortValues, function (value) {\n return { color: calloutValue.color,\n value: valuePrefix + standardReportNumberFilter(_.round(value, 2)) + valueSuffix };\n });\n var formattedDiff = [ {color: calloutValue.color, value: standardReportNumberFilter(diff) + '%'} ];\n\n return _.concat(calloutLabel, formattedUserCohortValues, formattedDiff);\n });\n\n });\n\n return _(comparisonMetricLabels)\n .zip(_.unzip(valueColumns))\n .map(function (value) {\n return _.flatten(value);\n })\n .value();\n }\n\n function allMetricSummary(metrics, dataFn, comparisonMetrics) {\n return _.map(metrics, function (metric) {\n return dataFn(metric).then(function (data) {\n var comparisonValues = _(data)\n .map(function (rangeData, index) {\n var userCohortValues = _(metric.section.callout.values)\n .flatMap(function (calloutValues) {\n return _(calloutValues.values)\n .map(function (calloutValue) {\n return {\n userCohort: calloutValue.userCohort.value,\n value: StandardReports.findInSummary(rangeData.summary, calloutValues.summaryKey,\n calloutValue.userCohort.value),\n color: calloutValue.color,\n valuePrefix: metric.section.valuePrefix || '',\n valueSuffix: metric.section.valueSuffix || ''\n }\n })\n .value();\n })\n .value();\n\n return {\n displayName: comparisonMetrics[index].label(),\n userCohortValues: userCohortValues\n }\n })\n .value();\n\n var diff = {\n displayName: metric.displayName,\n userCohortValues: _(comparisonValues)\n .map('userCohortValues')\n .unzip()\n .map(function (userCohortValues) {\n var firstRange = _.first(userCohortValues);\n var secondRange = _.last(userCohortValues);\n var diffValue = _.round(((secondRange.value - firstRange.value) / firstRange.value) * 100, 2);\n return {\n userCohort: firstRange.userCohort,\n value: _.isFinite(diffValue) ? diffValue : '-.-'\n };\n })\n .value()\n };\n\n return {\n diff: diff,\n comparisonValues: comparisonValues\n }\n });\n });\n }\n }\n\n function ComparisonsMetricClass() {\n\n function ComparisonsMetric(section, displayName, transformFunc) {\n if (!(this instanceof ComparisonsMetric))\n return new ComparisonsMetric(section, displayName, transformFunc);\n\n this.section = section;\n this.displayName = displayName;\n this.transformFunc = transformFunc;\n }\n\n return ComparisonsMetric;\n\n }\n\n function ComparisonsTypeClass() {\n\n function ComparisonsType(name, value, label) {\n if (!(this instanceof ComparisonsType))\n return new ComparisonsType(name, value, label);\n\n this.name = name;\n this.value = value;\n this.label = label;\n }\n\n return ComparisonsType;\n }\n\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ComparisonsConfig', ComparisonsConfig);\n\n function ComparisonsConfig(PageConfig, Section, Chart, SeriesService, CalloutLabelService, UserCohort,\n ConsumerChartDisplay, StandardReports){\n\n var conversion = function (page) {\n return Section(\"conversion\", page,\n Chart(\"conversion\", \"line\", \"percent\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value}),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value }),\n SeriesService.sitewide({ userCohort: UserCohort.all.value }),\n ]\n ),\n [ StandardReports.calloutOptions(\"Conversion\", [ CalloutLabelService.tf(false),\n CalloutLabelService.nonTF(false), CalloutLabelService.sitewide(false)])],\n StandardReports.sectionOptions('conversions',null, '%')\n );\n };\n\n var orders = function(page) {\n return Section(\"orders\", page,\n Chart(\"orders\", \"line\", \"values\", false,\n [SeriesService.tf({userCohort: UserCohort.tf.value, isBot: false, isMatched: true}),\n SeriesService.nonTF({userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true}),\n SeriesService.sitewideWithBots({})]\n ),\n [StandardReports.calloutOptions(\"TotalUsedForReporting\", [CalloutLabelService.tf(true), CalloutLabelService.nonTF(true)]),\n StandardReports.calloutOptions(\"TotalReporting\", [CalloutLabelService.sitewideWithBots(true)])],\n StandardReports.sectionOptions('orders')\n );\n };\n\n var sessions = function(page) {\n return Section(\"sessions\", page,\n Chart(\"sessions\", \"line\", \"values\", false,\n [SeriesService.tf({userCohort: UserCohort.tf.value, isBot: false}),\n SeriesService.nonTF({userCohort: UserCohort.nonTF.value, isBot: false}),\n SeriesService.sitewideWithBots({})]\n ),\n [StandardReports.calloutOptions(\"TotalUsedForReporting\", [CalloutLabelService.tf(true), CalloutLabelService.nonTF(true)]),\n StandardReports.calloutOptions(\"TotalReporting\", [CalloutLabelService.sitewideWithBots(true)])],\n StandardReports.sectionOptions('sessions')\n );\n };\n\n var revenue = function (page) {\n return Section(\"revenue\", page,\n Chart(\"revenue\", \"line\", \"values\", false,\n [ SeriesService.tf(function(v){ return v.userCohort === UserCohort.tf.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.nonTF(function(v){ return v.userCohort === UserCohort.nonTF.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.sitewideWithBots(function(v){ return v.userCohort === UserCohort.all.value && _.isUndefined(v.isMatched) })\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalRevenue\",\n [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true), CalloutLabelService.sitewideWithBots(false)])\n ],\n StandardReports.sectionOptions('revenue', '$')\n );\n };\n\n var mau = function (page) {\n return Section(\"mau\", page,\n Chart(\"mau\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.sitewideWithBots({ userCohort: UserCohort.all.value })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true),\n CalloutLabelService.sitewideWithBots(false)]) ],\n StandardReports.sectionOptions('monthly-users')\n );\n };\n\n var dau = function (page) {\n return Section(\"dau\", page,\n Chart(\"dau\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.sitewideWithBots({ userCohort: UserCohort.all.value })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true),\n CalloutLabelService.sitewideWithBots(false)]) ],\n StandardReports.sectionOptions('daily-users')\n );\n };\n\n var spu = function (page) {\n return Section(\"spu\", page,\n Chart(\"spu\", \"line\", \"ratio\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value}),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value}),\n SeriesService.sitewide({ userCohort: UserCohort.all.value}),\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanSPU\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)]) ],\n StandardReports.sectionOptions('sessions-per-user')\n );\n };\n\n var adoption = function (page) {\n return Section(\"adoption\", page,\n Chart(\"adoption\", \"line\", \"percent\", false, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tf(false) ], true) ],\n StandardReports.sectionOptions('tf-users-percent', null, '%')\n );\n };\n\n var newUsers = function (page) {\n return Section(\"newUsers\", page,\n Chart(\"newUsers\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.newTFUsers.value, isBot: false }) ]),\n [ StandardReports.calloutOptions(\"TotalNewUserCounts\", [ CalloutLabelService.tf(false, UserCohort.newTFUsers) ],\n true) ],\n StandardReports.sectionOptions('daily-users')\n );\n };\n\n return {\n conversion: conversion,\n orders: orders,\n sessions: sessions,\n revenue: revenue,\n mau: mau,\n dau: dau,\n spu: spu,\n adoption: adoption,\n newUsers: newUsers\n };\n\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('AreaLineChartAxisHandle', AreaLineChartAxisHandle);\n\n function AreaLineChartAxisHandle(ReportFormat, Filters, DateUtil, $translate) {\n\n return {\n getDetailLevel: getDetailLevel,\n getTicks: getTicks,\n getXAxisOptions: getXAxisOptions,\n getYAxisOptions: getYAxisOptions,\n prependXLabel: prependXLabel\n };\n\n function getDetailLevel(dateRange) {\n\n var diff = getDateDiff(dateRange);\n\n if(diff <= 92){\n return ReportFormat.Daily;\n } else {\n if(diff >= 93 && diff < 366){\n return ReportFormat.Weekly;\n } else if(diff >= 366){\n return ReportFormat.Monthly;\n }\n }\n }\n\n function getTicks(detailLevel, dateRange) {\n\n var diff = getDateDiff(dateRange);\n\n if(diff <= 15){\n if(detailLevel === ReportFormat.Daily) {\n return getDailyTicks();\n } else {\n if(detailLevel === ReportFormat.Weekly){\n return getWeekTicks();\n } else if(detailLevel === ReportFormat.Monthly){\n return getMonthTicks();\n }\n }\n } else {\n if(diff >= 16 && diff <= 31){\n if(detailLevel === ReportFormat.Daily) {\n return getDailyTicks(2);\n } else {\n if(detailLevel === ReportFormat.Weekly){\n return getWeekTicks();\n } else if(detailLevel === ReportFormat.Monthly){\n return getMonthTicks();\n }\n }\n } else {\n if(diff >= 32 && diff <= 92){\n if(detailLevel !== ReportFormat.Monthly) {\n return getWeekTicks();\n } else {\n return getMonthTicks();\n }\n } else {\n if(diff >= 93 && diff < 366){\n if(detailLevel === ReportFormat.Weekly){\n return getWeekTicks(4);\n } else {\n return getMonthTicks();\n }\n } else {\n if(diff >= 366){\n if(detailLevel !== ReportFormat.Weekly){\n return getMonthTicks(monthInterval(diff)); // Interval of months\n } else {\n return getWeekTicks(monthInterval(diff) * 4); // Interval for weeks divide month into 4 for per week\n }\n }\n }\n }\n }\n }\n\n }\n\n function monthInterval(diff){\n return Math.round((diff/(12 * 30)));\n }\n\n function getDailyTicks(tickInterval){\n return {ticks: d3.time.days, tickInterval: tickInterval || 1};\n }\n\n function getWeekTicks(tickInterval){\n return {ticks: d3.time.weeks, tickInterval: tickInterval || 1};\n }\n\n function getMonthTicks(tickInterval){\n return {ticks: d3.time.months, tickInterval: tickInterval || 1};\n }\n\n function getDateDiff(dateRange) {\n return moment(dateRange.endDate).diff(moment(dateRange.startDate), 'days');\n }\n\n function prependXLabel(detailLevel) {\n return function(d) {\n switch(detailLevel) {\n case ReportFormat.Weekly :\n return 'Week of ' + DateUtil.shortMonthDate(d);\n case ReportFormat.Monthly :\n return DateUtil.onlyMonth(d);\n default :\n return DateUtil.shortMonthDateWithDayOfWeek(d);\n }\n }\n }\n\n function getXAxisTickPositions(detailLevel, data){\n var dates = _.head(_.head(data)).dates;\n var xTicks = getTicks(detailLevel, Filters.getFilter().dateRange);\n\n var startDate = moment(_.first(dates));\n var endDate = moment(_.last(dates)).add(1, 'days'); //adding 1 day else would ignore the endDate\n\n var ticksForDetailLevel = _.map(xTicks.ticks(startDate, endDate, xTicks.tickInterval || 1),\n DateUtil.formatToYearMonthDay)\n\n return _.map(ticksForDetailLevel, function (tick) {\n return _.indexOf(dates, tick);\n });\n }\n\n function getXAxisOptions(data, detailLevel, multipleXAxis, xAxisFormatter) {\n var xAxesData = multipleXAxis ? data : _.take(data, 1);\n return _.map(xAxesData, function (range, index) {\n var xAxisOptions = {\n labels: {\n formatter: xAxisFormatter,\n overflow: 'allow'\n },\n enabled: true,\n categories: _.head(range).dates,\n tickPositions: getXAxisTickPositions(detailLevel, xAxesData),\n crosshair: { zIndex: 3 },\n margin: 0,\n tickWidth: 1,\n tickmarkPlacement: 'on'\n };\n\n if(index > 0) {\n _.extend(xAxisOptions, {\n className: 'zero-width' //class name to hide the axis but not labels\n });\n }\n\n return xAxisOptions;\n })\n }\n\n function yAxisLabelFormatter() {\n var numericSymbols = this.chart.options.lang.numericSymbols,\n i = numericSymbols && numericSymbols.length,\n value = this.value;\n\n if (value >= 1000) {\n while (i--) {\n var multi = Math.pow(1000, i + 1);\n\n if(value % multi !== value) {\n value = Highcharts.numberFormat(value / multi, -1) + numericSymbols[i];\n break;\n }\n }\n }\n return value;\n }\n\n function getYAxisOptions(valueType, drawAreaChart, axisLabel, data) {\n\n return {\n title: {\n text: $translate.instant(axisLabel)\n },\n min: 0,\n tickAmount: 5,\n labels: {\n formatter: yAxisLabelFormatter\n },\n showFirstLabel: false\n }\n }\n\n }\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .constant('noOfIncrements', 4)\n .constant('multipliers', [1,2,4,5])\n .constant('maxMarkerPoints', 14)\n .factory('AreaLineChartConfig', AreaLineChartConfig);\n\n // @ngInject\n function AreaLineChartConfig($translate, numberFilter, maxMarkerPoints, HighChartsService, AreaLineChartAxisHandle) {\n\n var areaLineChartOptions = {\n plotOptions: {\n series: {\n pointPlacement: 'on',\n label: {\n connectorAllowed: false\n },\n states: {\n hover: {\n enabled: true\n }\n },\n marker: {\n radius: 3,\n states: {\n hover: {\n enabled: true,\n lineWidthPlus: 0,\n radiusPlus: 0\n }\n }\n }\n },\n areaspline: {\n stacking: 'normal'\n }\n },\n tooltip: {\n shared: true,\n useHTML: true,\n padding: 0,\n hideDelay: 0,\n enabled: true,\n shape: 'rect'\n },\n chart: {\n height: 220,\n spacing: [20, 40, 5, 0],\n },\n addRemoveSeries: false\n };\n\n return {\n getChartOptions: getChartOptions,\n getDataOptions: getDataOptions,\n tableHeader: tableHeader,\n dateHeader: dateHeader\n };\n\n function getChartOptions(options) {\n var baseOptions = HighChartsService.getBaseOptions();\n return _.merge({}, baseOptions, areaLineChartOptions, setupChart(options), options.custom);\n }\n\n function setupChart(options) {\n var detailLevel = options.detailLevel,\n drawAreaChart = options.section.chart.chartType === 'area',\n valueType = options.section.chart.valueType,\n groupNames = options.custom.groupNames || ['none'],\n headerFormatter = options.custom.headerFormatter || defaultTooltipHeader,\n valueSuffix;\n\n if(valueType === 'percent') {\n valueSuffix = '%'\n }\n\n return {\n plotOptions: {\n series: {\n custom: {\n prependXLabelText: AreaLineChartAxisHandle.prependXLabel(detailLevel)\n }\n }\n },\n tooltip: {\n valuePrefix: options.valuePrefix || '',\n valueSuffix: valueSuffix || '',\n formatter: function () {\n return formatTooltip(this.points, groupNames, headerFormatter, numberFilter);\n }\n },\n chart: {\n type: drawAreaChart ? 'areaspline' : 'spline'\n },\n chartTitle: $translate.instant(options.section.chart.label),\n titleTooltip: $translate.instant(options.section.chart.tooltip)\n }\n }\n\n function getDataOptions(data, options) {\n var detailLevel = options.detailLevel,\n drawAreaChart = options.section.chart.chartType === 'area',\n valueType = options.section.chart.valueType,\n yAxisLabel = options.section.chart.yAxisLabel,\n groupNames = options.custom.groupNames || ['none'],\n visibleSeries = options.visibleSeries,\n xAxisFormatter = options.custom.xAxisFormatter;\n\n return {\n xAxis: AreaLineChartAxisHandle.getXAxisOptions(data, detailLevel, options.custom.multipleXAxis, xAxisFormatter),\n yAxis: AreaLineChartAxisHandle.getYAxisOptions(valueType, drawAreaChart, yAxisLabel, data),\n series: getSeriesOptions(data, options.custom.multipleXAxis, groupNames, visibleSeries)\n }\n }\n\n function enableMarkerPoint(value, index, xAxisIndex, series) {\n // If the current value is not null and it has both the adjacent data points as null or beyond the\n // array bounds, we should plot a single point.\n var enabled = value !== null\n && (index - 1 < 0 || series[index - 1] === null)\n && (index + 1 >= series.length || series[index + 1] === null);\n\n if(xAxisIndex > 0) {\n var markerInterval = Math.round(series.length / maxMarkerPoints);\n return enabled || markerInterval === 0 || ((index % markerInterval) === 0);\n }\n\n return enabled;\n }\n\n function getSeriesOptions(data, multipleXAxis, groupNames, visibleSeries) {\n return _.flatMap(data, function (range, index) {\n return _.map(range, function (series, seriesIndex) {\n return {\n name: series.label,\n className: series.color.class,\n xAxis: multipleXAxis ? index : 0,\n visible: !visibleSeries || _.includes(visibleSeries, series.label),\n index: range.length - seriesIndex,\n custom: {\n stackedTotal: series.stackedTotal,\n groupIndex: index,\n groupName: groupNames[index]\n },\n data: _.map(series.values, function (v, i) {\n return {\n y: v,\n marker: {enabled: enableMarkerPoint(v, i, index, series.values),\n symbol: index > 0 ? 'square' : 'circle', radius: 3}\n }\n })\n };\n });\n });\n }\n\n function tableHeader(text, colSpan) {\n return '' + text + ''\n }\n\n function dateHeader(selectedPoint, colSpan) {\n return _.map(selectedPoint.series.chart.options.xAxis, function (axis) {\n var date = axis.categories[selectedPoint.point.index];\n var formattedDate = (date && selectedPoint.series.options.custom.prependXLabelText(date)) || '-.-';\n return tableHeader(formattedDate, colSpan)\n });\n }\n\n function defaultTooltipHeader(selectedPoint) {\n return dateHeader(selectedPoint, 2).join('')\n }\n\n function formatTooltip(points, groupNames, headerFormatter, numberFilter) {\n var firstPoint = _.head(points);\n\n var header = '' + headerFormatter(firstPoint) + '';\n\n //TODO get all series names instead of just the points available\n var body = _(points).reverse().groupBy( function (point) {\n return point.series.name;\n }).map( function (chartValues, name) {\n var colorClass = _.head(chartValues).series.userOptions.className;\n var yValues = _(groupNames)\n .map( function (groupName) {\n var labelText = '-.-';\n var chartValue = _.find(chartValues, function (value) {\n return _.eq(value.series.options.custom.groupName, groupName) && _.eq(value.series.name, name);\n });\n\n if(chartValue) {\n var tooltipOptions = chartValue.series.tooltipOptions;\n var value = chartValue.series.userOptions.custom.stackedTotal ? chartValue.total : chartValue.y;\n labelText = tooltipOptions.valuePrefix + numberFilter(value) + tooltipOptions.valueSuffix;\n }\n return '' + labelText + ''\n })\n .join('');\n return '' + name + '' + yValues + '';\n }).join('');\n\n return '' + header + body + '
';\n }\n }\n\n})();\n","(function (){\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .directive('tfcConsumerChartCallout', ConsumerChartCallout)\n .controller('tfcConsumerChartCalloutCtrl', ConsumerChartCalloutCtrl);\n\n\n function ConsumerChartCallout(){\n return {\n scope : {\n sectionConfig: '=',\n chartDataFunc: '&',\n apiParams: '='\n },\n controller : 'tfcConsumerChartCalloutCtrl as vm',\n bindToController : true,\n templateUrl : 'StandardReports/ConsumerChartCallout/ConsumerChartCallout.tmpl.html'\n };\n }\n\n // @ng-inject\n function ConsumerChartCalloutCtrl(ConsumerChart, ChartUtil, StandardReports, AreaLineChartConfig){\n var vm = this;\n vm.section = vm.sectionConfig.section;\n vm.callouts = vm.section.callout.values;\n\n var customOptions = {\n section: vm.section,\n valuePrefix: vm.section.valuePrefix,\n detailLevel: vm.apiParams.detailLevel,\n custom: {\n xAxisFormatter: function () {\n var formattedDate = moment(this.value).format('DD MMM');\n return _(formattedDate).words().join('
');\n }\n }\n };\n\n vm.chartOptions = AreaLineChartConfig.getChartOptions(customOptions);\n\n vm.getData = function() {\n return StandardReports.getConsumerData(vm.section.api, vm.apiParams.detailLevel, vm.apiParams.queryParams)\n .then(function(apiData) {\n return vm.chartDataFunc({rawData: apiData});\n });\n };\n\n vm.dataOptions = function(rawData) {\n var formattedData = ConsumerChart.getFormattedData(vm.section.chart, rawData.dateMetrics);\n\n return AreaLineChartConfig.getDataOptions([formattedData], _.merge({}, customOptions, vm.chartOptions));\n };\n\n vm.setParentValues = function(formattedData) {\n vm.calloutData = formattedData.summary;\n }\n\n vm.isNumber = function (number) {\n return _.isNumber(number);\n };\n\n vm.calloutValue = function(userCohort, summaryKey) {\n var summary = _.find(vm.calloutData, {metric: summaryKey});\n if(summary) {\n var userCohortValue = _.find(summary.metricValue, {userCohort: userCohort.value});\n return userCohortValue && _.round(userCohortValue.value,2);\n }\n };\n\n vm.calloutPercentValue = function(userCohort, summaryKey) {\n var summary = _.find(vm.calloutData, {metric: summaryKey});\n if(summary) {\n var userCohortValue = _.find(summary.metricValue, {userCohort: userCohort.value});\n return userCohortValue && _.round(userCohortValue.percentOfVal,2);\n }\n };\n\n vm.filteredPct = function(userCohort, summaryKey) {\n var num = vm.calloutValue(userCohort, summaryKey);\n var den = vm.calloutValue(userCohort, 'TotalUsedForReporting');\n\n return StandardReports.filteredPercent(num, den);\n };\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('HighChartsCtrl', HighChartsCtrl);\n\n // @ngInject\n function HighChartsCtrl() {\n var vm = this;\n\n var chart, dataOptions, container;\n\n vm.onLoad = function (containerElem) {\n container = containerElem;\n loadChart(vm.options, true);\n\n vm.getData()\n .then(function (data) {\n dataOptions = vm.chartDataOptions({ rawData: data });\n var chartOptions = _.merge({}, vm.options, dataOptions);\n vm.options = chartOptions;\n vm.setParentValues && vm.setParentValues({ formattedData: data });\n loadChart(chartOptions, false);\n })\n .catch(function () {\n loadChart(vm.options, false, \"Could not load chart data\")\n });\n };\n\n function loadChart(options, loading, errorText) {\n chart && chart.destroy();\n chart = Highcharts.chart(container, options);\n\n if(loading) {\n chart.showLoading(\"\\n\" +\n \"
Loading Charts...
\");\n } else {\n if(errorText) {\n chart.showLoading(\"
\"+ errorText +\"
\");\n } else {\n // condition for no data\n if(chart.series && _.some(chart.series, function (chartSeries) {\n return chartSeries.hasData();\n })) {\n chart.hideLoading();\n } else {\n chart.showLoading(\"
No Data
\");\n }\n }\n }\n }\n\n }\n\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .directive('hcChart', function () {\n return {\n restrict: 'E',\n controller : 'HighChartsCtrl as vm',\n transclude: true,\n bindToController: true,\n templateUrl : 'StandardReports/HighCharts/HighCharts.tmpl.html',\n scope: {\n getData: '&', // callback function to get formatted API data\n options: '=', // options to build chart\n chartDataOptions: '&', // callback function to populate chart options which require data\n setParentValues: '&?' // callback function to set values in parent vm which require data\n },\n link: function (scope, element) {\n var container = element[0].querySelector('#highchart-container');\n\n scope.vm.onLoad(container);\n\n scope.$watch('vm.options', function(newVal, oldVal) {\n if (newVal && !_.isEqual(newVal, oldVal)) {\n scope.vm.onLoad(container);\n }\n }, true);\n\n }\n };\n });\n\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('HighChartsService', HighChartsService);\n\n function HighChartsService(){\n\n var baseOptions = {\n title: false,\n credits: {\n enabled: false\n },\n plotOptions: {\n series: {\n animation: false,\n states: {\n hover: {\n enabled: false\n }\n },\n marker: {\n enabled: false,\n states: {\n hover: {\n enabled: false\n }\n }\n }\n }\n },\n legend: {\n enabled: false\n },\n tooltip: {\n enabled: false\n },\n chart: {\n styledMode: true,\n animation: false\n }\n };\n\n return {\n getBaseOptions: getBaseOptions\n };\n\n function getBaseOptions() {\n return baseOptions;\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('StorePageCtrl', StorePageCtrl);\n\n // @ngInject\n function StorePageCtrl($injector, $state, Auth, userStores, LookAndFeel, Nav, AnalyticsHelper, LookAndFeelType) {\n var vm = this;\n\n vm.goToBrandMetrics = function() {\n AnalyticsHelper.sendViewChangeEvent(LookAndFeelType.BrandMetrics);\n $state.go(vm.brandMetricsState);\n };\n\n // setting lookAndFeel to BrandMetrics initially to get first available state in BrandMetrics which would be\n // used to toggle from Analytics to BrandMetrics\n LookAndFeel.setToBrandMetrics();\n var brandMetricsFirstMenuItem = _.find(Nav.mainMenu(), function (menuItem) {\n return $injector.invoke(menuItem.canAccess) && menuItem.isBrandMetric;\n });\n vm.brandMetricsState = brandMetricsFirstMenuItem && brandMetricsFirstMenuItem.state.name();\n\n //setting lookAndFeel to StoreReporting so that only store reporting menu items would be seen on UI\n LookAndFeel.setToAnalytics();\n vm.user = Auth.getUser();\n vm.userStores = userStores;\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ExecutiveSummaryCtrl', ExecutiveSummaryCtrl);\n\n // @ngInject\n function ExecutiveSummaryCtrl(storeKeys, filters, StandardReports, DateUtil, SectionConfig, ExecutiveSummary,\n ExecSummaryMetric, CalloutLabelService, ShopperAdoptionCallout, UserCohort) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.isLoading = true;\n\n vm.transactionColorSwatch = ExecutiveSummary.colorSwatches();\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.cards = ExecutiveSummary.cards;\n\n vm.dataForUserCohort = function (card, label) {\n var data =_.find(card.metricValues, { label: label });\n return card.options.metricValuesFormat(data && data.value);\n };\n\n _.each(vm.cards, function(card) {\n card.getData = function() {\n return StandardReports.getConsumerData('executive-summary', detailLevel, queryFilters);\n };\n\n card.chartOptions = ExecutiveSummary.chartOptions();\n\n card.dataOptions = function(rawData) {\n var metricSummary = _.find(rawData, { metricName: card.key });\n card.change = metricSummary.change;\n\n card.metricValues = _.map(metricSummary.userCohortValues, function (data) {\n var metricLabel = _.find(card.userCohortValues, function (type) {\n return _.isEqual(type.userCohort.value, data.userCohort);\n });\n return ExecSummaryMetric(metricLabel.label, metricLabel.colorClass, metricLabel.userCohort.value, data.value);\n });\n\n return ExecutiveSummary.chartDataOptions(card);\n\n }\n });\n\n vm.adoptionCallouts = [\n ShopperAdoptionCallout('TFAdoptionCallout.tmpl.html', SectionConfig.adoption.chart.label, 'tf-users-percent'),\n ShopperAdoptionCallout('TFSessionsCallout.tmpl.html', SectionConfig.tfSessionsAdoption.chart.label, 'tf-sessions-percent'),\n ShopperAdoptionCallout('TFRevenueCallout.tmpl.html', SectionConfig.tfRevenue.chart.label, 'tf-revenue-percent')\n ];\n\n vm.adoptionCallouts.forEach(function (value) {\n StandardReports.getConsumerData(value.attributeName, detailLevel, queryFilters).then(function (tfPercent) {\n vm[value.attributeName] = StandardReports.findInSummary(tfPercent.summary, 'TFPercent', UserCohort.tf.value);\n });\n });\n\n }\n })();\n","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ExecutiveSummary', ExecutiveSummary)\n .factory('ExecutiveSummaryCard', ExecSummaryCard)\n .factory('ExecSummaryMetric', ExecSummaryMetricClass);\n\n function ExecutiveSummary(ExecutiveSummaryCard, ConsumerChartDisplay, HighChartsService, CalloutLabelService,\n StandardReports, standardReportNumberFilter, SectionConfig){\n\n var verticalBarChartOptions = {\n plotOptions: {\n series: {\n clip: false,\n stacking: 'normal'\n }\n },\n chart: {\n type: 'column',\n height: 170,\n spacing: [10, 5, 10, 5]\n },\n xAxis: {\n labels: {\n enabled: false\n }\n }\n };\n\n var execSummaryCards = [\n ExecutiveSummaryCard('spu', 'lift', options(noFormat),\n [\n CalloutLabelService.tf()(SectionConfig.execSPU),\n CalloutLabelService.nonTF()(SectionConfig.execSPU),\n CalloutLabelService.sitewide()(SectionConfig.execSPU)\n ]\n ),\n ExecutiveSummaryCard('conversion', 'lift', options(percentFormat),\n [\n CalloutLabelService.tf()(SectionConfig.execConversion),\n CalloutLabelService.nonTF()(SectionConfig.execConversion),\n CalloutLabelService.sitewide()(SectionConfig.execConversion)\n ]),\n ExecutiveSummaryCard('aov', 'change', options(revenueFormat),\n [\n CalloutLabelService.tf()(SectionConfig.execAOV),\n CalloutLabelService.nonTF()(SectionConfig.execAOV),\n CalloutLabelService.sitewide()(SectionConfig.execAOV)\n ]),\n ExecutiveSummaryCard('upt', 'change', options(noFormat),\n [\n CalloutLabelService.tf()(SectionConfig.execUPT),\n CalloutLabelService.nonTF()(SectionConfig.execUPT),\n CalloutLabelService.sitewide()(SectionConfig.execUPT)\n ]),\n ExecutiveSummaryCard('arpu', 'change', options(revenueFormat),\n [\n CalloutLabelService.tf()(SectionConfig.execARPU),\n CalloutLabelService.nonTF()(SectionConfig.execARPU),\n CalloutLabelService.sitewide()(SectionConfig.execARPU)\n ])\n ];\n\n function colorSwatches() {\n var siteWideSwatch = {keys: [ConsumerChartDisplay.Colors.totalLine.stroke], value: 'Sitewide'};\n return StandardReports.getColorSwatches().concat(siteWideSwatch);\n }\n\n function percentFormat(value) {\n return standardReportNumberFilter(value) + \"%\";\n }\n\n function revenueFormat(value) {\n return \"$\" + standardReportNumberFilter(value);\n }\n\n function noFormat(value) {\n return standardReportNumberFilter(value);\n }\n\n function options(metricValuesFormat) {\n return {\n metricValuesFormat: metricValuesFormat\n }\n }\n\n function chartOptions() {\n var baseOptions = HighChartsService.getBaseOptions();\n return _.merge({}, baseOptions, verticalBarChartOptions);\n }\n\n function chartDataOptions(card) {\n return {\n yAxis: {\n title: false,\n min: 0,\n labels: {\n formatter: function () {\n return card.options.metricValuesFormat(this.value);\n }\n }\n },\n series: [\n {\n data: _.map(card.metricValues, function (summaryMetric) {\n return {\n y: summaryMetric.value || null,\n className: summaryMetric.colorClass\n }\n }),\n pointPadding: 0.25\n }\n ]\n };\n }\n\n return {\n cards: execSummaryCards,\n colorSwatches: colorSwatches,\n chartOptions: chartOptions,\n chartDataOptions: chartDataOptions\n };\n\n }\n\n function ExecSummaryCard(SectionConfig, CalloutLabelService) {\n\n function ExecutiveSummaryCard(key, changeAttribute, options, userCohortValues) {\n if (!(this instanceof ExecutiveSummaryCard)) return new ExecutiveSummaryCard(key, changeAttribute, options, userCohortValues);\n\n this.key = key;\n this.title = CalloutLabelService[changeAttribute]()(SectionConfig[key]).label;\n this.titleTooltip = CalloutLabelService[changeAttribute]()(SectionConfig[key]).tooltip;\n this.metricLabel = SectionConfig[key].key;\n this.metricTooltip = SectionConfig[key].chart.tooltip;\n this.options = options;\n this.userCohortValues = userCohortValues;\n this.change = null;\n }\n\n return ExecutiveSummaryCard;\n }\n\n function ExecSummaryMetricClass() {\n\n function ExecSummaryMetric(label, colorClass, userCohort, value) {\n if (!(this instanceof ExecSummaryMetric)) return new ExecSummaryMetric(label, colorClass, userCohort, value);\n\n this.label = label;\n this.colorClass = colorClass;\n this.userCohort = userCohort;\n this.value = value;\n }\n\n return ExecSummaryMetric;\n }\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ShopperReports', ShopperReports)\n .constant('UserCohort', {\n all: { value: 'All' },\n tf : { value: 'TrueFit', parent: 'All' },\n nonTF: { value: 'NonTrueFit', parent: 'All'},\n tfReg: { value: 'TrueFitRegistered', parent: 'TrueFit'},\n tfSiteReg: { value: 'TrueFitSiteRegistered', parent: 'TrueFitRegistered' },\n tfTravellingReg: {value: 'TrueFitTravellingRegistered', parent: 'TrueFitRegistered' },\n tfIPReg: { value: 'TrueFitIPRegistered', parent: 'TrueFit' },\n newTFUsers: {value: 'NewTrueFitUsers' },\n newTFReg: {value: 'NewTrueFitRegistered', parent: 'NewTrueFitUsers' },\n newTFSiteReg: {value: 'NewTrueFitSiteRegistered', parent: 'NewTrueFitRegistered' },\n newTFTravellingReg: {value: 'NewTrueFitTravellingRegistered', parent: 'NewTrueFitRegistered' },\n newTFIPReg: {value: 'NewTrueFitIPRegistered', parent: 'NewTrueFitUsers' },\n tfAllTime: {value: 'TrueFitAllTime'},\n tfSiteAllTime: {value: 'TrueFitSiteAllTime', parent: 'TrueFitAllTime'},\n tfTravellingAllTime: {value: 'TrueFitTravellingAllTime', parent: 'TrueFitAllTime'}\n });\n\n function ShopperReports(ConsumerChart, StandardReports, Callout, UserLine, UserCohort, CalloutLabelService){\n\n var userLines = {\n tf: UserLine('tfLine', 'TF'),\n nonTF: UserLine('nonTFLine', 'Non-TF'),\n sitewideWithBots: UserLine('totalLine', 'Sitewide + Bots'),\n totalTF: UserLine('tfLine', 'Total TF', 'total'),\n tfRegistered: UserLine('registered', 'Registered'),\n siteRegistered: UserLine('siteRegistered', 'Site'),\n travellingRegistered: UserLine('travellingRegistered', 'Traveling'),\n ipRegistered: UserLine('ipRegistered', 'Instant Profile')\n };\n\n var filterConfig = function (userCohort, includeBots) {\n var botCriteria = includeBots ? {} : { isBot: false };\n var userCohortCriteria = {userCohort: userCohort};\n return _.merge(botCriteria, userCohortCriteria);\n };\n\n return {\n userDetails: userDetails,\n activeUserConfig: activeUserConfig,\n tfActiveUserConfig: tfActiveUserConfig,\n newUserConfig: newUserConfig,\n tfPercentDetails: tfPercentDetails,\n tfActiveUserRecipientConfig: tfActiveUserRecipientConfig,\n newRecipientProfilesConfig: newRecipientProfilesConfig,\n newRecipientProfileUsersConfig: newRecipientProfileUsersConfig\n };\n\n function userDetails(data, dataConfig, aggFn) {\n var lineData = _.map(dataConfig.dataParams, function (config) {\n var chartData = ConsumerChart.getChartData(data.dateMetrics, config.filter);\n return { lineType: config.getLineType(), data: chartData, label: config.getLabel() }\n });\n\n var summaryData = _.reduce(dataConfig.summaryParams, function (acc,line) {\n var chartData = ConsumerChart.getChartData(data.dateMetrics, filterConfig(line.userCohort.value,\n line.userCohort === UserCohort.all));\n acc[line.attributeName] = _.round(aggFn(chartData, 'value'));\n return acc;\n }, {});\n\n var summaryPercent = _.reduce(dataConfig.summaryParams, function (acc,line) {\n if(line.percentOutOfAttributeName) {\n var chartData = ConsumerChart.getChartData(data.dateMetrics, filterConfig(line.userCohort.parent, false));\n var totalValue = line.userCohort.parent === UserCohort.all.value ? (summaryData.tf + summaryData.nonTF) :\n _.round(aggFn(chartData, 'value'));\n acc[line.percentOutOfAttributeName] = StandardReports.percentTotal(summaryData[line.attributeName], totalValue);\n }\n return acc;\n }, {});\n\n return _.merge({lineData: lineData}, summaryData, summaryPercent);\n }\n\n function activeUserConfig(chartType, detailLevel, section) {\n var labelValues = Callout.labelValueConfig([\n CalloutLabelService.tf(section),\n CalloutLabelService.nonTF(section),\n CalloutLabelService.sitewideWithBots(section)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, false, section), {\n dataParams:[\n lineDetails(UserCohort.tf, userLines.tf),\n lineDetails(UserCohort.nonTF, userLines.nonTF),\n lineDetails(UserCohort.all, userLines.sitewideWithBots, true)\n ]\n })\n }\n\n function tfActiveUserConfig(chartType, detailLevel, section) {\n var labelValues = Callout.tfUsersConfig([\n CalloutLabelService.sectionTotal(section, null, UserCohort.tf),\n CalloutLabelService.tfRegistered(section, null, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(section, null, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(section, null, UserCohort.tfTravellingReg),\n CalloutLabelService.ipRegistered(section, null, UserCohort.tfIPReg)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, true, section), {\n dataParams: [\n lineDetails(UserCohort.tfSiteReg, userLines.siteRegistered),\n lineDetails(UserCohort.tfTravellingReg, userLines.travellingRegistered),\n lineDetails(UserCohort.tfIPReg, userLines.ipRegistered)\n ]\n })\n }\n\n function tfActiveUserRecipientConfig(chartType, detailLevel, section) {\n var labelValues = Callout.labelValueConfig([\n CalloutLabelService.tfUsersWithRecipient(section, null, UserCohort.tfReg),\n CalloutLabelService.tfUsersWithRecipientSite(section, null, UserCohort.tfSiteReg),\n CalloutLabelService.tfUsersWithRecipientTravelling(section, null, UserCohort.tfTravellingReg)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, false, section), {\n dataParams: [\n lineDetails(UserCohort.tfReg, userLines.tfRegistered),\n lineDetails(UserCohort.tfSiteReg, userLines.siteRegistered),\n lineDetails(UserCohort.tfTravellingReg, userLines.travellingRegistered)\n ]\n })\n }\n\n function newRecipientProfilesConfig(chartType, detailLevel, section) {\n\n var labelValues = Callout.labelValueConfig([\n CalloutLabelService.tfProfiles(section, null, UserCohort.newTFReg),\n CalloutLabelService.tfProfilesSite(section, null, UserCohort.newTFSiteReg),\n CalloutLabelService.tfProfilesTravelling(section, null, UserCohort.newTFTravellingReg)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, true, section), {\n dataParams:[\n lineDetails(UserCohort.newTFSiteReg, userLines.siteRegistered),\n lineDetails(UserCohort.newTFTravellingReg, userLines.travellingRegistered)\n ]\n });\n }\n\n function newRecipientProfileUsersConfig(chartType, detailLevel, section) {\n\n var labelValues = Callout.labelValueConfig([\n CalloutLabelService.tfUsersWithRecipient(section, null, UserCohort.newTFReg),\n CalloutLabelService.tfUsersWithRecipientSite(section, null, UserCohort.newTFSiteReg),\n CalloutLabelService.tfUsersWithRecipientTravelling(section, null, UserCohort.newTFTravellingReg)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, false, section), {\n dataParams:[\n lineDetails(UserCohort.newTFReg, userLines.tfRegistered),\n lineDetails(UserCohort.newTFSiteReg, userLines.siteRegistered),\n lineDetails(UserCohort.newTFTravellingReg, userLines.travellingRegistered)\n ]\n });\n }\n\n function newUserConfig(chartType, detailLevel, section) {\n var labelValues = Callout.tfUsersConfig([\n CalloutLabelService.sectionTotal(section, null, UserCohort.newTFUsers),\n CalloutLabelService.tfRegistered(section, null, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(section, null, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(section, null, UserCohort.newTFTravellingReg),\n CalloutLabelService.ipRegistered(section, null, UserCohort.newTFIPReg)\n ]);\n return _.merge(commonUserConfig(labelValues, chartType, detailLevel, true, section), {\n dataParams:[\n lineDetails(UserCohort.newTFSiteReg, userLines.siteRegistered),\n lineDetails(UserCohort.newTFTravellingReg, userLines.travellingRegistered),\n lineDetails(UserCohort.newTFIPReg , userLines.ipRegistered)\n ]\n })\n }\n\n function lineDetails(userCohort, userLine, includeBots) {\n return _.merge(userLine, {filter: filterConfig(userCohort.value, includeBots)});\n }\n\n function commonUserConfig(labelValueLayout, chartType, detailLevel, drawAreaChart, section) {\n return {\n summaryParams: labelValueLayout.labelValues,\n chartLayout: function(title, chartToolTipProp) {\n return ConsumerChart.getChartConfig(chartType, title, drawAreaChart, detailLevel, chartToolTipProp, section);\n },\n summaryLayout: labelValueLayout\n }\n }\n\n function tfPercentDetails(data) {\n var metricValues = _.map(data.dateMetrics, function (metricValue) {\n return {\n date: metricValue.startDate,\n value: metricValue.value\n }\n });\n var lineData = [\n {lineType: 'tfLine', data: metricValues, label: 'TF'}\n ];\n\n return {\n lineData: lineData, tfPercent: data.meanValue\n }\n }\n\n }\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ShoppersConfig', ShoppersConfig);\n\n function ShoppersConfig(PageConfig, Section, Chart, SeriesService, CalloutLabelService, UserCohort,\n ConsumerChartDisplay, StandardReports){\n\n var spu = Section(\"spu\", PageConfig.shoppersSummary,\n Chart(\"spu\", \"line\", \"ratio\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value}),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value})\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanSPU\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)]) ],\n StandardReports.sectionOptions('sessions-per-user')\n );\n\n var mauSummary = function (section) {\n return Section(\"mau\", PageConfig.shoppersSummary,\n Chart(\"mau\", \"line\", \"values\", section,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCountUsedForReporting\", [ CalloutLabelService.tf(true),\n CalloutLabelService.nonTF(true) ]) ],\n StandardReports.sectionOptions('monthly-users')\n );\n };\n\n var monthlySessions = function (section) {\n return Section(\"monthlySessions\", PageConfig.shoppersSummary,\n Chart(\"monthlySessions\", \"line\", \"values\", section,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanMonthlySessions\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true) ]) ],\n StandardReports.sectionOptions('monthly-sessions')\n );\n };\n\n var sessionForConversion = Section(\"sessionForConversion\", PageConfig.sessions,\n Chart(\"sessionForConversion\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }) ]\n ),\n [ StandardReports.calloutOptions(\"TotalUsedForReporting\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true) ]) ],\n StandardReports.sectionOptions('sessions')\n );\n\n var totalSessions = Section(\"totalSessions\", PageConfig.sessions,\n Chart(\"totalSessions\", \"area\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.sitewideWithBots(function (value) { return value.isBot; }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.all, ConsumerChartDisplay.Colors.totalLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.all, ConsumerChartDisplay.Colors.totalLine)])],\n StandardReports.sectionOptions('sessions')\n );\n\n var tfSessions = Section(\"tfSessions\", PageConfig.sessions,\n Chart(\"tfSessions\", \"area\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.tfWithBots(function (value) { return value.userCohort === UserCohort.tf.value &&\n value.isBot; }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.tf, ConsumerChartDisplay.Colors.tfLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.tf, ConsumerChartDisplay.Colors.tfLine)])],\n StandardReports.sectionOptions('sessions')\n );\n\n var nonTFSessions = Section(\"nonTFSessions\", PageConfig.sessions,\n Chart(\"nonTFSessions\", \"area\", \"values\", false,\n [ SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.nonTFWithBots(function (value) { return value.userCohort === UserCohort.nonTF.value &&\n value.isBot; }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.nonTF, ConsumerChartDisplay.Colors.nonTFLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.nonTF, ConsumerChartDisplay.Colors.nonTFLine)])],\n StandardReports.sectionOptions('sessions')\n );\n\n var mau = Section(\"mau\", PageConfig.activeUsers,\n Chart(\"mau\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.sitewideWithBots({ userCohort: UserCohort.all.value })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\",\n [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true), CalloutLabelService.sitewideWithBots(false)]) ],\n StandardReports.sectionOptions('monthly-users')\n );\n\n var mauTF = Section(\"mauTF\", PageConfig.activeUsers,\n Chart(\"mauTF\", \"area\", \"values\", false,\n [ SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false }),\n SeriesService.ipRegistered({ userCohort: UserCohort.tfIPReg.value, isBot: false }) ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.sectionTotal(false, UserCohort.tf)]),\n StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(true, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)]),\n StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.ipRegistered(true, UserCohort.tfIPReg)])],\n StandardReports.sectionOptions('monthly-users')\n );\n\n var dau = Section(\"dau\", PageConfig.activeUsers,\n Chart(\"dau\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false }),\n SeriesService.sitewideWithBots({ userCohort: UserCohort.all.value })\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true),\n CalloutLabelService.sitewideWithBots(false)]) ],\n StandardReports.sectionOptions('daily-users')\n );\n\n var dauTF = Section(\"dauTF\", PageConfig.activeUsers,\n Chart(\"dauTF\", \"area\", \"values\", false,\n [ SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false }),\n SeriesService.ipRegistered({ userCohort: UserCohort.tfIPReg.value, isBot: false }) ]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.sectionTotal(false, UserCohort.tf)]),\n StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(true, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)]),\n StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.ipRegistered(true, UserCohort.tfIPReg)])],\n StandardReports.sectionOptions('daily-users')\n );\n\n var newUsers = Section(\"newUsers\", PageConfig.activeUsers,\n Chart(\"newUsers\", \"area\", \"values\", false,\n [ SeriesService.siteRegistered({ userCohort: UserCohort.newTFSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.newTFTravellingReg.value, isBot: false }),\n SeriesService.ipRegistered({ userCohort: UserCohort.newTFIPReg.value, isBot: false }) ]\n ),\n [ StandardReports.calloutOptions(\"TotalNewUserCounts\", [ CalloutLabelService.sectionTotal(false, UserCohort.newTFUsers)]),\n StandardReports.calloutOptions(\"TotalNewUserCounts\", [ CalloutLabelService.tfRegistered(true, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(false, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.newTFTravellingReg)]),\n StandardReports.calloutOptions(\"TotalNewUserCounts\", [ CalloutLabelService.ipRegistered(true, UserCohort.newTFIPReg)])],\n StandardReports.sectionOptions('daily-users')\n );\n\n var adoption = function (section) {\n return Section(\"adoption\", PageConfig.adoption,\n Chart(\"adoption\", \"line\", \"percent\", section, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tfPercent(false) ], true) ],\n StandardReports.sectionOptions('tf-users-percent', null, '%')\n );\n };\n\n var tfReg = function (section) {\n return Section(\"tfReg\", PageConfig.adoption,\n Chart(\"tfReg\", \"line\", \"percent\", section, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tfPercent(false) ], true) ],\n StandardReports.sectionOptions('tf-registered-users-percent', null, '%')\n );\n };\n\n var tfSessionsAdoption = function (section) {\n return Section(\"tfSessions\", PageConfig.adoption,\n Chart(\"tfSessions\", \"line\", \"percent\", section, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tfPercent(false) ], true) ],\n StandardReports.sectionOptions('tf-sessions-percent', null, '%')\n );\n };\n\n var tfOrdersAdoption = function (section) {\n return Section(\"tfOrders\", PageConfig.adoption,\n Chart(\"tfOrders\", \"line\", \"percent\", section, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tfPercent(false) ], true) ],\n StandardReports.sectionOptions('tf-orders-percent', null, '%')\n );\n };\n\n var tfRevenue = function (section) {\n return Section(\"tfRevenue\", PageConfig.adoption,\n Chart(\"tfRevenue\", \"line\", \"percent\", section, [ SeriesService.tf() ]),\n [ StandardReports.calloutOptions(\"TFPercent\", [ CalloutLabelService.tfPercent(false) ], true) ],\n StandardReports.sectionOptions('tf-revenue-percent', null, '%')\n );\n };\n\n var kidsMauTF = Section(\"mauTF\", PageConfig.kids,\n Chart(\"mauTF\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.tfReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(false, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)])],\n StandardReports.sectionOptions('monthly-users-kids')\n );\n\n var kidsDauTF = Section(\"dauTF\", PageConfig.kids,\n Chart(\"dauTF\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.tfReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(false, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)])],\n StandardReports.sectionOptions('daily-users-kids')\n );\n\n var newKidsProfiles = Section(\"newProfiles\", PageConfig.kids,\n Chart(\"newProfiles\", \"area\", \"values\", false,\n [SeriesService.siteRegistered({ userCohort: UserCohort.newTFSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.newTFTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfRegistered(false, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(true, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(true, UserCohort.newTFTravellingReg)])],\n StandardReports.sectionOptions('daily-users-kids')\n );\n\n var tfUsersWithNewKids = Section(\"tfUsersWithNewProfiles\", PageConfig.kids,\n Chart(\"tfUsersWithNewProfiles\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.newTFReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.newTFSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.newTFTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"TotalNewUsersWithProfile\", [ CalloutLabelService.tfRegistered(false, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(false, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.newTFTravellingReg)])],\n StandardReports.sectionOptions('daily-users-kids')\n );\n\n var allTimeKidsProfiles = Section(\"allTimeRecipientProfiles\", PageConfig.kids, null,\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfUsersWithRecipient(false, UserCohort.tfAllTime),\n CalloutLabelService.tfUsersWithRecipientSite(false, UserCohort.tfSiteAllTime),\n CalloutLabelService.tfUsersWithRecipientTravelling(false, UserCohort.tfTravellingAllTime)])],\n StandardReports.sectionOptions('daily-users-kids')\n );\n \n var allTimeUserWithKidsProfiles = Section(\"allTimeWithRecipientProfiles\", PageConfig.kids, null,\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfUsersWithRecipient(false, UserCohort.tfAllTime),\n CalloutLabelService.tfUsersWithRecipientSite(false, UserCohort.tfSiteAllTime),\n CalloutLabelService.tfUsersWithRecipientTravelling(false, UserCohort.tfTravellingAllTime)])],\n StandardReports.sectionOptions('daily-users-kids')\n );\n\n var sfoMauTF = Section(\"mauTF\", PageConfig.sfo,\n Chart(\"mauTF\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.tfReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(false, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)])],\n StandardReports.sectionOptions('monthly-users-sfo')\n );\n\n var sfoDauTF = Section(\"dauTF\", PageConfig.sfo,\n Chart(\"dauTF\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.tfReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.tfSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.tfTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"MeanUserCount\", [ CalloutLabelService.tfRegistered(false, UserCohort.tfReg),\n CalloutLabelService.siteRegistered(false, UserCohort.tfSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.tfTravellingReg)])],\n StandardReports.sectionOptions('daily-users-sfo')\n );\n\n var newSFOProfiles = Section(\"newProfiles\", PageConfig.sfo,\n Chart(\"newProfiles\", \"area\", \"values\", false,\n [SeriesService.siteRegistered({ userCohort: UserCohort.newTFSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.newTFTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfRegistered(false, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(true, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(true, UserCohort.newTFTravellingReg)])],\n StandardReports.sectionOptions('daily-users-sfo')\n );\n\n var tfUsersWithNewSFO = Section(\"tfUsersWithNewProfiles\", PageConfig.sfo,\n Chart(\"tfUsersWithNewProfiles\", \"line\", \"values\", false,\n [SeriesService.tfRegistered({ userCohort: UserCohort.newTFReg.value, isBot: false }),\n SeriesService.siteRegistered({ userCohort: UserCohort.newTFSiteReg.value, isBot: false }),\n SeriesService.travellingRegistered({ userCohort: UserCohort.newTFTravellingReg.value, isBot: false })]\n ),\n [ StandardReports.calloutOptions(\"TotalNewUsersWithProfile\", [ CalloutLabelService.tfRegistered(false, UserCohort.newTFReg),\n CalloutLabelService.siteRegistered(false, UserCohort.newTFSiteReg),\n CalloutLabelService.travellingRegistered(false, UserCohort.newTFTravellingReg)])],\n StandardReports.sectionOptions('daily-users-sfo')\n );\n\n var allTimeSFOProfiles = Section(\"allTimeRecipientProfiles\", PageConfig.sfo, null,\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfUsersWithRecipient(false, UserCohort.tfAllTime),\n CalloutLabelService.tfUsersWithRecipientSite(false, UserCohort.tfSiteAllTime),\n CalloutLabelService.tfUsersWithRecipientTravelling(false, UserCohort.tfTravellingAllTime)])],\n StandardReports.sectionOptions('daily-users-sfo')\n );\n\n var allTimeUserWithSFOProfiles = Section(\"allTimeWithRecipientProfiles\", PageConfig.sfo, null,\n [ StandardReports.calloutOptions(\"TotalNewProfile\", [ CalloutLabelService.tfUsersWithRecipient(false, UserCohort.tfAllTime),\n CalloutLabelService.tfUsersWithRecipientSite(false, UserCohort.tfSiteAllTime),\n CalloutLabelService.tfUsersWithRecipientTravelling(false, UserCohort.tfTravellingAllTime)])],\n StandardReports.sectionOptions('daily-users-sfo')\n );\n\n var ageProfiles = Section(\"age\", PageConfig.shopperProfiles,\n Chart(\"age\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('age-range')\n );\n\n var heightProfiles = Section(\"height\", PageConfig.shopperProfiles,\n Chart(\"height\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('height-range')\n );\n\n var weightProfiles = Section(\"weight\", PageConfig.shopperProfiles,\n Chart(\"weight\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('weight-range')\n );\n\n var inseamProfiles = Section(\"inseam\", PageConfig.shopperProfiles,\n Chart(\"inseam\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('inseam-range')\n );\n\n var footLengthProfiles = Section(\"footLength\", PageConfig.shopperProfiles,\n Chart(\"footLength\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('foot-length-range')\n );\n\n var bustSizeProfiles = Section(\"bustSize\", PageConfig.shopperProfiles,\n Chart(\"bustSize\", \"bar\", \"percent\", false, []), [], StandardReports.sectionOptions('bust-size-range')\n );\n\n var torsoLengthProfiles = Section(\"torsolength\", PageConfig.shopperProfiles,\n Chart(\"torsolength\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var stomachShapeProfiles = Section(\"stomachshape\", PageConfig.shopperProfiles,\n Chart(\"stomachshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var hipShapeProfiles = Section(\"hipshape\", PageConfig.shopperProfiles,\n Chart(\"hipshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var thighShapeProfiles = Section(\"thighshape\", PageConfig.shopperProfiles,\n Chart(\"thighshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var archShapeProfiles = Section(\"archshape\", PageConfig.shopperProfiles,\n Chart(\"archshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var calfShapeProfiles = Section(\"calfshape\", PageConfig.shopperProfiles,\n Chart(\"calfshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var breastShapeProfiles = Section(\"breastshape\", PageConfig.shopperProfiles,\n Chart(\"breastshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var buildProfiles = Section(\"build\", PageConfig.shopperProfiles,\n Chart(\"build\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n var seatShapeProfiles = Section(\"seatshape\", PageConfig.shopperProfiles,\n Chart(\"seatshape\", \"column\", \"percent\", false, []), [], StandardReports.sectionOptions('body-shape')\n );\n\n\n\n return {\n spu: spu,\n mauSummary: mauSummary,\n monthlySessions: monthlySessions,\n\n sessionForConversion: sessionForConversion,\n totalSessions: totalSessions,\n tfSessions: tfSessions,\n nonTFSessions: nonTFSessions,\n\n mau: mau,\n mauTF: mauTF,\n dau: dau,\n dauTF: dauTF,\n newUsers: newUsers,\n\n adoption: adoption,\n tfReg: tfReg,\n tfSessionsAdoption: tfSessionsAdoption,\n tfOrdersAdoption: tfOrdersAdoption,\n tfRevenue: tfRevenue,\n\n kidsMauTF: kidsMauTF,\n kidsDauTF: kidsDauTF,\n newKidsProfiles: newKidsProfiles,\n tfUsersWithNewKids: tfUsersWithNewKids,\n allTimeKidsProfiles: allTimeKidsProfiles,\n allTimeUserWithKidsProfiles: allTimeUserWithKidsProfiles,\n \n\n sfoMauTF: sfoMauTF,\n sfoDauTF: sfoDauTF,\n newSFOProfiles: newSFOProfiles,\n tfUsersWithNewSFO: tfUsersWithNewSFO,\n allTimeSFOProfiles: allTimeSFOProfiles,\n allTimeUserWithSFOProfiles: allTimeUserWithSFOProfiles,\n\n ageProfiles: ageProfiles,\n heightProfiles: heightProfiles,\n weightProfiles: weightProfiles,\n inseamProfiles: inseamProfiles,\n footLengthProfiles: footLengthProfiles,\n bustSizeProfiles: bustSizeProfiles,\n\n torsoLengthProfiles: torsoLengthProfiles,\n stomachShapeProfiles: stomachShapeProfiles,\n hipShapeProfiles: hipShapeProfiles,\n thighShapeProfiles: thighShapeProfiles,\n archShapeProfiles: archShapeProfiles,\n calfShapeProfiles: calfShapeProfiles,\n breastShapeProfiles: breastShapeProfiles,\n buildProfiles: buildProfiles,\n seatShapeProfiles: seatShapeProfiles\n };\n\n }\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('TransactionReports', Transactions);\n\n function Transactions(Api, MAX_CONVERSION, ConsumerChart, StandardReports, CalloutLabelService){\n\n return {\n updateConversions: updateConversions,\n transactionSummaryChartDetails: transactionSummaryChartDetails,\n shopperSummaryChartDetails: shopperSummaryChartDetails,\n sessionOrderChartDetails: sessionOrderChartDetails,\n revenueChartDetails: revenueChartDetails,\n aovUPTChartDetails: aovUPTChartDetails,\n incrementalRevenueChartDetails: incrementalRevenueChartDetails\n };\n\n function updateConversions(conversion) {\n conversion.conversions.forEach(function(x){\n _.forEach(x.metricValues, function(d){\n if(d.value > MAX_CONVERSION) {\n d.value = MAX_CONVERSION;\n }\n })\n });\n }\n\n function sum(arr) { return _.sumBy(arr, 'value') }\n\n function shopperSummaryChartDetails(data, filterConfig, summaryRoundScale) {\n var chartDetails = summaryChartDetails({userCohort: 'TrueFit'}, {userCohort: 'NonTrueFit'})\n (data.dateMetrics, filterConfig);\n\n var summaryDetails = {\n tf: _.round(data.mean.tfValue, summaryRoundScale),\n nonTF: _.round(data.mean.nonTFValue, summaryRoundScale),\n sitewide: _.round(data.mean.allValue, summaryRoundScale)\n };\n\n return _.extend(chartDetails, summaryDetails);\n }\n\n function transactionSummaryChartDetails(data, filterConfig, sectionCallout) {\n var chartDetails = summaryChartDetails({isTFUser: true}, {isTFUser: false})\n (data, filterConfig);\n\n var summaryDetails = {\n tf: sum(_.find(chartDetails.lineData, {lineType: 'tfLine'}).data),\n nonTF: sum(_.find(chartDetails.lineData, {lineType: 'nonTFLine'}).data)\n };\n\n var sitewide = summaryDetails.tf + summaryDetails.nonTF;\n\n var summaryPercentDetails = _.reduce(summaryDetails, function (acc, value, userType) {\n acc[CalloutLabelService[userType](sectionCallout).percentOutOfAttributeName] = StandardReports.percentTotal(value, sitewide);\n return acc;\n }, {});\n\n return _.extend(chartDetails, summaryDetails, summaryPercentDetails);\n }\n\n function summaryChartDetails(tfFilter, nonTfFilter) {\n return function(data, filterConfig) {\n var tfFilteredData = ConsumerChart.getChartData(data, _.extend(filterConfig, tfFilter));\n var nonTFFilteredData = ConsumerChart.getChartData(data, _.extend(filterConfig, nonTfFilter));\n\n return {\n lineData: [\n {lineType: 'tfLine', data: tfFilteredData, label: 'TF'},\n {lineType: 'nonTFLine', data: nonTFFilteredData, label: 'Non-TF'}\n ]\n }\n }\n }\n\n function sessionOrderChartDetails(data, filterConfig, summaryDataFn, summaryLineFilter, label) {\n var filteredData = ConsumerChart.getChartData(data, filterConfig);\n var summaryData = _.filter(summaryDataFn(data).lineData, summaryLineFilter);\n\n var filtered = sum(filteredData);\n var usedForReporting = sum(_.flatMap(summaryData, 'data'));\n var filteredPct = StandardReports.filteredPercent(filtered + usedForReporting, usedForReporting);\n var totalLineData = [\n {lineType: 'totalLine', data: filteredData, label: label, stackedTotal: true}\n ];\n\n return {\n total: filtered + usedForReporting,\n usedForReporting: usedForReporting,\n filteredPct: filteredPct,\n lineData: _.concat(summaryData, totalLineData)\n }\n }\n\n function revenueChartConfig(sitewideFilter, sitewideLabel) {\n var filters = [\n { filter: {userCohort: 'TrueFit', isBot: false}, lineType: 'tfLine', label: 'TF', labelValueType: \"tf\" },\n { filter: {userCohort: 'NonTrueFit', isBot: false}, lineType: 'nonTFLine', label: 'Non-TF', labelValueType: \"nonTF\" },\n ];\n\n if(sitewideFilter) {\n filters.push({ filter: sitewideFilter, lineType: 'totalLine', label: sitewideLabel,\n labelValueType: \"sitewideWithBots\", stackedTotal: true });\n }\n return filters;\n }\n\n function incrementalRevenueChartDetails(data) {\n var formattedData = _.map(data.dateMetrics, function (dateMetrics) {\n return {\n date: dateMetrics.startDate,\n value: _.round(dateMetrics.value)\n }\n });\n var lineData = [\n {lineType: 'tfLine', data: formattedData, label: 'TF'}\n ];\n\n return {\n lineData: lineData,\n tf: _.round(data['totalIncrementalRevenue'])\n }\n }\n\n function revenueChartDetails(data, calloutSection) {\n var config = revenueChartConfig({userCohort: 'All', isBot: true}, 'Sitewide + Bots');\n\n var lineData = _.map(config, function (line) {\n var filteredData = ConsumerChart.getChartData(data, line.filter);\n return {lineType: line.lineType, data: filteredData, label: line.label, stackedTotal: line.stackedTotal}\n });\n\n var summaryData = _.reduce(config, function (acc,line) {\n var data = _.find(lineData, {lineType: line.lineType}).data;\n var labelValue = CalloutLabelService[line.labelValueType](calloutSection);\n acc[labelValue.attributeName] = sum(data);\n return acc;\n }, {});\n\n //override sitewide as its total value is different then plotted values\n summaryData.sitewideWithBots = sum(ConsumerChart.getChartData(data, function (metric) {\n return _.eq(metric.userCohort, 'All') && _.isUndefined(metric.isBot);\n }));\n\n var sitewideWithoutBot = summaryData.tf + summaryData.nonTF;\n\n var summaryPercent = _.reduce(config, function (acc,line) {\n var labelValue = CalloutLabelService[line.labelValueType](calloutSection);\n if(labelValue.percentOutOfAttributeName)\n acc[labelValue.percentOutOfAttributeName] = StandardReports.percentTotal(summaryData[labelValue.attributeName], sitewideWithoutBot);\n return acc;\n }, {});\n\n return _.merge({lineData: lineData}, summaryData, summaryPercent);\n }\n\n function aovUPTChartDetails(data, metric) {\n var config = revenueChartConfig();\n\n var lineData = _.map(config, function (line) {\n var filteredData = ConsumerChart.getChartData(data.dateMetrics, line.filter);\n return {lineType: line.lineType, data: filteredData, label: line.label}\n });\n\n var metricSummary = data[metric];\n\n var summaryData = {\n change: metricSummary.lift,\n tf: metricSummary.mean.tfValue,\n nonTF: metricSummary.mean.nonTFValue,\n siteWide: metricSummary.mean.sitewideValue\n };\n\n return _.merge({lineData: lineData}, summaryData);\n\n }\n\n }\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('TransactionsConfig', TransactionsConfig);\n\n function TransactionsConfig(PageConfig, Section, Chart, SeriesService, CalloutLabelService, UserCohort,\n ConsumerChartDisplay, StandardReports){\n\n var conversion = Section(\"conversion\", PageConfig.transactionSummary,\n Chart(\"conversion\", \"line\", \"percent\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value}),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value }) ]\n ),\n [ StandardReports.calloutOptions(\"RelativeConversionLift\", [ CalloutLabelService.lift(false) ]),\n StandardReports.calloutOptions(\"Conversion\", [ CalloutLabelService.tf(false),\n CalloutLabelService.nonTF(false), CalloutLabelService.sitewide(false)])],\n StandardReports.sectionOptions('conversions',null, '%')\n );\n\n var orders = function(section) {\n return Section(\"orders\", PageConfig.transactionSummary,\n Chart(\"orders\", \"line\", \"values\", section,\n [SeriesService.tf({userCohort: UserCohort.tf.value, isBot: false, isMatched: true}),\n SeriesService.nonTF({userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true})]\n ),\n [StandardReports.calloutOptions(\"TotalUsedForReporting\", [CalloutLabelService.tf(true), CalloutLabelService.nonTF(true)])],\n StandardReports.sectionOptions('orders')\n );\n };\n\n var sessions = function(section) {\n return Section(\"sessions\", PageConfig.transactionSummary,\n Chart(\"sessions\", \"line\", \"values\", section,\n [SeriesService.tf({userCohort: UserCohort.tf.value, isBot: false}),\n SeriesService.nonTF({userCohort: UserCohort.nonTF.value, isBot: false})]\n ),\n [StandardReports.calloutOptions(\"TotalUsedForReporting\", [CalloutLabelService.tf(true), CalloutLabelService.nonTF(true)])],\n StandardReports.sectionOptions('sessions')\n );\n };\n\n var ordersForConversion = Section(\"ordersForConversion\", PageConfig.orders,\n Chart(\"ordersForConversion\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false, isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true }) ]\n ),\n [ StandardReports.calloutOptions(\"TotalUsedForReporting\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true) ]) ],\n StandardReports.sectionOptions('orders')\n );\n\n var totalOrders = Section(\"totalOrders\", PageConfig.orders,\n Chart(\"totalOrders\", \"area\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false, isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true }),\n SeriesService.sitewideWithBots(function (value) { return value.isBot || !value.isMatched; }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.all, ConsumerChartDisplay.Colors.totalLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.all, ConsumerChartDisplay.Colors.totalLine)])],\n StandardReports.sectionOptions('orders')\n );\n\n var tfOrders = Section(\"tfOrders\", PageConfig.orders,\n Chart(\"tfOrders\", \"area\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false, isMatched: true }),\n SeriesService.tfWithBots(function (value) { return value.userCohort === UserCohort.tf.value &&\n (value.isBot || !value.isMatched); }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.tf, ConsumerChartDisplay.Colors.tfLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.tf, ConsumerChartDisplay.Colors.tfLine)])],\n StandardReports.sectionOptions('orders')\n );\n\n var nonTFOrders = Section(\"nonTFOrders\", PageConfig.orders,\n Chart(\"nonTFOrders\", \"area\", \"values\", false,\n [ SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true }),\n SeriesService.nonTFWithBots(function (value) { return value.userCohort === UserCohort.nonTF.value &&\n (value.isBot || !value.isMatched); }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalReporting\", [\n CalloutLabelService.sectionTotal(false, UserCohort.nonTF, ConsumerChartDisplay.Colors.nonTFLine) ]),\n StandardReports.calloutOptions(\"TotalUsedForReporting\", [\n CalloutLabelService.usedForReporting(false, UserCohort.nonTF, ConsumerChartDisplay.Colors.nonTFLine)])],\n StandardReports.sectionOptions('orders')\n );\n\n var revenue = Section(\"revenue\", PageConfig.revenue,\n Chart(\"revenue\", \"area\", \"values\", false,\n [ SeriesService.tf(function(v){ return v.userCohort === UserCohort.tf.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.nonTF(function(v){ return v.userCohort === UserCohort.nonTF.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.sitewideWithBots(function(v){ return v.userCohort === UserCohort.all.value && v.isBot && _.isUndefined(v.isMatched) }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalRevenue\",\n [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true), CalloutLabelService.sitewideWithBots(false)])\n ],\n StandardReports.sectionOptions('revenue', '$')\n );\n\n var aov = Section(\"aov\", PageConfig.revenue,\n Chart(\"aov\", \"line\", \"values\", false,\n [ SeriesService.tf(function(v){ return v.userCohort === UserCohort.tf.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.nonTF(function(v){ return v.userCohort === UserCohort.nonTF.value && !v.isBot && _.isUndefined(v.isMatched) }),\n ]\n ),\n [ StandardReports.calloutOptions(\"RelativeAOVLift\", [ CalloutLabelService.change(false) ]),\n StandardReports.calloutOptions(\"MeanAOV\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)])\n ],\n StandardReports.sectionOptions('revenue', '$')\n );\n\n var rps = Section(\"rps\", PageConfig.revenue,\n Chart(\"rps\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false,isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false,isMatched: true }),\n ]\n ),\n [ StandardReports.calloutOptions(\"RevenuePerSessionLift\", [ CalloutLabelService.change(false) ]),\n StandardReports.calloutOptions(\"MeanRPS\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)])\n ],\n StandardReports.sectionOptions('revenue-per-session', '$')\n );\n\n var arpu = Section(\"arpu\", PageConfig.revenue,\n Chart(\"arpu\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false,isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false,isMatched: true }),\n ]\n ),\n [ StandardReports.calloutOptions(\"ARPULift\", [ CalloutLabelService.change(false) ]),\n StandardReports.calloutOptions(\"MeanARPU\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)])\n ],\n StandardReports.sectionOptions('average-revenue-per-user', '$')\n );\n\n var mrps = Section(\"mrps\", PageConfig.revenue,\n Chart(\"mrps\", \"line\", \"values\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false,isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false,isMatched: true }),\n ]\n ),\n [ StandardReports.calloutOptions(\"MonthlyRevenuePerSessionLift\", [ CalloutLabelService.change(false) ]),\n StandardReports.calloutOptions(\"MeanMRPS\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)])\n ],\n StandardReports.sectionOptions('monthly-revenue-per-session', '$')\n );\n\n var upt = Section(\"upt\", PageConfig.revenue,\n Chart(\"upt\", \"line\", \"ratio\", false,\n [ SeriesService.tf(function(v){ return v.userCohort === UserCohort.tf.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.nonTF(function(v){ return v.userCohort === UserCohort.nonTF.value && !v.isBot && _.isUndefined(v.isMatched) }),\n ]\n ),\n [ StandardReports.calloutOptions(\"RelativeUPTLift\", [ CalloutLabelService.change(false) ]),\n StandardReports.calloutOptions(\"MeanUPT\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)])\n ],\n StandardReports.sectionOptions('revenue')\n );\n\n var units = Section(\"units\", PageConfig.revenue,\n Chart(\"units\", \"area\", \"values\", false,\n [ SeriesService.tf(function(v){ return v.userCohort === UserCohort.tf.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.nonTF(function(v){ return v.userCohort === UserCohort.nonTF.value && !v.isBot && _.isUndefined(v.isMatched) }),\n SeriesService.sitewideWithBots(function(v){ return v.userCohort === UserCohort.all.value && v.isBot && _.isUndefined(v.isMatched) }, null, null, true)\n ]\n ),\n [ StandardReports.calloutOptions(\"TotalUnits\",\n [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true), CalloutLabelService.sitewideWithBots(false)])\n ],\n StandardReports.sectionOptions('revenue')\n );\n\n var monthlyOrders = function (section) {\n return Section(\"monthlyOrders\", PageConfig.orderRate,\n Chart(\"monthlyOrders\", \"line\", \"values\", section,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value, isBot: false, isMatched: true }),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value, isBot: false, isMatched: true }),\n SeriesService.sitewideWithBots({ userCohort: UserCohort.all.value }),\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanMonthlyOrders\", [ CalloutLabelService.tf(true), CalloutLabelService.nonTF(true),\n CalloutLabelService.sitewide(false)]) ],\n StandardReports.sectionOptions('monthly-orders')\n );\n };\n\n var monthlyUsers = function (section) {\n return Section(\"mau\", PageConfig.orderRate,\n Chart(\"mau\", \"line\", \"values\", section,\n [SeriesService.tf({userCohort: UserCohort.tf.value, isBot: false}),\n SeriesService.nonTF({userCohort: UserCohort.nonTF.value, isBot: false})\n ]\n ),\n [StandardReports.calloutOptions(\"MeanUserCountUsedForReporting\", [CalloutLabelService.tf(true),\n CalloutLabelService.nonTF(true), CalloutLabelService.sitewide(false)])],\n StandardReports.sectionOptions('monthly-users')\n );\n };\n\n var ordersPerUser = Section(\"ordersRate\", PageConfig.orderRate,\n Chart(\"ordersRate\", \"line\", \"ratio\", false,\n [ SeriesService.tf({ userCohort: UserCohort.tf.value}),\n SeriesService.nonTF({ userCohort: UserCohort.nonTF.value})\n ]\n ),\n [ StandardReports.calloutOptions(\"MeanORPU\", [ CalloutLabelService.tf(false), CalloutLabelService.nonTF(false),\n CalloutLabelService.sitewide(false)]) ],\n StandardReports.sectionOptions('monthly-orders-per-user')\n );\n\n return {\n conversion: conversion,\n orders: orders,\n sessions: sessions,\n\n ordersForConversion: ordersForConversion,\n totalOrders: totalOrders,\n tfOrders: tfOrders,\n nonTFOrders: nonTFOrders,\n\n revenue: revenue,\n aov: aov,\n rps: rps,\n arpu: arpu,\n mrps:mrps,\n upt: upt,\n units: units,\n\n monthlyOrders: monthlyOrders,\n monthlyUsers: monthlyUsers,\n ordersPerUser: ordersPerUser\n\n };\n\n }\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('DateUtil', DateUtils);\n\n function DateUtils() {\n\n return {\n fullMonthDate : function(d) { return moment(d).format('MMMM D, YYYY');},\n shortMonthDate: function (d) { return moment(d).format('MMM D, YYYY');},\n onlyMonth: function (d) { return moment(d).format('MMM YYYY');},\n shortMonthDateWithDayOfWeek: function (d) { return moment(d).format('ddd MMM D, YYYY');},\n formatToYearMonthDay: function(d) { return moment(d).format('YYYY-MM-DD');}\n }\n }\n})();","(function () {\n 'use strict';\n\n [\n 'Activity',\n 'Region'\n ].forEach(createDirective);\n\n angular\n .module('tfc.retailer.ActivityRegionFilter')\n .directive('tfcActivityRegionFilter', tfcActivityRegionFilter)\n .controller('ActivityFilterCtrl', ActivityFilterCtrl)\n .controller('RegionFilterCtrl', RegionFilterCtrl);\n\n\n function ActivityFilterCtrl(){\n var vm = this;\n vm.selectedActivity = vm.filters && vm.filters.getSelected();\n vm.activityChangeEvent = function () {\n if(vm.selectedActivity) {\n vm.filters.setSelected(vm.selectedActivity.label);\n vm.filterFunc({activity: vm.selectedActivity});\n } else {\n vm.selectedActivity = vm.filters && vm.filters.getSelected();\n }\n }\n }\n\n function RegionFilterCtrl() {\n var vm = this;\n vm.selectedRegion = vm.filters && vm.filters.getSelectedRegion();\n vm.regionChangeEvent = function () {\n if(vm.selectedRegion){\n vm.filters.setSelectedRegion(vm.selectedRegion.label);\n vm.filterFunc({region: vm.selectedRegion});\n } else {\n vm.selectedRegion = vm.filters && vm.filters.getSelectedRegion();\n }\n }\n }\n\n function tfcActivityRegionFilter(){\n return {\n restrict: 'E',\n templateUrl : 'Util/ActivityRegionFilter/ActivityRegionFilter.tmpl.html',\n scope: true\n }\n }\n\n function createDirective(type) {\n var name = 'tfc' + type + 'Filter';\n angular\n .module('tfc.retailer.ActivityRegionFilter')\n .directive(name, directiveFn);\n\n // @ngInject\n function directiveFn() {\n return {\n scope : {\n filters : '=',\n filterFunc : '&'\n },\n controller : type + 'FilterCtrl as vm',\n bindToController : true,\n templateUrl : 'Util/ActivityRegionFilter/' + type + 'Filter.tmpl.html'\n };\n }\n }\n\n})();","(function () {\n 'use strict';\n\n [\n 'Activity',\n 'Region',\n ].forEach(createDirective);\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcActivityRegionLabel', tfcActivityRegionLabel)\n .controller('ActivityLabelCtrl', ActivityLabelCtrl)\n .controller('RegionLabelCtrl', RegionLabelCtrl)\n .constant('ALL_REGION', 'All Regions');\n\n function tfcActivityRegionLabel(){\n return {\n restrict: 'E',\n templateUrl : 'Util/ActivityRegionLabel/ActivityRegionLabel.tmpl.html',\n scope: true\n }\n }\n\n // @ngInject\n function ActivityLabelCtrl(){\n var vm = this;\n vm.selectedLabel = vm.labels.getSelected() && vm.labels.getSelected().getLabel();\n vm.hasMultipleKeys = vm.labels.hasMultipleActivity();\n }\n\n // @ngInject\n function RegionLabelCtrl(ALL_REGION){\n var vm = this;\n var labelName = vm.labels.getSelectedRegion() &&\n vm.labels.getSelectedRegion().labelDescription ;\n vm.selectedLabel = labelName === 'All' ? ALL_REGION : labelName;\n vm.hasMultipleKeys = vm.labels.hasMultipleRegion();\n }\n\n function createDirective(type) {\n var name = 'tfc' + type + 'Label';\n angular\n .module('tf.retailer.Util')\n .directive(name, directiveFn);\n\n // @ngInject\n function directiveFn() {\n return {\n scope : {\n labels : '=',\n pageType : '='\n },\n controller : type + 'LabelCtrl as vm',\n bindToController : true,\n templateUrl : 'Util/ActivityRegionLabel/' + type + '.tmpl.html'\n };\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.AggregationDetail')\n .directive('tfcAggregationDetail', tfcAggregationDetail)\n .controller('tfcAggregationDetailCtrl', tfcAggregationDetailCtrl);\n\n function tfcAggregationDetail(){\n return {\n restrict: 'E',\n controller:'tfcAggregationDetailCtrl as vm',\n templateUrl : 'Util/AggregationDetail/AggregationDetail.tmpl.html',\n bindToController: true,\n scope : {\n aggregationDetail:\"=\"\n }\n }\n }\n\n function tfcAggregationDetailCtrl(Auth) {\n var vm = this;\n vm.isAggregationDetailVisible = Auth.can('viewAggregationLog');\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.BrandSelection')\n .directive('tfcBrandSelection', tfcBrandSelection)\n .controller('BrandSelectionCtrl', BrandSelectionCtrl)\n .controller('BrandSelectionModalCtrl', BrandSelectionModalCtrl)\n .directive('tfcBrandSelectionAutoFocus',tfcBrandSelectionAutoFocus)\n .constant('BrandTypeAheadThreshold', 100)\n .constant('BrandSearchThreshold',10);\n\n function tfcBrandSelection() {\n return {\n restrict: 'E',\n controller : 'BrandSelectionCtrl as vm',\n templateUrl : 'Util/BrandSelection/BrandSelection.tmpl.html',\n bindToController : true,\n scope : {\n selectedBrand : '=',\n brands: '=',\n reload: '='\n }\n };\n }\n \n function tfcBrandSelectionAutoFocus() {\n return {\n restrict: 'A',\n require:'ngModel',\n link: function (scope, element, attrs) {\n var focusElem = element[0];\n if(focusElem) {\n var focusElemVal = _.get(scope, attrs.ngModel);\n focusElem.focus();\n focusElem.value = focusElemVal.name;\n focusElem.select();\n focusElem.onfocus = function () {\n focusElem.select();\n };\n }\n }\n };\n }\n\n function BrandSelectionCtrl($uibModal) {\n var vm = this;\n vm.openModal = function (size) {\n var modalInstance = $uibModal.open({\n animation: vm.animationsEnabled,\n templateUrl: 'Util/BrandSelection/BrandSelectionModal.tmpl.html',\n controller: 'BrandSelectionModalCtrl',\n controllerAs: 'vm',\n size: size,\n resolve: {\n selectedBrand: function() {\n return vm.selectedBrand;\n },\n brands: function() {\n return vm.brands;\n },\n reload: function() {\n return vm.reload;\n }\n }\n });\n };\n }\n\n function BrandSelectionModalCtrl(selectedBrand, $uibModalInstance, brands, reload, CookieJar, $state, BrandTypeAheadThreshold, BrandSearchThreshold) {\n var vm = this;\n vm.selectedBrand = selectedBrand;\n vm.showBrandTypeAhead = function(){\n return vm.brands.length <= BrandTypeAheadThreshold;\n };\n vm.showBrandSearch = function(){\n return vm.brands.length > BrandSearchThreshold;\n };\n vm.brands = brands;\n vm.reload = reload;\n vm.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n vm.setActiveBrand = function(brand){\n vm.selectedBrand = brand;\n vm.reload(brand);\n $uibModalInstance.dismiss('cancel');\n };\n vm.isBrandActive = function(brand){\n return brand === vm.selectedBrand;\n };\n vm.onSelect = function ($item, $model, $label) {\n vm.selectedBrand = $item;\n vm.reload(vm.selectedBrand);\n $uibModalInstance.dismiss('cancel');\n };\n vm.brandMatches = function(search){\n return function (brand) {\n return !search || brand.name.substr(0, search.length).toLowerCase().indexOf(search.toLowerCase()) >= 0;\n };\n };\n\n }\n\n})();","(function(){\n 'use strict';\n\n angular.module(\"tfc.retailer.CategorySelection\")\n .directive('categoryDropdown',categoryDropdown)\n .controller('categoryDropdownCtrl',categoryDropdownCtrl)\n .constant('categoryDropdownCfg', {\n display: 'DropDown',\n LOW:-10,\n HIGH:10\n });\n\n //ngInject\n function categoryDropdownCtrl ($scope, $element, $attrs ,categoryDropdownCfg){\n var ngModelCtrl, self = this;\n this.init = function(_ngModelCtrl){\n ngModelCtrl = _ngModelCtrl;\n ngModelCtrl.$render = function(){\n if(!_.isUndefined($scope.selectedCategory)){\n ngModelCtrl.$setViewValue($scope.selectedCategory);\n }\n\n self.$render(ngModelCtrl.$viewValue);\n };\n };\n\n\n $scope.selectItem = function(item){\n var itemObj = item;\n if(_.isObject(item)){\n $scope.selectedCategory = itemObj;\n\n ngModelCtrl.$render();\n }\n };\n\n $scope.getKeyColor = function (dist) {\n var colorClass = \"\";\n if (dist == \"\") {\n colorClass = 'one-retailer-color-key';\n }else if ( dist >= categoryDropdownCfg.HIGH ) {\n colorClass = 'high-color-key';\n }else if ( categoryDropdownCfg.HIGH > dist && dist >= categoryDropdownCfg.LOW ) {\n colorClass = 'medium-color-key';\n }else if ( dist < categoryDropdownCfg.LOW ) {\n colorClass = 'low-color-key';\n }\n return colorClass;\n }\n };\n\n //ngInject\n function categoryDropdown(categoryDropdownCfg){\n return{\n restrict: \"AE\",\n scope:{\n categoryDropdownItems: \"=\"\n },\n require: ['categoryDropdown','ngModel'],\n controller: \"categoryDropdownCtrl\",\n templateUrl: 'Util/CategorySelection/CategorySelection.tmpl.html',\n link: function(scope, el, attr, ctrls){\n var categoryDropdownCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n var defaultDisplay = (attr.categoryDropdownDisplay && attr.categoryDropdownDisplay != \"\") ?\n JSON.parse(attr.categoryDropdownDisplay):categoryDropdownCfg.display;\n\n scope._categoryDropdownItems = scope.categoryDropdownItems;\n\n categoryDropdownCtrl.init(ngModelCtrl);\n categoryDropdownCtrl.$render = function(displayObj){\n changeShowText(displayObj);\n };\n\n categoryDropdownRender();\n\n function categoryDropdownRender(){\n changeShowText(defaultDisplay);\n }\n\n function changeShowText(displayObj){\n scope.selectedCategory = (displayObj !== null) ? displayObj : defaultDisplay;\n }\n }\n };\n };\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.CollapsibleBox')\n .directive('tfcCollapsibleBox', tfcCollapsibleBox)\n .controller('CollapsibleBoxCtrl', CollapsibleBoxCtrl)\n .directive('tfcCollapsibleBoxTransclude', tfcCollapsibleBoxTransclude);\n\n // tfc-collapsible-box-title, which defaults to an h4 containing the title argument,\n // or you can use the fit-box-title to have custom HTML for above the box\n createTranscludedPortionDirective('Title');\n\n // @ngInject\n function CollapsibleBoxCtrl() {\n var vm = this;\n\n vm.setTitle = function (tmpl) {\n this.titleTmpl = tmpl;\n };\n }\n\n // @ngInject\n function tfcCollapsibleBox() {\n return {\n restrict : 'E',\n replace : true,\n transclude : true,\n bindToController : true,\n controller : 'CollapsibleBoxCtrl as vm',\n templateUrl : 'Util/CollapsibleBox/CollapsibleBox.tmpl.html',\n scope : {}\n };\n }\n\n function createTranscludedPortionDirective(name) {\n angular\n .module('tfc.retailer.CollapsibleBox')\n .directive('tfcCollapsibleBox' + name, function () {\n return {\n restrict : 'E',\n transclude : true,\n template : '',\n replace : true,\n require : '^tfcCollapsibleBox',\n link : function ($scope, $el, $attr, tfcCollapsibleBox, transclude) {\n tfcCollapsibleBox['set' + name](transclude());\n }\n };\n });\n }\n\n // @ngInject\n function tfcCollapsibleBoxTransclude() {\n return {\n require : '^tfcCollapsibleBox',\n link : function ($scope, $el, $attrs, tfcCollapsibleBox) {\n $scope.$watch(\n function () {\n return tfcCollapsibleBox[$attrs.tfcCollapsibleBoxTransclude]\n },\n function (html) {\n if (html != null) {\n $el.html('');\n $el.append(html);\n }\n }\n );\n }\n };\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.CollapsibleMenu')\n .directive('tfcCollapsibleMenu', tfcCollapsibleMenu);\n\n // @ngInject\n function tfcCollapsibleMenu() {\n return {\n restrict: 'A',\n replace: true,\n scope:true,\n\n link: function($scope,attr) {\n var expanded = null;\n var selected = null;\n var vm = $scope.vm;\n vm.isExpanded = function (item) {\n return expanded === item;\n };\n\n vm.toggleExpanded = function (item) {\n if (vm.isExpanded(item)) {\n expanded = null;\n } else {\n expanded = item;\n }\n };\n vm.onSelect = function(item) {\n vm.toggleExpanded(item);\n selected = item;\n if(!(item.children && item.children.length > 0)) {\n vm.onClick(item);\n }\n };\n vm.onMainSelect = function(item) {\n vm.onSelect(item);\n if (item.children && item.children.length > 0) {\n var firstAccessibleChild = _.find(item.children, function (child) {\n return vm.canAccess(child);\n });\n if (firstAccessibleChild) {\n vm.onClick(firstAccessibleChild);\n }\n }\n };\n vm.isSelected = function (item) {\n return vm.isActive(item);\n };\n }\n };\n }\n})();\n\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .factory('ColorCode', ColorCode)\n .constant('HIGH',10)\n .constant('LOW',-10)\n .filter('colorConstant', colorConstant);\n\n // @ngInject\n function colorConstant(HIGH, LOW) {\n return function (threshold) {\n if (threshold) {\n return (threshold == 'HIGH') ? HIGH:LOW;\n }\n };\n }\n\n // @ngInject\n function ColorCode(HIGH, LOW, translateFilter) {\n\n var reportKeys = [{key: 'high-color-key', value: translateFilter('reports.returns.key.high')},\n {key: 'medium-color-key', value: translateFilter('reports.returns.key.medium')},\n {key: 'low-color-key', value: translateFilter('reports.returns.key.low')},\n {key: 'one-retailer-color-key', value: translateFilter('reports.returns.key.oneRetailer')}];\n\n return {\n getKeys : getKeys,\n getColor : getColor\n };\n\n function getKeys(){\n return reportKeys;\n }\n\n function getColor(dist) {\n var colorClass = \"\";\n if(dist == \"\") {\n colorClass = reportKeys[3].key;\n } else if (dist >= HIGH) {\n colorClass = reportKeys[0].key;\n } else if (HIGH > dist && dist >= LOW) {\n colorClass = reportKeys[1].key;\n } else if (dist < LOW) {\n colorClass = reportKeys[2].key;\n }\n return colorClass;\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcColorSwatch', tfcColorSwatch);\n\n function tfcColorSwatch(){\n return {\n restrict: 'E',\n replace: true,\n scope: {\n reportKeys: '=data',\n lastVisible: '='\n },\n templateUrl: 'Util/ColorSwatch/ColorSwatch.tmpl.html'\n }\n }\n\n})();","(function (){\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('StandardReportFilter', FilterClass);\n\n function FilterClass(ReportFormat,DateUtil, DeviceTypeFilter, RegionFilter, ProductHierarchyFilter, DetailLevelFilter) {\n\n function fetchFilter(dimensionArr, dimensionKey) {\n var dimension = _(dimensionArr).find({'name': dimensionKey});\n return dimension ? dimension.values : [];\n }\n\n function getTimezone(timezones) {\n return timezones.length > 1 ? 'Multiple Time Zones' : _.head(timezones);\n }\n\n function setData(data, filterStateParams, that) {\n that.deviceType = DeviceTypeFilter(fetchFilter(data, 'deviceType'), filterStateParams).values();\n that.region = RegionFilter(fetchFilter(data, 'region'), filterStateParams).values();\n that.hierarchy = ProductHierarchyFilter(fetchFilter(data, 'hierarchy'), filterStateParams,\n 'All').values();\n that.addressableHierarchy = ProductHierarchyFilter(fetchFilter(data, 'addressable_hierarchy'),\n filterStateParams, 'All TrueFit Addressable').values();\n that.detailLevel = DetailLevelFilter(ReportFormat, filterStateParams).values();\n that.timezone = getTimezone(fetchFilter(data, 'str_timezone'));\n var maxAllowedDate = _.max(_.map(fetchFilter(data, 'updatedDate'), DateUtil.formatToYearMonthDay));\n var defaultStartDate = DateUtil.formatToYearMonthDay(moment(maxAllowedDate).subtract(1, 'months'));\n that.dateRange = {\n startDate: filterStateParams.startDate ||defaultStartDate,\n endDate: filterStateParams.endDate || maxAllowedDate\n };\n that.maxAllowedDate = maxAllowedDate;\n that.addressable = filterStateParams.addressable || false;\n return that;\n }\n\n /**\n * @params data : filter object\n *\n * @Output object : {region: [], deviceType: [], dateRange: {}...}\n * */\n\n function Filter(data, filterStateParams) {\n if (!(this instanceof Filter)) return new Filter(data, filterStateParams);\n setData(data, filterStateParams, this);\n this.reset = function(){ return setData(data, {}, this);}\n }\n\n return Filter;\n }\n \n})();","(function (){\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .directive('tfcStandardReportsFilter', Filter)\n .factory('FilterModal', FilterModal)\n .controller('StandardReportsFilterCtrl', StandardReportsFilterCtrl);\n\n\n // @ngInject\n function FilterModal($uibModal, $document, DateUtil, MIN_DATE, AreaLineChartAxisHandle) {\n\n return {\n showModal : showModal\n };\n\n function showModal() {\n var parentElem = angular.element($document[0].querySelector('.master-container'));\n var modalInstance = $uibModal.open({\n size: 'sm',\n templateUrl: 'StandardReports/Filters/FilterModal.tmpl.html',\n windowTopClass: 'model-right-top-window',\n appendTo: parentElem,\n controller: function ($scope, Filters, $state, AnalyticsHelper) {\n var vm = $scope;\n\n var selectedFn = function(filter) { return _.find(filter, {isSelected: true}) };\n\n var updateFilterFn = function(arr, selectedFilter) {\n _.map(arr, function (obj) {\n obj.isSelected = obj.name === selectedFilter.name;\n })\n };\n\n vm.toggleDetailLevel = function(selectedDetailLevel) {\n return updateFilterFn(vm.filter.detailLevel, selectedDetailLevel);\n };\n\n vm.toggleRegions = function(selectedObj){\n selectedObj.indeterminate = false;\n return _.forEach(childElements(selectedObj), function(o){\n o.isSelected = selectedObj.isSelected;\n o.indeterminate = false;\n });\n };\n\n vm.toggleParentRegion = function(parent, self){\n vm.toggleRegions(self);\n setParentIsSelected(parent);\n };\n\n vm.cancel = function () {\n modalInstance.close();\n };\n\n vm.setDimension = function () {\n Filters.setFilter(vm.filter);\n goAndUpdateState();\n vm.cancel();\n };\n\n vm.reset = function () {\n Filters.resetFilter();\n goAndUpdateState();\n vm.cancel();\n };\n\n var goAndUpdateState = function(){\n var filterParams = Filters.getFilterParams();\n var addressable = Filters.getFilter().addressable;\n var queryParams = _.merge(filterParams.queryParams, filterParams.pathParams, {addressable: addressable});\n AnalyticsHelper.sendAnalyticsFilterChangeEvent(queryParams);\n $state.go('.', queryParams);\n };\n\n onInit();\n\n\n function capitalizeDimensionNames(arr){\n arr.forEach(function(obj){obj.name = _.capitalize(obj.name);})\n }\n\n function onInit() {\n vm.filter = Filters.getFilter();\n vm.minStartDate = DateUtil.shortMonthDate(MIN_DATE);\n vm.maxDate = DateUtil.shortMonthDate(vm.filter.maxAllowedDate);\n vm.filter.dateRange.startDate = DateUtil.shortMonthDate(vm.filter.dateRange.startDate);\n vm.filter.dateRange.endDate = DateUtil.shortMonthDate(vm.filter.dateRange.endDate);\n capitalizeDimensionNames(vm.filter.detailLevel);\n vm.filter.selectedDetailLevel = selectedFn(vm.filter.detailLevel);\n vm.collasibleFilters = [];\n if (!_.isEmpty(vm.filter.region)) {\n vm.collasibleFilters.push({\n filter: 'region', isCollapsed: true,\n template: \"StandardReports/Filters/RegionDimension.tmpl.html\"\n });\n }\n if (!_.isEmpty(vm.filter.deviceType)) {\n vm.collasibleFilters.push({\n filter: 'deviceType', isCollapsed: true,\n template: \"StandardReports/Filters/DeviceDimension.tmpl.html\"\n });\n }\n\n vm.selectedHierarchy = Filters.getHierarchy();\n vm.collasibleFilters.push({\n filter: 'hierarchy', isCollapsed: true,\n template: \"StandardReports/Filters/HierarchyDimension.tmpl.html\"\n });\n\n _.each(vm.filter.deviceType, function (deviceType) { setParentIsSelected(deviceType); });\n _.each(vm.filter.region, function (region) { setParentIsSelected(region); });\n }\n\n function childElements(selectedObj) {\n return _.reduce(selectedObj.values, function (acc, obj) {\n acc.push(obj);\n if(obj.values && obj.values.length) {\n var child = childElements(obj);\n acc = acc.concat(child);\n }\n return acc;\n }, [])\n }\n\n function setParentIsSelected(parent) {\n if(parent.values && parent.values.length) {\n _.forEach(parent.values, setParentIsSelected);\n parent.isSelected = _.some(parent.values, {isSelected: true});\n parent.indeterminate = parent.isSelected && _.some(parent.values, function (region) {\n return !region.isSelected || region.indeterminate\n });\n }\n }\n\n }\n });\n return modalInstance;\n }\n\n }\n\n function Filter() {\n return {\n restrict: 'E',\n scope : true,\n templateUrl : 'StandardReports/Filters/Filter.tmpl.html',\n controller : 'StandardReportsFilterCtrl as vm',\n bindToController: true\n };\n }\n\n //@ngInject\n function StandardReportsFilterCtrl(FilterModal){\n var vm = this;\n\n var modalInstance;\n var opened = false;\n\n vm.openModal = function() {\n if (!opened){\n modalInstance = FilterModal.showModal();\n } else {\n modalInstance && modalInstance.close();\n }\n modalInstance.opened.then(function () { opened = true; });\n modalInstance.closed.then(function () { opened = false; });\n };\n\n }\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .service('Filters', Filters);\n\n function Filters($stateParams, StandardReportFilter, DateUtil) {\n\n /**\n * filter object for displaying filters\n *\n *\n * Methods: {\n getFilter : To get filters all including dimensions,\n resetFilter : to reset selected filters,\n getFilterParams: method to get consumer filter params @Output: {queryParams, pathParams},\n setFilter: Method to be called to apply the changes in transientFilter,\n createFilter: Method to be called on controller\n }\n *\n * */\n\n var filter = {};\n\n return {\n getFilter: getFilter,\n resetFilter: resetFilter,\n getFilterParams: getFilterParams,\n setFilter: setFilter,\n createFilter: createFilter,\n getRegion: getRegion,\n getDeviceTypes: getDeviceTypes,\n getHierarchy: getHierarchyParams\n };\n\n function createFilter(filterObj, filterStateParams){\n filter = StandardReportFilter(filterObj, filterStateParams);\n return getFilter();\n }\n\n function setFilter(formFilterObj) {\n filter = formFilterObj;\n }\n\n function getFilter(){\n return angular.copy(filter);\n }\n\n function resetFilter(){\n filter = filter.reset();\n return getFilter();\n }\n\n\n function getFilterParams(){\n var selectedDevices = (filter.deviceType) ? getDeviceTypeParams(getSelected(filter.deviceType).value()) : [],\n selectedContinents = [],\n selectedCountries = [],\n selectedUILocales = [],\n selectedHierarchy = {};\n\n if(!_.isEmpty(filter.region)){\n selectedContinents = getSelectedRegionParams(filter.region, 0);\n selectedCountries = getSelectedRegionParams(filter.region, 1);\n selectedUILocales = getSelectedRegionParams(filter.region, 2);\n }\n if(!_.isEmpty(filter.hierarchy)){\n selectedHierarchy = getHierarchyParams(filter);\n }\n\n\n var pathParams = {detailLevel: _.lowerCase(_.head(getValues(getSelected(filter.detailLevel))))};\n var queryParams = _.merge({startDate: DateUtil.formatToYearMonthDay(filter.dateRange.startDate)},\n {endDate: DateUtil.formatToYearMonthDay(filter.dateRange.endDate)},\n {deviceType: selectedDevices},\n {country: selectedCountries},\n {uiLocale: selectedUILocales},\n {continent: selectedContinents},\n selectedHierarchy,\n filter.dashboardSpecificParams);\n\n return _.merge({queryParams: queryParams}, {pathParams: pathParams});\n }\n\n function comparisonMetricParams(filter) {\n if(!_.isUndefined(filter.metric)) {\n return { comparisonMetric: filter.metric }\n }\n }\n\n function getHierarchyParams() {\n var departments = filter.addressable ? filter.addressableHierarchy : filter.hierarchy;\n var hierarchy = _.head(getSelected(departments).value());\n var category = _.head(getSelected(hierarchy.values).value());\n return {\n department: hierarchy.name,\n category: category.name,\n classification: _.head(getSelected(category.values).value()).name\n }\n }\n\n function getValues(arr){\n return _(arr).map(function(o){return o.name}).value();\n }\n\n function getDeviceTypeParams(deviceTypes) {\n return _.flatMap(deviceTypes, function (deviceType) {\n return deviceType.values.length > 0 ? _.map(getSelected(deviceType.values).value(), function (subDeviceType) {\n return deviceType.name + \"_\" + subDeviceType.name;\n }) : deviceType.name;\n });\n }\n\n function getRegionParams(region, hierarchyLevel) {\n if(hierarchyLevel > 0) {\n var regionValues = _.flatMap(region, 'values');\n return getRegionParams(regionValues, hierarchyLevel - 1);\n }\n else\n return region;\n }\n\n function getSelectedRegionParams(region, hierarchyLevel) {\n var regionParams = getRegionParams(region, hierarchyLevel);\n return getValues(getSelected(regionParams));\n }\n\n function getSelected(arr){\n return _(arr).filter({isSelected: true});\n }\n\n function getRegion(hierarchyLevel) {\n return getRegionParams(filter.region, hierarchyLevel);\n }\n\n function getDeviceTypes() {\n return getDeviceTypeParams(filter.deviceType);\n }\n\n\n }\n\n\n})();","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('Callout', Callout);\n\n function Callout(CalloutLabelService){\n\n return {\n labelValueConfig: labelValueConfig,\n tfUsersConfig: tfUsersConfig,\n usedForReportingConfig: usedForReportingConfig,\n liftConfig: liftConfig,\n metricChangeConfig: metricChangeConfig,\n topMainSubLabelConfig: topMainSubLabelConfig\n };\n\n function labelValueConfig(section) {\n return {\n section: section,\n template: 'StandardReports/Callout/LabelValueCallout.tmpl.html'\n }\n }\n\n function tfUsersConfig(section) {\n return {\n section: section,\n template: 'StandardReports/Callout/TFUsersCallout.tmpl.html'\n }\n }\n\n function usedForReportingConfig(section) {\n return {\n section: section,\n template: 'StandardReports/Callout/UsedForReportingCallout.tmpl.html'\n }\n }\n\n function liftConfig(section) {\n return {\n section: section,\n template: 'StandardReports/Callout/LiftCallout.tmpl.html'\n }\n }\n\n function metricChangeConfig(section) {\n\n return {\n section: section,\n template: 'StandardReports/Callout/MetricChangeCallout.tmpl.html'\n }\n }\n\n\n function topMainSubLabelConfig(section, mainLabel, subLabels, fetchDataFunc) {\n return {\n section: section,\n mainLabel: mainLabel,\n subLabels: subLabels,\n fetchData: fetchDataFunc\n }\n }\n\n }\n})();","(function (){\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .directive('mainSublabelsTopCallout', mainSublabelsTopCallout)\n .controller('MainSublabelsTopCalloutCtrl', MainSublabelsTopCalloutCtrl);\n\n\n\n\n function mainSublabelsTopCallout() {\n return {\n restrict: 'E',\n scope : {\n mainLabel: '=',\n subLabels: '=',\n fetchData: '&'\n },\n templateUrl : 'StandardReports/Callout/MainSublabelsTopCallout.tmpl.html',\n controller : 'MainSublabelsTopCalloutCtrl as vm',\n bindToController: true\n };\n }\n\n //@ngInject\n function MainSublabelsTopCalloutCtrl(ConsumerChart){\n\n var vm = this;\n\n vm.fetchData().then(function (data) {\n vm.model = mainSublabelTopCalloutModel(\n vm.mainLabel,\n vm.subLabels,\n data\n );\n });\n\n\n function mainSublabelTopCalloutModel(mainLabel, subLabels, formattedData){\n\n var data = _.reduce(_.concat(mainLabel, subLabels), function (result, label) {\n result[label.userCohort.value] = _.last(ConsumerChart.getChartData(\n formattedData.dateMetrics,\n {userCohort: label.userCohort.value, isBot: false}\n ));\n return result;\n },{});\n\n return {\n mainLabel: model(data, mainLabel),\n subLabels: _.map(subLabels, function (label) {\n return model(data, label)\n })\n };\n }\n\n function model(data, label) {\n return {\n label: label,\n value: data[label.userCohort.value] && data[label.userCohort.value].value\n }\n }\n\n }\n\n\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ModuleConfig', ModuleConfig)\n .factory('TabConfig', TabConfig)\n .factory('PageConfig', PageConfig)\n .factory('SectionConfig', SectionConfig)\n .factory('CalloutLabelService', CalloutLabelService)\n .factory('Section', SectionClass)\n .factory('Chart', ChartClass)\n .factory('SeriesService', SeriesService);\n\n\n function ModuleConfig() {\n var standardReports = Module(\"standard.reports\", \"standard-report\");\n return {\n standardReports: standardReports\n }\n }\n\n function TabConfig(ModuleConfig) {\n\n return {\n transaction: Tab(\"transactions\", ModuleConfig.standardReports, \"Transaction\"),\n shoppers: Tab(\"shoppers\", ModuleConfig.standardReports, \"Shoppers\"),\n executiveSummary: Tab(\"executiveSummary\", ModuleConfig.standardReports, \"Executive Summary\", \"executive-summary\"),\n comparisons: Tab(\"comparisons\", ModuleConfig.standardReports, \"Comparisons\")\n }\n }\n\n function PageConfig(TabConfig, ExportType){\n var defaultExportTypes = [ExportType.csv, ExportType.pdf];\n\n return {\n transactionSummary: Page(\"summary\", TabConfig.transaction, \"Summary\", defaultExportTypes),\n orders: Page(\"orders\", TabConfig.transaction, \"Orders\", defaultExportTypes),\n revenue: Page(\"revenue\", TabConfig.transaction, \"Revenue\", defaultExportTypes),\n shoppersSummary: Page(\"summary\", TabConfig.shoppers, \"Summary\", defaultExportTypes),\n sessions: Page(\"sessions\", TabConfig.shoppers, \"Sessions\", defaultExportTypes),\n activeUsers: Page(\"activeUsers\", TabConfig.shoppers, \"Active Users\", defaultExportTypes,\"active-users\"),\n adoption: Page(\"adoption\", TabConfig.shoppers, \"Adoption\", defaultExportTypes),\n kids: Page(\"kids\", TabConfig.shoppers, \"Kids\", defaultExportTypes,\"kids\"),\n sfo: Page(\"sfo\", TabConfig.shoppers, \"SFO\", defaultExportTypes,\"sfo\"),\n summary: Page(\"summary\", TabConfig.executiveSummary, \"Summary\", defaultExportTypes),\n orderRate: Page(\"ordersRate\", TabConfig.transaction, \"Order Rate\", defaultExportTypes,\"order-rate\"),\n dateRangeComparison: Page(\"dateRange\", TabConfig.comparisons, \"Date Range Comparison\", defaultExportTypes, \"date-range\"),\n hierarchyComparison: Page(\"hierarchy\", TabConfig.comparisons, \"Hierarchy Comparison\", defaultExportTypes),\n shopperProfiles: Page(\"shopperProfiles\", TabConfig.shoppers, \"Shopper Profiles\",\n [ExportType.excel, ExportType.pdf],\"shopper-profiles\")\n }\n }\n\n function SectionConfig(PageConfig, Section, TransactionsConfig, ShoppersConfig, ComparisonsConfig) {\n\n //TODO make valueType an ENUM\n var mau = ShoppersConfig.mau;\n var totalSessions = ShoppersConfig.totalSessions;\n var totalOrders = TransactionsConfig.totalOrders;\n var sessionForConversion = ShoppersConfig.sessionForConversion;\n var ordersForConversion = TransactionsConfig.ordersForConversion;\n var mauTF = ShoppersConfig.mauTF;\n var revenue = TransactionsConfig.revenue;\n\n\n return {\n\n execSPU: Section(\"executiveSPU\", PageConfig.summary),\n execConversion: Section(\"execConversion\", PageConfig.summary),\n execAOV: Section(\"execAOV\", PageConfig.summary),\n execUPT: Section(\"execUPT\", PageConfig.summary),\n execARPU: Section(\"execARPU\", PageConfig.summary),\n\n\n // Sections\n sessions : TransactionsConfig.sessions(totalSessions),\n orders : TransactionsConfig.orders(totalOrders),\n conversion : TransactionsConfig.conversion,\n\n ordersForConversion: ordersForConversion,\n totalOrders: totalOrders,\n tfOrders: TransactionsConfig.tfOrders,\n nonTFOrders: TransactionsConfig.nonTFOrders,\n\n revenue: revenue,\n // incrRevenue: Section(\"incrRevenue\", PageConfig.revenue),\n aov: TransactionsConfig.aov,\n rps: TransactionsConfig.rps,\n arpu: TransactionsConfig.arpu,\n mrps: TransactionsConfig.mrps,\n upt: TransactionsConfig.upt,\n units: TransactionsConfig.units,\n\n monthlyOrders : TransactionsConfig.monthlyOrders(ordersForConversion),\n monthlyUsers : TransactionsConfig.monthlyUsers(mau),\n ordersPerUser : TransactionsConfig.ordersPerUser,\n\n spu : ShoppersConfig.spu,\n mauSummary : ShoppersConfig.mauSummary(mau),\n monthlySessions : ShoppersConfig.monthlySessions(sessionForConversion),\n\n sessionForConversion : sessionForConversion,\n totalSessions : totalSessions,\n tfSessions : ShoppersConfig.tfSessions,\n nonTFSessions : ShoppersConfig.nonTFSessions,\n\n mau: mau,\n mauTF: mauTF,\n dau: ShoppersConfig.dau,\n dauTF: ShoppersConfig.dauTF,\n newUsers: ShoppersConfig.newUsers,\n\n adoption: ShoppersConfig.adoption(mau),\n tfReg: ShoppersConfig.tfReg(mauTF),\n tfSessionsAdoption: ShoppersConfig.tfSessionsAdoption(totalSessions),\n tfOrdersAdoption: ShoppersConfig.tfOrdersAdoption(totalOrders),\n tfRevenue: ShoppersConfig.tfRevenue(revenue),\n\n kidsMauTF: ShoppersConfig.kidsMauTF,\n kidsDauTF: ShoppersConfig.kidsDauTF,\n newKidsProfiles: ShoppersConfig.newKidsProfiles,\n tfUsersWithNewKids: ShoppersConfig.tfUsersWithNewKids,\n allTimeKidsProfiles: ShoppersConfig.allTimeKidsProfiles,\n allTimeUserWithKidsProfiles: ShoppersConfig.allTimeUserWithKidsProfiles,\n\n sfoMauTF: ShoppersConfig.sfoMauTF,\n sfoDauTF: ShoppersConfig.sfoDauTF,\n newSFOProfiles: ShoppersConfig.newSFOProfiles,\n tfUsersWithNewSFO: ShoppersConfig.tfUsersWithNewSFO,\n allTimeSFOProfiles: ShoppersConfig.allTimeSFOProfiles,\n allTimeUserWithSFOProfiles: ShoppersConfig.allTimeUserWithSFOProfiles,\n\n ageProfiles: ShoppersConfig.ageProfiles,\n heightProfiles: ShoppersConfig.heightProfiles,\n weightProfiles: ShoppersConfig.weightProfiles,\n inseamProfiles: ShoppersConfig.inseamProfiles,\n footLengthProfiles: ShoppersConfig.footLengthProfiles,\n bustSizeProfiles: ShoppersConfig.bustSizeProfiles,\n\n torsoLengthProfiles: ShoppersConfig.torsoLengthProfiles,\n stomachShapeProfiles: ShoppersConfig.stomachShapeProfiles,\n hipShapeProfiles: ShoppersConfig.hipShapeProfiles,\n thighShapeProfiles: ShoppersConfig.thighShapeProfiles,\n archShapeProfiles: ShoppersConfig.archShapeProfiles,\n calfShapeProfiles: ShoppersConfig.calfShapeProfiles,\n breastShapeProfiles: ShoppersConfig.breastShapeProfiles,\n buildProfiles: ShoppersConfig.buildProfiles,\n seatShapeProfiles: ShoppersConfig.seatShapeProfiles,\n\n ordersDateRangeComparison: ComparisonsConfig.orders(PageConfig.dateRangeComparison),\n sessionsDateRangeComparison: ComparisonsConfig.sessions(PageConfig.dateRangeComparison),\n revenueDateRangeComparison: ComparisonsConfig.revenue(PageConfig.dateRangeComparison),\n mauDateRangeComparison: ComparisonsConfig.mau(PageConfig.dateRangeComparison),\n dauDateRangeComparison: ComparisonsConfig.dau(PageConfig.dateRangeComparison),\n conversionDateRangeComparison: ComparisonsConfig.conversion(PageConfig.dateRangeComparison),\n spuDateRangeComparison: ComparisonsConfig.spu(PageConfig.dateRangeComparison),\n adoptionDateRangeComparison: ComparisonsConfig.adoption(PageConfig.dateRangeComparison),\n newUsersDateRangeComparison: ComparisonsConfig.newUsers(PageConfig.dateRangeComparison),\n\n ordersHierarchyComparison: ComparisonsConfig.orders(PageConfig.hierarchyComparison),\n sessionsHierarchyComparison: ComparisonsConfig.sessions(PageConfig.hierarchyComparison),\n revenueHierarchyComparison: ComparisonsConfig.revenue(PageConfig.hierarchyComparison),\n mauHierarchyComparison: ComparisonsConfig.mau(PageConfig.hierarchyComparison),\n dauHierarchyComparison: ComparisonsConfig.dau(PageConfig.hierarchyComparison),\n conversionHierarchyComparison: ComparisonsConfig.conversion(PageConfig.hierarchyComparison),\n spuHierarchyComparison: ComparisonsConfig.spu(PageConfig.hierarchyComparison),\n adoptionHierarchyComparison: ComparisonsConfig.adoption(PageConfig.hierarchyComparison),\n newUsersHierarchyComparison: ComparisonsConfig.newUsers(PageConfig.hierarchyComparison)\n }\n\n }\n\n function CalloutLabelService(UserCohort, ConsumerChartDisplay) {\n\n var labelCache = {};\n\n function key(calloutSection, labelName) {\n return calloutSection.key + \".\" + labelName;\n }\n\n function cache(calloutSection, labelName, calloutLabel) {\n if(!calloutLabel){\n return labelCache[key(calloutSection, labelName)];\n } else {\n labelCache[key(calloutSection, labelName)] = calloutLabel;\n return calloutLabel;\n }\n }\n\n function createCalloutLabel(name, color, overrideLabelProp, userCohort){\n return function (showPercent, overrideUserCohort, overrideColor) {\n return function (section) {\n var calloutSection = section.callout;\n // create only if not already created\n if(cache(calloutSection, name)){\n return cache(calloutSection, name);\n } else {\n return cache(\n calloutSection,\n name,\n CalloutLabel(\n name,\n overrideColor || color,\n calloutSection,\n overrideLabelProp,\n overrideUserCohort || userCohort,\n showPercent\n )\n );\n }\n };\n };\n }\n\n return {\n tf: createCalloutLabel('tf', ConsumerChartDisplay.Colors.tfLine, 'standard.reports.tf', UserCohort.tf),\n nonTF: createCalloutLabel('nonTF', ConsumerChartDisplay.Colors.nonTFLine,'standard.reports.nontf', UserCohort.nonTF),\n sitewide: createCalloutLabel('sitewide', ConsumerChartDisplay.Colors.totalLine, 'standard.reports.sitewide', UserCohort.all),\n sitewideWithBots: createCalloutLabel('sitewideWithBots', ConsumerChartDisplay.Colors.totalLine, 'standard.reports.sitewide.with.bots', UserCohort.all),\n total: createCalloutLabel('total', ConsumerChartDisplay.Colors.tfLine, 'standard.reports.total'),\n sectionTotal: createCalloutLabel('total', ConsumerChartDisplay.Colors.tfLine),\n tfRegistered: createCalloutLabel('tfRegistered', ConsumerChartDisplay.Colors.registered),\n siteRegistered: createCalloutLabel('siteRegistered', ConsumerChartDisplay.Colors.siteRegistered, 'standard.reports.siteregistered'),\n travellingRegistered: createCalloutLabel('travellingRegistered', ConsumerChartDisplay.Colors.travellingRegistered, 'standard.reports.travelling'),\n ipRegistered: createCalloutLabel('ipRegistered', ConsumerChartDisplay.Colors.ipRegistered, 'standard.reports.instant.profile'),\n tfPercent: createCalloutLabel('tfPercent', ConsumerChartDisplay.Colors.tfLine, null, UserCohort.tf),\n usedForReporting: createCalloutLabel(\"usedForReporting\", ConsumerChartDisplay.Colors.tfLine),\n change: createCalloutLabel(\"change\", ConsumerChartDisplay.Colors.tfLine, null, UserCohort.tf),\n lift: createCalloutLabel(\"lift\", ConsumerChartDisplay.Colors.tfLine, null, UserCohort.tf),\n // todo - Find a better way of handling these labels which are similar to tfRegistered\n tfUsersWithRecipient: createCalloutLabel(\"tfUsersWithRecipient\", ConsumerChartDisplay.Colors.registered),\n tfUsersWithRecipientSite: createCalloutLabel(\"tfUsersWithRecipientSite\", ConsumerChartDisplay.Colors.siteRegistered),\n tfUsersWithRecipientTravelling: createCalloutLabel(\"tfUsersWithRecipientTravelling\", ConsumerChartDisplay.Colors.travellingRegistered),\n tfProfiles: createCalloutLabel(\"tfProfiles\", ConsumerChartDisplay.Colors.registered),\n tfProfilesSite: createCalloutLabel(\"tfProfilesSite\", ConsumerChartDisplay.Colors.siteRegistered),\n tfProfilesTravelling: createCalloutLabel(\"tfProfilesTravelling\", ConsumerChartDisplay.Colors.travellingRegistered)\n };\n }\n\n function SeriesService(UserCohort, ConsumerChartDisplay) {\n\n var labelCache = {};\n\n function key(calloutSection, labelName) {\n return calloutSection.key + \".\" + labelName;\n }\n\n function cache(calloutSection, labelName, calloutLabel) {\n if(!calloutLabel){\n return labelCache[key(calloutSection, labelName)];\n } else {\n labelCache[key(calloutSection, labelName)] = calloutLabel;\n return calloutLabel;\n }\n }\n\n function createSeries(name, color, overrideLabelProp, userCohort){\n return function (filter, overrideUserCohort, overrideColor, stackedTotal) {\n return function (section) {\n var calloutSection = section.chart;\n // create only if not already created\n if(cache(calloutSection, name)){\n return cache(calloutSection, name);\n } else {\n return cache(\n calloutSection,\n name,\n Series(\n name,\n overrideColor || color,\n calloutSection,\n overrideLabelProp,\n overrideUserCohort || userCohort,\n filter,\n stackedTotal\n )\n );\n }\n };\n };\n }\n\n return {\n tf: createSeries('tf', ConsumerChartDisplay.Colors.tfLine, 'standard.reports.tf', UserCohort.tf),\n tfWithBots: createSeries('tfWithBots', ConsumerChartDisplay.Colors.totalLine, 'standard.reports.tf.with.bots', UserCohort.tf),\n nonTF: createSeries('nonTF', ConsumerChartDisplay.Colors.nonTFLine,'standard.reports.nontf', UserCohort.nonTF),\n nonTFWithBots: createSeries('nonTFWithBots', ConsumerChartDisplay.Colors.totalLine,'standard.reports.nontf.with.bots', UserCohort.nonTF),\n sitewide: createSeries('sitewide', ConsumerChartDisplay.Colors.totalLine, 'standard.reports.sitewide', UserCohort.all),\n sitewideWithBots: createSeries('sitewideWithBots', ConsumerChartDisplay.Colors.totalLine, 'standard.reports.sitewide.with.bots', UserCohort.all),\n tfRegistered: createSeries('tfRegistered', ConsumerChartDisplay.Colors.registered, 'standard.reports.registered'),\n siteRegistered: createSeries('siteRegistered', ConsumerChartDisplay.Colors.siteRegistered, 'standard.reports.siteregistered'),\n travellingRegistered: createSeries('travellingRegistered', ConsumerChartDisplay.Colors.travellingRegistered, 'standard.reports.travelling'),\n ipRegistered: createSeries('ipRegistered', ConsumerChartDisplay.Colors.ipRegistered, 'standard.reports.instant.profile'),\n tfUsersWithRecipient: createSeries(\"tfUsersWithRecipient\", ConsumerChartDisplay.Colors.registered),\n tfUsersWithRecipientSite: createSeries(\"tfUsersWithRecipientSite\", ConsumerChartDisplay.Colors.siteRegistered),\n tfUsersWithRecipientTravelling: createSeries(\"tfUsersWithRecipientTravelling\", ConsumerChartDisplay.Colors.travellingRegistered),\n tfProfiles: createSeries(\"tfProfiles\", ConsumerChartDisplay.Colors.registered),\n tfProfilesSite: createSeries(\"tfProfilesSite\", ConsumerChartDisplay.Colors.siteRegistered),\n tfProfilesTravelling: createSeries(\"tfProfilesTravelling\", ConsumerChartDisplay.Colors.travellingRegistered)\n };\n }\n\n var parentObj = {\n get: function (childName, type) {\n var mapKey = this._mapKey(child, type);\n return this.children[mapKey];\n },\n _add: function (child, type) {\n var mapKey = this._mapKey(child, type);\n if(this[mapKey]){\n throw new Error(\"Same property is already defined. Try using some other name for child \" + mapKey);\n }\n this[mapKey] = child;\n this.children.push(child);\n return this;\n },\n _initialize: function (name, parent, keySuffix) {\n this.name = name;\n this.key = (parent ? parent.key + \".\" + name : name) + (keySuffix ? \".\" + keySuffix: \"\");\n this.children = [];\n this.parent = parent;\n parent && parent._add(this);\n\n },\n _mapKey: function (child, type) {\n return type ? type + \"_\" + child.name : child.name;\n },\n _setApiPrefix: function (parentURI, uri) {\n this.apiPrefix = (parentURI ? parentURI + '/' : '') + (uri ? uri : this.name);\n }\n };\n\n _.extend(Module.prototype, parentObj);\n _.extend(Tab.prototype, parentObj);\n _.extend(Page.prototype, parentObj);\n _.extend(Callout.prototype, parentObj);\n _.extend(CalloutLabel.prototype, parentObj);\n _.extend(Series.prototype, parentObj);\n\n\n\n function Module(name){\n if (!(this instanceof Module)) return new Module(name);\n this._initialize(name);\n }\n\n function Tab(name, module, displayName, uriPrefix){\n if (!(this instanceof Tab)) return new Tab(name, module, displayName, uriPrefix);\n this._initialize(name, module);\n this._setApiPrefix('', uriPrefix);\n this.displayName = displayName;\n }\n\n function Page(name, tab, displayName, exportTypes, uriPrefix) {\n if (!(this instanceof Page)) return new Page(name, tab, displayName, exportTypes, uriPrefix);\n this._initialize(name, tab);\n this._setApiPrefix(tab.apiPrefix, uriPrefix);\n this.exportUrl = this.apiPrefix + '/export/daily';\n this.stateName = tab.name + '.' + name;\n this.displayName = tab.displayName + \" - \" + displayName;\n this.exportTypes = exportTypes;\n }\n\n function SectionClass() {\n function Section(name, page, chart, callouts, options) {\n if (!(this instanceof Section)) return new Section(name, page, chart, callouts, options);\n this._initialize(name, page);\n\n Callout(this, callouts);\n chart && chart(this);\n this.chart && this.chart.viewDetailSection && (this.viewDetailState = this._viewDetailState(this.chart.viewDetailSection));\n _.extend(this, options);\n }\n\n _.extend(Section.prototype, parentObj, {\n _viewDetailState: function (viewDetailSection) {\n var pageState = viewDetailSection.parent.stateName;\n return pageState + \"({ '#' : '\" + viewDetailSection.name + \"'})\";\n }\n });\n\n return Section;\n }\n\n function Callout(section, callouts) {\n if (!(this instanceof Callout)) return new Callout(section, callouts);\n this._initialize(\"callout\", section);\n\n var that = this;\n that.values = _.map(callouts, function (callout) {\n var obj = {};\n obj.title = !callout.hideTitle && that.key + \".title\";\n obj.summaryKey = callout.summaryKey;\n obj.values = _.map(callout.values, function (value) {\n return value(section)\n });\n return obj;\n });\n }\n\n function ChartClass() {\n function Chart(name, chartType, valueType, viewDetailSection, series) {\n if (!(this instanceof Chart)) return new Chart(name, chartType, valueType, viewDetailSection, series);\n\n var that = this;\n that.name = name;\n that.chartType = chartType;\n that.valueType = valueType;\n that.viewDetailSection = viewDetailSection;\n\n return function (section) {\n that._initialize(\"chart\", section);\n that.label = that.key + \".label\";\n that.tooltip = that.key + \".tooltip\";\n that.yAxisLabel = that.key + \".yAxisLabel\";\n that.series = _.map(series, function (line) {\n return line(section);\n });\n }\n }\n _.extend(Chart.prototype, parentObj);\n\n return Chart;\n }\n\n function CalloutLabel(name, color, calloutSection, overrideLabelProp, userCohort, showPercent) {\n if (!(this instanceof CalloutLabel))\n return new CalloutLabel(name, color, calloutSection, overrideLabelProp, userCohort, showPercent);\n\n var that = this;\n that._initialize(name, calloutSection);\n\n that.attributeName = this.name;\n that.label = overrideLabelProp || this.key + \".label\";\n that.tooltip = this.key + \".tooltip\";\n that.userCohort = userCohort;\n that.color = color.stroke;\n that.colorClass = color.class;\n that.showPercent = showPercent;\n }\n\n function Series(name, color, chartSection, overrideLabelProp, userCohort, filter, stackedTotal) {\n if (!(this instanceof Series))\n return new Series(name, color, chartSection, overrideLabelProp, userCohort, filter, stackedTotal);\n\n var that = this;\n that._initialize(name, chartSection);\n\n that.attributeName = this.name;\n that.label = overrideLabelProp || this.key + \".label\";\n that.userCohort = userCohort;\n that.color = color;\n that.filter = filter;\n that.stackedTotal = stackedTotal;\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .filter('standardReportDefaultNumber', standardReportDefaultNumber)\n .filter('standardReportNumber', standardReportNumber)\n .filter('metricChangeNumber', metricChangeNumber);\n\n // @ngInject\n function standardReportNumber(numberFilter, standardReportDefaultNumberFilter) {\n return function (number) {\n if (number) {\n return numberFilter(number);\n } else {\n return standardReportDefaultNumberFilter(number);\n }\n };\n }\n\n // @ngInject\n function standardReportDefaultNumber() {\n return function (number) {\n return _.isFinite(number) || _.isString(number) ? number : '-.-';\n };\n }\n\n // @ngInject\n function metricChangeNumber(standardReportDefaultNumberFilter) {\n return function (number) {\n if (number) {\n return _.gte(number, 0) ? '+' + number : number;\n } else {\n return standardReportDefaultNumberFilter(number);\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.DashboardDescription')\n .factory('DashboardDescriptionModal',DashboardDescriptionModal)\n .directive('tfcDashboardDescription', tfcDashboardDescription);\n\n // @ngInject\n function DashboardDescriptionModal($uibModal) {\n\n return {\n showModal : showModal\n };\n\n function showModal(selectedBrand, dashboardType, isActivity, isRegion, selectedActivity) {\n var modalInstance = $uibModal.open({\n size: 'sm',\n templateUrl: 'Util/DashboardDescription/DashboardDescriptionModal.tmpl.html',\n controller: function ($scope) {\n var vm = $scope;\n vm.isActivity = isActivity;\n vm.isRegion = isRegion;\n vm.selectedActivity = selectedActivity;\n vm.i18nDashboardType = \"reports.\" + dashboardType + \".subtitle\";\n vm.i18nFilterType = \"reports.\" + dashboardType + ((vm.isActivity) ? \".activity\" : \"\") + ((vm.isRegion) ? \".region\" : \"\") + \".subtitle\";\n vm.selectedBrand = selectedBrand;\n vm.cancel = function () {\n modalInstance.close();\n }\n }\n });\n }\n\n }\n\n function tfcDashboardDescription(DashboardDescriptionModal) {\n return {\n restrict: 'E',\n templateUrl : 'Util/DashboardDescription/DashboardDescription.tmpl.html',\n scope : {\n selectedBrand : '=brand',\n dashboardType: '@type',\n isActivity: \"=\",\n isRegion: \"=\",\n selectedActivity:\"=\"\n },\n transclude: true,\n link : function (scope,element,attrs) {\n var vm = scope;\n var isClickable = angular.isDefined(attrs.isClickable) && vm.$eval(attrs.isClickable) === true ? true : false;\n\n if (isClickable) {\n attrs.$set('ngClick', 'openDashboardDescriptionModal()');\n element.removeAttr('ng-transclude');\n $compile(element)(vm);\n }\n\n vm.openDashboardDescriptionModal = function() {\n DashboardDescriptionModal.showModal(scope.selectedBrand,scope.dashboardType,scope.isActivity,scope.isRegion,scope.selectedActivity);\n }\n }\n };\n }\n\n})();","(function(){\n angular.module('tf.retailer.Util')\n .directive('datePickerWithPresetRange', DatePickerWithPresetRange)\n .controller('DatePickerWithPresetRangeCtrl', DatePickerWithPresetRangeCtrl)\n .factory('DatePickerRange', DatePickerRange);\n\n function DatePickerWithPresetRange(){\n return{\n restrict: 'E',\n scope : {\n dateRange: \"=\",\n onApply: '&',\n keepState: '@'\n },\n templateUrl : 'Util/DatePickerWithPresetRange/DatePickerWithPresetRange.tmpl.html',\n controller : 'DatePickerWithPresetRangeCtrl as vm',\n bindToController: true\n }\n }\n\n\n function DatePickerWithPresetRangeCtrl($state, $stateParams, DateUtil, MIN_DATE,Filters, DatePickerRange,\n AnalyticsHelper) {\n var vm = this;\n\n var filters = Filters.getFilter();\n vm.minStartDate = DateUtil.shortMonthDate(MIN_DATE);\n vm.maxDefaultEndDate = DateUtil.shortMonthDate(filters.maxAllowedDate);\n vm.timezone = filters.timezone;\n vm.open = false;\n\n init();\n\n vm.presetRanges = DatePickerRange.presetRanges();\n\n vm.setDateRange = function (dateRange) {\n vm.dateRange.startDate = DateUtil.shortMonthDate(dateRange.dateStart());\n vm.dateRange.endDate = DateUtil.shortMonthDate(dateRange.dateEnd());\n };\n\n vm.onToggle = function(open){\n if(!open && (_.eq(vm.dateRange.startDate, $stateParams.startDate)\n && _.eq(vm.dateRange.endDate, $stateParams.endDate))){\n init();\n }\n };\n\n vm.updateDateRange = function(){\n vm.titleDateRange = angular.copy(vm.dateRange);\n AnalyticsHelper.sendDateRangeChangeEvent(vm.dateRange, vm.presetRanges);\n if(!vm.keepState) {\n $state.go('.', {\n startDate: DateUtil.formatToYearMonthDay(vm.dateRange.startDate),\n endDate: DateUtil.formatToYearMonthDay(vm.dateRange.endDate), detailLevel: null\n }); // Unset detailLevel Case 76712\n } else {\n vm.onApply();\n vm.open = false;\n }\n };\n\n function init() {\n vm.dateRange.startDate = DateUtil.shortMonthDate(vm.dateRange.startDate);\n vm.dateRange.endDate = DateUtil.shortMonthDate(vm.dateRange.endDate);\n vm.titleDateRange = angular.copy(vm.dateRange); // Need to keep a deep copy to display title date range & update on only apply()\n }\n }\n\n function DatePickerRange(Filters, MIN_DATE) {\n\n function createDateRanges() {\n var minStartDate = moment(MIN_DATE);\n\n var presetRanges = function () {\n var filters = Filters.getFilter();\n return [\n {\n text: 'Month to Date',\n dateStart: function() { return moment.max(minStartDate, moment(filters.maxAllowedDate).startOf('month')) },\n dateEnd: function() { return moment(filters.maxAllowedDate) }\n },{\n text: 'Year to Date',\n dateStart: function() { return moment.max(minStartDate, moment(filters.maxAllowedDate).startOf('year')) },\n dateEnd: function() { return moment(filters.maxAllowedDate) }\n },{\n text: 'Last Week',\n dateStart: function() { return moment.max(minStartDate,\n moment(filters.maxAllowedDate).subtract(7, 'days').isoWeekday(0)) },\n dateEnd: function() { return moment(filters.maxAllowedDate).subtract(7, 'days').isoWeekday(6) }\n }, {\n text: 'Last Month',\n dateStart: function() { return moment.max(minStartDate,\n moment(filters.maxAllowedDate).subtract(1, 'month').startOf('month')) },\n dateEnd: function() { return moment(filters.maxAllowedDate).subtract(1, 'month').endOf('month') }\n }, {\n text: 'Last Year',\n dateStart: function() { return moment.max(minStartDate, moment(filters.maxAllowedDate).subtract(1, 'year')) },\n dateEnd: function() { return moment(filters.maxAllowedDate) }\n }\n ];\n };\n\n return {\n presetRanges: presetRanges,\n getRange : function (rangeName) {\n return _.find(presetRanges, { text: rangeName });\n }\n }\n }\n\n return createDateRanges();\n }\n\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('Activity', ActivityClass);\n\n function ActivityClass(Region) {\n\n var selectedRegion;\n function Activity(data) {\n if (!(this instanceof Activity)) return new Activity(data);\n this.regions = [];\n this.setData(data);\n }\n\n _.extend(Activity.prototype, {\n 'constructor': Activity,\n setData : function (data) {\n var that = this;\n that.label = data.transaction;\n that.regions = _(_.map(data.region, function (region) {\n return Region(region);\n })).sortBy('labelDescription').value();\n },\n setSelectedRegion: function (region) {\n if(region){\n selectedRegion = _.find(this.regions, {label: region});\n }else{\n selectedRegion = this.hasMultipleRegion() ? this.regions[0] : null;\n }\n },\n getLabel: function () {\n return this.label;\n },\n getRegions: function () {\n return this.regions;\n },\n getSelectedRegion: function () {\n return selectedRegion;\n },\n hasMultipleRegion: function () {\n return this.regions && this.regions.length > 2;\n }\n });\n\n return Activity;\n }\n \n \n})(); ","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('activityRegion', ActivityRegionClass);\n\n function ActivityRegionClass(Activity, BrandReports, Enums) {\n\n var activities = [];\n var selectedActivity;\n\n return activityRegion;\n\n function getSelected() {\n return selectedActivity;\n }\n\n function defaultLabel(){\n return multipleActivity() ? Enums.TransactionFilterType.Direct : activities[0].label;\n }\n\n function setSelected(label) {\n selectedActivity = _.find(activities, {label: label});\n return this;\n }\n\n function getActivities() {\n return activities;\n }\n\n function multipleActivity() {\n return activities && activities.length > 1;\n }\n\n function activityRegion(fillFunc, transaction, region) {\n return fillFunc().then(function(filters){\n activities = _.map(filters, function (filter) {\n return Activity(filter);\n });\n if(activities.length) {\n setSelected(transaction ? transaction : defaultLabel());\n selectedActivity.setSelectedRegion(region);\n } else {\n selectedActivity = null;\n }\n return {\n getSelected: getSelected,\n setSelected: setSelected,\n getActivities: getActivities,\n hasMultipleActivity: multipleActivity\n };\n });\n }\n }\n\n\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('Filter', FilterClass);\n\n function FilterClass(translateFilter) {\n\n return {\n getFilterSummaryText: getFilterSummaryText\n };\n\n\n function getFilterSummaryText(dashboard, params){\n var volumeText = '';\n volumeText += translateFilter('reports.'+ dashboard +'.summaryText', params);\n volumeText += params.region && params.region.length ? translateFilter('reports.'+ dashboard +'.selected.region',\n {'region': (params.region === 'All'? translateFilter('reports.allRegions') : params.region)}) : '';\n volumeText += params.timeFrame && params.timeFrame.length ? translateFilter('reports.'+ dashboard +'.selected.timeFrame',\n {'timeFrame': params.timeFrame.toLowerCase()}) : '';\n return _.unescape(volumeText);\n }\n }\n\n\n})();","(function () {\n 'use strict';\n\n angular.module('tf.retailer.Util')\n .factory('Region', RegionClass);\n\n function RegionClass() {\n\n function Region(data) {\n if (!(this instanceof Region)) return new Region(data);\n this.setData(data);\n }\n\n _.extend(Region.prototype, {\n 'constructor': Region,\n setData : function (data) {\n var that = this;\n that.label = data.regionCode;\n that.labelDescription = data.regionDescription;\n },\n getLabel: function () {\n return this.label;\n }\n });\n\n return Region;\n }\n\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tf.retailer.Util')\n .directive('tfcFilterPanel', tfcFilterPanel)\n .controller('FilterPanelCtrl', FilterPanelCtrl);\n\n function FilterPanelCtrl(){\n var vm = this;\n this.isCollapsed = false;\n\n vm.toggleDiv = function(){\n var display = this.isCollapsed ? 'block' : 'none';\n this.isCollapsed = !this.isCollapsed;\n angular.element(document.getElementsByClassName('box-data')).css({'display':display});\n };\n }\n\n function tfcFilterPanel($timeout){\n return {\n restrict: 'E',\n scope: {},\n templateUrl : 'Util/FilterPanel/FilterPanel.tmpl.html',\n transclude: true,\n bindToController : true,\n controller : 'FilterPanelCtrl as vm',\n link: function (scope, elem) {\n scope.isFilterPanelExist = true;\n $timeout(function(){\n scope.isFilterPanelExist = elem[0].querySelector('.filter') !== null;\n },0,false);\n }\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .factory('AttributeFilter', AttributeFilterClass);\n\n function AttributeFilterClass(BaseFilter) {\n\n function AttributeFilter(attributes, attributeParam, hierarchyFilter) {\n if (!(this instanceof AttributeFilter)) return new AttributeFilter(attributes, attributeParam, hierarchyFilter);\n BaseFilter.call(this, 'Attribute Filter');\n\n setData.call(this,attributes, attributeParam, hierarchyFilter);\n }\n\n AttributeFilter.prototype = _.create(BaseFilter.prototype, {\n getOptionString: getOptionString,\n isVisible: isVisible\n });\n\n return AttributeFilter;\n\n function setData(attributes, attributeParam, hierarchyFilter) {\n var data = _(attributes).map(function (o) {\n return {\n attribute: o.key,\n display: o.value\n }\n }).value();\n\n this.hierarchyFilter = hierarchyFilter;\n\n BaseFilter.prototype.setData.call(this,data);\n onLoad.call(this, attributeParam);\n }\n\n function getOptionString() {\n return 'attribute as attribute.display for attribute in vm.data';\n }\n\n function isVisible() {\n return Boolean(this.hierarchyFilter.getSelectedItem());\n }\n\n function onLoad(attributeParam) {\n var data = this.getData();\n var selectedItem = attributeParam == null ? data && data[0] : _.find(data, {\n attribute: attributeParam\n });\n this.setSelectedItem(selectedItem);\n }\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .factory('AttributeValueFilter', AttributeValueFilterClass);\n\n function AttributeValueFilterClass(BaseFilter) {\n\n function AttributeValueFilter(attributeValues, attributeValueParam, attributeFilter) {\n if (!(this instanceof AttributeValueFilter)) return new AttributeValueFilter(attributeValues, attributeValueParam, attributeFilter);\n BaseFilter.call(this, 'Attribute Value Filter');\n\n setData.call(this,attributeValues, attributeValueParam, attributeFilter);\n }\n\n AttributeValueFilter.prototype = _.create(BaseFilter.prototype, {\n getOptionString: getOptionString,\n isVisible: isVisible\n });\n\n return AttributeValueFilter;\n\n function setData(attributeValues, attributeValue, attributeFilter) {\n var data = _(attributeValues).map(function (o) {\n return {\n attributeValue: o.key,\n display: o.value\n }\n }).value();\n\n this.attributeFilter = attributeFilter;\n\n BaseFilter.prototype.setData.call(this,data);\n onLoad.call(this, attributeValue);\n }\n\n function getOptionString() {\n return 'attributeValue as attributeValue.display for attributeValue in vm.data';\n }\n\n function isVisible() {\n return Boolean(this.attributeFilter.getSelectedItem());\n }\n\n function onLoad(attributeValueParam) {\n var data = this.getData();\n var selectedItem = attributeValueParam == null ? data && data[0] : _.find(data, {\n attributeValue: attributeValueParam\n });\n this.setSelectedItem(selectedItem);\n }\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .controller('FilterCtrl', filterCtrl);\n\n function filterCtrl(GaUtil) {\n var vm = this;\n var filter = vm.filter;\n\n filter.setBrandKey(vm.selectedBrand.key);\n vm.data = filter.getData();\n\n vm.optionString = filter.getOptionString();\n vm.onChange = function () {\n filter.setSelectedItem(vm.selectedItem);\n var evt = filter.getEventDetails();\n GaUtil.sendGaEvent(evt.eventCategory, evt.eventAction, evt.eventLabel);\n vm.reload();\n };\n\n vm.isVisible = filter.isVisible();\n\n vm.isDisabled = filter.isDisabled();\n\n vm.selectedItem = filter.getSelectedItem();\n }\n\n}());\n\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .directive('tfcFilter', tfcFilter);\n\n function tfcFilter() {\n return {\n restrict: 'E',\n templateUrl: 'Util/Filters/Filter.tmpl.html',\n controller: 'FilterCtrl as vm',\n bindToController: true,\n scope: {\n filter: '=',\n reload: '&',\n selectedBrand: '='\n }\n };\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .factory('BaseFilter', FilterClass);\n\n function FilterClass() {\n\n function Filter(filterName) {\n if (!(this instanceof Filter)) return new Filter(filterName);\n\n this._selectedItem = null;\n this._brandKey = null;\n this._filterName = filterName;\n this._data = [];\n }\n\n _.extend(Filter.prototype, {\n getData: function () {\n return this._data;\n },\n setData: function (data) {\n this._data = data;\n },\n getOptionString: unimplemented('getOptionString'),\n isDisabled: function () {\n return this._data && this._data.length === 0;\n },\n isVisible: unimplemented('isVisible'),\n setSelectedItem: function (selected) {\n this._selectedItem = selected;\n },\n getSelectedItem: function () {\n return this._selectedItem;\n },\n getEventDetails: function () {\n return {\n eventCategory: this._brandKey,\n eventAction: this._filterName,\n eventLabel: this._selectedItem && this._selectedItem.display\n }\n },\n setBrandKey : function (brandKey) {\n this._brandKey = brandKey\n },\n getSelectedItemAttribute: function (attribute) {\n return this._selectedItem && this._selectedItem[attribute];\n }\n });\n\n return Filter;\n\n function unimplemented(method) {\n return function () {\n console.error(new Error('#' + method + ' not implemented for ' + this._filterName));\n };\n }\n\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Filter')\n .factory('HierarchyFilter', HierarchyFilterClass);\n\n function HierarchyFilterClass(BaseFilter) {\n\n function HierarchyFilter(attributeHierarchies, hierarchyParam, departmentParam, categoryParam) {\n if (!(this instanceof HierarchyFilter)) return new HierarchyFilter(attributeHierarchies, hierarchyParam, departmentParam, categoryParam);\n\n BaseFilter.call(this, 'Category Filter');\n setData.call(this,attributeHierarchies, hierarchyParam, departmentParam, categoryParam);\n }\n\n HierarchyFilter.prototype = _.create(BaseFilter.prototype, {\n getOptionString: getOptionString,\n isVisible: isVisible\n });\n\n return HierarchyFilter;\n\n function setData(attributeHierarchies, hierarchyParam, departmentParam, categoryParam) {\n var data = _(attributeHierarchies).map(function (o) {\n return {\n department: o.department,\n category: o.category,\n display: o.category ? o.department + \" \" + o.category : o.department\n }\n }).value();\n\n BaseFilter.prototype.setData.call(this,data);\n onLoad.call(this, departmentParam, categoryParam);\n }\n\n function getOptionString() {\n return 'hierarchy as hierarchy.display for hierarchy in vm.data';\n }\n\n function isVisible() {\n return true;\n }\n\n function onLoad(departmentParam, categoryParam) {\n var data = this.getData();\n var selectedItem;\n\n selectedItem = departmentParam == null && categoryParam == null ? data[0] : _.find(data, {\n department: departmentParam,\n category: categoryParam\n });\n\n this.setSelectedItem(selectedItem);\n }\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.Pagination')\n .directive('tfcPagination', tfcPagination);\n\n function tfcPagination(){\n return {\n restrict: 'E',\n templateUrl : 'Util/Pagination/Pagination.tmpl.html',\n scope:{\n filteredCount: \"=\",\n pageSize : \"=\",\n currentPage: \"=\",\n paginationFunc: \"&\",\n maxSize: \"=\"\n }\n }\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StoreSelection')\n .controller('StoreSelectionCtrl', StoreSelectionCtrl)\n .directive('tfcStoreSelection', tfcStoreSelection);\n\n function StoreSelectionCtrl($state, $stateParams, Auth, AnalyticsHelper) {\n var vm = this;\n\n vm.showSearch = (vm.userStores.length > 10) && Auth.getUser() && Auth.getUser().isInternal;\n\n vm.onToggle = function(open) {\n if(!open) {\n var storeKeys = fetchAndUpdateSelectedStores();\n AnalyticsHelper.sendStoreSelectionChangeEvent($stateParams.storeKey, storeKeys);\n $state.go('.', {storeKey: storeKeys}, {inherit: false});\n }\n };\n\n vm.onSelectionChange = function() {\n setShowSeparator();\n };\n\n // Initialise\n fetchAndUpdateSelectedStores();\n\n function fetchAndUpdateSelectedStores(){\n var selectedStores = getSelectedStores();\n\n if(_.isEmpty(selectedStores)){\n selectedStores = getDefaultStores();\n }\n\n var storeKeys = _.map(selectedStores,'storeKey');\n\n updateModel(storeKeys);\n setStoreKeyDisplay(selectedStores);\n setShowSeparator();\n\n return storeKeys;\n }\n\n function getSelectedStores() {\n return _.filter(vm.userStores, {isSelected: true});\n }\n\n function setShowSeparator() {\n vm.showSeparator = !_.every(vm.userStores, {isSelected: _.head(vm.userStores).isSelected})\n }\n\n function getDefaultStores(){\n var storeKeyParams = $stateParams.storeKey ?\n _.isArray($stateParams.storeKey) ? $stateParams.storeKey: [$stateParams.storeKey]: [];\n\n return (storeKeyParams.length) ? _.filter(vm.userStores, function (store) {\n return _.includes(storeKeyParams, store.storeKey);\n }) : vm.userStores.length > 10 ? [_.head(vm.userStores)] : vm.userStores;\n }\n\n function updateModel(selectedStoreKeys){\n _.forEach(vm.userStores,function(store) {\n store.isSelected = _.includes(selectedStoreKeys, store.storeKey);\n });\n }\n\n function setStoreKeyDisplay(selectedStores) {\n\n if(selectedStores.length > 1){\n vm.storeKeyDisplay = _.head(selectedStores).storeName + \" + \" + _.tail(selectedStores).length;\n } else if(selectedStores.length === 1) {\n vm.storeKeyDisplay = _.head(selectedStores).storeName;\n }\n }\n\n }\n\n function tfcStoreSelection() {\n return {\n restrict: 'E',\n bindToController : true,\n controller : 'StoreSelectionCtrl as vm',\n templateUrl : 'Util/StoreSelection/StoreSelection.tmpl.html',\n scope: {\n userStores: '='\n }\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.UIGrid')\n .controller('UIGridCtrl', UIGridCtrl)\n .constant('DirectionEnum', {\n 'forward': 'forward',\n 'backward': 'backward'\n });\n\n function UIGridCtrl($q, $scope, $timeout, DirectionEnum) {\n var firstPage = 0;\n var lastPage = 0;\n var nextPage = {};\n var storedGridData = {};\n var storedPageLength = -1;\n var newData = [];\n var lastIdentifier = {};\n\n var vm = this;\n vm.gridOptions = {\n enableSorting: false,\n infiniteScrollRowsFromEnd: vm.options.infiniteScrollRowsFromEnd,\n infiniteScrollUp: false,\n infiniteScrollDown: true, // By default scroll will be down\n data: getFirstData(),\n onRegisterApi: function(gridApi){\n gridApi.infiniteScroll.on.needLoadMoreData($scope, getGridData.bind(null, DirectionEnum.forward));\n gridApi.infiniteScroll.on.needLoadMoreDataTop($scope, getGridData.bind(null, DirectionEnum.backward));\n vm.gridApi = gridApi;\n },\n columnDefs: vm.options.columnDefs\n };\n\n function getFirstData() {\n vm.getDataFn().then(function (data) {\n nextPage = data.nextPage;\n storedGridData[++storedPageLength] = data;\n var formatGridData = vm.getFormattedData({params:data.values});\n _.assign(lastIdentifier, vm.getLastIdentifier({data: formatGridData, index: formatGridData.length - 1}));\n vm.gridOptions.data = formatGridData;\n });\n }\n\n function getGridData(scrollDirection){\n return $q.when(getPageData(scrollDirection)).then(function(newDataResponse) {\n nextPage = newDataResponse.nextPage;\n newData = vm.getFormattedData({params:newDataResponse.values});\n _.assign(lastIdentifier, vm.getLastIdentifier({data: newData, index: newData.length - 1}));\n vm.gridApi.infiniteScroll.saveScrollPercentage();\n vm.gridOptions.data = (scrollDirection === DirectionEnum.forward) ? vm.gridOptions.data.concat(newData) : newData.concat(vm.gridOptions.data);\n return vm.gridApi.infiniteScroll.dataLoaded(firstPage > 0, nextPage != null).then(function () {\n checkDataLength((scrollDirection === DirectionEnum.forward) ? DirectionEnum.backward : DirectionEnum.forward);\n });\n });\n }\n\n function getPageData(scrollDirection) {\n var page = (scrollDirection === DirectionEnum.forward) ? ++lastPage : --firstPage;\n //fetch from temp grid if data is available\n if (storedPageLength >= page) {\n return $q.when(storedGridData[page]);\n }\n else {\n return vm.getDataFn({lastIdentifier: lastIdentifier}).then(function (value) {\n storedGridData[++storedPageLength] = value;\n return value;\n }).catch(function (error) {\n return vm.gridApi.infiniteScroll.dataLoaded();\n });\n }\n }\n\n function checkDataLength(discardDirection) {\n // work out whether we need to discard a page, if so discard from the direction passed in\n if( lastPage - firstPage > 1 ){\n // we want to remove a page\n vm.gridApi.infiniteScroll.saveScrollPercentage();\n if( discardDirection === DirectionEnum.backward ){\n vm.gridOptions.data = vm.gridOptions.data.slice(vm.options.pageSize);\n firstPage++;\n $timeout(function() {\n // wait for grid to ingest data changes\n vm.gridApi.infiniteScroll.dataRemovedTop(firstPage > 0, nextPage != null);\n });\n }else {\n vm.gridOptions.data = vm.gridOptions.data.slice(0, vm.options.pageSize * 2);\n lastPage--;\n _.assign(lastIdentifier, vm.getLastIdentifier({data: newData, index: newData.length - 1}));\n $timeout(function() {\n // wait for grid to ingest data changes\n vm.gridApi.infiniteScroll.dataRemovedBottom(firstPage > 0, nextPage != null);\n });\n }\n }\n }\n }\n\n}());\n\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.UIGrid')\n .directive('tfcUiGrid', tfcUIGrid);\n\n function tfcUIGrid() {\n return {\n restrict: 'E',\n templateUrl: 'Util/UIGrid/UIGridInfiniteScroll.tmpl.html',\n controller: 'UIGridCtrl as vm',\n bindToController: true,\n scope: {\n options: '=',\n getDataFn: '&',\n getFormattedData: '&',\n getLastIdentifier: '&'\n }\n };\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ComparisonChartTitleCtrl', ComparisonChartTitleCtrl);\n\n // @ngInject\n function ComparisonChartTitleCtrl() {\n var vm = this;\n\n vm.updateLegendCheckbox = function() {\n vm.checkBoxes = _(vm.options.series)\n .map(function (s) {\n return _.pick(s, ['name', 'visible', 'className']);\n }).uniqBy('name').value();\n\n vm.legendGroups = _(vm.options.series)\n .groupBy(function (series) {\n return series.custom.groupIndex;\n })\n .map(function (values, key) {\n return {\n name: vm.options.groupNames && vm.options.groupNames[key],\n colorClasses: _.map(values, 'className'),\n marker: key > 0\n }\n })\n .value();\n };\n\n vm.onSeriesCheckboxClick = function (key) {\n var isVisible = _.find(vm.options.series, {name: key}).visible;\n _(vm.options.series).filter({name: key}).forEach(function (s) {\n s.visible = !isVisible;\n });\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .directive('comparisonChartTitle', function () {\n return {\n restrict: 'E',\n controller : 'ComparisonChartTitleCtrl as vm',\n bindToController: true,\n templateUrl : 'StandardReports/Comparisons/ComparisonChartTitle/ComparisonChartTitle.tmpl.html',\n scope: {\n options: '='\n },\n link: function (scope) {\n scope.$watch('vm.options', function(newVal) {\n if (newVal) {\n scope.vm.updateLegendCheckbox();\n }\n }, true);\n\n }\n };\n });\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ComparisonsDateRangeCtrl', ComparisonsDateRangeCtrl);\n\n // @ngInject\n function ComparisonsDateRangeCtrl($q, $state, $stateParams, storeKeys, filters, StandardReports, ConsumerChart,\n AreaLineChartConfig, DateUtil, Comparisons, MIN_DATE, PageConfig, Filters) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.comparisonTab = $stateParams.comparisonTab || 0;\n vm.metrics = Comparisons.metrics(PageConfig.dateRangeComparison);\n vm.selectedMetric = _.find(vm.metrics, function (metric) {\n return _.eq(metric.section.name, $stateParams.comparisonMetric);\n }) || _.head(vm.metrics);\n\n vm.dateRange = Comparisons.dateRanges(filters.queryParams);\n vm.minStartDate = DateUtil.shortMonthDate(MIN_DATE);\n var groupNames = _.map(vm.dateRange, 'name');\n\n var optionsFunc = Comparisons.options(detailLevel, groupNames, Comparisons.dateRangeCompareTooltipHeader, true);\n\n vm.onDateChange = function() {\n vm.maxStartDate = Comparisons.maxComparisonStartDate(vm.dateRange[0].value);\n\n var diff = moment(vm.dateRange[0].value.endDate).diff(moment(vm.dateRange[0].value.startDate), 'days');\n vm.dateRange[1].value.startDate = DateUtil.shortMonthDate(Math.min(moment(vm.dateRange[1].value.startDate),\n moment(vm.maxStartDate)));\n vm.dateRange[1].value.endDate = DateUtil.shortMonthDate(moment(vm.dateRange[1].value.startDate).add(diff, 'days'));\n };\n\n vm.reload = function() {\n var formattedDateRanges = _.map(vm.dateRange, function (range) {\n return Comparisons.formatDateRange(range.value);\n });\n\n $state.go('.', {metric: vm.selectedMetric.section.name,\n startDate: formattedDateRanges[0].startDate, endDate: formattedDateRanges[0].endDate,\n comparisonStartDate: formattedDateRanges[1].startDate, comparisonEndDate: formattedDateRanges[1].endDate,\n comparisonTab: vm.comparisonTab });\n };\n\n vm.displayComparison = function () {\n updateFilter(vm.dateRange[1], vm.selectedMetric.section.name, vm.comparisonTab);\n\n vm.chartOptions = AreaLineChartConfig.getChartOptions(optionsFunc(vm.selectedMetric.section, vm.chartOptions));\n };\n\n vm.getData = function (selectedMetric) {\n var comparisonResponses = _.map(vm.dateRange, function (range) {\n var api = selectedMetric.section.api;\n return StandardReports.getConsumerData(api, detailLevel,\n _.merge({}, queryFilters, Comparisons.formatDateRange(range.value)));\n });\n\n return $q.all(comparisonResponses).then( function (responses) {\n return _.map(responses, function (response) {\n var data = selectedMetric.transformFunc(response);\n var formattedData = ConsumerChart.getFormattedData(selectedMetric.section.chart, data.dateMetrics);\n return {\n lineData: formattedData,\n summary: data.summary\n }\n })\n });\n };\n\n vm.dataOptions = function (formattedData) {\n return AreaLineChartConfig.getDataOptions(_.map(formattedData, 'lineData'),\n optionsFunc(vm.selectedMetric.section, vm.chartOptions));\n };\n\n vm.setParentValues = function (formattedData) {\n vm.summaryValues = Comparisons.getSummaryValues(_.map(formattedData, 'summary'),\n vm.selectedMetric.section, vm.dateRange);\n };\n\n vm.onTabChange = function(selectedTabIndex) {\n vm.comparisonTab = selectedTabIndex;\n updateFilter(vm.dateRange[1], vm.selectedMetric.section.name, vm.comparisonTab);\n };\n\n function defaultDataFunc() {\n return $q.resolve(vm.dateRange);\n }\n\n $q.all(Comparisons.allMetricSummary(vm.metrics, defaultDataFunc, vm.dateRange)).then(function (allMetricSections) {\n vm.allMetricSections = allMetricSections;\n\n var allMetrics = Comparisons.allMetricSummary(vm.metrics, vm.getData, vm.dateRange);\n\n $q.all(allMetrics).then(function (allMetricSections) {\n vm.allMetricSections = allMetricSections;\n });\n });\n\n\n function updateFilter(comparisonDateRange, selectedMetric, comparisonTab) {\n var filters = Filters.getFilter();\n\n filters.dashboardSpecificParams = {\n comparisonStartDate: DateUtil.formatToYearMonthDay(comparisonDateRange.value.startDate),\n comparisonEndDate: DateUtil.formatToYearMonthDay(comparisonDateRange.value.endDate),\n comparisonMetric: selectedMetric,\n comparisonTab: comparisonTab\n };\n\n Filters.setFilter(filters);\n }\n\n vm.onDateChange();\n vm.displayComparison();\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ComparisonsHierarchyCtrl', ComparisonsHierarchyCtrl);\n\n // @ngInject\n function ComparisonsHierarchyCtrl($q, $state, $stateParams, storeKeys, filters, StandardReports, ConsumerChart,\n AreaLineChartConfig, Comparisons, Filters, PageConfig) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.comparisonTab = $stateParams.comparisonTab || 0;\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.metrics = Comparisons.metrics(PageConfig.hierarchyComparison);\n vm.selectedMetric = _.find(vm.metrics, function (metric) {\n return _.eq(metric.section.name, $stateParams.comparisonMetric);\n }) || _.head(vm.metrics);\n\n vm.hierarchies = Comparisons.hierarchies(filters.queryParams);\n vm.filter = Filters.getFilter();\n vm.comparisonFilter = Filters.getFilter();\n vm.comparisonFilter.addressable = vm.hierarchies[1].value.addressable;\n\n var groupNames = _.map(vm.hierarchies, function (hierarchy) {\n return hierarchy.name();\n });\n\n var optionsFunc = Comparisons.options(detailLevel, groupNames, Comparisons.hierarchyCompareTooltipHeader(groupNames));\n\n vm.reload = function() {\n var formattedDateRange = Comparisons.formatDateRange(vm.dateRange);\n\n $state.go('.', _.merge(formattedDateRange, { metric: vm.selectedMetric.section.name,\n department: vm.hierarchies[0].value.department, category: vm.hierarchies[0].value.category,\n classification: vm.hierarchies[0].value.classification, addressable: vm.filter.addressable,\n comparisonDepartment: vm.hierarchies[1].value.department,\n comparisonCategory: vm.hierarchies[1].value.category,\n comparisonClassification: vm.hierarchies[1].value.classification,\n comparisonAddressable: vm.comparisonFilter.addressable || false,\n comparisonTab: vm.comparisonTab }));\n };\n\n vm.displayComparison = function () {\n updateFilter(vm.hierarchies[1], vm.selectedMetric.section.name, vm.comparisonTab);\n\n vm.chartOptions = AreaLineChartConfig.getChartOptions(optionsFunc(vm.selectedMetric.section, vm.chartOptions));\n };\n\n vm.getData = function(selectedMetric) {\n var comparisonResponses = _.map(vm.hierarchies, function (hierarchy) {\n var api = selectedMetric.section.api;\n return StandardReports.getConsumerData(api, detailLevel,\n _.merge({}, queryFilters, Comparisons.formatDateRange(vm.dateRange), hierarchy.value));\n });\n\n return $q.all(comparisonResponses).then( function (responses) {\n return _.map(responses, function (response) {\n var data = selectedMetric.transformFunc(response);\n var formattedData = ConsumerChart.getFormattedData(selectedMetric.section.chart, data.dateMetrics);\n return {\n lineData: formattedData,\n summary: data.summary\n }\n });\n });\n };\n\n vm.dataOptions = function (formattedData) {\n return AreaLineChartConfig.getDataOptions(_.map(formattedData, 'lineData'),\n optionsFunc(vm.selectedMetric.section, vm.chartOptions));\n };\n\n vm.setParentValues = function (formattedData) {\n vm.summaryValues = Comparisons.getSummaryValues(_.map(formattedData, 'summary'),\n vm.selectedMetric.section, vm.hierarchies);\n };\n\n vm.onTabChange = function(selectedTabIndex) {\n vm.comparisonTab = selectedTabIndex;\n updateFilter(vm.hierarchies[1], vm.selectedMetric.section.name, vm.comparisonTab);\n };\n\n function defaultDataFunc() {\n return $q.resolve(vm.hierarchies);\n }\n\n $q.all(Comparisons.allMetricSummary(vm.metrics, defaultDataFunc, vm.hierarchies)).then(function (allMetricSections) {\n vm.allMetricSections = allMetricSections;\n\n var allMetrics = Comparisons.allMetricSummary(vm.metrics, vm.getData, vm.hierarchies);\n\n $q.all(allMetrics).then(function (allMetricSections) {\n vm.allMetricSections = allMetricSections;\n });\n });\n\n function updateFilter(comparisonHierarchy, selectedMetric, comparisonTab) {\n var filters = Filters.getFilter();\n\n filters.dashboardSpecificParams = {\n comparisonDepartment: comparisonHierarchy.value.department,\n comparisonCategory: comparisonHierarchy.value.category,\n comparisonClassification: comparisonHierarchy.value.classification,\n comparisonAddressable: comparisonHierarchy.value.addressable || false,\n comparisonMetric: selectedMetric,\n comparisonTab: comparisonTab\n };\n\n Filters.setFilter(filters);\n }\n\n vm.displayComparison();\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('LegendGroupCtrl', LegendGroupCtrl);\n\n // @ngInject\n function LegendGroupCtrl() {\n var vm = this;\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .directive('legendGroup', function () {\n return {\n restrict: 'E',\n controller : 'LegendGroupCtrl as vm',\n bindToController: true,\n templateUrl : 'StandardReports/HighCharts/LegendGroup/LegendGroup.tmpl.html',\n scope: {\n legendGroups: '='\n }\n };\n });\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ActiveUsersCtrl', ActiveUsersCtrl);\n\n // @ngInject\n function ActiveUsersCtrl(storeKeys, filters, DateUtil, ConsumerChart, StandardReports,\n Callout, ShopperReports, SectionConfig, UserCohort, ConsumerChartDisplay) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches([\n ConsumerChartDisplay.Colors.ipRegistered.stroke,\n ConsumerChartDisplay.Colors.travellingRegistered.stroke,\n ConsumerChartDisplay.Colors.siteRegistered.stroke\n ]);\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.mauSection = Callout.labelValueConfig(SectionConfig.mau);\n vm.monthlyActiveUsersChartData = function(rawData) {\n return rawData;\n };\n\n vm.mauTFSection = Callout.tfUsersConfig(SectionConfig.mauTF);\n vm.tfMonthlyActiveUsersChartData = function(rawData) {\n return rawData;\n };\n\n vm.dauSection = Callout.labelValueConfig(SectionConfig.dau);\n vm.dailyActiveUsersChartData = function(rawData) {\n return rawData;\n };\n\n vm.dauTFSection = Callout.tfUsersConfig(SectionConfig.dauTF);\n vm.tfDailyActiveUsersChartData = function(rawData) {\n var allTimeTFUsers = ConsumerChart.getChartData(rawData.dateMetrics, {userCohort: 'TrueFitAllTime', isBot: false});\n var tfUsersTillEndDate = _.last(allTimeTFUsers);\n vm.alltimeTFUsers = tfUsersTillEndDate && tfUsersTillEndDate.value;\n\n return rawData;\n\n };\n\n vm.newUsersSection = Callout.tfUsersConfig(SectionConfig.newUsers);\n vm.newUsersChartData = function(rawData) {\n vm.newTFUsers = StandardReports.findInSummary(rawData.summary, 'TotalNewUserCounts', UserCohort.newTFUsers.value);\n return rawData;\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('UserLine', UserLineClass);\n\n function UserLineClass() {\n\n function UserLine(lineType, label, lineName){\n if (!(this instanceof UserLine)) return new UserLine(lineType, label, lineName);\n\n this.lineType = lineType;\n this.label = label;\n this.lineName = lineName;\n }\n\n _.extend(UserLine.prototype, {\n getLineType: function () {\n return this.lineType;\n },\n getLabel: function () {\n return this.label;\n },\n getLineName: function () {\n return this.lineName;\n }\n });\n\n return UserLine;\n\n }\n\n}());","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ShopperAdoption', ShopperAdoptionClass);\n\n function ShopperAdoptionClass() {\n\n function ShopperAdoption(metric, chartTitleTooltip, section, formatDataFn) {\n if (!(this instanceof ShopperAdoption))\n return new ShopperAdoption(metric, chartTitleTooltip, section, formatDataFn);\n\n this.metric = metric;\n this.chartTitleTooltip = chartTitleTooltip;\n this.section = section;\n this.formatDataFn = formatDataFn;\n }\n\n _.extend(ShopperAdoption.prototype, {\n getMetric: function () {\n return this.metric;\n },\n getChartTitleTooltip: function () {\n return this.chartTitleTooltip;\n },\n getSection: function () {\n return this.section;\n },\n getFormatDataFn: function () {\n return this.formatDataFn;\n }\n });\n\n return ShopperAdoption;\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ShopperAdoptionCtrl', ShopperAdoptionCtrl);\n\n // @ngInject\n function ShopperAdoptionCtrl(storeKeys, filters, DateUtil, ConsumerChart, ShopperReports, StandardReports, Callout,\n ShopperAdoption, ShopperAdoptionCallout, SectionConfig, UserCohort) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.shopperAdoptionCharts = [\n SectionConfig.adoption,\n SectionConfig.tfReg,\n SectionConfig.tfSessionsAdoption,\n SectionConfig.tfOrdersAdoption,\n SectionConfig.tfRevenue\n ].map(function (section) {\n return {\n sectionConfig: Callout.labelValueConfig(section),\n formatDataFn: function (rawData) {\n vm[section.name] = StandardReports.findInSummary(rawData.summary, 'TFPercent', UserCohort.tf.value);\n return rawData;\n }\n }\n });\n\n vm.adoptionCallouts = [\n ShopperAdoptionCallout(\n 'TFAdoptionCallout.tmpl.html',\n SectionConfig.adoption.chart.label,\n SectionConfig.adoption.name\n ),\n ShopperAdoptionCallout(\n 'TFSessionsCallout.tmpl.html',\n SectionConfig.tfSessionsAdoption.chart.label,\n SectionConfig.tfSessionsAdoption.name\n ),\n ShopperAdoptionCallout(\n 'TFRevenueCallout.tmpl.html',\n SectionConfig.tfRevenue.chart.label,\n SectionConfig.tfRevenue.name\n )\n ];\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ShopperAdoptionCallout', ShopperAdoptionCalloutClass);\n\n function ShopperAdoptionCalloutClass() {\n\n function ShopperAdoptionCallout(tooltipTemplate, label, attributeName) {\n if (!(this instanceof ShopperAdoptionCallout))\n return new ShopperAdoptionCallout(tooltipTemplate, label, attributeName);\n\n this.tooltipTemplate = tooltipTemplate;\n this.label = label;\n this.attributeName = attributeName;\n }\n\n _.extend(ShopperAdoptionCallout.prototype, {\n getTooltipTemplate: function () {\n return this.tooltipTemplate;\n },\n getLabel: function () {\n return this.label;\n },\n getAttributeName: function () {\n return this.attributeName;\n }\n });\n\n return ShopperAdoptionCallout;\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('recipientProfiles', recipientProfiles)\n .controller('KidsProfilesCtrl', KidsProfilesCtrl)\n .controller('SFOProfilesCtrl', SFOProfilesCtrl);\n\n\n // @ngInject\n function KidsProfilesCtrl(storeKeys, filters, StandardReports, ShopperReports, SectionConfig, Callout, CalloutLabelService, UserCohort, recipientProfiles) {\n\n var vm = this;\n\n var topProfilesCallout = Callout.topMainSubLabelConfig(\n SectionConfig.allTimeKidsProfiles,\n SectionConfig.allTimeKidsProfiles.callout.values[0].values[0],\n [\n SectionConfig.allTimeKidsProfiles.callout.values[0].values[1],\n SectionConfig.allTimeKidsProfiles.callout.values[0].values[2]\n ],\n recipientProfiles.fetchAllTimeData('daily-users-kids', storeKeys, filters, 'newRecipientCount')\n );\n\n var topShoppersCallout = Callout.topMainSubLabelConfig(\n SectionConfig.allTimeUserWithKidsProfiles,\n SectionConfig.allTimeUserWithKidsProfiles.callout.values[0].values[0],\n [\n SectionConfig.allTimeUserWithKidsProfiles.callout.values[0].values[1],\n SectionConfig.allTimeUserWithKidsProfiles.callout.values[0].values[2]\n ],\n recipientProfiles.fetchAllTimeData('daily-users-kids', storeKeys, filters, 'activeShopperCount')\n );\n\n\n recipientProfiles.setPropertiesInVM(\n storeKeys,\n filters,\n [\n {\n section : SectionConfig.newKidsProfiles ,\n formatFunc: StandardReports.transformIntoChartData('newRecipientCount')\n },\n {\n section : SectionConfig.tfUsersWithNewKids,\n formatFunc: StandardReports.transformIntoChartData('activeShopperCount')\n },\n {\n section : SectionConfig.kidsMauTF\n },\n {\n section : SectionConfig.kidsDauTF,\n formatFunc: StandardReports.transformIntoChartData('activeShopperCount')\n }\n ],\n [ topProfilesCallout, topShoppersCallout], vm);\n }\n\n // @ngInject\n function SFOProfilesCtrl(storeKeys, filters, StandardReports, ShopperReports, SectionConfig, Callout, CalloutLabelService, UserCohort, recipientProfiles) {\n var vm = this;\n\n var topProfilesCallout = Callout.topMainSubLabelConfig(\n SectionConfig.allTimeSFOProfiles,\n SectionConfig.allTimeSFOProfiles.callout.values[0].values[0],\n [\n SectionConfig.allTimeSFOProfiles.callout.values[0].values[1],\n SectionConfig.allTimeSFOProfiles.callout.values[0].values[2]\n ],\n recipientProfiles.fetchAllTimeData('daily-users-sfo', storeKeys, filters, 'newRecipientCount')\n );\n\n var topShoppersCallout = Callout.topMainSubLabelConfig(\n SectionConfig.allTimeUserWithSFOProfiles,\n SectionConfig.allTimeUserWithSFOProfiles.callout.values[0].values[0],\n [\n SectionConfig.allTimeUserWithSFOProfiles.callout.values[0].values[1],\n SectionConfig.allTimeUserWithSFOProfiles.callout.values[0].values[2]\n ],\n recipientProfiles.fetchAllTimeData('daily-users-sfo', storeKeys, filters, 'activeShopperCount')\n );\n\n recipientProfiles.setPropertiesInVM(\n storeKeys,\n filters,\n [\n {\n section : SectionConfig.newSFOProfiles ,\n formatFunc: StandardReports.transformIntoChartData('newRecipientCount')\n },\n {\n section : SectionConfig.tfUsersWithNewSFO ,\n formatFunc: StandardReports.transformIntoChartData('activeShopperCount')\n },\n {\n section : SectionConfig.sfoMauTF\n },\n {\n section : SectionConfig.sfoDauTF,\n formatFunc: StandardReports.transformIntoChartData('activeShopperCount')\n }\n ],\n [ topProfilesCallout, topShoppersCallout], vm);\n }\n\n // @ngInject\n function recipientProfiles(StandardReports, ShopperReports, ConsumerChartDisplay, Callout){\n\n\n return {\n setPropertiesInVM: setPropertiesInVM,\n chartDataFunc: chartDataFunc,\n fetchAllTimeData: fetchAllTimeData\n };\n\n function setPropertiesInVM(storeKeys, filters, chartSectionDetails, topCalloutSections, vm){\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches([\n ConsumerChartDisplay.Colors.registered.stroke,\n ConsumerChartDisplay.Colors.travellingRegistered.stroke,\n ConsumerChartDisplay.Colors.siteRegistered.stroke\n ]);\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.topSections = _.map(topCalloutSections,'section');\n\n topCalloutSections.forEach(function (sectionDetail) {\n vm[sectionDetail.section.name] = sectionDetail;\n });\n\n chartSectionDetails.forEach(function (sectionDetail) {\n\n var section = sectionDetail.section;\n var sectionName = section.name;\n var formatFunc = sectionDetail.formatFunc;\n var sectionChartData = sectionName + \"ChartData\";\n var sectionTemplate = sectionName + \"Section\";\n\n vm[sectionTemplate] = Callout.labelValueConfig(section);\n vm[sectionChartData] = function (rawData) {\n return {\n dateMetrics: formatFunc ? formatFunc(rawData).dateMetrics : rawData.dateMetrics,\n summary: rawData.summary\n }\n }\n\n });\n }\n\n\n // Todo - Need to make this better\n function chartDataFunc(summaryAggFunc, formatDataFunc){\n return function (config){\n return function(rawData) {\n var formattedData = formatDataFunc ? formatDataFunc(rawData) : rawData;\n return ShopperReports.userDetails(\n formattedData,\n _.pick(config, ['dataParams', 'summaryParams']),\n summaryAggFunc\n );\n };\n }\n }\n\n function fetchAllTimeData(api, storeKeys, filters, metricField) {\n return function () {\n return StandardReports.getConsumerData(\n api,\n filters.pathParams.detailLevel,\n _.merge(filters.queryParams, {storeKey: storeKeys})\n ).then(function (data) {\n return StandardReports.transformIntoChartData(metricField)(data);\n });\n }\n }\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ShopperSessionsCtrl', ShopperSessionsCtrl);\n\n // @ngInject\n function ShopperSessionsCtrl(storeKeys, filters, DateUtil, ConsumerChart, TransactionReports, StandardReports,\n Callout, SectionConfig, CalloutLabelService, ConsumerChartDisplay) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n var sessionForConversion = SectionConfig.sessionForConversion ;\n var totalSessions = SectionConfig.totalSessions;\n var tfSessions = SectionConfig.tfSessions ;\n var nonTFSessions = SectionConfig.nonTFSessions ;\n\n vm.sessionForConversionSection = Callout.labelValueConfig(sessionForConversion);\n vm.sessionsForConversionChartData = function(rawData) {\n return rawData;\n };\n\n vm.totalSessionsSection = Callout.usedForReportingConfig(totalSessions);\n vm.totalSessionChartData = function(rawData) {\n return rawData;\n };\n\n vm.tfSessionsSection = Callout.usedForReportingConfig(tfSessions);\n vm.tfSessionChartData = function(rawData) {\n return rawData;\n };\n\n vm.nonTFSessionsSection = Callout.usedForReportingConfig(nonTFSessions);\n vm.nonTFSessionChartData = function(rawData) {\n return rawData;\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ShopperProfilesCtrl', ShopperProfilesCtrl);\n\n\n // @ngInject\n function ShopperProfilesCtrl(filters, storeKeys, genderData, ShopperProfiles, ConsumerChartDisplay, SectionConfig,\n StandardReports, ReportFormat, Filters) {\n var vm = this;\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n vm.transactionColorSwatch = [\n {keys: [ConsumerChartDisplay.Colors.tfLine.stroke], value: '% of Consumers'}\n ];\n vm.genderData = genderData;\n vm.selectedGender = genderData && genderData[0] && genderData[0].range;\n\n vm.displayGender = ShopperProfiles.genderDisplay;\n\n var shopperProfileSections = [ SectionConfig.ageProfiles, SectionConfig.heightProfiles, SectionConfig.weightProfiles,\n SectionConfig.inseamProfiles, SectionConfig.footLengthProfiles, SectionConfig.bustSizeProfiles ];\n\n var bodyShapeSections = [ SectionConfig.torsoLengthProfiles, SectionConfig.stomachShapeProfiles,\n SectionConfig.hipShapeProfiles, SectionConfig.thighShapeProfiles, SectionConfig.archShapeProfiles,\n SectionConfig.calfShapeProfiles, SectionConfig.breastShapeProfiles, SectionConfig.buildProfiles,\n SectionConfig.seatShapeProfiles ];\n\n vm.loadCharts = function () {\n //reload all\n vm.shopperProfileCharts = getShopperProfileOptions(shopperProfileSections, vm.selectedGender);\n vm.bodyShapeCharts = [];\n\n // StandardReports.getConsumerData('body-shape', ReportFormat.Daily, queryFilters).then(function (data) {\n // var bodyShapes = ShopperProfiles.getMeasurements(data, vm.selectedGender, 'bodyShape');\n // var filteredSections = _.filter(bodyShapeSections, function (section) {\n // return _.includes(bodyShapes, section.name);\n // });\n //\n // vm.bodyShapeCharts = getBodyShapeOptions(filteredSections, vm.selectedGender);\n // });\n };\n\n vm.showBodyShapes = function () {\n return _.some(vm.bodyShapeCharts, function (chart) {\n return chart.chartOptions.showChart();\n })\n };\n\n function getShopperProfileOptions(sections, gender) {\n return _(sections)\n .filter(function (section) {\n return !_.eq(section, SectionConfig.bustSizeProfiles) ||\n (_.eq(section, SectionConfig.bustSizeProfiles) && vm.selectedGender !== 'Male')\n })\n .map(function(section) {\n return {\n getData: function() {\n return StandardReports.getConsumerData(section.api, ReportFormat.Daily, queryFilters);\n },\n chartOptions: ShopperProfiles.getChartOptions(section),\n dataOptions: function (rawData) {\n var selectedUnit = this.chartOptions && this.chartOptions.selectedUnit;\n return ShopperProfiles.getDataOptions(rawData, gender, selectedUnit, ShopperProfiles.shopperProfilesData);\n },\n setParentValues: function() {\n updateFilter();\n },\n onUnitChange: function (selectedUnit) {\n this.chartOptions = ShopperProfiles.getChartOptions(section, selectedUnit);\n updateFilter();\n }\n };\n })\n .value();\n }\n\n function getBodyShapeOptions(sections, gender) {\n return _.map(sections, function(section) {\n return {\n getData: function() {\n return StandardReports.getConsumerData(section.api, ReportFormat.Daily, queryFilters);\n },\n chartOptions: ShopperProfiles.getChartOptions(section),\n dataOptions: function (rawData) {\n return ShopperProfiles.getDataOptions(rawData, gender, section.name, ShopperProfiles.bodyShapeData)\n }\n };\n });\n }\n\n function updateFilter() {\n var filters = Filters.getFilter();\n\n var unitParams = _(vm.shopperProfileCharts)\n .filter(function (chart) {\n return !_.isNil(chart.chartOptions.selectedUnit);\n })\n .reduce(function (acc, chart) {\n acc[chart.chartOptions.name + \"Unit\"] = chart.chartOptions.selectedUnit;\n return acc;\n }, {});\n\n filters.dashboardSpecificParams = _.merge({}, unitParams, { gender: vm.selectedGender });\n\n Filters.setFilter(filters);\n }\n\n vm.loadCharts();\n }\n\n\n})();\n","(function (){\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .factory('ShopperProfiles', ShopperProfiles);\n\n function ShopperProfiles($q, $translate, HighChartsService){\n\n var barChartOptions = {\n plotOptions: {\n series: {\n clip: false,\n stacking: 'normal'\n }\n }\n };\n\n var horizontalBarChartOptions = _.merge({}, barChartOptions, {\n chart: {\n type: 'bar',\n height: 350,\n spacing: [0, 20, 0, 0]\n },\n xAxis: [\n {\n labels: {\n align: 'left',\n reserveSpace: true\n }\n },\n {\n labels: {\n align: 'left',\n reserveSpace: true\n }\n }\n ]\n });\n\n var verticalBarChartOptions = _.merge({}, barChartOptions, {\n chart: {\n type: 'column',\n height: 250,\n spacing: [20, 5, 40, 5]\n },\n xAxis: [\n {\n labels: {\n autoRotation: false,\n reserveSpace: false,\n formatter: function() {\n return _(this.value).words().join(' \\n');\n },\n style: {\n textOverflow: 'none'\n }\n }\n },\n {\n labels: {\n autoRotation: false\n }\n }\n ]\n });\n\n var chartOptions = {\n bar: horizontalBarChartOptions,\n column: verticalBarChartOptions\n };\n\n return {\n getChartOptions: getChartOptions,\n getDataOptions: getDataOptions,\n getMeasurements: getMeasurements,\n shopperProfilesData: shopperProfilesData,\n bodyShapeData: bodyShapeData,\n genderDisplay: genderDisplay\n };\n\n function pctValue(value) {\n return value * 100;\n }\n\n function shopperProfilesData(data, gender, unit) {\n var genderData = _(data.profileValues).filter( { gender: gender } );\n var rangeInUnits = _(genderData).find( { unit: unit } ) || _(genderData).first();\n return rangeInUnits && _.map(rangeInUnits.rangeMetricValues, function (v) {\n return {range: v.range, value: pctValue(v.value) };\n });\n }\n\n function bodyShapeData(data, gender, bodyShape) {\n var bodyShapeData = _(data.profileValues).find( { gender: gender, bodyShape: bodyShape } );\n return bodyShapeData && _(bodyShapeData.rangeMetricValues)\n .filter(function (v) { return v.range !== 'N/A'; })\n .map(function (v) {\n return {range: v.range, value: pctValue(v.value) };\n })\n .value();\n }\n\n function genderDisplay(gender) {\n var genderDisplayName = gender.range === 'Unspecified' ? 'Did Not Specify' : gender.range;\n return genderDisplayName + ' - ' + _.round(pctValue(gender.value)) + '%\\n of consumers'\n }\n\n function getMeasurements(data, gender, attribute) {\n return _(data.profileValues)\n .filter( { gender: gender } )\n .map(attribute)\n .filter(function (range) {\n return !_.isNil(range);\n })\n .sortBy().reverse().value();\n }\n\n function getChartOptions(section, selectedUnit) {\n var baseOptions = HighChartsService.getBaseOptions();\n return _.merge({}, baseOptions, chartOptions[section.chart.chartType], {\n chartTitle: $translate.instant(section.chart.label),\n name: section.name,\n selectedUnit: selectedUnit,\n showChart: function () {\n return !this.series || _.some(this.series[1].data, function (measurement) {\n return measurement.y > 0;\n });\n }\n });\n }\n\n function getDataOptions(apiData, gender, measurementName, formatDataFunc) {\n var measurementNames = getMeasurements(apiData, gender, 'unit');\n var selectedMeasurementName = measurementName || measurementNames[0];\n var data = formatDataFunc(apiData, gender, selectedMeasurementName);\n\n // Rounding the max value to the next multiple of 10, with a min of 10\n var maxPct = _.maxBy(data, 'value');\n var maxY = Math.max(10, Math.ceil(maxPct && maxPct.value / 10) * 10);\n\n\n return {\n units: measurementNames,\n selectedUnit: selectedMeasurementName,\n yAxis: {\n min: 0,\n max: maxY,\n visible: false,\n endOnTick: false,\n title: false\n },\n xAxis: [\n {\n categories: _.map(data, 'range')\n },\n {\n opposite: true,\n linkedTo: 0,\n categories: _.map(data, function (val) {\n return _.round(val.value) + \"%\";\n })\n }\n ],\n series: [\n {\n data: _.map(data, function (val) {\n return {\n y: maxY - val.value,\n stack: 0,\n className: 'bg-color dash-stroke'\n }\n })\n },\n {\n data: _.map(data, function (val) {\n var colorClass = val.range === 'Unspecified' ? 'bot-color' : 'tf-color';\n return {\n y: val.value,\n stack: 0,\n className: colorClass + ' bar-stroke'\n }\n })\n }\n ]\n }\n }\n\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ShopperSummaryCtrl', ShopperSummaryCtrl);\n\n // @ngInject\n function ShopperSummaryCtrl(storeKeys, filters, DateUtil, ConsumerChart, TransactionReports, StandardReports,\n Callout, SectionConfig, UserCohort) {\n var vm = this;\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n\n var spu = SectionConfig.spu;\n var mau = SectionConfig.mauSummary;\n var monthlySessions = SectionConfig.monthlySessions;\n\n vm.spuSection = Callout.labelValueConfig(spu);\n vm.sessionsPerUserChartData = function (sessionsPerUser) {\n vm.sessionsPerUserLift = StandardReports.findInSummary(sessionsPerUser.summary, 'SessionPerUsersLift', UserCohort.tf.value);\n\n return sessionsPerUser;\n };\n\n vm.mauSection = Callout.labelValueConfig(mau);\n vm.monthlyActiveUserChartData = function (monthlyUsers) {\n vm.tfAdoption = StandardReports.findInSummary(monthlyUsers.summary, 'TFAdoption', UserCohort.tf.value);\n\n return monthlyUsers;\n };\n\n vm.monthlySessionSection = Callout.labelValueConfig(monthlySessions);\n vm.monthlySessionChartData = function (monthlySessions) {\n return monthlySessions;\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('OrderRateSummaryCtrl', OrderRateSummaryCtrl);\n\n // @ngInject\n function OrderRateSummaryCtrl(storeKeys, filters, DateUtil, ConsumerChart, StandardReports, TransactionReports,\n Callout, SectionConfig, UserCohort) {\n var vm = this;\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n var chartType = \"values\";\n \n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n\n var mau = SectionConfig.monthlyUsers;\n var monthlyOrders = SectionConfig.monthlyOrders;\n var ordersPerUser = SectionConfig.ordersPerUser;\n\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.monthlyOrderSection = Callout.labelValueConfig(monthlyOrders);\n vm.monthlyOrderChartData = function (monthlyOrders) {\n return monthlyOrders;\n };\n\n vm.mauSection = Callout.labelValueConfig(mau);\n vm.monthlyActiveUserChartData = function (monthlyUsers) {\n vm.tfAdoption = StandardReports.findInSummary(monthlyUsers.summary, 'TFAdoption', UserCohort.tf.value);\n\n return monthlyUsers;\n };\n\n vm.opuSection = Callout.labelValueConfig(ordersPerUser);\n vm.ordersPerUserChartData = function (ordersPerUser) {\n vm.ordersPerUserLift = StandardReports.findInSummary(ordersPerUser.summary, 'OrdersPerUserLift', UserCohort.tf.value);\n\n return ordersPerUser;\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('TransactionOrdersCtrl', TransactionOrdersCtrl);\n\n // @ngInject\n function TransactionOrdersCtrl(storeKeys, $translate, filters, DateUtil, ConsumerChart, TransactionReports, StandardReports,\n Callout, CalloutLabelService, SectionConfig, ConsumerChartDisplay) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.ordersForConversionSection = Callout.labelValueConfig(SectionConfig.ordersForConversion);\n vm.ordersForConversionChartData = function (rawData) {\n return rawData;\n };\n\n\n vm.totalOrdersSection = Callout.usedForReportingConfig(SectionConfig.totalOrders);\n vm.totalOrderChartData = function(rawData) {\n return rawData;\n };\n\n vm.tfOrdersSection = Callout.usedForReportingConfig(SectionConfig.tfOrders);\n vm.tfOrderChartData = function(rawData) {\n return rawData;\n };\n\n vm.nonTFOrdersSection = Callout.usedForReportingConfig(SectionConfig.nonTFOrders);\n vm.nonTFOrderChartData = function(rawData) {\n return rawData;\n }\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('TransactionRevenueCtrl', TransactionRevenueCtrl);\n\n // @ngInject\n function TransactionRevenueCtrl(storeKeys, filters, DateUtil, ConsumerChart, TransactionReports, StandardReports, Callout,\n SectionConfig, CalloutLabelService) {\n var vm = this;\n\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n\n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.revenueSection = Callout.labelValueConfig(SectionConfig.revenue);\n vm.revenueChartData = function(rawData) {\n var formattedRawData = StandardReports.transformIntoChartData('revenue')(rawData);\n return {\n dateMetrics: formattedRawData.dateMetrics,\n summary: rawData.summary\n };\n };\n\n vm.aovSection = Callout.metricChangeConfig(SectionConfig.aov);\n vm.aovChartData = function(rawData) {\n var formattedRawData = StandardReports.transformIntoChartData('aov')(rawData);\n return {\n dateMetrics: formattedRawData.dateMetrics,\n summary: rawData.summary\n };\n };\n\n vm.rpsSection = Callout.metricChangeConfig(SectionConfig.rps);\n vm.rpsChartData = function(rawData) {\n return rawData;\n };\n\n vm.arpuSection = Callout.metricChangeConfig(SectionConfig.arpu);\n vm.arpuChartData = function(rawData) {\n return rawData;\n };\n\n vm.mrpsSection = Callout.metricChangeConfig(SectionConfig.mrps);\n vm.mrpsChartData = function(rawData) {\n return rawData;\n };\n\n vm.uptSection = Callout.metricChangeConfig(SectionConfig.upt);\n vm.uptChartData = function(rawData) {\n var formattedRawData = StandardReports.transformIntoChartData('upt')(rawData);\n return {\n dateMetrics: formattedRawData.dateMetrics,\n summary: rawData.summary\n };\n };\n\n vm.unitsSection = Callout.labelValueConfig(SectionConfig.units);\n vm.unitsChartData = function(rawData) {\n var formattedRawData = StandardReports.transformIntoChartData('units')(rawData);\n return {\n dateMetrics: formattedRawData.dateMetrics,\n summary: rawData.summary\n };\n };\n\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('TransactionSummaryCtrl', TransactionSummaryCtrl);\n\n // @ngInject\n function TransactionSummaryCtrl(storeKeys, filters, DateUtil, ConsumerChart, StandardReports, TransactionReports,\n Callout, SectionConfig, CalloutLabelService) {\n var vm = this;\n var detailLevel = filters.pathParams.detailLevel;\n\n vm.dateRange = {startDate: filters.queryParams.startDate, endDate: filters.queryParams.endDate};\n\n vm.transactionColorSwatch = StandardReports.getColorSwatches();\n \n var queryFilters = _.merge(filters.queryParams, {storeKey: storeKeys});\n\n var sessions = SectionConfig.sessions;\n var orders = SectionConfig.orders;\n var conversion = SectionConfig.conversion;\n\n vm.apiParams = { detailLevel: detailLevel, queryParams: queryFilters };\n\n vm.sessionSection = Callout.labelValueConfig(sessions);\n\n vm.orderSection = Callout.labelValueConfig(orders);\n\n vm.conversionSection = Callout.liftConfig(conversion);\n\n vm.sessionChartData = function (rawData) {\n return rawData;\n };\n\n vm.orderChartData = function (rawData) {\n return rawData;\n };\n\n vm.conversionChartData = function (rawData) {\n return rawData;\n };\n }\n })();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('tfcCheckBoxCtrl', CheckBoxCtrl)\n .directive('tfcCheckBox', tfcCheckBox);\n\n function CheckBoxCtrl() {\n var vm = this;\n\n vm.stateClass = function () {\n\n if(vm.selected) {\n if(!vm.indeterminate) {\n return 'fa-check-square';\n } else {\n return 'fa-minus-square';\n }\n } else {\n return 'fa-square-o'\n }\n }\n }\n\n function tfcCheckBox() {\n return {\n restrict: 'E',\n bindToController : true,\n controller : 'tfcCheckBoxCtrl as vm',\n scope: {\n onChange: '&',\n selected: '=',\n indeterminate: '='\n },\n templateUrl: 'StandardReports/Util/CheckBox/CheckBox.tmpl.html'\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular\n .module('tfc.retailer.StandardReports')\n .controller('ExportSelectionCtrl', ExportSelectionCtrl)\n .directive('tfcExportSelection', tfcExportSelection)\n .constant('ExportType', {\n 'csv' : { name: 'csv', fileType: 'text/csv', gaKey: 'CSV' },\n 'excel' : { name: 'excel', fileType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', gaKey: 'Excel' },\n 'pdf': { name: 'pdf', fileType: 'pdf', gaKey: 'PDF' }\n });\n\n function ExportSelectionCtrl($state,$stateParams, StandardReports, Filters, PageConfig, AnalyticsHelper, ExportType) {\n var vm = this;\n\n var stateReportMap = _.reduce(_.values(PageConfig), function(acc, pageObj){\n acc[pageObj.stateName] = pageObj;\n return acc;\n }, {});\n\n function getCurrentPage(){\n var state = $state.current.name;\n return stateReportMap[state];\n }\n\n function exportFunc(fileType, gaKey) {\n return function () {\n var pageObj = getCurrentPage();\n if(pageObj) {\n StandardReports.findUserStores()\n .then( function (userStores) {\n var selectedStoreKeys = StandardReports.defaultSelectedStores(userStores, $stateParams.storeKey);\n var queryParams = _.extend(Filters.getFilterParams().queryParams, {storeKey: selectedStoreKeys});\n StandardReports.downloadReport(pageObj.exportUrl, queryParams, fileType);\n AnalyticsHelper.sendDataDownloadEvent(gaKey, pageObj.displayName);\n });\n }\n };\n }\n\n function pdfExport() {\n var filename = 'TrueFitReport-' + getCurrentPage().displayName.replace(/\\s-\\s|\\s/g, \"_\");\n\n html2canvas(document.getElementById('analytics-page'), { scrollY: -window.scrollY })\n .then(function (canvas) {\n var data = canvas.toDataURL();\n\n var filterContents = getFiltersForExport();\n\n var content = [getPageTitle()]\n .concat(filterContents)\n .concat([\"\\n\",\"\\n\"])\n .concat({\n image: data,\n width: 400\n });\n\n var docDefinition = {\n content: content\n };\n pdfMake.createPdf(docDefinition).download(filename);\n AnalyticsHelper.sendDataDownloadEvent(ExportType.pdf.gaKey, getCurrentPage().displayName);\n });\n };\n\n var exportTypes = [\n { type: ExportType.csv.name, exportFunc: exportFunc(ExportType.csv.fileType, ExportType.csv.gaKey) },\n { type: ExportType.pdf.name, exportFunc: pdfExport },\n { type: ExportType.excel.name, exportFunc: exportFunc(ExportType.excel.fileType, ExportType.excel.gaKey) }\n ];\n\n vm.pageExports = function () {\n var pageObj = getCurrentPage();\n return pageObj && _.map(pageObj.exportTypes, function (type) {\n return _.find(exportTypes, { type: type.name });\n });\n };\n\n function getPageTitle(){\n return { text: \"Dashboard: \" + getCurrentPage().displayName, bold: true, size: 25 }\n }\n\n function getFiltersForExport() {\n\n var params = Filters.getFilterParams();\n\n var filterHeader = {text: \"\\n Selected Filters:\", bold: true, size: 25};\n\n var stores = $stateParams.storeKey ? filterExportLine(\"Stores: \", $stateParams.storeKey) : [];\n\n var detailsLevelToString = filterExportLine(\"Detail Level: \", [params.pathParams.detailLevel]);\n\n var deviceTypes = filterExportLine(\"Device Type: \", _.map(params.queryParams.deviceType, function (value) {\n return value.replace(\"_\", \" \");\n }));\n\n var continents = filterExportLine(\"Continents: \", params.queryParams.continent);\n\n var countries = filterExportLine(\"Countries: \", params.queryParams.country);\n\n var locales = filterExportLine(\"Locales: \" , params.queryParams.uiLocale);\n\n var hierarchies = filterExportLine(\n \"Hierarchies: \",\n [\n params.queryParams.department,\n params.queryParams.category,\n params.queryParams.classification\n ],\n \" / \"\n );\n\n // filter out empty strings\n return[\n filterHeader,\n detailsLevelToString,\n stores,\n deviceTypes,\n continents,\n countries,\n locales,\n hierarchies\n ];\n\n }\n\n function filterExportLine(filterHeader, filterValues, separator) {\n return {\n text: [\n {text: filterHeader, size: 25},\n filterValues.length ? _.map(filterValues, _.upperFirst).join(separator ? separator: \", \"): \"All\"\n ]\n };\n }\n\n }\n\n function tfcExportSelection() {\n return {\n restrict: 'E',\n bindToController : true,\n controller : 'ExportSelectionCtrl as vm',\n scope: {},\n templateUrl: 'StandardReports/Util/ExportSelection/ExportSelection.tmpl.html'\n };\n }\n\n})();\n","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('BaseFilterType', BaseFilterTypeClass)\n .service('FiltersHelper', FiltersHelper);\n\n function BaseFilterTypeClass(FiltersHelper) {\n\n function BaseFilterType(filterData, stateParams) {\n if (!(this instanceof BaseFilterType)) return new BaseFilterType(filterData, stateParams);\n\n this.filterData = filterData;\n this.stateParams = stateParams;\n }\n\n _.extend(BaseFilterType.prototype, {\n values: values,\n /**\n * function to format filter values from API to a standard format\n */\n formatFilterValues: unimplemented('formatFilterValues'),\n /**\n * function to get the default selected filter options\n */\n selectedParams: unimplemented('selectedParams'),\n /**\n * function to check if the filter should be selected\n */\n isFilterSelected: unimplemented('isFilterSelected')\n });\n\n function unimplemented(method) {\n return function () {\n console.error(new Error('#' + method + ' not implemented'));\n };\n }\n\n function values() {\n var formattedFilter = this.formatFilterValues(this.filterData);\n var params = this.selectedParams(this.stateParams);\n var isSelected = this.isFilterSelected(params);\n return FiltersHelper.filtersWithDefault(formattedFilter, isSelected);\n }\n\n return BaseFilterType;\n }\n\n\n function FiltersHelper() {\n\n return {\n formatFlatFilter: formatFlatFilter,\n formatTreeFilter: formatTreeFilter,\n filtersWithDefault: filtersWithDefault,\n includesDefaultFn: includesDefaultFn,\n equalsDefaultFn: equalsDefaultFn\n };\n\n function formatFlatFilter(arr) {\n return _(arr).map(function (value) {\n return {'name': value, 'isSelected': false} // by Default all selected\n }).value();\n }\n\n function formatTreeFilter(arr) {\n return _(arr).map(function (valObj) {\n return {\n name: valObj.name,\n isSelected: false,\n isCollapsed: true,\n values: (valObj['dimensionType'] === 'tree') ?\n formatTreeFilter(valObj.values) : formatFlatFilter(valObj.values)\n }\n }).sortBy('name').value();\n }\n\n function filtersWithDefault(formattedFilterArr, defaultFns) {\n return _(formattedFilterArr).map(function (valObj) {\n valObj.isSelected = _.head(defaultFns)(valObj);\n if(!_.isUndefined(valObj.values) && valObj.isSelected){ // To ensure child is selected only when parent is selected\n filtersWithDefault(valObj.values, _.tail(defaultFns));\n }\n return valObj;\n }).value();\n }\n\n function includesDefaultFn(stateParams) {\n return function (valObj) {\n return stateParams && _.includes(stateParams, valObj.name);\n }\n }\n\n function equalsDefaultFn(stateParams) {\n return function (valObj) {\n return stateParams && _.eq(stateParams, valObj.name);\n }\n }\n }\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('DetailLevelFilter', DetailLevelFilterClass);\n\n function DetailLevelFilterClass(BaseFilterType, FiltersHelper, ReportFormat) {\n\n function DetailLevelFilter(filterData, stateParams) {\n if (!(this instanceof DetailLevelFilter)) return new DetailLevelFilter(filterData, stateParams);\n\n BaseFilterType.call(this, filterData, stateParams);\n }\n\n DetailLevelFilter.prototype = _.create(BaseFilterType.prototype, {\n formatFilterValues: FiltersHelper.formatFlatFilter,\n selectedParams: function (stateParams) {\n return getSelectedParams(stateParams);\n },\n isFilterSelected: function (params) {\n return [FiltersHelper.equalsDefaultFn(params)];\n }\n });\n\n function getSelectedParams(stateParams) {\n return stateParams.detailLevel || ReportFormat.Daily;\n }\n\n return DetailLevelFilter;\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('DeviceTypeFilter', DeviceTypeFilterClass);\n\n function DeviceTypeFilterClass(BaseFilterType, FiltersHelper) {\n\n function DeviceTypeFilter(filterData, stateParams) {\n if (!(this instanceof DeviceTypeFilter)) return new DeviceTypeFilter(filterData, stateParams);\n\n BaseFilterType.call(this, filterData, stateParams);\n }\n\n DeviceTypeFilter.prototype = _.create(BaseFilterType.prototype, {\n formatFilterValues: function (filterData) {\n var deviceHierarchy = getDeviceHierarchy(filterData);\n return FiltersHelper.formatTreeFilter(deviceHierarchy);\n },\n selectedParams: function (stateParams) {\n return getSelectedParams(stateParams.deviceType);\n },\n isFilterSelected: function (stateParams) {\n return _.map(stateParams, function (deviceType) {\n return FiltersHelper.includesDefaultFn(deviceType);\n });\n }\n });\n\n function getDeviceHierarchy(filterData) {\n var splitDevice = _.map(filterData, function(device) { return device.split('_')});\n var groupedDevice = _.groupBy(splitDevice, function(device) { return _.head(device); });\n return _.map(groupedDevice, function(value,key) {\n return {\n name: key,\n dimensionType: \"flat\",\n values: _.flatMap(value, function(v) { return _.tail(v); } )\n }\n });\n }\n\n function getSelectedParams(stateParams) {\n var deviceTypes, subDeviceTypes;\n if(stateParams) {\n var deviceHierarchy = getDeviceHierarchy(stateParams);\n deviceTypes = _.map(deviceHierarchy, 'name');\n subDeviceTypes = _.flatMap(deviceHierarchy, 'values');\n }\n\n return [deviceTypes, subDeviceTypes];\n }\n\n return DeviceTypeFilter;\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('ProductHierarchyFilter', ProductHierarchyFilterClass);\n\n function ProductHierarchyFilterClass(BaseFilterType, FiltersHelper) {\n\n function ProductHierarchyFilter(filterData, stateParams, defaultValue) {\n if (!(this instanceof ProductHierarchyFilter)) return new ProductHierarchyFilter(filterData, stateParams, defaultValue);\n this.defaultValue = defaultValue;\n\n BaseFilterType.call(this, filterData, stateParams);\n }\n\n ProductHierarchyFilter.prototype = _.create(BaseFilterType.prototype, {\n formatFilterValues: FiltersHelper.formatTreeFilter,\n selectedParams: function (stateParams) {\n return getSelectedParams(stateParams, this.defaultValue);\n },\n isFilterSelected: function (stateParams) {\n return _.map(stateParams, function (hierarchy) {\n return FiltersHelper.equalsDefaultFn(hierarchy);\n });\n }\n });\n\n function getSelectedParams(stateParams, defaultValue) {\n var hierarchyParams = ['department', 'category', 'classification'];\n var defaultHierarchy = _(hierarchyParams)\n .mapKeys()\n .mapValues(function () { return defaultValue; })\n .value();\n var selectedHierarchy = _(stateParams)\n .pick(hierarchyParams)\n .defaults(defaultHierarchy)\n .value();\n return [selectedHierarchy.department, selectedHierarchy.category, selectedHierarchy.classification];\n }\n\n return ProductHierarchyFilter;\n\n }\n\n})();","(function () {\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .factory('RegionFilter', RegionFilterClass);\n\n function RegionFilterClass(BaseFilterType, FiltersHelper) {\n\n function RegionFilter(filterData, stateParams) {\n if (!(this instanceof RegionFilter)) return new RegionFilter(filterData, stateParams);\n\n BaseFilterType.call(this, filterData, stateParams);\n }\n\n RegionFilter.prototype = _.create(BaseFilterType.prototype, {\n formatFilterValues: FiltersHelper.formatTreeFilter,\n selectedParams: function (stateParams) {\n return getSelectedParams(stateParams);\n },\n isFilterSelected: function (params) {\n return _.map(params, function (region) {\n return FiltersHelper.includesDefaultFn(region);\n });\n }\n });\n\n function getSelectedParams(stateParams) {\n return [stateParams.continent, stateParams.country, stateParams.uiLocale];\n }\n\n return RegionFilter;\n\n }\n\n})();","(function (){\n 'use strict';\n\n angular.module('tfc.retailer.StandardReports')\n .directive('hierarchyFilter', HierarchyFilter)\n .controller('HierarchyFilterCtrl', HierarchyFilterCtrl);\n\n\n function HierarchyFilter(){\n return {\n restrict: 'E',\n scope : {\n addressable: '=',\n hierarchy: '=',\n addressableHierarchy: '=',\n selectedHierarchy: '='\n },\n controller : 'HierarchyFilterCtrl as vm',\n bindToController : true,\n templateUrl : 'StandardReports/Filters/HierarchyFilter/HierarchyDimension.tmpl.html'\n };\n }\n\n // @ng-inject\n function HierarchyFilterCtrl(){\n var vm = this;\n\n function init(selectedHierarchy) {\n vm.departments = getHierarchy();\n vm.selectedDepartment = _.find(vm.departments, { name: (selectedHierarchy && selectedHierarchy.department) ||\n getDefaultHierarchyValue() });\n vm.onDepartmentChange(selectedHierarchy);\n vm.islineItemTracking = vm.departments.length > 1;\n }\n\n\n vm.onDepartmentChange = function(selectedHierarchy) {\n updateHierarchy(vm.selectedDepartment.name, 0);\n vm.selectedHierarchy.department = vm.selectedDepartment.name;\n\n vm.categories = vm.selectedDepartment.values;\n vm.selectedCategory = _.find(vm.categories, { name: (selectedHierarchy && selectedHierarchy.category) ||\n getDefaultHierarchyValue() });\n vm.onCategoryChange(selectedHierarchy);\n };\n\n vm.onCategoryChange = function(selectedHierarchy) {\n updateHierarchy(vm.selectedCategory.name, 1);\n vm.selectedHierarchy.category = vm.selectedCategory.name;\n\n vm.classifications = vm.selectedCategory.values;\n vm.selectedClassification = _.find(vm.classifications, { name: (selectedHierarchy && selectedHierarchy.classification) ||\n getDefaultHierarchyValue() });\n vm.onClassificationChange(selectedHierarchy);\n };\n\n vm.onClassificationChange = function(selectedHierarchy) {\n updateHierarchy(vm.selectedClassification.name, 2);\n vm.selectedHierarchy.classification = vm.selectedClassification.name;\n };\n\n vm.toggleAddressable = function () {\n init();\n };\n\n function getDefaultHierarchyValue() {\n return vm.addressable ? 'All TrueFit Addressable' : 'All';\n }\n\n function getHierarchy() {\n return vm.addressable ? vm.addressableHierarchy : vm.hierarchy;\n }\n\n function updateHierarchy(hierarchyName, level) {\n function hierarchyLevelValues(values, level) {\n if(level === 0) { return values; }\n else {\n var selectedHierarchy = _.find(values, {isSelected: true});\n return hierarchyLevelValues(selectedHierarchy.values, level - 1);\n }\n }\n\n var hierarchyLevel = hierarchyLevelValues(getHierarchy(), level);\n _.forEach(hierarchyLevel, function (hierarchy) {\n hierarchy.isSelected = hierarchy.name === hierarchyName;\n })\n }\n\n init(vm.selectedHierarchy);\n\n }\n\n})();"]}