{"version":3,"sources":["webpack:///../../../src/components/VAlert/VAlert.ts","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/components/VDialog/VDialog.ts","webpack:///../../../src/components/VDatePicker/VDatePickerTitle.ts","webpack:///../../../../src/components/VDatePicker/util/createNativeLocaleFormatter.ts","webpack:///../../../../src/components/VDatePicker/util/monthChange.ts","webpack:///../../../src/components/VDatePicker/VDatePickerHeader.ts","webpack:///../../../../src/components/VDatePicker/util/eventHelpers.ts","webpack:///../../../../src/components/VDatePicker/util/sanitizeDateString.ts","webpack:///../../../../src/components/VDatePicker/util/isDateAllowed.ts","webpack:///../../../../src/components/VDatePicker/mixins/date-picker-table.ts","webpack:///../../../src/components/VDatePicker/VDatePickerDateTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerMonthTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerYears.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../src/components/VDatePicker/VDatePicker.ts","webpack:///../../../src/components/VGrid/VSpacer.ts","webpack:///../../../src/components/VChip/index.ts","webpack:///../../../src/components/VForm/VForm.ts","webpack:///../../../../src/components/VDatePicker/util/pad.ts","webpack:///../../../src/components/VAvatar/VAvatar.ts","webpack:///../../../src/components/VBtn/VBtn.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../../../src/components/VDataTable/mixins/header.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderMobile.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderDesktop.ts","webpack:///../../../src/components/VDataTable/VDataTableHeader.ts","webpack:///../../../src/components/VDataTable/Row.ts","webpack:///../../../src/components/VDataTable/RowGroup.ts","webpack:///../../../src/components/VDataTable/VSimpleTable.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts","webpack:///../../../src/components/VCard/index.ts","webpack:///../../../src/components/VIcon/index.ts","webpack:///../../../src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/components/VCard/VCard.ts","webpack:///../../../src/components/VDivider/index.ts","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///../../../src/components/VChip/VChip.ts","webpack:///../../../src/components/VDivider/VDivider.ts"],"names":["mixins","VSheet","Toggleable","Transitionable","extend","name","props","border","type","String","validator","val","includes","closeLabel","default","coloredBorder","Boolean","dense","dismissible","closeIcon","icon","outlined","prominent","text","value","computed","__cachedBorder","this","data","staticClass","class","setBackgroundColor","computedColor","$createElement","__cachedDismissible","color","iconColor","VBtn","small","attrs","$vuetify","lang","t","on","click","isActive","VIcon","__cachedIcon","computedIcon","classes","options","call","hasColoredIcon","hasText","undefined","isDark","Themeable","created","$attrs","hasOwnProperty","breaking","methods","genWrapper","children","$slots","prepend","genContent","append","$scopedSlots","close","toggle","genAlert","role","listeners$","style","styles","directives","setColor","setTextColor","render","h","transition","origin","mode","breakpoints","ALIGNMENT","makeProps","prefix","def","reduce","upperFirst","alignValidator","str","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","breakpoint","replace","toLowerCase","cache","Map","Vue","functional","tag","noGutters","cacheKey","classList","get","forEach","push","set","mergeData","SIZE_MAP","isFontAwesome5","iconType","some","isSvgPath","test","length","BindsAttrs","Colorable","Sizeable","disabled","left","right","size","Number","required","medium","hasClickListener","getIcon","iconName","trim","remapInternalIcon","getSize","sizes","xSmall","large","xLarge","explicitSize","find","key","convertToUnit","getDefaultData","attrs$","getSvgWrapperData","fontSize","wrapperData","height","width","applyColors","themeClasses","renderFontIcon","newChildren","delimiterIndex","indexOf","isMaterialIcon","slice","renderSvgIcon","svgData","xmlns","viewBox","d","renderSvgIconComponent","component","nativeOn","$_wrapperFor","domProps","textContent","innerHTML","baseMixins","Dependent","Detachable","Overlayable","Returnable","Stackable","Activatable","ClickOutside","dark","fullscreen","light","maxWidth","noClickAnimation","persistent","retainFocus","scrollable","activatedBy","animate","animateTimeout","stackMinZIndex","previousActiveElement","contentClass","contentClasses","hasActivator","activator","watch","show","hideScroll","removeOverlay","unbind","_a","focus","showScroll","genOverlay","removed","beforeMount","$nextTick","isBooted","beforeDestroy","window","animateClick","clearTimeout","setTimeout","closeConditional","e","target","_isDestroyed","$refs","content","contains","overlay","$el","activeZIndex","getMaxZIndex","document","documentElement","add","hideOverlay","dialog","activeElement","_b","bind","addEventListener","onFocusin","removeEventListener","onClickOutside","$emit","onKeydown","keyCode","keyCodes","esc","getOpenDependents","getActivator","getOpenDependentElements","el","focusable","querySelectorAll","hasAttribute","matches","showLazyContent","VThemeProvider","root","getScopeIdAttrs","keydown","zIndex","ref","genTransition","genInnerContent","appear","tabindex","handler","include","transformOrigin","getContentSlot","attach","genActivator","PickerButton","date","readonly","selectingYear","year","yearIcon","isReversing","computedTransition","prev","genYearIcon","getYearBtn","genPickerButton","genTitleText","genTitleDate","createNativeLocaleFormatter","locale","substrOptions","start","makeIsoString","dateString","month","split","pad","join","intlFormatter","Intl","DateTimeFormat","format","Date","substr","sign","map","Localable","Function","min","max","nextAriaLabel","nextIcon","prevAriaLabel","prevIcon","formatter","currentLocale","timeZone","newVal","oldVal","genBtn","change","ariaLabelId","ariaLabel","calculateChange","stopPropagation","rtl","monthChange","genHeader","header","createItemTypeNativeListeners","instance","itemTypeSuffix","$listeners","eventName","endsWith","event","createItemTypeListeners","isDateAllowed","allowedFn","Touch","allowedDates","current","events","Array","eventColor","range","tableDate","wheelThrottle","displayedMonth","displayedYear","mounted","throttle","wheel","genButtonClasses","isAllowed","isFloating","isSelected","isCurrent","isFirst","isLast","genButtonEvents","mouseEventType","mergeListeners","genButton","isOtherMonth","isArray","genEvents","getEventColors","arrayize","v","eventData","eventColors","filter","isValidScroll","calculateTableDate","sanitizeType","sanitizeDateString","deltaY","touch","genTable","touchDirective","offsetX","preventDefault","from","to","sort","DatePickerTable","firstDayOfWeek","localeFirstDayOfYear","showAdjacentMonths","showWeek","weekdayFormat","day","weekdayFormatter","weekday","weekDays","first","parseInt","createRange","i","delta","Math","genTHead","days","unshift","genTR","weekDaysBeforeFirstDayOfTheMonth","firstDayOfTheMonth","weekDay","getUTCDay","getWeekNumber","dayInMonth","weekNumber","genWeekNumber","padStart","genTBody","daysInMonth","getDate","rows","prevMonthYear","prevMonth","firstDayFromPreviousMonth","cellsInRow","nextMonthYear","nextMonth","nextMonthDay","cols","fill","row","tds","_","col","defaultColor","activeItem","getElementsByClassName","scrollTop","offsetTop","offsetHeight","scrollHeight","genYearItem","formatted","active","genYearItems","selectedYear","getFullYear","maxYear","minYear","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","isLeapYear","Picker","activePicker","dayFormat","headerDateFormat","monthFormat","multiple","nextMonthAriaLabel","nextYearAriaLabel","pickerDate","prevMonthAriaLabel","prevYearAriaLabel","reactive","showCurrent","selectedItemsText","titleDateFormat","yearFormat","now","internalActivePicker","toUpperCase","inputDay","inputMonth","inputYear","multipleValue","wrapInArray","getMonth","isMultiple","lastValue","selectedMonths","inputDate","tableMonth","tableYear","minMonth","maxMonth","formatters","titleDate","defaultTitleMultipleDateFormatter","defaultTitleDateFormatter","dates","titleFormats","titleDateFormatter","landscapeFormatter","match","nonDigit","digit","landscape","immediate","newValue","oldValue","checkMultipleProp","setInputDate","output","emitInput","newInput","concat","x","valueType","constructor","expected","consoleWarn","yearClick","monthClick","dateClick","genPickerTitle","VDatePickerTitle","slot","genTableHeader","VDatePickerHeader","input","genDateTable","VDatePickerDateTable","genMonthTable","VDatePickerMonthTable","genYears","VDatePickerYears","genPickerBody","array","genPicker","createSimpleFunctional","VChip","RegistrableProvide","provide","form","inheritAttrs","lazyValidation","inputs","watchers","errorBag","errors","values","deep","watchInput","watcher","$watch","$set","_uid","valid","shouldValidate","validate","reset","resetErrorBag","resetValidation","register","unregister","found","unwatch","$delete","novalidate","submit","string","targetLength","padString","repeat","n","Measurable","Roundable","roundedClasses","minWidth","measurableStyles","Routable","Positionable","GroupableFactory","ToggleableFactory","activeClass","btnToggle","block","depressed","fab","loading","plain","retainFocusOnClick","rounded","tile","proxyClass","absolute","bottom","isElevated","fixed","hasBg","isRound","top","groupClasses","elevationClasses","sizeableClasses","computedElevation","Elevatable","computedRipple","defaultRipple","circle","ripple","elevation","breakingProps","original","replacement","detail","blur","genLoader","loader","VProgressCircular","indeterminate","generateRouteLink","JSON","stringify","items","sortBy","sortDesc","customSort","sortItems","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","groupItems","disableSort","disablePagination","disableFiltering","search","customFilter","searchItems","serverItemsLength","internalOptions","assign","sortDiff","groupDiff","fillArray","itemsLength","filteredItems","pageCount","ceil","pageStart","pageStop","isGrouped","pagination","computedItems","paginateItems","groupedItems","scopedProps","sortArray","group","updateOptions","originalItemsLength","computedOptions","old","deepEqual","oldBy","oldDesc","by","desc","byIndex","findIndex","k","splice","s","itemsPerPageOptions","firstIcon","lastIcon","itemsPerPageText","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","genDataItemsPerPageOption","obj","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","genItemsPerPageSelect","computedIPPO","ippo","VSelect","hideDetails","auto","genPaginationInfo","genIcon","label","genIcons","before","after","toString","getSlot","Mobile","VData","itemKey","singleSelect","expanded","mobileBreakpoint","singleExpand","noResultsText","noDataText","loadingText","hideDefaultFooter","footerProps","selectableKey","selection","expansion","internalCurrentItems","shiftKeyDown","lastEntry","everyItem","selectableItems","every","someItems","sanitizedFooterProps","camelizeObjectKeys","item","isSelectable","getObjectValueByPath","removedProps","onKeyDown","onKeyUp","shift","toggleSelectAll","select","emit","index","lastEntryKey","lastEntryKeySelected","multipleSelect","end","currentItem","isExpanded","expand","createItemProps","isMobile","genEmptyWrapper","genEmpty","filteredItemsLength","noData","noResults","genItems","empty","genFooter","scopedSlots","getPrefixedScopedSlots","VDataFooter","genDefaultScopedSlot","outerProps","$props","headers","checkboxColor","sortIcon","showGroupBy","genSelectAll","VSimpleCheckbox","genSortIcon","sortByText","genSortChip","sortIndex","beingSorted","isDesc","sortable","asc","genSortSelect","menuProps","closeOnContentClick","sortHeaders","th","tr","genGroupByToggle","getAria","$t","ariaSort","scope","divider","groupable","mobile","slots","dedupeModelListeners","rebuildSlots","VDataTableHeaderMobile","VDataTableHeaderDesktop","needsTd","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","cellClass","headerClass","summaryClass","fixedHeader","wrapper","hideDefaultHeader","mobileRowChildren","filterFn","searchTableItems","headersWithCustomFilters","headersWithoutCustomFilters","matchesColumnFilters","defaultFilter","matchesSearchTerm","VDataIterator","Loadable","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","colspan","columnSorters","acc","filterable","sanitizedHeaderProps","computedItemsPerPage","firstOption","groupByText","_c","calcWidths","clientWidth","customFilterWithColumns","customSortWithHeaders","genCaption","genColgroup","genLoading","genProgress","genHeaders","VDataTableHeader","genGroupedRows","genRows","genDefaultGroupedRow","isOpen","toggleFn","removeFn","remove","column","RowGroup","genScopedRows","genDefaultRows","genDefaultExpandedRow","genDefaultSimpleRow","headerRow","expandedRow","MobileRow","Row","mergeClasses","getPropertyFromItem","contextmenu","dblclick","genBody","body","genFoot","foot","genFooters","simpleProps","VSimpleTable","proxySlot","VCardActions","VCardSubtitle","VCardText","VCardTitle","VCard","Ripple","indeterminateIcon","onIcon","offIcon","listeners","center","f","Selectable","inputIndeterminate","VInput","validationState","isDisabled","hasError","hasSuccess","hasColor","genCheckbox","title","checkboxAttrs","genInput","genRipple","rippleState","genDefaultSlot","genLabel","hasIntersect","VResponsive","intersect","alt","contain","eager","gradient","lazySrc","rootMargin","threshold","position","src","srcset","currentSrc","image","isLoading","calculatedAspectRatio","naturalWidth","computedAspectRatio","normalisedSrc","aspect","aspectRatio","__cachedImage","backgroundImage","backgroundPosition","loadImage","init","entries","observer","isIntersecting","lazyImg","Image","pollForSize","onLoad","getSrc","startsWith","naturalHeight","onError","onload","decode","catch","err","message","then","onerror","img","timeout","poll","complete","__genPlaceholder","placeholder","node","modifiers","once","__cachedSizer","flat","hover","link","raised","isClickable","background","VDivider","defaultMenuProps","VSelectMenuProps","offsetY","offsetOverflow","allowOverflow","autoSelectFirst","queryText","itemText","toLocaleLowerCase","hideNoData","noFilter","searchInput","lazySearch","selectedIndex","selectedValues","selectedItems","getValue","hasDisplayedItems","hideSelected","hasItem","currentRange","selectedItem","getText","isSearching","internalSearch","allItems","isAnyValueAllowed","isDirty","searchIsDirty","menuCanShow","isFocused","$_menuProps","valueComparator","internalValue","listData","virtualizedItems","onCopy","updateSelf","isMenuActive","hasSlot","activateMenu","setSearch","destroyed","onFilteredItemsChanged","preSelectedItem","menu","listIndex","setMenuIndex","getTiles","onInternalSearchChanged","updateMenuDimensions","updateDimensions","changeSelectedIndex","backspace","delete","deleteCurrentItem","curIndex","curItem","isInteractive","getDisabled","lastIndex","nextIndex","nextItem","selectItem","setValue","clearableCallback","VTextField","autocomplete","genInputSlot","genSelections","onClick","onFocus","isAppendInner","onInput","badInput","validity","ctrlKey","home","onSpaceDown","onTabDown","onUpDown","setSelectedItems","currentItemText","clipboardData","setData","chipGroup","draggable","filterIcon","pill","textColor","isLink","hasClose","genFilter","VExpandXTransition","genClose","inset","vertical","orientation"],"mappings":"kHAAA,8GAwBeA,sBACbC,OACAC,OACAC,QACAC,OAAO,CACPC,KAAM,UAENC,MAAO,CACLC,OAAQ,CACNC,KAAMC,OACNC,UAAWC,GACT,MAAO,CACL,MACA,QACA,SACA,QACAC,SAASD,KAGfE,WAAY,CACVL,KAAMC,OACNK,QAAS,kBAEXC,cAAeC,QACfC,MAAOD,QACPE,YAAaF,QACbG,UAAW,CACTX,KAAMC,OACNK,QAAS,WAEXM,KAAM,CACJN,QAAS,GACTN,KAAM,CAACQ,QAASP,QAChBC,UAAWC,GACT,MAAsB,kBAARA,IAA4B,IAARA,IAGtCU,SAAUL,QACVM,UAAWN,QACXO,KAAMP,QACNR,KAAM,CACJA,KAAMC,OACNC,UAAWC,GACT,MAAO,CACL,OACA,QACA,UACA,WACAC,SAASD,KAGfa,MAAO,CACLhB,KAAMQ,QACNF,SAAS,IAIbW,SAAU,CACRC,iBACE,IAAKC,KAAKpB,OAAQ,OAAO,KAEzB,IAAIqB,EAAkB,CACpBC,YAAa,kBACbC,MAAO,CACL,CAAC,oBAAoBH,KAAKpB,SAAW,IASzC,OALIoB,KAAKZ,gBACPa,EAAOD,KAAKI,mBAAmBJ,KAAKK,cAAeJ,GACnDA,EAAKE,MAAM,+BAAgC,GAGtCH,KAAKM,eAAe,MAAOL,IAEpCM,sBACE,IAAKP,KAAKT,YAAa,OAAO,KAE9B,MAAMiB,EAAQR,KAAKS,UAEnB,OAAOT,KAAKM,eAAeI,OAAM,CAC/BR,YAAa,uBACbvB,MAAO,CACL6B,QACAf,MAAM,EACNkB,OAAO,GAETC,MAAO,CACL,aAAcZ,KAAKa,SAASC,KAAKC,EAAEf,KAAKd,aAE1C8B,GAAI,CACFC,MAAO,IAAOjB,KAAKkB,UAAW,IAE/B,CACDlB,KAAKM,eAAea,OAAO,CACzBxC,MAAO,CAAE6B,UACRR,KAAKR,cAGZ4B,eACE,OAAKpB,KAAKqB,aAEHrB,KAAKM,eAAea,OAAO,CAChCjB,YAAa,gBACbvB,MAAO,CAAE6B,MAAOR,KAAKS,YACpBT,KAAKqB,cALuB,MAOjCC,UACE,MAAMA,EAAmC,IACpChD,OAAOiD,QAAQzB,SAASwB,QAAQE,KAAKxB,MACxC,kBAAmBX,QAAQW,KAAKpB,QAChC,iBAAkBoB,KAAKV,MACvB,oBAAqBU,KAAKN,SAC1B,qBAAsBM,KAAKL,UAC3B,gBAAiBK,KAAKJ,MAOxB,OAJII,KAAKpB,SACP0C,EAAQ,mBAAmBtB,KAAKpB,SAAY,GAGvC0C,GAETjB,gBACE,OAAOL,KAAKQ,OAASR,KAAKnB,MAE5BwC,eACE,OAAkB,IAAdrB,KAAKP,OACgB,kBAAdO,KAAKP,MAAqBO,KAAKP,KAAaO,KAAKP,OACvD,CAAC,QAAS,OAAQ,UAAW,WAAWR,SAASe,KAAKnB,OAEpD,IAAImB,KAAKnB,OAElB4C,iBACE,OACEzB,KAAK0B,SACJrC,QAAQW,KAAKpB,SAAWoB,KAAKZ,eAGlCsC,UACE,OAAO1B,KAAKJ,MAAQI,KAAKN,UAE3Be,YACE,OAAOT,KAAKyB,eAAiBzB,KAAKK,mBAAgBsB,GAEpDC,SACE,SACE5B,KAAKnB,MACJmB,KAAKZ,eACLY,KAAKN,WAGDmC,OAAUN,QAAQzB,SAAS8B,OAAOJ,KAAKxB,QAIlD8B,UAEM9B,KAAK+B,OAAOC,eAAe,YAC7BC,eAAS,UAAW,WAAYjC,OAIpCkC,QAAS,CACPC,aACE,MAAMC,EAAW,CACfpC,KAAKqC,OAAOC,SAAWtC,KAAKoB,aAC5BpB,KAAKuC,aACLvC,KAAKD,eACLC,KAAKqC,OAAOG,OACZxC,KAAKyC,aAAaC,MACd1C,KAAKyC,aAAaC,MAAM,CAAEC,OAAQ3C,KAAK2C,SACvC3C,KAAKO,qBAGLN,EAAkB,CACtBC,YAAa,oBAGf,OAAOF,KAAKM,eAAe,MAAOL,EAAMmC,IAE1CG,aACE,OAAOvC,KAAKM,eAAe,MAAO,CAChCJ,YAAa,oBACZF,KAAKqC,OAAOlD,UAEjByD,WACE,IAAI3C,EAAkB,CACpBC,YAAa,UACbU,MAAO,CACLiC,KAAM,SAER7B,GAAIhB,KAAK8C,WACT3C,MAAOH,KAAKsB,QACZyB,MAAO/C,KAAKgD,OACZC,WAAY,CAAC,CACXvE,KAAM,OACNmB,MAAOG,KAAKkB,YAIhB,IAAKlB,KAAKZ,cAAe,CACvB,MAAM8D,EAAWlD,KAAK0B,QAAU1B,KAAKmD,aAAenD,KAAKI,mBACzDH,EAAOiD,EAASlD,KAAKK,cAAeJ,GAGtC,OAAOD,KAAKM,eAAe,MAAOL,EAAM,CAACD,KAAKmC,gBAGhDQ,SACE3C,KAAKkB,UAAYlB,KAAKkB,WAI1BkC,OAAQC,GACN,MAAMD,EAASpD,KAAK4C,WAEpB,OAAK5C,KAAKsD,WAEHD,EAAE,aAAc,CACrB1E,MAAO,CACLD,KAAMsB,KAAKsD,WACXC,OAAQvD,KAAKuD,OACbC,KAAMxD,KAAKwD,OAEZ,CAACJ,IARyBA,M,0GC1OjC,MAAMK,EAAc,CAAC,KAAM,KAAM,KAAM,MAEjCC,EAAY,CAAC,QAAS,MAAO,UAEnC,SAASC,EAAWC,EAAgBC,GAClC,OAAOJ,EAAYK,OAAO,CAACnF,EAAOK,KAChCL,EAAMiF,EAASG,eAAW/E,IAAQ6E,IAC3BlF,GACN,IAGL,MAAMqF,EAAkBC,GAAa,IAAIP,EAAW,WAAY,WAAWzE,SAASgF,GAC9EC,EAAaP,EAAU,QAAS,KAAM,CAC1C9E,KAAMC,OACNK,QAAS,KACTJ,UAAWiF,KAGPG,EAAoBF,GAAa,IAAIP,EAAW,gBAAiB,gBAAgBzE,SAASgF,GAC1FG,EAAeT,EAAU,UAAW,KAAM,CAC9C9E,KAAMC,OACNK,QAAS,KACTJ,UAAWoF,KAGPE,EAAyBJ,GAAa,IAAIP,EAAW,gBAAiB,eAAgB,WAAWzE,SAASgF,GAC1GK,EAAoBX,EAAU,eAAgB,KAAM,CACxD9E,KAAMC,OACNK,QAAS,KACTJ,UAAWsF,KAGPE,EAAU,CACdC,MAAOC,OAAOC,KAAKR,GACnBS,QAASF,OAAOC,KAAKN,GACrBQ,aAAcH,OAAOC,KAAKJ,IAGtBO,EAAW,CACfL,MAAO,QACPG,QAAS,UACTC,aAAc,iBAGhB,SAASE,EAAiBjG,EAA4BkG,EAAc/F,GAClE,IAAIgG,EAAYH,EAAShG,GACzB,GAAW,MAAPG,EAAJ,CAGA,GAAI+F,EAAM,CAER,MAAME,EAAaF,EAAKG,QAAQrG,EAAM,IACtCmG,GAAa,IAAIC,EAInB,OADAD,GAAa,IAAIhG,EACVgG,EAAUG,eAGnB,MAAMC,EAAQ,IAAIC,IAEHC,oBAAI7G,OAAO,CACxBC,KAAM,QACN6G,YAAY,EACZ5G,MAAO,CACL6G,IAAK,CACH3G,KAAMC,OACNK,QAAS,OAEXG,MAAOD,QACPoG,UAAWpG,QACXmF,MAAO,CACL3F,KAAMC,OACNK,QAAS,KACTJ,UAAWiF,MAEVE,EACHS,QAAS,CACP9F,KAAMC,OACNK,QAAS,KACTJ,UAAWoF,MAEVC,EACHQ,aAAc,CACZ/F,KAAMC,OACNK,QAAS,KACTJ,UAAWsF,MAEVC,GAELlB,OAAQC,GAAG,MAAE1E,EAAF,KAASsB,EAAT,SAAemC,IAExB,IAAIsD,EAAW,GACf,IAAK,MAAMX,KAAQpG,EACjB+G,GAAY5G,OAAQH,EAAcoG,IAEpC,IAAIY,EAAYP,EAAMQ,IAAIF,GAE1B,IAAKC,EAAW,CAGd,IAAI9G,EACJ,IAAKA,KAHL8G,EAAY,GAGCpB,EACXA,EAAQ1F,GAAMgH,QAAQd,IACpB,MAAMlF,EAAiBlB,EAAcoG,GAC/BC,EAAYF,EAAgBjG,EAAMkG,EAAMlF,GAC1CmF,GAAWW,EAAWG,KAAKd,KAInCW,EAAUG,KAAK,CACb,aAAcnH,EAAM8G,UACpB,aAAc9G,EAAMW,MACpB,CAAC,SAASX,EAAM6F,OAAU7F,EAAM6F,MAChC,CAAC,WAAW7F,EAAMgG,SAAYhG,EAAMgG,QACpC,CAAC,iBAAiBhG,EAAMiG,cAAiBjG,EAAMiG,eAGjDQ,EAAMW,IAAIL,EAAUC,GAGtB,OAAOtC,EACL1E,EAAM6G,IACNQ,eAAU/F,EAAM,CACdC,YAAa,MACbC,MAAOwF,IAETvD,O,4DCtHD6D,E,oFASL,SAASC,EAAgBC,GACvB,MAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAOC,KAAKpH,GAAOmH,EAASlH,SAASD,IAGlF,SAASqH,EAAW5G,GAClB,MAAQ,0CAA0C6G,KAAK7G,IAAS,UAAU6G,KAAK7G,IAASA,EAAK8G,OAAS,GAdxG,SAAKN,GACHA,mBACAA,kBACAA,oBACAA,mBACAA,kBACAA,oBANF,CAAKA,MAAQ,KAiBb,MAAM9E,EAAQ9C,eACZmI,OACAC,OACAC,OACA7E,QAEApD,OAAO,CACPC,KAAM,SAENC,MAAO,CACLW,MAAOD,QACPsH,SAAUtH,QACVuH,KAAMvH,QACNwH,MAAOxH,QACPyH,KAAM,CAACC,OAAQjI,QACf0G,IAAK,CACH3G,KAAMC,OACNkI,UAAU,EACV7H,QAAS,MAIbW,SAAU,CACRmH,SACE,OAAO,GAETC,mBACE,OAAO7H,QACLW,KAAK8C,WAAW7B,OAASjB,KAAK8C,WAAW,aAK/CZ,QAAS,CACPiF,UACE,IAAIC,EAAW,GAGf,OAFIpH,KAAKqC,OAAOlD,UAASiI,EAAWpH,KAAKqC,OAAOlD,QAAQ,GAAGS,KAAMyH,QAE1DC,eAAkBtH,KAAMoH,IAEjCG,UACE,MAAMC,EAAQ,CACZC,OAAQzH,KAAKyH,OACb9G,MAAOX,KAAKW,MACZsG,OAAQjH,KAAKiH,OACbS,MAAO1H,KAAK0H,MACZC,OAAQ3H,KAAK2H,QAGTC,EAAelD,eAAK8C,GAAOK,KAAKC,GAAON,EAAMM,IAEnD,OACGF,GAAgB3B,EAAS2B,IAAkBG,eAAc/H,KAAK8G,OAInEkB,iBACE,MAAO,CACL9H,YAAa,qBACbC,MAAO,CACL,mBAAoBH,KAAK2G,SACzB,eAAgB3G,KAAK4G,KACrB,eAAgB5G,KAAKkH,iBACrB,gBAAiBlH,KAAK6G,MACtB,gBAAiB7G,KAAKV,OAExBsB,MAAO,CACL,eAAgBZ,KAAKkH,iBACrBP,SAAU3G,KAAKkH,kBAAoBlH,KAAK2G,SACxC9H,KAAMmB,KAAKkH,iBAAmB,cAAWvF,KACtC3B,KAAKiI,QAEVjH,GAAIhB,KAAK8C,aAGboF,oBACE,MAAMC,EAAWnI,KAAKuH,UAChBa,EAAc,IACfpI,KAAKgI,iBACRjF,MAAOoF,EAAW,CAChBA,WACAE,OAAQF,EACRG,MAAOH,QACLxG,GAIN,OAFA3B,KAAKuI,YAAYH,GAEVA,GAETG,YAAatI,GACXA,EAAKE,MAAQ,IAAKF,EAAKE,SAAUH,KAAKwI,cACtCxI,KAAKmD,aAAanD,KAAKQ,MAAOP,IAEhCwI,eAAgBhJ,EAAc4D,GAC5B,MAAMqF,EAA6B,GAC7BzI,EAAOD,KAAKgI,iBAElB,IAAI7B,EAAW,iBAGf,MAAMwC,EAAiBlJ,EAAKmJ,QAAQ,KAC9BC,EAAiBF,IAAmB,EAEtCE,EAEFH,EAAY5C,KAAKrG,IAEjB0G,EAAW1G,EAAKqJ,MAAM,EAAGH,GACrBzC,EAAeC,KAAWA,EAAW,KAG3ClG,EAAKE,MAAMgG,IAAY,EACvBlG,EAAKE,MAAMV,IAASoJ,EAEpB,MAAMV,EAAWnI,KAAKuH,UAKtB,OAJIY,IAAUlI,EAAK8C,MAAQ,CAAEoF,aAE7BnI,KAAKuI,YAAYtI,GAEVoD,EAAErD,KAAKkH,iBAAmB,SAAWlH,KAAKwF,IAAKvF,EAAMyI,IAE9DK,cAAetJ,EAAc4D,GAC3B,MAAM2F,EAAqB,CACzB7I,MAAO,cACPS,MAAO,CACLqI,MAAO,6BACPC,QAAS,YACTrG,KAAM,MACN,eAAe,IAIbiE,EAAO9G,KAAKuH,UASlB,OARIT,IACFkC,EAAQjG,MAAQ,CACdoF,SAAUrB,EACVuB,OAAQvB,EACRwB,MAAOxB,IAIJzD,EAAErD,KAAKkH,iBAAmB,SAAW,OAAQlH,KAAKkI,oBAAqB,CAC5E7E,EAAE,MAAO2F,EAAS,CAChB3F,EAAE,OAAQ,CACRzC,MAAO,CACLuI,EAAG1J,UAMb2J,uBACE3J,EACA4D,GAEA,MAAMpD,EAAkB,CACtBE,MAAO,CACL,qBAAqB,IAInB2G,EAAO9G,KAAKuH,UACdT,IACF7G,EAAK8C,MAAQ,CACXoF,SAAUrB,EACVuB,OAAQvB,EACRwB,MAAOxB,IAIX9G,KAAKuI,YAAYtI,GAEjB,MAAMoJ,EAAY5J,EAAK4J,UAIvB,OAHApJ,EAAKtB,MAAQc,EAAKd,MAClBsB,EAAKqJ,SAAWrJ,EAAKe,GAEdqC,EAAErD,KAAKkH,iBAAmB,SAAW,OAAQlH,KAAKkI,oBAAqB,CAC5E7E,EAAEgG,EAAWpJ,OAKnBmD,OAAQC,GACN,MAAM5D,EAAOO,KAAKmH,UAElB,MAAoB,kBAAT1H,EACL4G,EAAU5G,GACLO,KAAK+I,cAActJ,EAAM4D,GAE3BrD,KAAKyI,eAAehJ,EAAM4D,GAG5BrD,KAAKoJ,uBAAuB3J,EAAM4D,MAI9BiC,oBAAI7G,OAAO,CACxBC,KAAM,SAEN6K,aAAcpI,EAEdoE,YAAY,EAEZnC,OAAQC,GAAG,KAAEpD,EAAF,SAAQmC,IACjB,IAAIgF,EAAW,GAcf,OAXInH,EAAKuJ,WACPpC,EAAWnH,EAAKuJ,SAASC,aACvBxJ,EAAKuJ,SAASE,WACdtC,SAIKnH,EAAKuJ,SAASC,mBACdxJ,EAAKuJ,SAASE,WAGhBrG,EAAElC,EAAOlB,EAAMmH,EAAW,CAACA,GAAYhF,O,oCC3PlD,kJA4BA,MAAMuH,EAAatL,eACjBuL,OACAC,OACAC,OACAC,OACAC,OACAC,QAIaN,SAAWlL,OAAO,CAC/BC,KAAM,WAENuE,WAAY,CAAEiH,qBAEdvL,MAAO,CACLwL,KAAM9K,QACNsH,SAAUtH,QACV+K,WAAY/K,QACZgL,MAAOhL,QACPiL,SAAU,CAACxL,OAAQiI,QACnBwD,iBAAkBlL,QAClBkE,OAAQ,CACN1E,KAAMC,OACNK,QAAS,iBAEXqL,WAAYnL,QACZoL,YAAa,CACX5L,KAAMQ,QACNF,SAAS,GAEXuL,WAAYrL,QACZiE,WAAY,CACVzE,KAAM,CAACC,OAAQO,SACfF,QAAS,qBAEXmJ,MAAO,CAACxJ,OAAQiI,SAGlB9G,OACE,MAAO,CACL0K,YAAa,KACbC,SAAS,EACTC,gBAAiB,EACjBC,eAAgB,IAChBC,sBAAuB,OAI3BjL,SAAU,CACRwB,UACE,MAAO,CACL,EAAE,YAAYtB,KAAKgL,cAAgB3D,SAAS,EAC5C,mBAAoBrH,KAAKkB,SACzB,uBAAwBlB,KAAKwK,WAC7B,uBAAwBxK,KAAKoK,WAC7B,uBAAwBpK,KAAK0K,WAC7B,qBAAsB1K,KAAK4K,UAG/BK,iBACE,MAAO,CACL,qBAAqB,EACrB,4BAA6BjL,KAAKkB,WAGtCgK,eACE,OAAO7L,UACHW,KAAKqC,OAAO8I,aACZnL,KAAKyC,aAAa0I,aAK1BC,MAAO,CACLlK,SAAUlC,G,MACJA,GACFgB,KAAKqL,OACLrL,KAAKsL,eAELtL,KAAKuL,gBACLvL,KAAKwL,SACqB,QAA1B,EAAAxL,KAAK+K,6BAAqBU,SAAEC,UAGhCtB,WAAYpL,GACLgB,KAAKkB,WAENlC,GACFgB,KAAKsL,aACLtL,KAAKuL,eAAc,KAEnBvL,KAAK2L,aACL3L,KAAK4L,iBAKX9J,UAEM9B,KAAK+B,OAAOC,eAAe,eAC7B6J,eAAQ,aAAc7L,OAI1B8L,cACE9L,KAAK+L,UAAU,KACb/L,KAAKgM,SAAWhM,KAAKkB,SACrBlB,KAAKkB,UAAYlB,KAAKqL,UAI1BY,gBACwB,qBAAXC,QAAwBlM,KAAKwL,UAG1CtJ,QAAS,CACPiK,eACEnM,KAAK4K,SAAU,EAGf5K,KAAK+L,UAAU,KACb/L,KAAK4K,SAAU,EACfsB,OAAOE,aAAapM,KAAK6K,gBACzB7K,KAAK6K,eAAiBqB,OAAOG,WAAW,IAAOrM,KAAK4K,SAAU,EAAQ,QAG1E0B,iBAAkBC,GAChB,MAAMC,EAASD,EAAEC,OAKjB,QACExM,KAAKyM,eACJzM,KAAKkB,UACNlB,KAAK0M,MAAMC,QAAQC,SAASJ,IAC3BxM,KAAK6M,SAAWL,IAAWxM,KAAK6M,QAAQC,IAAIF,SAASJ,KACnDxM,KAAK+M,cAAgB/M,KAAKgN,gBAEjC1B,aACMtL,KAAKoK,WACP6C,SAASC,gBAAgBvH,UAAUwH,IAAI,qBAEvCrD,OAAYvI,QAAQW,QAAQoJ,WAAW9J,KAAKxB,OAGhDqL,QACGrL,KAAKoK,aAAepK,KAAKoN,aAAepN,KAAK4L,aAE9C5L,KAAK+L,UAAU,KACb/L,KAAK+L,UAAU,K,SACS,QAAjB,EAAA/L,KAAK0M,MAAMW,cAAM5B,WAAA,EAAAA,EAAEmB,SAASK,SAASK,kBACxCtN,KAAK+K,sBAAwBkC,SAASK,cACrB,QAAjB,EAAAtN,KAAK0M,MAAMW,cAAME,SAAE7B,SAErB1L,KAAKwN,YAIXA,OACEtB,OAAOuB,iBAAiB,UAAWzN,KAAK0N,YAE1ClC,SACEU,OAAOyB,oBAAoB,UAAW3N,KAAK0N,YAE7CE,eAAgBrB,GACdvM,KAAK6N,MAAM,gBAAiBtB,GAExBvM,KAAKwK,WACPxK,KAAKuK,kBAAoBvK,KAAKmM,eAE9BnM,KAAKkB,UAAW,GAGpB4M,UAAWvB,GACT,GAAIA,EAAEwB,UAAYC,OAASC,MAAQjO,KAAKkO,oBAAoB3H,OAC1D,GAAKvG,KAAKwK,WAIExK,KAAKuK,kBACfvK,KAAKmM,mBALe,CACpBnM,KAAKkB,UAAW,EAChB,MAAMiK,EAAYnL,KAAKmO,eACvBnO,KAAK+L,UAAU,IAAMZ,GAAcA,EAA0BO,SAKjE1L,KAAK6N,MAAM,UAAWtB,IAIxBmB,UAAWnB,GACT,IAAKA,IAAMvM,KAAKyK,YAAa,OAE7B,MAAM+B,EAASD,EAAEC,OAEjB,GACIA,GACFxM,KAAK0M,MAAMW,SAEV,CAACJ,SAAUjN,KAAK0M,MAAMW,QAAQpO,SAASuN,KAEvCxM,KAAK0M,MAAMW,OAAOT,SAASJ,IAE5BxM,KAAK+M,cAAgB/M,KAAKgN,iBAEzBhN,KAAKoO,2BAA2BhI,KAAKiI,GAAMA,EAAGzB,SAASJ,IAExD,CAEA,MAAM8B,EAAYtO,KAAK0M,MAAMW,OAAOkB,iBAAiB,iGAC/CF,EAAK,IAAIC,GAAWzG,KAAKwG,IAAOA,EAAGG,aAAa,cAAgBH,EAAGI,QAAQ,oBACjFJ,GAAMA,EAAG3C,UAGbnJ,aACE,OAAOvC,KAAK0O,gBAAgB,IAAM,CAChC1O,KAAKM,eAAeqO,OAAgB,CAClChQ,MAAO,CACLiQ,MAAM,EACNvE,MAAOrK,KAAKqK,MACZF,KAAMnK,KAAKmK,OAEZ,CACDnK,KAAKM,eAAe,MAAO,CACzBH,MAAOH,KAAKiL,eACZrK,MAAO,CACLiC,KAAM,SACN,aAAc7C,KAAKoN,iBAAczL,EAAY,UAC1C3B,KAAK6O,mBAEV7N,GAAI,CAAE8N,QAAS9O,KAAK8N,WACpB/K,MAAO,CAAEgM,OAAQ/O,KAAK+M,cACtBiC,IAAK,WACJ,CAAChP,KAAKiP,uBAIfA,gBACE,MAAMtC,EAAU3M,KAAKkP,kBAErB,OAAKlP,KAAKsD,WAEHtD,KAAKM,eAAe,aAAc,CACvC3B,MAAO,CACLD,KAAMsB,KAAKsD,WACXC,OAAQvD,KAAKuD,OACb4L,QAAQ,IAET,CAACxC,IARyBA,GAU/BuC,kBACE,MAAMjP,EAAkB,CACtBE,MAAOH,KAAKsB,QACZV,MAAO,CACLwO,SAAUpP,KAAKkB,SAAW,OAAIS,GAEhCqN,IAAK,SACL/L,WAAY,CACV,CACEvE,KAAM,gBACNmB,MAAO,CACLwP,QAASrP,KAAK4N,eACdtB,iBAAkBtM,KAAKsM,iBACvBgD,QAAStP,KAAKoO,2BAGlB,CAAE1P,KAAM,OAAQmB,MAAOG,KAAKkB,WAE9B6B,MAAO,CACLwM,gBAAiBvP,KAAKuD,SAY1B,OARKvD,KAAKoK,aACRnK,EAAK8C,MAAQ,IACR9C,EAAK8C,MACRuH,SAAUvC,eAAc/H,KAAKsK,UAC7BhC,MAAOP,eAAc/H,KAAKsI,SAIvBtI,KAAKM,eAAe,MAAOL,EAAMD,KAAKwP,oBAIjDpM,OAAQC,GACN,OAAOA,EAAE,MAAO,CACdnD,YAAa,sBACbC,MAAO,CACL,gCACkB,KAAhBH,KAAKyP,SACW,IAAhBzP,KAAKyP,QACW,WAAhBzP,KAAKyP,SAER,CACDzP,KAAK0P,eACL1P,KAAKuC,mB,sFCrTIlE,iBACbsR,QAEAlR,OAAO,CACPC,KAAM,sBAENC,MAAO,CACLiR,KAAM,CACJ/Q,KAAMC,OACNK,QAAS,IAEXwH,SAAUtH,QACVwQ,SAAUxQ,QACVyQ,cAAezQ,QACfQ,MAAO,CACLhB,KAAMC,QAERiR,KAAM,CACJlR,KAAM,CAACkI,OAAQjI,QACfK,QAAS,IAEX6Q,SAAU,CACRnR,KAAMC,SAIVmB,KAAM,KAAM,CACVgQ,aAAa,IAGfnQ,SAAU,CACRoQ,qBACE,OAAOlQ,KAAKiQ,YAAc,4BAA8B,sBAI5D7E,MAAO,CACLvL,MAAOb,EAAamR,GAClBnQ,KAAKiQ,YAAcjR,EAAMmR,IAI7BjO,QAAS,CACPkO,cACE,OAAOpQ,KAAKM,eAAea,OAAO,CAChCxC,MAAO,CACLwL,MAAM,IAEPnK,KAAKgQ,WAEVK,aACE,OAAOrQ,KAAKsQ,gBAAgB,iBAAiB,EAAM,CACjDxR,OAAOkB,KAAK+P,MACZ/P,KAAKgQ,SAAWhQ,KAAKoQ,cAAgB,OACpC,EAAO,8BAEZG,eACE,OAAOvQ,KAAKM,eAAe,aAAc,CACvC3B,MAAO,CACLD,KAAMsB,KAAKkQ,qBAEZ,CACDlQ,KAAKM,eAAe,MAAO,CACzBkJ,SAAU,CAAEE,UAAW1J,KAAK4P,MAAQ,UACpC9H,IAAK9H,KAAKH,WAIhB2Q,eACE,OAAOxQ,KAAKsQ,gBAAgB,iBAAiB,EAAO,CAACtQ,KAAKuQ,iBAAiB,EAAO,+BAItFnN,OAAQC,GACN,OAAOA,EAAE,MAAO,CACdnD,YAAa,sBACbC,MAAO,CACL,gCAAiCH,KAAK2G,WAEvC,CACD3G,KAAKqQ,aACLrQ,KAAKwQ,oB,wEC5EX,SAASC,EACPC,EACAnP,EACAoP,EAA+B,CAAEC,MAAO,EAAGrK,OAAQ,IAEnD,MAAMsK,EAAiBC,IACrB,MAAOf,EAAMgB,EAAOnB,GAAQkB,EAAWzJ,OAAO2J,MAAM,KAAK,GAAGA,MAAM,KAClE,MAAO,CAACC,eAAIlB,EAAM,GAAIkB,eAAIF,GAAS,GAAIE,eAAIrB,GAAQ,IAAIsB,KAAK,MAG9D,IACE,MAAMC,EAAgB,IAAIC,KAAKC,eAAeX,QAAU/O,EAAWJ,GACnE,OAAQuP,GAAuBK,EAAcG,OAAO,IAAIC,KAAQV,EAAcC,GAAjB,oBAC7D,MAAOvE,GACP,OAAQoE,EAAcC,OAASD,EAAcpK,OACxCuK,GAAuBD,EAAcC,GAAYU,OAAOb,EAAcC,OAAS,EAAGD,EAAcpK,aACjG5E,GAIO8O,QCjCA,GAAC5Q,EAAe4R,KAC7B,MAAO1B,EAAMgB,GAASlR,EAAMmR,MAAM,KAAKU,IAAI3K,QAE3C,OAAIgK,EAAQU,IAAS,EACT1B,EAAO,EAAV,MACEgB,EAAQU,IAAS,GAChB1B,EAAO,EAAV,MAEA,GAAGA,KAAQkB,eAAIF,EAAQU,MCKnBpT,iBACboI,OACAkL,OACA9P,QAEApD,OAAO,CACPC,KAAM,uBAENC,MAAO,CACLgI,SAAUtH,QACViS,OAAQM,SACRC,IAAK/S,OACLgT,IAAKhT,OACLiT,cAAejT,OACfkT,SAAU,CACRnT,KAAMC,OACNK,QAAS,SAEX8S,cAAenT,OACfoT,SAAU,CACRrT,KAAMC,OACNK,QAAS,SAEX0Q,SAAUxQ,QACVQ,MAAO,CACLhB,KAAM,CAACkI,OAAQjI,QACfkI,UAAU,IAId/G,OACE,MAAO,CACLgQ,aAAa,IAIjBnQ,SAAU,CACRqS,YACE,OAAInS,KAAKsR,OACAtR,KAAKsR,OACHxS,OAAOkB,KAAKH,OAAOmR,MAAM,KAAK,GAChCP,EAA4BzQ,KAAKoS,cAAe,CAAErB,MAAO,OAAQhB,KAAM,UAAWsC,SAAU,OAAS,CAAE9L,OAAQ,IAE/GkK,EAA4BzQ,KAAKoS,cAAe,CAAErC,KAAM,UAAWsC,SAAU,OAAS,CAAE9L,OAAQ,MAK7G6E,MAAO,CACLvL,MAAOyS,EAAQC,GACbvS,KAAKiQ,YAAcqC,EAASC,IAIhCrQ,QAAS,CACPsQ,OAAQC,GACN,MAAMC,EAAcD,EAAS,EAAIzS,KAAK+R,cAAgB/R,KAAKiS,cACrDU,EAAYD,EAAc1S,KAAKa,SAASC,KAAKC,EAAE2R,QAAe/Q,EAC9DgF,EAAW3G,KAAK2G,UACnB8L,EAAS,GAAKzS,KAAK6R,KAAO7R,KAAK4S,gBAAgBH,GAAUzS,KAAK6R,KAC9DY,EAAS,GAAKzS,KAAK8R,KAAO9R,KAAK4S,gBAAgBH,GAAUzS,KAAK8R,IAEjE,OAAO9R,KAAKM,eAAeI,OAAM,CAC/BE,MAAO,CAAE,aAAc+R,GACvBhU,MAAO,CACLwL,KAAMnK,KAAKmK,KACXxD,WACAlH,MAAM,EACN4K,MAAOrK,KAAKqK,OAEdrJ,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBACF7S,KAAK6N,MAAM,QAAS7N,KAAK4S,gBAAgBH,OAG5C,CACDzS,KAAKM,eAAea,OAASsR,EAAS,KAAQzS,KAAKa,SAASiS,IAAO9S,KAAKkS,SAAWlS,KAAKgS,aAG5FY,gBAAiBnB,GACf,MAAO1B,EAAMgB,GAASjS,OAAOkB,KAAKH,OAAOmR,MAAM,KAAKU,IAAI3K,QAExD,OAAa,MAATgK,EACK,IAAGhB,EAAO0B,GAEVsB,EAAYjU,OAAOkB,KAAKH,OAAQ4R,IAG3CuB,YACE,MAAMxS,GAASR,KAAK2G,WAAa3G,KAAKQ,OAAS,UACzCyS,EAASjT,KAAKM,eAAe,MAAON,KAAKmD,aAAa3C,EAAO,CACjEsH,IAAKhJ,OAAOkB,KAAKH,SACf,CAACG,KAAKM,eAAe,SAAU,CACjCM,MAAO,CACL/B,KAAM,UAERmC,GAAI,CACFC,MAAO,IAAMjB,KAAK6N,MAAM,YAEzB,CAAC7N,KAAKqC,OAAOlD,SAAWa,KAAKmS,UAAUrT,OAAOkB,KAAKH,YAEhDyD,EAAatD,KAAKM,eAAe,aAAc,CACnD3B,MAAO,CACLD,KAAOsB,KAAKiQ,eAAiBjQ,KAAKa,SAASiS,IAAO,yBAA2B,mBAE9E,CAACG,IAEJ,OAAOjT,KAAKM,eAAe,MAAO,CAChCJ,YAAa,8BACbC,MAAO,CACL,wCAAyCH,KAAK2G,WAE/C,CAACrD,MAIRF,SACE,OAAOpD,KAAKM,eAAe,MAAO,CAChCJ,YAAa,uBACbC,MAAO,CACL,iCAAkCH,KAAK2G,YACpC3G,KAAKwI,eAET,CACDxI,KAAKwS,QAAQ,GACbxS,KAAKgT,YACLhT,KAAKwS,OAAO,Q,sDChJZ,SAAUU,EAA+BC,EAAeC,EAAwBvT,GACpF,OAAO4E,OAAOC,KAAKyO,EAASE,YAAYvP,OAAO,CAAC9C,EAAIsS,KAC9CA,EAAUC,SAASH,KACrBpS,EAAGsS,EAAUxK,MAAM,GAAIsK,EAAe7M,SAAYiN,GAAiBL,EAAStF,MAAMyF,EAAWzT,EAAO2T,IAG/FxS,GACN,IAGC,SAAUyS,EAAyBN,EAAeC,GACtD,OAAO3O,OAAOC,KAAKyO,EAASE,YAAYvP,OAAO,CAAC9C,EAAIsS,KAC9CA,EAAUC,SAASH,KACrBpS,EAAGsS,GAAaH,EAASE,WAAWC,IAG/BtS,GACN,ICfU,OAAC8P,EAAoBjS,KAClC,MAAOkR,EAAMgB,EAAQ,EAAGnB,EAAO,GAAKkB,EAAWE,MAAM,KACrD,MAAO,GAAGjB,KAAQkB,eAAIF,MAAUE,eAAIrB,KAAQ4B,OAAO,EAAG,CAAE5B,KAAM,GAAImB,MAAO,EAAGhB,KAAM,GAAIlR,KCJ1E,SAAU6U,EAAe9D,EAAciC,EAAaC,EAAa6B,GAC7E,QAASA,GAAaA,EAAU/D,OAC5BiC,GAAOjC,GAAQiC,EAAIL,OAAO,EAAG,QAC7BM,GAAOlC,GAAQkC,G,4BC6BNzT,iBACboI,OACAkL,OACA9P,QAEApD,OAAO,CACPwE,WAAY,CAAE2Q,cAEdjV,MAAO,CACLkV,aAAcjC,SACdkC,QAAShV,OACT6H,SAAUtH,QACViS,OAAQM,SACRmC,OAAQ,CACNlV,KAAM,CAACmV,MAAOpC,SAAUnN,QACxBtF,QAAS,IAAM,MAEjB8U,WAAY,CACVpV,KAAM,CAACmV,MAAOpC,SAAUnN,OAAQ3F,QAChCK,QAAS,IAAM,WAEjB0S,IAAK/S,OACLgT,IAAKhT,OACLoV,MAAO7U,QACPwQ,SAAUxQ,QACVqL,WAAYrL,QACZ8U,UAAW,CACTtV,KAAMC,OACNkI,UAAU,GAEZnH,MAAO,CAACf,OAAQkV,QAGlB/T,KAAM,KAAM,CACVgQ,aAAa,EACbmE,cAAe,OAGjBtU,SAAU,CACRoQ,qBACE,OAAQlQ,KAAKiQ,eAAiBjQ,KAAKa,SAASiS,IAAO,yBAA2B,kBAEhFuB,iBACE,OAAOtN,OAAO/G,KAAKmU,UAAUnD,MAAM,KAAK,IAAM,GAEhDsD,gBACE,OAAOvN,OAAO/G,KAAKmU,UAAUnD,MAAM,KAAK,MAI5C5F,MAAO,CACL+I,UAAW7B,EAAgBC,GACzBvS,KAAKiQ,YAAcqC,EAASC,IAIhCgC,UACEvU,KAAKoU,cAAgBI,eAASxU,KAAKyU,MAAO,MAG5CvS,QAAS,CACPwS,iBACEC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAO,CACL,mBAAoBJ,EACpB,+BAAgCE,EAChC,gBAAiBD,EACjB,eAAgBF,GAAa3U,KAAK2G,SAClC,cAAekO,IAAeC,EAC9B,iBAAkBF,EAClB,mBAAoBD,GAAa3U,KAAK2G,SACtC,kBAAmBmO,IAAcD,EACjC,gCAAiCE,EACjC,+BAAgCC,KAC7BhV,KAAKwI,eAGZyM,gBAAiBpV,EAAe8U,EAAoBO,GAClD,IAAIlV,KAAK2G,SAET,OAAOwO,eAAe,CACpBlU,MAAO,KACD0T,IAAc3U,KAAK6P,UAAU7P,KAAK6N,MAAM,QAAShO,KAEtDqT,EAA8BlT,KAAM,IAAIkV,EAAkBrV,KAE/DuV,UAAWvV,EAAe+U,EAAqBM,EAAwB/C,EAAgCkD,GAAe,GACpH,MAAMV,EAAYjB,EAAc7T,EAAOG,KAAK6R,IAAK7R,KAAK8R,IAAK9R,KAAK6T,cAC1DgB,EAAa7U,KAAK6U,WAAWhV,IAAU8U,EACvCG,EAAYjV,IAAUG,KAAK8T,QAC3B5Q,EAAW2R,EAAa7U,KAAKI,mBAAqBJ,KAAKmD,aACvD3C,GAASqU,GAAcC,KAAe9U,KAAKQ,OAAS,UAC1D,IAAIuU,GAAU,EACVC,GAAS,EAMb,OALIhV,KAAKkU,OAAWlU,KAAKH,OAASmU,MAAMsB,QAAQtV,KAAKH,SACnDkV,EAAUlV,IAAUG,KAAKH,MAAM,GAC/BmV,EAASnV,IAAUG,KAAKH,MAAMG,KAAKH,MAAM0G,OAAS,IAG7CvG,KAAKM,eAAe,SAAU4C,EAAS1C,EAAO,CACnDN,YAAa,QACbC,MAAOH,KAAK0U,iBACVC,IAAcU,EACdT,EACAC,EACAC,EACAC,EACAC,GAEFpU,MAAO,CACL/B,KAAM,UAER2K,SAAU,CACR7C,SAAU3G,KAAK2G,WAAagO,GAAaU,GAE3CrU,GAAIhB,KAAKiV,gBAAgBpV,EAAO8U,EAAWO,KACzC,CACFlV,KAAKM,eAAe,MAAO,CACzBJ,YAAa,kBACZ,CAACiS,EAAUtS,KACdG,KAAKuV,UAAU1V,MAGnB2V,eAAgB5F,GACd,MAAM6F,EAAYC,GAAyB1B,MAAMsB,QAAQI,GAAKA,EAAI,CAACA,GACnE,IAAIC,EACAC,EAAwB,GAY5B,OATED,EADE3B,MAAMsB,QAAQtV,KAAK+T,QACT/T,KAAK+T,OAAO9U,SAAS2Q,GACxB5P,KAAK+T,kBAAkBnC,SACpB5R,KAAK+T,OAAOnE,KAAS,EACxB5P,KAAK+T,QACF/T,KAAK+T,OAAOnE,KAEZ,EAGT+F,GAGHC,GADuB,IAAdD,EACKF,EAASE,GACa,kBAApB3V,KAAKiU,WACP,CAACjU,KAAKiU,YACgB,oBAApBjU,KAAKiU,WACPwB,EAASzV,KAAKiU,WAAWrE,IAC9BoE,MAAMsB,QAAQtV,KAAKiU,YACdjU,KAAKiU,WAELwB,EAASzV,KAAKiU,WAAWrE,IAGlCgG,EAAYC,OAAOH,GAAKA,IAbtB,IAeXH,UAAW3F,GACT,MAAMgG,EAAc5V,KAAKwV,eAAe5F,GAExC,OAAOgG,EAAYrP,OAASvG,KAAKM,eAAe,MAAO,CACrDJ,YAAa,+BACZ0V,EAAYlE,IAAIlR,GAASR,KAAKM,eAAe,MAAON,KAAKI,mBAAmBI,MAAY,MAE7FsV,cAAejW,EAAekW,GAC5B,MAAM5B,EAAY4B,EAAmBlW,GAE/BmW,EAA+C,IAAhC7B,EAAUnD,MAAM,KAAKzK,OAAe,OAAS,QAClE,OAAQ1G,EAAQ,KAAMG,KAAK6R,KAAMsC,GAAa8B,EAAmBjW,KAAK6R,IAAKmE,KACxEnW,EAAQ,KAAMG,KAAK8R,KAAMqC,GAAa8B,EAAmBjW,KAAK8R,IAAKkE,KAExEvB,MAAOlI,EAAewJ,GACpB/V,KAAK6N,MAAM,oBAAqBkI,EAAmBxJ,EAAE2J,UAEvDC,MAAOtW,EAAekW,GACpB/V,KAAK6N,MAAM,oBAAqBkI,EAAmBlW,KAErDuW,SAAUlW,EAAqBkC,EAAyB2T,GACtD,MAAMzS,EAAatD,KAAKM,eAAe,aAAc,CACnD3B,MAAO,CAAED,KAAMsB,KAAKkQ,qBACnB,CAAClQ,KAAKM,eAAe,QAAS,CAAEwH,IAAK9H,KAAKmU,WAAa/R,KAEpDiU,EAAiB,CACrB3X,KAAM,QACNmB,MAAO,CACL+G,KAAO2F,GAAqBA,EAAE+J,SAAW,IACtCtW,KAAK8V,cAAc,EAAGC,IAAuB/V,KAAKmW,MAAM,EAAGJ,GAC9DlP,MAAQ0F,GAAqBA,EAAE+J,QAAU,IACtCtW,KAAK8V,eAAe,EAAGC,IAAuB/V,KAAKmW,OAAO,EAAGJ,KAIpE,OAAO/V,KAAKM,eAAe,MAAO,CAChCJ,cACAC,MAAO,CACL,gCAAiCH,KAAK2G,YACnC3G,KAAKwI,cAEVxH,IAAMhB,KAAK2G,UAAY3G,KAAK0K,WAAc,CACxC+J,MAAQlI,IACNA,EAAEgK,iBACEvW,KAAK8V,cAAcvJ,EAAE2J,OAAQH,IAAuB/V,KAAKoU,cAAc7H,EAAGwJ,UAE9EpU,EACJsB,WAAY,CAACoT,IACZ,CAAC/S,KAENuR,WAAYhV,GACV,GAAImU,MAAMsB,QAAQtV,KAAKH,OAAQ,CAC7B,GAAIG,KAAKkU,OAA+B,IAAtBlU,KAAKH,MAAM0G,OAAc,CACzC,MAAOiQ,EAAMC,GAAM,IAAIzW,KAAKH,OAAO6W,OACnC,OAAOF,GAAQ3W,GAASA,GAAS4W,EAEjC,OAAsC,IAA/BzW,KAAKH,MAAM+I,QAAQ/I,GAI9B,OAAOA,IAAUG,KAAKH,U,YCjPbxB,iBACbsY,GAEAlY,OAAO,CACPC,KAAM,2BAENC,MAAO,CACLiY,eAAgB,CACd/X,KAAM,CAACC,OAAQiI,QACf5H,QAAS,GAEX0X,qBAAsB,CACpBhY,KAAM,CAACC,OAAQiI,QACf5H,QAAS,GAEX2X,mBAAoBzX,QACpB0X,SAAU1X,QACV2X,cAAepF,UAGjB9R,SAAU,CACRqS,YACE,OAAOnS,KAAKsR,QAAUb,EAA4BzQ,KAAKoS,cAAe,CAAE6E,IAAK,UAAW5E,SAAU,OAAS,CAAEzB,MAAO,EAAGrK,OAAQ,KAEjI2Q,mBACE,OAAOlX,KAAKgX,eAAiBvG,EAA4BzQ,KAAKoS,cAAe,CAAE+E,QAAS,SAAU9E,SAAU,SAE9G+E,WACE,MAAMC,EAAQC,SAAStX,KAAK4W,eAAgB,IAE5C,OAAO5W,KAAKkX,iBACRK,eAAY,GAAG7F,IAAI8F,GAAKxX,KAAKkX,iBAAkB,YAAWG,EAAQG,EAAI,MACtED,eAAY,GAAG7F,IAAI8F,GAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAAMA,EAAIH,GAAS,MAIlFnV,QAAS,CACP6T,mBAAoB0B,GAClB,OAAO1E,EAAY/S,KAAKmU,UAAWuD,KAAKjG,KAAKgG,GAAS,KAExDE,WACE,MAAMC,EAAO5X,KAAKoX,SAAS1F,IAAIuF,GAAOjX,KAAKM,eAAe,KAAM2W,IAKhE,OAJIjX,KAAK+W,UACPa,EAAKC,QAAQ7X,KAAKM,eAAe,OAG5BN,KAAKM,eAAe,QAASN,KAAK8X,MAAMF,KAGjDG,mCACE,MAAMC,EAAqB,IAAIzG,KAAK,GAAGvR,KAAKsU,iBAAiBrD,eAAIjR,KAAKqU,eAAiB,wBACjF4D,EAAUD,EAAmBE,YAEnC,OAAQD,EAAUX,SAAStX,KAAK4W,gBAAkB,GAAK,GAEzDuB,cAAeC,GACb,OAAOC,eACLrY,KAAKsU,cACLtU,KAAKqU,eACL+D,EACAd,SAAStX,KAAK4W,gBACdU,SAAStX,KAAK6W,wBAGlByB,cAAeD,GACb,OAAOrY,KAAKM,eAAe,KAAM,CAC/BN,KAAKM,eAAe,QAAS,CAC3BJ,YAAa,mCACZpB,OAAOuZ,GAAYE,SAAS,EAAG,SAItCC,WACE,MAAMpW,EAAW,GACXqW,EAAc,IAAIlH,KAAKvR,KAAKsU,cAAetU,KAAKqU,eAAiB,EAAG,GAAGqE,UAC7E,IAAIC,EAAO,GACP1B,EAAMjX,KAAK+X,mCAEX/X,KAAK+W,UACP4B,EAAK7S,KAAK9F,KAAKsY,cAActY,KAAKmY,cAAc,KAGlD,MAAMS,EAAgB5Y,KAAKqU,eAAiBrU,KAAKsU,cAAgBtU,KAAKsU,cAAgB,EAChFuE,GAAa7Y,KAAKqU,eAAiB,IAAM,GACzCyE,EAA4B,IAAIvH,KAAKvR,KAAKsU,cAAetU,KAAKqU,eAAgB,GAAGqE,UACjFK,EAAa/Y,KAAK+W,SAAW,EAAI,EAEvC,MAAOE,IAAO,CACZ,MAAMrH,EAAO,GAAGgJ,KAAiB3H,eAAI4H,EAAY,MAAM5H,eAAI6H,EAA4B7B,KAEvF0B,EAAK7S,KAAK9F,KAAKM,eAAe,KAAMN,KAAK8W,mBAAqB,CAC5D9W,KAAKoV,UAAUxF,GAAM,EAAM,OAAQ5P,KAAKmS,WAAW,IACjD,KAGN,IAAK8E,EAAM,EAAGA,GAAOwB,EAAaxB,IAAO,CACvC,MAAMrH,EAAO,GAAG5P,KAAKsU,iBAAiBrD,eAAIjR,KAAKqU,eAAiB,MAAMpD,eAAIgG,KAE1E0B,EAAK7S,KAAK9F,KAAKM,eAAe,KAAM,CAClCN,KAAKoV,UAAUxF,GAAM,EAAM,OAAQ5P,KAAKmS,cAGtCwG,EAAKpS,OAASwS,IAAe,IAC/B3W,EAAS0D,KAAK9F,KAAK8X,MAAMa,IACzBA,EAAO,GACH3Y,KAAK+W,WAAaE,EAAMwB,GAAezY,KAAK8W,qBAC9C6B,EAAK7S,KAAK9F,KAAKsY,cAActY,KAAKmY,cAAclB,EAAM,MAK5D,MAAM+B,EAAwC,KAAxBhZ,KAAKqU,eAAwBrU,KAAKsU,cAAgB,EAAItU,KAAKsU,cAC3E2E,GAAajZ,KAAKqU,eAAiB,GAAK,GAC9C,IAAI6E,EAAe,EAEnB,MAAOP,EAAKpS,OAASwS,EAAY,CAC/B,MAAMnJ,EAAO,GAAGoJ,KAAiB/H,eAAIgI,EAAY,MAAMhI,eAAIiI,OAE3DP,EAAK7S,KAAK9F,KAAKM,eAAe,KAAMN,KAAK8W,mBAAqB,CAC5D9W,KAAKoV,UAAUxF,GAAM,EAAM,OAAQ5P,KAAKmS,WAAW,IACjD,KAON,OAJIwG,EAAKpS,QACPnE,EAAS0D,KAAK9F,KAAK8X,MAAMa,IAGpB3Y,KAAKM,eAAe,QAAS8B,IAEtC0V,MAAO1V,GACL,MAAO,CAACpC,KAAKM,eAAe,KAAM8B,MAItCgB,SACE,OAAOpD,KAAKoW,SAAS,gDAAiD,CACpEpW,KAAK2X,WACL3X,KAAKwY,YACJxY,KAAK+V,uBC5IG1X,iBACbsY,GAEAlY,OAAO,CACPC,KAAM,4BAENoB,SAAU,CACRqS,YACE,OAAOnS,KAAKsR,QAAUb,EAA4BzQ,KAAKoS,cAAe,CAAErB,MAAO,QAASsB,SAAU,OAAS,CAAEzB,MAAO,EAAGrK,OAAQ,MAInIrE,QAAS,CACP6T,mBAAoB0B,GAClB,MAAO,IAAGH,SAAStX,KAAKmU,UAAW,IAAMuD,KAAKjG,KAAKgG,GAAS,KAE9De,WACE,MAAMpW,EAAW,GACX+W,EAAOnF,MAAM,GAAGoF,KAAK,MACrBT,EAAO,GAAKQ,EAAK5S,OAEvB,IAAK,IAAI8S,EAAM,EAAGA,EAAMV,EAAMU,IAAO,CACnC,MAAMC,EAAMH,EAAKzH,IAAI,CAAC6H,EAAGC,KACvB,MAAMzI,EAAQsI,EAAMF,EAAK5S,OAASiT,EAC5B5J,EAAO,GAAG5P,KAAKsU,iBAAiBrD,eAAIF,EAAQ,KAClD,OAAO/Q,KAAKM,eAAe,KAAM,CAC/BwH,IAAKiJ,GACJ,CACD/Q,KAAKoV,UAAUxF,GAAM,EAAO,QAAS5P,KAAKmS,eAI9C/P,EAAS0D,KAAK9F,KAAKM,eAAe,KAAM,CACtCwH,IAAKuR,GACJC,IAGL,OAAOtZ,KAAKM,eAAe,QAAS8B,KAIxCgB,SACE,OAAOpD,KAAKoW,SAAS,iDAAkD,CACrEpW,KAAKwY,YACJxY,KAAK+V,uBCjCG1X,G,UAAAA,eAQboI,OACAkL,QAEAlT,OAAO,CACPC,KAAM,sBAENC,MAAO,CACL2S,OAAQM,SACRC,IAAK,CAAC9K,OAAQjI,QACdgT,IAAK,CAAC/K,OAAQjI,QACd+Q,SAAUxQ,QACVQ,MAAO,CAACkH,OAAQjI,SAGlBmB,OACE,MAAO,CACLwZ,aAAc,YAIlB3Z,SAAU,CACRqS,YACE,OAAOnS,KAAKsR,QAAUb,EAA4BzQ,KAAKoS,cAAe,CAAErC,KAAM,UAAWsC,SAAU,OAAS,CAAE9L,OAAQ,MAI1HgO,UACElI,WAAW,KACT,MAAMqN,EAAa1Z,KAAK8M,IAAI6M,uBAAuB,UAAU,GACzDD,EACF1Z,KAAK8M,IAAI8M,UAAYF,EAAWG,UAAY7Z,KAAK8M,IAAIgN,aAAe,EAAIJ,EAAWI,aAAe,EACzF9Z,KAAK6R,MAAQ7R,KAAK8R,IAC3B9R,KAAK8M,IAAI8M,UAAY5Z,KAAK8M,IAAIiN,cACpB/Z,KAAK6R,KAAO7R,KAAK8R,IAC3B9R,KAAK8M,IAAI8M,UAAY,EAErB5Z,KAAK8M,IAAI8M,UAAY5Z,KAAK8M,IAAIiN,aAAe,EAAI/Z,KAAK8M,IAAIgN,aAAe,KAK/E5X,QAAS,CACP8X,YAAajK,GACX,MAAMkK,EAAYja,KAAKmS,UAAU,GAAGpC,GAC9BmK,EAAS5C,SAAStX,KAAKH,MAAO,MAAQkQ,EACtCvP,EAAQ0Z,IAAWla,KAAKQ,OAAS,WAEvC,OAAOR,KAAKM,eAAe,KAAMN,KAAKmD,aAAa3C,EAAO,CACxDsH,IAAKiI,EACL5P,MAAO,CAAE+Z,UACTlZ,GAAImU,eAAe,CACjBlU,MAAO,IAAMjB,KAAK6N,MAAM,QAASkC,IAChCmD,EAA8BlT,KAAM,QAAS+P,MAC9CkK,IAGNE,eACE,MAAM/X,EAAW,GACXgY,EAAepa,KAAKH,MAAQyX,SAAStX,KAAKH,MAAO,KAAM,IAAI0R,MAAO8I,cAClEC,EAAUta,KAAK8R,IAAMwF,SAAStX,KAAK8R,IAAK,IAAOsI,EAAe,IAC9DG,EAAU7C,KAAK7F,IAAIyI,EAASta,KAAK6R,IAAMyF,SAAStX,KAAK6R,IAAK,IAAOuI,EAAe,KAEtF,IAAK,IAAIrK,EAAOuK,EAASvK,GAAQwK,EAASxK,IACxC3N,EAAS0D,KAAK9F,KAAKga,YAAYjK,IAGjC,OAAO3N,IAIXgB,SACE,OAAOpD,KAAKM,eAAe,KAAM,CAC/BJ,YAAa,sBACb8O,IAAK,SACJhP,KAAKma,oB,sBCrGL,MAGMK,EAA0B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC1EC,EAA+B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAgRtF,SAAUhC,EAAa1I,EAAcgB,GACzC,OAAO2J,eAAW3K,GAAQ0K,EAAmB1J,GAASyJ,EAAczJ,G,gBCzOvD1S,sBACbsT,OACAgJ,QAEAlc,OAAO,CACPC,KAAM,gBAENC,MAAO,CACLic,aAAc9b,OACd+U,aAAcjC,SAEdiJ,UAAWjJ,SACXjL,SAAUtH,QACV0U,OAAQ,CACNlV,KAAM,CAACmV,MAAOpC,SAAUnN,QACxBtF,QAAS,IAAM,MAEjB8U,WAAY,CACVpV,KAAM,CAACmV,MAAOpC,SAAUnN,OAAQ3F,QAChCK,QAAS,IAAM,WAEjByX,eAAgB,CACd/X,KAAM,CAACC,OAAQiI,QACf5H,QAAS,GAGX2b,iBAAkBlJ,SAClBiF,qBAAsB,CACpBhY,KAAM,CAACC,OAAQiI,QACf5H,QAAS,GAEX2S,IAAKhT,OACL+S,IAAK/S,OAELic,YAAanJ,SACboJ,SAAU3b,QACV2S,SAAU,CACRnT,KAAMC,OACNK,QAAS,SAEX8b,mBAAoB,CAClBpc,KAAMC,OACNK,QAAS,0CAEX+b,kBAAmB,CACjBrc,KAAMC,OACNK,QAAS,yCAEXgc,WAAYrc,OACZoT,SAAU,CACRrT,KAAMC,OACNK,QAAS,SAEXic,mBAAoB,CAClBvc,KAAMC,OACNK,QAAS,0CAEXkc,kBAAmB,CACjBxc,KAAMC,OACNK,QAAS,yCAEX+U,MAAO7U,QACPic,SAAUjc,QACVwQ,SAAUxQ,QACVqL,WAAYrL,QACZkc,YAAa,CACX1c,KAAM,CAACQ,QAASP,QAChBK,SAAS,GAEXqc,kBAAmB,CACjB3c,KAAMC,OACNK,QAAS,qCAEX2X,mBAAoBzX,QACpB0X,SAAU1X,QAEVoc,gBAAiB7J,SACjB/S,KAAM,CACJA,KAAMC,OACNK,QAAS,OACTJ,UAAYF,GAAc,CAAC,OAAQ,SAASI,SAASJ,IAEvDgB,MAAO,CAACmU,MAAOlV,QACfkY,cAAepF,SAEf8J,WAAY9J,SACZ5B,SAAUlR,QAGZmB,OACE,MAAM0b,EAAM,IAAIpK,KAChB,MAAO,CACLqK,qBAAsB5b,KAAKnB,KAAKgd,cAChCC,SAAU,KACVC,WAAY,KACZC,UAAW,KACX/L,aAAa,EACb0L,MAEAxH,UAAW,MACT,GAAInU,KAAKmb,WACP,OAAOnb,KAAKmb,WAGd,MAAMc,EAAgBC,eAAYlc,KAAKH,OACjC+P,EAAOqM,EAAcA,EAAc1V,OAAS,KACnB,kBAArBvG,KAAKub,YAA2Bvb,KAAKub,YAAc,GAAGI,EAAItB,iBAAiBsB,EAAIQ,WAAa,KACtG,OAAOlG,EAAmBrG,EAA8B,SAAd5P,KAAKnB,KAAkB,QAAU,SARlE,KAafiB,SAAU,CACRmc,gBACE,OAAOC,eAAYlc,KAAKH,QAE1Buc,aACE,OAAOpc,KAAKgb,UAAYhb,KAAKkU,OAE/BmI,YACE,OAAOrc,KAAKoc,WAAapc,KAAKic,cAAcjc,KAAKic,cAAc1V,OAAS,GAAMvG,KAAKH,OAErFyc,iBACE,OAAKtc,KAAKH,OAAuB,UAAdG,KAAKnB,KAEbmB,KAAKoc,WACPpc,KAAKic,cAAcvK,IAAI1S,GAAOA,EAAIwS,OAAO,EAAG,IAE3CxR,KAAKH,MAAiB2R,OAAO,EAAG,GAJjCxR,KAAKH,OAOhBiU,UACE,OAAyB,IAArB9T,KAAKub,YACAtF,EAAmB,GAAGjW,KAAK2b,IAAItB,iBAAiBra,KAAK2b,IAAIQ,WAAa,KAAKnc,KAAK2b,IAAIjD,YAAa1Y,KAAKnB,MAGxGmB,KAAKub,aAAe,MAE7BgB,YACE,MAAqB,SAAdvc,KAAKnB,KACR,GAAGmB,KAAKgc,aAAa/K,eAAIjR,KAAK+b,WAAc,MAAM9K,eAAIjR,KAAK8b,YAC3D,GAAG9b,KAAKgc,aAAa/K,eAAIjR,KAAK+b,WAAc,MAElDS,aACE,OAAOzV,QAAQ/G,KAAKmb,YAAcnb,KAAKmU,WAAWnD,MAAM,KAAK,IAAM,GAErEyL,YACE,OAAO1V,QAAQ/G,KAAKmb,YAAcnb,KAAKmU,WAAWnD,MAAM,KAAK,KAE/D0L,WACE,OAAO1c,KAAK6R,IAAMoE,EAAmBjW,KAAK6R,IAAK,SAAW,MAE5D8K,WACE,OAAO3c,KAAK8R,IAAMmE,EAAmBjW,KAAK8R,IAAK,SAAW,MAE5DyI,UACE,OAAOva,KAAK6R,IAAMoE,EAAmBjW,KAAK6R,IAAK,QAAU,MAE3DyI,UACE,OAAOta,KAAK8R,IAAMmE,EAAmBjW,KAAK8R,IAAK,QAAU,MAE3D8K,aACE,MAAO,CACL7M,KAAM/P,KAAK0b,YAAcjL,EAA4BzQ,KAAKoS,cAAe,CAAErC,KAAM,UAAWsC,SAAU,OAAS,CAAE9L,OAAQ,IACzHsW,UAAW7c,KAAKyb,kBACbzb,KAAKoc,WAAapc,KAAK8c,kCAAoC9c,KAAK+c,6BAGvED,oCACE,OAAOE,GACAA,EAAMzW,OAIU,IAAjByW,EAAMzW,OACDvG,KAAK+c,0BAA0BC,EAAM,IAGvChd,KAAKa,SAASC,KAAKC,EAAEf,KAAKwb,kBAAmBwB,EAAMzW,QAPjD,KAUbwW,4BACE,MAAME,EAAe,CACnBlN,KAAM,CAAEA,KAAM,UAAWsC,SAAU,OACnCtB,MAAO,CAAEA,MAAO,OAAQsB,SAAU,OAClCzC,KAAM,CAAEuH,QAAS,QAASpG,MAAO,QAASkG,IAAK,UAAW5E,SAAU,QAGhE6K,EAAqBzM,EAA4BzQ,KAAKoS,cAAe6K,EAAajd,KAAKnB,MAAO,CAClG+R,MAAO,EACPrK,OAAQ,CAAEqJ,KAAM,GAAImB,MAAO,EAAGhB,KAAM,GAAI/P,KAAKnB,QAGzCse,EAAsBvN,GAAiBsN,EAAmBtN,GAC7D1K,QAAQ,mBAAoB,CAACkY,EAAOC,EAAUC,IAAU,GAAGD,KAAYC,KACvEpY,QAAQ,KAAM,SAEjB,OAAOlF,KAAKud,UAAYJ,EAAqBD,IAIjD9R,MAAO,CACLwQ,qBAAsB,CACpB4B,WAAW,EACXnO,QAASrQ,GACPgB,KAAK6N,MAAM,uBAAwB7O,KAGvC4b,aAAc5b,GACZgB,KAAK4b,qBAAuB5c,GAE9BmV,UAAWnV,EAAamR,GAGtB,MAAM6F,EAA6B,UAAdhW,KAAKnB,KAAmB,OAAS,QACtDmB,KAAKiQ,YAAcgG,EAAmBjX,EAAKgX,GAAgBC,EAAmB9F,EAAM6F,GACpFhW,KAAK6N,MAAM,qBAAsB7O,IAEnCmc,WAAYnc,GACNA,EACFgB,KAAKmU,UAAYnV,EACRgB,KAAKqc,WAA2B,SAAdrc,KAAKnB,KAChCmB,KAAKmU,UAAY8B,EAAmBjW,KAAKqc,UAAW,SAC3Crc,KAAKqc,WAA2B,UAAdrc,KAAKnB,OAChCmB,KAAKmU,UAAY8B,EAAmBjW,KAAKqc,UAAW,UAGxDxc,MAAO4d,EAA2BC,GAChC1d,KAAK2d,oBACL3d,KAAK4d,gBAGD5d,KAAKoc,aAAcpc,KAAKH,OAAUG,KAAKmb,eACxCnb,KAAKoc,aAAcpc,KAAKic,cAAc1V,QAAYmX,GAAaA,EAASnX,QAAYvG,KAAKmb,cAE1Fnb,KAAKmU,UAAY8B,EAAmBjW,KAAKuc,UAAyB,UAAdvc,KAAKnB,KAAmB,OAAS,WAGzFA,KAAMA,GAGJ,GAFAmB,KAAK4b,qBAAuB/c,EAAKgd,cAE7B7b,KAAKH,OAASG,KAAKH,MAAM0G,OAAQ,CACnC,MAAMsX,EAAS7d,KAAKic,cACjBvK,IAAK1S,GAAgBiX,EAAmBjX,EAAKH,IAC7CgX,OAAO7V,KAAK0T,eACf1T,KAAK6N,MAAM,QAAS7N,KAAKoc,WAAayB,EAASA,EAAO,OAK5D/b,UACE9B,KAAK2d,oBAED3d,KAAKmb,aAAenb,KAAKmU,WAC3BnU,KAAK6N,MAAM,qBAAsB7N,KAAKmU,WAExCnU,KAAK4d,gBAGP1b,QAAS,CACP4b,UAAWC,GACT,GAAI/d,KAAKkU,MAAO,CACd,GAAkC,IAA9BlU,KAAKic,cAAc1V,OACrBvG,KAAK6N,MAAM,QAAS,CAACkQ,QAChB,CACL,MAAMF,EAAS,CAAC7d,KAAKic,cAAc,GAAI8B,GACvC/d,KAAK6N,MAAM,QAASgQ,GACpB7d,KAAK6N,MAAM,SAAUgQ,GAEvB,OAGF,MAAMA,EAAS7d,KAAKgb,UAE0B,IAA1Chb,KAAKic,cAAcrT,QAAQmV,GACvB/d,KAAKic,cAAc+B,OAAO,CAACD,IAC3B/d,KAAKic,cAAcpG,OAAOoI,GAAKA,IAAMF,GAEzCA,EAEJ/d,KAAK6N,MAAM,QAASgQ,GACpB7d,KAAKgb,UAAYhb,KAAK6N,MAAM,SAAUkQ,IAExCJ,oBACE,GAAkB,MAAd3d,KAAKH,MAAe,OACxB,MAAMqe,EAAYle,KAAKH,MAAMse,YAAYzf,KACnC0f,EAAWpe,KAAKoc,WAAa,QAAU,SACzC8B,IAAcE,GAChBC,eAAY,iBAAiBre,KAAKoc,WAAa,KAAO,OAAOgC,UAAiBF,IAAale,OAG/F0T,cAAe7T,GACb,OAAO6T,EAAc7T,EAAOG,KAAK6R,IAAK7R,KAAK8R,IAAK9R,KAAK6T,eAEvDyK,UAAWze,GACTG,KAAKgc,UAAYnc,EACC,UAAdG,KAAKnB,KACPmB,KAAKmU,UAAY,GAAGtU,EAEpBG,KAAKmU,UAAY,GAAGtU,KAASoR,gBAAKjR,KAAKwc,YAAc,GAAK,KAE5Dxc,KAAK4b,qBAAuB,QACxB5b,KAAKsb,WAAatb,KAAK6P,WAAa7P,KAAKoc,YAAcpc,KAAK0T,cAAc1T,KAAKuc,YACjFvc,KAAK6N,MAAM,QAAS7N,KAAKuc,YAG7BgC,WAAY1e,GACV,MAAOkQ,EAAMgB,GAASlR,EAAMmR,MAAM,KAElChR,KAAKgc,UAAY1E,SAASvH,EAAM,IAChC/P,KAAK+b,WAAazE,SAASvG,EAAO,IAAM,EAEtB,SAAd/Q,KAAKnB,MACHmB,KAAK8b,WACP9b,KAAK8b,SAAWpE,KAAK7F,IAAI7R,KAAK8b,SAAUrD,EAAYzY,KAAKgc,UAAWhc,KAAK+b,WAAa,KAGxF/b,KAAKmU,UAAYtU,EACjBG,KAAK4b,qBAAuB,OACxB5b,KAAKsb,WAAatb,KAAK6P,WAAa7P,KAAKoc,YAAcpc,KAAK0T,cAAc1T,KAAKuc,YACjFvc,KAAK6N,MAAM,QAAS7N,KAAKuc,YAG3Bvc,KAAK8d,UAAU9d,KAAKuc,YAGxBiC,UAAW3e,GACT,MAAOkQ,EAAMgB,EAAOkG,GAAOpX,EAAMmR,MAAM,KAEvChR,KAAKgc,UAAY1E,SAASvH,EAAM,IAChC/P,KAAK+b,WAAazE,SAASvG,EAAO,IAAM,EACxC/Q,KAAK8b,SAAWxE,SAASL,EAAK,IAE9BjX,KAAK8d,UAAU9d,KAAKuc,YAEtBkC,iBACE,OAAOze,KAAKM,eAAeoe,EAAkB,CAC3C/f,MAAO,CACLiR,KAAM5P,KAAKH,MAASG,KAAK4c,WAAWC,UAAqC7c,KAAKoc,WAAapc,KAAKic,cAAgBjc,KAAKH,OAAS,GAC9H8G,SAAU3G,KAAK2G,SACfkJ,SAAU7P,KAAK6P,SACfC,cAA6C,SAA9B9P,KAAK4b,qBACpB7L,KAAM/P,KAAK4c,WAAW7M,KAAK/P,KAAKic,cAAc1V,OAAS,GAAGvG,KAAKgc,UAAchc,KAAKmU,WAClFnE,SAAUhQ,KAAKgQ,SACfnQ,MAAOG,KAAKic,cAAc,IAE5B0C,KAAM,QACN3d,GAAI,CACF,wBAA0BnB,GAAmBG,KAAK4b,qBAAuB/b,EAAQ,OAASG,KAAKnB,KAAKgd,kBAI1G+C,iBACE,OAAO5e,KAAKM,eAAeue,EAAmB,CAC5ClgB,MAAO,CACLqT,SAAUhS,KAAKgS,SACfxR,MAAOR,KAAKQ,MACZ2J,KAAMnK,KAAKmK,KACXxD,SAAU3G,KAAK2G,SACf2K,OAAQtR,KAAK8a,iBACbzQ,MAAOrK,KAAKqK,MACZqG,OAAQ1Q,KAAK0Q,OACbmB,IAAmC,SAA9B7R,KAAK4b,qBAAkC5b,KAAK0c,SAAW1c,KAAKua,QACjEzI,IAAmC,SAA9B9R,KAAK4b,qBAAkC5b,KAAK2c,SAAW3c,KAAKsa,QACjEvI,cAA6C,SAA9B/R,KAAK4b,qBAAkC5b,KAAKib,mBAAqBjb,KAAKkb,kBACrFjJ,cAA6C,SAA9BjS,KAAK4b,qBAAkC5b,KAAKob,mBAAqBpb,KAAKqb,kBACrFnJ,SAAUlS,KAAKkS,SACfrC,SAAU7P,KAAK6P,SACfhQ,MAAqC,SAA9BG,KAAK4b,qBAAkC,GAAG3K,eAAIjR,KAAKyc,UAAW,MAAMxL,eAAIjR,KAAKwc,WAAa,KAAO,GAAGvL,eAAIjR,KAAKyc,UAAW,IAEjIzb,GAAI,CACF2B,OAAQ,IAAM3C,KAAK4b,qBAAsD,SAA9B5b,KAAK4b,qBAAkC,QAAU,OAC5FkD,MAAQjf,GAAkBG,KAAKmU,UAAYtU,MAIjDkf,eACE,OAAO/e,KAAKM,eAAe0e,EAAsB,CAC/CrgB,MAAO,CACLkV,aAAc7T,KAAK6T,aACnBrT,MAAOR,KAAKQ,MACZsT,QAAS9T,KAAK8T,QACd3J,KAAMnK,KAAKmK,KACXxD,SAAU3G,KAAK2G,SACfoN,OAAQ/T,KAAK+T,OACbE,WAAYjU,KAAKiU,WACjB2C,eAAgB5W,KAAK4W,eACrBtF,OAAQtR,KAAK6a,UACbxQ,MAAOrK,KAAKqK,MACZqG,OAAQ1Q,KAAK0Q,OACbmG,qBAAsB7W,KAAK6W,qBAC3BhF,IAAK7R,KAAK6R,IACVC,IAAK9R,KAAK8R,IACVoC,MAAOlU,KAAKkU,MACZrE,SAAU7P,KAAK6P,SACfnF,WAAY1K,KAAK0K,WACjBoM,mBAAoB9W,KAAK8W,mBACzBC,SAAU/W,KAAK+W,SACf5C,UAAW,GAAGlD,eAAIjR,KAAKyc,UAAW,MAAMxL,eAAIjR,KAAKwc,WAAa,KAC9D3c,MAAOG,KAAKH,MACZmX,cAAehX,KAAKgX,eAEtBhI,IAAK,QACLhO,GAAI,CACF8d,MAAO9e,KAAKwe,UACZ,oBAAsB3e,GAAkBG,KAAKmU,UAAYtU,KACtD4T,EAAwBzT,KAAM,aAIvCif,gBACE,OAAOjf,KAAKM,eAAe4e,EAAuB,CAChDvgB,MAAO,CACLkV,aAA4B,UAAd7T,KAAKnB,KAAmBmB,KAAK6T,aAAe,KAC1DrT,MAAOR,KAAKQ,MACZsT,QAAS9T,KAAK8T,QAAUmC,EAAmBjW,KAAK8T,QAAS,SAAW,KACpE3J,KAAMnK,KAAKmK,KACXxD,SAAU3G,KAAK2G,SACfoN,OAAsB,UAAd/T,KAAKnB,KAAmBmB,KAAK+T,OAAS,KAC9CE,WAA0B,UAAdjU,KAAKnB,KAAmBmB,KAAKiU,WAAa,KACtD3C,OAAQtR,KAAK+a,YACb1Q,MAAOrK,KAAKqK,MACZqG,OAAQ1Q,KAAK0Q,OACbmB,IAAK7R,KAAK0c,SACV5K,IAAK9R,KAAK2c,SACVzI,MAAOlU,KAAKkU,MACZrE,SAAU7P,KAAK6P,UAA0B,UAAd7P,KAAKnB,KAChC6L,WAAY1K,KAAK0K,WACjB7K,MAAOG,KAAKsc,eACZnI,UAAW,GAAGlD,eAAIjR,KAAKyc,UAAW,IAEpCzN,IAAK,QACLhO,GAAI,CACF8d,MAAO9e,KAAKue,WACZ,oBAAsB1e,GAAkBG,KAAKmU,UAAYtU,KACtD4T,EAAwBzT,KAAM,cAIvCmf,WACE,OAAOnf,KAAKM,eAAe8e,EAAkB,CAC3CzgB,MAAO,CACL6B,MAAOR,KAAKQ,MACZ8Q,OAAQtR,KAAK0b,WACbhL,OAAQ1Q,KAAK0Q,OACbmB,IAAK7R,KAAKua,QACVzI,IAAK9R,KAAKsa,QACVza,MAAOG,KAAKyc,WAEdzb,GAAI,CACF8d,MAAO9e,KAAKse,aACT7K,EAAwBzT,KAAM,aAIvCqf,gBACE,MAAMjd,EAAyC,SAA9BpC,KAAK4b,qBAAkC,CACtD5b,KAAKmf,YACH,CACFnf,KAAK4e,iBACyB,SAA9B5e,KAAK4b,qBAAkC5b,KAAK+e,eAAiB/e,KAAKif,iBAGpE,OAAOjf,KAAKM,eAAe,MAAO,CAChCwH,IAAK9H,KAAK4b,sBACTxZ,IAELwb,eACE,GAAI5d,KAAKqc,UAAW,CAClB,MAAMiD,EAAQtf,KAAKqc,UAAUrL,MAAM,KACnChR,KAAKgc,UAAY1E,SAASgI,EAAM,GAAI,IACpCtf,KAAK+b,WAAazE,SAASgI,EAAM,GAAI,IAAM,EACzB,SAAdtf,KAAKnB,OACPmB,KAAK8b,SAAWxE,SAASgI,EAAM,GAAI,UAGrCtf,KAAKgc,UAAYhc,KAAKgc,WAAahc,KAAK2b,IAAItB,cAC5Cra,KAAK+b,WAAgC,MAAnB/b,KAAK+b,WAAqB/b,KAAK+b,WAAa/b,KAAK2b,IAAIQ,WACvEnc,KAAK8b,SAAW9b,KAAK8b,UAAY9b,KAAK2b,IAAIjD,YAKhDtV,SACE,OAAOpD,KAAKuf,UAAU,sB,oCCnhB1B,0BAGeC,sBAAuB,SAAU,MAAO,a,oCCHvD,gBAGeC,e,sFCiBAphB,sBACbmI,OACAkZ,eAAmB,SAEnBjhB,OAAO,CACPC,KAAM,SAENihB,UACE,MAAO,CAAEC,KAAM5f,OAGjB6f,cAAc,EAEdlhB,MAAO,CACLgI,SAAUtH,QACVygB,eAAgBzgB,QAChBwQ,SAAUxQ,QACVQ,MAAOR,SAGTY,KAAM,KAAM,CACV8f,OAAQ,GACRC,SAAU,GACVC,SAAU,KAGZ7U,MAAO,CACL6U,SAAU,CACR5Q,QAASrQ,GACP,MAAMkhB,EAASzb,OAAO0b,OAAOnhB,GAAKC,UAAS,GAE3Ce,KAAK6N,MAAM,SAAUqS,IAEvBE,MAAM,EACN5C,WAAW,IAIftb,QAAS,CACPme,WAAYvB,GACV,MAAMwB,EAAWxB,GACRA,EAAMyB,OAAO,WAAavhB,IAC/BgB,KAAKwgB,KAAKxgB,KAAKigB,SAAUnB,EAAM2B,KAAMzhB,IACpC,CAAEwe,WAAW,IAGZwC,EAAqB,CACzBS,KAAM3B,EAAM2B,KACZC,MAAO,OACPC,eAAgB,QAiBlB,OAdI3gB,KAAK8f,eAEPE,EAASW,eAAiB7B,EAAMyB,OAAO,iBAAmBvhB,IACnDA,IAGDgB,KAAKigB,SAASje,eAAe8c,EAAM2B,QAEvCT,EAASU,MAAQJ,EAAQxB,OAG3BkB,EAASU,MAAQJ,EAAQxB,GAGpBkB,GAGTY,WACE,OAAqE,IAA9D5gB,KAAK+f,OAAOlK,OAAOiJ,IAAUA,EAAM8B,UAAS,IAAOra,QAG5Dsa,QACE7gB,KAAK+f,OAAOla,QAAQiZ,GAASA,EAAM+B,SACnC7gB,KAAK8gB,iBAEPA,gBACM9gB,KAAK8f,gBAEPzT,WAAW,KACTrM,KAAKigB,SAAW,IACf,IAIPc,kBACE/gB,KAAK+f,OAAOla,QAAQiZ,GAASA,EAAMiC,mBACnC/gB,KAAK8gB,iBAEPE,SAAUlC,GACR9e,KAAK+f,OAAOja,KAAKgZ,GACjB9e,KAAKggB,SAASla,KAAK9F,KAAKqgB,WAAWvB,KAErCmC,WAAYnC,GACV,MAAMoC,EAAQlhB,KAAK+f,OAAOlY,KAAK2P,GAAKA,EAAEiJ,OAAS3B,EAAM2B,MAErD,IAAKS,EAAO,OAEZ,MAAMC,EAAUnhB,KAAKggB,SAASnY,KAAK2P,GAAKA,EAAEiJ,OAASS,EAAMT,MACrDU,IACFA,EAAQT,QACRS,EAAQR,kBAGV3gB,KAAKggB,SAAWhgB,KAAKggB,SAASnK,OAAO2B,GAAKA,EAAEiJ,OAASS,EAAMT,MAC3DzgB,KAAK+f,OAAS/f,KAAK+f,OAAOlK,OAAO2B,GAAKA,EAAEiJ,OAASS,EAAMT,MACvDzgB,KAAKohB,QAAQphB,KAAKigB,SAAUiB,EAAMT,QAItCrd,OAAQC,GACN,OAAOA,EAAE,OAAQ,CACfnD,YAAa,SACbU,MAAO,CACLygB,YAAY,KACTrhB,KAAKiI,QAEVjH,GAAI,CACFsgB,OAAS/U,GAAavM,KAAK6N,MAAM,SAAUtB,KAE5CvM,KAAKqC,OAAOlD,a,oCC7InB,MAAMoZ,EAAW,CAACgJ,EAAyBC,EAAsBC,KAC/DD,IAA+B,EAC/BD,EAASziB,OAAOyiB,GAChBE,EAAY3iB,OAAO2iB,GACfF,EAAOhb,OAASib,EACX1iB,OAAOyiB,IAGhBC,GAA8BD,EAAOhb,OACjCib,EAAeC,EAAUlb,SAC3Bkb,GAAaA,EAAUC,OAAOF,EAAeC,EAAUlb,SAElDkb,EAAU3Y,MAAM,EAAG0Y,GAAgB1iB,OAAOyiB,KAGpC,QAACI,EAAoBpb,EAAS,IAAMgS,EAASoJ,EAAGpb,EAAQ,M,kCCfvE,0EAcelI,sBACboI,OACAmb,OACAC,QAEApjB,OAAO,CACPC,KAAM,WAENC,MAAO,CACLiI,KAAMvH,QACNwH,MAAOxH,QACPyH,KAAM,CACJjI,KAAM,CAACkI,OAAQjI,QACfK,QAAS,KAIbW,SAAU,CACRwB,UACE,MAAO,CACL,iBAAkBtB,KAAK4G,KACvB,kBAAmB5G,KAAK6G,SACrB7G,KAAK8hB,iBAGZ9e,SACE,MAAO,CACLqF,OAAQN,eAAc/H,KAAK8G,MAC3Bib,SAAUha,eAAc/H,KAAK8G,MAC7BwB,MAAOP,eAAc/H,KAAK8G,SACvB9G,KAAKgiB,oBAKd5e,OAAQC,GACN,MAAMpD,EAAO,CACXC,YAAa,WACbC,MAAOH,KAAKsB,QACZyB,MAAO/C,KAAKgD,OACZhC,GAAIhB,KAAKqT,YAGX,OAAOhQ,EAAE,MAAOrD,KAAKI,mBAAmBJ,KAAKQ,MAAOP,GAAOD,KAAKqC,OAAOlD,a,kCCzD3E,sIA0BA,MAAMwK,EAAatL,eACjBC,OACA2jB,OACAC,OACAxb,OACAyb,eAAiB,aACjBC,eAAkB,eAOLzY,SAAWlL,SAAkBA,OAAO,CACjDC,KAAM,QAENC,MAAO,CACL0jB,YAAa,CACXxjB,KAAMC,OACNK,UACE,OAAKa,KAAKsiB,UAEHtiB,KAAKsiB,UAAUD,YAFM,KAKhCE,MAAOljB,QACPmjB,UAAWnjB,QACXojB,IAAKpjB,QACLI,KAAMJ,QACNqjB,QAASrjB,QACTK,SAAUL,QACVsjB,MAAOtjB,QACPujB,mBAAoBvjB,QACpBwjB,QAASxjB,QACTmG,IAAK,CACH3G,KAAMC,OACNK,QAAS,UAEXS,KAAMP,QACNyjB,KAAMzjB,QACNR,KAAM,CACJA,KAAMC,OACNK,QAAS,UAEXU,MAAO,MAGTI,KAAM,KAAM,CACV8iB,WAAY,kBAGdjjB,SAAU,CACRwB,UACE,MAAO,CACL,SAAS,KACN2gB,OAAS1gB,QAAQzB,SAASwB,QAAQE,KAAKxB,MAC1C,kBAAmBA,KAAKgjB,SACxB,eAAgBhjB,KAAKuiB,MACrB,gBAAiBviB,KAAKijB,OACtB,kBAAmBjjB,KAAK2G,SACxB,qBAAsB3G,KAAKkjB,WAC3B,aAAcljB,KAAKyiB,IACnB,eAAgBziB,KAAKmjB,MACrB,gBAAiBnjB,KAAKojB,MACtB,cAAepjB,KAAKP,KACpB,cAAeO,KAAK4G,KACpB,iBAAkB5G,KAAK0iB,QACvB,kBAAmB1iB,KAAKN,SACxB,eAAgBM,KAAK2iB,MACrB,eAAgB3iB,KAAK6G,MACrB,eAAgB7G,KAAKqjB,QACrB,iBAAkBrjB,KAAK6iB,QACvB,gBAAiB7iB,KAAKyW,GACtB,cAAezW,KAAKJ,KACpB,cAAeI,KAAK8iB,KACpB,aAAc9iB,KAAKsjB,OAChBtjB,KAAKwI,gBACLxI,KAAKujB,gBACLvjB,KAAKwjB,oBACLxjB,KAAKyjB,kBAGZC,oBACE,IAAI1jB,KAAK2G,SAET,OAAOgd,OAAWpiB,QAAQzB,SAAS4jB,kBAAkBliB,KAAKxB,OAE5D4jB,iB,MACE,MAAMC,GAAgB7jB,KAAKP,OAAQO,KAAKyiB,KAAM,CAAEqB,QAAQ,GACxD,OAAI9jB,KAAK2G,WACc,QAAX,EAAA3G,KAAK+jB,cAAMtY,QAAIoY,IAE7BT,QACE,OAAQpjB,KAAKJ,OAASI,KAAK2iB,QAAU3iB,KAAKN,WAAaM,KAAKP,MAE9DyjB,aACE,OAAO7jB,SACJW,KAAKP,OACLO,KAAKJ,OACLI,KAAKN,WACLM,KAAKwiB,YACLxiB,KAAK2G,WACL3G,KAAK2iB,QACa,MAAlB3iB,KAAKgkB,WAAqBjd,OAAO/G,KAAKgkB,WAAa,KAGxDX,UACE,OAAOhkB,QACLW,KAAKP,MACLO,KAAKyiB,MAGTzf,SACE,MAAO,IACFhD,KAAKgiB,oBAKdlgB,UACE,MAAMmiB,EAAgB,CACpB,CAAC,OAAQ,QACT,CAAC,UAAW,YACZ,CAAC,QAAS,YAIZA,EAAcpe,QAAQ,EAAEqe,EAAUC,MAC5BnkB,KAAK+B,OAAOC,eAAekiB,IAAWjiB,eAASiiB,EAAUC,EAAankB,SAI9EkC,QAAS,CACPjB,MAAOsL,IAEJvM,KAAK4iB,qBAAuB5iB,KAAKyiB,KAAOlW,EAAE6X,QAAUpkB,KAAK8M,IAAIuX,OAC9DrkB,KAAK6N,MAAM,QAAStB,GAEpBvM,KAAKsiB,WAAatiB,KAAK2C,UAEzBJ,aACE,OAAOvC,KAAKM,eAAe,OAAQ,CACjCJ,YAAa,kBACZF,KAAKqC,OAAOlD,UAEjBmlB,YACE,OAAOtkB,KAAKM,eAAe,OAAQ,CACjCH,MAAO,iBACNH,KAAKqC,OAAOkiB,QAAU,CAACvkB,KAAKM,eAAekkB,OAAmB,CAC/D7lB,MAAO,CACL8lB,eAAe,EACf3d,KAAM,GACNwB,MAAO,SAMflF,OAAQC,GACN,MAAMjB,EAAW,CACfpC,KAAKuC,aACLvC,KAAK0iB,SAAW1iB,KAAKskB,cAEjB,IAAE9e,EAAF,KAAOvF,GAASD,KAAK0kB,oBACrBxhB,EAAWlD,KAAKojB,MAClBpjB,KAAKI,mBACLJ,KAAKmD,aAUT,MARY,WAARqC,IACFvF,EAAKW,MAAO/B,KAAOmB,KAAKnB,KACxBoB,EAAKW,MAAO+F,SAAW3G,KAAK2G,UAE9B1G,EAAKW,MAAOf,MAAQ,CAAC,SAAU,UAAUZ,gBAAgBe,KAAKH,OAC1DG,KAAKH,MACL8kB,KAAKC,UAAU5kB,KAAKH,OAEjBwD,EAAEmC,EAAKxF,KAAK2G,SAAW1G,EAAOiD,EAASlD,KAAKQ,MAAOP,GAAOmC,O,wGC1LtDkD,eAAI7G,OAAO,CACxBC,KAAM,SAENmhB,cAAc,EAEdlhB,MAAO,CACLkmB,MAAO,CACLhmB,KAAMmV,MACN7U,QAAS,IAAM,IAEjBoC,QAAS,CACP1C,KAAM4F,OACNtF,QAAS,KAAM,KAEjB2lB,OAAQ,CACNjmB,KAAM,CAACC,OAAQkV,QAEjB+Q,SAAU,CACRlmB,KAAM,CAACQ,QAAS2U,QAElBgR,WAAY,CACVnmB,KAAM+S,SACNzS,QAAS8lB,QAEXC,SAAU7lB,QACV8lB,UAAW9lB,QACX+lB,KAAM,CACJvmB,KAAMkI,OACN5H,QAAS,GAEXkmB,aAAc,CACZxmB,KAAMkI,OACN5H,QAAS,IAEXmmB,QAAS,CACPzmB,KAAM,CAACC,OAAQkV,OACf7U,QAAS,IAAM,IAEjBomB,UAAW,CACT1mB,KAAM,CAACQ,QAAS2U,OAChB7U,QAAS,IAAM,IAEjBqmB,YAAa,CACX3mB,KAAM+S,SACNzS,QAASsmB,QAEX/U,OAAQ,CACN7R,KAAMC,OACNK,QAAS,SAEXumB,YAAarmB,QACbsmB,kBAAmBtmB,QACnBumB,iBAAkBvmB,QAClBwmB,OAAQ/mB,OACRgnB,aAAc,CACZjnB,KAAM+S,SACNzS,QAAS4mB,QAEXC,kBAAmB,CACjBnnB,KAAMkI,OACN5H,SAAU,IAIdc,OACE,IAAIgmB,EAA+B,CACjCb,KAAMplB,KAAKolB,KACXC,aAAcrlB,KAAKqlB,aACnBP,OAAQ5I,eAAYlc,KAAK8kB,QACzBC,SAAU7I,eAAYlc,KAAK+kB,UAC3BO,QAASpJ,eAAYlc,KAAKslB,SAC1BC,UAAWrJ,eAAYlc,KAAKulB,WAC5BL,SAAUllB,KAAKklB,SACfC,UAAWnlB,KAAKmlB,WAGdnlB,KAAKuB,UACP0kB,EAAkBxhB,OAAOyhB,OAAOD,EAAiBjmB,KAAKuB,UAGxD,MAAM,OAAEujB,EAAF,SAAUC,EAAV,QAAoBO,EAApB,UAA6BC,GAAcU,EAC3CE,EAAWrB,EAAOve,OAASwe,EAASxe,OACpC6f,EAAYd,EAAQ/e,OAASgf,EAAUhf,OAU7C,OARI4f,EAAW,GACbF,EAAgBlB,SAASjf,QAAQugB,eAAUF,GAAU,IAGnDC,EAAY,GACdH,EAAgBV,UAAUzf,QAAQugB,eAAUD,GAAW,IAGlD,CACLH,oBAIJnmB,SAAU,CACRwmB,cACE,OAAOtmB,KAAKgmB,mBAAqB,EAAIhmB,KAAKgmB,kBAAoBhmB,KAAKumB,cAAchgB,QAEnFigB,YACE,OAAOxmB,KAAKimB,gBAAgBZ,cAAgB,EACxC,EACA3N,KAAK+O,KAAKzmB,KAAKsmB,YAActmB,KAAKimB,gBAAgBZ,eAExDqB,YACE,OAA2C,IAAvC1mB,KAAKimB,gBAAgBZ,cAAwBrlB,KAAK6kB,MAAMte,QAEpDvG,KAAKimB,gBAAgBb,KAAO,GAAKplB,KAAKimB,gBAAgBZ,aAFa,GAI7EsB,WACE,OAA2C,IAAvC3mB,KAAKimB,gBAAgBZ,aAA4BrlB,KAAKsmB,YACrDtmB,KAAK6kB,MAAMte,OAETmR,KAAK7F,IAAI7R,KAAKsmB,YAAatmB,KAAKimB,gBAAgBb,KAAOplB,KAAKimB,gBAAgBZ,cAFpD,GAIjCuB,YACE,QAAS5mB,KAAKimB,gBAAgBX,QAAQ/e,QAExCsgB,aACE,MAAO,CACLzB,KAAMplB,KAAKimB,gBAAgBb,KAC3BC,aAAcrlB,KAAKimB,gBAAgBZ,aACnCqB,UAAW1mB,KAAK0mB,UAChBC,SAAU3mB,KAAK2mB,SACfH,UAAWxmB,KAAKwmB,UAChBF,YAAatmB,KAAKsmB,cAGtBC,gBACE,IAAI1B,EAAQ7kB,KAAK6kB,MAAM/b,QAMvB,OAJK9I,KAAK4lB,kBAAoB5lB,KAAKgmB,mBAAqB,IACtDnB,EAAQ7kB,KAAK8lB,aAAajB,EAAO7kB,KAAK6lB,SAGjChB,GAETiC,gBACE,IAAIjC,EAAQ7kB,KAAKumB,cAAczd,QAU/B,QARM9I,KAAK0lB,aAAe1lB,KAAKimB,gBAAgBX,QAAQ/e,SAAWvG,KAAKgmB,mBAAqB,IAC1FnB,EAAQ7kB,KAAKilB,UAAUJ,KAGpB7kB,KAAK2lB,mBAAqB3lB,KAAKgmB,mBAAqB,IACvDnB,EAAQ7kB,KAAK+mB,cAAclC,IAGtBA,GAETmC,eACE,OAAOhnB,KAAK4mB,UAAY5mB,KAAKylB,WAAWzlB,KAAK8mB,eAAiB,MAEhEG,cACE,MAAO,CACLvQ,KAAM1W,KAAK0W,KACXwQ,UAAWlnB,KAAKknB,UAChBC,MAAOnnB,KAAKmnB,MACZtC,MAAO7kB,KAAK8mB,cACZvlB,QAASvB,KAAKimB,gBACdmB,cAAepnB,KAAKonB,cACpBP,WAAY7mB,KAAK6mB,WACjBG,aAAchnB,KAAKgnB,aACnBK,oBAAqBrnB,KAAK6kB,MAAMte,SAGpC+gB,kBACE,MAAO,IAAKtnB,KAAKuB,WAIrB6J,MAAO,CACLkc,gBAAiB,CACfjY,QAAS9N,EAAsBgmB,GACzBC,eAAUjmB,EAASgmB,IAEvBvnB,KAAKonB,cAAc7lB,IAErB6e,MAAM,EACN5C,WAAW,GAEbyI,gBAAiB,CACf5W,QAAS9N,EAAsBgmB,GACzBC,eAAUjmB,EAASgmB,IACvBvnB,KAAK6N,MAAM,iBAAkBtM,IAE/B6e,MAAM,EACN5C,WAAW,GAEb4H,KAAMA,GACJplB,KAAKonB,cAAc,CAAEhC,UAEvB,uBAAwBA,GACtBplB,KAAK6N,MAAM,cAAeuX,IAE5BC,aAAcA,GACZrlB,KAAKonB,cAAc,CAAE/B,kBAEvB,+BAAgCA,GAC9BrlB,KAAK6N,MAAM,wBAAyBwX,IAEtCP,OAAQA,GACN9kB,KAAKonB,cAAc,CAAEtC,OAAQ5I,eAAY4I,MAE3C,yBAA0BA,EAAkByC,IACzCC,eAAU1C,EAAQyC,IAAQvnB,KAAK6N,MAAM,iBAAkBmG,MAAMsB,QAAQtV,KAAK8kB,QAAUA,EAASA,EAAO,KAEvGC,SAAUA,GACR/kB,KAAKonB,cAAc,CAAErC,SAAU7I,eAAY6I,MAE7C,2BAA4BA,EAAqBwC,IAC9CC,eAAUzC,EAAUwC,IAAQvnB,KAAK6N,MAAM,mBAAoBmG,MAAMsB,QAAQtV,KAAK+kB,UAAYA,EAAWA,EAAS,KAEjHO,QAASA,GACPtlB,KAAKonB,cAAc,CAAE9B,QAASpJ,eAAYoJ,MAE5C,0BAA2BA,EAAmBiC,IAC3CC,eAAUlC,EAASiC,IAAQvnB,KAAK6N,MAAM,kBAAmBmG,MAAMsB,QAAQtV,KAAKslB,SAAWA,EAAUA,EAAQ,KAE5GC,UAAWA,GACTvlB,KAAKonB,cAAc,CAAE7B,UAAWrJ,eAAYqJ,MAE9C,4BAA6BA,EAAsBgC,IAChDC,eAAUjC,EAAWgC,IAAQvnB,KAAK6N,MAAM,oBAAqBmG,MAAMsB,QAAQtV,KAAKulB,WAAaA,EAAYA,EAAU,KAEtHJ,UAAWA,GACTnlB,KAAKonB,cAAc,CAAEjC,eAEvB,4BAA6BA,GAC3BnlB,KAAK6N,MAAM,oBAAqBsX,IAElCD,SAAUA,GACRllB,KAAKonB,cAAc,CAAElC,cAEvB,2BAA4BA,GAC1BllB,KAAK6N,MAAM,mBAAoBqX,IAEjCsB,UAAW,CACTnX,QAASmX,GACPxmB,KAAK6N,MAAM,aAAc2Y,IAE3BhJ,WAAW,GAEbsJ,cAAe,CACbzX,QAASyX,GACP9mB,KAAK6N,MAAM,gBAAiBiZ,IAE9BtJ,WAAW,GAEbqJ,WAAY,CACVxX,QAASwX,EAA4BU,GAC/BC,eAAUX,EAAYU,IAC1BvnB,KAAK6N,MAAM,aAAc7N,KAAK6mB,aAEhCrJ,WAAW,IAIftb,QAAS,CACPS,OAAQmF,EAAa2f,EAAiBC,EAAoBtC,EAAcF,EAAmBC,GACzF,IAAIwC,EAAKF,EAAM3e,QACX8e,EAAOF,EAAQ5e,QACnB,MAAM+e,EAAUF,EAAGG,UAAWC,GAAcA,IAAMjgB,GAwBlD,OAtBI+f,EAAU,GACP1C,IACHwC,EAAK,GACLC,EAAO,IAGTD,EAAG7hB,KAAKgC,GACR8f,EAAK9hB,MAAK,IACD+hB,GAAW,IAAMD,EAAKC,GAC/BD,EAAKC,IAAW,EACN3C,EAIV0C,EAAKC,IAAW,GAHhBF,EAAGK,OAAOH,EAAS,GACnBD,EAAKI,OAAOH,EAAS,IAMlBL,eAAUG,EAAIF,IAAWD,eAAUI,EAAMF,KAC5CtC,EAAO,GAGF,CAAEuC,KAAIC,OAAMxC,SAErB+B,MAAOrf,GACL,MAAQ6f,GAAIrC,EAASsC,KAAMrC,EAArB,KAAgCH,GAASplB,KAAK2C,OAClDmF,EACA9H,KAAKimB,gBAAgBX,QACrBtlB,KAAKimB,gBAAgBV,UACrBvlB,KAAKimB,gBAAgBb,MACrB,GACA,GAEFplB,KAAKonB,cAAc,CAAE9B,UAASC,YAAWH,UAE3C1O,KAAM5O,GACJ,GAAIkM,MAAMsB,QAAQxN,GAAM,OAAO9H,KAAKknB,UAAUpf,GAE9C,MAAQ6f,GAAI7C,EAAQ8C,KAAM7C,EAApB,KAA8BK,GAASplB,KAAK2C,OAChDmF,EACA9H,KAAKimB,gBAAgBnB,OACrB9kB,KAAKimB,gBAAgBlB,SACrB/kB,KAAKimB,gBAAgBb,KACrBplB,KAAKimB,gBAAgBf,SACrBllB,KAAKimB,gBAAgBd,WAEvBnlB,KAAKonB,cAAc,CAAEtC,SAAQC,WAAUK,UAEzC8B,UAAWpC,GACT,MAAMC,EAAWD,EAAOpT,IAAIuW,IAC1B,MAAMzQ,EAAIxX,KAAKimB,gBAAgBnB,OAAOgD,UAAWC,GAAcA,IAAME,GACrE,OAAOzQ,GAAK,GAAIxX,KAAKimB,gBAAgBlB,SAASvN,KAGhDxX,KAAKonB,cAAc,CAAEtC,SAAQC,cAE/BqC,cAAe7lB,GACbvB,KAAKimB,gBAAkB,IAClBjmB,KAAKimB,mBACL1kB,EACH6jB,KAAMplB,KAAKgmB,kBAAoB,EAC3BtO,KAAK5F,IAAI,EAAG4F,KAAK7F,IAAItQ,EAAQ6jB,MAAQplB,KAAKimB,gBAAgBb,KAAMplB,KAAKwmB,YACrEjlB,EAAQ6jB,MAAQplB,KAAKimB,gBAAgBb,OAG7CH,UAAWJ,GACT,IAAIC,EAAmB,GACnBC,EAAsB,GAY1B,OAVK/kB,KAAK0lB,cACRZ,EAAS9kB,KAAKimB,gBAAgBnB,OAC9BC,EAAW/kB,KAAKimB,gBAAgBlB,UAG9B/kB,KAAKimB,gBAAgBX,QAAQ/e,SAC/Bue,EAAS,IAAI9kB,KAAKimB,gBAAgBX,WAAYR,GAC9CC,EAAW,IAAI/kB,KAAKimB,gBAAgBV,aAAcR,IAG7C/kB,KAAKglB,WAAWH,EAAOC,EAAQC,EAAU/kB,KAAK0Q,SAEvD+U,WAAYZ,GACV,OAAO7kB,KAAKwlB,YAAYX,EAAO7kB,KAAKimB,gBAAgBX,QAAStlB,KAAKimB,gBAAgBV,YAEpFwB,cAAelC,GAOb,OAJgC,IAA5B7kB,KAAKgmB,mBAA4BnB,EAAMte,QAAUvG,KAAK0mB,YACxD1mB,KAAKimB,gBAAgBb,KAAO1N,KAAK5F,IAAI,EAAG4F,KAAK+O,KAAK5B,EAAMte,OAASvG,KAAKimB,gBAAgBZ,gBAAkB,GAGnGR,EAAM/b,MAAM9I,KAAK0mB,UAAW1mB,KAAK2mB,YAI5CvjB,SACE,OAAOpD,KAAKyC,aAAatD,SAAWa,KAAKyC,aAAatD,QAAQa,KAAKinB,gB,gDC7WxD3hB,eAAI7G,OAAO,CACxBC,KAAM,gBAENC,MAAO,CACL4C,QAAS,CACP1C,KAAM4F,OACNuC,UAAU,GAEZ6f,WAAY,CACVhoB,KAAM4F,OACNuC,UAAU,GAEZkhB,oBAAqB,CACnBrpB,KAAMmV,MACN7U,QAAS,IAAO,CAAC,EAAG,GAAI,IAAK,IAE/B+S,SAAU,CACRrT,KAAMC,OACNK,QAAS,SAEX6S,SAAU,CACRnT,KAAMC,OACNK,QAAS,SAEXgpB,UAAW,CACTtpB,KAAMC,OACNK,QAAS,UAEXipB,SAAU,CACRvpB,KAAMC,OACNK,QAAS,SAEXkpB,iBAAkB,CAChBxpB,KAAMC,OACNK,QAAS,wCAEXmpB,oBAAqB,CACnBzpB,KAAMC,OACNK,QAAS,uCAEXopB,kBAAmBlpB,QACnBmpB,gBAAiBnpB,QACjBsmB,kBAAmBtmB,QACnBopB,oBAAqBppB,QACrBqpB,SAAU,CACR7pB,KAAMC,OACNK,QAAS,iCAIbW,SAAU,CACR6oB,sBACE,OAAO3oB,KAAKuB,QAAQ8jB,cAAgB,GAClCrlB,KAAKuB,QAAQ6jB,KAAOplB,KAAKuB,QAAQ8jB,cAAgBrlB,KAAK6mB,WAAWP,aACjEtmB,KAAK6mB,WAAWF,SAAW,GAE/BiC,kCACE,OAAO5oB,KAAKkoB,oBAAoBxW,IAAImX,GACZ,kBAAXA,EAA4BA,EAC3B7oB,KAAK8oB,0BAA0BD,MAKjD3mB,QAAS,CACPklB,cAAe2B,GACb/oB,KAAK6N,MAAM,iBAAkBpJ,OAAOyhB,OAAO,GAAIlmB,KAAKuB,QAASwnB,KAE/DC,cACEhpB,KAAKonB,cAAc,CAAEhC,KAAM,KAE7B6D,iBACEjpB,KAAKonB,cAAc,CAAEhC,KAAMplB,KAAKuB,QAAQ6jB,KAAO,KAEjD8D,aACElpB,KAAKonB,cAAc,CAAEhC,KAAMplB,KAAKuB,QAAQ6jB,KAAO,KAEjD+D,aACEnpB,KAAKonB,cAAc,CAAEhC,KAAMplB,KAAK6mB,WAAWL,aAE7C4C,qBAAsB/D,GACpBrlB,KAAKonB,cAAc,CAAE/B,eAAcD,KAAM,KAE3C0D,0BAA2BD,GACzB,MAAO,CACLjpB,MAAkB,IAAZipB,EAAgB7oB,KAAKa,SAASC,KAAKC,EAAEf,KAAKsoB,qBAAuBxpB,OAAO+pB,GAC9EhpB,MAAOgpB,IAGXQ,wBACE,IAAIxpB,EAAQG,KAAKuB,QAAQ8jB,aACzB,MAAMiE,EAAetpB,KAAK4oB,gCAE1B,OAAIU,EAAa/iB,QAAU,EAAU,MAEhC+iB,EAAazhB,KAAK0hB,GAAQA,EAAK1pB,QAAUA,KAAQA,EAAQypB,EAAa,IAEpEtpB,KAAKM,eAAe,MAAO,CAChCJ,YAAa,yBACZ,CACDF,KAAKa,SAASC,KAAKC,EAAEf,KAAKqoB,kBAC1BroB,KAAKM,eAAekpB,OAAS,CAC3B5oB,MAAO,CACL,aAAcZ,KAAKa,SAASC,KAAKC,EAAEf,KAAKqoB,mBAE1C1pB,MAAO,CACLgI,SAAU3G,KAAKyoB,oBACf5D,MAAOyE,EACPzpB,QACA4pB,aAAa,EACbC,MAAM,EACN3H,SAAU,QAEZ/gB,GAAI,CACF8d,MAAO9e,KAAKopB,4BAKpBO,oBACE,IAAIvnB,EAAuC,CAAC,KAC5C,MAAMkkB,EAAsBtmB,KAAK6mB,WAAWP,YAC5C,IAAII,EAAoB1mB,KAAK6mB,WAAWH,UACpCC,EAAmB3mB,KAAK6mB,WAAWF,SAevC,OAbI3mB,KAAK6mB,WAAWP,aAAetmB,KAAK6mB,WAAWxB,cACjDqB,EAAY1mB,KAAK6mB,WAAWH,UAAY,EACxCC,EAAWL,EAActmB,KAAK6mB,WAAWF,UAAY3mB,KAAK6mB,WAAWF,SAAW,EAC5EL,EACAtmB,KAAK6mB,WAAWF,SAEpBvkB,EAAWpC,KAAKyC,aAAa,aACzB,CAACzC,KAAKyC,aAAa,aAAc,CAAEikB,YAAWC,WAAUL,iBACxD,CAACtmB,KAAKa,SAASC,KAAKC,EAAEf,KAAK0oB,SAAUhC,EAAWC,EAAUL,KACrDtmB,KAAKyC,aAAa,eAC3BL,EAAW,CAACpC,KAAKyC,aAAa,aAAc,CAAEikB,YAAWC,WAAUL,kBAG9DtmB,KAAKM,eAAe,MAAO,CAChCH,MAAO,6BACNiC,IAELwnB,QAAS3oB,EAAiB0F,EAAmBkjB,EAAepqB,GAC1D,OAAOO,KAAKM,eAAeI,OAAM,CAC/B/B,MAAO,CACLgI,SAAUA,GAAY3G,KAAK2lB,kBAC3BlmB,MAAM,EACNG,MAAM,GAIRoB,GAAI,CACFC,SAEFL,MAAO,CACL,aAAcipB,IAEf,CAAC7pB,KAAKM,eAAea,OAAO1B,MAEjCqqB,WACE,MAAMC,EAAqC,GACrCC,EAAoC,GAgC1C,OA9BAD,EAAOjkB,KAAK9F,KAAK4pB,QACf5pB,KAAKipB,eACiB,IAAtBjpB,KAAKuB,QAAQ6jB,KACbplB,KAAKa,SAASC,KAAKC,EAAE,gCACrBf,KAAKa,SAASiS,IAAM9S,KAAKgS,SAAWhS,KAAKkS,WAG3C8X,EAAMlkB,KAAK9F,KAAK4pB,QACd5pB,KAAKkpB,WACLlpB,KAAK2oB,oBACL3oB,KAAKa,SAASC,KAAKC,EAAE,gCACrBf,KAAKa,SAASiS,IAAM9S,KAAKkS,SAAWlS,KAAKgS,WAGvChS,KAAKuoB,oBACPwB,EAAOlS,QAAQ7X,KAAK4pB,QAClB5pB,KAAKgpB,YACiB,IAAtBhpB,KAAKuB,QAAQ6jB,KACbplB,KAAKa,SAASC,KAAKC,EAAE,iCACrBf,KAAKa,SAASiS,IAAM9S,KAAKooB,SAAWpoB,KAAKmoB,YAG3C6B,EAAMlkB,KAAK9F,KAAK4pB,QACd5pB,KAAKmpB,WACLnpB,KAAKuB,QAAQ6jB,MAAQplB,KAAK6mB,WAAWL,YAA4C,IAA/BxmB,KAAKuB,QAAQ8jB,aAC/DrlB,KAAKa,SAASC,KAAKC,EAAE,gCACrBf,KAAKa,SAASiS,IAAM9S,KAAKmoB,UAAYnoB,KAAKooB,YAIvC,CACLpoB,KAAKM,eAAe,MAAO,CACzBJ,YAAa,+BACZ6pB,GACH/pB,KAAKwoB,iBAAmBxoB,KAAKM,eAAe,OAAQ,CAACN,KAAKuB,QAAQ6jB,KAAK6E,aACvEjqB,KAAKM,eAAe,MAAO,CACzBJ,YAAa,8BACZ8pB,MAKT5mB,SACE,OAAOpD,KAAKM,eAAe,MAAO,CAChCJ,YAAa,iBACZ,CACDgqB,eAAQlqB,KAAM,WACdA,KAAKqpB,wBACLrpB,KAAK2pB,oBACL3pB,KAAK8pB,gB,gDC9MIzrB,iBACb8rB,OACAtoB,QACApD,OAAO,CACPC,KAAM,kBAENC,MAAO,IACFyrB,EAAM7oB,QAAQ5C,MACjB0rB,QAAS,CACPxrB,KAAMC,OACNK,QAAS,MAEXU,MAAO,CACLhB,KAAMmV,MACN7U,QAAS,IAAM,IAEjBmrB,aAAcjrB,QACdkrB,SAAU,CACR1rB,KAAMmV,MACN7U,QAAS,IAAM,IAEjBqrB,iBAAkB,IACbL,OAAO5oB,QAAQ5C,MAAM6rB,iBACxBrrB,QAAS,KAEXsrB,aAAcprB,QACdqjB,QAAS,CAACrjB,QAASP,QACnB4rB,cAAe,CACb7rB,KAAMC,OACNK,QAAS,uCAEXwrB,WAAY,CACV9rB,KAAMC,OACNK,QAAS,uBAEXyrB,YAAa,CACX/rB,KAAMC,OACNK,QAAS,qCAEX0rB,kBAAmBxrB,QACnByrB,YAAarmB,OACbsmB,cAAe,CACblsB,KAAMC,OACNK,QAAS,iBAIbc,KAAM,KAAM,CACV+qB,UAAW,GACXC,UAAW,GACXC,qBAAsB,GACtBC,cAAc,EACdC,WAAY,IAGdtrB,SAAU,CACRurB,YACE,QAASrrB,KAAKsrB,gBAAgB/kB,QAAUvG,KAAKsrB,gBAAgBC,MAAO/T,GAAWxX,KAAK6U,WAAW2C,KAEjGgU,YACE,OAAOxrB,KAAKsrB,gBAAgBllB,KAAMoR,GAAWxX,KAAK6U,WAAW2C,KAE/DiU,uBACE,OAAOC,eAAmB1rB,KAAK8qB,cAEjCQ,kBACE,OAAOtrB,KAAKkrB,qBAAqBrV,OAAO8V,GAAQ3rB,KAAK4rB,aAAaD,MAItEvgB,MAAO,CACLvL,MAAO,CACLwP,QAASxP,GACPG,KAAKgrB,UAAYnrB,EAAMiE,OAAO,CAACknB,EAAWW,KACxCX,EAAUa,eAAqBF,EAAM3rB,KAAKqqB,UAAYsB,EAC/CX,GACN,KAELxN,WAAW,GAEbwN,UAAWnrB,EAAgC0nB,GACrCC,eAAU/iB,OAAOC,KAAK7E,GAAQ4E,OAAOC,KAAK6iB,KAE9CvnB,KAAK6N,MAAM,QAASpJ,OAAO0b,OAAOtgB,KAEpC0qB,SAAU,CACRlb,QAASxP,GACPG,KAAKirB,UAAYprB,EAAMiE,OAAO,CAACmnB,EAAWU,KACxCV,EAAUY,eAAqBF,EAAM3rB,KAAKqqB,WAAY,EAC/CY,GACN,KAELzN,WAAW,GAEbyN,UAAWprB,EAAgC0nB,GACzC,GAAIC,eAAU3nB,EAAO0nB,GAAM,OAC3B,MAAM7iB,EAAOD,OAAOC,KAAK7E,GAAOgW,OAAOkS,GAAKloB,EAAMkoB,IAC5CwC,EAAY7lB,EAAK6B,OAAcvG,KAAK6kB,MAAMhP,OAAO2B,GAAK9S,EAAKzF,SAASH,OAAO+sB,eAAqBrU,EAAGxX,KAAKqqB,YAA9E,GAChCrqB,KAAK6N,MAAM,kBAAmB0c,KAIlCzoB,UACE,MAAMmiB,EAAgB,CACpB,CAAC,uBAAwB,WACzB,CAAC,SAAU,iBACX,CAAC,aAAc,WACf,CAAC,cAAe,uBAChB,CAAC,eAAgB,uBACjB,CAAC,sBAAuB,uCACxB,CAAC,qBAAsB,oCACvB,CAAC,YAAa,0BACd,CAAC,YAAa,2BAIhBA,EAAcpe,QAAQ,EAAEqe,EAAUC,MAC5BnkB,KAAK+B,OAAOC,eAAekiB,IAAWjiB,eAASiiB,EAAUC,EAAankB,QAG5E,MAAM8rB,EAAe,CACnB,SACA,gBACA,gBACA,eAIFA,EAAajmB,QAAQd,IACf/E,KAAK+B,OAAOC,eAAe+C,IAAO8G,eAAQ9G,MAIlDwP,UACErI,OAAOuB,iBAAiB,UAAWzN,KAAK+rB,WACxC7f,OAAOuB,iBAAiB,QAASzN,KAAKgsB,UAExC/f,gBACEC,OAAOyB,oBAAoB,UAAW3N,KAAK+rB,WAC3C7f,OAAOyB,oBAAoB,QAAS3N,KAAKgsB,UAG3C9pB,QAAS,CACP6pB,UAAWxf,GACLA,EAAEwB,UAAYC,OAASie,QAC3BjsB,KAAKmrB,cAAe,IAEtBa,QAASzf,GACHA,EAAEwB,UAAYC,OAASie,QAC3BjsB,KAAKmrB,cAAe,IAEtBe,gBAAiBrsB,GACf,MAAMmrB,EAAYvmB,OAAOyhB,OAAO,GAAIlmB,KAAKgrB,WAEzC,IAAK,IAAIxT,EAAI,EAAGA,EAAIxX,KAAKsrB,gBAAgB/kB,OAAQiR,IAAK,CACpD,MAAMmU,EAAO3rB,KAAKsrB,gBAAgB9T,GAElC,IAAKxX,KAAK4rB,aAAaD,GAAO,SAE9B,MAAM7jB,EAAM+jB,eAAqBF,EAAM3rB,KAAKqqB,SACxCxqB,EAAOmrB,EAAUljB,GAAO6jB,SAChBX,EAAUljB,GAGxB9H,KAAKgrB,UAAYA,EACjBhrB,KAAK6N,MAAM,oBAAqB,CAAEgX,MAAO7kB,KAAKkrB,qBAAsBrrB,WAEtE+rB,aAAcD,GACZ,OAA0D,IAAnDE,eAAqBF,EAAM3rB,KAAK+qB,gBAEzClW,WAAY8W,GACV,QAAS3rB,KAAKgrB,UAAUa,eAAqBF,EAAM3rB,KAAKqqB,YAAa,GAEvE8B,OAAQR,EAAW9rB,GAAQ,EAAMusB,GAAO,GACtC,IAAKpsB,KAAK4rB,aAAaD,GAAO,OAE9B,MAAMX,EAAYhrB,KAAKsqB,aAAe,GAAK7lB,OAAOyhB,OAAO,GAAIlmB,KAAKgrB,WAC5DljB,EAAM+jB,eAAqBF,EAAM3rB,KAAKqqB,SAExCxqB,EAAOmrB,EAAUljB,GAAO6jB,SAChBX,EAAUljB,GAEtB,MAAMukB,EAAQrsB,KAAKsrB,gBAAgBxD,UAAU7J,GAAK4N,eAAqB5N,EAAGje,KAAKqqB,WAAaviB,GAC5F,IAAwB,IAApB9H,KAAKorB,UAAkBprB,KAAKorB,UAAYiB,OACvC,GAAIrsB,KAAKmrB,eAAiBnrB,KAAKsqB,cAAgB8B,EAAM,CACxD,MAAME,EAAeT,eAAqB7rB,KAAKsrB,gBAAgBtrB,KAAKorB,WAAYprB,KAAKqqB,SAC/EkC,EAAuB9nB,OAAOC,KAAK1E,KAAKgrB,WAAW/rB,SAASH,OAAOwtB,IACzEtsB,KAAKwsB,eAAeD,EAAsBH,EAAMpB,EAAWqB,GAI7D,GAFArsB,KAAKorB,UAAYiB,EAEbrsB,KAAKsqB,cAAgB8B,EAAM,CAC7B,MAAM1nB,EAAOD,OAAOC,KAAK1E,KAAKgrB,WACxBzD,EAAM7iB,EAAK6B,QAAUslB,eAAqB7rB,KAAKgrB,UAAUtmB,EAAK,IAAK1E,KAAKqqB,SAC9E9C,GAAOA,IAAQzf,GAAO9H,KAAK6N,MAAM,gBAAiB,CAAE8d,KAAM3rB,KAAKgrB,UAAUzD,GAAM1nB,OAAO,IAExFG,KAAKgrB,UAAYA,EACjBoB,GAAQpsB,KAAK6N,MAAM,gBAAiB,CAAE8d,OAAM9rB,WAE9C2sB,eAAgB3sB,GAAQ,EAAMusB,GAAO,EAAMpB,EAAgBqB,GACzD,MAAMzb,EAAQyb,EAAQrsB,KAAKorB,UAAYiB,EAAQrsB,KAAKorB,UAC9CqB,EAAMJ,EAAQrsB,KAAKorB,UAAYprB,KAAKorB,UAAYiB,EACtD,IAAK,IAAI7U,EAAI5G,EAAO4G,GAAKiV,EAAKjV,IAAK,CACjC,MAAMkV,EAAc1sB,KAAKsrB,gBAAgB9T,GACnC1P,EAAM+jB,eAAqBa,EAAa1sB,KAAKqqB,SAC/CxqB,EAAOmrB,EAAUljB,GAAO4kB,SAChB1B,EAAUljB,GACtBskB,GAAQpsB,KAAK6N,MAAM,gBAAiB,CAAE6e,cAAa7sB,YAGvD8sB,WAAYhB,GACV,OAAO3rB,KAAKirB,UAAUY,eAAqBF,EAAM3rB,KAAKqqB,YAAa,GAErEuC,OAAQjB,EAAW9rB,GAAQ,GACzB,MAAMorB,EAAYjrB,KAAKyqB,aAAe,GAAKhmB,OAAOyhB,OAAO,GAAIlmB,KAAKirB,WAC5DnjB,EAAM+jB,eAAqBF,EAAM3rB,KAAKqqB,SAExCxqB,EAAOorB,EAAUnjB,IAAO,SAChBmjB,EAAUnjB,GAEtB9H,KAAKirB,UAAYA,EACjBjrB,KAAK6N,MAAM,gBAAiB,CAAE8d,OAAM9rB,WAEtCgtB,gBAAiBlB,EAAWU,GAC1B,MAAO,CACLV,OACAU,QACAF,OAASzW,GAAe1V,KAAKmsB,OAAOR,EAAMjW,GAC1Cb,WAAY7U,KAAK6U,WAAW8W,GAC5BiB,OAASlX,GAAe1V,KAAK4sB,OAAOjB,EAAMjW,GAC1CiX,WAAY3sB,KAAK2sB,WAAWhB,GAC5BmB,SAAU9sB,KAAK8sB,WAGnBC,gBAAiBpgB,GACf,OAAO3M,KAAKM,eAAe,MAAOqM,IAEpCqgB,SAAU3F,EAA6B4F,GACrC,GAA4B,IAAxB5F,GAA6BrnB,KAAK0iB,QAAS,CAC7C,MAAMA,EAAU1iB,KAAKqC,OAAOqgB,SAAW1iB,KAAKa,SAASC,KAAKC,EAAEf,KAAK4qB,aACjE,OAAO5qB,KAAK+sB,gBAAgBrK,GACvB,GAA4B,IAAxB2E,EAA2B,CACpC,MAAM6F,EAASltB,KAAKqC,OAAO,YAAcrC,KAAKa,SAASC,KAAKC,EAAEf,KAAK2qB,YACnE,OAAO3qB,KAAK+sB,gBAAgBG,GACvB,GAA4B,IAAxBD,EAA2B,CACpC,MAAME,EAAYntB,KAAKqC,OAAO,eAAiBrC,KAAKa,SAASC,KAAKC,EAAEf,KAAK0qB,eACzE,OAAO1qB,KAAK+sB,gBAAgBI,GAG9B,OAAO,MAETC,SAAUzuB,GACR,MAAM0uB,EAAQrtB,KAAKgtB,SAASruB,EAAM0oB,oBAAqB1oB,EAAMkoB,WAAWP,aACxE,OAAI+G,EAAc,CAACA,GAEfrtB,KAAKyC,aAAatD,QACba,KAAKyC,aAAatD,QAAQ,IAC5BR,EACHkW,WAAY7U,KAAK6U,WACjBsX,OAAQnsB,KAAKmsB,OACbQ,WAAY3sB,KAAK2sB,WACjBG,SAAU9sB,KAAK8sB,SACfF,OAAQ5sB,KAAK4sB,SAIb5sB,KAAKyC,aAAakpB,KACbhtB,EAAMkmB,MAAMnT,IAAI,CAACia,EAAWU,IAAUrsB,KAAKyC,aAAakpB,KAAM3rB,KAAK6sB,gBACxElB,EACAU,KAIG,IAETiB,UAAW3uB,GACT,GAAIqB,KAAK6qB,kBAAmB,OAAO,KAEnC,MAAM5qB,EAAO,CACXtB,MAAO,IACFqB,KAAKyrB,qBACRlqB,QAAS5C,EAAM4C,QACfslB,WAAYloB,EAAMkoB,YAEpB7lB,GAAI,CACF,iBAAmBnB,GAAelB,EAAMyoB,cAAcvnB,KAIpD0tB,EAAcC,eAAuB,UAAWxtB,KAAKyC,cAE3D,OAAOzC,KAAKM,eAAemtB,EAAa,CACtCF,iBACGttB,KAGPytB,qBAAsB/uB,GACpB,MAAMgvB,EAAa,IACdhvB,EACH6sB,UAAWxrB,KAAKwrB,UAChBH,UAAWrrB,KAAKqrB,UAChBa,gBAAiBlsB,KAAKksB,iBAGxB,OAAOlsB,KAAKM,eAAe,MAAO,CAChCJ,YAAa,mBACZ,CACDgqB,eAAQlqB,KAAM,SAAU2tB,GAAY,GACpC3tB,KAAKotB,SAASzuB,GACdqB,KAAKstB,UAAU3uB,GACfurB,eAAQlqB,KAAM,SAAU2tB,GAAY,OAK1CvqB,SACE,OAAOpD,KAAKM,eAAe8pB,EAAO,CAChCzrB,MAAOqB,KAAK4tB,OACZ5sB,GAAI,CACF,iBAAkB,CAAC0U,EAAQ6R,KAAcC,eAAU9R,EAAG6R,IAAQvnB,KAAK6N,MAAM,iBAAkB6H,GAC3F,cAAgBA,GAAW1V,KAAK6N,MAAM,cAAe6H,GACrD,wBAA0BA,GAAW1V,KAAK6N,MAAM,wBAAyB6H,GACzE,iBAAmBA,GAAW1V,KAAK6N,MAAM,iBAAkB6H,GAC3D,mBAAqBA,GAAW1V,KAAK6N,MAAM,mBAAoB6H,GAC/D,kBAAoBA,GAAW1V,KAAK6N,MAAM,kBAAmB6H,GAC7D,oBAAsBA,GAAW1V,KAAK6N,MAAM,oBAAqB6H,GACjEmR,WAAY,CAACnR,EAAQ6R,KAAcC,eAAU9R,EAAG6R,IAAQvnB,KAAK6N,MAAM,aAAc6H,GACjF,gBAAkBA,IAChB1V,KAAKkrB,qBAAuBxV,EAC5B1V,KAAK6N,MAAM,gBAAiB6H,IAE9B,aAAeA,GAAc1V,KAAK6N,MAAM,aAAc6H,IAExD6X,YAAa,CACXpuB,QAASa,KAAK0tB,2B,gDCjVPrvB,mBAAkBI,OAAO,CAEtCwE,WAAY,CACV8gB,eAGFplB,MAAO,CACLkvB,QAAS,CACPhvB,KAAMmV,MACN7U,QAAS,IAAO,IAElBoC,QAAS,CACP1C,KAAM4F,OACNtF,QAAS,KAAM,CACbimB,KAAM,EACNC,aAAc,GACdP,OAAQ,GACRC,SAAU,GACVO,QAAS,GACTC,UAAW,GACXJ,WAAW,EACXD,UAAU,KAGd4I,cAAehvB,OACfivB,SAAU,CACRlvB,KAAMC,OACNK,QAAS,SAEXksB,UAAWhsB,QACXmsB,UAAWnsB,QACX2uB,YAAa3uB,QACbirB,aAAcjrB,QACdqmB,YAAarmB,SAGf6C,QAAS,CACP+rB,e,MACE,MAAMhuB,EAAO,CACXtB,MAAO,CACLkB,MAAOG,KAAKqrB,UACZ5G,eAAgBzkB,KAAKqrB,WAAarrB,KAAKwrB,UACvChrB,MAAyB,QAAlB,EAAAR,KAAK8tB,qBAAariB,QAAI,IAE/BzK,GAAI,CACF8d,MAAQpJ,GAAe1V,KAAK6N,MAAM,oBAAqB6H,KAI3D,OAAI1V,KAAKyC,aAAa,qBACbzC,KAAKyC,aAAa,qBAAsBxC,GAG1CD,KAAKM,eAAe4tB,OAAiB,CAC1ChuB,YAAa,4BACVD,KAGPkuB,cACE,OAAOnuB,KAAKM,eAAea,OAAO,CAChCjB,YAAa,4BACbvB,MAAO,CACLmI,KAAM,KAEP,CAAC9G,KAAK+tB,eCzEA1vB,iBAAO4U,GAAQxU,OAAO,CACnCC,KAAM,6BAENC,MAAO,CACLyvB,WAAY,CACVvvB,KAAMC,OACNK,QAAS,8BAIb+C,QAAS,CACPmsB,YAAa1vB,GACX,MAAMyD,EAAuC,CAACzD,EAAMgtB,KAAK/rB,MAEnD0uB,EAAYtuB,KAAKuB,QAAQujB,OAAOgD,UAAUC,GAAKA,IAAMppB,EAAMgtB,KAAK9rB,OAChE0uB,EAAcD,GAAa,EAC3BE,EAASxuB,KAAKuB,QAAQwjB,SAASuJ,GAYrC,OAVAlsB,EAAS0D,KAAK9F,KAAKM,eAAe,MAAO,CACvCJ,YAAa,gBACbC,MAAO,CACLsuB,UAAU,EACVvU,OAAQqU,EACRG,IAAKH,IAAgBC,EACrB5G,KAAM2G,GAAeC,IAEtB,CAACxuB,KAAKmuB,iBAEFnuB,KAAKM,eAAemf,OAAO,CAChCvf,YAAa,WACbc,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBACF7S,KAAK6N,MAAM,OAAQlP,EAAMgtB,KAAK9rB,UAGjCuC,IAELusB,cAAe9J,GACb,OAAO7kB,KAAKM,eAAekpB,OAAS,CAClC7qB,MAAO,CACLkrB,MAAO7pB,KAAKa,SAASC,KAAKC,EAAEf,KAAKouB,YACjCvJ,QACA4E,aAAa,EACbzO,SAAUhb,KAAKuB,QAAQ4jB,UACvBtlB,MAAOG,KAAKuB,QAAQ4jB,UAAYnlB,KAAKuB,QAAQujB,OAAS9kB,KAAKuB,QAAQujB,OAAO,GAC1E8J,UAAW,CAAEC,qBAAqB,IAEpC7tB,GAAI,CACFyR,OAASiD,GAAyB1V,KAAK6N,MAAM,OAAQ6H,IAEvD6X,YAAa,CACXvC,UAAWrsB,GAASqB,KAAKquB,YAAY1vB,QAM7CyE,OAAQC,GACN,MAAMjB,EAAuC,GAEvC6Q,EAASjT,KAAK6tB,QAAQhmB,KAAKxE,GAAiB,sBAAZA,EAAExD,OACpCoT,IAAWjT,KAAKsqB,cAClBloB,EAAS0D,KAAK9F,KAAKM,eAAe,MAAO,CACvCH,MAAO,CACL,wCACG+b,eAAYjJ,EAAO9S,QAExBS,MAAO,CACL0H,MAAO2K,EAAO3K,QAEf,CAACtI,KAAKiuB,kBAGX,MAAMa,EAAc9uB,KAAK6tB,QACtBhY,OAAOxS,IAAoB,IAAfA,EAAEorB,UAAkC,sBAAZprB,EAAExD,OACtC6R,IAAIrO,IAAK,CACRzD,KAAMyD,EAAEzD,KACRC,MAAOwD,EAAExD,UAGRG,KAAK0lB,aAAeoJ,EAAYvoB,QACnCnE,EAAS0D,KAAK9F,KAAK2uB,cAAcG,IAGnC,MAAMC,EAAK3sB,EAASmE,OAChBlD,EAAE,KAAM,CAACA,EAAE,MAAO,CAAEnD,YAAa,uCAAyCkC,UAC1ET,EAEEqtB,EAAK3rB,EAAE,KAAM,CAAC0rB,IAEpB,OAAO1rB,EAAE,QAAS,CAChBnD,YAAa,kDACZ,CAAC8uB,OC7FO3wB,iBAAO4U,GAAQxU,OAAO,CACnCC,KAAM,8BAENwD,QAAS,CACP+sB,iBAAkBhc,GAChB,OAAOjT,KAAKM,eAAe,OAAQ,CACjCU,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBACF7S,KAAK6N,MAAM,QAASoF,EAAOpT,UAG9B,CAAC,WAENqvB,QAASX,EAAsBC,GAC7B,MAAMW,EAAMrnB,GAAgB9H,KAAKa,SAASC,KAAKC,EAAE,gCAAgC+G,GAEjF,IAAIsnB,EAAW,OACXzc,EAAY,CACdwc,EAAG,YACHA,EAAG,sBAGL,OAAKZ,GAIDC,GACFY,EAAW,aACXzc,EAAY,CACVwc,EAAG,kBACHA,EAAGnvB,KAAKuB,QAAQ2jB,SAAW,oBAAsB,mBAGnDkK,EAAW,YACXzc,EAAY,CACVwc,EAAG,iBACHA,EAAG,wBAIA,CAAEC,WAAUzc,UAAWA,EAAUzB,KAAK,OAjBpC,CAAEke,WAAUzc,UAAWA,EAAUzB,KAAK,OAmBjD8B,UAAWC,GACT,MAAMhT,EAAsE,CAC1EW,MAAO,CACLiC,KAAM,eACNwsB,MAAO,MACP,aAAcpc,EAAOrT,MAAQ,IAE/BmD,MAAO,CACLuF,MAAOP,eAAckL,EAAO3K,OAC5ByZ,SAAUha,eAAckL,EAAO3K,QAEjCnI,MAAO,CACL,SAAQ8S,EAAOzO,OAAS,YACrB0X,eAAYjJ,EAAO9S,OACtB8S,EAAOqc,SAAW,yBAEpBtuB,GAAI,IAEAoB,EAAW,GAEjB,GAAqB,sBAAjB6Q,EAAOpT,QAAkCG,KAAKsqB,aAChD,OAAOtqB,KAAKM,eAAe,KAAML,EAAM,CAACD,KAAKiuB,iBAS/C,GANA7rB,EAAS0D,KACP9F,KAAKyC,aAAaT,eAAeiR,EAAOpT,OACpCG,KAAKyC,aAAawQ,EAAOpT,OAAQ,CAAEoT,WACnCjT,KAAKM,eAAe,OAAQ,CAAC2S,EAAOrT,SAGrCI,KAAK0lB,cAAgBzS,EAAOwb,WAAaxb,EAAOjR,eAAe,aAAc,CAChF/B,EAAKe,GAAGC,MAAQ,IAAMjB,KAAK6N,MAAM,OAAQoF,EAAOpT,OAEhD,MAAMyuB,EAAYtuB,KAAKuB,QAAQujB,OAAOgD,UAAUC,GAAKA,IAAM9U,EAAOpT,OAC5D0uB,EAAcD,GAAa,EAC3BE,EAASxuB,KAAKuB,QAAQwjB,SAASuJ,GAErCruB,EAAKE,MAAM2F,KAAK,YAEhB,MAAM,UAAE6M,EAAF,SAAayc,GAAapvB,KAAKkvB,QAAQX,EAAaC,GAE1DvuB,EAAKW,MAAM,eAAiB,GAAGqS,EAAOrT,KAAO,KAAO,KAAK+S,IACzD1S,EAAKW,MAAM,aAAewuB,EAEtBb,IACFtuB,EAAKE,MAAM2F,KAAK,UAChB7F,EAAKE,MAAM2F,KAAK0oB,EAAS,OAAS,QAGf,QAAjBvb,EAAOzO,MAAiBpC,EAASyV,QAAQ7X,KAAKmuB,eAC7C/rB,EAAS0D,KAAK9F,KAAKmuB,eAEpBnuB,KAAKuB,QAAQ4jB,WAAaoJ,GAC5BnsB,EAAS0D,KAAK9F,KAAKM,eAAe,OAAQ,CAAEH,MAAO,mCAAqC,CAACrB,OAAOwvB,EAAY,MAMhH,OAFItuB,KAAKguB,cAAoC,IAArB/a,EAAOsc,WAAqBntB,EAAS0D,KAAK9F,KAAKivB,iBAAiBhc,IAEjFjT,KAAKM,eAAe,KAAML,EAAMmC,KAI3CgB,SACE,OAAOpD,KAAKM,eAAe,QAAS,CAClCJ,YAAa,uBACZ,CACDF,KAAKM,eAAe,KAAMN,KAAK6tB,QAAQnc,IAAIuB,GAAUjT,KAAKgT,UAAUC,U,oCClG3D3N,eAAI7G,OAAO,CACxBC,KAAM,sBAEN6G,YAAY,EAEZ5G,MAAO,IACFsU,EAAO1R,QAAQ5C,MAClB6wB,OAAQnwB,SAGV+D,OAAQC,GAAG,MAAE1E,EAAF,KAASsB,EAAT,MAAewvB,IACxBC,eAAqBzvB,GACrB,MAAMmC,EAAWutB,eAAaF,IAASpsB,GAIvC,OAFApD,EAAO+F,eAAU/F,EAAM,CAAEtB,UAErBA,EAAM6wB,OACDnsB,EAAEusB,EAAwB3vB,EAAMmC,GAEhCiB,EAAEwsB,EAAyB5vB,EAAMmC,MC/B9C,SAAS0tB,EAASnR,G,MAChB,OAAwB,IAAjBA,EAAMpY,SACV,CAAC,KAAM,MAAMtH,SAAiB,QAAR,EAAA0f,EAAM,UAAElT,WAAA,EAAAA,EAAEjG,KAGtBF,mBAAI7G,OAAO,CACxBC,KAAM,MAEN6G,YAAY,EAEZ5G,MAAO,CACLkvB,QAAS7Z,MACTqY,MAAOtlB,OACP4kB,KAAMlnB,OACNqO,IAAKzT,SAGP+D,OAAQC,GAAG,MAAE1E,EAAF,MAAS8wB,EAAT,KAAgBxvB,IACzB,MAAM8vB,EAAgBN,IAEhBO,EAAUrxB,EAAMkvB,QAAQnc,IAAKuB,IACjC,MAAM7Q,EAAW,GACXvC,EAAQgsB,eAAqBltB,EAAMgtB,KAAM1Y,EAAOpT,OAEhDowB,EAAWhd,EAAOpT,MAClBqwB,EAAajwB,EAAKstB,aAAettB,EAAKstB,YAAYvrB,eAAeiuB,IAAahwB,EAAKstB,YAAY0C,GAC/FE,EAAcJ,EAAc/tB,eAAeiuB,IAAaF,EAAcE,GAExEC,EACF9tB,EAAS0D,QAAQoW,eAAYgU,EAAW,CACtCvE,KAAMhtB,EAAMgtB,KACZmB,UAAU,EACV7Z,SACAoZ,MAAO1tB,EAAM0tB,MACbxsB,YAEOswB,EACT/tB,EAAS0D,QAAQoW,eAAYiU,IAE7B/tB,EAAS0D,KAAc,MAATjG,EAAgBA,EAAQf,OAAOe,IAG/C,MAAMuwB,EAAY,SAAQnd,EAAOzO,OAAS,SAE1C,OAAOsrB,EAAQ1tB,GACXiB,EAAE,KAAM,CACRlD,MAAO,CACLiwB,EACAnd,EAAOod,UACP,CACE,wBAAyBpd,EAAOqc,WAGnCltB,GACDA,IAGN,OAAOiB,EAAE,KAAMpD,EAAM+vB,MC9DV1qB,eAAI7G,OAAO,CACxBC,KAAM,YAEN6G,YAAY,EAEZ5G,MAAO,CACLkB,MAAO,CACLhB,KAAMQ,QACNF,SAAS,GAEXmxB,YAAa,CACXzxB,KAAMC,OACNK,QAAS,uBAEX6L,aAAclM,OACdyxB,aAAc,CACZ1xB,KAAMC,OACNK,QAAS,yBAIbiE,OAAQC,GAAG,MAAEosB,EAAF,MAAS9wB,IAClB,MAAMoxB,EAAgBN,IAChBrtB,EAAW,GAoBjB,OAlBI2tB,EAAc,iBAChB3tB,EAAS0D,KAAKzC,EAAE,KAAM,CACpBnD,YAAavB,EAAM2xB,aAClBP,EAAc,mBACRA,EAAc,eACvB3tB,EAAS0D,QAAQiqB,EAAc,eAG7BA,EAAc,gBAAkBpxB,EAAMkB,OAAOuC,EAAS0D,QAAQiqB,EAAc,gBAE5EA,EAAc,kBAChB3tB,EAAS0D,KAAKzC,EAAE,KAAM,CACpBnD,YAAavB,EAAM4xB,cAClBR,EAAc,oBACRA,EAAc,gBACvB3tB,EAAS0D,QAAQiqB,EAAc,gBAG1B3tB,KCtCI/D,G,UAAAA,eAAOwD,QAAWpD,OAAO,CACtCC,KAAM,iBAENC,MAAO,CACLW,MAAOD,QACPmxB,YAAanxB,QACbgJ,OAAQ,CAACtB,OAAQjI,SAGnBgB,SAAU,CACRwB,UACE,MAAO,CACL,sBAAuBtB,KAAKV,MAC5B,+BAAgCU,KAAKqI,SAAWrI,KAAKwwB,YACrD,6BAA8BxwB,KAAKwwB,YACnC,0BAA2BxwB,KAAKqC,OAAOihB,IACvC,6BAA8BtjB,KAAKqC,OAAO4gB,UACvCjjB,KAAKwI,gBAKdtG,QAAS,CACPC,aACE,OAAOnC,KAAKqC,OAAOouB,SAAWzwB,KAAKM,eAAe,MAAO,CACvDJ,YAAa,wBACb6C,MAAO,CACLsF,OAAQN,eAAc/H,KAAKqI,UAE5B,CACDrI,KAAKM,eAAe,QAASN,KAAKqC,OAAOlD,aAK/CiE,OAAQC,GACN,OAAOA,EAAE,MAAO,CACdnD,YAAa,eACbC,MAAOH,KAAKsB,SACX,CACDtB,KAAKqC,OAAOihB,IACZtjB,KAAKmC,aACLnC,KAAKqC,OAAO4gB,aC7CH3d,eAAI7G,OAAO,CACxBC,KAAM,MAEN6G,YAAY,EAEZ5G,MAAO,CACLkvB,QAAS7Z,MACT0c,kBAAmBrxB,QACnBgtB,MAAOtlB,OACP4kB,KAAMlnB,OACNqO,IAAKzT,SAGP+D,OAAQC,GAAG,MAAE1E,EAAF,MAAS8wB,EAAT,KAAgBxvB,IACzB,MAAM8vB,EAAgBN,IAEhBO,EAAmBrxB,EAAMkvB,QAAQnc,IAAKuB,IAC1C,MAAM3R,EAAU,CACd,4BAA4B,GAGxBc,EAAW,GACXvC,EAAQgsB,eAAqBltB,EAAMgtB,KAAM1Y,EAAOpT,OAEhDowB,EAAWhd,EAAOpT,MAClBqwB,EAAajwB,EAAKstB,aAAettB,EAAKstB,YAAYvrB,eAAeiuB,IAAahwB,EAAKstB,YAAY0C,GAC/FE,EAAcJ,EAAc/tB,eAAeiuB,IAAaF,EAAcE,GAExEC,EACF9tB,EAAS0D,KAAKoqB,EAAW,CACvBvE,KAAMhtB,EAAMgtB,KACZmB,UAAU,EACV7Z,SACAoZ,MAAO1tB,EAAM0tB,MACbxsB,WAEOswB,EACT/tB,EAAS0D,KAAKqqB,GAEd/tB,EAAS0D,KAAc,MAATjG,EAAgBA,EAAQf,OAAOe,IAG/C,MAAM8wB,EAAoB,CACxBttB,EAAE,MAAO,CACPnD,YAAa,kCACZkC,IAWL,MARqB,oBAAjB6Q,EAAOpT,OAAgClB,EAAM+xB,mBAC/CC,EAAkB9Y,QAChBxU,EAAE,MAAO,CACPnD,YAAa,oCACZ,CAAC+S,EAAOrT,QAIRyD,EAAE,KAAM,CAAElD,MAAOmB,GAAWqvB,KAGrC,OAAOttB,EAAE,KAAM,IAAKpD,EAAMC,YAAa,kCAAoC8vB,M,YCpB/E,SAASY,EAAUjF,EAAW9F,EAAuBhQ,GACnD,OAAQ5C,IACN,MAAMpT,EAAQgsB,eAAqBF,EAAM1Y,EAAOpT,OAChD,OAAOoT,EAAO4C,OAAS5C,EAAO4C,OAAOhW,EAAOgmB,EAAQ8F,GAAQ9V,EAAOhW,EAAOgmB,EAAQ8F,IAItF,SAASkF,EACPhM,EACAgB,EACAiL,EACAC,EACAjL,GAIA,OAFAD,EAA2B,kBAAXA,EAAsBA,EAAOxe,OAAS,KAE/Cwd,EAAMhP,OAAO8V,IAGlB,MAAMqF,EAAuBF,EAAyBvF,MAAMqF,EAASjF,EAAM9F,EAAQoL,SAI7EC,GAAqBrL,GAAUkL,EAA4B3qB,KAAKwqB,EAASjF,EAAM9F,EAAQC,IAE7F,OAAOkL,GAAwBE,IAKpB7yB,sBACb8yB,EACAC,QACA3yB,OAAO,CACPC,KAAM,eAGNuE,WAAY,CACV8gB,eAGFplB,MAAO,CACLkvB,QAAS,CACPhvB,KAAMmV,MACN7U,QAAS,IAAM,IAEjBkyB,WAAYhyB,QACZyuB,cAAehvB,OACfwyB,WAAYjyB,QACZ2uB,YAAa3uB,QAGbgJ,OAAQ,CAACtB,OAAQjI,QACjB4xB,kBAAmBrxB,QACnBkyB,QAASzyB,OACTQ,MAAOD,QACPmyB,YAAa/sB,OACbgtB,gBAAiBpyB,QACjBmxB,YAAanxB,QACbqyB,cAAe3qB,OACf4qB,WAAY,CACV9yB,KAAMC,OACNK,QAAS,WAEX2mB,aAAc,CACZjnB,KAAM+S,SACNzS,QAAS8xB,QAEXW,UAAW,CACT/yB,KAAM,CAACC,OAAQ8S,UACfzS,QAAS,IAAM,IAEjB0yB,aAAc,CACZhzB,KAAM,CAACkI,OAAQjI,QACfK,QAAS,IAIbc,OACE,MAAO,CACL6xB,gBAAiB,GACjBC,UAAW,GACXC,OAAQ,KAIZlyB,SAAU,CACRmyB,kBACE,IAAKjyB,KAAK6tB,QAAS,MAAO,GAC1B,MAAMA,EAAU7tB,KAAK6tB,QAAQhY,OAAOxS,QAAiB1B,IAAZ0B,EAAExD,QAAwBG,KAAK8xB,gBAAgBjqB,KAAK6N,GAAKA,IAAMrS,EAAExD,QACpGqyB,EAAgB,CAAEtyB,KAAM,GAAI6uB,UAAU,EAAOnmB,MAAO,OAE1D,GAAItI,KAAKqxB,WAAY,CACnB,MAAMhF,EAAQwB,EAAQ/F,UAAUzkB,GAAiB,sBAAZA,EAAExD,OACnCwsB,EAAQ,EAAGwB,EAAQhW,QAAQ,IAAKqa,EAAeryB,MAAO,sBACrDguB,EAAQ7F,OAAOqE,EAAO,EAAG,IAAK6F,KAAkBrE,EAAQxB,KAG/D,GAAIrsB,KAAKsxB,WAAY,CACnB,MAAMjF,EAAQwB,EAAQ/F,UAAUzkB,GAAiB,sBAAZA,EAAExD,OACnCwsB,EAAQ,EAAGwB,EAAQhW,QAAQ,IAAKqa,EAAeryB,MAAO,sBACrDguB,EAAQ7F,OAAOqE,EAAO,EAAG,IAAK6F,KAAkBrE,EAAQxB,KAG/D,OAAOwB,GAETsE,eACE,OAAOnyB,KAAK8sB,cAAWnrB,EAAY,CACjCywB,QAASpyB,KAAK0xB,eAAiB1xB,KAAKiyB,gBAAgB1rB,SAGxD8rB,gBACE,OAAOryB,KAAKiyB,gBAAgBnuB,OAAiD,CAACwuB,EAAKrf,KAC7EA,EAAOyD,OAAM4b,EAAIrf,EAAOpT,OAASoT,EAAOyD,MACrC4b,GACN,KAELxB,2BACE,OAAO9wB,KAAK6tB,QAAQhY,OAAO5C,GAAUA,EAAO4C,UAAY5C,EAAOjR,eAAe,gBAAuC,IAAtBiR,EAAOsf,cAExGxB,8BACE,OAAO/wB,KAAK6tB,QAAQhY,OAAO5C,IAAWA,EAAO4C,UAAY5C,EAAOjR,eAAe,gBAAuC,IAAtBiR,EAAOsf,cAEzGC,uBACE,OAAO9G,eAAmB1rB,KAAKwxB,cAEjCiB,uBACE,MAAMpN,EAAerlB,KAAKuB,SAAWvB,KAAKuB,QAAQ8jB,aAAerlB,KAAKuB,QAAQ8jB,aAAerlB,KAAKqlB,aAC5F6C,EAA4DloB,KAAKyrB,qBAAqBvD,oBAE5F,GACEA,IACCA,EAAoBrgB,KAAK8jB,GAAwB,kBAATA,EAAoBA,IAAStG,EAAesG,EAAK9rB,QAAUwlB,GACpG,CACA,MAAMqN,EAAcxK,EAAoB,GACxC,MAA8B,kBAAhBwK,EAA2BA,EAAY7yB,MAAQ6yB,EAG/D,OAAOrN,GAETsN,c,UACE,OAAqF,QAA9E,EAAwE,QAAxE,EAAY,QAAZ,EAAA3yB,KAAK6tB,eAAOpiB,WAAA,EAAAA,EAAE5D,KAAKoL,IAAS,MAAC,OAAAA,EAAOpT,SAA8B,QAApB,EAAAG,KAAK8xB,uBAAermB,WAAA,EAAAA,EAAG,aAAG8B,WAAA,EAAAA,EAAE3N,YAAIgzB,QAAI,KAI7F9wB,UACE,MAAMmiB,EAAgB,CACpB,CAAC,YAAa,0BACd,CAAC,eAAgB,uBACjB,CAAC,aAAc,gBAIjBA,EAAcpe,QAAQ,EAAEqe,EAAUC,MAC5BnkB,KAAK+B,OAAOC,eAAekiB,IAAWjiB,eAASiiB,EAAUC,EAAankB,SAI9EuU,UAMMvU,KAAKyxB,kBACPvlB,OAAOuB,iBAAiB,SAAUzN,KAAK6yB,YACvC7yB,KAAK6yB,eAIT5mB,gBACMjM,KAAKyxB,iBACPvlB,OAAOyB,oBAAoB,SAAU3N,KAAK6yB,aAI9C3wB,QAAS,CACP2wB,aACE7yB,KAAKgyB,OAAShe,MAAMwC,KAAKxW,KAAK8M,IAAIyB,iBAAiB,OAAOmD,IAAInF,GAAKA,EAAEumB,cAEvEC,wBAAyBlO,EAAcgB,GACrC,OAAOgL,EAAiBhM,EAAOgB,EAAQ7lB,KAAK8wB,yBAA0B9wB,KAAK+wB,4BAA6B/wB,KAAK8lB,eAE/GkN,sBAAuBnO,EAAcC,EAAkBC,EAAqBrU,GAC1E,OAAO1Q,KAAKglB,WAAWH,EAAOC,EAAQC,EAAUrU,EAAQ1Q,KAAKqyB,gBAE/DxF,gBAAiBlB,EAAWU,GAC1B,MAAM1tB,EAAQwyB,EAAc5vB,QAAQW,QAAQ2qB,gBAAgBrrB,KAAKxB,KAAM2rB,EAAMU,GAE7E,OAAO5nB,OAAOyhB,OAAOvnB,EAAO,CAAEkvB,QAAS7tB,KAAKiyB,mBAE9CgB,WAAYt0B,GACV,OAAIqB,KAAKuxB,QAAgB,CAACvxB,KAAKM,eAAe,UAAW,CAACN,KAAKuxB,WAExDrH,eAAQlqB,KAAM,UAAWrB,GAAO,IAEzCu0B,YAAav0B,GACX,OAAOqB,KAAKM,eAAe,WAAYN,KAAKiyB,gBAAgBvgB,IAAIuB,GACvDjT,KAAKM,eAAe,MAAO,CAChCH,MAAO,CACLmvB,QAASrc,EAAOqc,cAKxB6D,aACE,MAAMpE,EAAK/uB,KAAKM,eAAe,KAAM,CACnCJ,YAAa,SACbU,MAAOZ,KAAKmyB,cACX,CAACnyB,KAAKozB,gBAEHpE,EAAKhvB,KAAKM,eAAe,KAAM,CACnCJ,YAAa,0BACZ,CAAC6uB,IAEJ,OAAO/uB,KAAKM,eAAe,QAAS,CAAC0uB,KAEvCqE,WAAY10B,GACV,MAAMsB,EAAO,CACXtB,MAAO,IACFqB,KAAKwyB,qBACR3E,QAAS7tB,KAAKiyB,gBACd1wB,QAAS5C,EAAM4C,QACfiuB,OAAQxvB,KAAK8sB,SACbkB,YAAahuB,KAAKguB,YAClBF,cAAe9tB,KAAK8tB,cACpBtC,UAAWxrB,KAAKwrB,UAChBH,UAAWrrB,KAAKqrB,UAChBf,aAActqB,KAAKsqB,aACnB5E,YAAa1lB,KAAK0lB,aAEpB1kB,GAAI,CACF0V,KAAM/X,EAAM+X,KACZyQ,MAAOxoB,EAAMwoB,MACb,oBAAqBnnB,KAAKksB,kBAKxB9pB,EAAuC,CAAC8nB,eAAQlqB,KAAM,SAAU,IACjEC,EACH6sB,SAAU9sB,KAAK8sB,YAGjB,IAAK9sB,KAAK0wB,kBAAmB,CAC3B,MAAMnD,EAAcC,eAAuB,UAAWxtB,KAAKyC,cAC3DL,EAAS0D,KAAK9F,KAAKM,eAAegzB,EAAkB,IAC/CrzB,EACHstB,iBAMJ,OAFIvtB,KAAK0iB,SAAStgB,EAAS0D,KAAK9F,KAAKmzB,cAE9B/wB,GAET2qB,gBAAiBpgB,GACf,OAAO3M,KAAKM,eAAe,KAAM,CAC/BJ,YAAa,+BACZ,CACDF,KAAKM,eAAe,KAAM,CACxBM,MAAOZ,KAAKmyB,cACXxlB,MAGPygB,SAAUvI,EAAclmB,GACtB,MAAM0uB,EAAQrtB,KAAKgtB,SAASruB,EAAM0oB,oBAAqB1oB,EAAMkoB,WAAWP,aACxE,OAAI+G,EAAc,CAACA,GAEZ1uB,EAAMqoB,aACThnB,KAAKuzB,eAAe50B,EAAMqoB,aAAcroB,GACxCqB,KAAKwzB,QAAQ3O,EAAOlmB,IAE1B40B,eAAgBvM,EAAgCroB,GAC9C,OAAOqoB,EAAatV,IAAIyV,IACjBnnB,KAAK+xB,UAAU/vB,eAAemlB,EAAMzoB,OAAOsB,KAAKwgB,KAAKxgB,KAAK+xB,UAAW5K,EAAMzoB,MAAM,GAElFsB,KAAKyC,aAAa0kB,MACbnnB,KAAKyC,aAAa0kB,MAAM,CAC7BA,MAAOA,EAAMzoB,KACb6C,QAAS5C,EAAM4C,QACfurB,SAAU9sB,KAAK8sB,SACfjI,MAAOsC,EAAMtC,MACbgJ,QAAS7tB,KAAKiyB,kBAGTjyB,KAAKyzB,qBAAqBtM,EAAMzoB,KAAMyoB,EAAMtC,MAAOlmB,MAIhE80B,qBAAsBtM,EAAetC,EAAclmB,GACjD,MAAM+0B,IAAW1zB,KAAK+xB,UAAU5K,GAC1B/kB,EAA0B,CAC9BpC,KAAKM,eAAe,WAAY,CAAEqe,KAAM,eAAiB3e,KAAKwzB,QAAQ3O,EAAOlmB,KAEzEg1B,EAAW,IAAM3zB,KAAKwgB,KAAKxgB,KAAK+xB,UAAW5K,GAAQnnB,KAAK+xB,UAAU5K,IAClEyM,EAAW,IAAMj1B,EAAMyoB,cAAc,CAAE9B,QAAS,GAAIC,UAAW,KAErE,GAAIvlB,KAAKyC,aAAa,gBACpBL,EAASyV,QAAQ7X,KAAKM,eAAe,WAAY,CAAEqe,KAAM,iBAAmB,CAC1E3e,KAAKyC,aAAa,gBAAiB,CACjC0kB,QACA7B,QAAS3mB,EAAM4C,QAAQ+jB,QACvBwH,SAAU9sB,KAAK8sB,SACfjI,QACAgJ,QAAS7tB,KAAKiyB,gBACdyB,SACA/wB,OAAQgxB,EACRE,OAAQD,WAGP,CACL,MAAMjxB,EAAS3C,KAAKM,eAAeI,OAAM,CACvCR,YAAa,OACbvB,MAAO,CACLc,MAAM,EACNkB,OAAO,GAETK,GAAI,CACFC,MAAO0yB,IAER,CAAC3zB,KAAKM,eAAea,OAAO,CAACuyB,EAAS,SAAW,YAE9CG,EAAS7zB,KAAKM,eAAeI,OAAM,CACvCR,YAAa,OACbvB,MAAO,CACLc,MAAM,EACNkB,OAAO,GAETK,GAAI,CACFC,MAAO2yB,IAER,CAAC5zB,KAAKM,eAAea,OAAO,CAAC,aAE1B2yB,EAAS9zB,KAAKM,eAAe,KAAM,CACvCJ,YAAa,aACbU,MAAOZ,KAAKmyB,cACX,CAACxvB,EAAQ,GAAG3C,KAAK2yB,gBAAgBxL,IAAS0M,IAE7CzxB,EAASyV,QAAQ7X,KAAKM,eAAe,WAAY,CAAEqe,KAAM,iBAAmB,CAACmV,KAiB/E,OAdI9zB,KAAKyC,aAAa,kBACpBL,EAAS0D,KAAK9F,KAAKM,eAAe,WAAY,CAAEqe,KAAM,kBAAoB,CACxE3e,KAAKyC,aAAa,iBAAkB,CAClC0kB,QACA7B,QAAS3mB,EAAM4C,QAAQ+jB,QACvBwH,SAAU9sB,KAAK8sB,SACfjI,QACAgJ,QAAS7tB,KAAKiyB,gBACdyB,SACA/wB,OAAQgxB,OAKP3zB,KAAKM,eAAeyzB,EAAU,CACnCjsB,IAAKqf,EACLxoB,MAAO,CACLkB,MAAO6zB,IAERtxB,IAELoxB,QAAS3O,EAAclmB,GACrB,OAAOqB,KAAKyC,aAAakpB,KAAO3rB,KAAKg0B,cAAcnP,EAAOlmB,GAASqB,KAAKi0B,eAAepP,EAAOlmB,IAEhGq1B,cAAenP,EAAclmB,GAC3B,MAAMga,EAAO,GAEb,IAAK,IAAInB,EAAI,EAAGA,EAAIqN,EAAMte,OAAQiR,IAAK,CACrC,MAAMmU,EAAO9G,EAAMrN,GACnBmB,EAAK7S,KAAK9F,KAAKyC,aAAakpB,KAAM,IAC7B3rB,KAAK6sB,gBAAgBlB,EAAMnU,GAC9BsV,SAAU9sB,KAAK8sB,YAGb9sB,KAAK2sB,WAAWhB,IAClBhT,EAAK7S,KAAK9F,KAAKyC,aAAa,iBAAkB,CAC5CorB,QAAS7tB,KAAKiyB,gBACdnF,SAAU9sB,KAAK8sB,SACfT,MAAO7U,EACPmU,UAKN,OAAOhT,GAETsb,eAAgBpP,EAAclmB,GAC5B,OAAOqB,KAAKyC,aAAa,iBACrBoiB,EAAMnT,IAAI,CAACia,EAAMU,IAAUrsB,KAAKk0B,sBAAsBvI,EAAMU,IAC5DxH,EAAMnT,IAAI,CAACia,EAAMU,IAAUrsB,KAAKm0B,oBAAoBxI,EAAMU,KAEhE6H,sBAAuBvI,EAAWU,GAChC,MAAMM,EAAa3sB,KAAK2sB,WAAWhB,GAC7BrqB,EAAU,CACd,qDAAsDqrB,GAElDyH,EAAYp0B,KAAKm0B,oBAAoBxI,EAAMU,EAAO/qB,GAClD+yB,EAAcr0B,KAAKM,eAAe,KAAM,CAC5CJ,YAAa,0DACZ,CAACF,KAAKyC,aAAa,iBAAkB,CACtCorB,QAAS7tB,KAAKiyB,gBACdnF,SAAU9sB,KAAK8sB,SACfnB,WAGF,OAAO3rB,KAAKM,eAAeyzB,EAAU,CACnCp1B,MAAO,CACLkB,MAAO8sB,IAER,CACD3sB,KAAKM,eAAe,WAAY,CAAEqe,KAAM,cAAgB,CAACyV,IACzDp0B,KAAKM,eAAe,WAAY,CAAEqe,KAAM,eAAiB,CAAC0V,OAG9DF,oBAAqBxI,EAAWU,EAAe/qB,EAAmC,IAChF,MAAMisB,EAAcC,eAAuB,QAASxtB,KAAKyC,cAEnDxC,EAAOD,KAAK6sB,gBAAgBlB,EAAMU,GAExC,GAAIrsB,KAAKqxB,WAAY,CACnB,MAAM1S,EAAO4O,EAAY,qBACzBA,EAAY,qBAAuB5O,EAAO,IAAMA,EAAK,IAChD1e,EACH6sB,SAAU9sB,KAAK8sB,WACZ,K,MAAM,OAAA9sB,KAAKM,eAAe4tB,OAAiB,CAC9ChuB,YAAa,yBACbvB,MAAO,CACLkB,MAAOI,EAAK4U,WACZlO,UAAW3G,KAAK4rB,aAAaD,GAC7BnrB,MAAyB,QAAlB,EAAAR,KAAK8tB,qBAAariB,QAAI,IAE/BzK,GAAI,CACF8d,MAAQ9f,GAAiBiB,EAAKksB,OAAOntB,OAK3C,GAAIgB,KAAKsxB,WAAY,CACnB,MAAM3S,EAAO4O,EAAY,qBACzBA,EAAY,qBAAuB5O,EAAO,IAAMA,EAAK1e,GAAQ,IAAMD,KAAKM,eAAea,OAAO,CAC5FjB,YAAa,4BACbC,MAAO,CACL,oCAAqCF,EAAK0sB,YAE5C3rB,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBACF5S,EAAK2sB,QAAQ3sB,EAAK0sB,eAGrB,CAAC3sB,KAAK2xB,aAGX,OAAO3xB,KAAKM,eAAeN,KAAK8sB,SAAWwH,EAAYC,EAAK,CAC1DzsB,IAAK+jB,eAAqBF,EAAM3rB,KAAKqqB,SACrClqB,MAAOq0B,eACL,IAAKlzB,EAAS,yBAA0BrB,EAAK4U,YAC7C4f,eAAoB9I,EAAM3rB,KAAK4xB,YAEjCjzB,MAAO,CACLkvB,QAAS7tB,KAAKiyB,gBACdvB,kBAAmB1wB,KAAK0wB,kBACxBrE,QACAV,OACA7Y,IAAK9S,KAAKa,SAASiS,KAErBya,cACAvsB,GAAI,CAGFC,MAAO,IAAMjB,KAAK6N,MAAM,YAAa8d,EAAM1rB,GAC3Cy0B,YAAclhB,GAAsBxT,KAAK6N,MAAM,kBAAmB2F,EAAOvT,GACzE00B,SAAWnhB,GAAsBxT,KAAK6N,MAAM,eAAgB2F,EAAOvT,OAIzE20B,QAASj2B,GACP,MAAMsB,EAAO,IACRtB,EACHiuB,OAAQ5sB,KAAK4sB,OACbiB,QAAS7tB,KAAKiyB,gBACdtF,WAAY3sB,KAAK2sB,WACjBG,SAAU9sB,KAAK8sB,SACfjY,WAAY7U,KAAK6U,WACjBsX,OAAQnsB,KAAKmsB,QAGf,OAAInsB,KAAKyC,aAAaoyB,KACb70B,KAAKyC,aAAaoyB,KAAM50B,GAG1BD,KAAKM,eAAe,QAAS,CAClC4pB,eAAQlqB,KAAM,eAAgBC,GAAM,GACpCD,KAAKotB,SAASzuB,EAAMkmB,MAAOlmB,GAC3BurB,eAAQlqB,KAAM,cAAeC,GAAM,MAGvC60B,QAASn2B,G,QACP,OAA6B,QAAtB,KAAAqB,KAAKyC,cAAasyB,YAAIxnB,WAAA,EAAAA,SAAG5O,IAElCq2B,WAAYr2B,GACV,MAAMsB,EAAO,CACXtB,MAAO,CACL4C,QAAS5C,EAAM4C,QACfslB,WAAYloB,EAAMkoB,WAClBwB,iBAAkB,yCACfroB,KAAKyrB,sBAEVzqB,GAAI,CACF,iBAAmBnB,GAAelB,EAAMyoB,cAAcvnB,IAExDmyB,OAAQhyB,KAAKgyB,OACbnE,QAAS7tB,KAAKiyB,iBAGV7vB,EAA0B,CAC9B8nB,eAAQlqB,KAAM,SAAUC,GAAM,IAUhC,OAPKD,KAAK6qB,mBACRzoB,EAAS0D,KAAK9F,KAAKM,eAAemtB,EAAa,IAC1CxtB,EACHstB,YAAaC,eAAuB,UAAWxtB,KAAKyC,iBAIjDL,GAETsrB,qBAAsB/uB,GACpB,MAAMs2B,EAAc,CAClB5sB,OAAQrI,KAAKqI,OACbmoB,YAAaxwB,KAAKwwB,YAClBlxB,MAAOU,KAAKV,OAqBd,OAAOU,KAAKM,eAAe40B,EAAc,CACvCv2B,MAAOs2B,EACP90B,MAAO,CACL,uBAAwBH,KAAK8sB,WAE9B,CACD9sB,KAAKm1B,UAAU,MAAOjL,eAAQlqB,KAAM,MAAO,IACtCrB,EACHmuB,SAAU9sB,KAAK8sB,WACd,IACH9sB,KAAKizB,WAAWt0B,GAChBqB,KAAKkzB,YAAYv0B,GACjBqB,KAAKqzB,WAAW10B,GAChBqB,KAAK40B,QAAQj2B,GACbqB,KAAK80B,QAAQn2B,GACbqB,KAAKm1B,UAAU,SAAUn1B,KAAKg1B,WAAWr2B,OAG7Cw2B,UAAWxW,EAAchS,GACvB,OAAO3M,KAAKM,eAAe,WAAY,CAAEqe,QAAQhS,KAIrDvJ,SACE,OAAOpD,KAAKM,eAAe8pB,EAAO,CAChCzrB,MAAO,IACFqB,KAAK4tB,OACR9H,aAAc9lB,KAAK+yB,wBACnB/N,WAAYhlB,KAAKgzB,sBACjB3N,aAAcrlB,KAAKyyB,sBAErBzxB,GAAI,CACF,iBAAkB,CAAC0U,EAAgB6R,KACjCvnB,KAAK8xB,gBAAkBpc,EAAE4P,SAAW,IACnCkC,eAAU9R,EAAG6R,IAAQvnB,KAAK6N,MAAM,iBAAkB6H,IAErD,cAAgBA,GAAc1V,KAAK6N,MAAM,cAAe6H,GACxD,wBAA0BA,GAAc1V,KAAK6N,MAAM,wBAAyB6H,GAC5E,iBAAmBA,GAAyB1V,KAAK6N,MAAM,iBAAkB6H,GACzE,mBAAqBA,GAA2B1V,KAAK6N,MAAM,mBAAoB6H,GAC/E,kBAAoBA,GAAyB1V,KAAK6N,MAAM,kBAAmB6H,GAC3E,oBAAsBA,GAA2B1V,KAAK6N,MAAM,oBAAqB6H,GACjFmR,WAAY,CAACnR,EAAmB6R,KAAyBC,eAAU9R,EAAG6R,IAAQvnB,KAAK6N,MAAM,aAAc6H,GACvG,gBAAkBA,IAChB1V,KAAKkrB,qBAAuBxV,EAC5B1V,KAAK6N,MAAM,gBAAiB6H,IAE9B,aAAeA,GAAc1V,KAAK6N,MAAM,aAAc6H,IAExD6X,YAAa,CACXpuB,QAASa,KAAK0tB,4B,oCCxoBtB,oKAGA,MAAM0H,EAAe5V,eAAuB,mBACtC6V,EAAgB7V,eAAuB,oBACvC8V,EAAY9V,eAAuB,gBACnC+V,EAAa/V,eAAuB,iBAYtCgW,Q,oCClBJ,gBAGer0B,e,gJCYAmE,oBAAI7G,OAAO,CACxBC,KAAM,oBAEN6G,YAAY,EAEZtC,WAAY,CACVwyB,eAGF92B,MAAO,IACF8H,OAAUlF,QAAQ5C,SAClBkD,OAAUN,QAAQ5C,MACrBgI,SAAUtH,QACV0kB,OAAQ,CACNllB,KAAMQ,QACNF,SAAS,GAEXU,MAAOR,QACPolB,cAAeplB,QACfq2B,kBAAmB,CACjB72B,KAAMC,OACNK,QAAS,0BAEXw2B,OAAQ,CACN92B,KAAMC,OACNK,QAAS,eAEXy2B,QAAS,CACP/2B,KAAMC,OACNK,QAAS,iBAIbiE,OAAQC,GAAG,MAAE1E,EAAF,KAASsB,EAAT,UAAe41B,IACxB,MAAMzzB,EAAW,GACjB,IAAI3C,EAAOd,EAAMi3B,QAYjB,GAXIj3B,EAAM8lB,cAAehlB,EAAOd,EAAM+2B,kBAC7B/2B,EAAMkB,QAAOJ,EAAOd,EAAMg3B,QAEnCvzB,EAAS0D,KAAKzC,EAAElC,OAAOsF,OAAUlF,QAAQW,QAAQiB,aAAaxE,EAAMkB,OAASlB,EAAM6B,MAAO,CACxF7B,MAAO,CACLgI,SAAUhI,EAAMgI,SAChBwD,KAAMxL,EAAMwL,KACZE,MAAO1L,EAAM0L,SAEb5K,IAEAd,EAAMolB,SAAWplB,EAAMgI,SAAU,CACnC,MAAMod,EAAS1gB,EAAE,MAAOoD,OAAUlF,QAAQW,QAAQiB,aAAaxE,EAAM6B,MAAO,CAC1EN,YAAa,sCACb+C,WAAY,CAAC,CACXY,IAAK4xB,OACL/2B,KAAM,SACNmB,MAAO,CAAEi2B,QAAQ,QAIrB1zB,EAAS0D,KAAKie,GAGhB,OAAO1gB,EAAE,MACP2C,eAAU/F,EAAM,CACdE,MAAO,CACL,qBAAqB,EACrB,8BAA+BxB,EAAMgI,UAEvC3F,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBAEE5S,EAAKe,IAAMf,EAAKe,GAAG8d,QAAUngB,EAAMgI,UACrCuV,eAAYjc,EAAKe,GAAG8d,OAAOjZ,QAAQkwB,GAAKA,GAAGp3B,EAAMkB,YAIrD,CACFwD,EAAE,MAAO,CAAEnD,YAAa,sCAAwCkC,S,kCC3FxE,4DAYe4zB,cAAWv3B,OAAO,CAC/BC,KAAM,aAENC,MAAO,CACL8lB,cAAeplB,QACfq2B,kBAAmB,CACjB72B,KAAMC,OACNK,QAAS,0BAEXy2B,QAAS,CACP/2B,KAAMC,OACNK,QAAS,gBAEXw2B,OAAQ,CACN92B,KAAMC,OACNK,QAAS,gBAIbc,OACE,MAAO,CACLg2B,mBAAoBj2B,KAAKykB,gBAI7B3kB,SAAU,CACRwB,UACE,MAAO,IACF40B,OAAO30B,QAAQzB,SAASwB,QAAQE,KAAKxB,MACxC,+BAA+B,EAC/B,qBAAqB,EACrB,yBAA0BA,KAAKi2B,qBAGnC50B,eACE,OAAIrB,KAAKi2B,mBACAj2B,KAAK01B,kBACH11B,KAAKkB,SACPlB,KAAK21B,OAEL31B,KAAK41B,SAMhBO,kBACE,IAAIn2B,KAAKo2B,YAAep2B,KAAKi2B,mBAC7B,OAAIj2B,KAAKq2B,UAAYr2B,KAAK2gB,eAAuB,QAC7C3gB,KAAKs2B,WAAmB,UACN,OAAlBt2B,KAAKu2B,SAA0Bv2B,KAAKK,mBAAxC,IAKJ+K,MAAO,CACLqZ,cAAezlB,GAEbgB,KAAK+L,UAAU,IAAO/L,KAAKi2B,mBAAqBj3B,IAElDi3B,mBAAoBj3B,GAClBgB,KAAK6N,MAAM,uBAAwB7O,IAErCkC,WACOlB,KAAKykB,gBACVzkB,KAAKi2B,oBAAqB,KAI9B/zB,QAAS,CACPs0B,cACE,MAAM,MAAEC,KAAUC,GAAkB12B,KAAKiI,OACzC,OAAOjI,KAAKM,eAAe,MAAO,CAChCJ,YAAa,sCACZ,CACDF,KAAKM,eAAea,OAAOnB,KAAKmD,aAAanD,KAAKm2B,gBAAiB,CACjEx3B,MAAO,CACLW,MAAOU,KAAKV,MACZ6K,KAAMnK,KAAKmK,KACXE,MAAOrK,KAAKqK,SAEZrK,KAAKqB,cACTrB,KAAK22B,SAAS,WAAY,IACrBD,EACH,eAAgB12B,KAAKi2B,mBACjB,QACAj2B,KAAKkB,SAAS+oB,aAEpBjqB,KAAK42B,UAAU52B,KAAKmD,aAAanD,KAAK62B,iBAG1CC,iBACE,MAAO,CACL92B,KAAKw2B,cACLx2B,KAAK+2B,iB,8IC5Eb,MAAMC,EAAiC,qBAAX9qB,QAA0B,yBAA0BA,OAGjE7N,sBACb44B,OACAp1B,QACApD,OAAO,CACPC,KAAM,QAENuE,WAAY,CAAEi0B,kBAEdv4B,MAAO,CACLw4B,IAAKr4B,OACLs4B,QAAS/3B,QACTg4B,MAAOh4B,QACPi4B,SAAUx4B,OACVy4B,QAASz4B,OACTyC,QAAS,CACP1C,KAAM4F,OAGNtF,QAAS,KAAM,CACbyP,UAAMjN,EACN61B,gBAAY71B,EACZ81B,eAAW91B,KAGf+1B,SAAU,CACR74B,KAAMC,OACNK,QAAS,iBAEXqI,MAAO1I,OACP64B,IAAK,CACH94B,KAAM,CAACC,OAAQ2F,QACftF,QAAS,IAEXy4B,OAAQ94B,OACRwE,WAAY,CACVzE,KAAM,CAACQ,QAASP,QAChBK,QAAS,oBAIbc,OACE,MAAO,CACL43B,WAAY,GACZC,MAAO,KACPC,WAAW,EACXC,2BAAuBr2B,EACvBs2B,kBAAct2B,EACd00B,UAAU,IAIdv2B,SAAU,CACRo4B,sBACE,OAAOnxB,OAAO/G,KAAKm4B,cAAcC,QAAUp4B,KAAKg4B,wBAElDG,gBACE,OAAOn4B,KAAK23B,KAA2B,kBAAb33B,KAAK23B,IAC3B,CACAA,IAAK33B,KAAK23B,IAAIA,IACdC,OAAQ53B,KAAK43B,QAAU53B,KAAK23B,IAAIC,OAChCL,QAASv3B,KAAKu3B,SAAWv3B,KAAK23B,IAAIJ,QAClCa,OAAQrxB,OAAO/G,KAAKq4B,aAAer4B,KAAK23B,IAAIS,SAC1C,CACFT,IAAK33B,KAAK23B,IACVC,OAAQ53B,KAAK43B,OACbL,QAASv3B,KAAKu3B,QACda,OAAQrxB,OAAO/G,KAAKq4B,aAAe,KAGzCC,gBACE,KAAMt4B,KAAKm4B,cAAcR,KAAO33B,KAAKm4B,cAAcZ,SAAWv3B,KAAKs3B,UAAW,MAAO,GAErF,MAAMiB,EAA4B,GAC5BZ,EAAM33B,KAAK+3B,UAAY/3B,KAAKm4B,cAAcZ,QAAUv3B,KAAK63B,WAE3D73B,KAAKs3B,UAAUiB,EAAgBzyB,KAAK,mBAAmB9F,KAAKs3B,aAC5DK,GAAKY,EAAgBzyB,KAAK,QAAQ6xB,OAEtC,MAAMG,EAAQ93B,KAAKM,eAAe,MAAO,CACvCJ,YAAa,iBACbC,MAAO,CACL,0BAA2BH,KAAK+3B,UAChC,0BAA2B/3B,KAAKo3B,QAChC,yBAA0Bp3B,KAAKo3B,SAEjCr0B,MAAO,CACLw1B,gBAAiBA,EAAgBrnB,KAAK,MACtCsnB,mBAAoBx4B,KAAK03B,UAE3B5vB,KAAM9H,KAAK+3B,YAIb,OAAK/3B,KAAKsD,WAEHtD,KAAKM,eAAe,aAAc,CACvCM,MAAO,CACLlC,KAAMsB,KAAKsD,WACXE,KAAM,WAEP,CAACs0B,IAPyBA,IAWjC1sB,MAAO,CACLusB,MAEO33B,KAAK+3B,UACL/3B,KAAKy4B,YADWz4B,KAAK04B,UAAK/2B,OAAWA,GAAW,IAGvD,4BAA6B,UAG/B4S,UACEvU,KAAK04B,QAGPx2B,QAAS,CACPw2B,KACEC,EACAC,EACAC,GAKA,IACE7B,GACC6B,GACA74B,KAAKq3B,MAHR,CAMA,GAAIr3B,KAAKm4B,cAAcZ,QAAS,CAC9B,MAAMuB,EAAU,IAAIC,MACpBD,EAAQnB,IAAM33B,KAAKm4B,cAAcZ,QACjCv3B,KAAKg5B,YAAYF,EAAS,MAGxB94B,KAAKm4B,cAAcR,KAAK33B,KAAKy4B,cAEnCQ,SACEj5B,KAAKk5B,SACLl5B,KAAK+3B,WAAY,EACjB/3B,KAAK6N,MAAM,OAAQ7N,KAAK23B,KAGtB33B,KAAK83B,QACJ93B,KAAKm4B,cAAcR,IAAIpkB,SAAS,SAAWvT,KAAKm4B,cAAcR,IAAIwB,WAAW,yBAE1En5B,KAAK83B,MAAMsB,eAAiBp5B,KAAK83B,MAAMG,cACzCj4B,KAAKi4B,aAAej4B,KAAK83B,MAAMG,aAC/Bj4B,KAAKg4B,sBAAwBh4B,KAAK83B,MAAMG,aAAej4B,KAAK83B,MAAMsB,eAElEp5B,KAAKg4B,sBAAwB,IAInCqB,UACEr5B,KAAKq2B,UAAW,EAChBr2B,KAAK6N,MAAM,QAAS7N,KAAK23B,MAE3BuB,SAEMl5B,KAAK83B,QAAO93B,KAAK63B,WAAa73B,KAAK83B,MAAMD,YAAc73B,KAAK83B,MAAMH,MAExEc,YACE,MAAMX,EAAQ,IAAIiB,MAClB/4B,KAAK83B,MAAQA,EAEbA,EAAMwB,OAAS,KAETxB,EAAMyB,OACRzB,EAAMyB,SAASC,MAAOC,IACpBpb,eACE,2DACQre,KAAKm4B,cAAcR,KAC1B8B,EAAIC,QAAU,qBAAqBD,EAAIC,QAAY,IACpD15B,QAED25B,KAAK35B,KAAKi5B,QAEbj5B,KAAKi5B,UAGTnB,EAAM8B,QAAU55B,KAAKq5B,QAErBr5B,KAAKq2B,UAAW,EAChBr2B,KAAKwH,QAAUswB,EAAMtwB,MAAQxH,KAAKwH,OAClCxH,KAAKm4B,cAAcP,SAAWE,EAAMF,OAAS53B,KAAKm4B,cAAcP,QAChEE,EAAMH,IAAM33B,KAAKm4B,cAAcR,IAC/B33B,KAAK6N,MAAM,YAAa7N,KAAKm4B,cAAcR,KAE3C33B,KAAKq4B,aAAer4B,KAAKg5B,YAAYlB,GACrC93B,KAAKk5B,UAEPF,YAAaa,EAAuBC,EAAyB,KAC3D,MAAMC,EAAO,KACX,MAAM,cAAEX,EAAF,aAAiBnB,GAAiB4B,EAEpCT,GAAiBnB,GACnBj4B,KAAKi4B,aAAeA,EACpBj4B,KAAKg4B,sBAAwBC,EAAemB,GAClCS,EAAIG,WAAYh6B,KAAK+3B,WAAc/3B,KAAKq2B,UAAuB,MAAXyD,GAC9DztB,WAAW0tB,EAAMD,IAIrBC,KAEFx3B,aACE,MAAMoK,EAAiBsqB,OAAY11B,QAAQW,QAAQK,WAAWf,KAAKxB,MAOnE,OANIA,KAAKi4B,cACPj4B,KAAKuN,GAAGZ,EAAQ1M,KAAO,MAAO,CAC5B8C,MAAO,CAAEuF,MAAUtI,KAAKi4B,aAAR,QAIbtrB,GAETstB,mBACE,MAAMtb,EAAOuL,eAAQlqB,KAAM,eAC3B,GAAI2e,EAAM,CACR,MAAMub,EAAcl6B,KAAK+3B,UACrB,CAAC/3B,KAAKM,eAAe,MAAO,CAC5BJ,YAAa,wBACZye,IACD,GAEJ,OAAK3e,KAAKsD,WAEHtD,KAAKM,eAAe,aAAc,CACvC3B,MAAO,CACLwQ,QAAQ,EACRzQ,KAAMsB,KAAKsD,aAEZ42B,GAP0BA,EAAY,MAY/C92B,OAAQC,GACN,MAAM82B,EAAOlD,OAAY11B,QAAQ6B,OAAO5B,KAAKxB,KAAMqD,GAE7CpD,EAAO+F,eAAUm0B,EAAKl6B,KAAO,CACjCC,YAAa,UACbU,MAAO,CACL,aAAcZ,KAAKm3B,IACnBt0B,KAAM7C,KAAKm3B,IAAM,WAAQx1B,GAE3BxB,MAAOH,KAAKwI,aAGZvF,WAAY+zB,EACR,CAAC,CACDt4B,KAAM,YACN07B,UAAW,CAAEC,MAAM,GACnBx6B,MAAO,CACLwP,QAASrP,KAAK04B,KACdn3B,QAASvB,KAAKuB,gBAGhBI,IAUN,OAPAw4B,EAAK/3B,SAAW,CACdpC,KAAKs6B,cACLt6B,KAAKs4B,cACLt4B,KAAKi6B,mBACLj6B,KAAKuC,cAGAc,EAAE82B,EAAK30B,IAAKvF,EAAMk6B,EAAK/3B,c,kCChTlC,gBAGe1B,e,kCCHf,8DAiBerC,sBACb+yB,OACAnP,OACA3jB,QACAG,OAAO,CACPC,KAAM,SAENC,MAAO,CACL47B,KAAMl7B,QACNm7B,MAAOn7B,QACPw6B,IAAK/6B,OACL27B,KAAMp7B,QACNwyB,aAAc,CACZhzB,KAAM,CAACkI,OAAQjI,QACfK,QAAS,GAEXu7B,OAAQr7B,SAGVS,SAAU,CACRwB,UACE,MAAO,CACL,UAAU,KACP2gB,OAAS1gB,QAAQzB,SAASwB,QAAQE,KAAKxB,MAC1C,eAAgBA,KAAKu6B,KACrB,gBAAiBv6B,KAAKw6B,MACtB,eAAgBx6B,KAAK26B,YACrB,kBAAmB36B,KAAK0iB,QACxB,mBAAoB1iB,KAAK2G,SACzB,iBAAkB3G,KAAK06B,UACpBp8B,OAAOiD,QAAQzB,SAASwB,QAAQE,KAAKxB,QAG5CgD,SACE,MAAMD,EAA4B,IAC7BzE,OAAOiD,QAAQzB,SAASkD,OAAOxB,KAAKxB,OAOzC,OAJIA,KAAK65B,MACP92B,EAAM63B,WAAa,QAAQ56B,KAAK65B,yCAG3B92B,IAIXb,QAAS,CACPkxB,cACE,MAAMhwB,EAASguB,OAAS7vB,QAAQW,QAAQkxB,YAAY5xB,KAAKxB,MAEzD,OAAKoD,EAEEpD,KAAKM,eAAe,MAAO,CAChCJ,YAAa,mBACb4H,IAAK,YACJ,CAAC1E,IALgB,OASxBA,OAAQC,GACN,MAAM,IAAEmC,EAAF,KAAOvF,GAASD,KAAK0kB,oBAS3B,OAPAzkB,EAAK8C,MAAQ/C,KAAKgD,OAEdhD,KAAK26B,cACP16B,EAAKW,MAAQX,EAAKW,OAAS,GAC3BX,EAAKW,MAAMwO,SAAW,GAGjB/L,EAAEmC,EAAKxF,KAAKI,mBAAmBJ,KAAKQ,MAAOP,GAAO,CACvDD,KAAKozB,cACLpzB,KAAKqC,OAAOlD,c,kCCxFlB,gBAGe07B,e,kCCHf,8DAmBA,MAAMC,EAAmB,IACpBC,OACHC,SAAS,EACTC,gBAAgB,EAChB33B,YAAY,GAICkmB,cAAQ/qB,OAAO,CAC5BC,KAAM,iBAENC,MAAO,CACLu8B,cAAe,CACbr8B,KAAMQ,QACNF,SAAS,GAEXg8B,gBAAiB,CACft8B,KAAMQ,QACNF,SAAS,GAEX0W,OAAQ,CACNhX,KAAM+S,SACNzS,QAAS,CAACwsB,EAAWyP,EAAmBC,IAC/BA,EAASC,oBAAoB1yB,QAAQwyB,EAAUE,sBAAwB,GAGlFC,WAAYl8B,QACZuvB,UAAW,CACT/vB,KAAM2qB,OAAQjoB,QAAQ5C,MAAMiwB,UAAU/vB,KACtCM,QAAS,IAAM27B,GAEjBU,SAAUn8B,QACVo8B,YAAa,CACX58B,KAAMC,SAIVmB,OACE,MAAO,CACLy7B,WAAY17B,KAAKy7B,cAIrB37B,SAAU,CACRwB,UACE,MAAO,IACFkoB,OAAQjoB,QAAQzB,SAASwB,QAAQE,KAAKxB,MACzC,kBAAkB,EAClB,qCAAsCA,KAAK27B,eAAiB,IAGhE7U,gBACE,OAAO9mB,KAAKumB,eAEdqV,iBACE,OAAO57B,KAAK67B,cAAcnqB,IAAIia,GAAQ3rB,KAAK87B,SAASnQ,KAEtDoQ,oBACE,OAAO/7B,KAAKg8B,aACRh8B,KAAKumB,cAAcngB,KAAKulB,IAAS3rB,KAAKi8B,QAAQtQ,IAC9C3rB,KAAKumB,cAAchgB,OAAS,GAElC21B,eACE,OAAyB,MAArBl8B,KAAKm8B,aAA6B,EAE/Br9B,OAAOkB,KAAKo8B,QAAQp8B,KAAKm8B,eAAe51B,QAEjDggB,gBACE,OAAKvmB,KAAKq8B,aAAer8B,KAAKw7B,UAAmC,MAAvBx7B,KAAKs8B,eAA+Bt8B,KAAKu8B,SAE5Ev8B,KAAKu8B,SAAS1mB,OAAO8V,IAC1B,MAAM9rB,EAAQ40B,eAAoB9I,EAAM3rB,KAAKq7B,UACvCz7B,EAAgB,MAATC,EAAgBf,OAAOe,GAAS,GAE7C,OAAOG,KAAK6V,OAAO8V,EAAM7sB,OAAOkB,KAAKs8B,gBAAiB18B,MAG1D08B,eAAgB,CACd12B,MACE,OAAO5F,KAAK07B,YAEd31B,IAAK/G,GAGCgB,KAAK07B,aAAe18B,IACtBgB,KAAK07B,WAAa18B,EAClBgB,KAAK6N,MAAM,sBAAuB7O,MAIxCw9B,oBACE,OAAO,GAETC,UACE,OAAOz8B,KAAK08B,eAAiB18B,KAAK67B,cAAct1B,OAAS,GAE3D81B,cACE,OACEr8B,KAAKgb,UACLhb,KAAK08B,eAEL18B,KAAK08B,eACL18B,KAAKs8B,iBAAmBt8B,KAAKo8B,QAAQp8B,KAAKm8B,eAG9CQ,cACE,QAAK38B,KAAK48B,YAEH58B,KAAK+7B,oBAAsB/7B,KAAKu7B,aAEzCsB,cACE,MAAMl+B,EAAQ6qB,OAAQjoB,QAAQzB,SAAS+8B,YAAYr7B,KAAKxB,MAExD,OADCrB,EAAcqM,cAAe,4BAA4BrM,EAAcqM,cAAgB,KAAK3D,OACtF,IACFyzB,KACAn8B,IAGP+9B,gBACE,OAA8B,MAAvB18B,KAAKs8B,gBACc,KAAxBt8B,KAAKs8B,gBAETH,eACE,OAAIn8B,KAAKgb,SAAiB,KAEnBhb,KAAK67B,cAAch0B,KAAK2P,GACtBxX,KAAK88B,gBAAgB98B,KAAK87B,SAAStkB,GAAIxX,KAAK87B,SAAS97B,KAAK+8B,kBAGrEC,WACE,MAAM/8B,EAAOupB,OAAQjoB,QAAQzB,SAASk9B,SAASx7B,KAAKxB,MAapD,OAXAC,EAAKtB,MAAQ,IACRsB,EAAKtB,MACRkmB,MAAO7kB,KAAKi9B,iBACZzB,SACEx7B,KAAKw7B,WACJx7B,KAAKq8B,cACLr8B,KAAKumB,cAAchgB,OAEtBk1B,YAAaz7B,KAAKs8B,gBAGbr8B,IAIXmL,MAAO,CACLmb,cAAe,yBACfwW,cAAe,YACfH,UAAW59B,GACLA,GACFiO,SAASQ,iBAAiB,OAAQzN,KAAKk9B,QACvCl9B,KAAK0M,MAAMoS,OAAS9e,KAAK0M,MAAMoS,MAAMqN,WAErClf,SAASU,oBAAoB,OAAQ3N,KAAKk9B,QAC1Cl9B,KAAKqkB,OACLrkB,KAAKm9B,eAGTC,aAAcp+B,IACRA,GAAQgB,KAAKq9B,UAEjBr9B,KAAK07B,WAAa,OAEpB7W,MAAO7lB,EAAKuT,GAONA,GAAUA,EAAOhM,SACnBvG,KAAKu7B,aACLv7B,KAAK48B,WACJ58B,KAAKo9B,eACNp+B,EAAIuH,QACJvG,KAAKs9B,gBAET7B,YAAaz8B,GACXgB,KAAK07B,WAAa18B,GAEpBs9B,eAAgB,0BAChBjB,SAAU,cAGZv5B,UACE9B,KAAKu9B,aAGPC,YACEvwB,SAASU,oBAAoB,OAAQ3N,KAAKk9B,SAG5Ch7B,QAAS,CACPu7B,uBAAwBz+B,EAAcuT,GAGpC,GAAIvT,IAAQuT,EAAZ,CAEA,IAAKvS,KAAKm7B,gBAAiB,CACzB,MAAMuC,EAAkBnrB,EAAOvS,KAAK0M,MAAMixB,KAAKC,WAE3CF,EACF19B,KAAK69B,aAAa7+B,EAAI8oB,UAAUtQ,GAAKA,IAAMkmB,IAE3C19B,KAAK69B,cAAc,GAErB79B,KAAK6N,MAAM,oBAAqB7N,KAAK0M,MAAMixB,KAAKC,WAGlD59B,KAAK+L,UAAU,KAEV/L,KAAKs8B,iBACU,IAAft9B,EAAIuH,QACFvG,KAAKm7B,mBAGVn7B,KAAK0M,MAAMixB,KAAKG,WAEZ99B,KAAKm7B,iBAAmBn8B,EAAIuH,SAC9BvG,KAAK69B,aAAa,GAClB79B,KAAK6N,MAAM,oBAAqB7N,KAAK0M,MAAMixB,KAAKC,iBAItDG,0BACE/9B,KAAKg+B,wBAEPA,uBAEEh+B,KAAKo9B,cAAgBp9B,KAAK0M,MAAMixB,MAAQ39B,KAAK0M,MAAMixB,KAAKM,oBAE1DC,oBAAqBnwB,GAGf/N,KAAK08B,gBAEL18B,KAAKgb,UAAYjN,IAAYC,OAASpH,MACZ,IAAxB5G,KAAK27B,cACP37B,KAAK27B,cAAgB37B,KAAK67B,cAAct1B,OAAS,EAEjDvG,KAAK27B,gBAEE37B,KAAKgb,UAAYjN,IAAYC,OAASnH,MAC3C7G,KAAK27B,eAAiB37B,KAAK67B,cAAct1B,OAAS,EACpDvG,KAAK27B,eAAiB,EAEtB37B,KAAK27B,gBAEE5tB,IAAYC,OAASmwB,WAAapwB,IAAYC,OAASowB,QAChEp+B,KAAKq+B,sBAGTA,oBACE,MAAMC,EAAWt+B,KAAK27B,cAChB4C,EAAUv+B,KAAK67B,cAAcyC,GAGnC,IACGt+B,KAAKw+B,eACNx+B,KAAKy+B,YAAYF,GACjB,OAEF,MAAMG,EAAY1+B,KAAK67B,cAAct1B,OAAS,EAI9C,IAC0B,IAAxBvG,KAAK27B,eACS,IAAd+C,EAIA,YAFA1+B,KAAK27B,cAAgB+C,GAKvB,MAAMn4B,EAASvG,KAAK67B,cAAct1B,OAC5Bo4B,EAAYL,IAAa/3B,EAAS,EACpC+3B,EACAA,EAAW,EACTM,EAAW5+B,KAAK67B,cAAc8C,GAE/BC,EAGH5+B,KAAK6+B,WAAWN,GAFhBv+B,KAAK8+B,SAAS9+B,KAAKgb,SAAW,GAAK,MAKrChb,KAAK27B,cAAgBgD,GAEvBI,oBACE/+B,KAAKs8B,eAAiB,KAEtB9S,OAAQjoB,QAAQW,QAAQ68B,kBAAkBv9B,KAAKxB,OAEjD22B,WACE,MAAM7X,EAAQkgB,OAAWz9B,QAAQW,QAAQy0B,SAASn1B,KAAKxB,MAUvD,OARA8e,EAAM7e,KAAO+F,eAAU8Y,EAAM7e,KAAO,CAClCW,MAAO,CACL,wBAAyBirB,eAAqB7rB,KAAK0M,MAAMixB,KAAM,iBAC/DsB,aAAcpT,eAAqB/M,EAAM7e,KAAO,qBAAsB,QAExEuJ,SAAU,CAAE3J,MAAOG,KAAKs8B,kBAGnBxd,GAETogB,eACE,MAAMvgB,EAAO6K,OAAQjoB,QAAQW,QAAQg9B,aAAa19B,KAAKxB,MAIvD,OAFA2e,EAAK1e,KAAMW,MAAOiC,KAAO,WAElB8b,GAETwgB,gBACE,OAAOn/B,KAAKq9B,SAAWr9B,KAAKgb,SACxBwO,OAAQjoB,QAAQW,QAAQi9B,cAAc39B,KAAKxB,MAC3C,IAENo/B,QAAS7yB,GACFvM,KAAKw+B,gBAEVx+B,KAAK27B,eAAiB,EACjB37B,KAAK27B,eAAiB,EACvB37B,KAAKq/B,UAEJr/B,KAAKs/B,cAAc/yB,EAAEC,SAASxM,KAAKs9B,iBAE1CiC,QAAShzB,GACP,GACEvM,KAAK27B,eAAiB,IACrBpvB,EAAEC,OACH,OAEF,MAAMA,EAASD,EAAEC,OACX3M,EAAQ2M,EAAO3M,MAGjB2M,EAAO3M,OAAOG,KAAKs9B,eAElBt9B,KAAKgb,UAAsB,KAAVnb,GAAcG,KAAKq+B,oBAEzCr+B,KAAKs8B,eAAiBz8B,EACtBG,KAAKw/B,SAAWhzB,EAAOizB,UAAYjzB,EAAOizB,SAASD,UAErDzT,UAAWxf,GACT,MAAMwB,EAAUxB,EAAEwB,SAGhBxB,EAAEmzB,SACD,CAAC1xB,OAAS2xB,KAAM3xB,OAASye,KAAKxtB,SAAS8O,IAExCyb,OAAQjoB,QAAQW,QAAQ6pB,UAAUvqB,KAAKxB,KAAMuM,GAO/CvM,KAAKk+B,oBAAoBnwB,IAE3B6xB,YAAarzB,KACbszB,UAAWtzB,GACTid,OAAQjoB,QAAQW,QAAQ29B,UAAUr+B,KAAKxB,KAAMuM,GAC7CvM,KAAKm9B,cAEP2C,SAAUvzB,GAERA,EAAEgK,iBAKFvW,KAAKs9B,gBAEPuB,WAAYlT,GACVnC,OAAQjoB,QAAQW,QAAQ28B,WAAWr9B,KAAKxB,KAAM2rB,GAC9C3rB,KAAKu9B,aAEPwC,mBACEvW,OAAQjoB,QAAQW,QAAQ69B,iBAAiBv+B,KAAKxB,MAIzCA,KAAK48B,WAAW58B,KAAKu9B,aAE5BA,YAGEv9B,KAAK+L,UAAU,KAEV/L,KAAKgb,UACLhb,KAAKs8B,gBACLt8B,KAAKo9B,eAENp9B,KAAKs8B,gBACFt8B,KAAK67B,cAAct1B,QACpBvG,KAAKgb,UACLhb,KAAKq9B,QAEH,KACAr9B,KAAKo8B,QAAQp8B,KAAKm8B,kBAI5BgB,cAEKn9B,KAAK08B,eACL18B,KAAK+8B,iBAIL/8B,KAAKgb,UACLhb,KAAK88B,gBACJ98B,KAAKs8B,eACLt8B,KAAK87B,SAAS97B,KAAK+8B,iBAGrB/8B,KAAKu9B,cAGTtB,QAAStQ,GACP,OAAO3rB,KAAK47B,eAAehzB,QAAQ5I,KAAK87B,SAASnQ,KAAU,GAE7DuR,OAAQ1pB,G,QACN,IAA4B,IAAxBxT,KAAK27B,cAAsB,OAE/B,MAAMjP,EAAc1sB,KAAK67B,cAAc77B,KAAK27B,eACtCqE,EAAkBhgC,KAAKo8B,QAAQ1P,GAClB,QAAnB,EAAAlZ,EAAMysB,qBAAax0B,SAAEy0B,QAAQ,aAAcF,GACxB,QAAnB,EAAAxsB,EAAMysB,qBAAa1yB,SAAE2yB,QAAQ,2CAA4CF,GACzExsB,EAAM+C,sB,kLC1aGlY,sBACboI,OACAC,OACAub,OACApgB,OACAsgB,eAAiB,aACjBC,eAAkB,eAClB3jB,OAAO,CACPC,KAAM,SAENC,MAAO,CACLub,OAAQ,CACNrb,KAAMQ,QACNF,SAAS,GAEXkjB,YAAa,CACXxjB,KAAMC,OACNK,UACE,OAAKa,KAAKmgC,UAEHngC,KAAKmgC,UAAU9d,YAFM,KAKhC3f,MAAOrD,QACPG,UAAW,CACTX,KAAMC,OACNK,QAAS,WAEXD,WAAY,CACVL,KAAMC,OACNK,QAAS,kBAEXwH,SAAUtH,QACV+gC,UAAW/gC,QACXwW,OAAQxW,QACRghC,WAAY,CACVxhC,KAAMC,OACNK,QAAS,aAEX0qB,MAAOxqB,QACPo7B,KAAMp7B,QACNK,SAAUL,QACVihC,KAAMjhC,QACNmG,IAAK,CACH3G,KAAMC,OACNK,QAAS,QAEXohC,UAAWzhC,OACXe,MAAO,MAGTI,KAAM,KAAM,CACV8iB,WAAY,mBAGdjjB,SAAU,CACRwB,UACE,MAAO,CACL,UAAU,KACP2gB,OAAS1gB,QAAQzB,SAASwB,QAAQE,KAAKxB,MAC1C,oBAAqBA,KAAK26B,YAC1B,mBAAoB36B,KAAK2G,SACzB,oBAAqB3G,KAAKogC,UAC1B,gBAAiBpgC,KAAK6pB,MACtB,eAAgB7pB,KAAKwgC,OACrB,oBAAqBxgC,KAAKQ,MAC1B,mBAAoBR,KAAKN,SACzB,eAAgBM,KAAKsgC,KACrB,oBAAqBtgC,KAAKygC,YACvBzgC,KAAKwI,gBACLxI,KAAKyjB,mBACLzjB,KAAKujB,eAGZkd,WACE,OAAOphC,QAAQW,KAAK0C,QAEtBi4B,cACE,OAAOt7B,QACL4iB,OAAS1gB,QAAQzB,SAAS66B,YAAYn5B,KAAKxB,OAC3CA,KAAKmgC,aAKXr+B,UACE,MAAMmiB,EAAgB,CACpB,CAAC,UAAW,YACZ,CAAC,WAAY,eACb,CAAC,QAAS,UACV,CAAC,SAAU,iBAIbA,EAAcpe,QAAQ,EAAEqe,EAAUC,MAC5BnkB,KAAK+B,OAAOC,eAAekiB,IAAWjiB,eAASiiB,EAAUC,EAAankB,SAI9EkC,QAAS,CACPjB,MAAOsL,GACLvM,KAAK6N,MAAM,QAAStB,GAEpBvM,KAAKmgC,WAAangC,KAAK2C,UAEzB+9B,YACE,MAAMt+B,EAAW,GAWjB,OATIpC,KAAKkB,UACPkB,EAAS0D,KACP9F,KAAKM,eAAea,OAAO,CACzBjB,YAAa,iBACbvB,MAAO,CAAEiI,MAAM,IACd5G,KAAKqgC,aAILrgC,KAAKM,eAAeqgC,OAAoBv+B,IAEjDw+B,WACE,OAAO5gC,KAAKM,eAAea,OAAO,CAChCjB,YAAa,gBACbvB,MAAO,CACLkI,OAAO,EACPC,KAAM,IAERlG,MAAO,CACL,aAAcZ,KAAKa,SAASC,KAAKC,EAAEf,KAAKd,aAE1C8B,GAAI,CACFC,MAAQsL,IACNA,EAAEsG,kBACFtG,EAAEgK,iBAEFvW,KAAK6N,MAAM,eACX7N,KAAK6N,MAAM,iBAAiB,MAG/B7N,KAAKR,YAEV+C,aACE,OAAOvC,KAAKM,eAAe,OAAQ,CACjCJ,YAAa,mBACZ,CACDF,KAAK6V,QAAU7V,KAAK0gC,YACpB1gC,KAAKqC,OAAOlD,QACZa,KAAKygC,UAAYzgC,KAAK4gC,eAK5Bx9B,OAAQC,GACN,MAAMjB,EAAW,CAACpC,KAAKuC,cACvB,IAAI,IAAEiD,EAAF,KAAOvF,GAASD,KAAK0kB,oBAEzBzkB,EAAKW,MAAQ,IACRX,EAAKW,MACRw/B,UAAWpgC,KAAKogC,UAAY,YAASz+B,EACrCyN,SAAUpP,KAAKmgC,YAAcngC,KAAK2G,SAAW,EAAI1G,EAAKW,MAAOwO,UAE/DnP,EAAKgD,WAAY6C,KAAK,CACpBpH,KAAM,OACNmB,MAAOG,KAAKka,SAEdja,EAAOD,KAAKI,mBAAmBJ,KAAKQ,MAAOP,GAE3C,MAAMO,EAAQR,KAAKugC,WAAcvgC,KAAKN,UAAYM,KAAKQ,MAEvD,OAAO6C,EAAEmC,EAAKxF,KAAKmD,aAAa3C,EAAOP,GAAOmC,O,kCClMlD,0BASeP,cAAUpD,OAAO,CAC9BC,KAAM,YAENC,MAAO,CACLkiC,MAAOxhC,QACPyhC,SAAUzhC,SAGZ+D,OAAQC,GAEN,IAAI09B,EAIJ,OAHK/gC,KAAK+B,OAAOc,MAA6B,cAArB7C,KAAK+B,OAAOc,OACnCk+B,EAAc/gC,KAAK8gC,SAAW,WAAa,cAEtCz9B,EAAE,KAAM,CACblD,MAAO,CACL,aAAa,EACb,mBAAoBH,KAAK6gC,MACzB,sBAAuB7gC,KAAK8gC,YACzB9gC,KAAKwI,cAEV5H,MAAO,CACLiC,KAAM,YACN,mBAAoBk+B,KACjB/gC,KAAK+B,QAEVf,GAAIhB,KAAKqT","file":"js/chunk-e485495c.f8bcd7c9.js","sourcesContent":["// Styles\nimport './VAlert.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNodeData } from 'vue'\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Toggleable,\n Transitionable\n).extend({\n name: 'v-alert',\n\n props: {\n border: {\n type: String,\n validator (val: string) {\n return [\n 'top',\n 'right',\n 'bottom',\n 'left',\n ].includes(val)\n },\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n coloredBorder: Boolean,\n dense: Boolean,\n dismissible: Boolean,\n closeIcon: {\n type: String,\n default: '$cancel',\n },\n icon: {\n default: '',\n type: [Boolean, String],\n validator (val: boolean | string) {\n return typeof val === 'string' || val === false\n },\n },\n outlined: Boolean,\n prominent: Boolean,\n text: Boolean,\n type: {\n type: String,\n validator (val: string) {\n return [\n 'info',\n 'error',\n 'success',\n 'warning',\n ].includes(val)\n },\n },\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n __cachedBorder (): VNode | null {\n if (!this.border) return null\n\n let data: VNodeData = {\n staticClass: 'v-alert__border',\n class: {\n [`v-alert__border--${this.border}`]: true,\n },\n }\n\n if (this.coloredBorder) {\n data = this.setBackgroundColor(this.computedColor, data)\n data.class['v-alert__border--has-color'] = true\n }\n\n return this.$createElement('div', data)\n },\n __cachedDismissible (): VNode | null {\n if (!this.dismissible) return null\n\n const color = this.iconColor\n\n return this.$createElement(VBtn, {\n staticClass: 'v-alert__dismissible',\n props: {\n color,\n icon: true,\n small: true,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: () => (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n this.$slots.prepend || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n this.$slots.append,\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, this.$slots.default)\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","// Styles\nimport './VDialog.sass'\n\n// Components\nimport { VThemeProvider } from '../VThemeProvider'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Overlayable from '../../mixins/overlayable'\nimport Returnable from '../../mixins/returnable'\nimport Stackable from '../../mixins/stackable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { removed } from '../../util/console'\nimport {\n convertToUnit,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\nconst baseMixins = mixins(\n Dependent,\n Detachable,\n Overlayable,\n Returnable,\n Stackable,\n Activatable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-dialog',\n\n directives: { ClickOutside },\n\n props: {\n dark: Boolean,\n disabled: Boolean,\n fullscreen: Boolean,\n light: Boolean,\n maxWidth: [String, Number],\n noClickAnimation: Boolean,\n origin: {\n type: String,\n default: 'center center',\n },\n persistent: Boolean,\n retainFocus: {\n type: Boolean,\n default: true,\n },\n scrollable: Boolean,\n transition: {\n type: [String, Boolean],\n default: 'dialog-transition',\n },\n width: [String, Number],\n },\n\n data () {\n return {\n activatedBy: null as EventTarget | null,\n animate: false,\n animateTimeout: -1,\n stackMinZIndex: 200,\n previousActiveElement: null as HTMLElement | null,\n }\n },\n\n computed: {\n classes (): object {\n return {\n [(`v-dialog ${this.contentClass}`).trim()]: true,\n 'v-dialog--active': this.isActive,\n 'v-dialog--persistent': this.persistent,\n 'v-dialog--fullscreen': this.fullscreen,\n 'v-dialog--scrollable': this.scrollable,\n 'v-dialog--animated': this.animate,\n }\n },\n contentClasses (): object {\n return {\n 'v-dialog__content': true,\n 'v-dialog__content--active': this.isActive,\n }\n },\n hasActivator (): boolean {\n return Boolean(\n !!this.$slots.activator ||\n !!this.$scopedSlots.activator\n )\n },\n },\n\n watch: {\n isActive (val) {\n if (val) {\n this.show()\n this.hideScroll()\n } else {\n this.removeOverlay()\n this.unbind()\n this.previousActiveElement?.focus()\n }\n },\n fullscreen (val) {\n if (!this.isActive) return\n\n if (val) {\n this.hideScroll()\n this.removeOverlay(false)\n } else {\n this.showScroll()\n this.genOverlay()\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('full-width')) {\n removed('full-width', this)\n }\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.isBooted = this.isActive\n this.isActive && this.show()\n })\n },\n\n beforeDestroy () {\n if (typeof window !== 'undefined') this.unbind()\n },\n\n methods: {\n animateClick () {\n this.animate = false\n // Needed for when clicking very fast\n // outside of the dialog\n this.$nextTick(() => {\n this.animate = true\n window.clearTimeout(this.animateTimeout)\n this.animateTimeout = window.setTimeout(() => (this.animate = false), 150)\n })\n },\n closeConditional (e: Event) {\n const target = e.target as HTMLElement\n // Ignore the click if the dialog is closed or destroyed,\n // if it was on an element inside the content,\n // if it was dragged onto the overlay (#6969),\n // or if this isn't the topmost dialog (#9907)\n return !(\n this._isDestroyed ||\n !this.isActive ||\n this.$refs.content.contains(target) ||\n (this.overlay && target && !this.overlay.$el.contains(target))\n ) && this.activeZIndex >= this.getMaxZIndex()\n },\n hideScroll () {\n if (this.fullscreen) {\n document.documentElement.classList.add('overflow-y-hidden')\n } else {\n Overlayable.options.methods.hideScroll.call(this)\n }\n },\n show () {\n !this.fullscreen && !this.hideOverlay && this.genOverlay()\n // Double nextTick to wait for lazy content to be generated\n this.$nextTick(() => {\n this.$nextTick(() => {\n if (!this.$refs.dialog?.contains(document.activeElement)) {\n this.previousActiveElement = document.activeElement as HTMLElement\n this.$refs.dialog?.focus()\n }\n this.bind()\n })\n })\n },\n bind () {\n window.addEventListener('focusin', this.onFocusin)\n },\n unbind () {\n window.removeEventListener('focusin', this.onFocusin)\n },\n onClickOutside (e: Event) {\n this.$emit('click:outside', e)\n\n if (this.persistent) {\n this.noClickAnimation || this.animateClick()\n } else {\n this.isActive = false\n }\n },\n onKeydown (e: KeyboardEvent) {\n if (e.keyCode === keyCodes.esc && !this.getOpenDependents().length) {\n if (!this.persistent) {\n this.isActive = false\n const activator = this.getActivator()\n this.$nextTick(() => activator && (activator as HTMLElement).focus())\n } else if (!this.noClickAnimation) {\n this.animateClick()\n }\n }\n this.$emit('keydown', e)\n },\n // On focus change, wrap focus to stay inside the dialog\n // https://github.com/vuetifyjs/vuetify/issues/6892\n onFocusin (e: Event) {\n if (!e || !this.retainFocus) return\n\n const target = e.target as HTMLElement\n\n if (\n !!target &&\n this.$refs.dialog &&\n // It isn't the document or the dialog body\n ![document, this.$refs.dialog].includes(target) &&\n // It isn't inside the dialog body\n !this.$refs.dialog.contains(target) &&\n // We're the topmost dialog\n this.activeZIndex >= this.getMaxZIndex() &&\n // It isn't inside a dependent element (like a menu)\n !this.getOpenDependentElements().some(el => el.contains(target))\n // So we must have focused something outside the dialog and its children\n ) {\n // Find and focus the first available element inside the dialog\n const focusable = this.$refs.dialog.querySelectorAll('button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n const el = [...focusable].find(el => !el.hasAttribute('disabled') && !el.matches('[tabindex=\"-1\"]')) as HTMLElement | undefined\n el && el.focus()\n }\n },\n genContent () {\n return this.showLazyContent(() => [\n this.$createElement(VThemeProvider, {\n props: {\n root: true,\n light: this.light,\n dark: this.dark,\n },\n }, [\n this.$createElement('div', {\n class: this.contentClasses,\n attrs: {\n role: 'dialog',\n 'aria-modal': this.hideOverlay ? undefined : 'true',\n ...this.getScopeIdAttrs(),\n },\n on: { keydown: this.onKeydown },\n style: { zIndex: this.activeZIndex },\n ref: 'content',\n }, [this.genTransition()]),\n ]),\n ])\n },\n genTransition () {\n const content = this.genInnerContent()\n\n if (!this.transition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n appear: true,\n },\n }, [content])\n },\n genInnerContent () {\n const data: VNodeData = {\n class: this.classes,\n attrs: {\n tabindex: this.isActive ? 0 : undefined,\n },\n ref: 'dialog',\n directives: [\n {\n name: 'click-outside',\n value: {\n handler: this.onClickOutside,\n closeConditional: this.closeConditional,\n include: this.getOpenDependentElements,\n },\n },\n { name: 'show', value: this.isActive },\n ],\n style: {\n transformOrigin: this.origin,\n },\n }\n\n if (!this.fullscreen) {\n data.style = {\n ...data.style as object,\n maxWidth: convertToUnit(this.maxWidth),\n width: convertToUnit(this.width),\n }\n }\n\n return this.$createElement('div', data, this.getContentSlot())\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-dialog__container',\n class: {\n 'v-dialog__container--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n },\n }, [\n this.genActivator(),\n this.genContent(),\n ])\n },\n})\n","import './VDatePickerTitle.sass'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport PickerButton from '../../mixins/picker-button'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n PickerButton\n/* @vue/component */\n).extend({\n name: 'v-date-picker-title',\n\n props: {\n date: {\n type: String,\n default: '',\n },\n disabled: Boolean,\n readonly: Boolean,\n selectingYear: Boolean,\n value: {\n type: String,\n },\n year: {\n type: [Number, String],\n default: '',\n },\n yearIcon: {\n type: String,\n },\n },\n\n data: () => ({\n isReversing: false,\n }),\n\n computed: {\n computedTransition (): string {\n return this.isReversing ? 'picker-reverse-transition' : 'picker-transition'\n },\n },\n\n watch: {\n value (val: string, prev: string) {\n this.isReversing = val < prev\n },\n },\n\n methods: {\n genYearIcon (): VNode {\n return this.$createElement(VIcon, {\n props: {\n dark: true,\n },\n }, this.yearIcon)\n },\n getYearBtn (): VNode {\n return this.genPickerButton('selectingYear', true, [\n String(this.year),\n this.yearIcon ? this.genYearIcon() : null,\n ], false, 'v-date-picker-title__year')\n },\n genTitleText (): VNode {\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [\n this.$createElement('div', {\n domProps: { innerHTML: this.date || ' ' },\n key: this.value,\n }),\n ])\n },\n genTitleDate (): VNode {\n return this.genPickerButton('selectingYear', false, [this.genTitleText()], false, 'v-date-picker-title__date')\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-date-picker-title',\n class: {\n 'v-date-picker-title--disabled': this.disabled,\n },\n }, [\n this.getYearBtn(),\n this.genTitleDate(),\n ])\n },\n})\n","import pad from './pad'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface SubstrOptions {\n start?: number\n length: number\n}\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions\n): DatePickerFormatter | undefined\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions\n): DatePickerFormatter\n\nfunction createNativeLocaleFormatter (\n locale: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions = { start: 0, length: 0 }\n): DatePickerFormatter | undefined {\n const makeIsoString = (dateString: string) => {\n const [year, month, date] = dateString.trim().split(' ')[0].split('-')\n return [pad(year, 4), pad(month || 1), pad(date || 1)].join('-')\n }\n\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, options)\n return (dateString: string) => intlFormatter.format(new Date(`${makeIsoString(dateString)}T00:00:00+00:00`))\n } catch (e) {\n return (substrOptions.start || substrOptions.length)\n ? (dateString: string) => makeIsoString(dateString).substr(substrOptions.start || 0, substrOptions.length)\n : undefined\n }\n}\n\nexport default createNativeLocaleFormatter\n","import pad from './pad'\n\n/**\n * @param {String} value YYYY-MM format\n * @param {Number} sign -1 or +1\n */\nexport default (value: string, sign: number) => {\n const [year, month] = value.split('-').map(Number)\n\n if (month + sign === 0) {\n return `${year - 1}-12`\n } else if (month + sign === 13) {\n return `${year + 1}-01`\n } else {\n return `${year}-${pad(month + sign)}`\n }\n}\n","import './VDatePickerHeader.sass'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { createNativeLocaleFormatter, monthChange } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-header',\n\n props: {\n disabled: Boolean,\n format: Function as PropType,\n min: String,\n max: String,\n nextAriaLabel: String,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevAriaLabel: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n readonly: Boolean,\n value: {\n type: [Number, String],\n required: true,\n },\n },\n\n data () {\n return {\n isReversing: false,\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n if (this.format) {\n return this.format\n } else if (String(this.value).split('-')[1]) {\n return createNativeLocaleFormatter(this.currentLocale, { month: 'long', year: 'numeric', timeZone: 'UTC' }, { length: 7 })\n } else {\n return createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n }\n },\n },\n\n watch: {\n value (newVal, oldVal) {\n this.isReversing = newVal < oldVal\n },\n },\n\n methods: {\n genBtn (change: number) {\n const ariaLabelId = change > 0 ? this.nextAriaLabel : this.prevAriaLabel\n const ariaLabel = ariaLabelId ? this.$vuetify.lang.t(ariaLabelId) : undefined\n const disabled = this.disabled ||\n (change < 0 && this.min && this.calculateChange(change) < this.min) ||\n (change > 0 && this.max && this.calculateChange(change) > this.max)\n\n return this.$createElement(VBtn, {\n attrs: { 'aria-label': ariaLabel },\n props: {\n dark: this.dark,\n disabled,\n icon: true,\n light: this.light,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n this.$emit('input', this.calculateChange(change))\n },\n },\n }, [\n this.$createElement(VIcon, ((change < 0) === !this.$vuetify.rtl) ? this.prevIcon : this.nextIcon),\n ])\n },\n calculateChange (sign: number) {\n const [year, month] = String(this.value).split('-').map(Number)\n\n if (month == null) {\n return `${year + sign}`\n } else {\n return monthChange(String(this.value), sign)\n }\n },\n genHeader () {\n const color = !this.disabled && (this.color || 'accent')\n const header = this.$createElement('div', this.setTextColor(color, {\n key: String(this.value),\n }), [this.$createElement('button', {\n attrs: {\n type: 'button',\n },\n on: {\n click: () => this.$emit('toggle'),\n },\n }, [this.$slots.default || this.formatter(String(this.value))])])\n\n const transition = this.$createElement('transition', {\n props: {\n name: (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition',\n },\n }, [header])\n\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header__value',\n class: {\n 'v-date-picker-header__value--disabled': this.disabled,\n },\n }, [transition])\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header',\n class: {\n 'v-date-picker-header--disabled': this.disabled,\n ...this.themeClasses,\n },\n }, [\n this.genBtn(-1),\n this.genHeader(),\n this.genBtn(+1),\n ])\n },\n})\n","import Vue from 'vue'\n\nexport function createItemTypeNativeListeners (instance: Vue, itemTypeSuffix: string, value: any) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName.slice(0, -itemTypeSuffix.length)] = (event: Event) => instance.$emit(eventName, value, event)\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n\nexport function createItemTypeListeners (instance: Vue, itemTypeSuffix: string) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName] = instance.$listeners[eventName]\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n","// Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',\n// 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'\nimport pad from './pad'\n\nexport default (dateString: string, type: 'date' | 'month' | 'year'): string => {\n const [year, month = 1, date = 1] = dateString.split('-')\n return `${year}-${pad(month)}-${pad(date)}`.substr(0, { date: 10, month: 7, year: 4 }[type])\n}\n","import { DatePickerAllowedDatesFunction } from 'vuetify/types'\n\nexport default function isDateAllowed (date: string, min: string, max: string, allowedFn: DatePickerAllowedDatesFunction | undefined) {\n return (!allowedFn || allowedFn(date)) &&\n (!min || date >= min.substr(0, 10)) &&\n (!max || date <= max)\n}\n","import '../VDatePickerTable.sass'\n\n// Directives\nimport Touch from '../../../directives/touch'\n\n// Mixins\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Themeable from '../../../mixins/themeable'\n\n// Utils\nimport { createItemTypeNativeListeners, sanitizeDateString } from '../util'\nimport isDateAllowed from '../util/isDateAllowed'\nimport { mergeListeners } from '../../../util/mergeData'\nimport mixins from '../../../util/mixins'\nimport { throttle } from '../../../util/helpers'\n\n// Types\nimport {\n PropType,\n VNodeChildren,\n} from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEventColorValue,\n DatePickerEvents,\n DatePickerFormatter,\n TouchWrapper,\n} from 'vuetify/types'\n\ntype CalculateTableDateFunction = (v: number) => string\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n directives: { Touch },\n\n props: {\n allowedDates: Function as PropType,\n current: String,\n disabled: Boolean,\n format: Function as PropType,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n min: String,\n max: String,\n range: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n tableDate: {\n type: String,\n required: true,\n },\n value: [String, Array] as PropType,\n },\n\n data: () => ({\n isReversing: false,\n wheelThrottle: null as any,\n }),\n\n computed: {\n computedTransition (): string {\n return (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n },\n displayedMonth (): number {\n return Number(this.tableDate.split('-')[1]) - 1\n },\n displayedYear (): number {\n return Number(this.tableDate.split('-')[0])\n },\n },\n\n watch: {\n tableDate (newVal: string, oldVal: string) {\n this.isReversing = newVal < oldVal\n },\n },\n\n mounted () {\n this.wheelThrottle = throttle(this.wheel, 250)\n },\n\n methods: {\n genButtonClasses (\n isAllowed: boolean,\n isFloating: boolean,\n isSelected: boolean,\n isCurrent: boolean,\n isFirst: boolean,\n isLast: boolean,\n ) {\n return {\n 'v-size--default': !isFloating,\n 'v-date-picker-table__current': isCurrent,\n 'v-btn--active': isSelected,\n 'v-btn--flat': !isAllowed || this.disabled,\n 'v-btn--text': isSelected === isCurrent,\n 'v-btn--rounded': isFloating,\n 'v-btn--disabled': !isAllowed || this.disabled,\n 'v-btn--outlined': isCurrent && !isSelected,\n 'v-date-picker--first-in-range': isFirst,\n 'v-date-picker--last-in-range': isLast,\n ...this.themeClasses,\n }\n },\n genButtonEvents (value: string, isAllowed: boolean, mouseEventType: string) {\n if (this.disabled) return undefined\n\n return mergeListeners({\n click: () => {\n if (isAllowed && !this.readonly) this.$emit('input', value)\n },\n }, createItemTypeNativeListeners(this, `:${mouseEventType}`, value))\n },\n genButton (value: string, isFloating: boolean, mouseEventType: string, formatter: DatePickerFormatter, isOtherMonth = false) {\n const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n const isSelected = this.isSelected(value) && isAllowed\n const isCurrent = value === this.current\n const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n const color = (isSelected || isCurrent) && (this.color || 'accent')\n let isFirst = false\n let isLast = false\n if (this.range && !!this.value && Array.isArray(this.value)) {\n isFirst = value === this.value[0]\n isLast = value === this.value[this.value.length - 1]\n }\n\n return this.$createElement('button', setColor(color, {\n staticClass: 'v-btn',\n class: this.genButtonClasses(\n isAllowed && !isOtherMonth,\n isFloating,\n isSelected,\n isCurrent,\n isFirst,\n isLast,\n ),\n attrs: {\n type: 'button',\n },\n domProps: {\n disabled: this.disabled || !isAllowed || isOtherMonth,\n },\n on: this.genButtonEvents(value, isAllowed, mouseEventType),\n }), [\n this.$createElement('div', {\n staticClass: 'v-btn__content',\n }, [formatter(value)]),\n this.genEvents(value),\n ])\n },\n getEventColors (date: string) {\n const arrayize = (v: string | string[]) => Array.isArray(v) ? v : [v]\n let eventData: boolean | DatePickerEventColorValue\n let eventColors: string[] = []\n\n if (Array.isArray(this.events)) {\n eventData = this.events.includes(date)\n } else if (this.events instanceof Function) {\n eventData = this.events(date) || false\n } else if (this.events) {\n eventData = this.events[date] || false\n } else {\n eventData = false\n }\n\n if (!eventData) {\n return []\n } else if (eventData !== true) {\n eventColors = arrayize(eventData)\n } else if (typeof this.eventColor === 'string') {\n eventColors = [this.eventColor]\n } else if (typeof this.eventColor === 'function') {\n eventColors = arrayize(this.eventColor(date))\n } else if (Array.isArray(this.eventColor)) {\n eventColors = this.eventColor\n } else {\n eventColors = arrayize(this.eventColor[date])\n }\n\n return eventColors.filter(v => v)\n },\n genEvents (date: string) {\n const eventColors = this.getEventColors(date)\n\n return eventColors.length ? this.$createElement('div', {\n staticClass: 'v-date-picker-table__events',\n }, eventColors.map(color => this.$createElement('div', this.setBackgroundColor(color)))) : null\n },\n isValidScroll (value: number, calculateTableDate: CalculateTableDateFunction) {\n const tableDate = calculateTableDate(value)\n // tableDate is 'YYYY-MM' for DateTable and 'YYYY' for MonthTable\n const sanitizeType = tableDate.split('-').length === 1 ? 'year' : 'month'\n return (value < 0 && (this.min ? tableDate >= sanitizeDateString(this.min, sanitizeType) : true)) ||\n (value > 0 && (this.max ? tableDate <= sanitizeDateString(this.max, sanitizeType) : true))\n },\n wheel (e: WheelEvent, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(e.deltaY))\n },\n touch (value: number, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(value))\n },\n genTable (staticClass: string, children: VNodeChildren, calculateTableDate: CalculateTableDateFunction) {\n const transition = this.$createElement('transition', {\n props: { name: this.computedTransition },\n }, [this.$createElement('table', { key: this.tableDate }, children)])\n\n const touchDirective = {\n name: 'touch',\n value: {\n left: (e: TouchWrapper) => (e.offsetX < -15) &&\n (this.isValidScroll(1, calculateTableDate) && this.touch(1, calculateTableDate)),\n right: (e: TouchWrapper) => (e.offsetX > 15) &&\n (this.isValidScroll(-1, calculateTableDate) && this.touch(-1, calculateTableDate)),\n },\n }\n\n return this.$createElement('div', {\n staticClass,\n class: {\n 'v-date-picker-table--disabled': this.disabled,\n ...this.themeClasses,\n },\n on: (!this.disabled && this.scrollable) ? {\n wheel: (e: WheelEvent) => {\n e.preventDefault()\n if (this.isValidScroll(e.deltaY, calculateTableDate)) { this.wheelThrottle(e, calculateTableDate) }\n },\n } : undefined,\n directives: [touchDirective],\n }, [transition])\n },\n isSelected (value: string): boolean {\n if (Array.isArray(this.value)) {\n if (this.range && this.value.length === 2) {\n const [from, to] = [...this.value].sort()\n return from <= value && value <= to\n } else {\n return this.value.indexOf(value) !== -1\n }\n }\n\n return value === this.value\n },\n },\n})\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport { pad, createNativeLocaleFormatter, monthChange } from './util'\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeChildren, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-date-table',\n\n props: {\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n weekdayFormat: Function as PropType,\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { day: 'numeric', timeZone: 'UTC' }, { start: 8, length: 2 })\n },\n weekdayFormatter (): DatePickerFormatter | undefined {\n return this.weekdayFormat || createNativeLocaleFormatter(this.currentLocale, { weekday: 'narrow', timeZone: 'UTC' })\n },\n weekDays (): string[] {\n const first = parseInt(this.firstDayOfWeek, 10)\n\n return this.weekdayFormatter\n ? createRange(7).map(i => this.weekdayFormatter!(`2017-01-${first + i + 15}`)) // 2017-01-15 is Sunday\n : createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return monthChange(this.tableDate, Math.sign(delta || 1))\n },\n genTHead () {\n const days = this.weekDays.map(day => this.$createElement('th', day))\n if (this.showWeek) {\n days.unshift(this.$createElement('th'))\n }\n\n return this.$createElement('thead', this.genTR(days))\n },\n // Returns number of the days from the firstDayOfWeek to the first day of the current month\n weekDaysBeforeFirstDayOfTheMonth () {\n const firstDayOfTheMonth = new Date(`${this.displayedYear}-${pad(this.displayedMonth + 1)}-01T00:00:00+00:00`)\n const weekDay = firstDayOfTheMonth.getUTCDay()\n\n return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n },\n getWeekNumber (dayInMonth: number) {\n return weekNumber(\n this.displayedYear,\n this.displayedMonth,\n dayInMonth,\n parseInt(this.firstDayOfWeek),\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('td', [\n this.$createElement('small', {\n staticClass: 'v-date-picker-table--date__week',\n }, String(weekNumber).padStart(2, '0')),\n ])\n },\n // eslint-disable-next-line max-statements\n genTBody () {\n const children = []\n const daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate()\n let rows = []\n let day = this.weekDaysBeforeFirstDayOfTheMonth()\n\n if (this.showWeek) {\n rows.push(this.genWeekNumber(this.getWeekNumber(1)))\n }\n\n const prevMonthYear = this.displayedMonth ? this.displayedYear : this.displayedYear - 1\n const prevMonth = (this.displayedMonth + 11) % 12\n const firstDayFromPreviousMonth = new Date(this.displayedYear, this.displayedMonth, 0).getDate()\n const cellsInRow = this.showWeek ? 8 : 7\n\n while (day--) {\n const date = `${prevMonthYear}-${pad(prevMonth + 1)}-${pad(firstDayFromPreviousMonth - day)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n for (day = 1; day <= daysInMonth; day++) {\n const date = `${this.displayedYear}-${pad(this.displayedMonth + 1)}-${pad(day)}`\n\n rows.push(this.$createElement('td', [\n this.genButton(date, true, 'date', this.formatter),\n ]))\n\n if (rows.length % cellsInRow === 0) {\n children.push(this.genTR(rows))\n rows = []\n if (this.showWeek && (day < daysInMonth || this.showAdjacentMonths)) {\n rows.push(this.genWeekNumber(this.getWeekNumber(day + 7)))\n }\n }\n }\n\n const nextMonthYear = this.displayedMonth === 11 ? this.displayedYear + 1 : this.displayedYear\n const nextMonth = (this.displayedMonth + 1) % 12\n let nextMonthDay = 1\n\n while (rows.length < cellsInRow) {\n const date = `${nextMonthYear}-${pad(nextMonth + 1)}-${pad(nextMonthDay++)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n if (rows.length) {\n children.push(this.genTR(rows))\n }\n\n return this.$createElement('tbody', children)\n },\n genTR (children: VNodeChildren) {\n return [this.$createElement('tr', children)]\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--date', [\n this.genTHead(),\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-month-table',\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { month: 'short', timeZone: 'UTC' }, { start: 5, length: 2 })\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return `${parseInt(this.tableDate, 10) + Math.sign(delta || 1)}`\n },\n genTBody () {\n const children = []\n const cols = Array(3).fill(null)\n const rows = 12 / cols.length\n\n for (let row = 0; row < rows; row++) {\n const tds = cols.map((_, col) => {\n const month = row * cols.length + col\n const date = `${this.displayedYear}-${pad(month + 1)}`\n return this.$createElement('td', {\n key: month,\n }, [\n this.genButton(date, false, 'month', this.formatter),\n ])\n })\n\n children.push(this.$createElement('tr', {\n key: row,\n }, tds))\n }\n\n return this.$createElement('tbody', children)\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--month', [\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","import './VDatePickerYears.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\n\n// Utils\nimport {\n createItemTypeNativeListeners,\n createNativeLocaleFormatter,\n} from './util'\nimport { mergeListeners } from '../../util/mergeData'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface options extends Vue {\n $el: HTMLElement\n}\n\nexport default mixins\n/* eslint-enable indent */\n>(\n Colorable,\n Localable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-years',\n\n props: {\n format: Function as PropType,\n min: [Number, String],\n max: [Number, String],\n readonly: Boolean,\n value: [Number, String],\n },\n\n data () {\n return {\n defaultColor: 'primary',\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n },\n },\n\n mounted () {\n setTimeout(() => {\n const activeItem = this.$el.getElementsByClassName('active')[0]\n if (activeItem) {\n this.$el.scrollTop = activeItem.offsetTop - this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2\n } else if (this.min && !this.max) {\n this.$el.scrollTop = this.$el.scrollHeight\n } else if (!this.min && this.max) {\n this.$el.scrollTop = 0\n } else {\n this.$el.scrollTop = this.$el.scrollHeight / 2 - this.$el.offsetHeight / 2\n }\n })\n },\n\n methods: {\n genYearItem (year: number): VNode {\n const formatted = this.formatter(`${year}`)\n const active = parseInt(this.value, 10) === year\n const color = active && (this.color || 'primary')\n\n return this.$createElement('li', this.setTextColor(color, {\n key: year,\n class: { active },\n on: mergeListeners({\n click: () => this.$emit('input', year),\n }, createItemTypeNativeListeners(this, ':year', year)),\n }), formatted)\n },\n\n genYearItems (): VNode[] {\n const children = []\n const selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear()\n const maxYear = this.max ? parseInt(this.max, 10) : (selectedYear + 100)\n const minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : (selectedYear - 100))\n\n for (let year = maxYear; year >= minYear; year--) {\n children.push(this.genYearItem(year))\n }\n\n return children\n },\n },\n\n render (): VNode {\n return this.$createElement('ul', {\n staticClass: 'v-date-picker-years',\n ref: 'years',\n }, this.genYearItems())\n },\n})\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","// Components\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\n// Mixins\nimport Localable from '../../mixins/localable'\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport isDateAllowed from './util/isDateAllowed'\nimport mixins from '../../util/mixins'\nimport { wrapInArray } from '../../util/helpers'\nimport { daysInMonth } from '../VCalendar/util/timestamp'\nimport { consoleWarn } from '../../util/console'\nimport {\n createItemTypeListeners,\n createNativeLocaleFormatter,\n pad,\n sanitizeDateString,\n} from './util'\n\n// Types\nimport {\n PropType,\n PropValidator,\n} from 'vue/types/options'\nimport { VNode } from 'vue'\nimport {\n DatePickerFormatter,\n DatePickerMultipleFormatter,\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEvents,\n DatePickerType,\n} from 'vuetify/types'\n\ntype DatePickerValue = string | string[] | undefined\ninterface Formatters {\n year: DatePickerFormatter\n titleDate: DatePickerFormatter | DatePickerMultipleFormatter\n}\n\ntype ActivePicker = 'DATE' | 'MONTH' | 'YEAR';\n\nexport default mixins(\n Localable,\n Picker,\n/* @vue/component */\n).extend({\n name: 'v-date-picker',\n\n props: {\n activePicker: String as PropType,\n allowedDates: Function as PropType,\n // Function formatting the day in date picker table\n dayFormat: Function as PropType,\n disabled: Boolean,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n // Function formatting the tableDate in the day/month table header\n headerDateFormat: Function as PropType,\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n max: String,\n min: String,\n // Function formatting month in the months table\n monthFormat: Function as PropType,\n multiple: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n nextMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextMonthAriaLabel',\n },\n nextYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextYearAriaLabel',\n },\n pickerDate: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n prevMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevMonthAriaLabel',\n },\n prevYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevYearAriaLabel',\n },\n range: Boolean,\n reactive: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n showCurrent: {\n type: [Boolean, String],\n default: true,\n },\n selectedItemsText: {\n type: String,\n default: '$vuetify.datePicker.itemsSelected',\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n // Function formatting currently selected date in the picker title\n titleDateFormat: Function as PropType,\n type: {\n type: String,\n default: 'date',\n validator: (type: any) => ['date', 'month'].includes(type), // TODO: year\n } as PropValidator,\n value: [Array, String] as PropType,\n weekdayFormat: Function as PropType,\n // Function formatting the year in table header and pickup title\n yearFormat: Function as PropType,\n yearIcon: String,\n },\n\n data () {\n const now = new Date()\n return {\n internalActivePicker: this.type.toUpperCase(),\n inputDay: null as number | null,\n inputMonth: null as number | null,\n inputYear: null as number | null,\n isReversing: false,\n now,\n // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)\n tableDate: (() => {\n if (this.pickerDate) {\n return this.pickerDate\n }\n\n const multipleValue = wrapInArray(this.value)\n const date = multipleValue[multipleValue.length - 1] ||\n (typeof this.showCurrent === 'string' ? this.showCurrent : `${now.getFullYear()}-${now.getMonth() + 1}`)\n return sanitizeDateString(date as string, this.type === 'date' ? 'month' : 'year')\n })(),\n }\n },\n\n computed: {\n multipleValue (): string[] {\n return wrapInArray(this.value)\n },\n isMultiple (): boolean {\n return this.multiple || this.range\n },\n lastValue (): string | null {\n return this.isMultiple ? this.multipleValue[this.multipleValue.length - 1] : (this.value as string | null)\n },\n selectedMonths (): string | string[] | undefined {\n if (!this.value || this.type === 'month') {\n return this.value\n } else if (this.isMultiple) {\n return this.multipleValue.map(val => val.substr(0, 7))\n } else {\n return (this.value as string).substr(0, 7)\n }\n },\n current (): string | null {\n if (this.showCurrent === true) {\n return sanitizeDateString(`${this.now.getFullYear()}-${this.now.getMonth() + 1}-${this.now.getDate()}`, this.type)\n }\n\n return this.showCurrent || null\n },\n inputDate (): string {\n return this.type === 'date'\n ? `${this.inputYear}-${pad(this.inputMonth! + 1)}-${pad(this.inputDay!)}`\n : `${this.inputYear}-${pad(this.inputMonth! + 1)}`\n },\n tableMonth (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1\n },\n tableYear (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[0])\n },\n minMonth (): string | null {\n return this.min ? sanitizeDateString(this.min, 'month') : null\n },\n maxMonth (): string | null {\n return this.max ? sanitizeDateString(this.max, 'month') : null\n },\n minYear (): string | null {\n return this.min ? sanitizeDateString(this.min, 'year') : null\n },\n maxYear (): string | null {\n return this.max ? sanitizeDateString(this.max, 'year') : null\n },\n formatters (): Formatters {\n return {\n year: this.yearFormat || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }),\n titleDate: this.titleDateFormat ||\n (this.isMultiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter),\n }\n },\n defaultTitleMultipleDateFormatter (): DatePickerMultipleFormatter {\n return dates => {\n if (!dates.length) {\n return '-'\n }\n\n if (dates.length === 1) {\n return this.defaultTitleDateFormatter(dates[0])\n }\n\n return this.$vuetify.lang.t(this.selectedItemsText, dates.length)\n }\n },\n defaultTitleDateFormatter (): DatePickerFormatter {\n const titleFormats = {\n year: { year: 'numeric', timeZone: 'UTC' },\n month: { month: 'long', timeZone: 'UTC' },\n date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' },\n } as const\n\n const titleDateFormatter = createNativeLocaleFormatter(this.currentLocale, titleFormats[this.type], {\n start: 0,\n length: { date: 10, month: 7, year: 4 }[this.type],\n })\n\n const landscapeFormatter = (date: string) => titleDateFormatter(date)\n .replace(/([^\\d\\s])([\\d])/g, (match, nonDigit, digit) => `${nonDigit} ${digit}`)\n .replace(', ', ',
')\n\n return this.landscape ? landscapeFormatter : titleDateFormatter\n },\n },\n\n watch: {\n internalActivePicker: {\n immediate: true,\n handler (val: ActivePicker) {\n this.$emit('update:active-picker', val)\n },\n },\n activePicker (val: ActivePicker) {\n this.internalActivePicker = val\n },\n tableDate (val: string, prev: string) {\n // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly\n // compare for example '2000-9' and '2000-10'\n const sanitizeType = this.type === 'month' ? 'year' : 'month'\n this.isReversing = sanitizeDateString(val, sanitizeType) < sanitizeDateString(prev, sanitizeType)\n this.$emit('update:picker-date', val)\n },\n pickerDate (val: string | null) {\n if (val) {\n this.tableDate = val\n } else if (this.lastValue && this.type === 'date') {\n this.tableDate = sanitizeDateString(this.lastValue, 'month')\n } else if (this.lastValue && this.type === 'month') {\n this.tableDate = sanitizeDateString(this.lastValue, 'year')\n }\n },\n value (newValue: DatePickerValue, oldValue: DatePickerValue) {\n this.checkMultipleProp()\n this.setInputDate()\n\n if (\n (!this.isMultiple && this.value && !this.pickerDate) ||\n (this.isMultiple && this.multipleValue.length && (!oldValue || !oldValue.length) && !this.pickerDate)\n ) {\n this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n }\n },\n type (type: DatePickerType) {\n this.internalActivePicker = type.toUpperCase()\n\n if (this.value && this.value.length) {\n const output = this.multipleValue\n .map((val: string) => sanitizeDateString(val, type))\n .filter(this.isDateAllowed)\n this.$emit('input', this.isMultiple ? output : output[0])\n }\n },\n },\n\n created () {\n this.checkMultipleProp()\n\n if (this.pickerDate !== this.tableDate) {\n this.$emit('update:picker-date', this.tableDate)\n }\n this.setInputDate()\n },\n\n methods: {\n emitInput (newInput: string) {\n if (this.range) {\n if (this.multipleValue.length !== 1) {\n this.$emit('input', [newInput])\n } else {\n const output = [this.multipleValue[0], newInput]\n this.$emit('input', output)\n this.$emit('change', output)\n }\n return\n }\n\n const output = this.multiple\n ? (\n this.multipleValue.indexOf(newInput) === -1\n ? this.multipleValue.concat([newInput])\n : this.multipleValue.filter(x => x !== newInput)\n )\n : newInput\n\n this.$emit('input', output)\n this.multiple || this.$emit('change', newInput)\n },\n checkMultipleProp () {\n if (this.value == null) return\n const valueType = this.value.constructor.name\n const expected = this.isMultiple ? 'Array' : 'String'\n if (valueType !== expected) {\n consoleWarn(`Value must be ${this.isMultiple ? 'an' : 'a'} ${expected}, got ${valueType}`, this)\n }\n },\n isDateAllowed (value: string): boolean {\n return isDateAllowed(value, this.min, this.max, this.allowedDates)\n },\n yearClick (value: number) {\n this.inputYear = value\n if (this.type === 'month') {\n this.tableDate = `${value}`\n } else {\n this.tableDate = `${value}-${pad((this.tableMonth || 0) + 1)}`\n }\n this.internalActivePicker = 'MONTH'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n },\n monthClick (value: string) {\n const [year, month] = value.split('-')\n\n this.inputYear = parseInt(year, 10)\n this.inputMonth = parseInt(month, 10) - 1\n\n if (this.type === 'date') {\n if (this.inputDay) {\n this.inputDay = Math.min(this.inputDay, daysInMonth(this.inputYear, this.inputMonth + 1))\n }\n\n this.tableDate = value\n this.internalActivePicker = 'DATE'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n } else {\n this.emitInput(this.inputDate)\n }\n },\n dateClick (value: string) {\n const [year, month, day] = value.split('-')\n\n this.inputYear = parseInt(year, 10)\n this.inputMonth = parseInt(month, 10) - 1\n this.inputDay = parseInt(day, 10)\n\n this.emitInput(this.inputDate)\n },\n genPickerTitle (): VNode {\n return this.$createElement(VDatePickerTitle, {\n props: {\n date: this.value ? (this.formatters.titleDate as (value: any) => string)(this.isMultiple ? this.multipleValue : this.value) : '',\n disabled: this.disabled,\n readonly: this.readonly,\n selectingYear: this.internalActivePicker === 'YEAR',\n year: this.formatters.year(this.multipleValue.length ? `${this.inputYear}` : this.tableDate),\n yearIcon: this.yearIcon,\n value: this.multipleValue[0],\n },\n slot: 'title',\n on: {\n 'update:selecting-year': (value: boolean) => this.internalActivePicker = value ? 'YEAR' : this.type.toUpperCase(),\n },\n })\n },\n genTableHeader (): VNode {\n return this.$createElement(VDatePickerHeader, {\n props: {\n nextIcon: this.nextIcon,\n color: this.color,\n dark: this.dark,\n disabled: this.disabled,\n format: this.headerDateFormat,\n light: this.light,\n locale: this.locale,\n min: this.internalActivePicker === 'DATE' ? this.minMonth : this.minYear,\n max: this.internalActivePicker === 'DATE' ? this.maxMonth : this.maxYear,\n nextAriaLabel: this.internalActivePicker === 'DATE' ? this.nextMonthAriaLabel : this.nextYearAriaLabel,\n prevAriaLabel: this.internalActivePicker === 'DATE' ? this.prevMonthAriaLabel : this.prevYearAriaLabel,\n prevIcon: this.prevIcon,\n readonly: this.readonly,\n value: this.internalActivePicker === 'DATE' ? `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}` : `${pad(this.tableYear, 4)}`,\n },\n on: {\n toggle: () => this.internalActivePicker = (this.internalActivePicker === 'DATE' ? 'MONTH' : 'YEAR'),\n input: (value: string) => this.tableDate = value,\n },\n })\n },\n genDateTable (): VNode {\n return this.$createElement(VDatePickerDateTable, {\n props: {\n allowedDates: this.allowedDates,\n color: this.color,\n current: this.current,\n dark: this.dark,\n disabled: this.disabled,\n events: this.events,\n eventColor: this.eventColor,\n firstDayOfWeek: this.firstDayOfWeek,\n format: this.dayFormat,\n light: this.light,\n locale: this.locale,\n localeFirstDayOfYear: this.localeFirstDayOfYear,\n min: this.min,\n max: this.max,\n range: this.range,\n readonly: this.readonly,\n scrollable: this.scrollable,\n showAdjacentMonths: this.showAdjacentMonths,\n showWeek: this.showWeek,\n tableDate: `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}`,\n value: this.value,\n weekdayFormat: this.weekdayFormat,\n },\n ref: 'table',\n on: {\n input: this.dateClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':date'),\n },\n })\n },\n genMonthTable (): VNode {\n return this.$createElement(VDatePickerMonthTable, {\n props: {\n allowedDates: this.type === 'month' ? this.allowedDates : null,\n color: this.color,\n current: this.current ? sanitizeDateString(this.current, 'month') : null,\n dark: this.dark,\n disabled: this.disabled,\n events: this.type === 'month' ? this.events : null,\n eventColor: this.type === 'month' ? this.eventColor : null,\n format: this.monthFormat,\n light: this.light,\n locale: this.locale,\n min: this.minMonth,\n max: this.maxMonth,\n range: this.range,\n readonly: this.readonly && this.type === 'month',\n scrollable: this.scrollable,\n value: this.selectedMonths,\n tableDate: `${pad(this.tableYear, 4)}`,\n },\n ref: 'table',\n on: {\n input: this.monthClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':month'),\n },\n })\n },\n genYears (): VNode {\n return this.$createElement(VDatePickerYears, {\n props: {\n color: this.color,\n format: this.yearFormat,\n locale: this.locale,\n min: this.minYear,\n max: this.maxYear,\n value: this.tableYear,\n },\n on: {\n input: this.yearClick,\n ...createItemTypeListeners(this, ':year'),\n },\n })\n },\n genPickerBody (): VNode {\n const children = this.internalActivePicker === 'YEAR' ? [\n this.genYears(),\n ] : [\n this.genTableHeader(),\n this.internalActivePicker === 'DATE' ? this.genDateTable() : this.genMonthTable(),\n ]\n\n return this.$createElement('div', {\n key: this.internalActivePicker,\n }, children)\n },\n setInputDate () {\n if (this.lastValue) {\n const array = this.lastValue.split('-')\n this.inputYear = parseInt(array[0], 10)\n this.inputMonth = parseInt(array[1], 10) - 1\n if (this.type === 'date') {\n this.inputDay = parseInt(array[2], 10)\n }\n } else {\n this.inputYear = this.inputYear || this.now.getFullYear()\n this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth()\n this.inputDay = this.inputDay || this.now.getDate()\n }\n },\n },\n\n render (): VNode {\n return this.genPicker('v-picker--date')\n },\n})\n","import './_grid.sass'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nexport default createSimpleFunctional('spacer', 'div', 'v-spacer')\n","import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n","// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { VNode } from 'vue'\n\ntype ErrorBag = Record\ntype VInputInstance = InstanceType\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (val) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n watchInput (input: any): Watchers {\n const watcher = (input: any): (() => void) => {\n return input.$watch('hasError', (val: boolean) => {\n this.$set(this.errorBag, input._uid, val)\n }, { immediate: true })\n }\n\n const watchers: Watchers = {\n _uid: input._uid,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', (val: boolean) => {\n if (!val) return\n\n // Only watch if we're not already doing it\n if (this.errorBag.hasOwnProperty(input._uid)) return\n\n watchers.valid = watcher(input)\n })\n } else {\n watchers.valid = watcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (): boolean {\n return this.inputs.filter(input => !input.validate(true)).length === 0\n },\n /** @public */\n reset (): void {\n this.inputs.forEach(input => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag () {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation () {\n this.inputs.forEach(input => input.resetValidation())\n this.resetErrorBag()\n },\n register (input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n unregister (input: VInputInstance) {\n const found = this.inputs.find(i => i._uid === input._uid)\n\n if (!found) return\n\n const unwatch = this.watchers.find(i => i._uid === found._uid)\n if (unwatch) {\n unwatch.valid()\n unwatch.shouldValidate()\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found._uid)\n this.inputs = this.inputs.filter(i => i._uid !== found._uid)\n this.$delete(this.errorBag, found._uid)\n },\n },\n\n render (h): VNode {\n return h('form', {\n staticClass: 'v-form',\n attrs: {\n novalidate: true,\n ...this.attrs$,\n },\n on: {\n submit: (e: Event) => this.$emit('submit', e),\n },\n }, this.$slots.default)\n },\n})\n","const padStart = (string: number | string, targetLength: number, padString: string) => {\n targetLength = targetLength >> 0\n string = String(string)\n padString = String(padString)\n if (string.length > targetLength) {\n return String(string)\n }\n\n targetLength = targetLength - string.length\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length)\n }\n return padString.slice(0, targetLength) + String(string)\n}\n\nexport default (n: string | number, length = 2) => padStart(n, length, '0')\n","import './VAvatar.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Measurable from '../../mixins/measurable'\nimport Roundable from '../../mixins/roundable'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n Colorable,\n Measurable,\n Roundable,\n /* @vue/component */\n).extend({\n name: 'v-avatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n size: {\n type: [Number, String],\n default: 48,\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-avatar--left': this.left,\n 'v-avatar--right': this.right,\n ...this.roundedClasses,\n }\n },\n styles (): object {\n return {\n height: convertToUnit(this.size),\n minWidth: convertToUnit(this.size),\n width: convertToUnit(this.size),\n ...this.measurableStyles,\n }\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-avatar',\n class: this.classes,\n style: this.styles,\n on: this.$listeners,\n }\n\n return h('div', this.setBackgroundColor(this.color, data), this.$slots.default)\n },\n})\n","// Styles\nimport './VBtn.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VProgressCircular from '../VProgressCircular'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Elevatable from '../../mixins/elevatable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator, PropType } from 'vue/types/options'\nimport { RippleOptions } from '../../directives/ripple'\n\nconst baseMixins = mixins(\n VSheet,\n Routable,\n Positionable,\n Sizeable,\n GroupableFactory('btnToggle'),\n ToggleableFactory('inputValue')\n /* @vue/component */\n)\ninterface options extends ExtractVue {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-btn',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.btnToggle) return ''\n\n return this.btnToggle.activeClass\n },\n } as any as PropValidator,\n block: Boolean,\n depressed: Boolean,\n fab: Boolean,\n icon: Boolean,\n loading: Boolean,\n outlined: Boolean,\n plain: Boolean,\n retainFocusOnClick: Boolean,\n rounded: Boolean,\n tag: {\n type: String,\n default: 'button',\n },\n text: Boolean,\n tile: Boolean,\n type: {\n type: String,\n default: 'button',\n },\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-btn--active',\n }),\n\n computed: {\n classes (): any {\n return {\n 'v-btn': true,\n ...Routable.options.computed.classes.call(this),\n 'v-btn--absolute': this.absolute,\n 'v-btn--block': this.block,\n 'v-btn--bottom': this.bottom,\n 'v-btn--disabled': this.disabled,\n 'v-btn--is-elevated': this.isElevated,\n 'v-btn--fab': this.fab,\n 'v-btn--fixed': this.fixed,\n 'v-btn--has-bg': this.hasBg,\n 'v-btn--icon': this.icon,\n 'v-btn--left': this.left,\n 'v-btn--loading': this.loading,\n 'v-btn--outlined': this.outlined,\n 'v-btn--plain': this.plain,\n 'v-btn--right': this.right,\n 'v-btn--round': this.isRound,\n 'v-btn--rounded': this.rounded,\n 'v-btn--router': this.to,\n 'v-btn--text': this.text,\n 'v-btn--tile': this.tile,\n 'v-btn--top': this.top,\n ...this.themeClasses,\n ...this.groupClasses,\n ...this.elevationClasses,\n ...this.sizeableClasses,\n }\n },\n computedElevation (): string | number | undefined {\n if (this.disabled) return undefined\n\n return Elevatable.options.computed.computedElevation.call(this)\n },\n computedRipple (): RippleOptions | boolean {\n const defaultRipple = this.icon || this.fab ? { circle: true } : true\n if (this.disabled) return false\n else return this.ripple ?? defaultRipple\n },\n hasBg (): boolean {\n return !this.text && !this.plain && !this.outlined && !this.icon\n },\n isElevated (): boolean {\n return Boolean(\n !this.icon &&\n !this.text &&\n !this.outlined &&\n !this.depressed &&\n !this.disabled &&\n !this.plain &&\n (this.elevation == null || Number(this.elevation) > 0)\n )\n },\n isRound (): boolean {\n return Boolean(\n this.icon ||\n this.fab\n )\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n }\n },\n },\n\n created () {\n const breakingProps = [\n ['flat', 'text'],\n ['outline', 'outlined'],\n ['round', 'rounded'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n // TODO: Remove this in v3\n !this.retainFocusOnClick && !this.fab && e.detail && this.$el.blur()\n this.$emit('click', e)\n\n this.btnToggle && this.toggle()\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-btn__content',\n }, this.$slots.default)\n },\n genLoader (): VNode {\n return this.$createElement('span', {\n class: 'v-btn__loader',\n }, this.$slots.loader || [this.$createElement(VProgressCircular, {\n props: {\n indeterminate: true,\n size: 23,\n width: 2,\n },\n })])\n },\n },\n\n render (h): VNode {\n const children = [\n this.genContent(),\n this.loading && this.genLoader(),\n ]\n const { tag, data } = this.generateRouteLink()\n const setColor = this.hasBg\n ? this.setBackgroundColor\n : this.setTextColor\n\n if (tag === 'button') {\n data.attrs!.type = this.type\n data.attrs!.disabled = this.disabled\n }\n data.attrs!.value = ['string', 'number'].includes(typeof this.value)\n ? this.value\n : JSON.stringify(this.value)\n\n return h(tag, this.disabled ? data : setColor(this.color, data), children)\n },\n})\n","// Helpers\nimport { wrapInArray, sortItems, deepEqual, groupItems, searchItems, fillArray } from '../../util/helpers'\nimport Vue, { VNode } from 'vue'\n\n// Types\nimport {\n DataOptions,\n DataPagination,\n DataScopeProps,\n DataSortFunction,\n DataGroupFunction,\n DataSearchFunction,\n ItemGroup,\n} from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n name: 'v-data',\n\n inheritAttrs: false,\n\n props: {\n items: {\n type: Array,\n default: () => [],\n } as PropValidator,\n options: {\n type: Object,\n default: () => ({}),\n } as PropValidator>,\n sortBy: {\n type: [String, Array],\n } as PropValidator,\n sortDesc: {\n type: [Boolean, Array],\n } as PropValidator,\n customSort: {\n type: Function,\n default: sortItems,\n } as PropValidator,\n mustSort: Boolean,\n multiSort: Boolean,\n page: {\n type: Number,\n default: 1,\n },\n itemsPerPage: {\n type: Number,\n default: 10,\n },\n groupBy: {\n type: [String, Array],\n default: () => [],\n } as PropValidator,\n groupDesc: {\n type: [Boolean, Array],\n default: () => [],\n } as PropValidator,\n customGroup: {\n type: Function,\n default: groupItems,\n } as PropValidator,\n locale: {\n type: String,\n default: 'en-US',\n },\n disableSort: Boolean,\n disablePagination: Boolean,\n disableFiltering: Boolean,\n search: String,\n customFilter: {\n type: Function,\n default: searchItems,\n } as PropValidator,\n serverItemsLength: {\n type: Number,\n default: -1,\n },\n },\n\n data () {\n let internalOptions: DataOptions = {\n page: this.page,\n itemsPerPage: this.itemsPerPage,\n sortBy: wrapInArray(this.sortBy),\n sortDesc: wrapInArray(this.sortDesc),\n groupBy: wrapInArray(this.groupBy),\n groupDesc: wrapInArray(this.groupDesc),\n mustSort: this.mustSort,\n multiSort: this.multiSort,\n }\n\n if (this.options) {\n internalOptions = Object.assign(internalOptions, this.options)\n }\n\n const { sortBy, sortDesc, groupBy, groupDesc } = internalOptions\n const sortDiff = sortBy.length - sortDesc.length\n const groupDiff = groupBy.length - groupDesc.length\n\n if (sortDiff > 0) {\n internalOptions.sortDesc.push(...fillArray(sortDiff, false))\n }\n\n if (groupDiff > 0) {\n internalOptions.groupDesc.push(...fillArray(groupDiff, false))\n }\n\n return {\n internalOptions,\n }\n },\n\n computed: {\n itemsLength (): number {\n return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length\n },\n pageCount (): number {\n return this.internalOptions.itemsPerPage <= 0\n ? 1\n : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage)\n },\n pageStart (): number {\n if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0\n\n return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage\n },\n pageStop (): number {\n if (this.internalOptions.itemsPerPage === -1) return this.itemsLength\n if (!this.items.length) return 0\n\n return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage)\n },\n isGrouped (): boolean {\n return !!this.internalOptions.groupBy.length\n },\n pagination (): DataPagination {\n return {\n page: this.internalOptions.page,\n itemsPerPage: this.internalOptions.itemsPerPage,\n pageStart: this.pageStart,\n pageStop: this.pageStop,\n pageCount: this.pageCount,\n itemsLength: this.itemsLength,\n }\n },\n filteredItems (): any[] {\n let items = this.items.slice()\n\n if (!this.disableFiltering && this.serverItemsLength <= 0) {\n items = this.customFilter(items, this.search)\n }\n\n return items\n },\n computedItems (): any[] {\n let items = this.filteredItems.slice()\n\n if ((!this.disableSort || this.internalOptions.groupBy.length) && this.serverItemsLength <= 0) {\n items = this.sortItems(items)\n }\n\n if (!this.disablePagination && this.serverItemsLength <= 0) {\n items = this.paginateItems(items)\n }\n\n return items\n },\n groupedItems (): ItemGroup[] | null {\n return this.isGrouped ? this.groupItems(this.computedItems) : null\n },\n scopedProps (): DataScopeProps {\n return {\n sort: this.sort,\n sortArray: this.sortArray,\n group: this.group,\n items: this.computedItems,\n options: this.internalOptions,\n updateOptions: this.updateOptions,\n pagination: this.pagination,\n groupedItems: this.groupedItems,\n originalItemsLength: this.items.length,\n }\n },\n computedOptions (): DataOptions {\n return { ...this.options } as DataOptions\n },\n },\n\n watch: {\n computedOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n\n this.updateOptions(options)\n },\n deep: true,\n immediate: true,\n },\n internalOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n this.$emit('update:options', options)\n },\n deep: true,\n immediate: true,\n },\n page (page: number) {\n this.updateOptions({ page })\n },\n 'internalOptions.page' (page: number) {\n this.$emit('update:page', page)\n },\n itemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage })\n },\n 'internalOptions.itemsPerPage' (itemsPerPage: number) {\n this.$emit('update:items-per-page', itemsPerPage)\n },\n sortBy (sortBy: string | string[]) {\n this.updateOptions({ sortBy: wrapInArray(sortBy) })\n },\n 'internalOptions.sortBy' (sortBy: string[], old: string[]) {\n !deepEqual(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0])\n },\n sortDesc (sortDesc: boolean | boolean[]) {\n this.updateOptions({ sortDesc: wrapInArray(sortDesc) })\n },\n 'internalOptions.sortDesc' (sortDesc: boolean[], old: boolean[]) {\n !deepEqual(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0])\n },\n groupBy (groupBy: string | string[]) {\n this.updateOptions({ groupBy: wrapInArray(groupBy) })\n },\n 'internalOptions.groupBy' (groupBy: string[], old: string[]) {\n !deepEqual(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0])\n },\n groupDesc (groupDesc: boolean | boolean[]) {\n this.updateOptions({ groupDesc: wrapInArray(groupDesc) })\n },\n 'internalOptions.groupDesc' (groupDesc: boolean[], old: boolean[]) {\n !deepEqual(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0])\n },\n multiSort (multiSort: boolean) {\n this.updateOptions({ multiSort })\n },\n 'internalOptions.multiSort' (multiSort: boolean) {\n this.$emit('update:multi-sort', multiSort)\n },\n mustSort (mustSort: boolean) {\n this.updateOptions({ mustSort })\n },\n 'internalOptions.mustSort' (mustSort: boolean) {\n this.$emit('update:must-sort', mustSort)\n },\n pageCount: {\n handler (pageCount: number) {\n this.$emit('page-count', pageCount)\n },\n immediate: true,\n },\n computedItems: {\n handler (computedItems: any[]) {\n this.$emit('current-items', computedItems)\n },\n immediate: true,\n },\n pagination: {\n handler (pagination: DataPagination, old: DataPagination) {\n if (deepEqual(pagination, old)) return\n this.$emit('pagination', this.pagination)\n },\n immediate: true,\n },\n },\n\n methods: {\n toggle (key: string, oldBy: string[], oldDesc: boolean[], page: number, mustSort: boolean, multiSort: boolean) {\n let by = oldBy.slice()\n let desc = oldDesc.slice()\n const byIndex = by.findIndex((k: string) => k === key)\n\n if (byIndex < 0) {\n if (!multiSort) {\n by = []\n desc = []\n }\n\n by.push(key)\n desc.push(false)\n } else if (byIndex >= 0 && !desc[byIndex]) {\n desc[byIndex] = true\n } else if (!mustSort) {\n by.splice(byIndex, 1)\n desc.splice(byIndex, 1)\n } else {\n desc[byIndex] = false\n }\n\n // Reset page to 1 if sortBy or sortDesc have changed\n if (!deepEqual(by, oldBy) || !deepEqual(desc, oldDesc)) {\n page = 1\n }\n\n return { by, desc, page }\n },\n group (key: string): void {\n const { by: groupBy, desc: groupDesc, page } = this.toggle(\n key,\n this.internalOptions.groupBy,\n this.internalOptions.groupDesc,\n this.internalOptions.page,\n true,\n false\n )\n this.updateOptions({ groupBy, groupDesc, page })\n },\n sort (key: string | string[]): void {\n if (Array.isArray(key)) return this.sortArray(key)\n\n const { by: sortBy, desc: sortDesc, page } = this.toggle(\n key,\n this.internalOptions.sortBy,\n this.internalOptions.sortDesc,\n this.internalOptions.page,\n this.internalOptions.mustSort,\n this.internalOptions.multiSort\n )\n this.updateOptions({ sortBy, sortDesc, page })\n },\n sortArray (sortBy: string[]) {\n const sortDesc = sortBy.map(s => {\n const i = this.internalOptions.sortBy.findIndex((k: string) => k === s)\n return i > -1 ? this.internalOptions.sortDesc[i] : false\n })\n\n this.updateOptions({ sortBy, sortDesc })\n },\n updateOptions (options: any) {\n this.internalOptions = {\n ...this.internalOptions,\n ...options,\n page: this.serverItemsLength < 0\n ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount))\n : options.page || this.internalOptions.page,\n }\n },\n sortItems (items: any[]): any[] {\n let sortBy: string[] = []\n let sortDesc: boolean[] = []\n\n if (!this.disableSort) {\n sortBy = this.internalOptions.sortBy\n sortDesc = this.internalOptions.sortDesc\n }\n\n if (this.internalOptions.groupBy.length) {\n sortBy = [...this.internalOptions.groupBy, ...sortBy]\n sortDesc = [...this.internalOptions.groupDesc, ...sortDesc]\n }\n\n return this.customSort(items, sortBy, sortDesc, this.locale)\n },\n groupItems (items: any[]): ItemGroup[] {\n return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc)\n },\n paginateItems (items: any[]): any[] {\n // Make sure we don't try to display non-existant page if items suddenly change\n // TODO: Could possibly move this to pageStart/pageStop?\n if (this.serverItemsLength === -1 && items.length <= this.pageStart) {\n this.internalOptions.page = Math.max(1, Math.ceil(items.length / this.internalOptions.itemsPerPage)) || 1 // Prevent NaN\n }\n\n return items.slice(this.pageStart, this.pageStop)\n },\n },\n\n render (): VNode {\n return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps) as any\n },\n})\n","import './VDataFooter.sass'\n\n// Components\nimport VSelect from '../VSelect/VSelect'\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn'\n\n// Types\nimport Vue, { VNode, VNodeChildrenArrayContents, PropType } from 'vue'\nimport { DataPagination, DataOptions, DataItemsPerPageOption } from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\nimport { getSlot } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'v-data-footer',\n\n props: {\n options: {\n type: Object as PropType,\n required: true,\n },\n pagination: {\n type: Object as PropType,\n required: true,\n },\n itemsPerPageOptions: {\n type: Array,\n default: () => ([5, 10, 15, -1]),\n } as PropValidator,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n firstIcon: {\n type: String,\n default: '$first',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText',\n },\n itemsPerPageAllText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageAll',\n },\n showFirstLastPage: Boolean,\n showCurrentPage: Boolean,\n disablePagination: Boolean,\n disableItemsPerPage: Boolean,\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText',\n },\n },\n\n computed: {\n disableNextPageIcon (): boolean {\n return this.options.itemsPerPage <= 0 ||\n this.options.page * this.options.itemsPerPage >= this.pagination.itemsLength ||\n this.pagination.pageStop < 0\n },\n computedDataItemsPerPageOptions (): any[] {\n return this.itemsPerPageOptions.map(option => {\n if (typeof option === 'object') return option\n else return this.genDataItemsPerPageOption(option)\n })\n },\n },\n\n methods: {\n updateOptions (obj: object) {\n this.$emit('update:options', Object.assign({}, this.options, obj))\n },\n onFirstPage () {\n this.updateOptions({ page: 1 })\n },\n onPreviousPage () {\n this.updateOptions({ page: this.options.page - 1 })\n },\n onNextPage () {\n this.updateOptions({ page: this.options.page + 1 })\n },\n onLastPage () {\n this.updateOptions({ page: this.pagination.pageCount })\n },\n onChangeItemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage, page: 1 })\n },\n genDataItemsPerPageOption (option: number) {\n return {\n text: option === -1 ? this.$vuetify.lang.t(this.itemsPerPageAllText) : String(option),\n value: option,\n }\n },\n genItemsPerPageSelect () {\n let value = this.options.itemsPerPage\n const computedIPPO = this.computedDataItemsPerPageOptions\n\n if (computedIPPO.length <= 1) return null\n\n if (!computedIPPO.find(ippo => ippo.value === value)) value = computedIPPO[0]\n\n return this.$createElement('div', {\n staticClass: 'v-data-footer__select',\n }, [\n this.$vuetify.lang.t(this.itemsPerPageText),\n this.$createElement(VSelect, {\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.itemsPerPageText),\n },\n props: {\n disabled: this.disableItemsPerPage,\n items: computedIPPO,\n value,\n hideDetails: true,\n auto: true,\n minWidth: '75px',\n },\n on: {\n input: this.onChangeItemsPerPage,\n },\n }),\n ])\n },\n genPaginationInfo () {\n let children: VNodeChildrenArrayContents = ['–']\n const itemsLength: number = this.pagination.itemsLength\n let pageStart: number = this.pagination.pageStart\n let pageStop: number = this.pagination.pageStop\n\n if (this.pagination.itemsLength && this.pagination.itemsPerPage) {\n pageStart = this.pagination.pageStart + 1\n pageStop = itemsLength < this.pagination.pageStop || this.pagination.pageStop < 0\n ? itemsLength\n : this.pagination.pageStop\n\n children = this.$scopedSlots['page-text']\n ? [this.$scopedSlots['page-text']!({ pageStart, pageStop, itemsLength })]\n : [this.$vuetify.lang.t(this.pageText, pageStart, pageStop, itemsLength)]\n } else if (this.$scopedSlots['page-text']) {\n children = [this.$scopedSlots['page-text']!({ pageStart, pageStop, itemsLength })]\n }\n\n return this.$createElement('div', {\n class: 'v-data-footer__pagination',\n }, children)\n },\n genIcon (click: Function, disabled: boolean, label: string, icon: string): VNode {\n return this.$createElement(VBtn, {\n props: {\n disabled: disabled || this.disablePagination,\n icon: true,\n text: true,\n // dark: this.dark, // TODO: add mixin\n // light: this.light // TODO: add mixin\n },\n on: {\n click,\n },\n attrs: {\n 'aria-label': label, // TODO: Localization\n },\n }, [this.$createElement(VIcon, icon)])\n },\n genIcons () {\n const before: VNodeChildrenArrayContents = []\n const after: VNodeChildrenArrayContents = []\n\n before.push(this.genIcon(\n this.onPreviousPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.prevPage'),\n this.$vuetify.rtl ? this.nextIcon : this.prevIcon\n ))\n\n after.push(this.genIcon(\n this.onNextPage,\n this.disableNextPageIcon,\n this.$vuetify.lang.t('$vuetify.dataFooter.nextPage'),\n this.$vuetify.rtl ? this.prevIcon : this.nextIcon\n ))\n\n if (this.showFirstLastPage) {\n before.unshift(this.genIcon(\n this.onFirstPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.firstPage'),\n this.$vuetify.rtl ? this.lastIcon : this.firstIcon\n ))\n\n after.push(this.genIcon(\n this.onLastPage,\n this.options.page >= this.pagination.pageCount || this.options.itemsPerPage === -1,\n this.$vuetify.lang.t('$vuetify.dataFooter.lastPage'),\n this.$vuetify.rtl ? this.firstIcon : this.lastIcon\n ))\n }\n\n return [\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-before',\n }, before),\n this.showCurrentPage && this.$createElement('span', [this.options.page.toString()]),\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-after',\n }, after),\n ]\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-data-footer',\n }, [\n getSlot(this, 'prepend'),\n this.genItemsPerPageSelect(),\n this.genPaginationInfo(),\n this.genIcons(),\n ])\n },\n})\n","// Components\nimport { VData } from '../VData'\nimport VDataFooter from './VDataFooter'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, camelizeObjectKeys, keyCodes } from '../../util/helpers'\nimport { breaking, removed } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { DataItemProps, DataScopeProps } from 'vuetify/types'\n\n/* @vue/component */\nexport default mixins(\n Mobile,\n Themeable\n).extend({\n name: 'v-data-iterator',\n\n props: {\n ...VData.options.props, // TODO: filter out props not used\n itemKey: {\n type: String,\n default: 'id',\n },\n value: {\n type: Array,\n default: () => [],\n } as PropValidator,\n singleSelect: Boolean,\n expanded: {\n type: Array,\n default: () => [],\n } as PropValidator,\n mobileBreakpoint: {\n ...Mobile.options.props.mobileBreakpoint,\n default: 600,\n },\n singleExpand: Boolean,\n loading: [Boolean, String],\n noResultsText: {\n type: String,\n default: '$vuetify.dataIterator.noResultsText',\n },\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText',\n },\n hideDefaultFooter: Boolean,\n footerProps: Object,\n selectableKey: {\n type: String,\n default: 'isSelectable',\n },\n },\n\n data: () => ({\n selection: {} as Record,\n expansion: {} as Record,\n internalCurrentItems: [] as any[],\n shiftKeyDown: false,\n lastEntry: -1,\n }),\n\n computed: {\n everyItem (): boolean {\n return !!this.selectableItems.length && this.selectableItems.every((i: any) => this.isSelected(i))\n },\n someItems (): boolean {\n return this.selectableItems.some((i: any) => this.isSelected(i))\n },\n sanitizedFooterProps (): Record {\n return camelizeObjectKeys(this.footerProps)\n },\n selectableItems (): any[] {\n return this.internalCurrentItems.filter(item => this.isSelectable(item))\n },\n },\n\n watch: {\n value: {\n handler (value: any[]) {\n this.selection = value.reduce((selection, item) => {\n selection[getObjectValueByPath(item, this.itemKey)] = item\n return selection\n }, {})\n },\n immediate: true,\n },\n selection (value: Record, old: Record) {\n if (deepEqual(Object.keys(value), Object.keys(old))) return\n\n this.$emit('input', Object.values(value))\n },\n expanded: {\n handler (value: any[]) {\n this.expansion = value.reduce((expansion, item) => {\n expansion[getObjectValueByPath(item, this.itemKey)] = true\n return expansion\n }, {})\n },\n immediate: true,\n },\n expansion (value: Record, old: Record) {\n if (deepEqual(value, old)) return\n const keys = Object.keys(value).filter(k => value[k])\n const expanded = !keys.length ? [] : this.items.filter(i => keys.includes(String(getObjectValueByPath(i, this.itemKey))))\n this.$emit('update:expanded', expanded)\n },\n },\n\n created () {\n const breakingProps = [\n ['disable-initial-sort', 'sort-by'],\n ['filter', 'custom-filter'],\n ['pagination', 'options'],\n ['total-items', 'server-items-length'],\n ['hide-actions', 'hide-default-footer'],\n ['rows-per-page-items', 'footer-props.items-per-page-options'],\n ['rows-per-page-text', 'footer-props.items-per-page-text'],\n ['prev-icon', 'footer-props.prev-icon'],\n ['next-icon', 'footer-props.next-icon'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n\n const removedProps = [\n 'expand',\n 'content-class',\n 'content-props',\n 'content-tag',\n ]\n\n /* istanbul ignore next */\n removedProps.forEach(prop => {\n if (this.$attrs.hasOwnProperty(prop)) removed(prop)\n })\n },\n\n mounted () {\n window.addEventListener('keydown', this.onKeyDown)\n window.addEventListener('keyup', this.onKeyUp)\n },\n beforeDestroy () {\n window.removeEventListener('keydown', this.onKeyDown)\n window.removeEventListener('keyup', this.onKeyUp)\n },\n\n methods: {\n onKeyDown (e: KeyboardEvent): void {\n if (e.keyCode !== keyCodes.shift) return\n this.shiftKeyDown = true\n },\n onKeyUp (e: KeyboardEvent): void {\n if (e.keyCode !== keyCodes.shift) return\n this.shiftKeyDown = false\n },\n toggleSelectAll (value: boolean): void {\n const selection = Object.assign({}, this.selection)\n\n for (let i = 0; i < this.selectableItems.length; i++) {\n const item = this.selectableItems[i]\n\n if (!this.isSelectable(item)) continue\n\n const key = getObjectValueByPath(item, this.itemKey)\n if (value) selection[key] = item\n else delete selection[key]\n }\n\n this.selection = selection\n this.$emit('toggle-select-all', { items: this.internalCurrentItems, value })\n },\n isSelectable (item: any): boolean {\n return getObjectValueByPath(item, this.selectableKey) !== false\n },\n isSelected (item: any): boolean {\n return !!this.selection[getObjectValueByPath(item, this.itemKey)] || false\n },\n select (item: any, value = true, emit = true): void {\n if (!this.isSelectable(item)) return\n\n const selection = this.singleSelect ? {} : Object.assign({}, this.selection)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) selection[key] = item\n else delete selection[key]\n\n const index = this.selectableItems.findIndex(x => getObjectValueByPath(x, this.itemKey) === key)\n if (this.lastEntry === -1) this.lastEntry = index\n else if (this.shiftKeyDown && !this.singleSelect && emit) {\n const lastEntryKey = getObjectValueByPath(this.selectableItems[this.lastEntry], this.itemKey)\n const lastEntryKeySelected = Object.keys(this.selection).includes(String(lastEntryKey))\n this.multipleSelect(lastEntryKeySelected, emit, selection, index)\n }\n this.lastEntry = index\n\n if (this.singleSelect && emit) {\n const keys = Object.keys(this.selection)\n const old = keys.length && getObjectValueByPath(this.selection[keys[0]], this.itemKey)\n old && old !== key && this.$emit('item-selected', { item: this.selection[old], value: false })\n }\n this.selection = selection\n emit && this.$emit('item-selected', { item, value })\n },\n multipleSelect (value = true, emit = true, selection: any, index: number): void {\n const start = index < this.lastEntry ? index : this.lastEntry\n const end = index < this.lastEntry ? this.lastEntry : index\n for (let i = start; i <= end; i++) {\n const currentItem = this.selectableItems[i]\n const key = getObjectValueByPath(currentItem, this.itemKey)\n if (value) selection[key] = currentItem\n else delete selection[key]\n emit && this.$emit('item-selected', { currentItem, value })\n }\n },\n isExpanded (item: any): boolean {\n return this.expansion[getObjectValueByPath(item, this.itemKey)] || false\n },\n expand (item: any, value = true): void {\n const expansion = this.singleExpand ? {} : Object.assign({}, this.expansion)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) expansion[key] = true\n else delete expansion[key]\n\n this.expansion = expansion\n this.$emit('item-expanded', { item, value })\n },\n createItemProps (item: any, index: number): DataItemProps {\n return {\n item,\n index,\n select: (v: boolean) => this.select(item, v),\n isSelected: this.isSelected(item),\n expand: (v: boolean) => this.expand(item, v),\n isExpanded: this.isExpanded(item),\n isMobile: this.isMobile,\n }\n },\n genEmptyWrapper (content: VNodeChildren) {\n return this.$createElement('div', content)\n },\n genEmpty (originalItemsLength: number, filteredItemsLength: number) {\n if (originalItemsLength === 0 && this.loading) {\n const loading = this.$slots.loading || this.$vuetify.lang.t(this.loadingText)\n return this.genEmptyWrapper(loading)\n } else if (originalItemsLength === 0) {\n const noData = this.$slots['no-data'] || this.$vuetify.lang.t(this.noDataText)\n return this.genEmptyWrapper(noData)\n } else if (filteredItemsLength === 0) {\n const noResults = this.$slots['no-results'] || this.$vuetify.lang.t(this.noResultsText)\n return this.genEmptyWrapper(noResults)\n }\n\n return null\n },\n genItems (props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n if (this.$scopedSlots.default) {\n return this.$scopedSlots.default({\n ...props,\n isSelected: this.isSelected,\n select: this.select,\n isExpanded: this.isExpanded,\n isMobile: this.isMobile,\n expand: this.expand,\n })\n }\n\n if (this.$scopedSlots.item) {\n return props.items.map((item: any, index) => this.$scopedSlots.item!(this.createItemProps(\n item,\n index\n )))\n }\n\n return []\n },\n genFooter (props: DataScopeProps) {\n if (this.hideDefaultFooter) return null\n\n const data = {\n props: {\n ...this.sanitizedFooterProps,\n options: props.options,\n pagination: props.pagination,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n }\n\n const scopedSlots = getPrefixedScopedSlots('footer.', this.$scopedSlots)\n\n return this.$createElement(VDataFooter, {\n scopedSlots,\n ...data,\n })\n },\n genDefaultScopedSlot (props: any) {\n const outerProps = {\n ...props,\n someItems: this.someItems,\n everyItem: this.everyItem,\n toggleSelectAll: this.toggleSelectAll,\n }\n\n return this.$createElement('div', {\n staticClass: 'v-data-iterator',\n }, [\n getSlot(this, 'header', outerProps, true),\n this.genItems(props),\n this.genFooter(props),\n getSlot(this, 'footer', outerProps, true),\n ])\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: this.$props,\n on: {\n 'update:options': (v: any, old: any) => !deepEqual(v, old) && this.$emit('update:options', v),\n 'update:page': (v: any) => this.$emit('update:page', v),\n 'update:items-per-page': (v: any) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: any) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: any) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: any) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: any) => this.$emit('update:group-desc', v),\n pagination: (v: any, old: any) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot,\n },\n })\n },\n})\n","import { VDataTable } from '../'\nimport VIcon from '../../VIcon'\nimport VSimpleCheckbox from '../../VCheckbox/VSimpleCheckbox'\nimport ripple from '../../../directives/ripple'\n\nimport Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../../util/mixins'\nimport { DataOptions, DataTableHeader } from 'vuetify/types'\n\ntype VDataTableInstance = InstanceType\n\ninterface options extends Vue {\n dataTable: VDataTableInstance\n}\n\nexport default mixins().extend({\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => ([]),\n } as PropValidator,\n options: {\n type: Object,\n default: () => ({\n page: 1,\n itemsPerPage: 10,\n sortBy: [],\n sortDesc: [],\n groupBy: [],\n groupDesc: [],\n multiSort: false,\n mustSort: false,\n }),\n } as PropValidator,\n checkboxColor: String,\n sortIcon: {\n type: String,\n default: '$sort',\n },\n everyItem: Boolean,\n someItems: Boolean,\n showGroupBy: Boolean,\n singleSelect: Boolean,\n disableSort: Boolean,\n },\n\n methods: {\n genSelectAll () {\n const data = {\n props: {\n value: this.everyItem,\n indeterminate: !this.everyItem && this.someItems,\n color: this.checkboxColor ?? '',\n },\n on: {\n input: (v: boolean) => this.$emit('toggle-select-all', v),\n },\n }\n\n if (this.$scopedSlots['data-table-select']) {\n return this.$scopedSlots['data-table-select']!(data)\n }\n\n return this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n ...data,\n })\n },\n genSortIcon () {\n return this.$createElement(VIcon, {\n staticClass: 'v-data-table-header__icon',\n props: {\n size: 18,\n },\n }, [this.sortIcon])\n },\n },\n})\n","import { VNode, VNodeChildrenArrayContents } from 'vue'\nimport mixins from '../../util/mixins'\nimport VSelect from '../VSelect/VSelect'\nimport VChip from '../VChip'\nimport header from './mixins/header'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-mobile',\n\n props: {\n sortByText: {\n type: String,\n default: '$vuetify.dataTable.sortBy',\n },\n },\n\n methods: {\n genSortChip (props: any) {\n const children: VNodeChildrenArrayContents = [props.item.text]\n\n const sortIndex = this.options.sortBy.findIndex(k => k === props.item.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n children.push(this.$createElement('div', {\n staticClass: 'v-chip__close',\n class: {\n sortable: true,\n active: beingSorted,\n asc: beingSorted && !isDesc,\n desc: beingSorted && isDesc,\n },\n }, [this.genSortIcon()]))\n\n return this.$createElement(VChip, {\n staticClass: 'sortable',\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('sort', props.item.value)\n },\n },\n }, children)\n },\n genSortSelect (items: any[]) {\n return this.$createElement(VSelect, {\n props: {\n label: this.$vuetify.lang.t(this.sortByText),\n items,\n hideDetails: true,\n multiple: this.options.multiSort,\n value: this.options.multiSort ? this.options.sortBy : this.options.sortBy[0],\n menuProps: { closeOnContentClick: true },\n },\n on: {\n change: (v: string | string[]) => this.$emit('sort', v),\n },\n scopedSlots: {\n selection: props => this.genSortChip(props),\n },\n })\n },\n },\n\n render (h): VNode {\n const children: VNodeChildrenArrayContents = []\n\n const header = this.headers.find(h => h.value === 'data-table-select')\n if (header && !this.singleSelect) {\n children.push(this.$createElement('div', {\n class: [\n 'v-data-table-header-mobile__select',\n ...wrapInArray(header.class),\n ],\n attrs: {\n width: header.width,\n },\n }, [this.genSelectAll()]))\n }\n\n const sortHeaders = this.headers\n .filter(h => h.sortable !== false && h.value !== 'data-table-select')\n .map(h => ({\n text: h.text,\n value: h.value,\n }))\n\n if (!this.disableSort && sortHeaders.length) {\n children.push(this.genSortSelect(sortHeaders))\n }\n\n const th = children.length\n ? h('th', [h('div', { staticClass: 'v-data-table-header-mobile__wrapper' }, children)])\n : undefined\n\n const tr = h('tr', [th])\n\n return h('thead', {\n staticClass: 'v-data-table-header v-data-table-header-mobile',\n }, [tr])\n },\n})\n","// Helpers\nimport { VNode, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport header from './mixins/header'\nimport { wrapInArray, convertToUnit } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-desktop',\n\n methods: {\n genGroupByToggle (header: DataTableHeader) {\n return this.$createElement('span', {\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('group', header.value)\n },\n },\n }, ['group'])\n },\n getAria (beingSorted: boolean, isDesc: boolean) {\n const $t = (key: string) => this.$vuetify.lang.t(`$vuetify.dataTable.ariaLabel.${key}`)\n\n let ariaSort = 'none'\n let ariaLabel = [\n $t('sortNone'),\n $t('activateAscending'),\n ]\n\n if (!beingSorted) {\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n }\n\n if (isDesc) {\n ariaSort = 'descending'\n ariaLabel = [\n $t('sortDescending'),\n $t(this.options.mustSort ? 'activateAscending' : 'activateNone'),\n ]\n } else {\n ariaSort = 'ascending'\n ariaLabel = [\n $t('sortAscending'),\n $t('activateDescending'),\n ]\n }\n\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n },\n genHeader (header: DataTableHeader) {\n const data: Required> = {\n attrs: {\n role: 'columnheader',\n scope: 'col',\n 'aria-label': header.text || '',\n },\n style: {\n width: convertToUnit(header.width),\n minWidth: convertToUnit(header.width),\n },\n class: [\n `text-${header.align || 'start'}`,\n ...wrapInArray(header.class),\n header.divider && 'v-data-table__divider',\n ],\n on: {},\n }\n const children = []\n\n if (header.value === 'data-table-select' && !this.singleSelect) {\n return this.$createElement('th', data, [this.genSelectAll()])\n }\n\n children.push(\n this.$scopedSlots.hasOwnProperty(header.value)\n ? this.$scopedSlots[header.value]!({ header })\n : this.$createElement('span', [header.text])\n )\n\n if (!this.disableSort && (header.sortable || !header.hasOwnProperty('sortable'))) {\n data.on.click = () => this.$emit('sort', header.value)\n\n const sortIndex = this.options.sortBy.findIndex(k => k === header.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n data.class.push('sortable')\n\n const { ariaLabel, ariaSort } = this.getAria(beingSorted, isDesc)\n\n data.attrs['aria-label'] += `${header.text ? ': ' : ''}${ariaLabel}`\n data.attrs['aria-sort'] = ariaSort\n\n if (beingSorted) {\n data.class.push('active')\n data.class.push(isDesc ? 'desc' : 'asc')\n }\n\n if (header.align === 'end') children.unshift(this.genSortIcon())\n else children.push(this.genSortIcon())\n\n if (this.options.multiSort && beingSorted) {\n children.push(this.$createElement('span', { class: 'v-data-table-header__sort-badge' }, [String(sortIndex + 1)]))\n }\n }\n\n if (this.showGroupBy && header.groupable !== false) children.push(this.genGroupByToggle(header))\n\n return this.$createElement('th', data, children)\n },\n },\n\n render (): VNode {\n return this.$createElement('thead', {\n staticClass: 'v-data-table-header',\n }, [\n this.$createElement('tr', this.headers.map(header => this.genHeader(header))),\n ])\n },\n})\n","// Styles\nimport './VDataTableHeader.sass'\n\n// Components\nimport VDataTableHeaderMobile from './VDataTableHeaderMobile'\nimport VDataTableHeaderDesktop from './VDataTableHeaderDesktop'\n\n// Mixins\nimport header from './mixins/header'\n\n// Utilities\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport mergeData from '../../util/mergeData'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'v-data-table-header',\n\n functional: true,\n\n props: {\n ...header.options.props,\n mobile: Boolean,\n },\n\n render (h, { props, data, slots }) {\n dedupeModelListeners(data)\n const children = rebuildSlots(slots(), h)\n\n data = mergeData(data, { props })\n\n if (props.mobile) {\n return h(VDataTableHeaderMobile, data, children)\n } else {\n return h(VDataTableHeaderDesktop, data, children)\n }\n },\n})\n","// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DataTableHeader } from 'vuetify/types'\n\n// Utils\nimport { getObjectValueByPath, wrapInArray } from '../../util/helpers'\n\nfunction needsTd (slot: VNode[] | undefined) {\n return slot!.length !== 1 ||\n !['td', 'th'].includes(slot![0]?.tag!)\n}\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n index: Number,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns = props.headers.map((header: DataTableHeader) => {\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots.hasOwnProperty(slotName) && data.scopedSlots[slotName]\n const regularSlot = computedSlots.hasOwnProperty(slotName) && computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(...wrapInArray(scopedSlot({\n item: props.item,\n isMobile: false,\n header,\n index: props.index,\n value,\n })))\n } else if (regularSlot) {\n children.push(...wrapInArray(regularSlot))\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const textAlign = `text-${header.align || 'start'}`\n\n return needsTd(children)\n ? h('td', {\n class: [\n textAlign,\n header.cellClass,\n {\n 'v-data-table__divider': header.divider,\n },\n ],\n }, children)\n : children\n })\n\n return h('tr', data, columns)\n },\n})\n","import Vue, { VNode } from 'vue'\n\nexport default Vue.extend({\n name: 'row-group',\n\n functional: true,\n\n props: {\n value: {\n type: Boolean,\n default: true,\n },\n headerClass: {\n type: String,\n default: 'v-row-group__header',\n },\n contentClass: String,\n summaryClass: {\n type: String,\n default: 'v-row-group__summary',\n },\n },\n\n render (h, { slots, props }): VNode {\n const computedSlots = slots()\n const children = []\n\n if (computedSlots['column.header']) {\n children.push(h('tr', {\n staticClass: props.headerClass,\n }, computedSlots['column.header']))\n } else if (computedSlots['row.header']) {\n children.push(...computedSlots['row.header'])\n }\n\n if (computedSlots['row.content'] && props.value) children.push(...computedSlots['row.content'])\n\n if (computedSlots['column.summary']) {\n children.push(h('tr', {\n staticClass: props.summaryClass,\n }, computedSlots['column.summary']))\n } else if (computedSlots['row.summary']) {\n children.push(...computedSlots['row.summary'])\n }\n\n return children as any\n },\n})\n","import './VSimpleTable.sass'\n\nimport { convertToUnit } from '../../util/helpers'\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\nexport default mixins(Themeable).extend({\n name: 'v-simple-table',\n\n props: {\n dense: Boolean,\n fixedHeader: Boolean,\n height: [Number, String],\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-data-table--dense': this.dense,\n 'v-data-table--fixed-height': !!this.height && !this.fixedHeader,\n 'v-data-table--fixed-header': this.fixedHeader,\n 'v-data-table--has-top': !!this.$slots.top,\n 'v-data-table--has-bottom': !!this.$slots.bottom,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genWrapper () {\n return this.$slots.wrapper || this.$createElement('div', {\n staticClass: 'v-data-table__wrapper',\n style: {\n height: convertToUnit(this.height),\n },\n }, [\n this.$createElement('table', this.$slots.default),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-data-table',\n class: this.classes,\n }, [\n this.$slots.top,\n this.genWrapper(),\n this.$slots.bottom,\n ])\n },\n})\n","import Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n hideDefaultHeader: Boolean,\n index: Number,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n const classes = {\n 'v-data-table__mobile-row': true,\n }\n\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots.hasOwnProperty(slotName) && data.scopedSlots[slotName]\n const regularSlot = computedSlots.hasOwnProperty(slotName) && computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({\n item: props.item,\n isMobile: true,\n header,\n index: props.index,\n value,\n }))\n } else if (regularSlot) {\n children.push(regularSlot)\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const mobileRowChildren = [\n h('div', {\n staticClass: 'v-data-table__mobile-row__cell',\n }, children),\n ]\n\n if (header.value !== 'dataTableSelect' && !props.hideDefaultHeader) {\n mobileRowChildren.unshift(\n h('div', {\n staticClass: 'v-data-table__mobile-row__header',\n }, [header.text])\n )\n }\n\n return h('td', { class: classes }, mobileRowChildren)\n })\n\n return h('tr', { ...data, staticClass: 'v-data-table__mobile-table-row' }, columns)\n },\n})\n","import './VDataTable.sass'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DataTableHeader,\n DataTableFilterFunction,\n DataScopeProps,\n DataOptions,\n DataPagination,\n DataTableCompareFunction,\n DataItemsPerPageOption,\n ItemGroup,\n RowClassFunction,\n DataTableItemProps,\n} from 'vuetify/types'\n\n// Components\nimport { VData } from '../VData'\nimport { VDataFooter, VDataIterator } from '../VDataIterator'\nimport VBtn from '../VBtn'\nimport VDataTableHeader from './VDataTableHeader'\n// import VVirtualTable from './VVirtualTable'\nimport VIcon from '../VIcon'\nimport Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'\nimport { breaking } from '../../util/console'\nimport { mergeClasses } from '../../util/mergeData'\n\nfunction filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {\n return (header: DataTableHeader) => {\n const value = getObjectValueByPath(item, header.value)\n return header.filter ? header.filter(value, search, item) : filter(value, search, item)\n }\n}\n\nfunction searchTableItems (\n items: any[],\n search: string | null,\n headersWithCustomFilters: DataTableHeader[],\n headersWithoutCustomFilters: DataTableHeader[],\n customFilter: DataTableFilterFunction\n) {\n search = typeof search === 'string' ? search.trim() : null\n\n return items.filter(item => {\n // Headers with custom filters are evaluated whether or not a search term has been provided.\n // We need to match every filter to be included in the results.\n const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))\n\n // Headers without custom filters are only filtered by the `search` property if it is defined.\n // We only need a single column to match the search term to be included in the results.\n const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))\n\n return matchesColumnFilters && matchesSearchTerm\n })\n}\n\n/* @vue/component */\nexport default mixins(\n VDataIterator,\n Loadable,\n).extend({\n name: 'v-data-table',\n\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => [],\n } as PropValidator,\n showSelect: Boolean,\n checkboxColor: String,\n showExpand: Boolean,\n showGroupBy: Boolean,\n // TODO: Fix\n // virtualRows: Boolean,\n height: [Number, String],\n hideDefaultHeader: Boolean,\n caption: String,\n dense: Boolean,\n headerProps: Object,\n calculateWidths: Boolean,\n fixedHeader: Boolean,\n headersLength: Number,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n customFilter: {\n type: Function,\n default: defaultFilter,\n } as PropValidator,\n itemClass: {\n type: [String, Function],\n default: () => '',\n } as PropValidator,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n },\n\n data () {\n return {\n internalGroupBy: [] as string[],\n openCache: {} as { [key: string]: boolean },\n widths: [] as number[],\n }\n },\n\n computed: {\n computedHeaders (): DataTableHeader[] {\n if (!this.headers) return []\n const headers = this.headers.filter(h => h.value === undefined || !this.internalGroupBy.find(v => v === h.value))\n const defaultHeader = { text: '', sortable: false, width: '1px' }\n\n if (this.showSelect) {\n const index = headers.findIndex(h => h.value === 'data-table-select')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-select' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n if (this.showExpand) {\n const index = headers.findIndex(h => h.value === 'data-table-expand')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-expand' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n return headers\n },\n colspanAttrs (): object | undefined {\n return this.isMobile ? undefined : {\n colspan: this.headersLength || this.computedHeaders.length,\n }\n },\n columnSorters (): Record {\n return this.computedHeaders.reduce>((acc, header) => {\n if (header.sort) acc[header.value] = header.sort\n return acc\n }, {})\n },\n headersWithCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n headersWithoutCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n sanitizedHeaderProps (): Record {\n return camelizeObjectKeys(this.headerProps)\n },\n computedItemsPerPage (): number {\n const itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage\n const itemsPerPageOptions: DataItemsPerPageOption[] | undefined = this.sanitizedFooterProps.itemsPerPageOptions\n\n if (\n itemsPerPageOptions &&\n !itemsPerPageOptions.find(item => typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage)\n ) {\n const firstOption = itemsPerPageOptions[0]\n return typeof firstOption === 'object' ? firstOption.value : firstOption\n }\n\n return itemsPerPage\n },\n groupByText (): string {\n return this.headers?.find(header => header.value === this.internalGroupBy?.[0])?.text ?? ''\n },\n },\n\n created () {\n const breakingProps = [\n ['sort-icon', 'header-props.sort-icon'],\n ['hide-headers', 'hide-default-header'],\n ['select-all', 'show-select'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n mounted () {\n // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {\n // const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)\n // if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })\n // }\n\n if (this.calculateWidths) {\n window.addEventListener('resize', this.calcWidths)\n this.calcWidths()\n }\n },\n\n beforeDestroy () {\n if (this.calculateWidths) {\n window.removeEventListener('resize', this.calcWidths)\n }\n },\n\n methods: {\n calcWidths () {\n this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)\n },\n customFilterWithColumns (items: any[], search: string) {\n return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)\n },\n customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {\n return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)\n },\n createItemProps (item: any, index: number): DataTableItemProps {\n const props = VDataIterator.options.methods.createItemProps.call(this, item, index)\n\n return Object.assign(props, { headers: this.computedHeaders })\n },\n genCaption (props: DataScopeProps) {\n if (this.caption) return [this.$createElement('caption', [this.caption])]\n\n return getSlot(this, 'caption', props, true)\n },\n genColgroup (props: DataScopeProps) {\n return this.$createElement('colgroup', this.computedHeaders.map(header => {\n return this.$createElement('col', {\n class: {\n divider: header.divider,\n },\n })\n }))\n },\n genLoading () {\n const th = this.$createElement('th', {\n staticClass: 'column',\n attrs: this.colspanAttrs,\n }, [this.genProgress()])\n\n const tr = this.$createElement('tr', {\n staticClass: 'v-data-table__progress',\n }, [th])\n\n return this.$createElement('thead', [tr])\n },\n genHeaders (props: DataScopeProps) {\n const data = {\n props: {\n ...this.sanitizedHeaderProps,\n headers: this.computedHeaders,\n options: props.options,\n mobile: this.isMobile,\n showGroupBy: this.showGroupBy,\n checkboxColor: this.checkboxColor,\n someItems: this.someItems,\n everyItem: this.everyItem,\n singleSelect: this.singleSelect,\n disableSort: this.disableSort,\n },\n on: {\n sort: props.sort,\n group: props.group,\n 'toggle-select-all': this.toggleSelectAll,\n },\n }\n\n // TODO: rename to 'head'? (thead, tbody, tfoot)\n const children: VNodeChildrenArrayContents = [getSlot(this, 'header', {\n ...data,\n isMobile: this.isMobile,\n })]\n\n if (!this.hideDefaultHeader) {\n const scopedSlots = getPrefixedScopedSlots('header.', this.$scopedSlots)\n children.push(this.$createElement(VDataTableHeader, {\n ...data,\n scopedSlots,\n }))\n }\n\n if (this.loading) children.push(this.genLoading())\n\n return children\n },\n genEmptyWrapper (content: VNodeChildrenArrayContents) {\n return this.$createElement('tr', {\n staticClass: 'v-data-table__empty-wrapper',\n }, [\n this.$createElement('td', {\n attrs: this.colspanAttrs,\n }, content),\n ])\n },\n genItems (items: any[], props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n return props.groupedItems\n ? this.genGroupedRows(props.groupedItems, props)\n : this.genRows(items, props)\n },\n genGroupedRows (groupedItems: ItemGroup[], props: DataScopeProps) {\n return groupedItems.map(group => {\n if (!this.openCache.hasOwnProperty(group.name)) this.$set(this.openCache, group.name, true)\n\n if (this.$scopedSlots.group) {\n return this.$scopedSlots.group({\n group: group.name,\n options: props.options,\n isMobile: this.isMobile,\n items: group.items,\n headers: this.computedHeaders,\n })\n } else {\n return this.genDefaultGroupedRow(group.name, group.items, props)\n }\n })\n },\n genDefaultGroupedRow (group: string, items: any[], props: DataScopeProps) {\n const isOpen = !!this.openCache[group]\n const children: VNodeChildren = [\n this.$createElement('template', { slot: 'row.content' }, this.genRows(items, props)),\n ]\n const toggleFn = () => this.$set(this.openCache, group, !this.openCache[group])\n const removeFn = () => props.updateOptions({ groupBy: [], groupDesc: [] })\n\n if (this.$scopedSlots['group.header']) {\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [\n this.$scopedSlots['group.header']!({\n group,\n groupBy: props.options.groupBy,\n isMobile: this.isMobile,\n items,\n headers: this.computedHeaders,\n isOpen,\n toggle: toggleFn,\n remove: removeFn,\n }),\n ]))\n } else {\n const toggle = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: toggleFn,\n },\n }, [this.$createElement(VIcon, [isOpen ? '$minus' : '$plus'])])\n\n const remove = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: removeFn,\n },\n }, [this.$createElement(VIcon, ['$close'])])\n\n const column = this.$createElement('td', {\n staticClass: 'text-start',\n attrs: this.colspanAttrs,\n }, [toggle, `${this.groupByText}: ${group}`, remove])\n\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [column]))\n }\n\n if (this.$scopedSlots['group.summary']) {\n children.push(this.$createElement('template', { slot: 'column.summary' }, [\n this.$scopedSlots['group.summary']!({\n group,\n groupBy: props.options.groupBy,\n isMobile: this.isMobile,\n items,\n headers: this.computedHeaders,\n isOpen,\n toggle: toggleFn,\n }),\n ]))\n }\n\n return this.$createElement(RowGroup, {\n key: group,\n props: {\n value: isOpen,\n },\n }, children)\n },\n genRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots.item ? this.genScopedRows(items, props) : this.genDefaultRows(items, props)\n },\n genScopedRows (items: any[], props: DataScopeProps) {\n const rows = []\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n rows.push(this.$scopedSlots.item!({\n ...this.createItemProps(item, i),\n isMobile: this.isMobile,\n }))\n\n if (this.isExpanded(item)) {\n rows.push(this.$scopedSlots['expanded-item']!({\n headers: this.computedHeaders,\n isMobile: this.isMobile,\n index: i,\n item,\n }))\n }\n }\n\n return rows\n },\n genDefaultRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots['expanded-item']\n ? items.map((item, index) => this.genDefaultExpandedRow(item, index))\n : items.map((item, index) => this.genDefaultSimpleRow(item, index))\n },\n genDefaultExpandedRow (item: any, index: number): VNode {\n const isExpanded = this.isExpanded(item)\n const classes = {\n 'v-data-table__expanded v-data-table__expanded__row': isExpanded,\n }\n const headerRow = this.genDefaultSimpleRow(item, index, classes)\n const expandedRow = this.$createElement('tr', {\n staticClass: 'v-data-table__expanded v-data-table__expanded__content',\n }, [this.$scopedSlots['expanded-item']!({\n headers: this.computedHeaders,\n isMobile: this.isMobile,\n item,\n })])\n\n return this.$createElement(RowGroup, {\n props: {\n value: isExpanded,\n },\n }, [\n this.$createElement('template', { slot: 'row.header' }, [headerRow]),\n this.$createElement('template', { slot: 'row.content' }, [expandedRow]),\n ])\n },\n genDefaultSimpleRow (item: any, index: number, classes: Record = {}): VNode {\n const scopedSlots = getPrefixedScopedSlots('item.', this.$scopedSlots)\n\n const data = this.createItemProps(item, index)\n\n if (this.showSelect) {\n const slot = scopedSlots['data-table-select']\n scopedSlots['data-table-select'] = slot ? () => slot({\n ...data,\n isMobile: this.isMobile,\n }) : () => this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n props: {\n value: data.isSelected,\n disabled: !this.isSelectable(item),\n color: this.checkboxColor ?? '',\n },\n on: {\n input: (val: boolean) => data.select(val),\n },\n })\n }\n\n if (this.showExpand) {\n const slot = scopedSlots['data-table-expand']\n scopedSlots['data-table-expand'] = slot ? () => slot(data) : () => this.$createElement(VIcon, {\n staticClass: 'v-data-table__expand-icon',\n class: {\n 'v-data-table__expand-icon--active': data.isExpanded,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n data.expand(!data.isExpanded)\n },\n },\n }, [this.expandIcon])\n }\n\n return this.$createElement(this.isMobile ? MobileRow : Row, {\n key: getObjectValueByPath(item, this.itemKey),\n class: mergeClasses(\n { ...classes, 'v-data-table__selected': data.isSelected },\n getPropertyFromItem(item, this.itemClass)\n ),\n props: {\n headers: this.computedHeaders,\n hideDefaultHeader: this.hideDefaultHeader,\n index,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: {\n // TODO: for click, the first argument should be the event, and the second argument should be data,\n // but this is a breaking change so it's for v3\n click: () => this.$emit('click:row', item, data),\n contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),\n dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),\n },\n })\n },\n genBody (props: DataScopeProps): VNode | string | VNodeChildren {\n const data = {\n ...props,\n expand: this.expand,\n headers: this.computedHeaders,\n isExpanded: this.isExpanded,\n isMobile: this.isMobile,\n isSelected: this.isSelected,\n select: this.select,\n }\n\n if (this.$scopedSlots.body) {\n return this.$scopedSlots.body!(data)\n }\n\n return this.$createElement('tbody', [\n getSlot(this, 'body.prepend', data, true),\n this.genItems(props.items, props),\n getSlot(this, 'body.append', data, true),\n ])\n },\n genFoot (props: DataScopeProps): VNode[] | undefined {\n return this.$scopedSlots.foot?.(props)\n },\n genFooters (props: DataScopeProps) {\n const data = {\n props: {\n options: props.options,\n pagination: props.pagination,\n itemsPerPageText: '$vuetify.dataTable.itemsPerPageText',\n ...this.sanitizedFooterProps,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n widths: this.widths,\n headers: this.computedHeaders,\n }\n\n const children: VNodeChildren = [\n getSlot(this, 'footer', data, true),\n ]\n\n if (!this.hideDefaultFooter) {\n children.push(this.$createElement(VDataFooter, {\n ...data,\n scopedSlots: getPrefixedScopedSlots('footer.', this.$scopedSlots),\n }))\n }\n\n return children\n },\n genDefaultScopedSlot (props: DataScopeProps): VNode {\n const simpleProps = {\n height: this.height,\n fixedHeader: this.fixedHeader,\n dense: this.dense,\n }\n\n // if (this.virtualRows) {\n // return this.$createElement(VVirtualTable, {\n // props: Object.assign(simpleProps, {\n // items: props.items,\n // height: this.height,\n // rowHeight: this.dense ? 24 : 48,\n // headerHeight: this.dense ? 32 : 48,\n // // TODO: expose rest of props from virtual table?\n // }),\n // scopedSlots: {\n // items: ({ items }) => this.genItems(items, props) as any,\n // },\n // }, [\n // this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),\n // this.proxySlot('bottom', this.genFooters(props)),\n // ])\n // }\n\n return this.$createElement(VSimpleTable, {\n props: simpleProps,\n class: {\n 'v-data-table--mobile': this.isMobile,\n },\n }, [\n this.proxySlot('top', getSlot(this, 'top', {\n ...props,\n isMobile: this.isMobile,\n }, true)),\n this.genCaption(props),\n this.genColgroup(props),\n this.genHeaders(props),\n this.genBody(props),\n this.genFoot(props),\n this.proxySlot('bottom', this.genFooters(props)),\n ])\n },\n proxySlot (slot: string, content: VNodeChildren) {\n return this.$createElement('template', { slot }, content)\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: {\n ...this.$props,\n customFilter: this.customFilterWithColumns,\n customSort: this.customSortWithHeaders,\n itemsPerPage: this.computedItemsPerPage,\n },\n on: {\n 'update:options': (v: DataOptions, old: DataOptions) => {\n this.internalGroupBy = v.groupBy || []\n !deepEqual(v, old) && this.$emit('update:options', v)\n },\n 'update:page': (v: number) => this.$emit('update:page', v),\n 'update:items-per-page': (v: number) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: string | string[]) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: boolean | boolean[]) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: string | string[]) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: boolean | boolean[]) => this.$emit('update:group-desc', v),\n pagination: (v: DataPagination, old: DataPagination) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot,\n },\n })\n },\n})\n","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","import VIcon from './VIcon'\n\nexport { VIcon }\nexport default VIcon\n","import './VSimpleCheckbox.sass'\n\nimport Ripple from '../../directives/ripple'\n\nimport Vue, { VNode, VNodeDirective } from 'vue'\nimport { VIcon } from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'v-simple-checkbox',\n\n functional: true,\n\n directives: {\n Ripple,\n },\n\n props: {\n ...Colorable.options.props,\n ...Themeable.options.props,\n disabled: Boolean,\n ripple: {\n type: Boolean,\n default: true,\n },\n value: Boolean,\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n },\n\n render (h, { props, data, listeners }): VNode {\n const children = []\n let icon = props.offIcon\n if (props.indeterminate) icon = props.indeterminateIcon\n else if (props.value) icon = props.onIcon\n\n children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n props: {\n disabled: props.disabled,\n dark: props.dark,\n light: props.light,\n },\n }), icon))\n\n if (props.ripple && !props.disabled) {\n const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n staticClass: 'v-input--selection-controls__ripple',\n directives: [{\n def: Ripple,\n name: 'ripple',\n value: { center: true },\n }] as VNodeDirective[],\n }))\n\n children.push(ripple)\n }\n\n return h('div',\n mergeData(data, {\n class: {\n 'v-simple-checkbox': true,\n 'v-simple-checkbox--disabled': props.disabled,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n\n if (data.on && data.on.input && !props.disabled) {\n wrapInArray(data.on.input).forEach(f => f(!props.value))\n }\n },\n },\n }), [\n h('div', { staticClass: 'v-input--selection-controls__input' }, children),\n ])\n },\n})\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","// Styles\nimport './VImg.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VResponsive from '../VResponsive'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport mergeData from '../../util/mergeData'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src: string\n srcset?: string\n lazySrc: string\n aspect: number\n}\n\nconst hasIntersect = typeof window !== 'undefined' && 'IntersectionObserver' in window\n\n/* @vue/component */\nexport default mixins(\n VResponsive,\n Themeable,\n).extend({\n name: 'v-img',\n\n directives: { intersect },\n\n props: {\n alt: String,\n contain: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n } as PropValidator,\n position: {\n type: String,\n default: 'center center',\n },\n sizes: String,\n src: {\n type: [String, Object],\n default: '',\n } as PropValidator,\n srcset: String,\n transition: {\n type: [Boolean, String],\n default: 'fade-transition',\n },\n },\n\n data () {\n return {\n currentSrc: '', // Set from srcset\n image: null as HTMLImageElement | null,\n isLoading: true,\n calculatedAspectRatio: undefined as number | undefined,\n naturalWidth: undefined as number | undefined,\n hasError: false,\n }\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio)\n },\n normalisedSrc (): srcObject {\n return this.src && typeof this.src === 'object'\n ? {\n src: this.src.src,\n srcset: this.srcset || this.src.srcset,\n lazySrc: this.lazySrc || this.src.lazySrc,\n aspect: Number(this.aspectRatio || this.src.aspect),\n } : {\n src: this.src,\n srcset: this.srcset,\n lazySrc: this.lazySrc,\n aspect: Number(this.aspectRatio || 0),\n }\n },\n __cachedImage (): VNode | [] {\n if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc || this.gradient)) return []\n\n const backgroundImage: string[] = []\n const src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc\n\n if (this.gradient) backgroundImage.push(`linear-gradient(${this.gradient})`)\n if (src) backgroundImage.push(`url(\"${src}\")`)\n\n const image = this.$createElement('div', {\n staticClass: 'v-image__image',\n class: {\n 'v-image__image--preload': this.isLoading,\n 'v-image__image--contain': this.contain,\n 'v-image__image--cover': !this.contain,\n },\n style: {\n backgroundImage: backgroundImage.join(', '),\n backgroundPosition: this.position,\n },\n key: +this.isLoading,\n })\n\n /* istanbul ignore if */\n if (!this.transition) return image\n\n return this.$createElement('transition', {\n attrs: {\n name: this.transition,\n mode: 'in-out',\n },\n }, [image])\n },\n },\n\n watch: {\n src () {\n // Force re-init when src changes\n if (!this.isLoading) this.init(undefined, undefined, true)\n else this.loadImage()\n },\n '$vuetify.breakpoint.width': 'getSrc',\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init (\n entries?: IntersectionObserverEntry[],\n observer?: IntersectionObserver,\n isIntersecting?: boolean\n ) {\n // If the current browser supports the intersection\n // observer api, the image is not observable, and\n // the eager prop isn't being used, do not load\n if (\n hasIntersect &&\n !isIntersecting &&\n !this.eager\n ) return\n\n if (this.normalisedSrc.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = this.normalisedSrc.lazySrc\n this.pollForSize(lazyImg, null)\n }\n /* istanbul ignore else */\n if (this.normalisedSrc.src) this.loadImage()\n },\n onLoad () {\n this.getSrc()\n this.isLoading = false\n this.$emit('load', this.src)\n\n if (\n this.image &&\n (this.normalisedSrc.src.endsWith('.svg') || this.normalisedSrc.src.startsWith('data:image/svg+xml'))\n ) {\n if (this.image.naturalHeight && this.image.naturalWidth) {\n this.naturalWidth = this.image.naturalWidth\n this.calculatedAspectRatio = this.image.naturalWidth / this.image.naturalHeight\n } else {\n this.calculatedAspectRatio = 1\n }\n }\n },\n onError () {\n this.hasError = true\n this.$emit('error', this.src)\n },\n getSrc () {\n /* istanbul ignore else */\n if (this.image) this.currentSrc = this.image.currentSrc || this.image.src\n },\n loadImage () {\n const image = new Image()\n this.image = image\n\n image.onload = () => {\n /* istanbul ignore if */\n if (image.decode) {\n image.decode().catch((err: DOMException) => {\n consoleWarn(\n `Failed to decode image, trying to render anyway\\n\\n` +\n `src: ${this.normalisedSrc.src}` +\n (err.message ? `\\nOriginal error: ${err.message}` : ''),\n this\n )\n }).then(this.onLoad)\n } else {\n this.onLoad()\n }\n }\n image.onerror = this.onError\n\n this.hasError = false\n this.sizes && (image.sizes = this.sizes)\n this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n image.src = this.normalisedSrc.src\n this.$emit('loadstart', this.normalisedSrc.src)\n\n this.aspectRatio || this.pollForSize(image)\n this.getSrc()\n },\n pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight, naturalWidth } = img\n\n if (naturalHeight || naturalWidth) {\n this.naturalWidth = naturalWidth\n this.calculatedAspectRatio = naturalWidth / naturalHeight\n } else if (!img.complete && this.isLoading && !this.hasError && timeout != null) {\n setTimeout(poll, timeout)\n }\n }\n\n poll()\n },\n genContent () {\n const content: VNode = VResponsive.options.methods.genContent.call(this)\n if (this.naturalWidth) {\n this._b(content.data!, 'div', {\n style: { width: `${this.naturalWidth}px` },\n })\n }\n\n return content\n },\n __genPlaceholder (): VNode | void {\n const slot = getSlot(this, 'placeholder')\n if (slot) {\n const placeholder = this.isLoading\n ? [this.$createElement('div', {\n staticClass: 'v-image__placeholder',\n }, slot)]\n : []\n\n if (!this.transition) return placeholder[0]\n\n return this.$createElement('transition', {\n props: {\n appear: true,\n name: this.transition,\n },\n }, placeholder)\n }\n },\n },\n\n render (h): VNode {\n const node = VResponsive.options.render.call(this, h)\n\n const data = mergeData(node.data!, {\n staticClass: 'v-image',\n attrs: {\n 'aria-label': this.alt,\n role: this.alt ? 'img' : undefined,\n },\n class: this.themeClasses,\n // Only load intersect directive if it\n // will work in the current browser.\n directives: hasIntersect\n ? [{\n name: 'intersect',\n modifiers: { once: true },\n value: {\n handler: this.init,\n options: this.options,\n },\n }]\n : undefined,\n })\n\n node.children = [\n this.__cachedSizer,\n this.__cachedImage,\n this.__genPlaceholder(),\n this.genContent(),\n ] as VNode[]\n\n return h(node.tag, data, node.children)\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","// Styles\nimport './VCard.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\nimport Routable from '../../mixins/routable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Loadable,\n Routable,\n VSheet\n).extend({\n name: 'v-card',\n\n props: {\n flat: Boolean,\n hover: Boolean,\n img: String,\n link: Boolean,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n raised: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-card': true,\n ...Routable.options.computed.classes.call(this),\n 'v-card--flat': this.flat,\n 'v-card--hover': this.hover,\n 'v-card--link': this.isClickable,\n 'v-card--loading': this.loading,\n 'v-card--disabled': this.disabled,\n 'v-card--raised': this.raised,\n ...VSheet.options.computed.classes.call(this),\n }\n },\n styles (): object {\n const style: Dictionary = {\n ...VSheet.options.computed.styles.call(this),\n }\n\n if (this.img) {\n style.background = `url(\"${this.img}\") center center / cover no-repeat`\n }\n\n return style\n },\n },\n\n methods: {\n genProgress () {\n const render = Loadable.options.methods.genProgress.call(this)\n\n if (!render) return null\n\n return this.$createElement('div', {\n staticClass: 'v-card__progress',\n key: 'progress',\n }, [render])\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.style = this.styles\n\n if (this.isClickable) {\n data.attrs = data.attrs || {}\n data.attrs.tabindex = 0\n }\n\n return h(tag, this.setBackgroundColor(this.color, data), [\n this.genProgress(),\n this.$slots.default,\n ])\n },\n})\n","import VDivider from './VDivider'\n\nexport { VDivider }\nexport default VDivider\n","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | null {\n return this.lazySearch\n },\n set (val: any) { // TODO: this should be `string | null` but it breaks lots of other types\n // emit update event only when the new\n // search value is different from previous\n if (this.lazySearch !== val) {\n this.lazySearch = val\n this.$emit('update:search-input', val)\n }\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.blur()\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = null\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n if (!this.autoSelectFirst) {\n const preSelectedItem = oldVal[this.$refs.menu.listIndex]\n\n if (preSelectedItem) {\n this.setMenuIndex(val.findIndex(i => i === preSelectedItem))\n } else {\n this.setMenuIndex(-1)\n }\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n\n if (this.autoSelectFirst && val.length) {\n this.setMenuIndex(0)\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : null)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = null\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n if (!this.multiple && value === '') this.deleteCurrentItem()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (\n !this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (\n !this.multiple &&\n !this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )\n ) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData?.setData('text/plain', currentItemText)\n event.clipboardData?.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","// Styles\nimport './VDivider.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\nexport default Themeable.extend({\n name: 'v-divider',\n\n props: {\n inset: Boolean,\n vertical: Boolean,\n },\n\n render (h): VNode {\n // WAI-ARIA attributes\n let orientation\n if (!this.$attrs.role || this.$attrs.role === 'separator') {\n orientation = this.vertical ? 'vertical' : 'horizontal'\n }\n return h('hr', {\n class: {\n 'v-divider': true,\n 'v-divider--inset': this.inset,\n 'v-divider--vertical': this.vertical,\n ...this.themeClasses,\n },\n attrs: {\n role: 'separator',\n 'aria-orientation': orientation,\n ...this.$attrs,\n },\n on: this.$listeners,\n })\n },\n})\n"],"sourceRoot":""}