@star-ng/ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +162 -2
- package/fesm2022/star-ng-ui-accordion.mjs +376 -0
- package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
- package/fesm2022/star-ng-ui-autocomplete.mjs +786 -0
- package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
- package/fesm2022/star-ng-ui-avatar.mjs +154 -0
- package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
- package/fesm2022/star-ng-ui-badge.mjs +153 -0
- package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
- package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
- package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/star-ng-ui-button.mjs +282 -0
- package/fesm2022/star-ng-ui-button.mjs.map +1 -0
- package/fesm2022/star-ng-ui-card.mjs +112 -0
- package/fesm2022/star-ng-ui-card.mjs.map +1 -0
- package/fesm2022/star-ng-ui-chart.mjs +1904 -0
- package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
- package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
- package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
- package/fesm2022/star-ng-ui-core.mjs +484 -0
- package/fesm2022/star-ng-ui-core.mjs.map +1 -0
- package/fesm2022/star-ng-ui-data-display.mjs +1870 -0
- package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
- package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
- package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
- package/fesm2022/star-ng-ui-dialog.mjs +948 -0
- package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
- package/fesm2022/star-ng-ui-drawer.mjs +158 -0
- package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
- package/fesm2022/star-ng-ui-editor.mjs +416 -0
- package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
- package/fesm2022/star-ng-ui-field.mjs +378 -0
- package/fesm2022/star-ng-ui-field.mjs.map +1 -0
- package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
- package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
- package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
- package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
- package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
- package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-group.mjs +188 -0
- package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
- package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-number.mjs +691 -0
- package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
- package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
- package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
- package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
- package/fesm2022/star-ng-ui-knob.mjs +514 -0
- package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
- package/fesm2022/star-ng-ui-layout.mjs +608 -0
- package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
- package/fesm2022/star-ng-ui-listbox.mjs +886 -0
- package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
- package/fesm2022/star-ng-ui-media.mjs +833 -0
- package/fesm2022/star-ng-ui-media.mjs.map +1 -0
- package/fesm2022/star-ng-ui-menu.mjs +1840 -0
- package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
- package/fesm2022/star-ng-ui-message.mjs +191 -0
- package/fesm2022/star-ng-ui-message.mjs.map +1 -0
- package/fesm2022/star-ng-ui-paginator.mjs +387 -0
- package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
- package/fesm2022/star-ng-ui-panel.mjs +324 -0
- package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
- package/fesm2022/star-ng-ui-password.mjs +517 -0
- package/fesm2022/star-ng-ui-password.mjs.map +1 -0
- package/fesm2022/star-ng-ui-popover.mjs +241 -0
- package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
- package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
- package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
- package/fesm2022/star-ng-ui-radio.mjs +411 -0
- package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
- package/fesm2022/star-ng-ui-rating.mjs +211 -0
- package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
- package/fesm2022/star-ng-ui-select-button.mjs +613 -0
- package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
- package/fesm2022/star-ng-ui-select.mjs +2547 -0
- package/fesm2022/star-ng-ui-select.mjs.map +1 -0
- package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
- package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
- package/fesm2022/star-ng-ui-slider.mjs +552 -0
- package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
- package/fesm2022/star-ng-ui-spinner.mjs +148 -0
- package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
- package/fesm2022/star-ng-ui-stepper.mjs +360 -0
- package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
- package/fesm2022/star-ng-ui-table.mjs +3531 -0
- package/fesm2022/star-ng-ui-table.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tabs.mjs +464 -0
- package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tag.mjs +129 -0
- package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
- package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
- package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
- package/fesm2022/star-ng-ui-theme.mjs +98 -0
- package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
- package/fesm2022/star-ng-ui-toast.mjs +298 -0
- package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
- package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
- package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
- package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
- package/fesm2022/star-ng-ui-transloco.mjs +40 -0
- package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
- package/fesm2022/star-ng-ui-tree.mjs +1446 -0
- package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
- package/fesm2022/star-ng-ui-utility.mjs +2134 -0
- package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
- package/fesm2022/star-ng-ui.mjs +51 -0
- package/package.json +285 -3
- package/styles/_base.scss +70 -0
- package/styles/_shared.scss +2 -0
- package/styles/_tokens.scss +190 -0
- package/styles/controls/_accordion.scss +75 -0
- package/styles/controls/_autocomplete.scss +44 -0
- package/styles/controls/_avatar.scss +39 -0
- package/styles/controls/_breadcrumb.scss +45 -0
- package/styles/controls/_button.scss +137 -0
- package/styles/controls/_card.scss +38 -0
- package/styles/controls/_chart.scss +214 -0
- package/styles/controls/_chip.scss +51 -0
- package/styles/controls/_choice.scss +153 -0
- package/styles/controls/_data-display.scss +124 -0
- package/styles/controls/_date-picker.scss +300 -0
- package/styles/controls/_dialog.scss +123 -0
- package/styles/controls/_drawer.scss +118 -0
- package/styles/controls/_editor.scss +74 -0
- package/styles/controls/_field.scss +92 -0
- package/styles/controls/_file-upload.scss +136 -0
- package/styles/controls/_input-group.scss +104 -0
- package/styles/controls/_input-mask.scss +46 -0
- package/styles/controls/_input-number.scss +125 -0
- package/styles/controls/_knob.scss +76 -0
- package/styles/controls/_layout.scss +182 -0
- package/styles/controls/_listbox.scss +38 -0
- package/styles/controls/_media.scss +222 -0
- package/styles/controls/_menu.scss +254 -0
- package/styles/controls/_message.scss +48 -0
- package/styles/controls/_org-chart.scss +128 -0
- package/styles/controls/_paginator.scss +59 -0
- package/styles/controls/_panel.scss +83 -0
- package/styles/controls/_popover.scss +40 -0
- package/styles/controls/_progress-bar.scss +74 -0
- package/styles/controls/_select-button.scss +61 -0
- package/styles/controls/_select.scss +216 -0
- package/styles/controls/_skeleton.scss +43 -0
- package/styles/controls/_slider.scss +163 -0
- package/styles/controls/_spinner.scss +34 -0
- package/styles/controls/_stepper.scss +109 -0
- package/styles/controls/_table.scss +523 -0
- package/styles/controls/_tabs.scss +93 -0
- package/styles/controls/_tag.scss +84 -0
- package/styles/controls/_toast.scss +141 -0
- package/styles/controls/_tooltip.scss +14 -0
- package/styles/controls/_tree.scss +113 -0
- package/styles/controls/_utility.scss +654 -0
- package/styles/star-ng.css +5807 -0
- package/styles/star-ng.min.css +1 -0
- package/styles/star-ng.scss +50 -0
- package/theme/star-theme-first-paint.js +1 -0
- package/types/star-ng-ui-accordion.d.ts +82 -0
- package/types/star-ng-ui-autocomplete.d.ts +171 -0
- package/types/star-ng-ui-avatar.d.ts +43 -0
- package/types/star-ng-ui-badge.d.ts +46 -0
- package/types/star-ng-ui-breadcrumb.d.ts +39 -0
- package/types/star-ng-ui-button.d.ts +79 -0
- package/types/star-ng-ui-card.d.ts +29 -0
- package/types/star-ng-ui-chart.d.ts +337 -0
- package/types/star-ng-ui-checkbox.d.ts +92 -0
- package/types/star-ng-ui-core.d.ts +373 -0
- package/types/star-ng-ui-data-display.d.ts +438 -0
- package/types/star-ng-ui-date-picker.d.ts +701 -0
- package/types/star-ng-ui-dialog.d.ts +254 -0
- package/types/star-ng-ui-drawer.d.ts +29 -0
- package/types/star-ng-ui-editor.d.ts +96 -0
- package/types/star-ng-ui-field.d.ts +146 -0
- package/types/star-ng-ui-file-upload.d.ts +192 -0
- package/types/star-ng-ui-i18n-de.d.ts +7 -0
- package/types/star-ng-ui-i18n-es.d.ts +7 -0
- package/types/star-ng-ui-input-group.d.ts +58 -0
- package/types/star-ng-ui-input-mask.d.ts +126 -0
- package/types/star-ng-ui-input-number.d.ts +193 -0
- package/types/star-ng-ui-input-otp.d.ts +86 -0
- package/types/star-ng-ui-input-tags.d.ts +159 -0
- package/types/star-ng-ui-knob.d.ts +121 -0
- package/types/star-ng-ui-layout.d.ts +154 -0
- package/types/star-ng-ui-listbox.d.ts +170 -0
- package/types/star-ng-ui-media.d.ts +161 -0
- package/types/star-ng-ui-menu.d.ts +332 -0
- package/types/star-ng-ui-message.d.ts +52 -0
- package/types/star-ng-ui-paginator.d.ts +85 -0
- package/types/star-ng-ui-panel.d.ts +65 -0
- package/types/star-ng-ui-password.d.ts +129 -0
- package/types/star-ng-ui-popover.d.ts +57 -0
- package/types/star-ng-ui-progress-bar.d.ts +49 -0
- package/types/star-ng-ui-radio.d.ts +116 -0
- package/types/star-ng-ui-rating.d.ts +52 -0
- package/types/star-ng-ui-select-button.d.ts +169 -0
- package/types/star-ng-ui-select.d.ts +563 -0
- package/types/star-ng-ui-skeleton.d.ts +47 -0
- package/types/star-ng-ui-slider.d.ts +145 -0
- package/types/star-ng-ui-spinner.d.ts +29 -0
- package/types/star-ng-ui-stepper.d.ts +89 -0
- package/types/star-ng-ui-table.d.ts +885 -0
- package/types/star-ng-ui-tabs.d.ts +109 -0
- package/types/star-ng-ui-tag.d.ts +35 -0
- package/types/star-ng-ui-theme-switch.d.ts +36 -0
- package/types/star-ng-ui-theme.d.ts +95 -0
- package/types/star-ng-ui-toast.d.ts +84 -0
- package/types/star-ng-ui-toggle-switch.d.ts +81 -0
- package/types/star-ng-ui-tooltip.d.ts +66 -0
- package/types/star-ng-ui-transloco.d.ts +14 -0
- package/types/star-ng-ui-tree.d.ts +343 -0
- package/types/star-ng-ui-utility.d.ts +533 -0
- package/types/star-ng-ui.d.ts +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"star-ng-ui-date-picker.mjs","names":[],"sources":["../../../projects/star-ng/date-picker/date-utils.ts","../../../projects/star-ng/date-picker/calendar.ts","../../../projects/star-ng/date-picker/date-picker.ts","../../../projects/star-ng/date-picker/time-picker.ts"],"sourcesContent":["/**\n * Date helpers for the calendar controls. All values are local calendar days (time 00:00).\n * Formatting and parsing use `Intl`, so the order of day / month / year follows the locale.\n */\n\nexport interface StarDateRange {\n readonly start: Date | null;\n readonly end: Date | null;\n}\n\n/** Same calendar day at local midnight. */\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\n/** Adds months and clamps the day (31 Jan + 1 month = 28/29 Feb). */\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nexport function sameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return (\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function sameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\n/** Negative when `a` is an earlier day than `b`, 0 on the same day. */\nexport function compareDays(a: Date, b: Date): number {\n return startOfDay(a).getTime() - startOfDay(b).getTime();\n}\n\n/** `yyyy-mm-dd`, stable key for DOM lookups and tracking. */\nexport function isoDay(date: Date): string {\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\n/** First day of the week for a locale (0 = Sunday), from `Intl.Locale` week info when available. */\nexport function localeFirstDay(locale?: string): number {\n try {\n const intlLocale = new Intl.Locale(\n locale ?? (typeof navigator === 'undefined' ? 'en-US' : navigator.language),\n ) as Intl.Locale & {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const info = intlLocale.getWeekInfo?.() ?? intlLocale.weekInfo;\n return info ? info.firstDay % 7 : 1;\n } catch {\n return 1;\n }\n}\n\n/** 6 x 7 days covering the month of `month`, starting on `firstDay`. */\nexport function monthGrid(month: Date, firstDay: number): Date[][] {\n const first = new Date(month.getFullYear(), month.getMonth(), 1);\n const offset = (first.getDay() - firstDay + 7) % 7;\n const start = addDays(first, -offset);\n return Array.from({ length: 6 }, (_, week) =>\n Array.from({ length: 7 }, (_, day) => addDays(start, week * 7 + day)),\n );\n}\n\nexport const DEFAULT_DATE_FORMAT: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n};\n\nexport function formatDate(\n date: Date | null,\n locale: string | undefined,\n options: Intl.DateTimeFormatOptions,\n): string {\n return date ? new Intl.DateTimeFormat(locale, options).format(date) : '';\n}\n\n/** Placeholder such as `dd/mm/yyyy` or `mm/dd/yyyy` for the locale's numeric date order. */\nexport function formatHint(locale: string | undefined): string {\n return new Intl.DateTimeFormat(locale, DEFAULT_DATE_FORMAT)\n .formatToParts(new Date(2026, 10, 22))\n .map((part) =>\n part.type === 'day'\n ? 'dd'\n : part.type === 'month'\n ? 'mm'\n : part.type === 'year'\n ? 'yyyy'\n : part.value,\n )\n .join('');\n}\n\n/**\n * Parses typed text. Accepts ISO `yyyy-mm-dd` and the locale's numeric order with any\n * separators (`22/11/2026`, `22.11.26`, `11-22-2026` in en-US). Returns null when invalid.\n */\nexport function parseDate(text: string, locale: string | undefined): Date | null {\n const value = text.trim();\n if (!value) return null;\n const iso = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/.exec(value);\n const numbers = iso\n ? [iso[1], iso[2], iso[3]].map(Number)\n : value.split(/\\D+/).filter(Boolean).map(Number);\n if (numbers.length !== 3) return null;\n\n let year: number;\n let month: number;\n let day: number;\n if (iso) {\n [year, month, day] = numbers;\n } else {\n const order: string[] = new Intl.DateTimeFormat(locale, DEFAULT_DATE_FORMAT)\n .formatToParts(new Date(2026, 10, 22))\n .map((part): string => part.type)\n .filter((type) => type === 'day' || type === 'month' || type === 'year');\n const read = (type: string) => numbers[order.indexOf(type)];\n year = read('year');\n month = read('month');\n day = read('day');\n if (year < 100) year += 2000;\n }\n const date = new Date(year, month - 1, day);\n return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day\n ? date\n : null;\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { STAR_UI_TEXT, starInlineKey } from '@star-ng/ui/core';\nimport {\n addDays,\n addMonths,\n compareDays,\n isoDay,\n localeFirstDay,\n monthGrid,\n sameDay,\n sameMonth,\n StarDateRange,\n startOfDay,\n} from './date-utils';\n\nexport type StarCalendarView = 'day' | 'month' | 'year';\n\ninterface DayCell {\n readonly date: Date;\n readonly key: string;\n readonly label: string;\n readonly outside: boolean;\n /** Not rendered: a day of another month when two or more months show. */\n readonly blank: boolean;\n readonly today: boolean;\n readonly disabled: boolean;\n}\n\n/** ISO 8601 week number of a date (week 1 has the first Thursday of the year). */\nexport function isoWeek(date: Date): number {\n const day = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n // Move to the Thursday of this week: its year is the week's year.\n day.setUTCDate(day.getUTCDate() + 4 - (day.getUTCDay() || 7));\n const yearStart = Date.UTC(day.getUTCFullYear(), 0, 1);\n return Math.ceil(((day.getTime() - yearStart) / 86_400_000 + 1) / 7);\n}\n\n/**\n * Month grid used by `star-date-picker`, `star-date-range-picker`, or on its own as an inline\n * calendar (PrimeNG `p-datepicker [inline]`). WAI-ARIA date grid keyboard model:\n * arrows move by day / week, Home / End to week start / end, PageUp / PageDown by month,\n * Shift + PageUp / PageDown by year, Enter / Space select. Month and year views for fast jumps.\n */\n@Component({\n selector: 'star-calendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-calendar' },\n template: `\n <div class=\"star-calendar__header\">\n <button\n type=\"button\"\n class=\"star-calendar__nav\"\n [attr.aria-label]=\"view() === 'year' ? text.previousYears : text.previousMonth\"\n (click)=\"page(-1)\"\n >\n <i class=\"ph-bold ph-caret-left star-icon-mirror\" aria-hidden=\"true\"></i>\n </button>\n <h2 class=\"star-calendar__title\" [id]=\"titleId\" aria-live=\"polite\">\n @if (view() === 'day') {\n <button\n type=\"button\"\n class=\"star-calendar__title-btn\"\n [attr.aria-label]=\"text.chooseMonth + ', ' + monthLabel()\"\n (click)=\"view.set('month')\"\n >\n {{ monthName() }}\n </button>\n }\n @if (view() !== 'year' && granularity() !== 'year') {\n <button\n type=\"button\"\n class=\"star-calendar__title-btn\"\n [attr.aria-label]=\"text.chooseYear + ', ' + focused().getFullYear()\"\n (click)=\"view.set('year')\"\n >\n {{ focused().getFullYear() }}\n </button>\n } @else {\n <span class=\"star-calendar__title-text\">{{ years()[0] }} – {{ years()[11] }}</span>\n }\n </h2>\n <button\n type=\"button\"\n class=\"star-calendar__nav\"\n [attr.aria-label]=\"view() === 'year' ? text.nextYears : text.nextMonth\"\n (click)=\"page(1)\"\n >\n <i class=\"ph-bold ph-caret-right star-icon-mirror\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n @switch (view()) {\n @case ('day') {\n <div class=\"star-calendar__months\" [class.star-calendar__months--many]=\"monthCount() > 1\">\n @for (grid of grids(); track $index) {\n <!-- Grid keyboard is delegated from the focused day buttons (roving tabindex). -->\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <table\n class=\"star-calendar__grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"monthCount() > 1 ? null : titleId\"\n [attr.aria-label]=\"monthCount() > 1 ? grid.label : null\"\n (keydown)=\"onDayKeydown($event)\"\n >\n @if (monthCount() > 1) {\n <caption class=\"star-calendar__caption\">\n {{\n grid.label\n }}\n </caption>\n }\n <thead>\n <tr>\n @if (showWeek()) {\n <th scope=\"col\" class=\"star-calendar__week\" [attr.abbr]=\"text.weekNumber\">\n {{ text.weekShort }}\n </th>\n }\n @for (day of weekdays(); track day.short) {\n <th scope=\"col\" [attr.abbr]=\"day.long\">{{ day.short }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of grid.weeks; track $index) {\n <tr>\n @if (showWeek()) {\n <th scope=\"row\" class=\"star-calendar__week\">{{ week.number }}</th>\n }\n @for (cell of week.days; track cell.key) {\n @if (cell.blank) {\n <td role=\"gridcell\"></td>\n } @else {\n <td\n role=\"gridcell\"\n [attr.aria-selected]=\"isSelected(cell.date)\"\n [class.star-calendar__cell--range]=\"inRange(cell.date)\"\n [class.star-calendar__cell--range-start]=\"isRangeEdge(cell.date, 'start')\"\n [class.star-calendar__cell--range-end]=\"isRangeEdge(cell.date, 'end')\"\n >\n <button\n type=\"button\"\n class=\"star-calendar__day\"\n [attr.data-date]=\"cell.key\"\n [class.star-calendar__day--outside]=\"cell.outside\"\n [class.star-calendar__day--today]=\"cell.today\"\n [class.star-calendar__day--selected]=\"isSelected(cell.date)\"\n [attr.tabindex]=\"sameDay(cell.date, focused()) ? 0 : -1\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || null\"\n (click)=\"choose(cell.date)\"\n (mouseenter)=\"hover.set(cell.date)\"\n (focus)=\"focused.set(cell.date)\"\n >\n {{ cell.date.getDate() }}\n </button>\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n }\n @case ('month') {\n <div\n class=\"star-calendar__picker\"\n role=\"group\"\n [attr.aria-label]=\"text.chooseMonth\"\n (keydown)=\"onPickerKeydown($event, 'month')\"\n >\n @for (month of months(); track $index; let i = $index) {\n <button\n type=\"button\"\n class=\"star-calendar__pick\"\n [attr.data-pick]=\"i\"\n [class.star-calendar__pick--selected]=\"i === focused().getMonth()\"\n [attr.tabindex]=\"i === focused().getMonth() ? 0 : -1\"\n [attr.aria-pressed]=\"i === focused().getMonth()\"\n [disabled]=\"monthDisabled(i)\"\n (click)=\"pickMonth(i)\"\n >\n {{ month }}\n </button>\n }\n </div>\n }\n @case ('year') {\n <div\n class=\"star-calendar__picker\"\n role=\"group\"\n [attr.aria-label]=\"text.chooseYear\"\n (keydown)=\"onPickerKeydown($event, 'year')\"\n >\n @for (year of years(); track year) {\n <button\n type=\"button\"\n class=\"star-calendar__pick\"\n [attr.data-pick]=\"year\"\n [class.star-calendar__pick--selected]=\"year === focused().getFullYear()\"\n [attr.tabindex]=\"year === focused().getFullYear() ? 0 : -1\"\n [attr.aria-pressed]=\"year === focused().getFullYear()\"\n [disabled]=\"yearDisabled(year)\"\n (click)=\"pickYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n }\n `,\n})\nexport class StarCalendar {\n protected readonly text = inject(STAR_UI_TEXT);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n protected readonly titleId = inject(_IdGenerator).getId('star-calendar-title-');\n protected readonly sameDay = sameDay;\n\n readonly mode = input<'single' | 'range' | 'multiple'>('single');\n readonly selected = input<Date | null>(null);\n /** Chosen days in `'multiple'` mode. */\n readonly selectedDates = input<readonly Date[]>([]);\n /**\n * Smallest unit the user chooses. `'month'` and `'year'` show only the month or year view\n * and emit the first day of the chosen month or year.\n */\n readonly granularity = input<StarCalendarView>('day');\n /** Months shown side by side in the day view. */\n readonly numberOfMonths = input(1);\n /** Shows the ISO 8601 week number at the start of each week. */\n readonly showWeek = input(false, { transform: booleanAttribute });\n readonly range = input<StarDateRange | null>(null);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n /** Weekdays that cannot be chosen (0 = Sunday … 6 = Saturday). */\n readonly disabledDays = input<readonly number[]>([]);\n /** Extra rule, for example public holidays from the server. */\n readonly dateDisabled = input<((date: Date) => boolean) | null>(null);\n /** 0 = Sunday. Default: the locale's first day of the week. */\n readonly firstDayOfWeek = input<number | null>(null);\n readonly locale = input<string | undefined>(undefined);\n\n readonly dateSelect = output<Date>();\n\n readonly view = linkedSignal<StarCalendarView>(() => this.granularity());\n protected readonly hover = signal<Date | null>(null);\n private readonly today = startOfDay(new Date());\n\n private readonly anchor = computed(() => {\n const range = this.range();\n return (\n this.selected() ?? range?.end ?? range?.start ?? this.selectedDates().at(-1) ?? this.today\n );\n });\n /** Day with keyboard focus; also decides which month is shown. */\n readonly focused = linkedSignal(() => startOfDay(this.anchor()));\n\n private readonly firstDay = computed(\n () => this.firstDayOfWeek() ?? localeFirstDay(this.locale()),\n );\n\n protected readonly monthName = computed(() =>\n new Intl.DateTimeFormat(this.locale(), { month: 'long' }).format(this.focused()),\n );\n protected readonly monthLabel = computed(() =>\n new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(\n this.focused(),\n ),\n );\n\n protected readonly weekdays = computed(() => {\n const short = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n const long = new Intl.DateTimeFormat(this.locale(), { weekday: 'long' });\n // 2026-11-01 is a Sunday.\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(2026, 10, 1 + ((this.firstDay() + i) % 7));\n return { short: short.format(date), long: long.format(date) };\n });\n });\n\n protected readonly monthCount = computed(() => Math.max(1, Math.floor(this.numberOfMonths())));\n\n /**\n * First shown month. It stays while the focused day is inside the shown months, so moving\n * focus between two shown months does not shift the view.\n */\n private readonly viewStart = linkedSignal<{ focused: Date; count: number }, Date>({\n source: () => ({ focused: this.focused(), count: this.monthCount() }),\n computation: ({ focused, count }, previous) => {\n const month = new Date(focused.getFullYear(), focused.getMonth(), 1);\n if (!previous) return month;\n const start = previous.value;\n const offset =\n (month.getFullYear() - start.getFullYear()) * 12 + month.getMonth() - start.getMonth();\n if (offset >= 0 && offset < count) return start;\n return offset < 0 ? month : addMonths(month, -(count - 1));\n },\n });\n\n /** One grid per shown month. With two or more months, days of other months are blank. */\n protected readonly grids = computed(() => {\n const fullLabel = new Intl.DateTimeFormat(this.locale(), { dateStyle: 'full' });\n const monthLabel = new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' });\n const many = this.monthCount() > 1;\n return Array.from({ length: this.monthCount() }, (_, index) => {\n const month = addMonths(this.viewStart(), index);\n return {\n key: isoDay(month),\n label: monthLabel.format(month),\n weeks: monthGrid(month, this.firstDay())\n .map((week) => ({\n number: isoWeek(week.find((day) => day.getDay() === 4) ?? week[0]),\n days: week.map((date): DayCell => {\n const outside = !sameMonth(date, month);\n return {\n date,\n key: isoDay(date),\n label: fullLabel.format(date),\n outside,\n blank: many && outside,\n today: sameDay(date, this.today),\n disabled: this.isDisabled(date),\n };\n }),\n }))\n // With two or more months a week that has only blank days is left out.\n .filter((week) => !many || week.days.some((day) => !day.blank)),\n };\n });\n });\n\n protected readonly months = computed(() => {\n const format = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n return Array.from({ length: 12 }, (_, i) => format.format(new Date(2026, i, 1)));\n });\n\n protected readonly years = computed(() => {\n const year = this.focused().getFullYear();\n const start = year - (((year % 12) + 12) % 12);\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n isDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n if (min && compareDays(date, min) < 0) return true;\n if (max && compareDays(date, max) > 0) return true;\n if (this.disabledDays().includes(date.getDay())) return true;\n if (this.disabledDates().some((disabled) => sameDay(disabled, date))) return true;\n return this.dateDisabled()?.(date) ?? false;\n }\n\n protected isSelected(date: Date): boolean {\n if (this.mode() === 'single') return sameDay(date, this.selected());\n if (this.mode() === 'multiple') return this.selectedDates().some((day) => sameDay(day, date));\n const range = this.range();\n return sameDay(date, range?.start) || sameDay(date, range?.end);\n }\n\n /** Range fill, including the hover preview while only the start is chosen. */\n protected inRange(date: Date): boolean {\n if (this.mode() !== 'range') return false;\n const range = this.range();\n const start = range?.start;\n const end = range?.end ?? (start ? this.hover() : null);\n if (!start || !end) return false;\n const [from, to] = compareDays(start, end) <= 0 ? [start, end] : [end, start];\n return compareDays(date, from) >= 0 && compareDays(date, to) <= 0;\n }\n\n protected isRangeEdge(date: Date, edge: 'start' | 'end'): boolean {\n if (!this.inRange(date)) return false;\n const range = this.range();\n const a = range?.start;\n const b = range?.end ?? this.hover();\n if (!a || !b) return false;\n const [from, to] = compareDays(a, b) <= 0 ? [a, b] : [b, a];\n return sameDay(date, edge === 'start' ? from : to);\n }\n\n protected choose(date: Date): void {\n if (this.isDisabled(date)) return;\n this.focused.set(date);\n this.dateSelect.emit(date);\n }\n\n /** Moves focus into the grid (call after opening a popup). */\n focusActive(): void {\n afterNextRender(\n () => {\n const root = this.host.nativeElement;\n const target =\n this.view() === 'day'\n ? root.querySelector<HTMLElement>(`[data-date=\"${isoDay(this.focused())}\"]`)\n : root.querySelector<HTMLElement>('.star-calendar__pick[tabindex=\"0\"]');\n target?.focus();\n },\n { injector: this.injector },\n );\n }\n\n protected page(step: 1 | -1): void {\n const current = this.focused();\n if (this.view() === 'day') this.focused.set(addMonths(current, step));\n else if (this.view() === 'month') this.focused.set(addMonths(current, step * 12));\n else this.focused.set(addMonths(current, step * 144));\n }\n\n protected onDayKeydown(event: KeyboardEvent): void {\n const current = this.focused();\n const weekStart = (current.getDay() - this.firstDay() + 7) % 7;\n // The day before is on the left in left-to-right and on the right in right-to-left.\n const key = starInlineKey(event);\n const moves: Record<string, () => Date> = {\n ArrowLeft: () => addDays(current, -1),\n ArrowRight: () => addDays(current, 1),\n ArrowUp: () => addDays(current, -7),\n ArrowDown: () => addDays(current, 7),\n Home: () => addDays(current, -weekStart),\n End: () => addDays(current, 6 - weekStart),\n PageUp: () => addMonths(current, event.shiftKey ? -12 : -1),\n PageDown: () => addMonths(current, event.shiftKey ? 12 : 1),\n };\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.choose(current);\n return;\n }\n const move = moves[key];\n if (!move) return;\n event.preventDefault();\n this.focused.set(move());\n this.focusActive();\n }\n\n protected onPickerKeydown(event: KeyboardEvent, kind: 'month' | 'year'): void {\n const steps: Record<string, number> = {\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -3,\n ArrowDown: 3,\n };\n const step = steps[starInlineKey(event)];\n if (step === undefined) return;\n event.preventDefault();\n this.focused.set(addMonths(this.focused(), kind === 'month' ? step : step * 12));\n this.focusActive();\n }\n\n protected pickMonth(month: number): void {\n const current = this.focused();\n this.focused.set(addMonths(current, month - current.getMonth()));\n if (this.granularity() === 'month') {\n this.dateSelect.emit(new Date(current.getFullYear(), month, 1));\n return;\n }\n this.view.set('day');\n this.focusActive();\n }\n\n protected pickYear(year: number): void {\n const current = this.focused();\n this.focused.set(addMonths(current, (year - current.getFullYear()) * 12));\n if (this.granularity() === 'year') {\n this.dateSelect.emit(new Date(year, 0, 1));\n return;\n }\n this.view.set('month');\n this.focusActive();\n }\n\n protected monthDisabled(month: number): boolean {\n const year = this.focused().getFullYear();\n const first = new Date(year, month, 1);\n const last = new Date(year, month + 1, 0);\n const min = this.minDate();\n const max = this.maxDate();\n return (!!min && compareDays(last, min) < 0) || (!!max && compareDays(first, max) > 0);\n }\n\n protected yearDisabled(year: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n return (!!min && year < min.getFullYear()) || (!!max && year > max.getFullYear());\n }\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { STAR_UI_TEXT, StarDirectionService } from '@star-ng/ui/core';\nimport { StarCalendar, StarCalendarView } from './calendar';\nimport {\n compareDays,\n DEFAULT_DATE_FORMAT,\n formatDate,\n formatHint,\n parseDate,\n sameDay,\n StarDateRange,\n startOfDay,\n} from './date-utils';\n\n/** Time part of the input text: 24-hour clock, so typed text parses the same in every locale. */\nconst TIME_FORMAT: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n hourCycle: 'h23',\n};\n\n/** The calendar day of `date` at the given local time. */\nfunction atTime(date: Date, hours: number, minutes: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes);\n}\n\nconst PANEL_POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 6 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -6 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 6 },\n];\n\n/**\n * Shared input + popup behaviour of the date controls: typed entry with locale-aware parsing,\n * a calendar popup (native popover, so it works in dialogs), Today / Clear bar, keyboard.\n */\n@Directive()\nexport abstract class StarDateInputBase<TValue> {\n /** Keeps the CDK direction (overlays and menus) in step with `<html dir>`. */\n private readonly directionSync = inject(StarDirectionService);\n protected readonly text = inject(STAR_UI_TEXT);\n private readonly ids = inject(_IdGenerator);\n\n abstract readonly value: ReturnType<typeof model<TValue>>;\n\n readonly placeholder = input<string | null>(null);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n readonly disabledDays = input<readonly number[]>([]);\n readonly dateDisabled = input<((date: Date) => boolean) | null>(null);\n readonly firstDayOfWeek = input<number | null>(null);\n /** BCP 47 locale for names and formats. Default: the browser locale. */\n readonly locale = input<string | undefined>(undefined);\n /** `Intl.DateTimeFormat` options for the input text (default numeric day / month / year). */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>(DEFAULT_DATE_FORMAT);\n /** Months shown side by side in the popup. */\n readonly numberOfMonths = input(1);\n /** Shows the ISO 8601 week number at the start of each week. */\n readonly showWeek = input(false, { transform: booleanAttribute });\n /**\n * Clock of the typed time with `showTime`: `'24'` (14:30) or `'12'` (2:30 PM). Both forms\n * are accepted when the user types.\n */\n readonly hourFormat = input<'24' | '12'>('24');\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n readonly showClear = input(false, { transform: booleanAttribute });\n /** Disables typing; the date can only be picked. */\n readonly readonlyInput = input(false, { transform: booleanAttribute });\n readonly size = input<'sm' | 'md'>('md');\n readonly ariaLabel = input<string | null>(null);\n readonly inputId = input(this.ids.getId('star-date-'));\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly name = input('');\n\n readonly touch = output<void>();\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n protected readonly positions = PANEL_POSITIONS;\n protected readonly panelId = this.ids.getId('star-date-panel-');\n protected readonly open = signal(false);\n protected readonly showInvalid = computed(() => this.invalid() && this.touched());\n protected readonly interactive = computed(() => !this.disabled() && !this.readonly());\n protected readonly hint = computed(() => this.placeholder() ?? formatHint(this.locale()));\n\n /** Time fields in the popup (`showTime` on the single and the range picker). */\n protected readonly timeEnabled: () => boolean = () => false;\n protected readonly timeStep: () => number = () => 60;\n protected timeFields(): readonly StarTimeField[] {\n return [];\n }\n /** Chosen days of the multiple-date picker. */\n protected readonly calendarDates: () => readonly Date[] = () => [];\n /** Smallest unit the user chooses (the single picker's `view`). */\n protected readonly granularity: () => StarCalendarView = () => 'day';\n\n protected readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n protected readonly control = viewChild.required<ElementRef<HTMLElement>>('control');\n protected readonly calendar = viewChild(StarCalendar);\n\n /** Text for the current value. */\n protected abstract readonly displayText: () => string;\n /** Text the user is typing; resets when the value changes. */\n protected readonly typed = linkedSignal(() => this.displayText());\n protected abstract parseText(text: string): TValue | undefined;\n protected abstract emptyValue(): TValue;\n protected abstract pickToday(today: Date): void;\n\n protected format(date: Date | null): string {\n return formatDate(date, this.locale(), this.dateFormat());\n }\n\n protected allowed(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n return (\n (!min || compareDays(date, min) >= 0) &&\n (!max || compareDays(date, max) <= 0) &&\n !this.disabledDays().includes(date.getDay()) &&\n !this.disabledDates().some((d) => sameDay(d, date)) &&\n !this.dateDisabled()?.(date)\n );\n }\n\n openPanel(): void {\n if (!this.interactive() || this.open()) return;\n this.open.set(true);\n this.opened.emit();\n }\n\n closePanel(focusInput = true): void {\n if (!this.open()) return;\n this.open.set(false);\n if (focusInput) this.input().nativeElement.focus();\n this.closed.emit();\n }\n\n protected togglePanel(): void {\n if (this.open()) this.closePanel();\n else this.openPanel();\n }\n\n protected onAttached(): void {\n this.calendar()?.focusActive();\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (this.control().nativeElement.contains(event.target as Node)) return;\n this.closePanel(false);\n this.touch.emit();\n }\n\n /** Applies typed text: valid dates set the value, invalid text reverts. */\n protected commitTyped(): void {\n const text = this.typed();\n if (text === this.displayText()) return;\n const parsed = text.trim() ? this.parseText(text) : this.emptyValue();\n if (parsed === undefined) this.revertText();\n else this.value.set(parsed);\n }\n\n /**\n * Restores the text of the current value. Also writes the DOM: the `[value]` binding does not\n * update when the signal returns to the value it last rendered.\n */\n private revertText(): void {\n const text = this.displayText();\n this.typed.set(text);\n this.input().nativeElement.value = text;\n }\n\n protected onInputBlur(): void {\n this.commitTyped();\n if (!this.open()) this.touch.emit();\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' && (event.altKey || !this.open())) {\n event.preventDefault();\n this.openPanel();\n } else if (event.key === 'Enter') {\n this.commitTyped();\n } else if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.closePanel();\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.closePanel();\n }\n }\n\n protected today(): void {\n this.pickToday(startOfDay(new Date()));\n }\n\n clear(): void {\n this.value.set(this.emptyValue());\n this.closePanel();\n }\n\n focus(options?: FocusOptions): void {\n this.input().nativeElement.focus(options);\n }\n\n protected parseOne(text: string): Date | null | undefined {\n const date = parseDate(text, this.locale());\n return date && this.allowed(date) ? date : undefined;\n }\n\n /**\n * \"<date> hh:mm\" or \"<date>, hh:mm\". A date without a time takes the fallback time.\n * `undefined`: the text is not a valid date and time.\n */\n protected parseDateTime(text: string, hours: number, minutes: number): Date | undefined {\n const match =\n /^(.*?)[,\\s]+(\\d{1,2})[:.](\\d{2})\\s*([ap])\\.?\\s?m?\\.?$|^(.*?)[,\\s]+(\\d{1,2})[:.](\\d{2})$/i.exec(\n text.trim(),\n );\n const date = this.parseOne(match ? (match[1] ?? match[5]) : text);\n if (!date) return undefined;\n if (!match) return atTime(date, hours, minutes);\n let h = Number(match[2] ?? match[6]);\n const m = Number(match[3] ?? match[7]);\n const meridiem = match[4]?.toLowerCase();\n if (meridiem) {\n if (h < 1 || h > 12) return undefined;\n h = (h % 12) + (meridiem === 'p' ? 12 : 0);\n }\n return h > 23 || m > 59 ? undefined : atTime(date, h, m);\n }\n\n /** `date` moved into `minDate` … `maxDate`, compared to the minute. */\n protected clampTime(date: Date): Date {\n const min = this.minDate();\n const max = this.maxDate();\n if (min && date.getTime() < min.getTime()) return new Date(min);\n if (max && date.getTime() > max.getTime()) return new Date(max);\n return date;\n }\n\n protected timeHint(): string {\n return this.hourFormat() === '12' ? ' hh:mm am' : ' hh:mm';\n }\n\n protected formatDateTime(date: Date | null): string {\n return formatDate(date, this.locale(), {\n ...this.dateFormat(),\n ...TIME_FORMAT,\n hourCycle: this.hourFormat() === '12' ? 'h12' : 'h23',\n });\n }\n}\n\n/** One time input in the popup. */\nexport interface StarTimeField {\n readonly label: string;\n /** `hh:mm`, or `''` when the date is not chosen yet. */\n readonly value: string;\n readonly set: (time: string) => void;\n}\n\nfunction timeOf(date: Date | null | undefined): string {\n const pad = (part: number) => String(part).padStart(2, '0');\n return date ? `${pad(date.getHours())}:${pad(date.getMinutes())}` : '';\n}\n\n/** `date` at the `hh:mm` time, or `null` when either is missing. */\nfunction withTime(date: Date | null | undefined, time: string): Date | null {\n const match = /^(\\d{2}):(\\d{2})/.exec(time);\n return date && match ? atTime(date, Number(match[1]), Number(match[2])) : null;\n}\n\nconst TEMPLATE = `\n <div #control class=\"star-date__control\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #input\n type=\"text\"\n class=\"star-date__input\"\n autocomplete=\"off\"\n inputmode=\"numeric\"\n aria-haspopup=\"dialog\"\n [id]=\"inputId()\"\n [attr.name]=\"name() || null\"\n [value]=\"typed()\"\n [attr.placeholder]=\"hint()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly() || readonlyInput()\"\n [required]=\"required()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-invalid]=\"showInvalid() || null\"\n (input)=\"typed.set(input.value)\"\n (click)=\"readonlyInput() && togglePanel()\"\n (keydown)=\"onInputKeydown($event)\"\n (blur)=\"onInputBlur()\"\n />\n @if (showClear() && hasValue() && interactive()) {\n <button type=\"button\" class=\"star-select__icon-btn\" [attr.aria-label]=\"text.clear\" (click)=\"clear()\">\n <i class=\"ph-bold ph-x\" aria-hidden=\"true\"></i>\n </button>\n }\n <button\n type=\"button\"\n class=\"star-date__toggle\"\n [disabled]=\"!interactive()\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"text.chooseDate\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n (click)=\"togglePanel()\"\n >\n <i class=\"ph-bold ph-calendar-blank\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayUsePopover=\"inline\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (attach)=\"onAttached()\"\n (detach)=\"closePanel(false)\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n >\n <div\n class=\"star-panel star-date__panel\"\n role=\"dialog\"\n [id]=\"panelId\"\n [attr.aria-label]=\"text.chooseDate\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <star-calendar\n [mode]=\"mode\"\n [selected]=\"calendarSelected()\"\n [range]=\"calendarRange()\"\n [selectedDates]=\"calendarDates()\"\n [granularity]=\"granularity()\"\n [numberOfMonths]=\"numberOfMonths()\"\n [showWeek]=\"showWeek()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [disabledDays]=\"disabledDays()\"\n [dateDisabled]=\"dateDisabled()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n (dateSelect)=\"onDateSelect($event)\"\n />\n @if (timeEnabled()) {\n <div class=\"star-date__time\">\n @for (field of timeFields(); track field.label) {\n <label class=\"star-date__time-label\">\n {{ field.label }}\n <input\n type=\"time\"\n class=\"star-input star-input--sm\"\n [value]=\"field.value\"\n [step]=\"timeStep()\"\n [disabled]=\"!field.value\"\n (change)=\"field.set($any($event.target).value)\"\n />\n </label>\n }\n <button type=\"button\" class=\"star-btn star-btn--primary star-btn--sm\" (click)=\"closePanel()\">{{ text.done }}</button>\n </div>\n }\n @if (showButtonBar()) {\n <div class=\"star-date__bar\">\n <button type=\"button\" class=\"star-btn star-btn--ghost star-btn--sm\" (click)=\"today()\">{{ text.today }}</button>\n <button type=\"button\" class=\"star-btn star-btn--ghost star-btn--sm\" (click)=\"clear()\">{{ text.clear }}</button>\n </div>\n }\n </div>\n </ng-template>\n`;\n\nconst HOST = {\n class: 'star-date',\n '[class.star-date--open]': 'open()',\n '[class.star-date--disabled]': 'disabled()',\n '[class.star-date--invalid]': 'showInvalid()',\n '[class.star-date--sm]': \"size() === 'sm'\",\n};\n\n/**\n * Date picker (PrimeNG `p-datepicker`): typed entry (`dd/mm/yyyy` or the locale's order, or ISO),\n * calendar popup with month / year views, min / max, disabled dates and weekdays, Today / Clear.\n *\n * `showTime` adds a time of day: the value keeps hours and minutes, the text is\n * `dd/mm/yyyy, hh:mm` in the 24-hour clock, and the popup has a time field and stays open\n * until the user chooses Done. With `showTime`, `minDate` / `maxDate` also limit the time: a\n * value outside the limits moves to the nearest limit.\n *\n * `view=\"month\"` or `view=\"year\"` chooses a month or a year: the value is its first day and the\n * text is `mm/yyyy` or `yyyy`.\n *\n * `<star-date-picker [formField]=\"form.receivedOn\" [maxDate]=\"today\" showButtonBar />`\n */\n@Component({\n selector: 'star-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, StarCalendar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: HOST,\n template: TEMPLATE,\n})\nexport class StarDatePicker\n extends StarDateInputBase<Date | null>\n implements FormValueControl<Date | null>\n{\n readonly value = model<Date | null>(null);\n /** Adds a time of day (hours and minutes) to the value. */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** Minute step of the time field. */\n readonly stepMinute = input(1);\n /** Unit to choose: a day (default), a month or a year. */\n readonly view = input<StarCalendarView>('day');\n readonly dateSelect = output<Date>();\n\n protected readonly mode = 'single' as const;\n protected override readonly timeEnabled = () => this.showTime() && this.view() === 'day';\n protected override readonly timeStep = () => Math.max(1, this.stepMinute()) * 60;\n protected override readonly granularity = this.view;\n protected override readonly hint = computed(() => {\n if (this.placeholder()) return this.placeholder()!;\n if (this.view() === 'month') return 'mm/yyyy';\n if (this.view() === 'year') return 'yyyy';\n return formatHint(this.locale()) + (this.showTime() ? this.timeHint() : '');\n });\n protected readonly displayText = () => {\n const value = this.value();\n if (!value) return '';\n if (this.view() === 'year') return String(value.getFullYear());\n if (this.view() === 'month') {\n return `${String(value.getMonth() + 1).padStart(2, '0')}/${value.getFullYear()}`;\n }\n return this.timeEnabled() ? this.formatDateTime(value) : this.format(value);\n };\n protected readonly hasValue = computed(() => this.value() !== null);\n protected readonly calendarSelected = this.value;\n protected readonly calendarRange = signal<StarDateRange | null>(null);\n\n protected parseText(text: string): Date | null | undefined {\n if (this.view() !== 'day') return this.parsePeriod(text.trim());\n if (!this.timeEnabled()) return this.parseOne(text);\n const current = this.value();\n const date = this.parseDateTime(text, current?.getHours() ?? 0, current?.getMinutes() ?? 0);\n return date && this.clampTime(date).getTime() === date.getTime() ? date : undefined;\n }\n\n /** `mm/yyyy`, `yyyy-mm` or `yyyy`: the first day of that month or year. */\n private parsePeriod(text: string): Date | undefined {\n const year = /^(\\d{4})$/.exec(text);\n const month = /^(\\d{1,2})[/.\\- ](\\d{4})$/.exec(text);\n const iso = /^(\\d{4})-(\\d{1,2})$/.exec(text);\n let date: Date | null = null;\n if (this.view() === 'year' && year) date = new Date(Number(year[1]), 0, 1);\n else if (this.view() === 'month' && month)\n date = new Date(Number(month[2]), Number(month[1]) - 1, 1);\n else if (this.view() === 'month' && iso) date = new Date(Number(iso[1]), Number(iso[2]) - 1, 1);\n if (!date || date.getMonth() > 11 || Number.isNaN(date.getTime())) return undefined;\n if (month && (Number(month[1]) < 1 || Number(month[1]) > 12)) return undefined;\n if (iso && (Number(iso[2]) < 1 || Number(iso[2]) > 12)) return undefined;\n return this.periodAllowed(date) ? date : undefined;\n }\n\n /** A month or year is allowed when any part of it is inside `minDate` … `maxDate`. */\n private periodAllowed(first: Date): boolean {\n const last =\n this.view() === 'year'\n ? new Date(first.getFullYear(), 11, 31)\n : new Date(first.getFullYear(), first.getMonth() + 1, 0);\n const min = this.minDate();\n const max = this.maxDate();\n return (!min || compareDays(last, min) >= 0) && (!max || compareDays(first, max) <= 0);\n }\n\n protected emptyValue(): Date | null {\n return null;\n }\n\n protected pickToday(today: Date): void {\n if (this.view() === 'month')\n return this.onDateSelect(new Date(today.getFullYear(), today.getMonth(), 1));\n if (this.view() === 'year') return this.onDateSelect(new Date(today.getFullYear(), 0, 1));\n if (!this.allowed(today)) return;\n if (!this.timeEnabled()) return this.onDateSelect(today);\n this.setValue(this.atCurrentTime(today));\n }\n\n protected onDateSelect(date: Date): void {\n if (!this.timeEnabled()) {\n this.setValue(date);\n this.closePanel();\n return;\n }\n // Keep the time already chosen; a first pick starts at the current time.\n const current = this.value();\n this.setValue(\n current ? atTime(date, current.getHours(), current.getMinutes()) : this.atCurrentTime(date),\n );\n }\n\n protected override timeFields(): readonly StarTimeField[] {\n return [\n {\n label: this.text.time,\n value: timeOf(this.value()),\n set: (time) => {\n const next = withTime(this.value(), time);\n if (next) this.setValue(next);\n },\n },\n ];\n }\n\n /** `date` at the current time of day, rounded down to the minute step. */\n private atCurrentTime(date: Date): Date {\n const now = new Date();\n const step = Math.max(1, this.stepMinute());\n return atTime(date, now.getHours(), now.getMinutes() - (now.getMinutes() % step));\n }\n\n private setValue(date: Date): void {\n const next = this.timeEnabled() ? this.clampTime(date) : date;\n this.value.set(next);\n this.dateSelect.emit(next);\n }\n}\n\n/**\n * Date range picker (PrimeNG `p-datepicker selectionMode=\"range\"`). Value: `{ start, end }`.\n * First click sets the start, second click the end (swapped if earlier); hovering previews.\n * Type `01/11/2026 – 15/11/2026` (any separator between the two dates).\n */\n@Component({\n selector: 'star-date-range-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, StarCalendar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { ...HOST, class: 'star-date star-date--range' },\n template: TEMPLATE,\n})\nexport class StarDateRangePicker\n extends StarDateInputBase<StarDateRange | null>\n implements FormValueControl<StarDateRange | null>\n{\n readonly value = model<StarDateRange | null>(null);\n /**\n * Adds a time of day to both ends. A new start is at 00:00 and a new end at 23:59; the popup\n * has a start and an end time field and stays open until the user chooses Done.\n */\n readonly showTime = input(false, { transform: booleanAttribute });\n /** Minute step of the time fields. */\n readonly stepMinute = input(1);\n readonly rangeSelect = output<StarDateRange>();\n\n protected readonly mode = 'range' as const;\n protected override readonly timeEnabled = this.showTime;\n protected override readonly timeStep = () => Math.max(1, this.stepMinute()) * 60;\n protected override readonly hint = computed(\n () =>\n this.placeholder() ?? formatHint(this.locale()) + (this.showTime() ? this.timeHint() : ''),\n );\n private readonly show = (date: Date | null) =>\n this.showTime() ? this.formatDateTime(date) : this.format(date);\n\n protected override timeFields(): readonly StarTimeField[] {\n const range = this.value();\n const update = (edge: 'start' | 'end') => (time: string) => {\n const current = this.value();\n const next = withTime(current?.[edge], time);\n if (!current?.start || !next) return;\n const changed = { ...current, [edge]: this.clampTime(next) };\n // Keep the order when both ends are on the same day.\n if (changed.end && changed.start && changed.end.getTime() < changed.start.getTime()) return;\n this.value.set(changed);\n if (changed.end) this.rangeSelect.emit(changed);\n };\n return [\n { label: this.text.startTime, value: timeOf(range?.start), set: update('start') },\n { label: this.text.endTime, value: timeOf(range?.end), set: update('end') },\n ];\n }\n protected readonly hasValue = computed(() => !!this.value()?.start);\n protected readonly calendarSelected = signal<Date | null>(null);\n protected readonly calendarRange = this.value;\n\n protected readonly displayText = () => {\n const range = this.value();\n if (!range?.start) return '';\n return range.end\n ? `${this.show(range.start)} – ${this.show(range.end)}`\n : `${this.show(range.start)} – `;\n };\n\n protected parseText(text: string): StarDateRange | null | undefined {\n // Two dates, each written with its own separators, split on a dash or \"to\" between them.\n const parts = text.split(/\\s+[–—-]\\s*|\\s+to\\s+/i).filter((part) => part.trim());\n if (parts.length !== 2) return undefined;\n if (this.showTime()) {\n const from = this.parseDateTime(parts[0], 0, 0);\n const to = this.parseDateTime(parts[1], 23, 59);\n if (!from || !to) return undefined;\n return from.getTime() <= to.getTime() ? { start: from, end: to } : { start: to, end: from };\n }\n const start = this.parseOne(parts[0]);\n const end = this.parseOne(parts[1]);\n if (!start || !end) return undefined;\n return compareDays(start, end) <= 0 ? { start, end } : { start: end, end: start };\n }\n\n protected emptyValue(): StarDateRange | null {\n return null;\n }\n\n protected pickToday(today: Date): void {\n if (!this.allowed(today)) return;\n if (this.showTime()) {\n this.value.set({\n start: this.clampTime(atTime(today, 0, 0)),\n end: this.clampTime(atTime(today, 23, 59)),\n });\n return;\n }\n this.value.set({ start: today, end: today });\n this.closePanel();\n }\n\n protected onDateSelect(date: Date): void {\n const range = this.value();\n if (!range?.start || range.end) {\n this.value.set({\n start: this.showTime() ? this.clampTime(atTime(date, 0, 0)) : date,\n end: null,\n });\n return;\n }\n const [first, last] =\n compareDays(date, range.start) < 0 ? [date, range.start] : [range.start, date];\n const next = this.showTime()\n ? {\n start: this.clampTime(atTime(first, 0, 0)),\n end: this.clampTime(atTime(last, 23, 59)),\n }\n : { start: first, end: last };\n this.value.set(next);\n this.rangeSelect.emit(next);\n // With a time, the popup stays open for the time fields.\n if (!this.showTime()) this.closePanel();\n }\n}\n\n/**\n * Multiple-date picker (PrimeNG `p-datepicker selectionMode=\"multiple\"`). Value: a list of\n * days in date order. A click adds a day or removes it; the popup stays open. Type the dates\n * with a comma or a semicolon between them.\n */\n@Component({\n selector: 'star-multi-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, StarCalendar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { ...HOST, class: 'star-date star-date--multiple' },\n template: TEMPLATE,\n})\nexport class StarMultiDatePicker\n extends StarDateInputBase<readonly Date[]>\n implements FormValueControl<readonly Date[]>\n{\n readonly value = model<readonly Date[]>([]);\n /** Largest number of days (0 = no limit). A click on a new day does nothing at the limit. */\n readonly maxDates = input(0);\n\n protected readonly mode = 'multiple' as const;\n protected readonly hasValue = computed(() => this.value().length > 0);\n protected readonly calendarSelected = signal<Date | null>(null);\n protected readonly calendarRange = signal<StarDateRange | null>(null);\n protected override readonly calendarDates = this.value;\n\n protected readonly displayText = () =>\n this.value()\n .map((date) => this.format(date))\n .join(', ');\n\n protected parseText(text: string): readonly Date[] | undefined {\n const dates: Date[] = [];\n for (const part of text.split(/\\s*[,;]\\s*/).filter((item) => item.trim())) {\n const date = this.parseOne(part);\n if (!date) return undefined;\n if (!dates.some((day) => sameDay(day, date))) dates.push(date);\n }\n if (this.maxDates() > 0 && dates.length > this.maxDates()) return undefined;\n return dates.sort((a, b) => a.getTime() - b.getTime());\n }\n\n protected emptyValue(): readonly Date[] {\n return [];\n }\n\n protected pickToday(today: Date): void {\n if (this.allowed(today) && !this.value().some((day) => sameDay(day, today))) {\n this.onDateSelect(today);\n }\n }\n\n protected onDateSelect(date: Date): void {\n const days = this.value();\n if (days.some((day) => sameDay(day, date))) {\n this.value.set(days.filter((day) => !sameDay(day, date)));\n } else if (this.maxDates() <= 0 || days.length < this.maxDates()) {\n this.value.set([...days, date].sort((a, b) => a.getTime() - b.getTime()));\n }\n }\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\n/**\n * Time picker: a time of day without a date (PrimeNG `p-datepicker timeOnly`). The value is\n * 24-hour `HH:mm` text, or `null`. The control is the native time input in the StarNG input\n * style, so the browser gives the keyboard model, the locale's 12 or 24-hour display and the\n * picker on a phone.\n *\n * `<star-time-picker [formField]=\"form.callAt\" min=\"08:00\" max=\"18:00\" [stepMinute]=\"15\" />`\n */\n@Component({\n selector: 'star-time-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-time' },\n template: `\n <input\n #input\n type=\"time\"\n class=\"star-input\"\n [class.star-input--sm]=\"size() === 'sm'\"\n [id]=\"inputId()\"\n [attr.name]=\"name() || null\"\n [value]=\"value() ?? ''\"\n [attr.min]=\"min() ?? null\"\n [attr.max]=\"max() ?? null\"\n [step]=\"step()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-invalid]=\"(invalid() && touched()) || null\"\n (change)=\"onChange(input.value)\"\n (blur)=\"touch.emit()\"\n />\n `,\n})\nexport class StarTimePicker implements FormValueControl<string | null> {\n /** `HH:mm` in the 24-hour clock, or `null`. */\n readonly value = model<string | null>(null);\n /** Earliest and latest time, `HH:mm`. */\n readonly min = input<string | undefined>(undefined);\n readonly max = input<string | undefined>(undefined);\n readonly stepMinute = input(1);\n readonly size = input<'sm' | 'md'>('md');\n readonly ariaLabel = input<string | null>(null);\n readonly inputId = input(inject(_IdGenerator).getId('star-time-'));\n readonly name = input('');\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly step = computed(() => Math.max(1, this.stepMinute()) * 60);\n private readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n protected onChange(text: string): void {\n // The native input gives `HH:mm` (or `HH:mm:ss`); empty text clears the value.\n const match = /^(\\d{2}):(\\d{2})/.exec(text);\n this.value.set(match ? `${match[1]}:${match[2]}` : null);\n }\n\n focus(options?: FocusOptions): void {\n this.input().nativeElement.focus(options);\n }\n}\n"],"mappings":";;;;;AAWA,SAAgB,WAAW,MAAU;CACnC,OAAO,IAAI,KAAK,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,CAAE;AACrE;AAEA,SAAgB,QAAQ,MAAY,MAAY;CAC9C,OAAO,IAAI,KAAK,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,IAAK,IAAI;AAC5E;AAGA,SAAgB,UAAU,MAAY,QAAc;CAClD,MAAM,SAAS,IAAI,KAAK,KAAK,YAAW,GAAI,KAAK,SAAQ,IAAK,QAAQ,CAAC;CACvE,MAAM,UAAU,IAAI,KAAK,OAAO,YAAW,GAAI,OAAO,SAAQ,IAAK,GAAG,CAAC,CAAC,CAAC,QAAO;CAChF,OAAO,IAAI,KAAK,OAAO,YAAW,GAAI,OAAO,SAAQ,GAAI,KAAK,IAAI,KAAK,QAAO,GAAI,OAAO,CAAC;AAC5F;AAEA,SAAgB,QAAQ,GAA4B,GAA0B;CAC5E,OACE,CAAC,CAAC,KACF,CAAC,CAAC,KACF,EAAE,YAAW,MAAO,EAAE,YAAW,KACjC,EAAE,SAAQ,MAAO,EAAE,SAAQ,KAC3B,EAAE,QAAO,MAAO,EAAE,QAAO;AAE7B;AAEA,SAAgB,UAAU,GAAS,GAAO;CACxC,OAAO,EAAE,YAAW,MAAO,EAAE,YAAW,KAAM,EAAE,SAAQ,MAAO,EAAE,SAAQ;AAC3E;AAGA,SAAgB,YAAY,GAAS,GAAO;CAC1C,OAAO,WAAW,CAAC,CAAC,CAAC,QAAO,IAAK,WAAW,CAAC,CAAC,CAAC,QAAO;AACxD;AAGA,SAAgB,OAAO,MAAU;CAC/B,MAAM,OAAO,MAAc,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;CACpD,OAAO,GAAG,KAAK,YAAW,EAAE,GAAI,IAAI,KAAK,SAAQ,IAAK,CAAC,EAAC,GAAI,IAAI,KAAK,QAAO,CAAE;AAChF;AAGA,SAAgB,eAAe,QAAe;CAC5C,IAAI;EACF,MAAM,aAAa,IAAI,KAAK,OAC1B,WAAW,OAAO,cAAc,cAAc,UAAU,UAAU,SAAS;EAK7E,MAAM,OAAO,WAAW,cAAa,KAAM,WAAW;EACtD,OAAO,OAAO,KAAK,WAAW,IAAI;CACpC,QAAQ;EACN,OAAO;CACT;AACF;AAGA,SAAgB,UAAU,OAAa,UAAgB;CACrD,MAAM,QAAQ,IAAI,KAAK,MAAM,YAAW,GAAI,MAAM,SAAQ,GAAI,CAAC;CAE/D,MAAM,QAAQ,QAAQ,OAAO,GADb,MAAM,OAAM,IAAK,WAAW,KAAK,EACb;CACpC,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAC,IAAK,GAAG,SACnC,MAAM,KAAK,EAAE,QAAQ,EAAC,IAAK,GAAG,QAAQ,QAAQ,OAAO,OAAO,IAAI,GAAG,CAAC,CAAC;AAEzE;AAEA,MAAa,sBAAkD;CAC7D,MAAM;CACN,OAAO;CACP,KAAK;AACN;AAED,SAAgB,WACd,MACA,QACA,SAAmC;CAEnC,OAAO,OAAO,IAAI,KAAK,eAAe,QAAQ,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI;AACxE;AAGA,SAAgB,WAAW,QAA0B;CACnD,OAAO,IAAI,KAAK,eAAe,QAAQ,mBAAmB,CAAC,CACxD,cAAc,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC,CACrC,KAAK,SACJ,KAAK,SAAS,QACV,OACA,KAAK,SAAS,UACZ,OACA,KAAK,SAAS,SACZ,SACA,KAAK,KAAK,CACnB,CACA,KAAK,EAAE;AACZ;AAMA,SAAgB,UAAU,MAAc,QAA0B;CAChE,MAAM,QAAQ,KAAK,KAAI;CACvB,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,MAAM,gCAAgC,KAAK,KAAK;CACtD,MAAM,UAAU,MACZ;EAAC,IAAI;EAAI,IAAI;EAAI,IAAI;CAAE,CAAC,CAAC,IAAI,MAAM,IACnC,MAAM,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,MAAM;CACjD,IAAI,QAAQ,WAAW,GAAG,OAAO;CAEjC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI,KACF,CAAC,MAAM,OAAO,OAAO;MAChB;EACL,MAAM,QAAkB,IAAI,KAAK,eAAe,QAAQ,mBAAmB,CAAC,CACzE,cAAc,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC,CACrC,KAAK,SAAiB,KAAK,IAAI,CAAC,CAChC,QAAQ,SAAS,SAAS,SAAS,SAAS,WAAW,SAAS,MAAM;EACzE,MAAM,QAAQ,SAAiB,QAAQ,MAAM,QAAQ,IAAI;EACzD,OAAO,KAAK,MAAM;EAClB,QAAQ,KAAK,OAAO;EACpB,MAAM,KAAK,KAAK;EAChB,IAAI,OAAO,KAAK,QAAQ;CAC1B;CACA,MAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;CAC1C,OAAO,KAAK,YAAW,MAAO,QAAQ,KAAK,SAAQ,MAAO,QAAQ,KAAK,KAAK,QAAO,MAAO,MACtF,OACA;AACN;ACjGA,SAAgB,QAAQ,MAAU;CAChC,MAAM,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,CAAE,CAAC;CAElF,IAAI,WAAW,IAAI,WAAU,IAAK,KAAK,IAAI,UAAS,KAAM,EAAE;CAC5D,MAAM,YAAY,KAAK,IAAI,IAAI,eAAc,GAAI,GAAG,CAAC;CACrD,OAAO,KAAK,OAAO,IAAI,QAAO,IAAK,aAAa,QAAa,KAAK,CAAC;AACrE;AAqLA,IAAa,eAAb,MAAa,aAAY;CACJ,OAAO,OAAO,YAAY;CAC5B,OAAO,OAAgC,UAAU;CACjD,WAAW,OAAO,QAAQ;CACxB,UAAU,OAAO,YAAY,CAAC,CAAC,MAAM,sBAAsB;CAC3D,UAAU;CAEpB,OAAO,MAAuC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvD,WAAW,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEnC,gBAAgB,MAAuB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAK1C,cAAc,MAAwB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAE5C,iBAAiB,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,QAAQ,MAA4B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACzC,UAAU,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,UAAU,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,gBAAgB,MAAuB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAE1C,eAAe,MAAyB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE3C,eAAe,MAAwC,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE5D,iBAAiB,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAC3C,SAAS,MAA0B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAE7C,aAAa,OAAM;CAEnB,OAAO,mBAAqC,KAAK,YAAW,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrD,QAAQ,OAAoB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACnC,QAAQ,2BAAW,IAAI,KAAI,CAAE;CAE7B,SAAS,eAAc;EACtC,MAAM,QAAQ,KAAK,MAAK;EACxB,OACE,KAAK,SAAQ,KAAM,OAAO,OAAO,OAAO,SAAS,KAAK,cAAa,CAAE,CAAC,GAAG,EAAE,KAAK,KAAK;CAEzF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEO,UAAU,mBAAmB,WAAW,KAAK,OAAM,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAE/C,WAAW,eACpB,KAAK,eAAc,KAAM,eAAe,KAAK,OAAM,CAAE,GAC5D,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEkB,YAAY,eAC7B,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI,EAAE,OAAO,OAAM,CAAE,CAAC,CAAC,OAAO,KAAK,QAAO,CAAE,GAChF,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACkB,aAAa,eAC9B,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI;EAAE,OAAO;EAAQ,MAAM;CAAS,CAAE,CAAC,CAAC,OACzE,KAAK,QAAO,CAAE,GAEjB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAEkB,WAAW,eAAc;EAC1C,MAAM,QAAQ,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI,EAAE,SAAS,QAAO,CAAE;EACzE,MAAM,OAAO,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI,EAAE,SAAS,OAAM,CAAE;EAEvE,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAC,IAAK,GAAG,MAAK;GACxC,MAAM,OAAO,IAAI,KAAK,MAAM,IAAI,KAAM,KAAK,SAAQ,IAAK,KAAK,CAAE;GAC/D,OAAO;IAAE,OAAO,MAAM,OAAO,IAAI;IAAG,MAAM,KAAK,OAAO,IAAI;GAAC;EAC7D,CAAC;CACH,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,aAAa,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,eAAc,CAAE,CAAC,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAM7E,YAAY,aAAY;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EACvC,eAAe;GAAE,SAAS,KAAK,QAAO;GAAI,OAAO,KAAK,WAAU;EAAE;EAClE,cAAc,EAAE,SAAS,SAAS,aAAY;GAC5C,MAAM,QAAQ,IAAI,KAAK,QAAQ,YAAW,GAAI,QAAQ,SAAQ,GAAI,CAAC;GACnE,IAAI,CAAC,UAAU,OAAO;GACtB,MAAM,QAAQ,SAAS;GACvB,MAAM,UACH,MAAM,YAAW,IAAK,MAAM,YAAW,KAAM,KAAK,MAAM,SAAQ,IAAK,MAAM,SAAQ;GACtF,IAAI,UAAU,KAAK,SAAS,OAAO,OAAO;GAC1C,OAAO,SAAS,IAAI,QAAQ,UAAU,OAAO,EAAE,QAAQ,EAAE;EAC3D;CAAC,CAAA;CAIgB,QAAQ,eAAc;EACvC,MAAM,YAAY,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI,EAAE,WAAW,OAAM,CAAE;EAC9E,MAAM,aAAa,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI;GAAE,OAAO;GAAQ,MAAM;EAAS,CAAE;EAC5F,MAAM,OAAO,KAAK,WAAU,IAAK;EACjC,OAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,WAAU,EAAE,IAAK,GAAG,UAAS;GAC5D,MAAM,QAAQ,UAAU,KAAK,UAAS,GAAI,KAAK;GAC/C,OAAO;IACL,KAAK,OAAO,KAAK;IACjB,OAAO,WAAW,OAAO,KAAK;IAC9B,OAAO,UAAU,OAAO,KAAK,SAAQ,CAAE,CAAC,CACrC,KAAK,UAAU;KACd,QAAQ,QAAQ,KAAK,MAAM,QAAQ,IAAI,OAAM,MAAO,CAAC,KAAK,KAAK,EAAE;KACjE,MAAM,KAAK,KAAK,SAAiB;MAC/B,MAAM,UAAU,CAAC,UAAU,MAAM,KAAK;MACtC,OAAO;OACL;OACA,KAAK,OAAO,IAAI;OAChB,OAAO,UAAU,OAAO,IAAI;OAC5B;OACA,OAAO,QAAQ;OACf,OAAO,QAAQ,MAAM,KAAK,KAAK;OAC/B,UAAU,KAAK,WAAW,IAAI;MAC/B;KACH,CAAC;IACF,EAAC,CAAC,CAEF,QAAQ,SAAS,CAAC,QAAQ,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI,KAAK,CAAC;GACjE;EACH,CAAC;CACH,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,SAAS,eAAc;EACxC,MAAM,SAAS,IAAI,KAAK,eAAe,KAAK,OAAM,GAAI,EAAE,OAAO,QAAO,CAAE;EACxE,OAAO,MAAM,KAAK,EAAE,QAAQ,GAAE,IAAK,GAAG,MAAM,OAAO,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;CACjF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,QAAQ,eAAc;EACvC,MAAM,OAAO,KAAK,QAAO,CAAE,CAAC,YAAW;EACvC,MAAM,QAAQ,QAAU,OAAO,KAAM,MAAM;EAC3C,OAAO,MAAM,KAAK,EAAE,QAAQ,GAAE,IAAK,GAAG,MAAM,QAAQ,CAAC;CACvD,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEF,WAAW,MAAU;EACnB,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,IAAI,OAAO,YAAY,MAAM,GAAG,IAAI,GAAG,OAAO;EAC9C,IAAI,OAAO,YAAY,MAAM,GAAG,IAAI,GAAG,OAAO;EAC9C,IAAI,KAAK,aAAY,CAAE,CAAC,SAAS,KAAK,OAAM,CAAE,GAAG,OAAO;EACxD,IAAI,KAAK,cAAa,CAAE,CAAC,MAAM,aAAa,QAAQ,UAAU,IAAI,CAAC,GAAG,OAAO;EAC7E,OAAO,KAAK,aAAY,CAAE,GAAG,IAAI,KAAK;CACxC;CAEU,WAAW,MAAU;EAC7B,IAAI,KAAK,KAAI,MAAO,UAAU,OAAO,QAAQ,MAAM,KAAK,SAAQ,CAAE;EAClE,IAAI,KAAK,KAAI,MAAO,YAAY,OAAO,KAAK,cAAa,CAAE,CAAC,MAAM,QAAQ,QAAQ,KAAK,IAAI,CAAC;EAC5F,MAAM,QAAQ,KAAK,MAAK;EACxB,OAAO,QAAQ,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM,OAAO,GAAG;CAChE;CAGU,QAAQ,MAAU;EAC1B,IAAI,KAAK,KAAI,MAAO,SAAS,OAAO;EACpC,MAAM,QAAQ,KAAK,MAAK;EACxB,MAAM,QAAQ,OAAO;EACrB,MAAM,MAAM,OAAO,QAAQ,QAAQ,KAAK,MAAK,IAAK;EAClD,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO;EAC3B,MAAM,CAAC,MAAM,MAAM,YAAY,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK;EAC5E,OAAO,YAAY,MAAM,IAAI,KAAK,KAAK,YAAY,MAAM,EAAE,KAAK;CAClE;CAEU,YAAY,MAAY,MAAqB;EACrD,IAAI,CAAC,KAAK,QAAQ,IAAI,GAAG,OAAO;EAChC,MAAM,QAAQ,KAAK,MAAK;EACxB,MAAM,IAAI,OAAO;EACjB,MAAM,IAAI,OAAO,OAAO,KAAK,MAAK;EAClC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO;EACrB,MAAM,CAAC,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;EAC1D,OAAO,QAAQ,MAAM,SAAS,UAAU,OAAO,EAAE;CACnD;CAEU,OAAO,MAAU;EACzB,IAAI,KAAK,WAAW,IAAI,GAAG;EAC3B,KAAK,QAAQ,IAAI,IAAI;EACrB,KAAK,WAAW,KAAK,IAAI;CAC3B;CAGA,cAAW;EACT,sBACO;GACH,MAAM,OAAO,KAAK,KAAK;GAKvB,CAHE,KAAK,KAAI,MAAO,QACZ,KAAK,cAA2B,eAAe,OAAO,KAAK,QAAO,CAAE,EAAC,GAAI,IACzE,KAAK,cAA2B,sCAAoC,EAC1E,EAAQ,MAAK;EACf,GACA,EAAE,UAAU,KAAK,SAAQ,CAAE;CAE/B;CAEU,KAAK,MAAY;EACzB,MAAM,UAAU,KAAK,QAAO;EAC5B,IAAI,KAAK,KAAI,MAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,SAAS,IAAI,CAAC;OAC/D,IAAI,KAAK,KAAI,MAAO,SAAS,KAAK,QAAQ,IAAI,UAAU,SAAS,OAAO,EAAE,CAAC;OAC3E,KAAK,QAAQ,IAAI,UAAU,SAAS,OAAO,GAAG,CAAC;CACtD;CAEU,aAAa,OAAoB;EACzC,MAAM,UAAU,KAAK,QAAO;EAC5B,MAAM,aAAa,QAAQ,OAAM,IAAK,KAAK,SAAQ,IAAK,KAAK;EAE7D,MAAM,MAAM,cAAc,KAAK;EAC/B,MAAM,QAAoC;GACxC,iBAAiB,QAAQ,SAAS,EAAE;GACpC,kBAAkB,QAAQ,SAAS,CAAC;GACpC,eAAe,QAAQ,SAAS,EAAE;GAClC,iBAAiB,QAAQ,SAAS,CAAC;GACnC,YAAY,QAAQ,SAAS,CAAC,SAAS;GACvC,WAAW,QAAQ,SAAS,IAAI,SAAS;GACzC,cAAc,UAAU,SAAS,MAAM,WAAW,MAAM,EAAE;GAC1D,gBAAgB,UAAU,SAAS,MAAM,WAAW,KAAK,CAAC;EAC3D;EACD,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;GAC9C,MAAM,eAAc;GACpB,KAAK,OAAO,OAAO;GACnB;EACF;EACA,MAAM,OAAO,MAAM;EACnB,IAAI,CAAC,MAAM;EACX,MAAM,eAAc;EACpB,KAAK,QAAQ,IAAI,KAAI,CAAE;EACvB,KAAK,YAAW;CAClB;CAEU,gBAAgB,OAAsB,MAAsB;EAOpE,MAAM,OAAO;GALX,WAAW;GACX,YAAY;GACZ,SAAS;GACT,WAAW;EAEA,EAAM,cAAc,KAAK;EACtC,IAAI,SAAS,QAAW;EACxB,MAAM,eAAc;EACpB,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAO,GAAI,SAAS,UAAU,OAAO,OAAO,EAAE,CAAC;EAC/E,KAAK,YAAW;CAClB;CAEU,UAAU,OAAa;EAC/B,MAAM,UAAU,KAAK,QAAO;EAC5B,KAAK,QAAQ,IAAI,UAAU,SAAS,QAAQ,QAAQ,SAAQ,CAAE,CAAC;EAC/D,IAAI,KAAK,YAAW,MAAO,SAAS;GAClC,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,YAAW,GAAI,OAAO,CAAC,CAAC;GAC9D;EACF;EACA,KAAK,KAAK,IAAI,KAAK;EACnB,KAAK,YAAW;CAClB;CAEU,SAAS,MAAY;EAC7B,MAAM,UAAU,KAAK,QAAO;EAC5B,KAAK,QAAQ,IAAI,UAAU,UAAU,OAAO,QAAQ,YAAW,KAAM,EAAE,CAAC;EACxE,IAAI,KAAK,YAAW,MAAO,QAAQ;GACjC,KAAK,WAAW,KAAK,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC;GACzC;EACF;EACA,KAAK,KAAK,IAAI,OAAO;EACrB,KAAK,YAAW;CAClB;CAEU,cAAc,OAAa;EACnC,MAAM,OAAO,KAAK,QAAO,CAAE,CAAC,YAAW;EACvC,MAAM,QAAQ,IAAI,KAAK,MAAM,OAAO,CAAC;EACrC,MAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;EACxC,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,OAAQ,CAAC,CAAC,OAAO,YAAY,MAAM,GAAG,IAAI,KAAO,CAAC,CAAC,OAAO,YAAY,OAAO,GAAG,IAAI;CACtF;CAEU,aAAa,MAAY;EACjC,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,OAAQ,CAAC,CAAC,OAAO,OAAO,IAAI,YAAW,KAAQ,CAAC,CAAC,OAAO,OAAO,IAAI,YAAW;CAChF;CAlRW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAY,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAZ,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAY,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,YAAA,aAAA;EAAA,MAAA,EAAA,gBAAA,gBAAA;EAAA,UAAA;EAAA,UAzKb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuKT,UAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAY,YAAA,CAAA;EA7KxB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,iBAAiB,wBAAwB;GACzC,MAAM,EAAE,OAAO,gBAAe;GAC9B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwKX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrMD,MAAM,cAA0C;CAC9C,MAAM;CACN,QAAQ;CACR,WAAW;AACZ;AAGD,SAAS,OAAO,MAAY,OAAe,SAAe;CACxD,OAAO,IAAI,KAAK,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,GAAI,OAAO,OAAO;AACrF;AAEA,MAAM,kBAAuC;CAC3C;EAAE,SAAS;EAAS,SAAS;EAAU,UAAU;EAAS,UAAU;EAAO,SAAS;CAAC;CACrF;EAAE,SAAS;EAAS,SAAS;EAAO,UAAU;EAAS,UAAU;EAAU,SAAS;CAAE;CACtF;EAAE,SAAS;EAAO,SAAS;EAAU,UAAU;EAAO,UAAU;EAAO,SAAS;CAAC;AAClF;AAOD,IAAsB,oBAAtB,MAAsB,kBAAiB;CAEpB,gBAAgB,OAAO,oBAAoB;CACzC,OAAO,OAAO,YAAY;CAC5B,MAAM,OAAO,YAAY;CAIjC,cAAc,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,UAAU,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,UAAU,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,gBAAgB,MAAuB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,eAAe,MAAyB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC3C,eAAe,MAAwC,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC5D,iBAAiB,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAE3C,SAAS,MAA0B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAE7C,aAAa,MAAkC,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAEnE,iBAAiB,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAKrD,aAAa,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,gBAAgB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,gBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC1D,YAAY,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAEtD,gBAAgB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,gBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC1D,OAAO,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,YAAY,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,UAAU,MAAM,KAAK,IAAI,MAAM,YAAY,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAE7C,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,OAAO,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEhB,QAAQ,OAAM;CACd,SAAS,OAAM;CACf,SAAS,OAAM;CAEL,YAAY;CACZ,UAAU,KAAK,IAAI,MAAM,kBAAkB;CAC3C,OAAO,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACpB,cAAc,eAAe,KAAK,QAAO,KAAM,KAAK,QAAO,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,cAAc,eAAe,CAAC,KAAK,SAAQ,KAAM,CAAC,KAAK,SAAQ,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAClE,OAAO,eAAe,KAAK,YAAW,KAAM,WAAW,KAAK,OAAM,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGtE,oBAAmC;CACnC,iBAA+B;CACxC,aAAU;EAClB,OAAO,CAAA;CACT;CAEmB,sBAA6C,CAAA;CAE7C,oBAA4C;CAE5C,QAAQ,UAAU,SAAuC,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACjE,UAAU,UAAU,SAAkC,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAChE,WAAW,UAAU,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAKlC,QAAQ,mBAAmB,KAAK,YAAW,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAKvD,OAAO,MAAiB;EAChC,OAAO,WAAW,MAAM,KAAK,OAAM,GAAI,KAAK,WAAU,CAAE;CAC1D;CAEU,QAAQ,MAAU;EAC1B,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,QACG,CAAC,OAAO,YAAY,MAAM,GAAG,KAAK,OAClC,CAAC,OAAO,YAAY,MAAM,GAAG,KAAK,MACnC,CAAC,KAAK,aAAY,CAAE,CAAC,SAAS,KAAK,OAAM,CAAE,KAC3C,CAAC,KAAK,cAAa,CAAE,CAAC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAClD,CAAC,KAAK,aAAY,CAAE,GAAG,IAAI;CAE/B;CAEA,YAAS;EACP,IAAI,CAAC,KAAK,YAAW,KAAM,KAAK,KAAI,GAAI;EACxC,KAAK,KAAK,IAAI,IAAI;EAClB,KAAK,OAAO,KAAI;CAClB;CAEA,WAAW,aAAa,MAAI;EAC1B,IAAI,CAAC,KAAK,KAAI,GAAI;EAClB,KAAK,KAAK,IAAI,KAAK;EACnB,IAAI,YAAY,KAAK,MAAK,CAAE,CAAC,cAAc,MAAK;EAChD,KAAK,OAAO,KAAI;CAClB;CAEU,cAAW;EACnB,IAAI,KAAK,KAAI,GAAI,KAAK,WAAU;OAC3B,KAAK,UAAS;CACrB;CAEU,aAAU;EAClB,KAAK,SAAQ,CAAE,EAAE,YAAW;CAC9B;CAEU,eAAe,OAAiB;EACxC,IAAI,KAAK,QAAO,CAAE,CAAC,cAAc,SAAS,MAAM,MAAc,GAAG;EACjE,KAAK,WAAW,KAAK;EACrB,KAAK,MAAM,KAAI;CACjB;CAGU,cAAW;EACnB,MAAM,OAAO,KAAK,MAAK;EACvB,IAAI,SAAS,KAAK,YAAW,GAAI;EACjC,MAAM,SAAS,KAAK,KAAI,IAAK,KAAK,UAAU,IAAI,IAAI,KAAK,WAAU;EACnE,IAAI,WAAW,QAAW,KAAK,WAAU;OACpC,KAAK,MAAM,IAAI,MAAM;CAC5B;CAMQ,aAAU;EAChB,MAAM,OAAO,KAAK,YAAW;EAC7B,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,MAAK,CAAE,CAAC,cAAc,QAAQ;CACrC;CAEU,cAAW;EACnB,KAAK,YAAW;EAChB,IAAI,CAAC,KAAK,KAAI,GAAI,KAAK,MAAM,KAAI;CACnC;CAEU,eAAe,OAAoB;EAC3C,IAAI,MAAM,QAAQ,gBAAgB,MAAM,UAAU,CAAC,KAAK,KAAI,IAAK;GAC/D,MAAM,eAAc;GACpB,KAAK,UAAS;EAChB,OAAO,IAAI,MAAM,QAAQ,SACvB,KAAK,YAAW;OACX,IAAI,MAAM,QAAQ,YAAY,KAAK,KAAI,GAAI;GAChD,MAAM,eAAc;GACpB,KAAK,WAAU;EACjB;CACF;CAEU,eAAe,OAAoB;EAC3C,IAAI,MAAM,QAAQ,UAAU;GAC1B,MAAM,eAAc;GACpB,MAAM,gBAAe;GACrB,KAAK,WAAU;EACjB;CACF;CAEU,QAAK;EACb,KAAK,UAAU,2BAAW,IAAI,KAAI,CAAE,CAAC;CACvC;CAEA,QAAK;EACH,KAAK,MAAM,IAAI,KAAK,WAAU,CAAE;EAChC,KAAK,WAAU;CACjB;CAEA,MAAM,SAAsB;EAC1B,KAAK,MAAK,CAAE,CAAC,cAAc,MAAM,OAAO;CAC1C;CAEU,SAAS,MAAY;EAC7B,MAAM,OAAO,UAAU,MAAM,KAAK,OAAM,CAAE;EAC1C,OAAO,QAAQ,KAAK,QAAQ,IAAI,IAAI,OAAO;CAC7C;CAMU,cAAc,MAAc,OAAe,SAAe;EAClE,MAAM,QACJ,2FAA2F,KACzF,KAAK,KAAI,CAAE;EAEf,MAAM,OAAO,KAAK,SAAS,QAAS,MAAM,MAAM,MAAM,KAAM,IAAI;EAChE,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,CAAC,OAAO,OAAO,OAAO,MAAM,OAAO,OAAO;EAC9C,IAAI,IAAI,OAAO,MAAM,MAAM,MAAM,EAAE;EACnC,MAAM,IAAI,OAAO,MAAM,MAAM,MAAM,EAAE;EACrC,MAAM,WAAW,MAAM,EAAE,EAAE,YAAW;EACtC,IAAI,UAAU;GACZ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO;GAC5B,IAAK,IAAI,MAAO,aAAa,MAAM,KAAK;EAC1C;EACA,OAAO,IAAI,MAAM,IAAI,KAAK,SAAY,OAAO,MAAM,GAAG,CAAC;CACzD;CAGU,UAAU,MAAU;EAC5B,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,IAAI,OAAO,KAAK,QAAO,IAAK,IAAI,QAAO,GAAI,OAAO,IAAI,KAAK,GAAG;EAC9D,IAAI,OAAO,KAAK,QAAO,IAAK,IAAI,QAAO,GAAI,OAAO,IAAI,KAAK,GAAG;EAC9D,OAAO;CACT;CAEU,WAAQ;EAChB,OAAO,KAAK,WAAU,MAAO,OAAO,cAAc;CACpD;CAEU,eAAe,MAAiB;EACxC,OAAO,WAAW,MAAM,KAAK,OAAM,GAAI;GACrC,GAAG,KAAK,WAAU;GAClB,GAAG;GACH,WAAW,KAAK,WAAU,MAAO,OAAO,QAAQ;EACjD,CAAA;CACH;CAhOoB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,QAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,QAAA;GAAA,QAAA;EAAA;EAAA,aAAA;GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,OAAA;IAAA,aAAA;IAAA,UAAA;GAAA;GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,SAAA;IAAA,aAAA;IAAA,UAAA;GAAA;GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAmEG;IAAY,aAAA;IAAA,UAAA;GAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAnEhC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA,EADtC,MAAA,UAkE6E,CAAA;CAAA,gBAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,OAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,QAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,QAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,SAAO,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CACV,WAAS,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAC1C,YAAY,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AAwKtD,SAAS,OAAO,MAA6B;CAC3C,MAAM,OAAO,SAAiB,OAAO,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;CAC1D,OAAO,OAAO,GAAG,IAAI,KAAK,SAAQ,CAAE,EAAC,GAAI,IAAI,KAAK,WAAU,CAAE,MAAM;AACtE;AAGA,SAAS,SAAS,MAA+B,MAAY;CAC3D,MAAM,QAAQ,mBAAmB,KAAK,IAAI;CAC1C,OAAO,QAAQ,QAAQ,OAAO,MAAM,OAAO,MAAM,EAAE,GAAG,OAAO,MAAM,EAAE,CAAC,IAAI;AAC5E;AAEA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGjB,MAAM,OAAO;CACX,OAAO;CACP,2BAA2B;CAC3B,+BAA+B;CAC/B,8BAA8B;CAC9B,yBAAyB;AAC1B;AAuBD,IAAa,iBAAb,MAAa,uBACH,kBAA8B;CAG7B,QAAQ,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEhC,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAErD,aAAa,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAErB,OAAO,MAAwB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,aAAa,OAAM;CAET,OAAO;CACE,oBAAoB,KAAK,SAAQ,KAAM,KAAK,KAAI,MAAO;CACvD,iBAAiB,KAAK,IAAI,GAAG,KAAK,WAAU,CAAE,IAAI;CAClD,cAAc,KAAK;CACnB,OAAO,eAAc;EAC/C,IAAI,KAAK,YAAW,GAAI,OAAO,KAAK,YAAW;EAC/C,IAAI,KAAK,KAAI,MAAO,SAAS,OAAO;EACpC,IAAI,KAAK,KAAI,MAAO,QAAQ,OAAO;EACnC,OAAO,WAAW,KAAK,OAAM,CAAE,KAAK,KAAK,SAAQ,IAAK,KAAK,SAAQ,IAAK;CAC1E,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACiB,oBAAmB;EACpC,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,CAAC,OAAO,OAAO;EACnB,IAAI,KAAK,KAAI,MAAO,QAAQ,OAAO,OAAO,MAAM,YAAW,CAAE;EAC7D,IAAI,KAAK,KAAI,MAAO,SAClB,OAAO,GAAG,OAAO,MAAM,SAAQ,IAAK,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,EAAC,GAAI,MAAM,YAAW;EAE9E,OAAO,KAAK,YAAW,IAAK,KAAK,eAAe,KAAK,IAAI,KAAK,OAAO,KAAK;CAC5E;CACmB,WAAW,eAAe,KAAK,MAAK,MAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,mBAAmB,KAAK;CACxB,gBAAgB,OAA6B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAE3D,UAAU,MAAY;EAC9B,IAAI,KAAK,KAAI,MAAO,OAAO,OAAO,KAAK,YAAY,KAAK,KAAI,CAAE;EAC9D,IAAI,CAAC,KAAK,YAAW,GAAI,OAAO,KAAK,SAAS,IAAI;EAClD,MAAM,UAAU,KAAK,MAAK;EAC1B,MAAM,OAAO,KAAK,cAAc,MAAM,SAAS,SAAQ,KAAM,GAAG,SAAS,WAAU,KAAM,CAAC;EAC1F,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAO,MAAO,KAAK,QAAO,IAAK,OAAO;CAC5E;CAGQ,YAAY,MAAY;EAC9B,MAAM,OAAO,YAAY,KAAK,IAAI;EAClC,MAAM,QAAQ,4BAA4B,KAAK,IAAI;EACnD,MAAM,MAAM,sBAAsB,KAAK,IAAI;EAC3C,IAAI,OAAoB;EACxB,IAAI,KAAK,KAAI,MAAO,UAAU,MAAM,OAAO,IAAI,KAAK,OAAO,KAAK,EAAE,GAAG,GAAG,CAAC;OACpE,IAAI,KAAK,KAAI,MAAO,WAAW,OAClC,OAAO,IAAI,KAAK,OAAO,MAAM,EAAE,GAAG,OAAO,MAAM,EAAE,IAAI,GAAG,CAAC;OACtD,IAAI,KAAK,KAAI,MAAO,WAAW,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,IAAI,GAAG,CAAC;EAC9F,IAAI,CAAC,QAAQ,KAAK,SAAQ,IAAK,MAAM,OAAO,MAAM,KAAK,QAAO,CAAE,GAAG,OAAO;EAC1E,IAAI,UAAU,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO;EACrE,IAAI,QAAQ,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO;EAC/D,OAAO,KAAK,cAAc,IAAI,IAAI,OAAO;CAC3C;CAGQ,cAAc,OAAW;EAC/B,MAAM,OACJ,KAAK,KAAI,MAAO,SACZ,IAAI,KAAK,MAAM,YAAW,GAAI,IAAI,EAAE,IACpC,IAAI,KAAK,MAAM,YAAW,GAAI,MAAM,SAAQ,IAAK,GAAG,CAAC;EAC3D,MAAM,MAAM,KAAK,QAAO;EACxB,MAAM,MAAM,KAAK,QAAO;EACxB,QAAQ,CAAC,OAAO,YAAY,MAAM,GAAG,KAAK,OAAO,CAAC,OAAO,YAAY,OAAO,GAAG,KAAK;CACtF;CAEU,aAAU;EAClB,OAAO;CACT;CAEU,UAAU,OAAW;EAC7B,IAAI,KAAK,KAAI,MAAO,SAClB,OAAO,KAAK,aAAa,IAAI,KAAK,MAAM,YAAW,GAAI,MAAM,SAAQ,GAAI,CAAC,CAAC;EAC7E,IAAI,KAAK,KAAI,MAAO,QAAQ,OAAO,KAAK,aAAa,IAAI,KAAK,MAAM,YAAW,GAAI,GAAG,CAAC,CAAC;EACxF,IAAI,CAAC,KAAK,QAAQ,KAAK,GAAG;EAC1B,IAAI,CAAC,KAAK,YAAW,GAAI,OAAO,KAAK,aAAa,KAAK;EACvD,KAAK,SAAS,KAAK,cAAc,KAAK,CAAC;CACzC;CAEU,aAAa,MAAU;EAC/B,IAAI,CAAC,KAAK,YAAW,GAAI;GACvB,KAAK,SAAS,IAAI;GAClB,KAAK,WAAU;GACf;EACF;EAEA,MAAM,UAAU,KAAK,MAAK;EAC1B,KAAK,SACH,UAAU,OAAO,MAAM,QAAQ,SAAQ,GAAI,QAAQ,WAAU,CAAE,IAAI,KAAK,cAAc,IAAI,CAAC;CAE/F;CAEmB,aAAU;EAC3B,OAAO,CACL;GACE,OAAO,KAAK,KAAK;GACjB,OAAO,OAAO,KAAK,MAAK,CAAE;GAC1B,MAAM,SAAQ;IACZ,MAAM,OAAO,SAAS,KAAK,MAAK,GAAI,IAAI;IACxC,IAAI,MAAM,KAAK,SAAS,IAAI;GAC9B;EACD,CACF;CACH;CAGQ,cAAc,MAAU;EAC9B,MAAM,sBAAM,IAAI,KAAI;EACpB,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,WAAU,CAAE;EAC1C,OAAO,OAAO,MAAM,IAAI,SAAQ,GAAI,IAAI,WAAU,IAAM,IAAI,WAAU,IAAK,IAAK;CAClF;CAEQ,SAAS,MAAU;EACzB,MAAM,OAAO,KAAK,YAAW,IAAK,KAAK,UAAU,IAAI,IAAI;EACzD,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,WAAW,KAAK,IAAI;CAC3B;CAzHW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAc,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,YAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,yBAAA;IAAA,6BAAA;IAAA,4BAAA;IAAA,uBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MALf;IAAmB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,qBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAgB,UAAA;IAAA,UAAA,CAAA,kBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAY,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,YAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKlD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAP1B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS;IAAC;IAAqB;IAAkB;GAAY;GAC7D,iBAAiB,wBAAwB;GACzC,MAAM;GACN,UAAU;EACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyID,IAAa,sBAAb,MAAa,4BACH,kBAAuC;CAGtC,QAAQ,MAA4B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAKzC,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAErD,aAAa,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,cAAc,OAAM;CAEV,OAAO;CACE,cAAc,KAAK;CACnB,iBAAiB,KAAK,IAAI,GAAG,KAAK,WAAU,CAAE,IAAI;CAClD,OAAO,eAE/B,KAAK,YAAW,KAAM,WAAW,KAAK,OAAM,CAAE,KAAK,KAAK,SAAQ,IAAK,KAAK,SAAQ,IAAK,KAC1F,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACgB,QAAQ,SACvB,KAAK,SAAQ,IAAK,KAAK,eAAe,IAAI,IAAI,KAAK,OAAO,IAAI;CAE7C,aAAU;EAC3B,MAAM,QAAQ,KAAK,MAAK;EACxB,MAAM,UAAU,UAA2B,SAAgB;GACzD,MAAM,UAAU,KAAK,MAAK;GAC1B,MAAM,OAAO,SAAS,UAAU,OAAO,IAAI;GAC3C,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM;GAC9B,MAAM,UAAU;IAAE,GAAG;KAAU,OAAO,KAAK,UAAU,IAAI;GAAC;GAE1D,IAAI,QAAQ,OAAO,QAAQ,SAAS,QAAQ,IAAI,QAAO,IAAK,QAAQ,MAAM,QAAO,GAAI;GACrF,KAAK,MAAM,IAAI,OAAO;GACtB,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,OAAO;EAChD;EACA,OAAO,CACL;GAAE,OAAO,KAAK,KAAK;GAAW,OAAO,OAAO,OAAO,KAAK;GAAG,KAAK,OAAO,OAAO;EAAC,GAC/E;GAAE,OAAO,KAAK,KAAK;GAAS,OAAO,OAAO,OAAO,GAAG;GAAG,KAAK,OAAO,KAAK;EAAC,CAC1E;CACH;CACmB,WAAW,eAAe,CAAC,CAAC,KAAK,MAAK,CAAE,EAAE,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,mBAAmB,OAAoB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,gBAAgB,KAAK;CAErB,oBAAmB;EACpC,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,CAAC,OAAO,OAAO,OAAO;EAC1B,OAAO,MAAM,MACT,GAAG,KAAK,KAAK,MAAM,KAAK,EAAC,KAAM,KAAK,KAAK,MAAM,GAAG,MAClD,GAAG,KAAK,KAAK,MAAM,KAAK,EAAC;CAC/B;CAEU,UAAU,MAAY;EAE9B,MAAM,QAAQ,KAAK,MAAM,uBAAuB,CAAC,CAAC,QAAQ,SAAS,KAAK,KAAI,CAAE;EAC9E,IAAI,MAAM,WAAW,GAAG,OAAO;EAC/B,IAAI,KAAK,SAAQ,GAAI;GACnB,MAAM,OAAO,KAAK,cAAc,MAAM,IAAI,GAAG,CAAC;GAC9C,MAAM,KAAK,KAAK,cAAc,MAAM,IAAI,IAAI,EAAE;GAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO;GACzB,OAAO,KAAK,QAAO,KAAM,GAAG,QAAO,IAAK;IAAE,OAAO;IAAM,KAAK;GAAE,IAAK;IAAE,OAAO;IAAI,KAAK;GAAI;EAC3F;EACA,MAAM,QAAQ,KAAK,SAAS,MAAM,EAAE;EACpC,MAAM,MAAM,KAAK,SAAS,MAAM,EAAE;EAClC,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO;EAC3B,OAAO,YAAY,OAAO,GAAG,KAAK,IAAI;GAAE;GAAO;EAAG,IAAK;GAAE,OAAO;GAAK,KAAK;EAAK;CACjF;CAEU,aAAU;EAClB,OAAO;CACT;CAEU,UAAU,OAAW;EAC7B,IAAI,CAAC,KAAK,QAAQ,KAAK,GAAG;EAC1B,IAAI,KAAK,SAAQ,GAAI;GACnB,KAAK,MAAM,IAAI;IACb,OAAO,KAAK,UAAU,OAAO,OAAO,GAAG,CAAC,CAAC;IACzC,KAAK,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,CAAC;GAC1C,CAAA;GACD;EACF;EACA,KAAK,MAAM,IAAI;GAAE,OAAO;GAAO,KAAK;EAAK,CAAE;EAC3C,KAAK,WAAU;CACjB;CAEU,aAAa,MAAU;EAC/B,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,CAAC,OAAO,SAAS,MAAM,KAAK;GAC9B,KAAK,MAAM,IAAI;IACb,OAAO,KAAK,SAAQ,IAAK,KAAK,UAAU,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI;IAC9D,KAAK;GACN,CAAA;GACD;EACF;EACA,MAAM,CAAC,OAAO,QACZ,YAAY,MAAM,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI;EAC/E,MAAM,OAAO,KAAK,SAAQ,IACtB;GACE,OAAO,KAAK,UAAU,OAAO,OAAO,GAAG,CAAC,CAAC;GACzC,KAAK,KAAK,UAAU,OAAO,MAAM,IAAI,EAAE,CAAC;EACzC,IACD;GAAE,OAAO;GAAO,KAAK;EAAI;EAC7B,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,YAAY,KAAK,IAAI;EAE1B,IAAI,CAAC,KAAK,SAAQ,GAAI,KAAK,WAAU;CACvC;CA3GW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,aAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,yBAAA;IAAA,6BAAA;IAAA,4BAAA;IAAA,uBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MALpB;IAAmB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,qBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAgB,UAAA;IAAA,UAAA,CAAA,kBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAY,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,YAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKlD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAP/B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS;IAAC;IAAqB;IAAkB;GAAY;GAC7D,iBAAiB,wBAAwB;GACzC,MAAM;IAAE,GAAG;IAAM,OAAO;GAA4B;GACpD,UAAU;EACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2HD,IAAa,sBAAb,MAAa,4BACH,kBAAkC;CAGjC,QAAQ,MAAuB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAElC,WAAW,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAET,OAAO;CACP,WAAW,eAAe,KAAK,MAAK,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAClD,mBAAmB,OAAoB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,gBAAgB,OAA6B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CACzC,gBAAgB,KAAK;CAE9B,oBACjB,KAAK,MAAK,CAAE,CACT,KAAK,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAChC,KAAK,IAAI;CAEJ,UAAU,MAAY;EAC9B,MAAM,QAAgB,CAAA;EACtB,KAAK,MAAM,QAAQ,KAAK,MAAM,YAAY,CAAC,CAAC,QAAQ,SAAS,KAAK,KAAI,CAAE,GAAG;GACzE,MAAM,OAAO,KAAK,SAAS,IAAI;GAC/B,IAAI,CAAC,MAAM,OAAO;GAClB,IAAI,CAAC,MAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI;EAC/D;EACA,IAAI,KAAK,SAAQ,IAAK,KAAK,MAAM,SAAS,KAAK,SAAQ,GAAI,OAAO;EAClE,OAAO,MAAM,MAAM,GAAG,MAAM,EAAE,QAAO,IAAK,EAAE,QAAO,CAAE;CACvD;CAEU,aAAU;EAClB,OAAO,CAAA;CACT;CAEU,UAAU,OAAW;EAC7B,IAAI,KAAK,QAAQ,KAAK,KAAK,CAAC,KAAK,MAAK,CAAE,CAAC,MAAM,QAAQ,QAAQ,KAAK,KAAK,CAAC,GACxE,KAAK,aAAa,KAAK;CAE3B;CAEU,aAAa,MAAU;EAC/B,MAAM,OAAO,KAAK,MAAK;EACvB,IAAI,KAAK,MAAM,QAAQ,QAAQ,KAAK,IAAI,CAAC,GACvC,KAAK,MAAM,IAAI,KAAK,QAAQ,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;OACnD,IAAI,KAAK,SAAQ,KAAM,KAAK,KAAK,SAAS,KAAK,SAAQ,GAC5D,KAAK,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,QAAO,IAAK,EAAE,QAAO,CAAE,CAAC;CAE5E;CA/CW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,OAAA,cAAA;EAAA,MAAA;GAAA,YAAA;IAAA,yBAAA;IAAA,6BAAA;IAAA,4BAAA;IAAA,uBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MALpB;IAAmB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,qBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAgB,UAAA;IAAA,UAAA,CAAA,kBAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAY,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,YAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKlD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAP/B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS;IAAC;IAAqB;IAAkB;GAAY;GAC7D,iBAAiB,wBAAwB;GACzC,MAAM;IAAE,GAAG;IAAM,OAAO;GAA+B;GACvD,UAAU;EACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;ACloBD,IAAa,iBAAb,MAAa,eAAc;CAEhB,QAAQ,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAElC,MAAM,MAA0B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,MAAM,MAA0B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,aAAa,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,OAAO,MAAmB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,YAAY,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,UAAU,MAAM,OAAO,YAAY,CAAC,CAAC,MAAM,YAAY,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACzD,OAAO,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEhB,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,QAAQ,OAAM;CAEJ,OAAO,eAAe,KAAK,IAAI,GAAG,KAAK,WAAU,CAAE,IAAI,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC5D,QAAQ,UAAU,SAAuC,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAExE,SAAS,MAAY;EAE7B,MAAM,QAAQ,mBAAmB,KAAK,IAAI;EAC1C,KAAK,MAAM,IAAI,QAAQ,GAAG,MAAM,GAAE,GAAI,MAAM,OAAO,IAAI;CACzD;CAEA,MAAM,SAAsB;EAC1B,KAAK,MAAK,CAAE,CAAC,cAAc,MAAM,OAAO;CAC1C;CA9BW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAc,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,OAAA;EAAA;EAAA,MAAA,EAAA,gBAAA,YAAA;EAAA,aAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAAA,CAAA,OAAA;GAAA,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,UAAA;EAAA,UAtBf;;;;;;;;;;;;;;;;;;;;;EAoBT,UAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EA1B1B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,iBAAiB,wBAAwB;GACzC,MAAM,EAAE,OAAO,YAAW;GAC1B,UAAU;;;;;;;;;;;;;;;;;;;;;EAqBX,CAAA;CAqB2E,CAAA;CAAA,gBAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,GAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,aAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,OAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,SAAO,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|