ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
1 lines • 107 kB
Source Map (JSON)
{"version":3,"file":"ng-zorro-antd-core-time.mjs","sources":["../../components/core/time/candy-date.ts","../../components/core/time/time.ts","../../components/core/time/date-config.ts","../../components/core/time/date-adapter.ts","../../components/core/time/date-fns-adapter.ts","../../components/core/time/native-adapter.ts","../../components/core/time/time-parser.ts","../../components/core/time/public-api.ts","../../components/core/time/ng-zorro-antd-core-time.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n addMonths,\n addYears,\n differenceInCalendarDays,\n differenceInCalendarMonths,\n differenceInCalendarQuarters,\n differenceInCalendarYears,\n differenceInHours,\n differenceInMinutes,\n differenceInSeconds,\n getQuarter,\n isFirstDayOfMonth,\n isLastDayOfMonth,\n isSameDay,\n isSameHour,\n isSameMinute,\n isSameMonth,\n isSameQuarter,\n isSameSecond,\n isSameYear,\n isToday,\n isValid,\n setDay,\n setMonth,\n setQuarter,\n setYear,\n startOfMonth,\n startOfWeek\n} from 'date-fns';\n\nimport { warn } from 'ng-zorro-antd/core/logger';\nimport { IndexableObject, NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { WeekDayIndex } from './date-config';\n\n/**\n * @deprecated Will be removed in v23.\n */\nexport type CandyDateMode = 'decade' | 'year' | 'quarter' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\n/**\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport type NormalizedMode = 'decade' | 'year' | 'month';\n\n/**\n * @deprecated Use `Date` and `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport type CandyDateType = CandyDate | Date | null | undefined;\n\n/**\n * @deprecated Use `Date | null` directly instead. Will be removed in v23.\n */\nexport type SingleValue = CandyDate | null;\n\n/**\n * @deprecated Use `Date | null` or `(Date | null)[]` directly instead. Will be removed in v23.\n */\nexport type CompatibleValue = SingleValue | SingleValue[];\n\n/**\n * @deprecated Will be removed in v23.\n */\nexport function wrongSortOrder(rangeValue: SingleValue[]): boolean {\n const [start, end] = rangeValue;\n return !!start && !!end && end.isBeforeDay(start);\n}\n\n/**\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport function normalizeRangeValue(\n value: SingleValue[],\n hasTimePicker: boolean,\n type: NormalizedMode = 'month',\n activePart: 'left' | 'right' = 'left'\n): CandyDate[] {\n const [start, end] = value;\n let newStart: CandyDate = start || new CandyDate();\n let newEnd: CandyDate = end || (hasTimePicker ? newStart : newStart.add(1, type));\n\n if (start && !end) {\n newStart = start;\n newEnd = hasTimePicker ? start : start.add(1, type);\n } else if (!start && end) {\n newStart = hasTimePicker ? end : end.add(-1, type);\n newEnd = end;\n } else if (start && end && !hasTimePicker) {\n if (start.isSame(end, type)) {\n newEnd = newStart.add(1, type);\n } else {\n if (activePart === 'left') {\n newEnd = newStart.add(1, type);\n } else {\n newStart = newEnd.add(-1, type);\n }\n }\n }\n return [newStart, newEnd];\n}\n\n/**\n * @deprecated Use `Date` cloning directly instead. Will be removed in v23.\n */\nexport function cloneDate(value: CompatibleValue): CompatibleValue {\n if (Array.isArray(value)) {\n return value.map(v => (v instanceof CandyDate ? v.clone() : null));\n } else {\n return value instanceof CandyDate ? value.clone() : null;\n }\n}\n\n/**\n * Wrapping kind APIs for date operating and unify\n * NOTE: every new API return new CandyDate object without side effects to the former Date object\n * NOTE: most APIs are based on local time other than customized locale id (this needs tobe support in future)\n * TODO: support format() against to angular's core API\n *\n * @deprecated Use `NzDateAdapter` directly instead. Will be removed in v23.\n */\nexport class CandyDate implements IndexableObject {\n nativeDate: Date;\n // locale: string; // Custom specified locale ID\n\n constructor(date?: Date | string | number) {\n if (date) {\n if (date instanceof Date) {\n this.nativeDate = date;\n } else if (typeof date === 'string' || typeof date === 'number') {\n warn('The string type is not recommended for date-picker, use \"Date\" type');\n this.nativeDate = new Date(date);\n } else {\n throw new Error('The input date type is not supported (\"Date\" is now recommended)');\n }\n } else {\n this.nativeDate = new Date();\n }\n }\n\n calendarStart(options?: { weekStartsOn: WeekDayIndex | undefined }): CandyDate {\n return new CandyDate(startOfWeek(startOfMonth(this.nativeDate), options));\n }\n\n // ---------------------------------------------------------------------\n // | Native shortcuts\n // -----------------------------------------------------------------------------\\\n\n getYear(): number {\n return this.nativeDate.getFullYear();\n }\n\n getMonth(): number {\n return this.nativeDate.getMonth();\n }\n\n getDay(): number {\n return this.nativeDate.getDay();\n }\n\n getTime(): number {\n return this.nativeDate.getTime();\n }\n\n getDate(): number {\n return this.nativeDate.getDate();\n }\n\n getHours(): number {\n return this.nativeDate.getHours();\n }\n\n getMinutes(): number {\n return this.nativeDate.getMinutes();\n }\n\n getSeconds(): number {\n return this.nativeDate.getSeconds();\n }\n\n getMilliseconds(): number {\n return this.nativeDate.getMilliseconds();\n }\n\n // ---------------------------------------------------------------------\n // | New implementing APIs\n // ---------------------------------------------------------------------\n\n clone(): CandyDate {\n return new CandyDate(new Date(this.nativeDate));\n }\n\n setHms(hour: number, minute: number, second: number): CandyDate {\n const newDate = new Date(this.nativeDate.setHours(hour, minute, second));\n return new CandyDate(newDate);\n }\n\n setYear(year: number): CandyDate {\n return new CandyDate(setYear(this.nativeDate, year));\n }\n\n addYears(amount: number): CandyDate {\n return new CandyDate(addYears(this.nativeDate, amount));\n }\n\n // NOTE: month starts from 0\n // NOTE: Don't use the native API for month manipulation as it not restrict the date when it overflows, eg. (new Date('2018-7-31')).setMonth(1) will be date of 2018-3-03 instead of 2018-2-28\n setMonth(month: number): CandyDate {\n return new CandyDate(setMonth(this.nativeDate, month));\n }\n\n addMonths(amount: number): CandyDate {\n return new CandyDate(addMonths(this.nativeDate, amount));\n }\n\n setDay(day: number, options?: { weekStartsOn: WeekDayIndex }): CandyDate {\n return new CandyDate(setDay(this.nativeDate, day, options));\n }\n\n setDate(amount: number): CandyDate {\n const date = new Date(this.nativeDate);\n date.setDate(amount);\n return new CandyDate(date);\n }\n\n getQuarter(): number {\n return getQuarter(this.nativeDate);\n }\n\n setQuarter(quarter: number): CandyDate {\n return new CandyDate(setQuarter(this.nativeDate, quarter));\n }\n\n addDays(amount: number): CandyDate {\n return this.setDate(this.getDate() + amount);\n }\n\n add(amount: number, mode: NormalizedMode): CandyDate {\n switch (mode) {\n case 'decade':\n return this.addYears(amount * 10);\n case 'year':\n return this.addYears(amount);\n case 'month':\n return this.addMonths(amount);\n default:\n return this.addMonths(amount);\n }\n }\n\n isSame(date: CandyDateType, grain: CandyDateMode = 'day'): boolean {\n if (date == null) {\n return false;\n }\n let fn;\n switch (grain) {\n case 'decade':\n fn = (pre: Date, next: Date) => Math.abs(pre.getFullYear() - next.getFullYear()) < 11;\n break;\n case 'year':\n fn = isSameYear;\n break;\n case 'quarter':\n fn = isSameQuarter;\n break;\n case 'month':\n fn = isSameMonth;\n break;\n case 'day':\n fn = isSameDay;\n break;\n case 'hour':\n fn = isSameHour;\n break;\n case 'minute':\n fn = isSameMinute;\n break;\n case 'second':\n fn = isSameSecond;\n break;\n default:\n fn = isSameDay;\n break;\n }\n return fn(this.nativeDate, this.toNativeDate(date));\n }\n\n isSameYear(date: CandyDateType): boolean {\n return this.isSame(date, 'year');\n }\n isSameQuarter(date: CandyDateType): boolean {\n return this.isSame(date, 'quarter');\n }\n\n isSameMonth(date: CandyDateType): boolean {\n return this.isSame(date, 'month');\n }\n\n isSameDay(date: CandyDateType): boolean {\n return this.isSame(date, 'day');\n }\n\n isSameHour(date: CandyDateType): boolean {\n return this.isSame(date, 'hour');\n }\n\n isSameMinute(date: CandyDateType): boolean {\n return this.isSame(date, 'minute');\n }\n\n isSameSecond(date: CandyDateType): boolean {\n return this.isSame(date, 'second');\n }\n\n isBefore(date: CandyDateType, grain: CandyDateMode = 'day'): boolean {\n if (date == null) {\n return false;\n }\n let fn;\n switch (grain) {\n case 'year':\n fn = differenceInCalendarYears;\n break;\n case 'quarter':\n fn = differenceInCalendarQuarters;\n break;\n case 'month':\n fn = differenceInCalendarMonths;\n break;\n case 'day':\n fn = differenceInCalendarDays;\n break;\n case 'hour':\n fn = differenceInHours;\n break;\n case 'minute':\n fn = differenceInMinutes;\n break;\n case 'second':\n fn = differenceInSeconds;\n break;\n default:\n fn = differenceInCalendarDays;\n break;\n }\n return fn(this.nativeDate, this.toNativeDate(date)) < 0;\n }\n\n isBeforeYear(date: CandyDateType): boolean {\n return this.isBefore(date, 'year');\n }\n\n isBeforeQuarter(date: CandyDateType): boolean {\n return this.isBefore(date, 'quarter');\n }\n\n isBeforeMonth(date: CandyDateType): boolean {\n return this.isBefore(date, 'month');\n }\n\n isBeforeDay(date: CandyDateType): boolean {\n return this.isBefore(date, 'day');\n }\n\n // Equal to today accurate to \"day\"\n isToday(): boolean {\n return isToday(this.nativeDate);\n }\n\n isValid(): boolean {\n return isValid(this.nativeDate);\n }\n\n isFirstDayOfMonth(): boolean {\n return isFirstDayOfMonth(this.nativeDate);\n }\n\n isLastDayOfMonth(): boolean {\n return isLastDayOfMonth(this.nativeDate);\n }\n\n private toNativeDate(date: NzSafeAny): Date {\n return date instanceof CandyDate ? date.nativeDate : date;\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport const timeUnits: Array<[string, number]> = [\n ['Y', 1000 * 60 * 60 * 24 * 365], // years\n ['M', 1000 * 60 * 60 * 24 * 30], // months\n ['D', 1000 * 60 * 60 * 24], // days\n ['H', 1000 * 60 * 60], // hours\n ['m', 1000 * 60], // minutes\n ['s', 1000], // seconds\n ['S', 1] // million seconds\n];\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { InjectionToken } from '@angular/core';\n\n/** Type for week day index (0 = Sunday, 1 = Monday, etc.) */\nexport type WeekDayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Configuration for date-related features. */\nexport interface NzDateConfig {\n /** Customize the first day of a week. */\n firstDayOfWeek?: WeekDayIndex;\n}\n\n/** Injection token for date configuration. */\nexport const NZ_DATE_CONFIG = new InjectionToken<NzDateConfig>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-config' : ''\n);\n\n/** Injection token for the date locale used by the configured date adapter. */\nexport const NZ_DATE_LOCALE = new InjectionToken<unknown>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-locale' : ''\n);\n\n/** Default date configuration. */\nexport const NZ_DATE_CONFIG_DEFAULT: NzDateConfig = {\n firstDayOfWeek: undefined\n};\n\n/** Merges user config with default config. */\nexport function mergeDateConfig(config: NzDateConfig | null): NzDateConfig {\n return { ...NZ_DATE_CONFIG_DEFAULT, ...config };\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NZ_DATE_CONFIG, NZ_DATE_CONFIG_DEFAULT, NZ_DATE_LOCALE, NzDateConfig } from './date-config';\n\nconst NOT_IMPLEMENTED = 'NzDateAdapter: method not implemented. Override this method in your adapter to opt in.';\n\n/**\n * Injection token for providing a custom NzDateAdapter implementation.\n */\nexport const NZ_DATE_ADAPTER = new InjectionToken<Type<NzDateAdapter<unknown>>>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'nz-date-adapter-type' : ''\n);\n\n/** Configuration for a date adapter provider. */\nexport interface NzDateAdapterConfig<TLocale = unknown> extends NzDateConfig {\n /** Locale value used by the configured date adapter. */\n locale?: TLocale;\n}\n\n/**\n * Provides a custom NzDateAdapter implementation.\n * Use this when you want to provide your own adapter implementation.\n *\n * @param adapterClass The adapter class to use (must extend NzDateAdapter)\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the adapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [provideNzDateAdapter(JalaliDateAdapter, { locale: faIR, firstDayOfWeek: 6 })]\n * };\n * ```\n */\nexport function provideNzDateAdapter<TDate, TLocale, TAdapter extends NzDateAdapter<TDate, TLocale>>(\n adapterClass: Type<TAdapter>,\n config?: NzDateAdapterConfig<TLocale>\n): EnvironmentProviders {\n const { locale, ...dateConfig } = config ?? {};\n\n return makeEnvironmentProviders([\n adapterClass,\n { provide: NzDateAdapter, useExisting: adapterClass },\n { provide: NZ_DATE_CONFIG, useValue: { ...NZ_DATE_CONFIG_DEFAULT, ...dateConfig } },\n ...(locale !== undefined ? [{ provide: NZ_DATE_LOCALE, useValue: locale }] : [])\n ]);\n}\n\n/**\n * NzDateAdapter is the abstraction boundary between ng-zorro-antd and any date library.\n *\n * CONTRACT FOR SUBCLASS AUTHORS:\n *\n * - You MUST implement all abstract methods.\n * - You MAY override derived methods for efficiency.\n * - You MAY override optional methods to opt into features.\n *\n * @see https://github.com/angular/components/blob/main/src/material/core/datetime/date-adapter.ts\n */\nexport abstract class NzDateAdapter<TDate, TLocale = unknown> {\n /** The current locale. */\n protected locale!: TLocale;\n protected readonly _localeChanges = new Subject<void>();\n\n /** Stream that emits when the locale changes. */\n readonly localeChanges: Observable<void> = this._localeChanges;\n\n // =============================================================\n // MATERIAL CORE: ABSTRACT METHODS (MUST IMPLEMENT)\n // =============================================================\n\n /** Gets today's date. */\n abstract today(): TDate;\n\n /** Gets a date instance representing the given year, month, and day. */\n abstract createDate(year: number, month: number, date: number): TDate;\n\n /** Clones the given date. */\n abstract clone(date: TDate): TDate;\n\n // --- Date Getters (Material naming) ---\n\n /** Gets the year component of the given date. */\n abstract getYear(date: TDate): number;\n\n /** Gets the month component of the given date (0-indexed, 0 = January). */\n abstract getMonth(date: TDate): number;\n\n /** Gets the date of the month component of the given date (1-indexed). */\n abstract getDate(date: TDate): number;\n\n /** Gets the day of the week component of the given date (0-indexed, 0 = Sunday). */\n abstract getDayOfWeek(date: TDate): number;\n\n /** Gets the number of days in the month of the given date. */\n abstract getNumDaysInMonth(date: TDate): number;\n\n // --- Date Names (Material naming) ---\n\n /** Gets the name of the month for the given date. */\n abstract getYearName(date: TDate): string;\n\n /** Gets a list of month names for the given style. */\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n /** Gets a list of date names (e.g. '1', '2', ... '31'). */\n abstract getDateNames(): string[];\n\n /** Gets a list of day of the week names for the given style. */\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n // --- Week ---\n\n /** Gets the first day of the week (0 = Sunday, 1 = Monday, etc.). */\n abstract getFirstDayOfWeek(): number;\n\n // --- Date Math (Material naming) ---\n\n /** Adds the specified number of years to the given date. */\n abstract addCalendarYears(date: TDate, years: number): TDate;\n\n /** Adds the specified number of months to the given date. */\n abstract addCalendarMonths(date: TDate, months: number): TDate;\n\n /** Adds the specified number of days to the given date. */\n abstract addCalendarDays(date: TDate, days: number): TDate;\n\n // --- Format / Parse ---\n\n /** Formats a date as a string according to the given display format. */\n abstract format(date: TDate, displayFormat: NzSafeAny): string;\n\n /** Parses a value into a date. */\n abstract parse(value: NzSafeAny, parseFormat: NzSafeAny): TDate | null;\n\n // --- Validation ---\n\n /** Checks whether the given object is a date instance. */\n abstract isDateInstance(obj: NzSafeAny): boolean;\n\n /** Checks whether the given date is valid. */\n abstract isValid(date: TDate): boolean;\n\n /** Gets a date instance representing an invalid date. */\n abstract invalid(): TDate;\n\n // =============================================================\n // NG-ZORRO CORE: ABSTRACT METHODS (MUST IMPLEMENT)\n // =============================================================\n\n /** Gets the quarter component of the given date (1-4). */\n abstract getQuarter(date: TDate): number;\n\n /** Sets the quarter of the given date. */\n abstract setQuarter(date: TDate, quarter: number): TDate;\n\n /** Gets the start of the quarter for the given date. */\n abstract startOfQuarter(date: TDate): TDate;\n\n /** Gets the ISO week number for the given date. */\n abstract getISOWeek(date: TDate): number;\n\n // --- NG-ZORRO Date Setters (not in Material) ---\n\n /** Sets the year of the given date. */\n abstract setYear(date: TDate, year: number): TDate;\n\n /** Sets the month of the given date (0-indexed). */\n abstract setMonth(date: TDate, month: number): TDate;\n\n /** Sets the day of the month of the given date (1-indexed). */\n abstract setDate(date: TDate, day: number): TDate;\n\n // =============================================================\n // MATERIAL DERIVED: IMPLEMENTED METHODS (MAY OVERRIDE)\n // =============================================================\n\n /** Sets the locale used for formatting and parsing. */\n setLocale(locale: TLocale): void {\n this.locale = locale;\n this._localeChanges.next();\n }\n\n /**\n * Attempts to deserialize a value to a valid date object.\n * Accepts ISO 8601 strings, Date objects, or null/undefined.\n */\n deserialize(value: NzSafeAny): TDate | null {\n if (value == null || this.isDateInstance(value)) {\n return value as TDate | null;\n }\n return this.invalid();\n }\n\n /** Gets a valid date object if possible, otherwise returns null. */\n getValidDateOrNull(obj: unknown): TDate | null {\n if (this.isDateInstance(obj)) {\n const date = obj as TDate;\n return this.isValid(date) ? date : null;\n }\n return null;\n }\n\n /** Compares two dates, returning a number indicating their relative order. */\n compareDate(first: TDate, second: TDate): number {\n return (\n this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second)\n );\n }\n\n /** Checks whether two dates represent the same calendar day. */\n sameDate(first: TDate | null, second: TDate | null): boolean {\n if (first && second) {\n const firstValid = this.isValid(first);\n const secondValid = this.isValid(second);\n if (firstValid && secondValid) {\n return this.compareDate(first, second) === 0;\n }\n return firstValid === secondValid;\n }\n return first === second;\n }\n\n /** Clamps a date between min and max bounds. */\n clampDate(date: TDate, min?: TDate | null, max?: TDate | null): TDate {\n if (min && this.compareDate(min, date) > 0) {\n return this.clone(min);\n }\n if (max && this.compareDate(date, max) > 0) {\n return this.clone(max);\n }\n return date;\n }\n\n /** Gets the calendar's start of month (first day at midnight). */\n calendarStartOfMonth(date: TDate): TDate {\n return this.createDate(this.getYear(date), this.getMonth(date), 1);\n }\n\n /** Gets the calendar's start of week. */\n calendarStartOfWeek(date: TDate): TDate {\n const dayOfWeek = this.getDayOfWeek(date);\n const firstDayOfWeek = this.getFirstDayOfWeek();\n const diff = (dayOfWeek - firstDayOfWeek + 7) % 7;\n return this.addCalendarDays(date, -diff);\n }\n\n /** Checks whether the given date is the first day of its month. */\n isFirstDayOfMonth(date: TDate): boolean {\n return this.getDate(date) === 1;\n }\n\n /** Checks whether the given date is the last day of its month. */\n isLastDayOfMonth(date: TDate): boolean {\n return this.getDate(date) === this.getNumDaysInMonth(date);\n }\n\n /** Checks whether the given date is today. */\n isToday(date: TDate): boolean {\n return this.sameDate(date, this.today());\n }\n\n // =============================================================\n // MATERIAL OPTIONAL: TIME METHODS (THROW BY DEFAULT)\n // =============================================================\n\n /** Sets the time on the given date. */\n setTime(_date: TDate, _hours: number, _minutes: number, _seconds: number): TDate {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the hours component of the given date. */\n getHours(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the minutes component of the given date. */\n getMinutes(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the seconds component of the given date. */\n getSeconds(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Parses a time value into a date. */\n parseTime(_value: NzSafeAny, _parseFormat?: NzSafeAny): TDate | null {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Adds the specified number of seconds to the given date. */\n addSeconds(_date: TDate, _amount: number): TDate {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Compares two times, returning a number indicating their relative order. */\n compareTime(first: TDate, second: TDate): number {\n return (\n this.getHours(first) - this.getHours(second) ||\n this.getMinutes(first) - this.getMinutes(second) ||\n this.getSeconds(first) - this.getSeconds(second)\n );\n }\n\n /** Checks whether two dates represent the same time (same hour, minute, second). */\n sameTime(first: TDate | null, second: TDate | null): boolean {\n if (first && second) {\n return (!this.isValid(first) && !this.isValid(second)) || this.compareTime(first, second) === 0;\n }\n return first === second;\n }\n\n // =============================================================\n // NG-ZORRO OPTIONAL: EXTENDED METHODS (THROW BY DEFAULT)\n // =============================================================\n\n /** Gets the milliseconds component of the given date. */\n getMilliseconds(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the timestamp (milliseconds since epoch) of the given date. */\n getTime(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the calendar system identifier for the given date. */\n getCalendarId(_date: TDate): string {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n /** Gets the timezone offset for the given date. */\n getTimezoneOffset(_date: TDate): number {\n throw new Error(NOT_IMPLEMENTED);\n }\n\n // --- Legacy aliases (deprecated, use Material naming instead) ---\n\n /**\n * @deprecated Use `addCalendarYears` instead. Will be removed in v23.\n */\n addYears(date: TDate, amount: number): TDate {\n return this.addCalendarYears(date, amount);\n }\n\n /**\n * @deprecated Use `addCalendarMonths` instead. Will be removed in v23.\n */\n addMonths(date: TDate, amount: number): TDate {\n return this.addCalendarMonths(date, amount);\n }\n\n /**\n * @deprecated Use `addCalendarDays` instead. Will be removed in v23.\n */\n addDays(date: TDate, amount: number): TDate {\n return this.addCalendarDays(date, amount);\n }\n\n /**\n * @deprecated Use `getNumDaysInMonth` instead. Will be removed in v23.\n */\n getDaysInMonth(date: TDate): number {\n return this.getNumDaysInMonth(date);\n }\n\n /**\n * @deprecated Use `getDayOfWeek` instead. Will be removed in v23.\n */\n getDay(date: TDate): number {\n return this.getDayOfWeek(date);\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, Injectable, inject } from '@angular/core';\n\nimport {\n type Locale,\n addDays,\n addMonths,\n addYears,\n addSeconds,\n isFirstDayOfMonth,\n isLastDayOfMonth,\n isToday,\n isValid,\n setMonth,\n setYear,\n startOfMonth,\n startOfWeek,\n startOfQuarter,\n getQuarter,\n setQuarter,\n getISOWeek,\n getDaysInMonth,\n format as fnsFormat,\n parse as fnsParse\n} from 'date-fns';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzDateAdapter, NzDateAdapterConfig, provideNzDateAdapter } from './date-adapter';\nimport { NZ_DATE_CONFIG, NZ_DATE_LOCALE } from './date-config';\n\n/** Configuration for date-fns date adapter. */\nexport interface NzDateFnsAdapterConfig extends NzDateAdapterConfig<Locale> {\n /** Locale object from date-fns. */\n locale?: Locale;\n}\n\n/**\n * Date adapter for date-fns.\n *\n * To use this adapter, add `provideNzDateFnsAdapter()` to your application providers.\n *\n * @note Requires date-fns as a peer dependency.\n */\n@Injectable({ providedIn: 'root' })\nexport class DateFnsDateAdapter extends NzDateAdapter<Date, Locale> {\n private readonly dateLocale = inject(NZ_DATE_LOCALE, { optional: true });\n private readonly dateConfig = inject(NZ_DATE_CONFIG, { optional: true });\n\n constructor() {\n super();\n if (this.dateLocale) {\n super.setLocale(this.dateLocale as Locale);\n }\n }\n\n // =============================================================\n // MATERIAL CORE: ABSTRACT METHODS\n // =============================================================\n\n today(): Date {\n return new Date();\n }\n\n createDate(year: number, month: number, date: number): Date {\n return new Date(year, month, date);\n }\n\n clone(date: Date): Date {\n return new Date(date);\n }\n\n // --- Date Getters ---\n\n getYear(date: Date): number {\n return date.getFullYear();\n }\n\n getMonth(date: Date): number {\n return date.getMonth();\n }\n\n getDate(date: Date): number {\n return date.getDate();\n }\n\n getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n getNumDaysInMonth(date: Date): number {\n return getDaysInMonth(date);\n }\n\n // --- Date Names ---\n\n getYearName(date: Date): string {\n return fnsFormat(date, 'yyyy', { locale: this.locale });\n }\n\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n const format: 'MMMMM' | 'MMM' | 'MMMM' = style === 'narrow' ? 'MMMMM' : style === 'short' ? 'MMM' : 'MMMM';\n return Array.from({ length: 12 }, (_, i) => fnsFormat(new Date(2024, i, 1), format, { locale: this.locale }));\n }\n\n getDateNames(): string[] {\n return Array.from({ length: 31 }, (_, i) => String(i + 1));\n }\n\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n const format: 'EEEEEE' | 'EEE' | 'EEEE' = style === 'narrow' ? 'EEEEEE' : style === 'short' ? 'EEE' : 'EEEE';\n return Array.from({ length: 7 }, (_, i) => fnsFormat(new Date(2024, 0, i + 1), format, { locale: this.locale }));\n }\n\n // --- Week ---\n\n getFirstDayOfWeek(): number {\n if (this.dateConfig?.firstDayOfWeek != null) {\n return this.dateConfig.firstDayOfWeek;\n } else {\n return this.locale?.options?.weekStartsOn ?? 1;\n }\n }\n\n // --- Date Math ---\n\n addCalendarYears(date: Date, years: number): Date {\n return addYears(date, years);\n }\n\n addCalendarMonths(date: Date, months: number): Date {\n return addMonths(date, months);\n }\n\n addCalendarDays(date: Date, days: number): Date {\n return addDays(date, days);\n }\n\n // --- Format / Parse ---\n\n format(date: Date, displayFormat: NzSafeAny): string {\n if (!date) {\n return '';\n }\n if (!this.isValid(date)) {\n throw new Error('DateFnsDateAdapter: Cannot format invalid date.');\n }\n // Convert Angular-style bracket literals to date-fns single-quote literals\n // e.g., 'yyyy-[Q]Q' → 'yyyy-'Q'Q'\n const formatString = (displayFormat as string).replace(/\\[(.*?)\\]/g, \"'$1'\");\n return fnsFormat(date, formatString, {\n locale: this.locale,\n useAdditionalWeekYearTokens: true,\n useAdditionalDayOfYearTokens: true\n });\n }\n\n parse(value: NzSafeAny, parseFormat: NzSafeAny): Date | null {\n if (typeof value === 'string' && value.length > 0) {\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat as string];\n\n if (!formats.length) {\n throw new Error('Formats array must not be empty.');\n }\n\n for (const currentFormat of formats) {\n // Convert Angular-style bracket literals to date-fns single-quote literals\n const formatString = currentFormat.replace(/\\[(.*?)\\]/g, \"'$1'\");\n const fromFormat = fnsParse(value, formatString, new Date(), {\n locale: this.locale,\n weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6,\n useAdditionalWeekYearTokens: true,\n useAdditionalDayOfYearTokens: true\n });\n\n if (this.isValid(fromFormat)) {\n return fromFormat;\n }\n }\n\n return this.invalid();\n } else if (typeof value === 'number') {\n return new Date(value);\n } else if (value instanceof Date) {\n return this.clone(value);\n }\n\n return null;\n }\n\n // --- Validation ---\n\n isDateInstance(obj: NzSafeAny): boolean {\n return obj instanceof Date;\n }\n\n isValid(date: Date): boolean {\n return isValid(date);\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n // =============================================================\n // NG-ZORRO CORE: ABSTRACT METHODS\n // =============================================================\n\n getQuarter(date: Date): number {\n return getQuarter(date);\n }\n\n setQuarter(date: Date, quarter: number): Date {\n return setQuarter(date, quarter);\n }\n\n startOfQuarter(date: Date): Date {\n return startOfQuarter(date);\n }\n\n getISOWeek(date: Date): number {\n return getISOWeek(date);\n }\n\n // --- NG-ZORRO Date Setters ---\n\n setYear(date: Date, year: number): Date {\n return setYear(date, year);\n }\n\n setMonth(date: Date, month: number): Date {\n return setMonth(date, month);\n }\n\n setDate(date: Date, day: number): Date {\n const result = new Date(date);\n result.setDate(day);\n return result;\n }\n\n // =============================================================\n // MATERIAL OPTIONAL: TIME METHODS\n // =============================================================\n\n override setTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n const result = new Date(date);\n result.setHours(hours, minutes, seconds, 0);\n return result;\n }\n\n override getHours(date: Date): number {\n return date.getHours();\n }\n\n override getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n override getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n override parseTime(value: NzSafeAny, parseFormat?: NzSafeAny): Date | null {\n return this.parse(value, parseFormat);\n }\n\n override addSeconds(date: Date, amount: number): Date {\n return addSeconds(date, amount);\n }\n\n // =============================================================\n // NG-ZORRO OPTIONAL: EXTENDED METHODS\n // =============================================================\n\n override getMilliseconds(date: Date): number {\n return date.getMilliseconds();\n }\n\n override getTime(date: Date): number {\n return date.getTime();\n }\n\n override isFirstDayOfMonth(date: Date): boolean {\n return isFirstDayOfMonth(date);\n }\n\n override isLastDayOfMonth(date: Date): boolean {\n return isLastDayOfMonth(date);\n }\n\n override isToday(date: Date): boolean {\n return isToday(date);\n }\n\n override calendarStartOfMonth(date: Date): Date {\n return startOfMonth(date);\n }\n\n override calendarStartOfWeek(date: Date): Date {\n return startOfWeek(date, { weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6 });\n }\n}\n\n/**\n * Provides the DateFnsDateAdapter as the NzDateAdapter implementation.\n * DateFnsDateAdapter uses date-fns library for date operations.\n *\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the DateFnsDateAdapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [provideNzDateFnsAdapter({ locale: enUS, firstDayOfWeek: 1 })]\n * };\n * ```\n *\n * @note Requires date-fns as a peer dependency.\n */\nexport function provideNzDateFnsAdapter(config?: NzDateFnsAdapterConfig): EnvironmentProviders {\n return provideNzDateAdapter(DateFnsDateAdapter, config);\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { EnvironmentProviders, Injectable, inject } from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzDateAdapter, NzDateAdapterConfig, provideNzDateAdapter } from './date-adapter';\nimport { NZ_DATE_CONFIG, NZ_DATE_LOCALE } from './date-config';\n\n/** Configuration for native date adapter. */\nexport interface NzNativeDateAdapterConfig extends NzDateAdapterConfig<string> {\n /** Locale string used by Intl.DateTimeFormat. */\n locale?: string;\n}\n\n/** Matches strings that look like ISO 8601 dates (e.g. 2024-01-15, 2024-01-15T10:30:00). */\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n/** Matches time strings in formats like: 10:30, 10:30:45, 10:30 AM, 10.30.45 PM. */\nconst TIME_REGEX = /^(\\d?\\d)[:.](\\d?\\d)(?:[:.](\\d?\\d))?\\s*(AM|PM)?$/i;\n\n/** Creates an array of length `length` with values derived from `valueFunction`. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n const valuesArray = Array(length);\n for (let i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\n\n/** Checks if a value is within a specified numeric range. */\nfunction inRange(value: number, min: number, max: number): boolean {\n return !isNaN(value) && value >= min && value <= max;\n}\n\n/**\n * Date adapter using native Date and Intl.DateTimeFormat.\n * Fully aligned with Angular Material's NativeDateAdapter implementation.\n */\n@Injectable()\nexport class NativeDateAdapter extends NzDateAdapter<Date, string> {\n private readonly dateLocale = inject(NZ_DATE_LOCALE, { optional: true });\n private readonly dateConfig = inject(NZ_DATE_CONFIG, { optional: true });\n\n constructor() {\n super();\n if (this.dateLocale !== undefined && typeof this.dateLocale === 'string') {\n this.setLocale(this.dateLocale);\n } else {\n this.setLocale('en-US');\n }\n }\n\n // =============================================================\n // MATERIAL CORE: ABSTRACT METHODS\n // =============================================================\n\n getYear(date: Date): number {\n return date.getFullYear();\n }\n\n getMonth(date: Date): number {\n return date.getMonth();\n }\n\n getDate(date: Date): number {\n return date.getDate();\n }\n\n getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n const dtf = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\n return range(12, i => this._format(dtf, new Date(2017, i, 1)));\n }\n\n getDateNames(): string[] {\n const dtf = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\n return range(31, i => this._format(dtf, new Date(2017, 0, i + 1)));\n }\n\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n const dtf = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\n return range(7, i => this._format(dtf, new Date(2017, 0, i + 1)));\n }\n\n getYearName(date: Date): string {\n const dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\n return this._format(dtf, date);\n }\n\n getFirstDayOfWeek(): number {\n // Check for configured override first\n if (this.dateConfig?.firstDayOfWeek != null) {\n return this.dateConfig.firstDayOfWeek;\n }\n // Use Intl.Locale API if available (same as Material)\n if (typeof Intl !== 'undefined' && (Intl as NzSafeAny).Locale) {\n const locale = new (Intl as NzSafeAny).Locale(this.locale) as {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;\n // weekInfo.firstDay is 1-7 (Mon-Sun), we need 0-6 (Sun-Sat)\n return firstDay === 7 ? 0 : firstDay;\n }\n return 0;\n }\n\n getNumDaysInMonth(date: Date): number {\n return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));\n }\n\n clone(date: Date): Date {\n return new Date(date.getTime());\n }\n\n createDate(year: number, month: number, date: number): Date {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (month < 0 || month > 11) {\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n }\n if (date < 1) {\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n }\n }\n const result = this._createDateWithOverflow(year, month, date);\n if (result.getMonth() !== month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n }\n return result;\n }\n\n today(): Date {\n return new Date();\n }\n\n parse(value: NzSafeAny, parseFormat: NzSafeAny): Date | null {\n if (typeof value === 'number') {\n return new Date(value);\n }\n if (value instanceof Date) {\n return this.clone(value);\n }\n if (typeof value !== 'string') {\n return null;\n }\n const text = value.trim();\n if (!text) {\n return null;\n }\n if (typeof parseFormat === 'string') {\n const parsedByFormat = this.parseByToken(text, parseFormat);\n if (parsedByFormat) {\n return parsedByFormat;\n }\n }\n const dateOnly = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (dateOnly) {\n return this.createDateOrInvalid(Number(dateOnly[1]), Number(dateOnly[2]) - 1, Number(dateOnly[3]));\n }\n const timestamp = Date.parse(text);\n return isNaN(timestamp) ? this.invalid() : new Date(timestamp);\n }\n\n format(date: Date, displayFormat: NzSafeAny): string {\n // NG-ZORRO extension: return empty string for null (Material throws error)\n if (!date) {\n return '';\n }\n if (!this.isValid(date)) {\n throw Error('NativeDateAdapter: Cannot format invalid date.');\n }\n if (typeof displayFormat === 'object' && displayFormat !== null) {\n const dtf = new Intl.DateTimeFormat(this.locale, {\n ...(displayFormat as Intl.DateTimeFormatOptions),\n timeZone: 'utc'\n });\n return this._format(dtf, date);\n }\n // String format: NG-ZORRO extension for date-fns token compatibility\n return this.formatByToken(date, displayFormat as string);\n }\n\n addCalendarYears(date: Date, years: number): Date {\n return this.addCalendarMonths(date, years * 12);\n }\n\n addCalendarMonths(date: Date, months: number): Date {\n const newDate = this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n // Adjust for month overflow (e.g., Jan 31 + 1 month should become Feb 28/29, not Mar 3)\n if (this.getMonth(newDate) !== (((this.getMonth(date) + months) % 12) + 12) % 12) {\n newDate.setDate(0);\n }\n return newDate;\n }\n\n addCalendarDays(date: Date, days: number): Date {\n return this._createDateWithOverflow(this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n }\n\n override deserialize(value: NzSafeAny): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // Strict ISO 8601 validation (same as Material)\n if (ISO_8601_REGEX.test(value)) {\n const date = new Date(value);\n if (this.isValid(date)) {\n return date;\n }\n }\n }\n return super.deserialize(value);\n }\n\n isDateInstance(obj: NzSafeAny): boolean {\n return obj instanceof Date;\n }\n\n isValid(date: Date): boolean {\n return !isNaN(date.getTime());\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n // =============================================================\n // NG-ZORRO CORE: ABSTRACT METHODS\n // =============================================================\n\n getQuarter(date: Date): number {\n return Math.floor(date.getMonth() / 3) + 1;\n }\n\n setQuarter(date: Date, quarter: number): Date {\n const currentQuarter = this.getQuarter(date);\n const monthOffset = (quarter - currentQuarter) * 3;\n return this.addCalendarMonths(date, monthOffset);\n }\n\n startOfQuarter(date: Date): Date {\n const quarter = this.getQuarter(date);\n const month = (quarter - 1) * 3;\n return this.createDate(this.getYear(date), month, 1);\n }\n\n getISOWeek(date: Date): number {\n // ISO week calculation (same algorithm as Material's getISOWeek if available)\n const target = new Date(date.valueOf());\n const dayNr = (date.getDay() + 6) % 7;\n target.setDate(target.getDate() - dayNr + 3);\n const firstThursday = target.valueOf();\n target.setMonth(0, 1);\n if (target.getDay() !== 4) {\n target.setMonth(0, 1 + ((4 - target.getDay() + 7) % 7));\n }\n return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);\n }\n\n setYear(date: Date, year: number): Date {\n const result = this.clone(date);\n result.setFullYear(year);\n return result;\n }\n\n setMonth(date: Date, month: number): Date {\n const result = this.clone(date);\n result.setMonth(month);\n return result;\n }\n\n setDate(date: Date, day: number): Date {\n const result = this.clone(date);\n result.setDate(day);\n return result;\n }\n\n // =============================================================\n // MATERIAL OPTIONAL: TIME METHODS\n // =============================================================\n\n override setTime(target: Date, hours: number, minutes: number, seconds: number): Date {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!inRange(hours, 0, 23)) {\n throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\n }\n if (!inRange(minutes, 0, 59)) {\n throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\n }\n if (!inRange(seconds, 0, 59)) {\n throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\n }\n }\n const clone = this.clone(target);\n clone.setHours(hours, minutes, seconds, 0);\n return clone;\n }\n\n override getHours(date: Date): number {\n return date.getHours();\n }\n\n override getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n override getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n override parseTime(userValue: NzSafeAny, parseFormat?: NzSafeAny): Date | null {\n if (typeof userValue !== 'string') {\n return userValue instanceof Date ? new Date(userValue.getTime()) : null;\n }\n\n const value = userValue.trim();\n\n if (value.length === 0) {\n return null;\n }\n\n // Attempt to parse the value directly.\n let result = this._parseTimeString(value);\n\n // Some locales add extra characters around the time, but are otherwise parseable\n // (e.g. `00:05 ч.` in bg-BG). Try replacing all non-number and non-colon characters.\n if (result === null) {\n // Try stripping non-essential characters\n const withoutExtras = value.replace(/[^0-9:(AM|PM)]/gi, '').trim();\n\n if (withoutExtras.length > 0) {\n result = this._parseTimeString(withoutExtras);\n }\n }\n\n return result || this.invalid();\n }\n\n override addSeconds(date: Date, amount: number): Date {\n return new Date(date.getTime() + amount * 1000);\n }\n\n // =============================================================\n // NG-ZORRO OPTIONAL: EXTENDED METHODS\n // =============================================================\n\n override getMilliseconds(date: Date): number {\n return date.getMilliseconds();\n }\n\n override getTime(date: Date): number {\n return date.getTime();\n }\n\n override getCalendarId(_date: Date): string {\n // Native Date only supports Gregorian calendar\n return 'gregory';\n }\n\n override isFirstDayOfMonth(date: Date): boolean {\n return this.getDate(date) === 1;\n }\n\n override isLastDayOfMonth(date: Date): boolean {\n return this.getDate(date) === this.getNumDaysInMonth(date);\n }\n\n override isToday(date: Date): boolean {\n return this.sameDate(date, this.today());\n }\n\n override calendarStartOfMonth(date: Date): Date {\n return this.createDate(this.getYear(date), this.getMonth(date), 1);\n }\n\n override calendarStartOfWeek(date: Date): Date {\n const dayOfWeek = this.getDayOfWeek(date);\n const firstDayOfWeek = this.getFirstDayOfWeek();\n const diff = (dayOfWeek - firstDayOfWeek + 7) % 7;\n const result = this.addCalendarDays(date, -diff);\n result.setHours(0, 0, 0, 0);\n return result;\n }\n\n // =============================================================\n // PRIVATE: MATERIAL-STYLE HELPERS\n // =============================================================\n\n /**\n * Creates a date allowing for month/date overflow (e.g., Jan 32 becomes Feb 1).\n * This is how Material handles date creation internally.\n */\n private _createDateWithOverflow(year: number, month: number, date: number): Date {\n const result = new Date();\n result.setFullYear(year, month, date);\n result.setHours(0, 0, 0, 0);\n return result;\n }\n\n /** Pads a number to two digits for ISO formatting. */\n private _2digit(n: number): string {\n return `00${n}`.slice(-2);\n }\n\n /**\n * Formats a date using Intl.DateTimeFormat while avoiding DST issues.\n * Uses UTC internally to ensure consistent formatting across timezones.\n */\n private _format(dtf: Intl.DateTimeFormat, date: Date): string {\n const d = new Date();\n d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return dtf.format(d);\n }\n\n /**\n * Parses time strings in various formats (10:30, 10:30:45, 10:30 AM, etc.)\n * Returns null if the string cannot be parsed.\n */\n private _parseTimeString(value: string): Date | null {\n const parsed = value.toUpperCase().match(TIME_REGEX);\n if (parsed) {\n let hours = parseInt(parsed[1]);\n const minutes = parseInt(parsed[2]);\n const seconds: number | undefined = parsed[3] == null ? undefined : parseInt(parsed[3]);\n const amPm = parsed[4] as 'AM' | 'PM' | undefined;\n\n // Handle 12-hour format\n if (hours === 12) {\n hours = amPm === 'AM' ? 0 : hours;\n } else if (amPm === 'PM') {\n hours += 12;\n }\n\n if (inRange(hours, 0, 23) && inRange(minutes, 0, 59) && (seconds == null || inRange(seconds, 0, 59))) {\n return this.setTime(this.today(), hours, minutes, seconds || 0);\n }\n }\n return null;\n }\n\n /**\n * Parses the date-fns-style token subset used by NG-ZORRO default formats.\n * This intentionally stays small; complex calendar parsing belongs in custom adapters.\n */\n private parseByToken(value: string, formatStr: string): Date | null {\n const tokenPatterns: Record<string, string> = {\n yyyy: '(?<year>\\\\d{4})',\n yy: '(?<year2>\\\\d{2})',\n MM: '(?<month>\\\\d{2})',\n M: '(?<month>\\\\d{1,2})',\n dd: '(?<day>\\\\d{2})',\n d: '(?<day>\\\\d{1,2})',\n HH: '(?<hour>\\\\d{2})',\n H: '(?<hour>\\\\d{1,2})',\n mm: '(?<minute>\\\\d{2})',\n m: '(?<minute>\\\\d{1,2})',\n ss: '(?<second>\\\\d{2})',\n s: '(?<second>\\\\d{1,2})'\n };\n const tokens = Object.keys(tokenPatterns).sort((a, b) => b.length - a.length);\n let source = '';\n for (let i = 0; i < formatStr.length;) {\n if (formatStr[i] === '[') {\n const end = formatStr.indexOf(']', i + 1);\n const literal = end === -1 ? formatStr.slice(i + 1) : formatStr.slice(i + 1, end);\n source += this.escapeRegex(literal);\n i = end === -1 ? formatStr.length : end + 1;\n continue;\n }\n const token = tokens.find(item => formatStr.startsWith(item, i));\n if (token) {\n source += tokenPatterns[token];\n i += token.length;\n } else {\n source += this.escapeRegex(formatStr[i]);\n i++;\n }\n }\n let match: RegExpMatchArray | null;\n try {\n match = value.match(new RegExp(`^${source}$`));\n } catch {\n return null;\n }\n if (!match?.groups) {\n return null;\n }\n const year = match.groups['year']\n ? Number(match.groups['year'])\n : match.groups['year2']\n ? 2000 + Number(match.groups['year2'])\n : this.today().getFullYear();\n const month = match.groups['month'] ? Number(match.groups['month']) - 1 : 0;\n const day = match.groups['day'] ? Number(match.groups['day']) : 1;\n const hour = match.groups['hour'] ? Number(match.groups['hour']) : 0;\n const minute = match.groups['minute'] ? Number(match.groups['minute']) : 0;\n const second = match.groups['second'] ? Number(match.groups['second']) : 0;\n if (\n !inRange(month, 0, 11) ||\n !inRange(day, 1, 31) ||\n !inRange(hour, 0, 23) ||\n !inRange(minute, 0, 59) ||\n !inRange(second, 0, 59)\n ) {\n return this.invalid();\n }\n const result = this.createDateOrInvalid(year, month, day);\n if (!this.isValid(result)) {\n return result;\n }\n return this.setTime(result, hour, minute, second);\n }\n\n private createDateOrInvalid(year: number, month: number, date: number): Date {\n try {\n const result = this.createDate(year, month, date);\n return this.getYear(result) === year && this.getMonth(result) === month && this.getDate(result) === date\n ? result\n : this.invalid();\n } catch {\n return this.invalid();\n }\n }\n\n private escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n // =============================================================\n // PRIVATE: NG-ZORRO TOKEN-BASED FORMATTING\n // =============================================================\n\n /**\n * Formats a date using date-fns-style token strings.\n * This is a NG-ZORRO extension for compatibility with existing formats.\n */\n private formatByToken(date: Date, formatStr: string): string {\n if (!formatStr) {\n return '';\n }\n const locale = this.locale as string;\n\n const dtfMonthShort = new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'utc' });\n const dtfMonthLong = new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'utc' });\n const dtfWeekdayNarrow = new Intl.DateTimeFormat(locale, { weekday: 'narrow', timeZone: 'utc' });\n const dtfWeekdayShort = new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'utc' });\n const dtfWeekdayLong = new Intl.DateTimeFormat(locale, { weekday: 'long', timeZone: 'utc' });\n\n const quarter = this.getQuarter(date);\n const hour12 = date.getHours() % 12 || 12;\n const tokenValues: Record<string, string> = {\n yyyy: date.getFullYear().toString().padStart(4, '0'),\n yy: this._2digit(date.getFullYear() % 100),\n MMMM: this._format(dtfMonthLong, date),\n MMM: this._format(dtfMonthShort, date),\n MM: this._2digit(date.getMonth() + 1),\n M: (date.getMonth() + 1).toString(),\n dd: this._2digit(date.getDate()),\n d: date.getDate().toString(),\n EEEEEE: this._format(dtfWeekdayNarrow, date),\n EEEEE: this._format(dtfWeekdayNarrow, date),\n EEEE: this._format(dtfWeekdayLong, date),\n EEE: this._format(dtfWeekdayShort, date),\n EE: this._format(dtfWeekdayShort, date),\n E: this._format(dtfWeekdayShort, date),\n HH: this._2digit(date.getHours()),\n H: date.getHours().toString(),\n hh: this._2digit(hour12),\n h: hour12.toString(),\n mm: this._2digit(date.getMinutes()),\n m: date.getMinutes().toString(),\n ss: this._2digit(date.getSeconds()),\n s: date.getSeconds().toString(),\n ww: this._2digit(this.getISOWeek(date)),\n w: this.getISOWeek(date).toString(),\n QQQ: `Q${quarter}`,\n QQ: this._2digit(quarter),\n Q: quarter.toString(),\n a: date.getHours() < 12 ? 'AM' : 'PM'\n };\n const tokens = Object.keys(tokenValues).sort((a, b) => b.length - a.length);\n let result = '';\n\n for (let i = 0; i < formatStr.length;) {\n if (formatStr[i] === '[') {\n const end = formatStr.indexOf(']', i + 1);\n result += end === -1 ? formatStr.slice(i + 1) : formatStr.slice(i + 1, end);\n i = end === -1 ? formatStr.length : end + 1;\n continue;\n }\n\n if (formatStr[i] === 'Q') {\n let end = i + 1;\n while (formatStr[end] === 'Q') {\n end++;\n }\n const length = end - i;\n result += length >= 4 ? quarter.toString() : tokenValues['Q'.repeat(length)];\n i = end;\n continue;\n }\n\n const token = tokens.find(item => formatStr.startsWith(item, i));\n if (token) {\n result += tokenValues[token];\n i += token.length;\n } else {\n result += formatStr[i];\n i++;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Provides the NativeDateAdapter as the NzDateAdapter implementation.\n * NativeDateAdapter uses native Date and Intl.DateTimeFormat.\n *\n * @param config Optional configuration for the adapter\n * @returns EnvironmentProviders for the NativeDateAdapter\n *\n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [provideNzNativeDateAdapter({ locale: 'en-US', firstDayOfWeek: 0 })]\n * };\n * ```\n */\nexport function provideNzNativeDateAdapter(config?: NzNativeDateAdapterConfig): EnvironmentProviders {\n return provideNzDateAdapter(NativeDateAdapter, config);\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n// from https://github.com/hsuanxyz/ng-time-parser\nimport { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common';\n\nimport { isNotNil } from 'ng-zorro-antd/core/util';\n\nexport interface TimeResult {\n hour: number | null;\n minute: number | null;\n second: number | null;\n period: number | null;\n}\n\nexport class NgTimeParser {\n regex: RegExp = null!;\n matchMap: Record<string, null | number> = {\n hour: null,\n minute: null,\n second: null,\n periodNarrow: null,\n periodWide: null,\n periodAbbreviated: null\n };\n\n constructor(\n private format: string,\n private localeId: string\n ) {\n this.genRegexp();\n }\n\n toDate(str: string): Date {\n const result = this.getTimeResult(str);\n const time = new Date();\n\n if (isNotNil(result?.hour)) {\n time.setHours(result!.hour);\n }\n\n if (isNotNil(result?.minute)) {\n time.setMinutes(result!.minute);\n }\n\n if (isNotNil(result?.second)) {\n time.setSeconds(result!.second);\n }\n\n if (result?.period === 1 && time.getHours() < 12) {\n time.setHours(time.getHours() + 12);\n }\n\n return time;\n }\n\n getTimeResult(str: string): TimeResult | null {\n const match = this.regex.exec(str);\n let period = null;\n if (match) {\n if (isNotNil(this.matchMap.periodNarrow)) {\n period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).indexOf(\n match[this.matchMap.periodNarrow + 1]\n );\n }\n if (isNotNil(this.matchMap.periodWide)) {\n period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).indexOf(\n match[this.matchMap.periodWide + 1]\n );\n }\n if (isNotNil(this.matchMap.periodAbbreviated)) {\n period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).indexOf(\n match[this.matchMap.periodAbbreviated + 1]\n );\n }\n return {\n hour: isNotNil(this.matchMap.hour) ? Number.parseInt(match[this.matchMap.hour + 1], 10) : null,\n minute: isNotNil(this.matchMap.minute) ? Number.parseInt(match[this.matchMap.minute + 1], 10) : null,\n second: isNotNil(this.matchMap.second) ? Number.parseInt(match[this.matchMap.second + 1], 10) : null,\n period\n };\n } else {\n return null;\n }\n }\n\n genRegexp(): void {\n let regexStr = this.format.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$&');\n const hourRegex = /h{1,2}/i;\n const minuteRegex = /m{1,2}/;\n const secondRegex = /s{1,2}/;\n const periodNarrow = /aaaaa/;\n const periodWide = /aaaa/;\n const periodAbbreviated = /a{1,3}/;\n\n const hourMatch = hourRegex.exec(this.format);\n const minuteMatch = minuteRegex.exec(this.format);\n const secondMatch = secondRegex.exec(this.format);\n const periodNarrowMatch = periodNarrow.exec(this.format);\n let periodWideMatch: null | RegExpExecArray = null;\n let periodAbbreviatedMatch: null | RegExpExecArray = null;\n if (!periodNarrowMatch) {\n periodWideMatch = periodWide.exec(this.format);\n }\n if (!periodWideMatch && !periodNarrowMatch) {\n periodAbbreviatedMatch = periodAbbreviated.exec(this.format);\n }\n\n const matchs = [hourMatch, minuteMatch, secondMatch, periodNarrowMatch, periodWideMatch, periodAbbreviatedMatch]\n .filter(m => !!m)\n .sort((a, b) => a!.index - b!.index);\n\n matchs.forEach((match, index) => {\n switch (match) {\n case hourMatch:\n this.matchMap.hour = index;\n regexStr = regexStr.replace(hourRegex, '(\\\\d{1,2})');\n break;\n case minuteMatch:\n this.matchMap.minute = index;\n regexStr = regexStr.replace(minuteRegex, '(\\\\d{1,2})');\n break;\n case secondMatch:\n this.matchMap.second = index;\n regexStr = regexStr.replace(secondRegex, '(\\\\d{1,2})');\n break;\n case periodNarrowMatch: {\n this.matchMap.periodNarrow = index;\n const periodsNarrow = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).join('|');\n regexStr = regexStr.replace(periodNarrow, `(${periodsNarrow})`);\n break;\n }\n case periodWideMatch: {\n this.matchMap.periodWide = index;\n const periodsWide = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).join('|');\n regexStr = regexStr.replace(periodWide, `(${periodsWide})`);\n break;\n }\n case periodAbbreviatedMatch: {\n this.matchMap.periodAbbreviated = index;\n const periodsAbbreviated = getLocaleDayPeriods(\n this.localeId,\n FormStyle.Format,\n TranslationWidth.Abbreviated\n ).join('|');\n regexStr = regexStr.replace(periodAbbreviated, `(${periodsAbbreviated})`);\n break;\n }\n }\n });\n\n this.regex = new RegExp(regexStr);\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './candy-date';\nexport * from './time';\nexport * from './date-adapter';\nexport * from './date-config';\nexport { DateFnsDateAdapter, provideNzDateFnsAdapter } from './date-fns-adapter';\nexport type { NzDateFnsAdapterConfig } from './date-fns-adapter';\nexport { NativeDateAdapter, provideNzNativeDateAdapter } from './native-adapter';\nexport type { NzNativeDateAdapterConfig } from './native-adapter';\nexport { NgTimeParser as ɵNgTimeParser } from './time-parser';\nexport type { TimeResult as ɵTimeResult } from './time-parser';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["fnsFormat","format","fnsParse"],"mappings":";;;;;;;;AAAA;;;AAGG;AA8DH;;AAEG;AACG,SAAU,cAAc,CAAC,UAAyB,EAAA;AACtD,IAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,UAAU;AAC/B,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;AACnD;AAEA;;AAEG;AACG,SAAU,mBAAmB,CACjC,KAAoB,EACpB,aAAsB,EACtB,IAAA,GAAuB,OAAO,EAC9B,UAAA,GAA+B,MAAM,EAAA;AAErC,IAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;AAC1B,IAAA,IAAI,QAAQ,GAAc,KAAK,IAAI,IAAI,SAAS,EAAE;IAClD,IAAI,MAAM,GAAc,GAAG,KAAK,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEjF,IAAA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;QACjB,QAAQ,GAAG,KAAK;AAChB,QAAA,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IACrD;AAAO,SAAA,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;AACxB,QAAA,QAAQ,GAAG,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAClD,MAAM,GAAG,GAAG;IACd;AAAO,SAAA,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACzC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;YAC3B,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;QAChC;aAAO;AACL,YAAA,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;YAChC;iBAAO;gBACL,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACjC;QACF;IACF;AACA,IAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3B;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,KAAsB,EAAA;AAC9C,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE;SAAO;AACL,QAAA,OAAO,KAAK,YAAY,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI;IAC1D;AACF;AAEA;;;;;;;AAOG;MACU,SAAS,CAAA;AACpB,IAAA,UAAU;;AAGV,IAAA,WAAA,CAAY,IAA6B,EAAA;QACvC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB;iBAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC/D,IAAI,CAAC,qEAAqE,CAAC;gBAC3E,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YAClC;iBAAO;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;YACrF;QACF;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;QAC9B;IACF;AAEA,IAAA,aAAa,CAAC,OAAoD,EAAA;AAChE,QAAA,OAAO,IAAI,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3E;;;;IAMA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;IACtC;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IACnC;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;IACjC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;IAClC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;IAClC;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IACnC;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;IACrC;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;IACrC;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;IAC1C;;;;IAMA,KAAK,GAAA;QACH,OAAO,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD;AAEA,IAAA,MAAM,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACxE,QAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;IAC/B;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtD;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD;;;AAIA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxD;AAEA,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D;IAEA,MAAM,CAAC,GAAW,EAAE,OAAwC,EAAA;AAC1D,QAAA,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7D;AAEA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpB,QAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC;IAC5B;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;IACpC;AAEA,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5D;AAEA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;IAC9C;IAEA,GAAG,CAAC,MAAc,EAAE,IAAoB,EAAA;QACtC,QAAQ,IAAI;AACV,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;AACnC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC/B,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;IAEnC;AAEA,IAAA,MAAM,CAAC,IAAmB,EAAE,KAAA,GAAuB,KAAK,EAAA;AACtD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,EAAE;QACN,QAAQ,KAAK;AACX,YAAA,KAAK,QAAQ;gBACX,EAAE,GAAG,CAAC,GAAS,EAAE,IAAU,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE;gBACrF;AACF,YAAA,KAAK,MAAM;gBACT,EAAE,GAAG,UAAU;gBACf;AACF,YAAA,KAAK,SAAS;gBACZ,EAAE,GAAG,aAAa;gBAClB;AACF,YAAA,KAAK,OAAO;gBACV,EAAE,GAAG,WAAW;gBAChB;AACF,YAAA,KAAK,KAAK;gBACR,EAAE,GAAG,SAAS;gBACd;AACF,YAAA,KAAK,MAAM;gBACT,EAAE,GAAG,UAAU;gBACf;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,GAAG,YAAY;gBACjB;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,GAAG,YAAY;gBACjB;AACF,YAAA;gBACE,EAAE,GAAG,SAAS;gBACd;;AAEJ,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrD;AAEA,IAAA,UAAU,CAAC,IAAmB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IAClC;AACA,IAAA,aAAa,CAAC,IAAmB,EAAA;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;IACrC;AAEA,IAAA,WAAW,CAAC,IAAmB,EAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;IACnC;AAEA,IAAA,SAAS,CAAC,IAAmB,EAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,IAAmB,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IAClC;AAEA,IAAA,YAAY,CAAC,IAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,IAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IACpC;AAEA,IAAA,QAAQ,CAAC,IAAmB,EAAE,KAAA,GAAuB,KAAK,EAAA;AACxD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,EAAE;QACN,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;gBACT,EAAE,GAAG,yBAAyB;gBAC9B;AACF,YAAA,KAAK,SAAS;gBACZ,EAAE,GAAG,4BAA4B;gBACjC;AACF,YAAA,KAAK,OAAO;gBACV,EAAE,GAAG,0BAA0B;gBAC/B;AACF,YAAA,KAAK,KAAK;gBACR,EAAE,GAAG,wBAAwB;gBAC7B;AACF,YAAA,KAAK,MAAM;gBACT,EAAE,GAAG,iBAAiB;gBACtB;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,GAAG,mBAAmB;gBACxB;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,GAAG,mBAAmB;gBACxB;AACF,YAAA;gBACE,EAAE,GAAG,wBAAwB;gBAC7B;;AAEJ,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IACzD;AAEA,IAAA,YAAY,CAAC,IAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACpC;AAEA,IAAA,eAAe,CAAC,IAAmB,EAAA;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACvC;AAEA,IAAA,aAAa,CAAC,IAAmB,EAAA;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACrC;AAEA,IAAA,WAAW,CAAC,IAAmB,EAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACnC;;IAGA,OAAO,GAAA;AACL,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;IACjC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;IACjC;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3C;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;AAEQ,IAAA,YAAY,CAAC,IAAe,EAAA;AAClC,QAAA,OAAO,IAAI,YAAY,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;IAC3D;AACD;;ACpYD;;;AAGG;AAEI,MAAM,SAAS,GAA4B;AAChD,IAAA,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;AAChC,IAAA,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC/B,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AACrB,IAAA,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;AAChB,IAAA,CAAC,GAAG,EAAE,IAAI,CAAC;AACX,IAAA,CAAC,GAAG,EAAE,CAAC,CAAC;;;ACZV;;;AAGG;AAaH;MACa,cAAc,GAAG,IAAI,cAAc,CAC9C,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,gBAAgB,GAAG,EAAE;AAGvE;MACa,cAAc,GAAG,IAAI,cAAc,CAC9C,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,gBAAgB,GAAG,EAAE;AAGvE;AACO,MAAM,sBAAsB,GAAiB;AAClD,IAAA,cAAc,EAAE;;AAGlB;AACM,SAAU,eAAe,CAAC,MAA2B,EAAA;AACzD,IAAA,OAAO,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE;AACjD;;AClCA;;;AAGG;AASH,MAAM,eAAe,GAAG,wFAAwF;AAEhH;;AAEG;MACU,eAAe,GAAG,IAAI,cAAc,CAC/C,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,sBAAsB,GAAG,EAAE;AAS7E;;;;;;;;;;;;;;AAcG;AACG,SAAU,oBAAoB,CAClC,YAA4B,EAC5B,MAAqC,EAAA;IAErC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE;AAE9C,IAAA,OAAO,wBAAwB,CAAC;QAC9B,YAAY;AACZ,QAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE;AACrD,QAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,GAAG,sBAAsB,EAAE,GAAG,UAAU,EAAE,EAAE;QACnF,IAAI,MAAM,KAAK,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE;AAChF,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;AAUG;MACmB,aAAa,CAAA;;AAEvB,IAAA,MAAM;AACG,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;AAG9C,IAAA,aAAa,GAAqB,IAAI,CAAC,cAAc;;;;;AAiH9D,IAAA,SAAS,CAAC,MAAe,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,OAAO,KAAqB;QAC9B;AACA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;;AAGA,IAAA,kBAAkB,CAAC,GAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,IAAI,GAAG,GAAY;AACzB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;QACzC;AACA,QAAA,OAAO,IAAI;IACb;;IAGA,WAAW,CAAC,KAAY,EAAE,MAAa,EAAA;AACrC,QAAA,QACE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAE9C;;IAGA,QAAQ,CAAC,KAAmB,EAAE,MAAoB,EAAA;AAChD,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACxC,YAAA,IAAI,UAAU,IAAI,WAAW,EAAE;gBAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAC9C;YACA,OAAO,UAAU,KAAK,WAAW;QACnC;QACA,OAAO,KAAK,KAAK,MAAM;IACzB;;AAGA,IAAA,SAAS,CAAC,IAAW,EAAE,GAAkB,EAAE,GAAkB,EAAA;AAC3D,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,oBAAoB,CAAC,IAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE;;AAGA,IAAA,mBAAmB,CAAC,IAAW,EAAA;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;IAC1C;;AAGA,IAAA,iBAAiB,CAAC,IAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;;AAGA,IAAA,gBAAgB,CAAC,IAAW,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC5D;;AAGA,IAAA,OAAO,CAAC,IAAW,EAAA;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1C;;;;;AAOA,IAAA,OAAO,CAAC,KAAY,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAA;AACtE,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;IAGA,SAAS,CAAC,MAAiB,EAAE,YAAwB,EAAA;AACnD,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;IAGA,UAAU,CAAC,KAAY,EAAE,OAAe,EAAA;AACtC,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;IAGA,WAAW,CAAC,KAAY,EAAE,MAAa,EAAA;AACrC,QAAA,QACE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAEpD;;IAGA,QAAQ,CAAC,KAAmB,EAAE,MAAoB,EAAA;AAChD,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACjG;QACA,OAAO,KAAK,KAAK,MAAM;IACzB;;;;;AAOA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;;AAIA;;AAEG;IACH,QAAQ,CAAC,IAAW,EAAE,MAAc,EAAA;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;IAC5C;AAEA;;AAEG;IACH,SAAS,CAAC,IAAW,EAAE,MAAc,EAAA;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC;IAC7C;AAEA;;AAEG;IACH,OAAO,CAAC,IAAW,EAAE,MAAc,EAAA;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3C;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,IAAW,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrC;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,IAAW,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC;AACD;;AC/XD;;;AAGG;AAsCH;;;;;;AAMG;AAEG,MAAO,kBAAmB,SAAQ,aAA2B,CAAA;IAChD,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvD,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAoB,CAAC;QAC5C;IACF;;;;IAMA,KAAK,GAAA;QACH,OAAO,IAAI,IAAI,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAA;QAClD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;IACpC;AAEA,IAAA,KAAK,CAAC,IAAU,EAAA;AACd,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;IACvB;;AAIA,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;AAEA,IAAA,QAAQ,CAAC,IAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAEA,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;;AAIA,IAAA,WAAW,CAAC,IAAU,EAAA;AACpB,QAAA,OAAOA,MAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACzD;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC9C,MAAMC,QAAM,GAA6B,KAAK,KAAK,QAAQ,GAAG,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM;AAC1G,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAKD,MAAS,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEC,QAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/G;IAEA,YAAY,GAAA;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D;AAEA,IAAA,iBAAiB,CAAC,KAAkC,EAAA;QAClD,MAAMA,QAAM,GAA8B,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM;AAC5G,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAKD,MAAS,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAEC,QAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClH;;IAIA,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,IAAI,IAAI,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc;QACvC;aAAO;YACL,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC;QAChD;IACF;;IAIA,gBAAgB,CAAC,IAAU,EAAE,KAAa,EAAA;AACxC,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B;IAEA,iBAAiB,CAAC,IAAU,EAAE,MAAc,EAAA;AAC1C,QAAA,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;IAEA,eAAe,CAAC,IAAU,EAAE,IAAY,EAAA;AACtC,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B;;IAIA,MAAM,CAAC,IAAU,EAAE,aAAwB,EAAA;QACzC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;QACpE;;;QAGA,MAAM,YAAY,GAAI,aAAwB,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;AAC5E,QAAA,OAAOD,MAAS,CAAC,IAAI,EAAE,YAAY,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,2BAA2B,EAAE,IAAI;AACjC,YAAA,4BAA4B,EAAE;AAC/B,SAAA,CAAC;IACJ;IAEA,KAAK,CAAC,KAAgB,EAAE,WAAsB,EAAA;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,CAAC,WAAqB,CAAC;AAElF,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,gBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;YACrD;AAEA,YAAA,KAAK,MAAM,aAAa,IAAI,OAAO,EAAE;;gBAEnC,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;gBAChE,MAAM,UAAU,GAAGE,KAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,EAAE;oBAC3D,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,oBAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAA+B;AACnE,oBAAA,2BAA2B,EAAE,IAAI;AACjC,oBAAA,4BAA4B,EAAE;AAC/B,iBAAA,CAAC;AAEF,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC5B,oBAAA,OAAO,UAAU;gBACnB;YACF;AAEA,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvB;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACpC,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;QACxB;AAAO,aAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B;AAEA,QAAA,OAAO,IAAI;IACb;;AAIA,IAAA,cAAc,CAAC,GAAc,EAAA;QAC3B,OAAO,GAAG,YAAY,IAAI;IAC5B;AAEA,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;IACtB;;;;AAMA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB;IAEA,UAAU,CAAC,IAAU,EAAE,OAAe,EAAA;AACpC,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;IAClC;AAEA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB;;IAIA,OAAO,CAAC,IAAU,EAAE,IAAY,EAAA;AAC9B,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B;IAEA,QAAQ,CAAC,IAAU,EAAE,KAAa,EAAA;AAChC,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B;IAEA,OAAO,CAAC,IAAU,EAAE,GAAW,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACnB,QAAA,OAAO,MAAM;IACf;;;;AAMS,IAAA,OAAO,CAAC,IAAU,EAAE,KAAa,EAAE,OAAe,EAAE,OAAe,EAAA;AAC1E,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,QAAA,OAAO,MAAM;IACf;AAES,IAAA,QAAQ,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAES,IAAA,UAAU,CAAC,IAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;AAES,IAAA,UAAU,CAAC,IAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;IAES,SAAS,CAAC,KAAgB,EAAE,WAAuB,EAAA;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;IACvC;IAES,UAAU,CAAC,IAAU,EAAE,MAAc,EAAA;AAC5C,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;IACjC;;;;AAMS,IAAA,eAAe,CAAC,IAAU,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAES,IAAA,OAAO,CAAC,IAAU,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AAES,IAAA,iBAAiB,CAAC,IAAU,EAAA;AACnC,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAChC;AAES,IAAA,gBAAgB,CAAC,IAAU,EAAA;AAClC,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC;IAC/B;AAES,IAAA,OAAO,CAAC,IAAU,EAAA;AACzB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB;AAES,IAAA,oBAAoB,CAAC,IAAU,EAAA;AACtC,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC;IAC3B;AAES,IAAA,mBAAmB,CAAC,IAAU,EAAA;AACrC,QAAA,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAA+B,EAAE,CAAC;IACnG;uGA/PW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAmQlC;;;;;;;;;;;;;;;AAeG;AACG,SAAU,uBAAuB,CAAC,MAA+B,EAAA;AACrE,IAAA,OAAO,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACzD;;ACrUA;;;AAGG;AAeH;AACA,MAAM,cAAc,GAAG,oFAAoF;AAE3G;AACA,MAAM,UAAU,GAAG,kDAAkD;AAErE;AACA,SAAS,KAAK,CAAI,MAAc,EAAE,aAAmC,EAAA;AACnE,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;AACjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IACnC;AACA,IAAA,OAAO,WAAW;AACpB;AAEA;AACA,SAAS,OAAO,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AACtD,IAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG;AACtD;AAEA;;;AAGG;AAEG,MAAO,iBAAkB,SAAQ,aAA2B,CAAA;IAC/C,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvD,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AACxE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB;IACF;;;;AAMA,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;AAEA,IAAA,QAAQ,CAAC,IAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAEA,IAAA,OAAO,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE;IAEA,YAAY,GAAA;QACV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrF,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE;AAEA,IAAA,iBAAiB,CAAC,KAAkC,EAAA;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACrF,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE;AAEA,IAAA,WAAW,CAAC,IAAU,EAAA;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IAChC;IAEA,iBAAiB,GAAA;;QAEf,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,IAAI,IAAI,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc;QACvC;;QAEA,IAAI,OAAO,IAAI,KAAK,WAAW,IAAK,IAAkB,CAAC,MAAM,EAAE;YAC7D,MAAM,MAAM,GAAG,IAAK,IAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAGxD;AACD,YAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,MAAM,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC;;YAE3E,OAAO,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ;QACtC;AACA,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnG;AAEA,IAAA,KAAK,CAAC,IAAU,EAAA;QACd,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAA;AAClD,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;AAC3B,gBAAA,MAAM,KAAK,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAA,0CAAA,CAA4C,CAAC;YACxF;AACA,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,MAAM,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,iCAAA,CAAmC,CAAC;YACvE;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC9D,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YAClF,MAAM,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,2BAA2B,KAAK,CAAA,EAAA,CAAI,CAAC;QACxE;AACA,QAAA,OAAO,MAAM;IACf;IAEA,KAAK,GAAA;QACH,OAAO,IAAI,IAAI,EAAE;IACnB;IAEA,KAAK,CAAC,KAAgB,EAAE,WAAsB,EAAA;AAC5C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;QACxB;AACA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;QACzB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;YAC3D,IAAI,cAAc,EAAE;AAClB,gBAAA,OAAO,cAAc;YACvB;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC;QACxD,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG;QACA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;IAChE;IAEA,MAAM,CAAC,IAAU,EAAE,aAAwB,EAAA;;QAEzC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,MAAM,KAAK,CAAC,gDAAgD,CAAC;QAC/D;QACA,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,EAAE;YAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/C,gBAAA,GAAI,aAA4C;AAChD,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC;;QAEA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAuB,CAAC;IAC1D;IAEA,gBAAgB,CAAC,IAAU,EAAE,KAAa,EAAA;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;IACjD;IAEA,iBAAiB,CAAC,IAAU,EAAE,MAAc,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAElH,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;AAChF,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpB;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,eAAe,CAAC,IAAU,EAAE,IAAY,EAAA;QACtC,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzG;AAES,IAAA,WAAW,CAAC,KAAgB,EAAA;AACnC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,IAAI;YACb;;AAEA,YAAA,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5B,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;YACF;QACF;AACA,QAAA,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;IACjC;AAEA,IAAA,cAAc,CAAC,GAAc,EAAA;QAC3B,OAAO,GAAG,YAAY,IAAI;IAC5B;AAEA,IAAA,OAAO,CAAC,IAAU,EAAA;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;IACtB;;;;AAMA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;IAC5C;IAEA,UAAU,CAAC,IAAU,EAAE,OAAe,EAAA;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,OAAO,GAAG,cAAc,IAAI,CAAC;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC;IAClD;AAEA,IAAA,cAAc,CAAC,IAAU,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;;QAEnB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AACrC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAC5C,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE;AACtC,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACzB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD;AACA,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC;IACtE;IAEA,OAAO,CAAC,IAAU,EAAE,IAAY,EAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,QAAA,OAAO,MAAM;IACf;IAEA,QAAQ,CAAC,IAAU,EAAE,KAAa,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtB,QAAA,OAAO,MAAM;IACf;IAEA,OAAO,CAAC,IAAU,EAAE,GAAW,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACnB,QAAA,OAAO,MAAM;IACf;;;;AAMS,IAAA,OAAO,CAAC,MAAY,EAAE,KAAa,EAAE,OAAe,EAAE,OAAe,EAAA;AAC5E,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;AAC1B,gBAAA,MAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,KAAK,CAAA,wCAAA,CAA0C,CAAC;YAChF;YACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5B,gBAAA,MAAM,KAAK,CAAC,CAAA,iBAAA,EAAoB,OAAO,CAAA,0CAAA,CAA4C,CAAC;YACtF;YACA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5B,gBAAA,MAAM,KAAK,CAAC,CAAA,iBAAA,EAAoB,OAAO,CAAA,0CAAA,CAA4C,CAAC;YACtF;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1C,QAAA,OAAO,KAAK;IACd;AAES,IAAA,QAAQ,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAES,IAAA,UAAU,CAAC,IAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;AAES,IAAA,UAAU,CAAC,IAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;IAES,SAAS,CAAC,SAAoB,EAAE,WAAuB,EAAA;AAC9D,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,SAAS,YAAY,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;QACzE;AAEA,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE;AAE9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;;QAGA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;;AAIzC,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAEnB,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAElE,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAC/C;QACF;AAEA,QAAA,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;IACjC;IAES,UAAU,CAAC,IAAU,EAAE,MAAc,EAAA;AAC5C,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD;;;;AAMS,IAAA,eAAe,CAAC,IAAU,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAES,IAAA,OAAO,CAAC,IAAU,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;AAES,IAAA,aAAa,CAAC,KAAW,EAAA;;AAEhC,QAAA,OAAO,SAAS;IAClB;AAES,IAAA,iBAAiB,CAAC,IAAU,EAAA;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAES,IAAA,gBAAgB,CAAC,IAAU,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC5D;AAES,IAAA,OAAO,CAAC,IAAU,EAAA;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1C;AAES,IAAA,oBAAoB,CAAC,IAAU,EAAA;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE;AAES,IAAA,mBAAmB,CAAC,IAAU,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,MAAM;IACf;;;;AAMA;;;AAGG;AACK,IAAA,uBAAuB,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAA;AACvE,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE;QACzB,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,MAAM;IACf;;AAGQ,IAAA,OAAO,CAAC,CAAS,EAAA;QACvB,OAAO,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B;AAEA;;;AAGG;IACK,OAAO,CAAC,GAAwB,EAAE,IAAU,EAAA;AAClD,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5F,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtB;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,KAAa,EAAA;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QACpD,IAAI,MAAM,EAAE;YACV,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,OAAO,GAAuB,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvF,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAA4B;;AAGjD,YAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,gBAAA,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK;YACnC;AAAO,iBAAA,IAAI,IAAI,KAAK,IAAI,EAAE;gBACxB,KAAK,IAAI,EAAE;YACb;AAEA,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACpG,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;YACjE;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACK,YAAY,CAAC,KAAa,EAAE,SAAiB,EAAA;AACnD,QAAA,MAAM,aAAa,GAA2B;AAC5C,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,CAAC,EAAE,oBAAoB;AACvB,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,CAAC,EAAE,kBAAkB;AACrB,YAAA,EAAE,EAAE,iBAAiB;AACrB,YAAA,CAAC,EAAE,mBAAmB;AACtB,YAAA,EAAE,EAAE,mBAAmB;AACvB,YAAA,CAAC,EAAE,qBAAqB;AACxB,YAAA,EAAE,EAAE,mBAAmB;AACvB,YAAA,CAAC,EAAE;SACJ;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAC7E,IAAI,MAAM,GAAG,EAAE;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG;AACrC,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AACjF,gBAAA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACnC,gBAAA,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC;gBAC3C;YACF;AACA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC;AAC9B,gBAAA,CAAC,IAAI,KAAK,CAAC,MAAM;YACnB;iBAAO;gBACL,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACxC,gBAAA,CAAC,EAAE;YACL;QACF;AACA,QAAA,IAAI,KAA8B;AAClC,QAAA,IAAI;AACF,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC;QAChD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;cAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,cAAE,KAAK,CAAC,MAAM,CAAC,OAAO;kBAClB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;kBACnC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QAC1E,IACE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;AACtB,YAAA,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACpB,YAAA,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AACrB,YAAA,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EACvB;AACA,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvB;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,OAAO,MAAM;QACf;AACA,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;IACnD;AAEQ,IAAA,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAA;AACnE,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;YACjD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;AAClG,kBAAE;AACF,kBAAE,IAAI,CAAC,OAAO,EAAE;QACpB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvB;IACF;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACrD;;;;AAMA;;;AAGG;IACK,aAAa,CAAC,IAAU,EAAE,SAAiB,EAAA;QACjD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB;AAEpC,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC1F,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACxF,QAAA,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAChG,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC9F,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,QAAA,MAAM,WAAW,GAA2B;AAC1C,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACpD,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YACtC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE;YACnC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;YAC3C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;YACxC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;YACxC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;YACvC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;YACtC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,YAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;AAC7B,YAAA,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACxB,YAAA,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE;YACpB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,YAAA,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;YAC/B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,YAAA,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;YAC/B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YACnC,GAAG,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;AAClB,YAAA,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,YAAA,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;AACrB,YAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG;SAClC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3E,IAAI,MAAM,GAAG,EAAE;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG;AACrC,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AAC3E,gBAAA,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC;gBAC3C;YACF;AAEA,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,gBAAA,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACf,gBAAA,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;AAC7B,oBAAA,GAAG,EAAE;gBACP;AACA,gBAAA,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC;gBACtB,MAAM,IAAI,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5E,CAAC,GAAG,GAAG;gBACP;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC;AAC5B,gBAAA,CAAC,IAAI,KAAK,CAAC,MAAM;YACnB;iBAAO;AACL,gBAAA,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;AACtB,gBAAA,CAAC,EAAE;YACL;QACF;AAEA,QAAA,OAAO,MAAM;IACf;uGAnkBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;AAukBD;;;;;;;;;;;;;AAaG;AACG,SAAU,0BAA0B,CAAC,MAAkC,EAAA;AAC3E,IAAA,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,CAAC;AACxD;;ACjoBA;;;AAGG;AAEH;MAYa,YAAY,CAAA;AAYb,IAAA,MAAA;AACA,IAAA,QAAA;IAZV,KAAK,GAAW,IAAK;AACrB,IAAA,QAAQ,GAAkC;AACxC,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,iBAAiB,EAAE;KACpB;IAED,WAAA,CACU,MAAc,EACd,QAAgB,EAAA;QADhB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEhB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AAEvB,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAO,CAAC,IAAI,CAAC;QAC7B;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAO,CAAC,MAAM,CAAC;QACjC;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAO,CAAC,MAAM,CAAC;QACjC;AAEA,QAAA,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;QACrC;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,aAAa,CAAC,GAAW,EAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC,IAAI,MAAM,GAAG,IAAI;QACjB,IAAI,KAAK,EAAE;YACT,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACxC,gBAAA,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAC5F,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CACtC;YACH;YACA,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtC,gBAAA,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAC1F,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CACpC;YACH;YACA,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AAC7C,gBAAA,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CACjG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAC3C;YACH;YACA,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;AAC9F,gBAAA,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;AACpG,gBAAA,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;gBACpG;aACD;QACH;aAAO;AACL,YAAA,OAAO,IAAI;QACb;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC;QACvE,MAAM,SAAS,GAAG,SAAS;QAC3B,MAAM,WAAW,GAAG,QAAQ;QAC5B,MAAM,WAAW,GAAG,QAAQ;QAC5B,MAAM,YAAY,GAAG,OAAO;QAC5B,MAAM,UAAU,GAAG,MAAM;QACzB,MAAM,iBAAiB,GAAG,QAAQ;QAElC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACxD,IAAI,eAAe,GAA2B,IAAI;QAClD,IAAI,sBAAsB,GAA2B,IAAI;QACzD,IAAI,CAAC,iBAAiB,EAAE;YACtB,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE;YAC1C,sBAAsB,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9D;AAEA,QAAA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB;aAC5G,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACf,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,CAAC,KAAK,GAAG,CAAE,CAAC,KAAK,CAAC;QAEtC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAC9B,QAAQ,KAAK;AACX,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK;oBAC1B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;oBACpD;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;oBAC5B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;oBACtD;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;oBAC5B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;oBACtD;gBACF,KAAK,iBAAiB,EAAE;AACtB,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,KAAK;oBAClC,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC7G,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAG,CAAC;oBAC/D;gBACF;gBACA,KAAK,eAAe,EAAE;AACpB,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK;oBAChC,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACzG,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,CAAG,CAAC;oBAC3D;gBACF;gBACA,KAAK,sBAAsB,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,KAAK;oBACvC,MAAM,kBAAkB,GAAG,mBAAmB,CAC5C,IAAI,CAAC,QAAQ,EACb,SAAS,CAAC,MAAM,EAChB,gBAAgB,CAAC,WAAW,CAC7B,CAAC,IAAI,CAAC,GAAG,CAAC;oBACX,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,CAAG,CAAC;oBACzE;gBACF;;AAEJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;IACnC;AACD;;AC3JD;;;AAGG;;ACHH;;AAEG;;;;"}