{"version":3,"file":"c8y-ngx-components-alarms.mjs","sources":["../../alarms/alarm-details-custom-button/alarm-details-button.service.ts","../../alarms/alarm-details-custom-button/alarm-details-button.pipe.ts","../../alarms/alarm-details.service.ts","../../alarms/alarms.model.ts","../../alarms/ng1-smart-rules-upgrade.service.ts","../../alarms/alarms-view.service.ts","../../alarms/alarm-severity-to-icon.pipe.ts","../../alarms/alarm-status-to-icon.pipe.ts","../../alarms/audit-changes-message.pipe.ts","../../alarms/alarm-details.component.ts","../../alarms/alarm-details.component.html","../../alarms/alarm-empty.component.ts","../../alarms/alarm-empty.component.html","../../alarms/alarm-info.component.ts","../../alarms/alarm-info.component.html","../../alarms/alarm-list-custom-indicator/alarm-list-indicator.service.ts","../../alarms/alarm-list-custom-indicator/alarm-list-indicator.pipe.ts","../../alarms/alarm-severities-to-title.pipe.ts","../../alarms/alarm-severity-to-label.pipe.ts","../../alarms/alarm-status-to-label.pipe.ts","../../alarms/alarms-filter.component.ts","../../alarms/alarms-filter.component.html","../../alarms/alarms-icon.component.ts","../../alarms/alarms-icon.component.html","../../alarms/alarms-interval-refresh.component.ts","../../alarms/alarms-interval-refresh.component.html","../../alarms/alarms-list.component.ts","../../alarms/alarms-list.component.html","../../alarms/alarms-date-filter.component.ts","../../alarms/alarms-date-filter.component.html","../../alarms/alarms-type-filter.component.ts","../../alarms/alarms-type-filter.component.html","../../alarms/alarms.component.ts","../../alarms/alarms.component.html","../../alarms/alarms.helper.ts","../../alarms/alarms.module.ts","../../alarms/c8y-ngx-components-alarms.ts"],"sourcesContent":["import { IAlarm, IManagedObject } from '@c8y/client';\nimport { combineLatest, Observable } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { PluginsResolveService, ServiceRegistry } from '@c8y/ngx-components';\nimport { AlarmDetailsButton } from '../alarms.model';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\n/**\n * A service to retrieve custom buttons for the alarm details view.\n */\nexport class AlarmDetailsButtonService {\n  constructor(\n    private serviceRegistry: ServiceRegistry,\n    private pluginsResolver: PluginsResolveService\n  ) {}\n\n  get$(alarm: IAlarm, source: IManagedObject): Observable<AlarmDetailsButton[]> {\n    const providers$ = this.pluginsResolver.allPluginsLoaded$.pipe(\n      filter(Boolean),\n      map(() => {\n        return this.serviceRegistry.get('alarmDetailsButton');\n      })\n    );\n\n    return providers$.pipe(\n      switchMap(providers => {\n        const observables$ = providers.map(provider =>\n          provider.getAlarmDetailsButton$(alarm, source).pipe(startWith(false))\n        );\n        return combineLatest(observables$);\n      }),\n      map(indicators => {\n        return indicators.filter(Boolean) as AlarmDetailsButton[];\n      }),\n      map(indicators => sortBy(indicators, this.byPriority))\n    );\n  }\n\n  private byPriority(item: AlarmDetailsButton) {\n    if (item.priority === undefined) {\n      return 0;\n    }\n    return -item.priority;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAlarm, IManagedObject } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { AlarmDetailsButtonService } from './alarm-details-button.service';\nimport { AlarmDetailsButton } from '../alarms.model';\n\n@Pipe({\n  standalone: true,\n  name: 'alarmDetailsButton',\n  pure: true\n})\n/**\n * A pipe to provide custom buttons for the alarm details view.\n *\n * Will call `get$()` method of `AlarmDetailsButtonService` to get the custom buttons for the provided alarm.\n */\nexport class AlarmDetailsButtonPipe implements PipeTransform {\n  constructor(private alarmDetailsButtonService: AlarmDetailsButtonService) {}\n\n  transform(alarm: IAlarm, source: IManagedObject): Observable<AlarmDetailsButton[]> {\n    return this.alarmDetailsButtonService.get$(alarm, source);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AlarmStatus, AlarmStatusType, IAuditRecord, IChange } from '@c8y/client';\nimport { Permissions } from '@c8y/ngx-components';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlarmDetailsService {\n  private readonly STATUS_ATTRIBUTE = 'status';\n\n  constructor(private permissions: Permissions) {}\n\n  /**\n   * Retrieves the username of the user who acknowledged an alarm status.\n   *\n   * This method checks if the provided status is equal to the acknowledged\n   * status. If it is not, or if the\n   * audit log is empty or the first log item does not contain a user, the\n   * method returns a default value ('--').\n   *\n   * If the status is the acknowledged status and the audit log contains valid\n   * records, the method iterates over the audit records in reverse order\n   * (starting from the most recent). It finds the first record where the\n   * status attribute (defined by this.STATUS_ATTRIBUTE) has been changed to\n   * the acknowledged status. The method then returns the username of the user\n   * who made this change.\n   *\n   * If no such change is found in the audit records, it returns the username\n   * from the first record of the audit log.\n   *\n   * There can be multiple audit logs with ACKNOWLEDGED status.\n   *\n   * @param status - The current status of the alarm.\n   * @param auditLog - An array of audit records to process.\n   * @returns The username of the user who acknowledged the status\n   *           or '--' if the status is not acknowledged or audit log is invalid.\n   */\n  getAcknowledgedBy(status: AlarmStatusType, auditLog: IAuditRecord[]): string {\n    let acknowledgedBy = '--';\n\n    if (status !== AlarmStatus.ACKNOWLEDGED || !auditLog || !auditLog[0]?.user) {\n      return acknowledgedBy;\n    }\n\n    acknowledgedBy = auditLog[0].user;\n\n    return auditLog.reduceRight((acc, auditLogItem) => {\n      const changes = Array.from(auditLogItem.changes || []);\n      const acknowledgedStatusChange = changes.find(\n        (change: IChange) =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.ACKNOWLEDGED\n      );\n      return (acknowledgedStatusChange && auditLogItem.user) || acc;\n    }, acknowledgedBy);\n  }\n\n  /**\n   * Calculates the acknowledge time from a list of audit records.\n   *\n   * This method iterates over the provided audit records in reverse order\n   * (starting from the most recent) and finds the first record where a\n   * specific status attribute (defined by this.STATUS_ATTRIBUTE) has been\n   * acknowledged. It then returns the creation time of that record.\n   *\n   * If no such record is found, the method returns the creation time of the\n   * first audit record. If the audit record list is empty, it returns null.\n   *\n   * There can be multiple audit logs with ACKNOWLEDGED status.\n   *\n   * @param auditLog - An array of audit records to process.\n   * @returns The creation time of the acknowledged record,\n   *           the creation time of the first record if no acknowledged record is found,\n   *           or null if the audit log is empty.\n   */\n  getAcknowledgeTime(auditLog: IAuditRecord[]): string | null {\n    const initialValue = auditLog.length ? auditLog[0].creationTime : null;\n\n    return auditLog.reduceRight((acc, auditLogItem) => {\n      const changes = Array.from(auditLogItem.changes || []);\n      const acknowledgedStatusChange = changes.find(\n        (change: IChange) =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.ACKNOWLEDGED\n      );\n      return acknowledgedStatusChange ? auditLogItem.creationTime : acc;\n    }, initialValue);\n  }\n\n  /**\n   * Retrieves the end time of an event from an audit log.\n   *\n   * The method processes the provided audit log to find the first instance\n   * (starting from the most recent record) where the status was changed to 'CLEARED'.\n   * It iterates over the audit records and\n   * checks the changes in each record to find this status change.\n   *\n   * If a record with the CLEARED status is found, the method returns the creation time\n   * of that record. If the entire audit log is processed without finding a CLEARED status,\n   * the creation time of the first audit log record is returned.\n   *\n   * If the audit log is empty or null, the method returns null.\n   *\n   * There can be only one audit log with CLEARED status.\n   *\n   * @param auditLog - An array of audit records to process.\n   * @returns The creation time of the record with the CLEARED status,\n   *          the creation time of the first record if no CLEARED status is found,\n   *          or null if the audit log is empty or null.\n   */\n  getEndTime(auditLog: IAuditRecord[]): string | null {\n    if (!auditLog || auditLog.length === 0) {\n      return null;\n    }\n\n    let latestClearedAuditTime = null;\n\n    for (const auditLogItem of auditLog) {\n      const changes = Array.from(auditLogItem.changes || []);\n      const clearedStatusChange = changes.find(\n        change =>\n          change.attribute === this.STATUS_ATTRIBUTE && change.newValue === AlarmStatus.CLEARED\n      );\n\n      if (clearedStatusChange) {\n        if (!latestClearedAuditTime || auditLogItem.creationTime > latestClearedAuditTime) {\n          latestClearedAuditTime = auditLogItem.creationTime;\n        }\n      }\n    }\n\n    return latestClearedAuditTime || auditLog[0].creationTime;\n  }\n\n  checkIfHasAnyRoleAllowingToCreateSmartRule(): boolean {\n    const ROLES_ALLOWING_SMART_RULE_CREATION = [\n      [\n        Permissions.ROLE_INVENTORY_ADMIN,\n        Permissions.ROLE_INVENTORY_CREATE,\n        Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n        Permissions.ROLE_MANAGED_OBJECT_CREATE\n      ],\n      [Permissions.ROLE_CEP_MANAGEMENT_ADMIN, Permissions.ROLE_SMARTRULE_ADMIN]\n    ];\n\n    return (\n      this.permissions.hasAnyRole(ROLES_ALLOWING_SMART_RULE_CREATION[0]) &&\n      this.permissions.hasAnyRole(ROLES_ALLOWING_SMART_RULE_CREATION[1])\n    );\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n  AlarmStatus,\n  AlarmStatusSettings,\n  AlarmStatusType,\n  IAlarm,\n  IManagedObject,\n  Severity,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport {\n  DateTimeContext,\n  gettext,\n  NavigatorNode,\n  NavigatorNodeData,\n  Route\n} from '@c8y/ngx-components';\nimport { QueryParamsHandling } from '@angular/router';\nimport type { SupportedIcons } from '@c8y/ngx-components/icon-selector/icons';\nimport { Observable } from 'rxjs';\nimport {\n  INTERVALS,\n  INTERVAL_TITLES,\n  AlarmFilterInterval\n} from '@c8y/ngx-components/interval-picker';\n\nexport interface AlarmsModuleConfig {\n  /**\n   * Indicates whether the application is a combination of Angular and AngularJS.\n   * @optional\n   */\n  hybrid?: boolean;\n\n  /**\n   * The root node of the navigator, which can be either a `NavigatorNode` or `NavigatorNodeData`.\n   * This serves as the entry point for navigation structure for Alarms views.\n   * @optional\n   */\n  rootNavigatorNode?: NavigatorNode | NavigatorNodeData;\n\n  /**\n   * An array of `Route` objects representing the navigation routes available.\n   * Each route defines a navigation path and its associated components related to Alarms.\n   * @optional\n   */\n  route?: Route[];\n}\n\nexport const ALARMS_MODULE_CONFIG = new InjectionToken('AlarmsModuleConfig');\n\nexport type AlarmCount = { [key in SeverityType]: number };\n\nexport const ALARM_STATUS_ICON = {\n  ALERT_IDLE: 'c8y-alert-idle',\n  BELL_SLASH: 'bell-slash',\n  BELL: 'bell'\n} as const;\n\nexport type AlarmStatusIcon = (typeof ALARM_STATUS_ICON)[keyof typeof ALARM_STATUS_ICON];\n\n/**\n * A lookup table to map alarm statuses to corresponding icons.\n */\nexport const AlarmIconMap: Record<AlarmStatusType, AlarmStatusIcon> = {\n  [AlarmStatus.CLEARED]: ALARM_STATUS_ICON.ALERT_IDLE,\n  [AlarmStatus.ACKNOWLEDGED]: ALARM_STATUS_ICON.BELL_SLASH,\n  [AlarmStatus.ACTIVE]: ALARM_STATUS_ICON.BELL\n} as const;\n\nexport const ALARM_SEVERITY_ICON = {\n  CIRCLE: 'circle',\n  HIGH_PRIORITY: 'high-priority',\n  WARNING: 'warning',\n  EXCLAMATION_CIRCLE: 'exclamation-circle'\n} as const;\n\nexport const HELP_ICON = 'help';\n\nexport type AlarmSeverityIcon = (typeof ALARM_SEVERITY_ICON)[keyof typeof ALARM_SEVERITY_ICON];\n/**\n * A lookup table to map alarm severity types to corresponding icons.\n */\nexport const ALARM_SEVERITY_ICON_MAP: Record<SeverityType, AlarmSeverityIcon> = {\n  [Severity.CRITICAL]: ALARM_SEVERITY_ICON.EXCLAMATION_CIRCLE,\n  [Severity.MAJOR]: ALARM_SEVERITY_ICON.WARNING,\n  [Severity.MINOR]: ALARM_SEVERITY_ICON.HIGH_PRIORITY,\n  [Severity.WARNING]: ALARM_SEVERITY_ICON.CIRCLE\n} as const;\n\nexport type AlarmListFormFilters = {\n  showCleared: boolean;\n  severityOptions: SeverityFilter;\n  selectedDates?: DateTimeContext;\n};\n\n/**\n * Extended interval titles with an additional title for the case when no date is selected.\n */\nexport const INTERVAL_TITLES_EXTENDED: Record<AlarmFilterInterval['id'], string> = {\n  ...INTERVAL_TITLES,\n  none: gettext('No date filter')\n};\n\nexport const INTERVALS_EXTENDED: AlarmFilterInterval[] = [\n  {\n    id: 'none',\n    title: gettext('No date filter')\n  },\n  ...INTERVALS\n];\n\nexport type WidgetTimeContextStateExtended = {\n  date: DateTimeContext;\n  interval: AlarmFilterInterval['id'];\n};\n\nexport type SelectedAlarm = IAlarm | null;\n\nexport const DEFAULT_ALARM_COUNTS: AlarmCount = { CRITICAL: 0, MAJOR: 0, MINOR: 0, WARNING: 0 };\n\nexport const DEFAULT_SEVERITY_VALUES: SeverityFilter = {\n  [Severity.CRITICAL]: true,\n  [Severity.MAJOR]: true,\n  [Severity.MINOR]: true,\n  [Severity.WARNING]: true\n};\n\nexport const DEFAULT_STATUS_VALUES: AlarmStatusSettings = {\n  [AlarmStatus.ACTIVE]: true,\n  [AlarmStatus.ACKNOWLEDGED]: true,\n  [AlarmStatus.CLEARED]: true\n};\n\nexport const ALARMS_PATH = 'alarms';\n\nexport type CustomFragment = {\n  [key: string]: unknown;\n};\n\n/**\n * Default properties of a alarm. Used to extract the custom properties from a Alarm object.\n */\nexport const ALARM_DEFAULT_PROPERTIES = [\n  'severity',\n  'source',\n  'type',\n  'time',\n  'text',\n  'id',\n  'status',\n  'count',\n  'name',\n  'history',\n  'self',\n  'creationTime',\n  'firstOccurrenceTime',\n  'lastUpdated'\n] as const satisfies ReadonlyArray<keyof IAlarm>;\n\nexport const THROTTLE_REALTIME_REFRESH = 1_000;\n\n/**\n * Represents the navigation options for an alarm component.\n */\nexport type AlarmNavigationOptions = {\n  /**\n   * Defines if the alarm should navigate to a detail view when clicked.\n   */\n  allowNavigationToAlarmsView: boolean;\n  /**\n   * Defines if the component should try to determine the context to navigate\n   * to the correct alarm detail view or not. If set to true, the component will\n   * not try to determine the context and will always navigate to the all alarms view.\n   */\n  alwaysNavigateToAllAlarms: boolean;\n  /**\n   * Defines if the cleared query parameter should be included in the navigation if\n   * the alarm is cleared.\n   */\n  includeClearedQueryParams: boolean;\n  /**\n   * Determines how query parameters should be handled during navigation.\n   * This property can be set to one of three values:\n   *\n   * - `\"merge\"` : Merge new parameters with current parameters.\n   * - `\"preserve\"` : Preserve current parameters.\n   * - `\"\"` : Replace current parameters with new parameters. This is the default behavior.\n   */\n  queryParamsHandling: QueryParamsHandling;\n};\n\nexport interface AlarmDetailsButton {\n  additionalButtonClasses?: string;\n  title: string;\n  icon: SupportedIcons;\n  additionalIconClasses?: string;\n  label?: string;\n  disabled?: boolean;\n  /**\n   * Action to be executed when the button is clicked.\n   * @param alarm The alarm to apply this action to\n   * @returns A boolean or a promise that resolves to a boolean or to the updated alarm. If the result is true, a reload will be triggered. If the result is an alarm, the alarm will be updated with the new values.\n   */\n  action: (alarm: IAlarm) => boolean | Promise<boolean | IAlarm>;\n  priority?: number;\n}\n\nexport interface AlarmListIndicatorBase {\n  priority?: number;\n}\n\nexport interface AlarmListIndicatorIcon extends AlarmListIndicatorBase {\n  icon: SupportedIcons;\n  title: string;\n  class?: string;\n}\n\nexport type AlarmListIndicator = AlarmListIndicatorIcon;\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace CumulocityServiceRegistry {\n    interface SpecificExtensionKeys {\n      alarmDetailsButton: AlarmDetailsButtonProvider;\n      alarmListIndicator: AlarmListIndicatorProvider;\n    }\n\n    interface AlarmDetailsButtonProvider {\n      /**\n       * Determines whether the button should be shown for a given alarm.\n       * @param alarm The alarm for which to determine button visibility.\n       * @param source The managed object associated with the alarm.\n       * @returns The button details or false.\n       */\n      getAlarmDetailsButton$(\n        alarm: IAlarm,\n        source: IManagedObject\n      ): Observable<AlarmDetailsButton | false>;\n    }\n\n    interface AlarmListIndicatorProvider {\n      /**\n       * Determines whether the indicator should be shown for a given alarm.\n       * @param alarm The alarm for which to determine indicator visibility.\n       * @returns The indicator details or false.\n       */\n      getAlarmListIndicator$(alarm: IAlarm): Observable<AlarmListIndicator | false>;\n    }\n  }\n}\n","/**\n * This service is a duplicate of smart-rules-service with slight name change.\n * Duplicating allows to pass 'Verify App tutorial' job.\n * Name renames allows to pass 'Reusable build codex' job.\n * Overall this service is considered as a workaround.\n * In ticket MTM-58985 we will investigate if it's possible to remove this service\n * along with making failing jobs pass.\n */\nexport abstract class Ng1SmartRulesUpgradeService {\n  abstract permissionsCfgs;\n  abstract addNewForOutputOperationWithUI(operation);\n  abstract addNewForInputAlarmAndOutputUserWithUI(alarm, user);\n}\n\nexport function SmartRulesUpgradeServiceFactory(injector: any) {\n  return injector.get('smartRulesSvc');\n}\n\nexport const smartRulesUpgradeServiceProvider = {\n  provide: Ng1SmartRulesUpgradeService,\n  useFactory: SmartRulesUpgradeServiceFactory,\n  deps: ['$injector']\n};\n","import { Injectable } from '@angular/core';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmQueryFilter,\n  AlarmService,\n  AlarmStatus,\n  AlarmStatusType,\n  IAlarm,\n  IResultList,\n  Severity,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport {\n  ApplicationOptions,\n  ContextData,\n  DateTimeContext,\n  OptionsService,\n  ViewContext,\n  gettext\n} from '@c8y/ngx-components';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { ALARMS_PATH, INTERVALS_EXTENDED } from './alarms.model';\nimport { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';\n\n/**\n * Service for managing and retrieving alarms data within the alarms view.\n *\n * The `AlarmsViewService` provides functionality to interact with alarms,\n * including filtering, counting, and translation-related operations in an alarms view.\n *\n * This service relies on the `AlarmService` for fetching alarm data and the `OptionsService`\n * for configuring alarms view options.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlarmsViewService {\n  readonly ALARM_REFRESH_TYPE_KEY: keyof ApplicationOptions = 'alarmsRefreshType';\n  readonly DEFAULT_INTERVAL_VALUE = 30_000;\n  readonly DEFAULT_REFRESH_OPTION_VALUE = 'interval';\n  readonly DEFAULT_INTERVAL_VALUES = [5_000, 10_000, 15_000, 30_000, 60_000];\n  readonly REALTIME_UPDATE_ALARMS_MESSAGE = gettext('The list was updated, click to refresh.');\n\n  isIntervalEnabled$: Observable<boolean>;\n  reloadAlarmsList$ = new Subject<void>();\n\n  private _isIntervalEnabled: BehaviorSubject<boolean>;\n\n  constructor(\n    private alarmService: AlarmService,\n    private optionsService: OptionsService\n  ) {\n    if (this.isIntervalRefresh()) {\n      this._isIntervalEnabled = new BehaviorSubject<boolean>(true);\n      this.isIntervalEnabled$ = this._isIntervalEnabled.asObservable();\n    }\n  }\n\n  /**\n   * Emits a subject to initialize the alarms reloading.\n   */\n  updateAlarmList(): void {\n    this.reloadAlarmsList$.next();\n  }\n\n  /**\n   * Retrieves a list of alarms filtered by specified severities and other optional query filters.\n   *\n   * @param severities an array of severities to filter the alarms.\n   * @param showCleared flag indicating whether to show cleared alarms. Defaults to false.\n   * @param selectedDates an array of two dates to filter alarms by creation and last update dates.\n   * @param filter additional query filters for retrieving alarms.\n   *\n   * @returns A promise that resolves to a list of alarms satisfying the specified filters.\n   */\n  retrieveFilteredAlarms(\n    severities: SeverityType[],\n    showCleared = false,\n    selectedDates?: [Date, Date],\n    filter?: AlarmQueryFilter\n  ): Promise<IResultList<IAlarm>> {\n    const severitiesQuery = this.getSeverityQueryParameter(severities);\n    const statusesQuery = this.getStatusQueryParameter(showCleared);\n\n    const _filter: AlarmQueryFilter = {\n      pageSize: 50,\n      withTotalPages: true,\n      ...(severitiesQuery && { severity: severitiesQuery }),\n      ...(statusesQuery && { status: statusesQuery }),\n      ...(selectedDates && {\n        lastUpdatedFrom: selectedDates[0].toISOString(),\n        createdTo: selectedDates[1].toISOString()\n      }),\n      ...filter\n    };\n    return this.alarmService.list(_filter);\n  }\n\n  retrieveAlarmsByDate(dates: DateTimeContext) {\n    return this.alarmService.list({\n      lastUpdatedFrom: dates[0].toISOString(),\n      createdTo: dates[1].toISOString(),\n      pageSize: 50,\n      withTotalPages: true\n    });\n  }\n\n  /**\n   * Updates the state to enable or disable intervals.\n   * @param value - A boolean value to indicate whether to enable intervals.\n   */\n  updateIntervalState(value: boolean): void {\n    this._isIntervalEnabled?.next(value);\n  }\n\n  /**\n   * Fetches the count of alarms filtered by severity and clearance status.\n   *\n   * @param severity - The severity level to filter by (e.g., CRITICAL, MAJOR, etc.).\n   * @param showCleared - Whether or not to include cleared alarms in the count.\n   * @param filter - Additional filter criteria for alarms.\n   *\n   * @returns A promise that resolves to the number of alarms that match the filter criteria.\n   *\n   */\n  async getAlarmsCountBySeverity(\n    severity: SeverityType,\n    showCleared: boolean,\n    filter?: AlarmQueryFilter\n  ): Promise<number> {\n    const statusesQuery = this.getStatusQueryParameter(showCleared);\n    const _filter: AlarmQueryFilter = {\n      ...(severity && { severity: severity }),\n      ...(statusesQuery && { status: statusesQuery }),\n      ...filter\n    };\n    const { data } = await this.alarmService.count(_filter);\n\n    return data;\n  }\n\n  /**\n   * Retrieves the current alarms refresh type from the OptionsService\n   * and determines whether it is set to \"interval\".\n   *\n   * @returns `true` if the alarms refresh type is \"interval,\" otherwise `false`.\n   */\n  isIntervalRefresh(): boolean {\n    const value = this.optionsService.get(this.ALARM_REFRESH_TYPE_KEY, 'interval');\n    return value === 'interval';\n  }\n\n  /**\n   * Updates the list of selected severities based on the new severity filter.\n   *\n   * @param severityUpdates - The object representing the updates to each severity.\n   *\n   * @returns An array representing the updated selected severities.\n   */\n  updateSelectedSeverities(severityUpdates: SeverityFilter): SeverityType[] {\n    return (Object.keys(severityUpdates) as SeverityType[])\n      .filter(key => severityUpdates[key])\n      .map(key => key.toUpperCase() as SeverityType);\n  }\n\n  /**\n   * Clears all active alarms of the selected severities.\n   *\n   * This method clears all active alarms for the given list of severities by making bulk update calls. If no severities are selected, it defaults to using all available severities.\n   * It works by sending a series of update requests for each severity and returns a Promise that resolves with an object indicating if all alarms were resolved immediately.\n   *\n   * @param selectedSeverities An array of severities to be cleared. If not provided, all severities will be cleared.\n   * @param sourceId - Identifier for the source associated with the alarms to be cleared.\n   *\n   * @returns A Promise that resolves with an object with a flag `resolvedImmediately`. The flag is true if all alarms for all selected severities were cleared successfully; otherwise false.\n   *\n   * **Example**\n   * ```typescript\n   * const severitiesToClear: SeverityType[] = [Severity.MAJOR, Severity.MINOR];\n   *\n   * clearAllActiveAlarms(severitiesToClear).then(({ resolvedImmediately }) => {\n   *   if (resolvedImmediately) {\n   *     console.log('All selected alarms were cleared successfully.');\n   *   } else {\n   *     console.log('Some alarms could not be cleared.');\n   *   }\n   * });\n   * ```\n   *\n   * **Note**\n   * - The method uses the `alarmService.updateBulk` for each severity to clear the active alarms.\n   * - It may fetch the `sourceId` based on the view (if applicable) and include it as a query parameter in the update calls.\n   * - The method returns immediately but the returned Promise needs to have a `then` or `catch` method call to handle the result or error respectively.\n   * - Uses `Promise.all` to wait for all update requests to complete before resolving the final result.\n   */\n  async clearAllActiveAlarms(\n    selectedSeverities: SeverityType[],\n    sourceId: string | number\n  ): Promise<{ resolvedImmediately: boolean }> {\n    const severitiesToUpdate = selectedSeverities || Severity;\n\n    const promises = Object.values(severitiesToUpdate).map((severity: SeverityType) => {\n      const commonParams = { resolved: false, severity };\n\n      const parameters = sourceId\n        ? {\n            ...commonParams,\n            source: sourceId,\n            withSourceAssets: true,\n            withSourceDevices: true\n          }\n        : commonParams;\n\n      return this.alarmService.updateBulk({ status: AlarmStatus.CLEARED }, parameters);\n    });\n\n    const responses = await Promise.all(promises);\n    return {\n      resolvedImmediately: responses.every(res => res)\n    };\n  }\n\n  /**\n   * Returns the correct link based on the provided context data.\n   * @param contextData The context the navigation was triggered from.\n   * @param alarm The alarm to navigate to.\n   * @returns A link to be used as an url navigation.\n   */\n  getRouterLink(contextData?: ContextData, alarm?: IAlarm): string {\n    let detailUrl = `/${ALARMS_PATH}`;\n    if (alarm) {\n      detailUrl = `/${ALARMS_PATH}/${alarm.id}`;\n    }\n    if (!contextData) {\n      return detailUrl;\n    }\n\n    switch (contextData.context) {\n      case ViewContext.Device:\n        return `/device/${contextData.contextData.id}${detailUrl}`;\n      case ViewContext.Group:\n        return `/group/${contextData.contextData.id}${detailUrl}`;\n      case ViewContext.Simulators:\n        return `/simulators/${contextData.contextData.id}${detailUrl}`;\n      default:\n        return detailUrl;\n    }\n  }\n\n  /**\n   * Returns the correct array navigation.\n   * @param contextData The context the navigation was triggered from.\n   * @param alarm The alarm to navigate to.\n   * @returns A link to be used as a router.navigation.\n   */\n  getRouterNavigationArray(contextData?: ContextData, alarm?: IAlarm): string[] {\n    return this.getRouterLink(contextData, alarm).split('/').filter(Boolean);\n  }\n\n  /**\n   * Returns the correct from and to dates based on the selected interval\n   * @param intervalId the selected interval. E.g. 'none', 'hours', 'custom' ...\n   * @returns The calculated date context based on the selected interval.\n   */\n  getDateTimeContextByInterval(intervalId: AlarmFilterInterval['id']): DateTimeContext {\n    const interval = INTERVALS_EXTENDED.find(({ id }) => id === intervalId);\n    if (interval.id === 'none') {\n      return [new Date(0), new Date()];\n    }\n\n    const dateTo = new Date();\n    const dateFrom = new Date(dateTo.valueOf() - interval.timespanInMs);\n    return [dateFrom, dateTo];\n  }\n\n  /**\n   * Creates a value for query parameter for filtering alarms by severity based on array of selected severities.\n   *\n   * @param severities - An array of alarm severity types to include in the filter.\n   * If the array is empty or undefined, no severity filter will be applied.\n   *\n   * @returns A comma-separated string of selected alarm severities,\n   * or null if no severities are provided.\n   */\n  private getSeverityQueryParameter(severities: SeverityType[]): string | null {\n    if (!severities || severities.length === 0) {\n      return;\n    }\n    if (severities.length === Object.keys(Severity).length) {\n      return;\n    }\n\n    return severities.join(',');\n  }\n\n  /**\n   * Creates a value for query parameter for filtering alarms by statuses based on showCleared option.\n   *\n   * @param showCleared - A flag indicating whether to include cleared statuses.\n   * If true, all statuses, including 'CLEARED', will be included; if false, 'CLEARED' will be excluded.\n   *\n   * @returns A comma-separated string of alarm statuses.\n   */\n  private getStatusQueryParameter(showCleared: boolean): string {\n    const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n    const filteredStatuses = showCleared\n      ? statuses\n      : statuses.filter(status => status !== 'CLEARED');\n    return filteredStatuses.join(',');\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Severity, SeverityType } from '@c8y/client';\nimport { ALARM_SEVERITY_ICON_MAP, AlarmSeverityIcon, HELP_ICON } from './alarms.model';\n\n/**\n * Pipe for transforming alarm severity types into corresponding icons.\n *\n * @example\n * Usage in an Angular template:\n * {{ 'CRITICAL' | AlarmSeverityToIcon }}\n * Result: 'exclamation-circle'\n */\n@Pipe({\n  name: 'AlarmSeverityToIcon',\n  standalone: true\n})\nexport class AlarmSeverityToIconPipe implements PipeTransform {\n  /**\n   * Transforms an alarm severity type into a corresponding icon.\n   *\n   * @param alarmSeverity - The severity type of the alarm.\n   * @returns The corresponding icon for the given alarm severity type.\n   */\n  transform(alarmSeverity: SeverityType): AlarmSeverityIcon | typeof HELP_ICON {\n    const alarmSeverityMapped = Severity[alarmSeverity?.toUpperCase()];\n    return ALARM_SEVERITY_ICON_MAP[alarmSeverityMapped] || HELP_ICON;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AlarmIconMap, AlarmStatusIcon, HELP_ICON } from './alarms.model';\nimport { AlarmStatusType } from '@c8y/client';\n/**\n * Angular pipe for transforming alarm statuses into corresponding icons.\n *\n * @example\n * Usage in an Angular template:\n * {{ 'ACTIVE' | AlarmStatusToIcon }}\n * Result: 'bell'\n */\n@Pipe({\n  name: 'AlarmStatusToIcon'\n})\nexport class AlarmStatusToIconPipe implements PipeTransform {\n  /**\n   * Transforms an alarm status into a corresponding icon.\n   *\n   * @param alarmStatus - The status of the alarm.\n   * @returns - The corresponding icon for the given alarm status.\n   */\n  transform(alarmStatus: AlarmStatusType): AlarmStatusIcon | typeof HELP_ICON {\n    return AlarmIconMap[alarmStatus?.toUpperCase()] || HELP_ICON;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAuditRecord } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * A pipe for transforming audit record data into localized messages.\n * It specifically addresses changes in the audit records, with an emphasis on status changes.\n */\n@Pipe({\n  name: 'auditChangesMessage'\n})\nexport class AuditChangesMessagePipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an IAuditRecord into a localized string message.\n   * If the record contains changes, and if the first change is related to the 'status' attribute,\n   * it formats a message indicating the status change. Otherwise, it returns a general activity message.\n   * Example when there is a status change: \"Alarm status changed from ACKNOWLEDGED to ACTIVE\".\n   * Example when record does not have a status attribute: \"Alarm updated\".\n   *\n   * @param record - The audit record to be transformed.\n   * @returns The localized message describing the audit record,\n   *                   particularly focusing on status changes if applicable.\n   */\n  transform(record: IAuditRecord): string {\n    const firstItem = !!record.changes && Array.from(record.changes)[0];\n    if (!firstItem || firstItem.attribute !== 'status') {\n      const activityString = gettext(record.activity);\n      return this.translateService.instant(activityString);\n    }\n\n    const { newValue, previousValue } = firstItem;\n\n    const message = gettext(`Alarm status changed from {{ previousValue }} to {{ newValue }}`);\n\n    return this.translateService.instant(message, {\n      previousValue: this.translateService.instant(previousValue),\n      newValue: this.translateService.instant(newValue)\n    });\n  }\n}\n","import { Component, Input, OnChanges, Optional, SimpleChanges } from '@angular/core';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmStatus,\n  AlarmService,\n  AlarmStatusType,\n  AuditService,\n  IAlarm,\n  IApplication,\n  IAuditRecord,\n  IManagedObject,\n  IResultList,\n  InventoryService,\n  SEVERITY_LABELS\n} from '@c8y/client';\nimport {\n  AlertService,\n  AppStateService,\n  ColorService,\n  RelativeTimePipe,\n  gettext,\n  SupportedAppKey,\n  InterAppService,\n  SupportedApps\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AlarmDetailsService } from './alarm-details.service';\nimport {\n  ALARM_DEFAULT_PROPERTIES,\n  ALARM_STATUS_ICON,\n  AlarmDetailsButton,\n  CustomFragment\n} from './alarms.model';\nimport { Ng1SmartRulesUpgradeService } from './ng1-smart-rules-upgrade.service';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n@Component({\n  selector: 'c8y-alarm-details',\n  templateUrl: './alarm-details.component.html'\n})\nexport class AlarmDetailsComponent implements OnChanges {\n  @Input() selectedAlarm: IAlarm;\n\n  readonly ACKNOWLEDGED_STATUS_VALUE = AlarmStatus.ACKNOWLEDGED;\n  readonly ACTIVE_STATUS_VALUE = AlarmStatus.ACTIVE;\n  readonly CLEARED_STATUS_VALUE = AlarmStatus.CLEARED;\n  readonly ACKNOWLEDGE_LABEL = gettext('Acknowledge');\n  readonly REACTIVATE_LABEL = gettext('Reactivate');\n  readonly SEVERITY_LABELS = SEVERITY_LABELS;\n  readonly BELL_SLASH_ICON = ALARM_STATUS_ICON.BELL_SLASH;\n  readonly BELL_ICON = ALARM_STATUS_ICON.BELL;\n\n  /**\n   * Represents a Device Management application used by the user.\n   * Determines the accurate name and context path required for navigating to alarms of the current device\n   */\n  userDeviceManagementApp$: Observable<IApplication>;\n  /**\n   * Manages the visibility of the navigation link.\n   * If set to true, the link is visible, otherwise, it remains hidden.\n   */\n  showSourceNavigationLink$: Observable<boolean>;\n  deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n  readonly linkTitle = gettext('Open in {{ appName }}');\n  /**\n   * Contains audit logs, including the very first audit log record in the alarms' history.\n   * This ensures that the historical starting point of the audit logs is always included in the data set.\n   * Usually it's an 'Alarm created' audit log.\n   *\n   * Only used when audit logs exceed PAGE_SIZE.\n   *\n   * @private\n   */\n  private extendedAuditLogs: IResultList<IAuditRecord>;\n  private readonly PAGE_SIZE = 100;\n\n  /**\n   * Prevents the pipeline from failing for a tutorial application\n   * because it's a pure Angular application and doesn't support any\n   * AngularJS services.\n   */\n  isCreateSmartRulesButtonAvailable: boolean;\n  /**\n   * Property contains a 100 (see PAGE_SIZE) of most recent audit logs records.\n   */\n  auditLog: IResultList<IAuditRecord>;\n\n  isLoading: boolean;\n  /**\n   * Indicates when alarms status change was started (Acknowledge/Reactivate)\n   */\n  isAlarmStatusChanging = false;\n  /**\n   * Represents a value for a 'Last updated' section in details.\n   */\n  lastUpdated: string;\n  /**\n   * Represents a value for a 'Status' section in details.\n   */\n  statusMessage: string;\n  /**\n   * The color of the alarm type.\n   */\n  typeColor: string;\n  /**\n   * Custom fragments of the selected alarm. If none exist, null is returned.\n   */\n  customFragments: CustomFragment = null;\n\n  selectedAlarmMO: IManagedObject;\n\n  constructor(\n    private alarmDetailsService: AlarmDetailsService,\n    private alarmService: AlarmService,\n    private alertService: AlertService,\n    private appState: AppStateService,\n    private auditService: AuditService,\n    private relativeTime: RelativeTimePipe,\n    @Optional() private ng1SmartRulesUpgradeService: Ng1SmartRulesUpgradeService,\n    private translateService: TranslateService,\n    private inventoryService: InventoryService,\n    private alarmsViewService: AlarmsViewService,\n    private colorService: ColorService,\n    private interAppService: InterAppService\n  ) {}\n\n  async ngOnInit(): Promise<void> {\n    const isSmartRulesServiceSubscribed = !!(await firstValueFrom(\n      this.interAppService.getApp$(SupportedApps.smartrules)\n    ));\n    const hasAnyRoleAllowingToCreateSmartRule =\n      this.alarmDetailsService.checkIfHasAnyRoleAllowingToCreateSmartRule();\n    this.isCreateSmartRulesButtonAvailable =\n      !!this.ng1SmartRulesUpgradeService &&\n      isSmartRulesServiceSubscribed &&\n      hasAnyRoleAllowingToCreateSmartRule;\n    this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n    this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n      this.deviceManagementAppKey\n    );\n    this.typeColor = await this.colorService.generateColor(this.selectedAlarm.type);\n  }\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.selectedAlarm && changes.selectedAlarm.currentValue) {\n      await this.reloadAuditLog(true, true);\n      await this.updateStatusMessage();\n      const { data } = await this.inventoryService.detail(this.selectedAlarm.source.id);\n      this.selectedAlarmMO = data;\n      this.updateLastUpdatedDate(this.auditLog.data[0]);\n      this.customFragments = this.getCustomFragments(this.selectedAlarm);\n    }\n  }\n\n  createSmartRule(): void {\n    if (!this.isCreateSmartRulesButtonAvailable) {\n      return;\n    }\n    this.ng1SmartRulesUpgradeService.addNewForInputAlarmAndOutputUserWithUI(\n      this.selectedAlarm,\n      this.appState.currentUser.value\n    );\n  }\n\n  /**\n   * Navigates to a specific alarm source device based on the provided source.\n   *\n   * @param sourceId - The source id.\n   */\n  async goToAlarmSource(sourceId: string | number): Promise<void> {\n    const { data } = await this.alarmService.detail(sourceId);\n    await this.interAppService.navigateToApp(\n      this.deviceManagementAppKey,\n      `#/device/${data.source.id}/alarms`\n    );\n  }\n\n  /**\n   * Reloads audit log data asynchronously.\n   *\n   * This method fetches audit records using `getAlarmAuditRecords` and optionally updates the audit logs\n   * state in the component based on the `isSetAuditLogs` flag. It handles the loading state and potential\n   * errors during the fetch operation.\n   *\n   * @param isRevert - A boolean flag indicating whether to retrieve a 100 (see PAGE_SIZE) records (true)\n   *                   or only record, that chronologically will be the oldest one (false). Defaults to true.\n   *                   If set to false, it will set PAGE_SIZE to 1 and trigger a logic\n   *                   concatenating a most recent record with the very first one to\n   *                   calculate the alarm duration (change to CLEARED status).\n   *                   It's passed to the `getAlarmAuditRecords` method.\n   * @param isSetAuditLogs - A boolean flag to determine if the fetched audit logs should be set in the component state. Defaults to `false`.\n   * @returns A promise that resolves to a list of `IAuditRecord` objects.\n   */\n  async reloadAuditLog(\n    isRevert = true,\n    isSetAuditLogs = false\n  ): Promise<IResultList<IAuditRecord>> {\n    try {\n      this.isLoading = true;\n      const auditLogs = await this.getAlarmAuditRecords(isRevert);\n\n      if (isSetAuditLogs) {\n        this.setAuditLogs(auditLogs);\n      }\n\n      return auditLogs;\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  async onUpdateDetails(status: AlarmStatusType): Promise<void> {\n    try {\n      this.isAlarmStatusChanging = true;\n      await this.updateAlarmStatus(status);\n      await this.reloadAuditLog(true, true);\n      await this.updateStatusMessage();\n      this.updateLastUpdatedDate(this.auditLog.data[0]);\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isAlarmStatusChanging = false;\n    }\n  }\n\n  async detailsButtonAction(button: AlarmDetailsButton, alarm: IAlarm): Promise<void> {\n    const result = button.action(alarm);\n    let shouldReload: boolean | IAlarm = false;\n    if (result instanceof Promise) {\n      shouldReload = await result;\n    } else {\n      shouldReload = result;\n    }\n\n    if (shouldReload) {\n      let alarm: IAlarm;\n      if (shouldReload === true) {\n        const { data: updatedAlarm } = await this.alarmService.detail(this.selectedAlarm.id);\n        alarm = updatedAlarm;\n      } else {\n        alarm = shouldReload;\n      }\n      this.alarmsViewService.updateAlarmList();\n\n      const previousValue = this.selectedAlarm;\n      this.selectedAlarm = alarm;\n      this.ngOnChanges({\n        selectedAlarm: {\n          currentValue: alarm,\n          previousValue,\n          firstChange: false,\n          isFirstChange: () => false\n        }\n      });\n    }\n  }\n\n  private async updateAlarmStatus(status: AlarmStatusType): Promise<void> {\n    const partiallyUpdatedAlarm: Partial<IAlarm> = { id: this.selectedAlarm.id, status };\n    await this.alarmService.update(partiallyUpdatedAlarm);\n    const translatedStatusLabel = this.translateService.instant(ALARM_STATUS_LABELS[status]);\n    this.alertService.success(\n      this.translateService.instant(gettext('Alarm status changed to {{ status }}'), {\n        status: translatedStatusLabel.toUpperCase()\n      })\n    );\n    this.selectedAlarm.status = status;\n    this.alarmsViewService.updateAlarmList();\n  }\n\n  /**\n   * Retrieves the audit log and appends the last audit record to it.\n   *\n   * This method fetches the existing audit log data and makes a deep copy of it. It then\n   * retrieves the last audit record and appends it to the copied audit log data. This is\n   * useful for scenarios where the most recent audit record needs to be included in the\n   * existing audit log data (calculating the CLEARED period).\n   *\n   * @returns A promise of `IResultList<IAuditRecord>`, which includes the\n   *          existing audit log data along with the last audit record appended.\n   * @private\n   */\n  private async auditLogWithFirstRecord(): Promise<IResultList<IAuditRecord>> {\n    const existingData = this.auditLog;\n    const copiedExistingData = cloneDeep(existingData);\n\n    const lastAuditRecord = await this.reloadAuditLog(false);\n    const lastRecord = lastAuditRecord.data[lastAuditRecord.data.length - 1];\n    copiedExistingData.data.push(lastRecord);\n    return copiedExistingData;\n  }\n\n  private setAuditLogs(auditLogs: IResultList<IAuditRecord>): void {\n    this.auditLog = auditLogs;\n  }\n\n  private updateLastUpdatedDate(updatedAuditRecords: IAuditRecord): void {\n    if (!updatedAuditRecords) {\n      return;\n    }\n\n    const { creationTime } = updatedAuditRecords;\n    this.lastUpdated = creationTime;\n  }\n\n  private getActiveStatusMessage(time: string): string {\n    return this.translateService.instant(gettext('ACTIVE`alarm`: triggered {{alarmTimeFromNow}}'), {\n      alarmTimeFromNow: this.relativeTime.transform(new Date(time))\n    });\n  }\n\n  private getAcknowledgedStatusMessage(status: AlarmStatusType, changeLog: IAuditRecord[]): string {\n    if (changeLog.length === 0) {\n      return this.translateService.instant(gettext('ACKNOWLEDGED`alarm`'));\n    }\n\n    const acknowledgedBy = this.alarmDetailsService.getAcknowledgedBy(status, changeLog);\n    const acknowledgeTime = this.alarmDetailsService.getAcknowledgeTime(changeLog);\n\n    if (acknowledgedBy) {\n      return this.translateService.instant(\n        gettext('ACKNOWLEDGED`alarm` by: {{ackBy}} {{ackTimeFromNow}}'),\n        {\n          ackBy: acknowledgedBy,\n          ackTimeFromNow: this.relativeTime.transform(new Date(acknowledgeTime))\n        }\n      );\n    }\n\n    return this.translateService.instant(gettext('ACKNOWLEDGED`alarm` {{ackTimeFromNow}}'), {\n      ackTimeFromNow: this.relativeTime.transform(new Date(acknowledgeTime))\n    });\n  }\n\n  private getClearedStatusMessage(auditLog: IAuditRecord[]): string {\n    if (auditLog.length === 0) {\n      return this.translateService.instant(gettext('CLEARED`alarm`'));\n    }\n\n    const differenceInMs = this.calculateAlarmDuration(auditLog);\n\n    return this.translateService.instant(\n      gettext('CLEARED`alarm`: was active for {{alarmDuration}}'),\n      {\n        alarmDuration: this.relativeTime.transform(differenceInMs, true)\n      }\n    );\n  }\n\n  /**\n   * Calculates the duration of an alarm based on audit log records.\n   *\n   * This method computes the duration of an alarm by finding the difference\n   * between the start and end times of the alarm. The start time is determined\n   * from the last record in the audit log, using the first available time field\n   * (`firstOccurrenceTime`, `time`, or `creationTime`). The end time is obtained\n   * from the `alarmDetailsService`.\n   *\n   * @param auditLog - An array of `IAuditRecord` objects representing the audit log records.\n   * @returns The duration of the alarm in milliseconds, or `null` if the end time is not available.\n   * @private\n   */\n  private calculateAlarmDuration(auditLog: IAuditRecord[]): number | null {\n    const firstAlarm = auditLog[auditLog.length - 1];\n    const startTime = firstAlarm.firstOccurrenceTime || firstAlarm.time || firstAlarm.creationTime;\n    const endTime = this.alarmDetailsService.getEndTime(auditLog);\n\n    if (!endTime) {\n      return null;\n    }\n\n    const startTimeToDate = new Date(startTime);\n    const endTimeToDate = new Date(endTime);\n\n    return endTimeToDate.getTime() - startTimeToDate.getTime();\n  }\n\n  /**\n   * Retrieves a list of audit records for a selected alarm.\n   *\n   * This method fetches audit records based on the specified properties, including\n   * the date, page size, whether to revert, the source alarm ID, and whether to include total pages.\n   *\n   * @param isRevert - A boolean flag indicating whether to retrieve a 100 (see PAGE_SIZE) records (true)\n   *                   or only record, that chronologically will be the oldest one (false). Defaults to true.\n   *                   If set to false, it will set PAGE_SIZE to 1 and trigger a logic\n   *                   concatenating a most recent record with the very first one to\n   *                   calculate the alarm duration (change to CLEARED status).\n   * @returns A Promise that resolves to an IResultList of IAuditRecord objects, representing the audit records.\n   * @async\n   * @private\n   */\n  private async getAlarmAuditRecords(isRevert = true): Promise<IResultList<IAuditRecord>> {\n    const properties = {\n      dateTo: new Date(Date.now()).toISOString(),\n      pageSize: isRevert ? this.PAGE_SIZE : 1,\n      revert: isRevert,\n      source: this.selectedAlarm.id,\n      withTotalPages: true\n    };\n\n    return await this.auditService.list(properties);\n  }\n\n  private async updateStatusMessage(): Promise<void> {\n    switch (this.selectedAlarm.status) {\n      case this.ACTIVE_STATUS_VALUE:\n        this.statusMessage = this.getActiveStatusMessage(this.selectedAlarm.time);\n        break;\n      case this.ACKNOWLEDGED_STATUS_VALUE:\n        this.statusMessage = this.getAcknowledgedStatusMessage(\n          this.selectedAlarm.status as unknown as AlarmStatusType,\n          this.auditLog.data\n        );\n        break;\n      case this.CLEARED_STATUS_VALUE:\n        if (this.hasReachedOrExceededPageSizeLimit()) {\n          this.extendedAuditLogs = await this.auditLogWithFirstRecord();\n          this.statusMessage = this.getClearedStatusMessage(this.extendedAuditLogs.data);\n          return;\n        }\n        this.statusMessage = this.getClearedStatusMessage(this.auditLog.data);\n        break;\n    }\n  }\n\n  private hasReachedOrExceededPageSizeLimit(): boolean {\n    return this.auditLog.data.length >= this.PAGE_SIZE;\n  }\n\n  private getCustomFragments(selectedAlarm: IAlarm): CustomFragment {\n    let customProperties = null;\n    for (const key in selectedAlarm) {\n      if (!ALARM_DEFAULT_PROPERTIES.find(k => k === key)) {\n        if (!customProperties) {\n          customProperties = {};\n        }\n        customProperties[key] = selectedAlarm[key];\n      }\n    }\n\n    return customProperties;\n  }\n}\n","<div class=\"d-flex row tight-grid flex-wrap a-i-stretch\">\n  <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4 c8y-icon\"\n          [c8yIcon]=\"selectedAlarm.status | AlarmStatusToIcon\"\n        ></i>\n      </div>\n      <div class=\"p-t-8 p-b-8 p-r-8\">\n        <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Status' | translate }}</p>\n        <p class=\"small\">{{ statusMessage }}</p>\n      </div>\n    </div>\n  </div>\n  <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n          [c8yIcon]=\"selectedAlarm.severity | AlarmSeverityToIcon\"\n          [ngClass]=\"selectedAlarm.severity?.toString() | lowercase\"\n        ></i>\n      </div>\n      <div class=\"p-t-8 p-b-8 p-r-8\">\n        <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Severity' | translate }}</p>\n        <p class=\"small\">{{ SEVERITY_LABELS[selectedAlarm.severity] | translate }}</p>\n      </div>\n    </div>\n  </div>\n  <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4 stroked-icon status\"\n          c8yIcon=\"contactless-payment\"\n        ></i>\n      </div>\n      <div class=\"p-t-8 p-b-8 p-r-8\">\n        <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Source' | translate }}</p>\n        <p class=\"small\">\n          <button\n            class=\"btn-link text-muted p-0 m-r-8 text-left\"\n            title=\"{{ selectedAlarm.source.name }}\"\n            type=\"button\"\n            routerLink=\"{{ selectedAlarmMO | assetLink }}\"\n          >\n            <small class=\"icon-flex\">\n              <i c8yIcon=\"exchange\"></i>\n              {{ selectedAlarm.source.name || selectedAlarm.source.id }}\n            </small>\n          </button>\n          <ng-container *ngIf=\"showSourceNavigationLink$ | async\">\n            <button\n              class=\"btn-link p-0 text-left\"\n              title=\"{{\n                linkTitle\n                  | translate: { appName: userDeviceManagementApp$ | async | humanizeAppName | async }\n              }}\"\n              type=\"button\"\n              (click)=\"goToAlarmSource(selectedAlarm.id)\"\n              data-cy=\"alarm-details-device-management-link\"\n            >\n              {{ userDeviceManagementApp$ | async | humanizeAppName | async }}\n              <i c8yIcon=\"external-link\"></i>\n            </button>\n          </ng-container>\n        </p>\n      </div>\n    </div>\n  </div>\n  <div class=\"col-xs-12 col-md-6 d-flex p-b-8\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <span\n          class=\"circle-icon-wrapper\"\n          [ngStyle]=\"{ 'background-color': typeColor }\"\n        >\n          <i\n            class=\"stroked-icon\"\n            c8yIcon=\"bell\"\n          ></i>\n        </span>\n      </div>\n      <div class=\"p-t-8 p-b-8 p-r-8 min-width-0\">\n        <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Type' | translate }}</p>\n        <p\n          class=\"small text-truncate\"\n          title=\"{{ selectedAlarm.type }}\"\n        >\n          <code>{{ selectedAlarm.type }}</code>\n        </p>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"col-xs-12 col-md-12 p-b-16\">\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4\"\n          c8yIcon=\"calendar\"\n        ></i>\n      </div>\n      <div class=\"p-t-8 p-b-0 p-r-8 flex-grow\">\n        <div class=\"content-flex-50\">\n          <div class=\"col-4 p-b-8\">\n            <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</p>\n            <p class=\"small\">\n              {{ lastUpdated | c8yDate: 'medium' }}\n            </p>\n          </div>\n          <div\n            class=\"col-4 p-b-8\"\n            *ngIf=\"selectedAlarm.count > 1\"\n          >\n            <p class=\"text-label-small m-b-0 m-r-8\">{{ 'Number of occurrences' | translate }}</p>\n            <p>\n              <span class=\"badge badge-info\">{{ selectedAlarm.count }}</span>\n            </p>\n          </div>\n          <div\n            class=\"col-4 p-b-8\"\n            *ngIf=\"selectedAlarm.count > 1\"\n          >\n            <p class=\"text-label-small m-b-0 m-r-8\">{{ 'First occurrence' | translate }}</p>\n            <p class=\"small\">\n              {{ selectedAlarm.creationTime | c8yDate: 'medium' }}\n            </p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div\n    class=\"col-xs-12 col-md-12 p-b-16\"\n    *ngIf=\"customFragments\"\n  >\n    <div class=\"border-all fit-w d-flex\">\n      <div class=\"p-8\">\n        <i\n          class=\"icon-24 text-gray-dark m-t-4\"\n          c8yIcon=\"outgoing-data\"\n        ></i>\n      </div>\n      <div\n        class=\"p-t-8 p-b-0 p-r-8 flex-grow\"\n        data-cy=\"alarm-details-custom-data\"\n      >\n        <p class=\"text-label-small m-b-4 m-r-8\">{{ 'Custom data' | translate }}</p>\n        <pre><code>{{ customFragments | json }}</code></pre>\n      </div>\n    </div>\n  </div>\n</div>\n\n<div class=\"d-flex flex-wrap gap-8\">\n  <button\n    class=\"btn btn-default btn-sm\"\n    [title]=\"'Reload audit logs' | translate\"\n    type=\"submit\"\n    (click)=\"reloadAuditLog(true, true)\"\n  >\n    <i\n      c8yIcon=\"refresh\"\n      [ngClass]=\"{ 'icon-spin': isLoading }\"\n    ></i>\n    {{ 'Reload audit logs' | translate }}\n  </button>\n\n  <button\n    class=\"btn btn-default btn-sm\"\n    [title]=\"\n      selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n        ? (ACKNOWLEDGE_LABEL | translate)\n        : (REACTIVATE_LABEL | translate)\n    \"\n    type=\"submit\"\n    (click)=\"\n      onUpdateDetails(\n        selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n          ? ACKNOWLEDGED_STATUS_VALUE\n          : ACTIVE_STATUS_VALUE\n      )\n    \"\n    [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE || isAlarmStatusChanging\"\n  >\n    <i\n      [c8yIcon]=\"selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE ? BELL_SLASH_ICON : BELL_ICON\"\n    ></i>\n    {{\n      selectedAlarm.status !== ACKNOWLEDGED_STATUS_VALUE\n        ? (ACKNOWLEDGE_LABEL | translate)\n        : (REACTIVATE_LABEL | translate)\n    }}\n  </button>\n\n  <button\n    class=\"btn btn-default btn-sm\"\n    [title]=\"'Create smart rule' | translate\"\n    type=\"submit\"\n    *ngIf=\"isCreateSmartRulesButtonAvailable\"\n    (click)=\"createSmartRule()\"\n  >\n    <i c8yIcon=\"c8y-icon c8y-icon-smart-rules\"></i>\n    {{ 'Create smart rule' | translate }}\n  </button>\n  <button\n    class=\"btn btn-default btn-sm\"\n    [title]=\"'Clear`alarm`' | translate\"\n    type=\"submit\"\n    (click)=\"onUpdateDetails(CLEARED_STATUS_VALUE)\"\n    [disabled]=\"selectedAlarm.status === CLEARED_STATUS_VALUE\"\n  >\n    <i c8yIcon=\"c8y-alert-idle\"></i>\n    {{ 'Clear`alarm`' | translate }}\n  </button>\n\n  <button\n    *ngFor=\"let button of selectedAlarm | alarmDetailsButton: selectedAlarmMO | async\"\n    class=\"btn btn-default btn-sm\"\n    [ngClass]=\"button.additionalButtonClasses\"\n    [title]=\"button.title | translate\"\n    type=\"button\"\n    (click)=\"detailsButtonAction(button, selectedAlarm)\"\n    [disabled]=\"button.disabled\"\n  >\n    <i [ngClass]=\"button.additionalIconClasses\" [c8yIcon]=\"button.icon\"></i>\n    <span *ngIf=\"button.label\">{{ button.label | translate }}</span>\n  </button>\n</div>\n\n<ng-template #noAuditLogAvailable>\n  <div class=\"p-16\">\n    <c8y-ui-empty-state\n      [icon]=\"'archive'\"\n      [title]=\"'No audit logs found.' | translate\"\n      [horizontal]=\"true\"\n    ></c8y-ui-empty-state>\n  </div>\n</ng-template>\n\n<div class=\"legend form-block\">{{ 'Audit logs' | translate }}</div>\n\n<ng-container *ngIf=\"isLoading || auditLog?.data.length; else noAuditLogAvailable\">\n  <c8y-loading *ngIf=\"isLoading\"></c8y-loading>\n\n  <c8y-list-group\n    data-cy=\"c8y-alarms-details--audit-logs\"\n    *ngIf=\"!isLoading\"\n  >\n    <c8y-li-timeline *c8yFor=\"let log of auditLog; loadMore: 'hidden'\">\n      {{ log.creationTime | date: 'mediumDate' }}\n      {{ log.creationTime | date: 'mediumTime' }}\n      <c8y-li>\n        <c8y-li-body>\n          <p class=\"text-truncate-wrap separator-bottom p-b-4\">\n            {{ log | auditChangesMessage }}\n          </p>\n          <div class=\"c8y-list__item__footer\">\n            <span\n              class=\"m-r-16 small\"\n              *ngIf=\"log.user\"\n            >\n              <span class=\"text-label-small\">\n                {{ 'by`user`' | translate }}\n              </span>\n              {{ log.user }}\n            </span>\n            <span class=\"small\">\n              <span class=\"text-label-small\">\n                {{ 'device time' | translate }}\n              </span>\n              {{ log.time | c8yDate: 'medium' }}\n            </span>\n          </div>\n        </c8y-li-body>\n      </c8y-li>\n    </c8y-li-timeline>\n  </c8y-list-group>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'c8y-alarms-empty',\n  templateUrl: './alarm-empty.component.html'\n})\nexport class AlarmEmptyComponent {}\n","<div class=\"p-24 hidden-sm\" data-cy=\"c8y-alarms-empty\">\n  <c8y-ui-empty-state\n    [icon]=\"'alarm'\"\n    [title]=\"'No alarm selected' | translate\"\n    [subtitle]=\"'Select an alarm from the list to view its details.' | translate\"\n    [horizontal]=\"true\"\n  ></c8y-ui-empty-state>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IAlarm } from '@c8y/client';\nimport { ContextRouteService, gettext, ViewContext } from '@c8y/ngx-components';\nimport { Observable, of } from 'rxjs';\nimport { AlarmsViewService } from './alarms-view.service';\n\n@Component({\n  selector: 'c8y-alarm-info',\n  templateUrl: './alarm-info.component.html'\n})\nexport class AlarmInfoComponent implements OnInit {\n  selectedAlarm$: Observable<IAlarm>;\n\n  hasAnyRoleAllowingToCreateSmartRule: boolean;\n  isContextRoute = false;\n  readonly TITLE = gettext('Alarms');\n\n  constructor(\n    public activatedRoute: ActivatedRoute,\n    private router: Router,\n    private contextRouteService: ContextRouteService,\n    private alarmsViewService: AlarmsViewService\n  ) {}\n\n  async ngOnInit() {\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    this.selectedAlarm$ = of(contextData.contextData as IAlarm);\n    this.isContextRoute = this.contextRouteService.isContextRoute(this.router.url, [\n      ViewContext.Device,\n      ViewContext.Group\n    ]);\n  }\n\n  back(): void {\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    const backLink = this.alarmsViewService.getRouterNavigationArray(contextData);\n    this.router.navigate(backLink, { queryParamsHandling: 'preserve' });\n  }\n}\n","<ng-container *ngIf=\"!isContextRoute\">\n  <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<div\n  class=\"inner-scroll split-view__detail split-view__detail--selected\"\n  *ngIf=\"selectedAlarm$ | async\"\n>\n  <div class=\"sticky-top bg-component\">\n    <div class=\"card-header gap-16 d-block-xs d-block-sm p-l-24 p-r-24 p-t-16 separator\">\n      <button\n        class=\"btn btn-clean text-primary visible-sm visible-xs\"\n        [title]=\"'Back' | translate\"\n        (click)=\"back()\"\n      >\n        <i c8yIcon=\"chevron-left\"></i>\n        <span>{{ 'Back' | translate }}</span>\n      </button>\n\n      <div class=\"flex-no-shrink a-s-start\"></div>\n      <div class=\"flex-grow d-col\">\n        <div\n          class=\"text-break-word flex-grow text-16\"\n          data-cy=\"c8y-alarms-info--title\"\n        >\n          {{ (selectedAlarm$ | async)?.text | translate }}\n        </div>\n      </div>\n    </div>\n    <div class=\"p-relative\">\n      <c8y-tabs-outlet\n        outletName=\"alarms\"\n        orientation=\"horizontal\"\n      ></c8y-tabs-outlet>\n    </div>\n    <div class=\"card-block overflow-visible p-l-24 p-r-24\">\n      <c8y-alarm-details [selectedAlarm]=\"selectedAlarm$ | async\"></c8y-alarm-details>\n    </div>\n  </div>\n</div>\n","import { IAlarm } from '@c8y/client';\nimport { combineLatest, Observable } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { PluginsResolveService, ServiceRegistry } from '@c8y/ngx-components';\nimport { AlarmListIndicator } from '../alarms.model';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\n/**\n * A service to retrieve custom indicators for the alarm list view.\n */\nexport class AlarmListIndicatorService {\n  constructor(\n    private serviceRegistry: ServiceRegistry,\n    private pluginsResolver: PluginsResolveService\n  ) {}\n\n  get$(alarm: IAlarm): Observable<AlarmListIndicator[]> {\n    const providers$ = this.pluginsResolver.allPluginsLoaded$.pipe(\n      filter(Boolean),\n      map(() => {\n        return this.serviceRegistry.get('alarmListIndicator');\n      })\n    );\n\n    return providers$.pipe(\n      switchMap(providers => {\n        const observables$ = providers.map(provider =>\n          provider.getAlarmListIndicator$(alarm).pipe(startWith(false))\n        );\n        return combineLatest(observables$);\n      }),\n      map(indicators => {\n        return indicators.filter(Boolean) as AlarmListIndicator[];\n      }),\n      map(indicators => sortBy(indicators, this.byPriority))\n    );\n  }\n\n  private byPriority(item: AlarmListIndicator) {\n    if (item.priority === undefined) {\n      return 0;\n    }\n    return -item.priority;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IAlarm } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { AlarmListIndicatorService } from './alarm-list-indicator.service';\nimport { AlarmListIndicator } from '../alarms.model';\n\n@Pipe({\n  standalone: true,\n  name: 'alarmListIndicator',\n  pure: true\n})\n/**\n * A pipe to provide custom indicators for the alarm list view.\n *\n * Will call `get$()` method of `AlarmListIndicatorService` to get the custom indicators for the provided alarm.\n */\nexport class AlarmListIndicatorPipe implements PipeTransform {\n  constructor(private alarmListIndicatorService: AlarmListIndicatorService) {}\n\n  transform(alarm: IAlarm): Observable<AlarmListIndicator[]> {\n    return this.alarmListIndicatorService.get$(alarm);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { SeverityType, SEVERITY_LABELS } from '@c8y/client';\n\n/**\n * Pipe for transforming an array of alarm severity types into a comma-separated string.\n *\n * @example\n * Usage in a template: {{ ['WARNING', 'CRITICAL'] | AlarmSeveritiesToTitle }}\n * Result: 'Warning, Critical'\n */\n@Pipe({\n  name: 'AlarmSeveritiesToTitle'\n})\nexport class AlarmSeveritiesToTitlePipe implements PipeTransform {\n  private readonly severityOptionsCount = Object.keys(SEVERITY_LABELS).length;\n\n  constructor(private translateService: TranslateService) {}\n  /**\n   * Transforms an array of alarm severity types into a comma-separated string.\n   *\n   * @param severities - Array of severity types.\n   * @returns - Transformed human-readable title string.\n   */\n  transform(severities: SeverityType[]): string {\n    const uniqueSeverities = [...new Set(severities)];\n\n    if (uniqueSeverities.some(severity => !(severity in SEVERITY_LABELS))) {\n      return null;\n    }\n    if (uniqueSeverities.length === this.severityOptionsCount) {\n      return this.translateService.instant(gettext('All alarms'));\n    }\n\n    const translatedChips = uniqueSeverities.map(severity => this.translateSeverityLabel(severity));\n    return translatedChips.join(', ');\n  }\n  /**\n   * Translates and converts a severity type to title case.\n   *\n   * @private\n   * @param chip - Severity type.\n   * @returns - Translated and title-cased severity type.\n   */\n  private translateSeverityLabel(chip: SeverityType): string {\n    return this.translateService.instant(SEVERITY_LABELS[chip]);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SEVERITY_LABELS } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * Pipe to transform alarm severity to corresponding label.\n */\n@Pipe({\n  name: 'AlarmSeverityToLabel'\n})\nexport class AlarmSeverityToLabelPipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an alarm severity to its corresponding label.\n   * @param alarmSeverity - The alarm severity to transform.\n   * @returns The translated label corresponding to the given alarm severity.\n   */\n  transform(alarmSeverity: string): string {\n    const alarmStatusMapped = SEVERITY_LABELS[alarmSeverity?.toUpperCase()];\n    return this.translateService.instant(alarmStatusMapped ?? alarmSeverity);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AlarmStatusType, ALARM_STATUS_LABELS } from '@c8y/client';\n\n/**\n * Pipe to transform alarm status to corresponding label.\n */\n@Pipe({\n  name: 'AlarmStatusToLabel'\n})\nexport class AlarmStatusToLabelPipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms an alarm status to its corresponding label.\n   * @param alarmStatus - The alarm status to transform.\n   * @returns The translated label corresponding to the given alarm status.\n   */\n  transform(alarmStatus: AlarmStatusType): string {\n    return this.translateService.instant(ALARM_STATUS_LABELS[alarmStatus?.toUpperCase()]);\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport {\n  AlarmQueryFilter,\n  Severity,\n  SeverityFilter,\n  SEVERITY_LABELS,\n  SeverityType\n} from '@c8y/client';\nimport { AlertService, DateTimeContext } from '@c8y/ngx-components';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\nimport { BehaviorSubject, Observable, Subject, combineLatest, from, forkJoin, EMPTY } from 'rxjs';\nimport { catchError, filter, finalize, map, startWith, takeUntil } from 'rxjs/operators';\nimport { AlarmsViewService } from './alarms-view.service';\nimport {\n  AlarmCount,\n  DEFAULT_ALARM_COUNTS,\n  DEFAULT_SEVERITY_VALUES,\n  AlarmListFormFilters\n} from './alarms.model';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport _ from 'lodash';\n\n@Component({\n  selector: 'c8y-alarms-filter',\n  templateUrl: './alarms-filter.component.html'\n})\nexport class AlarmsFilterComponent implements OnInit, AfterViewInit, OnDestroy {\n  readonly severitiesList = Object.keys(SEVERITY_LABELS) as SeverityType[];\n\n  @Input()\n  contextSourceId: number | string | null;\n\n  /**\n   * EventEmitter to notify when filters have been applied.\n   * Emits a `AlarmListFormFilters` object representing the filter criteria applied by the user.\n   */\n  @Output()\n  onFilterApplied = new EventEmitter<AlarmListFormFilters>();\n\n  @ViewChild('filtersDropdown')\n  filtersDropdown: BsDropdownDirective;\n\n  formGroup = this.formBuilder.group(DEFAULT_SEVERITY_VALUES);\n  chips: SeverityType[] = [];\n  isIndeterminate$: Observable<boolean>;\n  countLoading: boolean;\n  showCleared = false;\n  alarmCounts: AlarmCount = DEFAULT_ALARM_COUNTS;\n  selectedDates: DateTimeContext;\n  shouldDisableApplyButton$: Observable<boolean>;\n  isEachCheckboxSelected$: Observable<boolean>;\n  protected readonly SEVERITY_LABELS = SEVERITY_LABELS;\n  private isNoneCheckboxSelected$ = new BehaviorSubject<boolean>(false);\n  private severitiesTouched$ = new BehaviorSubject<boolean>(false);\n  private currentFormGroupValues = this.formGroup.value;\n  private currentShowClearedValue: boolean;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private alarmsViewService: AlarmsViewService,\n    private alertService: AlertService,\n    private router: Router,\n    private activatedRoute: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    this.activatedRoute.queryParams.pipe(takeUntil(this.destroy$)).subscribe(params => {\n      this.showCleared = params.showCleared === 'true';\n      this.formGroup.setValue({\n        [Severity.CRITICAL]: params[Severity.CRITICAL] === 'true',\n        [Severity.MAJOR]: params[Severity.MAJOR] === 'true',\n        [Severity.MINOR]: params[Severity.MINOR] === 'true',\n        [Severity.WARNING]: params[Severity.WARNING] === 'true'\n      });\n      if (params.lastUpdatedFrom) {\n        this.selectedDates = [new Date(params.lastUpdatedFrom), new Date(params.createdTo)];\n      }\n      this.applyFilters(true, false);\n    });\n    this.trackCheckboxStateWithFormChanges();\n    this.currentShowClearedValue = this.showCleared;\n    this.updateChipsAndDefaultValues();\n  }\n\n  ngAfterViewInit(): void {\n    this.filtersDropdown.isOpenChange\n      .pipe(takeUntil(this.destroy$), filter(Boolean))\n      .subscribe(() => this.updateAlarmsCount());\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  allChanged(selected: boolean): void {\n    this.formGroup.patchValue({\n      [Severity.CRITICAL]: selected,\n      [Severity.MAJOR]: selected,\n      [Severity.MINOR]: selected,\n      [Severity.WARNING]: selected\n    } as SeverityFilter);\n  }\n\n  applyFilters(emit = true, navigate = true): void {\n    this.updateChipsAndDefaultValues();\n    const combinedFormEvent: AlarmListFormFilters = {\n      showCleared: this.showCleared,\n      severityOptions: this.formGroup.value,\n      selectedDates: this.selectedDates\n    };\n    if (emit) {\n      this.onFilterApplied.emit(combinedFormEvent);\n    }\n    this.currentFormGroupValues = this.formGroup.value;\n    this.currentShowClearedValue = this.showCleared;\n\n    if (navigate) {\n      this.router.navigate([], {\n        queryParams: {\n          showCleared: combinedFormEvent.showCleared,\n          ...combinedFormEvent.severityOptions,\n          lastUpdatedFrom: combinedFormEvent.selectedDates?.[0]?.toISOString(),\n          createdTo: combinedFormEvent.selectedDates?.[1]?.toISOString()\n        },\n        queryParamsHandling: 'merge'\n      });\n    }\n  }\n\n  deselectChip(chip: SeverityType): void {\n    this.formGroup.patchValue({\n      ...this.formGroup.value,\n      [chip]: false\n    });\n    this.applyFilters(false);\n    this.closeDropdown();\n  }\n\n  closeDropdown(): void {\n    if (this.filtersDropdown.isOpen) {\n      this.filtersDropdown.isOpen = false;\n    }\n  }\n\n  resetForm(): void {\n    this.formGroup.reset(this.currentFormGroupValues);\n    this.severitiesTouched$.next(false);\n    this.showCleared = this.currentShowClearedValue;\n  }\n\n  markSeveritiesAsTouched(): void {\n    this.severitiesTouched$.next(true);\n  }\n\n  /**\n   * Asynchronously fetches and updates the count of alarms for each severity level.\n   *\n   * @param showCleared - Whether to include cleared alarms in the count.\n   * Defaults to the current value of `this.currentShowClearedValue`.\n   * @returns A Promise that resolves when all alarm counts have been fetched,\n   * or rejects with an error if the operation fails.\n   * @throws Will throw an error if any of the alarm count fetching promises reject.\n   */\n  async updateAlarmsCount(showCleared = this.currentShowClearedValue): Promise<void> {\n    this.countLoading = true;\n    const alarmFilter: AlarmQueryFilter | null = this.contextSourceId\n      ? {\n          source: this.contextSourceId,\n          withSourceAssets: true,\n          withSourceDevices: true\n        }\n      : null;\n    const observables: Record<SeverityType, Observable<number>> = this.severitiesList.reduce(\n      (acc, severity) => {\n        acc[severity] = from(\n          this.alarmsViewService.getAlarmsCountBySeverity(severity, showCleared, alarmFilter)\n        );\n        return acc;\n      },\n      {\n        CRITICAL: null,\n        MAJOR: null,\n        MINOR: null,\n        WARNING: null\n      }\n    );\n    forkJoin(observables)\n      .pipe(\n        catchError(err => {\n          this.alarmCounts = {} as AlarmCount;\n          this.alertService.addServerFailure(err);\n          return EMPTY;\n        }),\n        finalize(() => (this.countLoading = false))\n      )\n      .subscribe((alarmCounts: AlarmCount) => (this.alarmCounts = alarmCounts));\n  }\n\n  private createFormValueWithChangesStream(): Observable<SeverityFilter> {\n    return this.formGroup.valueChanges.pipe(startWith(this.formGroup.value));\n  }\n\n  private trackCheckboxStateWithFormChanges(): void {\n    const formValue$ = this.createFormValueWithChangesStream();\n    this.isEachCheckboxSelected$ = this.createAllSelectedStream(formValue$);\n    this.isIndeterminate$ = this.createIndeterminateStream(formValue$);\n    this.trackAllCheckboxesDisabled(formValue$);\n    this.shouldDisableApplyButton$ = this.createDisableApplyButtonStream();\n  }\n\n  private createAllSelectedStream(formValue$: Observable<SeverityFilter>): Observable<boolean> {\n    return formValue$.pipe(map(severities => Object.values(severities).every(Boolean)));\n  }\n\n  private createIndeterminateStream(formValue$: Observable<SeverityFilter>): Observable<boolean> {\n    return formValue$.pipe(\n      map(\n        severities =>\n          Object.values(severities).some(Boolean) && !Object.values(severities).every(Boolean)\n      )\n    );\n  }\n\n  private trackAllCheckboxesDisabled(formValue$: Observable<SeverityFilter>): void {\n    formValue$.pipe(takeUntil(this.destroy$)).subscribe(severities => {\n      const areAllDisabled = Object.values(severities).every(value => !value);\n      this.isNoneCheckboxSelected$.next(areAllDisabled);\n    });\n  }\n\n  private createDisableApplyButtonStream(): Observable<boolean> {\n    return combineLatest([this.isNoneCheckboxSelected$, this.severitiesTouched$]).pipe(\n      map(\n        ([allCheckboxesAreDisabled, severitiesTouched]) =>\n          allCheckboxesAreDisabled || !severitiesTouched\n      )\n    );\n  }\n\n  private updateChipsAndDefaultValues(): void {\n    const severityFilter = this.formGroup;\n    const seveerityValues = severityFilter.value;\n\n    this.chips = Object.keys(seveerityValues).filter(key => seveerityValues[key]) as SeverityType[];\n    const allChipsRemoved = this.chips.length === 0;\n    if (allChipsRemoved) {\n      const defaultValues = DEFAULT_SEVERITY_VALUES;\n      severityFilter.setValue(defaultValues);\n      this.chips = Object.keys(defaultValues) as SeverityType[];\n    }\n  }\n}\n","<form\n  class=\"d-flex a-i-center\"\n  [formGroup]=\"formGroup\"\n>\n  <div\n    class=\"dropdown\"\n    title=\"{{ 'Filter by severity' | translate }}\"\n    dropdown\n    #filtersDropdown=\"bs-dropdown\"\n    [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n    [insideClick]=\"true\"\n  >\n    <div class=\"input-group fit-w\">\n      <div class=\"form-control d-flex a-i-center inner-scroll\" style=\"min-width: 104px; padding-top: 0; padding-bottom: 0;\">\n        <ng-container *ngIf=\"chips.length !== severitiesList.length; else allAlarms\">\n          <span\n            class=\"tag tag--info chip\"\n            *ngFor=\"let chip of chips\"\n          >\n            <button\n              class=\"btn btn-xs btn-clean text-10\"\n              title=\"{{ 'Remove' | translate }}\"\n              type=\"button\"\n              (click)=\"deselectChip(chip); $event.stopPropagation()\"\n            >\n              <i c8yIcon=\"times\"></i>\n            </button>\n            <i\n              class=\"status stroked-icon icon-12\"\n              [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n              [ngClass]=\"chip | lowercase\"\n            ></i>\n            {{ SEVERITY_LABELS[chip] | translate }}\n          </span>\n        </ng-container>\n        <ng-template #allAlarms>\n          <span class=\"text-truncate\" title=\"{{ 'All severities' | translate }}\">\n            {{ 'All severities' | translate }}\n          </span>\n        </ng-template>\n      </div>\n      <div class=\"input-group-btn input-group-btn--last\">\n        <button\n          class=\"btn-default btn btn--caret\"\n          title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n          data-cy=\"c8y-alarm-filter\"\n          dropdownToggle\n          (click)=\"resetForm()\"\n        >\n          <i class=\"caret\"></i>\n        </button>\n      </div>\n    </div>\n    <ul\n      class=\"dropdown-menu dropdown-menu-action-bar\"\n      *dropdownMenu\n    >\n      <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n        <label\n          class=\"c8y-checkbox d-flex a-i-center\"\n          [title]=\"'All' | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            data-cy=\"c8y-alarm-filter--all\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (ngModelChange)=\"allChanged($event)\"\n            [ngModel]=\"isEachCheckboxSelected$ | async\"\n            [indeterminate]=\"isIndeterminate$ | async\"\n            (click)=\"markSeveritiesAsTouched()\"\n          />\n          <span></span>\n          <i\n            class=\"status stroked-icon m-l-8 icon-20\"\n            [c8yIcon]=\"'bell'\"\n          ></i>\n          <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n        </label>\n      </li>\n      <li\n        class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\"\n        *ngFor=\"let severity of severitiesList\"\n      >\n        <label\n          class=\"c8y-checkbox d-flex a-i-center\"\n          [title]=\"SEVERITY_LABELS[severity] | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            [attr.data-cy]=\"'c8y-alarm-filter--' + severity\"\n            [formControlName]=\"severity\"\n            [value]=\"severity\"\n            (click)=\"markSeveritiesAsTouched()\"\n          />\n          <span></span>\n          <i\n            class=\"status stroked-icon m-l-8 icon-20\"\n            [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n            [ngClass]=\"severity | lowercase\"\n          ></i>\n          <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n        </label>\n        <!-- badge -->\n        <div\n          class=\"badge badge-info m-l-auto\"\n          *ngIf=\"alarmCounts[severity] || alarmCounts[severity] === 0\"\n        >\n          <i\n            class=\"icon-spin\"\n            [c8yIcon]=\"'circle-o-notch'\"\n            *ngIf=\"countLoading\"\n          ></i>\n          <span\n            *ngIf=\"!countLoading\"\n            [attr.data-cy]=\"severity + '-badge'\"\n          >\n            {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n          </span>\n        </div>\n      </li>\n      <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n        <label\n          class=\"c8y-switch\"\n          [attr.aria-label]=\"'Show cleared alarms' | translate\"\n          [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n        >\n          <input\n            type=\"checkbox\"\n            #showClearedCheckbox\n            [ngModelOptions]=\"{ standalone: true }\"\n            [(ngModel)]=\"showCleared\"\n            (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n          />\n          <span></span>\n          <span\n            class=\"text-truncate\"\n            title=\"{{ 'Show cleared alarms' | translate }}\"\n          >\n            {{ 'Show cleared alarms' | translate }}\n          </span>\n        </label>\n      </li>\n\n      <div class=\"p-16 d-flex sticky-bottom separator-top\">\n        <button\n          [attr.data-cy]=\"'c8y-alarms-filter--apply'\"\n          class=\"btn btn-primary btn-sm flex-grow\"\n          title=\"{{ 'Apply' | translate }}\"\n          type=\"button\"\n          (click)=\"applyFilters(false); closeDropdown()\"\n          [disabled]=\"shouldDisableApplyButton$ | async\"\n        >\n          {{ 'Apply' | translate }}\n        </button>\n      </div>\n    </ul>\n  </div>\n</form>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { IAlarm } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\n\n@Component({\n  selector: 'c8y-alarms-icon',\n  templateUrl: 'alarms-icon.component.html'\n})\nexport class AlarmsIconComponent implements OnInit {\n  @Input()\n  alarm: IAlarm;\n\n  @Input()\n  typeFilters: AlarmDetails[];\n\n  iconBackgroundColor = 'none';\n  isFilterApplied = false;\n\n  alarmSeverityLabel = gettext('Severity: {{ alarmSeverity }}');\n  alarmStatusLabel = gettext('Status: {{ alarmStatus }}');\n  alarmStatusType = gettext('Type: {{ alarmType }}');\n\n  ngOnInit(): void {\n    this.isFilterApplied = this.typeFilters.length > 0;\n    this.iconBackgroundColor =\n      this.typeFilters.find(filter => filter.filters.type === this.alarm.type)?.color || 'none';\n  }\n}\n","<button\n  class=\"btn-clean severity\"\n  [attr.aria-label]=\"\n    alarmSeverityLabel | translate: { alarmSeverity: alarm.severity | AlarmSeverityToLabel }\n  \"\n  [tooltip]=\"\n    alarmSeverityLabel | translate: { alarmSeverity: alarm.severity | AlarmSeverityToLabel }\n  \"\n  placement=\"right\"\n  container=\"body\"\n  type=\"button\"\n  (click)=\"$event.stopPropagation()\"\n  [delay]=\"500\"\n>\n  <i\n    class=\"status stroked-icon\"\n    [c8yIcon]=\"alarm.severity | AlarmSeverityToIcon\"\n    [ngClass]=\"alarm.severity | lowercase\"\n  ></i>\n</button>\n<button\n  class=\"btn-clean status\"\n  [ngStyle]=\"{ 'background-color': iconBackgroundColor }\"\n  [attr.aria-label]=\"\n    alarmStatusLabel | translate: { alarmStatus: alarm.status | AlarmStatusToLabel }\n  \"\n  [tooltip]=\"\n    (alarmStatusLabel | translate: { alarmStatus: alarm.status | AlarmStatusToLabel }) +\n    '\\n' +\n    (alarmStatusType | translate: { alarmType: alarm.type })\n  \"\n  placement=\"right\"\n  container=\"body\"\n  type=\"button\"\n  [ngClass]=\"{ 'circle-icon-wrapper': isFilterApplied }\"\n  (click)=\"$event.stopPropagation()\"\n  [delay]=\"500\"\n>\n  <i\n    [c8yIcon]=\"alarm.status | AlarmStatusToIcon\"\n    [ngClass]=\"{ 'stroked-icon': isFilterApplied }\"\n  ></i>\n</button>\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { FormBuilder } from '@angular/forms';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { CountdownIntervalComponent, gettext } from '@c8y/ngx-components';\nimport { AlarmsViewService } from './alarms-view.service';\n\n@Component({\n  selector: 'c8y-alarms-interval-refresh',\n  templateUrl: './alarms-interval-refresh.component.html'\n})\nexport class AlarmsIntervalRefreshComponent implements OnInit, AfterViewInit, OnDestroy {\n  readonly refreshIntervalsInMilliseconds = this.alarmsViewService.DEFAULT_INTERVAL_VALUES;\n  readonly DISABLE_AUTO_REFRESH = gettext('Disable auto refresh');\n  readonly ENABLE_AUTO_REFRESH = gettext('Enable auto refresh');\n  readonly SECONDS_UNTIL_REFRESH = gettext('{{ seconds }} s');\n\n  @Input() isDisabled = false;\n  /**\n   * Controls the loading state of the alarms list reload button.\n   */\n  @Input()\n  alarmsListLoading$: BehaviorSubject<boolean>;\n  /**\n   * * Set the value of `isIntervalEnabled` in response to user interactions with the alarm list scroll.\n   *  *\n   *  * This input setter allows you to control the `isIntervalEnabled` property, which is used to manage the state\n   *  * of a toggle button. When a user scrolls through the alarms list, you can update the `isIntervalEnabled` value\n   *  * using this setter.\n   *  *\n   *  * @param value - A boolean value representing the new state of the `isIntervalEnabled` property.\n   *  *   - `true` indicates that the interval is enabled.\n   *  *   - `false` indicates that the interval is disabled.\n   */\n  @Input()\n  set isIntervalToggleEnabled(value: boolean) {\n    const shouldSetInterval = this.isIntervalToggleEnabled || this.doesUserCheckedIntervalToggle;\n    const shouldToggleInterval =\n      !this.isDisabled &&\n      this.isIntervalToggleEnabled &&\n      this.doesUserCheckedIntervalToggle &&\n      value;\n    const intervalToggleControl = this.toggleIntervalForm.get('intervalToggle');\n    /**\n     * We check if any interactions to toggle interval button were made.\n     * When user interacts with toggle button, we need to ignore assigning value to the form.\n     */\n    if (intervalToggleControl.dirty && !shouldSetInterval) {\n      return;\n    }\n    /**\n     * This condition checks if the interval toggle is enabled and if there has been user interaction,\n     * and if the provided value is truthy.\n     * If all conditions are met, the interval toggle should not be updated due to unnecessary update of countdown interval component\n     */\n    if (shouldToggleInterval) {\n      return;\n    }\n    intervalToggleControl.setValue(value);\n  }\n  /**\n   * This getter allows you to access the current state of the `isIntervalEnabled` property, which reflects\n   * the state of a toggle button. It retrieves the value from the associated form control, providing the\n   * current state of the toggle button.\n   */\n  get isIntervalToggleEnabled(): boolean {\n    return !this.isDisabled && this.toggleIntervalForm.get('intervalToggle').value;\n  }\n  /**\n   * Event emitter for notifying when a countdown timer has completed.\n   */\n  @Output()\n  onCountdownEnded = new EventEmitter<void>();\n\n  @ViewChild(CountdownIntervalComponent)\n  countdownIntervalComponent: CountdownIntervalComponent;\n  toggleIntervalForm = this.initForm();\n  private destroy$: Subject<void> = new Subject<void>();\n  /**\n   * Indicates whether the user has been interacting with the interval toggle.\n   * Property holds the current state of the interval toggle input element entered by the user,\n   * distinguishing it from changes made programmatically (e.g. value from isIntervalToggleEnabled).\n   */\n  private doesUserCheckedIntervalToggle: boolean;\n\n  constructor(\n    private fb: FormBuilder,\n    private alarmsViewService: AlarmsViewService\n  ) {}\n\n  ngOnInit(): void {\n    this.listenToRefreshIntervalChange();\n  }\n\n  ngAfterViewInit(): void {\n    this.onIntervalToggleChange();\n    this.listenOnLoadingChanges();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  resetCountdown(): void {\n    this.countdownIntervalComponent?.reset();\n  }\n\n  trackUserClickOnIntervalToggle(target: EventTarget): void {\n    this.doesUserCheckedIntervalToggle = (target as HTMLInputElement).checked;\n  }\n\n  getTooltip() {\n    return this.isDisabled\n      ? gettext('Disabled')\n      : this.isIntervalToggleEnabled\n        ? this.DISABLE_AUTO_REFRESH\n        : this.ENABLE_AUTO_REFRESH;\n  }\n\n  private startCountdown(): void {\n    this.countdownIntervalComponent.start();\n  }\n\n  private onIntervalToggleChange(): void {\n    this.toggleIntervalForm\n      .get('intervalToggle')\n      .valueChanges.pipe(takeUntil(this.destroy$), filter(Boolean))\n      .subscribe(() => setTimeout(() => this.startCountdown()));\n  }\n\n  private initForm() {\n    return this.fb.group({\n      intervalToggle: true,\n      refreshInterval: this.alarmsViewService.DEFAULT_INTERVAL_VALUE\n    });\n  }\n\n  private listenToRefreshIntervalChange(): void {\n    this.toggleIntervalForm\n      .get('refreshInterval')\n      .valueChanges.pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.resetCountdown());\n  }\n\n  private listenOnLoadingChanges() {\n    this.alarmsListLoading$\n      .pipe(tap(() => this.countdownIntervalComponent?.stop()))\n      .subscribe(state => {\n        !state && this.countdownIntervalComponent?.reset();\n      });\n  }\n}\n","<form\n  class=\"d-flex a-i-center fit-w fit-h\"\n  [formGroup]=\"toggleIntervalForm\"\n>\n  <label class=\"m-b-0 m-r-8 text-normal text-muted flex-no-shrink\">\n    {{ 'Auto refresh' | translate }}\n  </label>\n  <div class=\"input-group\">\n    <label\n      class=\"toggle-countdown\"\n      [class.toggle-countdown-disabled]=\"isDisabled\"\n      [attr.aria-label]=\"getTooltip() | translate\"\n      [tooltip]=\"getTooltip() | translate\"\n      placement=\"bottom\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n    >\n      <input\n        type=\"checkbox\"\n        data-cy=\"c8y-alarms-interval-toggle\"\n        formControlName=\"intervalToggle\"\n        (click)=\"trackUserClickOnIntervalToggle($event.target)\"\n      />\n      <c8y-countdown-interval\n        *ngIf=\"isIntervalToggleEnabled\"\n        [countdownInterval]=\"toggleIntervalForm.value.refreshInterval\"\n        (countdownEnded)=\"onCountdownEnded.emit()\"\n      ></c8y-countdown-interval>\n      <i\n        c8yIcon=\"pause\"\n        *ngIf=\"!isIntervalToggleEnabled\"\n      ></i>\n    </label>\n    <div\n      class=\"c8y-select-wrapper\"\n      *ngIf=\"!isDisabled\"\n    >\n      <select\n        class=\"form-control text-12\"\n        [attr.aria-label]=\"'Refresh interval in seconds' | translate\"\n        [tooltip]=\"'Refresh interval in seconds' | translate\"\n        placement=\"bottom\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n        [container]=\"'body'\"\n        formControlName=\"refreshInterval\"\n        data-cy=\"c8y-alarms-interval-selector\"\n      >\n        <option\n          [disabled]=\"isDisabled\"\n          *ngFor=\"let refreshInterval of refreshIntervalsInMilliseconds\"\n          [ngValue]=\"refreshInterval\"\n        >\n          {{ SECONDS_UNTIL_REFRESH | translate: { seconds: refreshInterval / 1000 } }}\n        </option>\n      </select>\n      <span></span>\n    </div>\n    <div class=\"input-group-btn\">\n      <button\n        class=\"btn btn-default\"\n        style=\"border-left: 0\"\n        [attr.aria-label]=\"'Refresh' | translate\"\n        [tooltip]=\"'Refresh' | translate\"\n        placement=\"bottom\"\n        type=\"button\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n        [disabled]=\"isDisabled || (alarmsListLoading$ | async)\"\n        (click)=\"onCountdownEnded.emit()\"\n        data-cy=\"c8y-alarms-reload-button\"\n      >\n        <i\n          c8yIcon=\"refresh\"\n          [ngClass]=\"{ 'icon-spin': alarmsListLoading$ | async }\"\n        ></i>\n      </button>\n    </div>\n  </div>\n</form>\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { IAlarm, IResultList } from '@c8y/client';\nimport {\n  ContextRouteService,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator,\n  ListItemComponent,\n  LoadMoreMode,\n  gettext\n} from '@c8y/ngx-components';\nimport { BehaviorSubject, Observable, Subject, fromEvent, pipe } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  shareReplay,\n  switchMap,\n  takeUntil\n} from 'rxjs/operators';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { AlarmNavigationOptions } from './alarms.model';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\n\n@Component({\n  selector: 'c8y-alarms-list',\n  templateUrl: './alarms-list.component.html'\n})\nexport class AlarmsListComponent implements OnChanges, AfterViewInit, OnDestroy {\n  readonly alarmBadgeTooltip = gettext(\n    'Number of occurrences`number of occurrences of alarm`. First occurrence {{ alarmFirstOccurrenceTime }} (device time).'\n  );\n  readonly alarmLastOccurrenceLabel = gettext('Last occurrence of this alarm (device time).');\n\n  /**\n   * Input property for receiving a list of alarms.\n   */\n  @Input()\n  alarms: IResultList<IAlarm & { link?: string }>;\n\n  @Input() hasPermissions = true;\n\n  /**\n   * Input property for the currently applied type filters.\n   */\n  @Input()\n  typeFilters: AlarmDetails[] = [];\n\n  /**\n   * Input property for receiving load more mode.\n   */\n  @Input()\n  loadMoreMode: LoadMoreMode = 'hidden';\n\n  /**\n   * Defines options, how the alarm list should be navigated if a user\n   * clicks on an alarm.\n   */\n  @Input()\n  navigationOptions: AlarmNavigationOptions = {\n    allowNavigationToAlarmsView: true,\n    alwaysNavigateToAllAlarms: false,\n    includeClearedQueryParams: false,\n    queryParamsHandling: 'merge'\n  };\n\n  /**\n   * Controls the visibility of the loading bar\n   * When set to `false`, the alarm list is displayed. When set to `true`, the opacity of alarms list is changed and a loading bar is shown.\n   */\n  @Input()\n  isInitialLoading = false;\n\n  /**\n   * Controls the visibility and functionality of some components\n   * When set to `true`, means the list is displayed in a split view layout:\n   * the list on the first column and the selected record detail on the second column (the cockpit\n   * alarms view for example)\n   * When set to false, the list is displayed as a standalone component, opening the detail will\n   * redirect to the alarms\n   */\n  @Input()\n  splitView = false;\n\n  /**\n   * Emits an instance of a selected alarm when one is chosen from the list.\n   */\n  @Output()\n  onSelectedAlarm = new EventEmitter<IAlarm>();\n\n  /**\n   * Emits a boolean value indicating the scrolling state: true when the user starts scrolling, and false when the user reaches the top of the list.\n   */\n  @Output()\n  onScrollingStateChange = new EventEmitter<boolean>();\n\n  /**\n   * Current alarm or last alarm marked as active by the routerLinkActive directive.\n   */\n  activeAlarm$ = new BehaviorSubject<IAlarm>(null);\n  activeChildParam$ = new Observable<string>();\n\n  @ViewChild('scrollWrapper')\n  innerScrollWrapper: ElementRef;\n\n  isScrolling = false;\n  /**\n   * Determines whether the c8y-loading component should be displayed.\n   * The loading component is shown when no alarms are displayed in the view or when the request is initial,\n   * as we don't want to see empty space on alarm list during loading.\n   */\n  isEmptyListLoading = true;\n\n  alertAggregator = new DynamicComponentAlertAggregator();\n\n  mapAlarmLink = pipe(\n    map((alarms: IAlarm[]) =>\n      alarms.map((alarm: IAlarm) => {\n        alarm.link = this.getRouterLink(alarm);\n        return alarm;\n      })\n    )\n  );\n\n  private destroy$: Subject<void> = new Subject<void>();\n  private HIDE_INTERVAL_COUNTDOWN_SCROLL = 50;\n\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService,\n    private contextRouteService: ContextRouteService,\n    private router: Router\n  ) {\n    this.verifyIfFiltersMatchingAlarm();\n  }\n\n  /**\n   * Handles the change of the active route.\n   *\n   * @param isActive - A boolean indicating whether the route is active or not.\n   * @param scrollAnchor - The ListItemComponent used as a scroll anchor.\n   * @param alarm - The IAlarm object representing the active alarm.\n   */\n  activeRouteChanged(isActive: boolean, scrollAnchor: ListItemComponent, alarm: IAlarm): void {\n    if (isActive) {\n      scrollAnchor.element.nativeElement.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest'\n      });\n      this.activeAlarm$.next(alarm);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.alarms && changes.alarms) {\n      this.activeAlarm$.next(null);\n      this.isEmptyListLoading = !this.alarms?.data?.length;\n    }\n\n    if (changes.hasPermissions?.currentValue === false) {\n      this.alertAggregator.addAlerts(\n        new DynamicComponentAlert({\n          type: 'system',\n          text: gettext(\"You don't have permission to view alarms.\")\n        })\n      );\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (this.alarmsViewService.isIntervalRefresh()) {\n      const scrollElement = this.innerScrollWrapper.nativeElement;\n      fromEvent(scrollElement, 'scroll')\n        .pipe(takeUntil(this.destroy$), debounceTime(300))\n        .subscribe((event: Event) => {\n          const target = event.target as HTMLElement;\n          this.isScrolling = this.shouldCountdownIntervalBeHidden(target);\n          this.onScrollingStateChange.emit(this.isScrolling);\n        });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  onAlarmOpen(alarm: IAlarm): void {\n    this.onSelectedAlarm.emit(alarm);\n  }\n\n  getRouterLink(alarm: IAlarm): string {\n    if (this.navigationOptions.alwaysNavigateToAllAlarms) {\n      return this.alarmsViewService.getRouterLink(null, alarm);\n    }\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    return this.alarmsViewService.getRouterLink(contextData, alarm);\n  }\n\n  private shouldCountdownIntervalBeHidden(target: HTMLElement): boolean {\n    const scrollTopPixels = target.scrollTop;\n    return scrollTopPixels > this.HIDE_INTERVAL_COUNTDOWN_SCROLL;\n  }\n\n  private verifyIfFiltersMatchingAlarm() {\n    this.activeChildParam$ = this.router.events.pipe(\n      filter(e => e instanceof NavigationEnd && this.activatedRoute.children.length > 0),\n      switchMap(() => this.activatedRoute.children[0].params),\n      map(params => params.id),\n      distinctUntilChanged(),\n      shareReplay(),\n      takeUntil(this.destroy$)\n    );\n\n    // done to get the first navigation\n    this.activeChildParam$.subscribe();\n  }\n}\n","<div\n  class=\"inner-scroll\"\n  [ngClass]=\"{ 'split-view__list bg-level-1': splitView, 'bg-component': !splitView }\"\n  data-cy=\"c8y-alarms-list\"\n  #scrollWrapper\n>\n  <div\n    class=\"flex-wrap flex-no-shrink sticky-top m-b-16\"\n    [ngClass]=\"{\n      'separator-bottom card-header p-b-0': splitView,\n      'd-flex fit-w separator-top-bottom widget-bar p-l-16 p-r-16':\n        !splitView && navigationOptions.allowNavigationToAlarmsView\n    }\"\n  >\n    <div\n      class=\"h4 card-title\"\n      *ngIf=\"splitView\"\n    >\n      {{ 'Alarms list' | translate }}\n    </div>\n    <div\n      [ngClass]=\"{ 'fit-w d-flex a-i-center gap-16': !splitView, 'fit-h-20 m-l-auto': splitView }\"\n    >\n      <ng-content></ng-content>\n    </div>\n    <!--  Loading -->\n    <div\n      class=\"fit-w overflow-hidden\"\n      [ngClass]=\"{ 'p-t-16': splitView }\"\n    >\n      <div\n        class=\"loading-bar\"\n        style=\"z-index: 101\"\n        [ngClass]=\"{ active: isInitialLoading && !isEmptyListLoading }\"\n      ></div>\n    </div>\n\n    <div\n      class=\"alert alert-warning\"\n      role=\"alert\"\n      translate\n      *ngIf=\"\n        !isEmptyListLoading &&\n        (activeChildParam$ | async) &&\n        (activeAlarm$ | async)?.id !== (activeChildParam$ | async)\n      \"\n    >\n      The selected alarm is not currently in the list, change your filter.\n    </div>\n  </div>\n  <c8y-list-group\n    class=\"p-r-16 interactive\"\n    [ngStyle]=\"{ opacity: isInitialLoading && !isEmptyListLoading ? 0.2 : 1 }\"\n    style=\"transition: opacity 0.15s linear\"\n    data-cy=\"c8y-alarm-list--group\"\n  >\n    <c8y-li-timeline\n      class=\"pointer\"\n      role=\"button\"\n      data-cy=\"c8y-alarm-list--timeline-repeat\"\n      *c8yFor=\"let alarm of alarms; let i = index; pipe: mapAlarmLink; loadMore: loadMoreMode\"\n      [routerLink]=\"navigationOptions.allowNavigationToAlarmsView ? alarm.link : null\"\n      routerLinkActive=\"active\"\n      [queryParamsHandling]=\"navigationOptions.queryParamsHandling\"\n      (isActiveChange)=\"activeRouteChanged($event, liScrollAnchor, alarm)\"\n      (click)=\"onAlarmOpen(alarm)\"\n      [queryParams]=\"\n        navigationOptions.includeClearedQueryParams\n          ? { showCleared: alarm.status === 'CLEARED' }\n          : {}\n      \"\n    >\n      <span\n        [attr.aria-label]=\"alarmLastOccurrenceLabel | translate\"\n        [tooltip]=\"alarmLastOccurrenceLabel | translate\"\n        placement=\"right\"\n        container=\"body\"\n        [delay]=\"500\"\n      >\n        {{ alarm.time | c8yDate: 'mediumDate' }}\n        {{ alarm.time | c8yDate: 'mediumTime' }}\n      </span>\n      <c8y-li\n        style=\"scroll-margin-top: 56px\"\n        #liScrollAnchor\n      >\n        <c8y-li-icon class=\"a-s-start\">\n          <div class=\"alarm-icons\">\n            <c8y-alarms-icon [typeFilters]=\"typeFilters\" [alarm]=\"alarm\"></c8y-alarms-icon>\n          </div>\n          <button\n            class=\"btn-clean text-center\"\n            [attr.aria-label]=\"\n              alarmBadgeTooltip\n                | translate\n                  : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n            \"\n            [tooltip]=\"\n              alarmBadgeTooltip\n                | translate\n                  : { alarmFirstOccurrenceTime: alarm.firstOccurrenceTime | c8yDate: 'medium' }\n            \"\n            placement=\"right\"\n            container=\"body\"\n            type=\"button\"\n            *ngIf=\"alarm.firstOccurrenceTime\"\n            (click)=\"$event.stopPropagation()\"\n            [delay]=\"500\"\n          >\n            <span\n              class=\"badge badge-info\"\n              *ngIf=\"alarm.count > 1\"\n            >\n              {{ alarm.count }}\n            </span>\n          </button>\n        </c8y-li-icon>\n        <c8y-li-body class=\"a-s-stretch\">\n          <div class=\"d-flex a-i-start fit-h\">\n            <div class=\"min-width-0 flex-grow\">\n              <p class=\"text-truncate-wrap p-b-4\">\n                {{ alarm.text | translate }}\n              </p>\n              <div class=\"d-flex\">\n                <p\n                  class=\"small text-muted text-truncate flex-grow\"\n                  [title]=\"alarm.source.name\"\n                >\n                  <i [c8yIcon]=\"'exchange'\"></i>\n                  {{ alarm.source.name }}\n                </p>\n                <div class=\"d-flex\">\n                  <div\n                    [title]=\"item.title | translate\"\n                    *ngFor=\"let item of alarm | alarmListIndicator | async\"\n                  >\n                    <i\n                      [class]=\"item.class\"\n                      [c8yIcon]=\"item.icon\"\n                    ></i>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </c8y-li-body>\n      </c8y-li>\n    </c8y-li-timeline>\n    <c8y-loading *ngIf=\"isInitialLoading && isEmptyListLoading\"></c8y-loading>\n    <div\n      class=\"p-relative p-l-24\"\n      *ngIf=\"isEmptyListLoading && !isInitialLoading\"\n    >\n      <c8y-ui-empty-state\n        [icon]=\"'c8y-alert-idle'\"\n        [title]=\"'No alarms to display.' | translate\"\n        data-cy=\"alarm-list--empty-state\"\n        *ngIf=\"hasPermissions; else alertsA\"\n      >\n        <p c8y-guide-docs>\n          <small\n            translate\n            ngNonBindable\n          >\n            Find out more in the\n            <a\n              c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n            >\n              user documentation\n            </a>\n            .\n          </small>\n        </p>\n      </c8y-ui-empty-state>\n    </div>\n  </c8y-list-group>\n</div>\n\n<ng-template #alertsA>\n  <c8y-dynamic-component-alerts [alerts]=\"alertAggregator\"></c8y-dynamic-component-alerts>\n</ng-template>\n","import {\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Severity, SeverityType } from '@c8y/client';\nimport { DateTimeContext, gettext } from '@c8y/ngx-components';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport {\n  AlarmListFormFilters,\n  INTERVAL_TITLES_EXTENDED,\n  INTERVALS_EXTENDED,\n  WidgetTimeContextStateExtended\n} from './alarms.model';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\nimport { AlarmsViewService } from './alarms-view.service';\nimport { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';\n\n@Component({\n  selector: 'c8y-alarms-date-filter',\n  templateUrl: './alarms-date-filter.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AlarmsDateFilterComponent),\n      multi: true\n    }\n  ]\n})\nexport class AlarmsDateFilterComponent implements OnDestroy, ControlValueAccessor {\n  readonly INTERVALS = INTERVALS_EXTENDED;\n  readonly INTERVAL_TITLES = INTERVAL_TITLES_EXTENDED;\n  readonly DATE_FORMAT = 'short';\n\n  @Input() DEFAULT_INTERVAL: AlarmFilterInterval['id'] = 'none';\n  @Input() updateQueryParams = true;\n  /**\n   * Date range to be displayed in the date picker.\n   */\n  @Input() date: [string, string];\n  noFilterLabel = gettext('No date filter');\n\n  private showCleared: boolean;\n  private severityOptions: { [key in SeverityType]: boolean };\n  private typeFilters: string;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  @Output() dateFilterChange = new EventEmitter<AlarmListFormFilters>();\n  @ViewChild(BsDropdownDirective) dropdown: BsDropdownDirective;\n\n  form: ReturnType<AlarmsDateFilterComponent['createForm']>;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange: (value: any) => void;\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private router: Router,\n    private activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService\n  ) {}\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  ngOnInit() {\n    const context = this.getDefaultContext();\n    this.form = this.createForm(context);\n    this.date = [\n      this.form.value.currentDateContextFromDate,\n      this.form.value.currentDateContextToDate\n    ];\n    this.activatedRoute.queryParams.pipe(take(1), takeUntil(this.destroy$)).subscribe(params => {\n      this.showCleared = params.showCleared === 'true';\n      this.severityOptions = {\n        [Severity.CRITICAL]: params.critical === 'true',\n        [Severity.MAJOR]: params.major === 'true',\n        [Severity.MINOR]: params.minor === 'true',\n        [Severity.WARNING]: params.warning === 'true'\n      };\n      if (params.typeFilters) {\n        this.typeFilters = params.typeFilters;\n      }\n      if (!params.interval) {\n        return;\n      }\n      if (params.interval !== 'custom') {\n        this.updateDateTime(params.interval);\n      } else {\n        this.form.patchValue({\n          currentDateContextInterval: params.interval,\n          temporaryUserSelectedFromDate: params.lastUpdatedFrom,\n          temporaryUserSelectedToDate: params.createdTo\n        });\n        this.date = [params.lastUpdatedFrom, params.createdTo];\n      }\n    });\n\n    this.subscribeToIntervalChange();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  applyDateFilter(): void {\n    const combinedFormEvent = {\n      showCleared: this.showCleared,\n      severityOptions: this.severityOptions,\n      typeFilters: this.typeFilters,\n      interval: this.form.value.currentDateContextInterval,\n      selectedDates: [\n        new Date(this.form.value.temporaryUserSelectedFromDate),\n        new Date(this.form.value.temporaryUserSelectedToDate)\n      ] as DateTimeContext\n    };\n\n    // needed for custom interval\n    this.date = [\n      this.form.value.temporaryUserSelectedFromDate,\n      this.form.value.temporaryUserSelectedToDate\n    ];\n\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams: {\n        interval: this.form.value.currentDateContextInterval,\n        lastUpdatedFrom: combinedFormEvent.selectedDates[0].toISOString(),\n        createdTo: combinedFormEvent.selectedDates[1].toISOString()\n      },\n      queryParamsHandling: 'merge'\n    });\n    this.dateFilterChange.emit(combinedFormEvent);\n  }\n\n  writeValue(value: any): void {\n    if (value) {\n      this.form.patchValue({\n        currentDateContextFromDate:\n          typeof value[0] === 'string' ? value[0] : value[0].toISOString(),\n        currentDateContextToDate: typeof value[1] === 'string' ? value[1] : value[1].toISOString()\n      });\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any) {\n    this.onTouched = onTouched;\n  }\n\n  private updateDateTime(interval: AlarmFilterInterval['id']): void {\n    const date = this.alarmsViewService.getDateTimeContextByInterval(interval);\n    if (this.dropdown) {\n      this.dropdown.isOpen = false;\n    }\n    this.date = date.map(d => d.toISOString()) as [string, string];\n    this.form.patchValue(\n      {\n        temporaryUserSelectedFromDate: date[0].toISOString(),\n        temporaryUserSelectedToDate: date[1].toISOString(),\n        currentDateContextInterval: interval\n      },\n      { emitEvent: false }\n    );\n    this.applyDateFilter();\n  }\n\n  private getDefaultContext() {\n    return {\n      date: this.alarmsViewService.getDateTimeContextByInterval(this.DEFAULT_INTERVAL),\n      interval: this.DEFAULT_INTERVAL\n    };\n  }\n\n  private subscribeToIntervalChange(): void {\n    this.form.controls.currentDateContextInterval.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(interval => {\n        if (interval === 'custom') {\n          this.form.patchValue(\n            {\n              temporaryUserSelectedFromDate:\n                this.form.controls.temporaryUserSelectedFromDate.value === new Date(0).toISOString()\n                  ? this.form.controls.currentDateContextToDate.value\n                  : this.form.controls.temporaryUserSelectedFromDate.value,\n              currentDateContextInterval: interval\n            },\n            { emitEvent: false }\n          );\n          return;\n        }\n        this.updateDateTime(interval);\n      });\n  }\n\n  private createForm(context: WidgetTimeContextStateExtended) {\n    return this.formBuilder.group({\n      temporaryUserSelectedFromDate: context.date[0].toISOString(),\n      temporaryUserSelectedToDate: context.date[1].toISOString(),\n      currentDateContextFromDate: context.date[0].toISOString(),\n      currentDateContextToDate: context.date[1].toISOString(),\n      currentDateContextInterval: context.interval || 'custom'\n    });\n  }\n}\n","<form\n  class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n  [formGroup]=\"form\"\n>\n  <div\n    class=\"dropdown flex-grow\"\n    c8yDropdownDirection\n    #dropDirection=\"bs-dropdown\"\n    dropdown\n    [insideClick]=\"true\"\n  >\n    <button\n      class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n      attr.aria-label=\"{{\n        (form.value.currentDateContextInterval === 'none'\n          ? noFilterLabel\n          : (date[0] | c8yDate: DATE_FORMAT) + ' — ' + (date[1] | c8yDate: DATE_FORMAT)\n        ) | translate\n      }}\"\n      tooltip=\"{{\n        (form.value.currentDateContextInterval === 'none'\n          ? noFilterLabel\n          : (date[0] | c8yDate: DATE_FORMAT) + ' — ' + (date[1] | c8yDate: DATE_FORMAT)\n        ) | translate\n      }}\"\n      placement=\"top\"\n      container=\"body\"\n      data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      dropdownToggle\n    >\n      <i\n        class=\"m-r-4\"\n        c8yIcon=\"schedule1\"\n      ></i>\n      <div class=\"d-col text-left fit-w\">\n        <span\n          class=\"text-12\"\n          data-cy=\"widget-time-context--selected-interval\"\n        >\n          {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n        </span>\n        <span\n          class=\"text-10 text-muted text-truncate\"\n          data-cy=\"alarms-date-filter--selected-time-range\"\n          *ngIf=\"form.controls.currentDateContextInterval.value !== 'none'\"\n        >\n          {{ date[0] | c8yDate: DATE_FORMAT }} — {{ date[1] | c8yDate: DATE_FORMAT }}\n        </span>\n      </div>\n      <span class=\"caret m-r-16 m-l-4\"></span>\n    </button>\n\n    <ul\n      class=\"dropdown-menu dropdown-menu--date-range\"\n      *dropdownMenu\n    >\n      <c8y-interval-picker\n        class=\"d-contents\"\n        formControlName=\"currentDateContextInterval\"\n        [INTERVALS]=\"INTERVALS\"\n      ></c8y-interval-picker>\n\n      <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n        <div class=\"p-l-16 p-r-16\">\n          <c8y-form-group\n            class=\"m-b-8\"\n            [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n          >\n            <label\n              [title]=\"'From`date`' | translate\"\n              for=\"temporaryUserSelectedFromDate\"\n              translate\n            >\n              From`date`\n            </label>\n            <c8y-date-time-picker\n              id=\"temporaryUserSelectedFromDate\"\n              [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n              [placeholder]=\"'From`date`' | translate\"\n              [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n              [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n            ></c8y-date-time-picker>\n            <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n              <c8y-message\n                name=\"dateAfterRangeMax\"\n                [text]=\"'This date is after the latest allowed date.' | translate\"\n              ></c8y-message>\n              <c8y-message\n                name=\"invalidDateTime\"\n                [text]=\"'This date is invalid.' | translate\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n\n          <c8y-form-group\n            class=\"m-b-8\"\n            [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n          >\n            <label\n              [title]=\"'To`date`' | translate\"\n              for=\"temporaryUserSelectedToDate\"\n              translate\n            >\n              To`date`\n            </label>\n            <c8y-date-time-picker\n              id=\"temporaryUserSelectedToDate\"\n              [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n              [placeholder]=\"'To`date`' | translate\"\n              [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n              [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n            ></c8y-date-time-picker>\n            <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n              <c8y-message\n                name=\"dateBeforeRangeMin\"\n                [text]=\"'This date is before the earliest allowed date.' | translate\"\n              ></c8y-message>\n              <c8y-message\n                name=\"invalidDateTime\"\n                [text]=\"'This date is invalid.' | translate\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div class=\"p-16 d-flex gap-8 separator-top\">\n          <button\n            class=\"btn btn-primary btn-sm flex-grow\"\n            title=\"{{ 'Apply' | translate }}\"\n            type=\"button\"\n            (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n            [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n            translate\n          >\n            Apply\n          </button>\n        </div>\n      </ng-container>\n    </ul>\n  </div>\n</form>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IAlarm, IResultList } from '@c8y/client';\nimport { ColorService } from '@c8y/ngx-components';\nimport { AlarmDetails, AlarmEventSelectorService } from '@c8y/ngx-components/alarm-event-selector';\nimport { map, Subject, takeUntil } from 'rxjs';\n\n@Component({\n  selector: 'c8y-alarms-type-filter',\n  templateUrl: './alarms-type-filter.component.html'\n})\nexport class AlarmsTypeFilterComponent implements OnInit, OnDestroy, OnChanges {\n  @Input()\n  alarms: IResultList<IAlarm>;\n\n  @Input()\n  possibleFilters: AlarmDetails[] = [];\n\n  @Input()\n  activeFilters: AlarmDetails[] = [];\n\n  @Output()\n  onFilterChanged: EventEmitter<AlarmDetails[]> = new EventEmitter();\n\n  customAlarmTypes: AlarmDetails[] = [];\n  customAlarmTypeInput = '';\n\n  readonly queryParamName = 'typeFilter';\n  readonly STORAGE_ACCESS_KEY = 'customAlarmTypes';\n\n  private destroy$ = new Subject<void>();\n  private currentQueryParam = '';\n\n  constructor(\n    private alarmEventSelectorService: AlarmEventSelectorService,\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n    private colorService: ColorService\n  ) {}\n\n  ngOnInit(): void {\n    this.setQueryParameterObservable();\n  }\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.alarms && changes.alarms.currentValue && this.activeFilters.length === 0) {\n      await this.setPossibleFilters();\n      this.applyFilterChange();\n    }\n  }\n\n  setQueryParameterObservable() {\n    this.activatedRoute.queryParams\n      .pipe(\n        map(params => {\n          const alarms: AlarmDetails[] = this.possibleFilters;\n          const possibleFilters = this.setActiveAlarmFiltersFromQueryParameter(\n            alarms,\n            params[this.queryParamName]\n          );\n          return possibleFilters;\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe((possibleFilters: AlarmDetails[]) => {\n        this.possibleFilters = possibleFilters;\n        this.applyFilterChange();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  toggleAlarmType(alarmType: AlarmDetails) {\n    alarmType.__active = !alarmType.__active;\n  }\n\n  deselect(type: AlarmDetails) {\n    const alarmFilter = this.possibleFilters.find(\n      alarm => alarm.filters.type === type.filters.type\n    );\n    alarmFilter.__active = false;\n    this.applyFilterChange();\n  }\n\n  deselectAll() {\n    this.possibleFilters = this.possibleFilters.map(alarm => {\n      return {\n        ...alarm,\n        __active: false\n      };\n    });\n    this.applyFilterChange();\n  }\n\n  applyFilterChange() {\n    const actives = this.possibleFilters.filter(\n      (alarmFilter: AlarmDetails) => alarmFilter.__active\n    );\n    const newQueryParam = this.getQueryParams(actives);\n    const hasChanged = newQueryParam !== this.currentQueryParam;\n    if (hasChanged) {\n      this.activeFilters = actives;\n      this.onFilterChanged.emit(this.activeFilters);\n      this.router.navigate([], {\n        queryParams: {\n          typeFilter: newQueryParam || null\n        },\n        queryParamsHandling: 'merge'\n      });\n      this.currentQueryParam = newQueryParam;\n    }\n  }\n\n  resetFilters() {\n    this.possibleFilters.forEach(possibleFilter => {\n      possibleFilter.__active = this.activeFilters.some(\n        (activeFilter: AlarmDetails) => activeFilter === possibleFilter\n      );\n    });\n  }\n\n  removeCustomAlarm(alarmDetails: AlarmDetails) {\n    this.possibleFilters = this.possibleFilters.filter(filter => filter !== alarmDetails);\n    this.storeCustomAlarmTypes();\n  }\n\n  confirmWithEnter(event: KeyboardEvent) {\n    if (event.key === 'Enter') {\n      this.addCustomAlarmType();\n    }\n  }\n\n  async addCustomAlarmType() {\n    if (!this.customAlarmTypeInput) {\n      return;\n    }\n    this.possibleFilters.unshift({\n      label: this.customAlarmTypeInput,\n      color: await this.colorService.generateColor(this.customAlarmTypeInput),\n      filters: {\n        type: this.customAlarmTypeInput\n      },\n      timelineType: 'ALARM',\n      __active: true,\n      __target: null\n    });\n    this.customAlarmTypeInput = '';\n    this.storeCustomAlarmTypes();\n  }\n\n  private storeCustomAlarmTypes() {\n    const customTypes = this.possibleFilters.filter((filter: AlarmDetails) => !filter.__target);\n    window.localStorage.setItem(this.STORAGE_ACCESS_KEY, JSON.stringify(customTypes));\n  }\n\n  private getCustomAlarmTypeFromStorage() {\n    const types = window.localStorage.getItem(this.STORAGE_ACCESS_KEY);\n    return types ? JSON.parse(types) : [];\n  }\n\n  private async setPossibleFilters() {\n    const queryParameters = this.activatedRoute.snapshot.queryParamMap.get(this.queryParamName);\n    const alarmTypesFromCurrentlyShownAlarms =\n      await this.alarmEventSelectorService.getUniqueAlarmsOnly(this.alarms.data);\n    const customAlarmTypesFromLocalStorage = this.getCustomAlarmTypeFromStorage();\n    const selectableAlarmTypes = this.setActiveAlarmFiltersFromQueryParameter(\n      [...customAlarmTypesFromLocalStorage, ...alarmTypesFromCurrentlyShownAlarms],\n      queryParameters\n    );\n    this.possibleFilters = selectableAlarmTypes;\n  }\n\n  private setActiveAlarmFiltersFromQueryParameter(\n    alarmFilters: AlarmDetails[],\n    filterTypesQuery = ''\n  ): AlarmDetails[] {\n    const types = (filterTypesQuery ?? '').split(',');\n    return alarmFilters.map((alarm: AlarmDetails) => ({\n      ...alarm,\n      __active: types.includes(alarm.filters.type)\n    }));\n  }\n\n  private getQueryParams(activeFilters: AlarmDetails[]): string {\n    return activeFilters.map(filter => filter.filters.type).join(',');\n  }\n}\n","<div class=\"d-flex a-i-center\">\n  <div\n    class=\"dropdown\"\n    title=\"{{ 'Filter by alarm types' | translate }}\"\n    dropdown\n    #filtersDropdown=\"bs-dropdown\"\n    [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n    (onHidden)=\"resetFilters()\"\n    [insideClick]=\"true\"\n  >\n    <div class=\"input-group fit-w\">\n      <div class=\"form-control d-flex a-i-center inner-scroll\">\n        <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n          <span\n            class=\"tag tag--info chip\"\n            *ngFor=\"let filter of activeFilters\"\n          >\n            <button\n              class=\"btn btn-xs btn-clean text-10\"\n              title=\"{{ 'Remove' | translate }}\"\n              type=\"button\"\n              (click)=\"$event.stopPropagation(); deselect(filter)\"\n            >\n              <i c8yIcon=\"times\"></i>\n            </button>\n            <span\n              class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n              [ngStyle]=\"{ 'background-color': filter.color }\"\n            >\n              <i\n                class=\"stroked-icon\"\n                c8yIcon=\"bell\"\n              ></i>\n            </span>\n            {{ filter.filters.type }}\n          </span>\n        </ng-container>\n        <ng-template #allTypes>\n          <span class=\"text-nowrap\">\n            {{ 'All alarm types' | translate }}\n          </span>\n        </ng-template>\n      </div>\n      <div class=\"input-group-btn input-group-btn--last text-center\">\n        <button\n          class=\"btn-default btn\"\n          [title]=\"'Clear filters' | translate\"\n          *ngIf=\"activeFilters.length\"\n          (click)=\"deselectAll()\"\n        >\n          <i c8yIcon=\"times\"></i>\n        </button>\n        <button\n          class=\"btn-default btn btn--caret\"\n          [title]=\"'Alarm types' | translate\"\n          data-cy=\"c8y-alarm-type-filter\"\n          dropdownToggle\n        >\n          <i class=\"caret\"></i>\n        </button>\n      </div>\n    </div>\n    <div\n      class=\"dropdown-menu dropdown-menu-action-bar\"\n      style=\"max-width: unset; min-width: 250px\"\n      *dropdownMenu\n    >\n      <div class=\"p-16 bg-level-2\">\n        <div>\n          <p>\n            <i\n              class=\"text-info m-r-4\"\n              [c8yIcon]=\"'info-circle'\"\n            ></i>\n            <strong tanslate>The list below may not be complete.</strong>\n          </p>\n          <p tanslate>\n            Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n            add a custom alarm.\n          </p>\n        </div>\n      </div>\n      <c8y-list-group>\n        <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n          <input\n            class=\"form-control\"\n            placeholder=\"'Custom alarm type' | translate\"\n            type=\"text\"\n            [(ngModel)]=\"customAlarmTypeInput\"\n            (keydown)=\"confirmWithEnter($event)\"\n          />\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn-dot text-primary\"\n              [attr.aria-label]=\"'Add custom alarm' | translate\"\n              tooltip=\"'Add' | translate\"\n              placement=\"top\"\n              [delay]=\"500\"\n              (click)=\"addCustomAlarmType()\"\n            >\n              <i c8yIcon=\"plus-circle\"></i>\n            </button>\n          </div>\n        </div>\n\n        <c8y-li\n          class=\"c8y-list__item__collapse--container-small cdk-drag\"\n          style=\"cursor: pointer\"\n          *ngFor=\"let alarmType of possibleFilters\"\n          (click)=\"toggleAlarmType(alarmType)\"\n        >\n          <c8y-li-checkbox\n            class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n            [selected]=\"alarmType.__active\"\n            (click)=\"$event.stopPropagation()\"\n            (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n          ></c8y-li-checkbox>\n          <div class=\"d-flex a-i-center p-l-4\">\n            <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n              <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n                <span\n                  class=\"circle-icon-wrapper\"\n                  [ngStyle]=\"{ 'background-color': alarmType.color }\"\n                >\n                  <i\n                    class=\"stroked-icon\"\n                    [c8yIcon]=\"'bell'\"\n                  ></i>\n                </span>\n              </div>\n            </div>\n            <span class=\"text-truncate text-12 flex-grow\">\n              {{ alarmType.label }}\n            </span>\n            <button\n              class=\"btn-dot btn-dot--danger\"\n              [attr.aria-label]=\"'Remove' | translate\"\n              tooltip=\"'Remove' | translate\"\n              placement=\"top\"\n              *ngIf=\"alarmType.__target === null\"\n              [delay]=\"500\"\n              (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n            >\n              <i c8yIcon=\"minus-circle\"></i>\n            </button>\n          </div>\n        </c8y-li>\n        <c8y-li *ngIf=\"possibleFilters.length === 0\">\n          <c8y-ui-empty-state\n            class=\"p-t-8\"\n            icon=\"c8y-alarm\"\n            [title]=\"'No alarm found' | translate\"\n            [subtitle]=\"\n              'There is no alarm to filter. You can still add a custom alarm.' | translate\n            \"\n            [horizontal]=\"true\"\n          ></c8y-ui-empty-state>\n        </c8y-li>\n        <div class=\"sticky-bottom p-16\">\n          <button\n            class=\"btn btn-block btn-primary\"\n            [disabled]=\"possibleFilters.length === 0\"\n            (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n            translate\n          >\n            Apply\n          </button>\n        </div>\n      </c8y-list-group>\n    </div>\n  </div>\n</div>\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n  AlarmQueryFilter,\n  IAlarm,\n  IResultList,\n  SEVERITY_LABELS,\n  SeverityFilter,\n  SeverityType\n} from '@c8y/client';\nimport {\n  AlarmWithChildrenRealtimeService,\n  AlertService,\n  ContextRouteService,\n  DateTimeContext,\n  ModalService,\n  ViewContext,\n  gettext\n} from '@c8y/ngx-components';\nimport { AlarmDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { debounceTime, takeUntil, throttleTime } from 'rxjs/operators';\nimport { AlarmsIntervalRefreshComponent } from './alarms-interval-refresh.component';\nimport { AlarmsViewService } from './alarms-view.service';\nimport {\n  AlarmListFormFilters,\n  DEFAULT_SEVERITY_VALUES,\n  THROTTLE_REALTIME_REFRESH\n} from './alarms.model';\n\n@Component({\n  selector: 'c8y-alarms',\n  templateUrl: './alarms.component.html',\n  providers: [AlarmWithChildrenRealtimeService]\n})\nexport class AlarmsComponent implements OnInit, OnDestroy {\n  readonly NEW_REALTIME_ALARM_MESSAGE = this.alarmsViewService.REALTIME_UPDATE_ALARMS_MESSAGE;\n  readonly TITLE = gettext('Alarms');\n  readonly REFRESH_LABEL = gettext('Refresh');\n\n  @ViewChild(AlarmsIntervalRefreshComponent)\n  alarmIntervalRefreshComponent: AlarmsIntervalRefreshComponent;\n  alarms$: BehaviorSubject<IResultList<IAlarm>> = new BehaviorSubject<IResultList<IAlarm>>(null);\n  contextSourceId: number | string | null;\n  /** responsible for showing either realtime button or intervals, based on 'refreshType' key in OptionsService */\n  isIntervalRefresh: boolean;\n  isLoading$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  isRealtimeActive = new BehaviorSubject<boolean>(false);\n  realtimeIconTitle: string;\n  shouldShowIntervalToggle$ = new BehaviorSubject<boolean>(true);\n  isRealtimeToggleOn = true;\n  typeFilters: AlarmDetails[] = [];\n  isDisabled = false;\n\n  private destroy$: Subject<void> = new Subject<void>();\n  private selectedSeverities = Object.keys(SEVERITY_LABELS) as SeverityType[];\n  private severityOptions: SeverityFilter = DEFAULT_SEVERITY_VALUES;\n  private showCleared = false;\n  private readonly WAIT_TIME_AVOID_MULTIPLE_REQUEST_BY_PARAM_CHANGE = 100;\n  private selectedDates: DateTimeContext;\n\n  constructor(\n    public activatedRoute: ActivatedRoute,\n    private alarmsViewService: AlarmsViewService,\n    private alarmWithChildrenRealtimeService: AlarmWithChildrenRealtimeService,\n    private alertService: AlertService,\n    private contextRouteService: ContextRouteService,\n    private modalService: ModalService,\n    private translateService: TranslateService,\n    private router: Router\n  ) {\n    this.isIntervalRefresh = this.alarmsViewService.isIntervalRefresh();\n    this.initializeContextSourceId();\n  }\n\n  ngOnInit() {\n    const isInDetailView = !!this.activatedRoute.children[0]?.snapshot.params.id;\n    if (isInDetailView) {\n      this.changeInterval(false);\n    }\n\n    if (!this.isIntervalRefresh) {\n      this.handleLegacyRealtime();\n    }\n\n    this.alarmsViewService.reloadAlarmsList$\n      .pipe(\n        debounceTime(this.WAIT_TIME_AVOID_MULTIPLE_REQUEST_BY_PARAM_CHANGE),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => {\n        this.updateAlarms();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  applyTypeFilters(typeFilters: AlarmDetails[]): void {\n    this.typeFilters = typeFilters;\n    this.alarmsViewService.reloadAlarmsList$.next();\n    this.isRealtimeActive.next(false);\n  }\n\n  applyFormFilters({ severityOptions, showCleared, selectedDates }: AlarmListFormFilters): void {\n    this.severityOptions = severityOptions;\n    this.showCleared = showCleared;\n    this.selectedDates = selectedDates;\n    this.selectedSeverities = this.alarmsViewService.updateSelectedSeverities(this.severityOptions);\n    this.alarmsViewService.reloadAlarmsList$.next();\n    this.isRealtimeActive.next(false);\n  }\n\n  async applyDateFilter(selectedDates: [Date, Date]): Promise<void> {\n    this.alarms$.next(await this.alarmsViewService.retrieveAlarmsByDate(selectedDates));\n    this.isRealtimeActive.next(false);\n  }\n\n  async clearAll(): Promise<void> {\n    try {\n      const translatedBody = this.translateService.instant(\n        gettext('Do you really want to clear all alarms of selected severities?')\n      );\n      await this.modalService.confirm(\n        gettext('Confirm clearing alarms?'),\n        translatedBody,\n        'danger',\n        {\n          ok: gettext('Confirm'),\n          cancel: gettext('Cancel')\n        }\n      );\n    } catch {\n      // modal canceled\n      return;\n    }\n\n    await this.clearAlarms();\n  }\n\n  refresh(): void {\n    this.updateAlarms();\n    this.isRealtimeActive.next(false);\n  }\n\n  changeInterval(value = true): void {\n    this.shouldShowIntervalToggle$.next(value);\n  }\n\n  toggleRealtimeState(): void {\n    this.isRealtimeToggleOn = !this.isRealtimeToggleOn;\n  }\n\n  private handleLegacyRealtime() {\n    this.realtimeIconTitle = this.translateService.instant(gettext('Realtime active'));\n    this.subscribeToRealtimeUpdates();\n  }\n\n  private async clearAlarms(): Promise<void> {\n    try {\n      const result = await this.alarmsViewService.clearAllActiveAlarms(\n        this.selectedSeverities,\n        this.contextSourceId\n      );\n\n      if (result.resolvedImmediately) {\n        this.alertService.success(this.translateService.instant(gettext('Alarms cleared.')));\n        this.backToRootRoute();\n        this.refresh();\n      } else {\n        this.alertService.success(\n          this.translateService.instant(gettext('Alarms are being cleared in background.'))\n        );\n      }\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  private backToRootRoute(): void {\n    const contextData = this.contextRouteService.getContextData(this.activatedRoute);\n    this.router.navigate(this.alarmsViewService.getRouterNavigationArray(contextData), {\n      queryParamsHandling: 'merge'\n    });\n  }\n\n  private async getAlarms(): Promise<IResultList<IAlarm>> {\n    try {\n      this.isLoading$.next(true);\n\n      const additionalFilter: Partial<AlarmQueryFilter> = {};\n\n      if (this.contextSourceId) {\n        (additionalFilter.source = this.contextSourceId),\n          (additionalFilter.withSourceAssets = true),\n          (additionalFilter.withSourceDevices = true);\n      }\n\n      if (this.typeFilters.length > 0) {\n        additionalFilter.type = this.typeFilters.map(({ filters }) => filters.type).join(',');\n      }\n\n      return await this.alarmsViewService.retrieveFilteredAlarms(\n        this.selectedSeverities,\n        this.showCleared,\n        this.selectedDates,\n        additionalFilter\n      );\n    } catch (error) {\n      if (error?.res?.status === 403) {\n        this.isDisabled = true;\n        return;\n      }\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading$.next(false);\n    }\n  }\n\n  private async updateAlarms() {\n    this.alarms$.next(await this.getAlarms());\n  }\n\n  private subscribeToRealtimeUpdates(): void {\n    this.alarmWithChildrenRealtimeService\n      .onAll$(this.contextSourceId)\n      .pipe(\n        takeUntil(this.destroy$),\n        throttleTime(THROTTLE_REALTIME_REFRESH, undefined, { trailing: true })\n      )\n      .subscribe(() => {\n        if (this.isRealtimeToggleOn) {\n          this.refresh();\n        } else {\n          this.isRealtimeActive.next(true);\n        }\n      });\n  }\n\n  private initializeContextSourceId(): void {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if (\n      [ViewContext.Device, ViewContext.Group, ViewContext.Service, ViewContext.Simulators].includes(\n        context\n      )\n    ) {\n      this.contextSourceId = contextData?.id;\n    }\n  }\n}\n","<ng-container *ngIf=\"(activatedRoute.data | async)?.title\">\n  <c8y-title>{{ TITLE | translate }}</c8y-title>\n</ng-container>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form min-width-fit\"\n>\n  <c8y-alarms-filter\n    class=\"d-block fit-w\"\n    [contextSourceId]=\"contextSourceId\"\n    (onFilterApplied)=\"applyFormFilters($event)\"\n  ></c8y-alarms-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form min-width-fit\"\n>\n  <c8y-alarms-date-filter (dateFilterChange)=\"applyFormFilters($event)\"></c8y-alarms-date-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form\"\n>\n  <c8y-alarms-type-filter\n    class=\"d-block fit-w\"\n    [alarms]=\"alarms$ | async\"\n    (onFilterChanged)=\"applyTypeFilters($event)\"\n  ></c8y-alarms-type-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  [priority]=\"0\"\n>\n  <button\n    class=\"btn btn-link\"\n    [title]=\"'Clear all alarms' | translate\"\n    type=\"button\"\n    (click)=\"clearAll()\"\n    data-cy=\"c8y-alarms-view--clear-all-button\"\n  >\n    <i c8yIcon=\"c8y-alert-idle\"></i>\n    {{ 'Clear all`alarms`' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<!--Realtime button-->\n<ng-template #realtimeRefresh>\n  <div class=\"input-group-btn\">\n    <button\n      class=\"btn btn-default btn-sm\"\n      [attr.aria-label]=\"'Refresh' | translate\"\n      [tooltip]=\"\n        (isRealtimeActive | async)\n          ? (NEW_REALTIME_ALARM_MESSAGE | translate)\n          : (REFRESH_LABEL | translate)\n      \"\n      placement=\"left\"\n      container=\"body\"\n      type=\"button\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      [disabled]=\"isLoading$ | async\"\n      (click)=\"refresh()\"\n    >\n      <span\n        class=\"tag tag--info m-r-8\"\n        *ngIf=\"isRealtimeActive | async\"\n      >\n        {{ 'New alarms' | translate }}\n      </span>\n      <i\n        c8yIcon=\"refresh\"\n        [ngClass]=\"{ 'icon-spin': isLoading$ | async }\"\n      ></i>\n    </button>\n    <button\n      class=\"c8y-realtime btn btn-default btn-sm\"\n      [attr.aria-label]=\"realtimeIconTitle\"\n      [tooltip]=\"realtimeIconTitle\"\n      placement=\"bottom\"\n      type=\"button\"\n      data-cy=\"c8y-alarms--realtime-button\"\n      [container]=\"'body'\"\n      (click)=\"toggleRealtimeState()\"\n    >\n      <span\n        class=\"c8y-pulse m-0\"\n        [ngClass]=\"{\n          active: isRealtimeToggleOn,\n          inactive: !isRealtimeToggleOn\n        }\"\n      ></span>\n    </button>\n  </div>\n</ng-template>\n\n<c8y-help\n  src=\"/docs/device-management-application/monitoring-and-controlling-devices/#working-with-alarms\"\n></c8y-help>\n\n<div class=\"card content-fullpage split-view--5-7 grid__row--1\">\n  <c8y-alarms-list\n    class=\"d-contents\"\n    [isInitialLoading]=\"isLoading$ | async\"\n    [alarms]=\"alarms$ | async\"\n    [typeFilters]=\"typeFilters\"\n    (onScrollingStateChange)=\"changeInterval(!$event)\"\n    (onSelectedAlarm)=\"changeInterval(false)\"\n    [splitView]=\"true\"\n    [hasPermissions]=\"!isDisabled\"\n  >\n    <ng-container *ngIf=\"isIntervalRefresh; else realtimeRefresh\">\n      <c8y-alarms-interval-refresh\n        [alarmsListLoading$]=\"isLoading$\"\n        [isIntervalToggleEnabled]=\"shouldShowIntervalToggle$ | async\"\n        (onCountdownEnded)=\"refresh()\"\n        [isDisabled]=\"isDisabled\"\n      ></c8y-alarms-interval-refresh>\n    </ng-container>\n  </c8y-alarms-list>\n\n  <router-outlet class=\"d-contents\"></router-outlet>\n</div>\n","import { Routes } from '@angular/router';\nimport {\n  ContextRouteComponent,\n  ContextRouteGuard,\n  gettext,\n  Route,\n  RouterTabsResolver,\n  ViewContext,\n  ViewContextRootRoute\n} from '@c8y/ngx-components';\nimport { AlarmEmptyComponent } from './alarm-empty.component';\nimport { AlarmInfoComponent } from './alarm-info.component';\n\nexport function getViewContextRoutes(contexts: ViewContext[]): Routes {\n  return contexts.map(context => ({\n    context,\n    path: 'details',\n    icon: 'bell',\n    label: gettext('Details'),\n    component: AlarmInfoComponent,\n    tabsOutlet: 'alarms'\n  }));\n}\n\nexport function getChildrenForViewContext(context: ViewContext): Routes {\n  return [\n    {\n      path: '',\n      component: AlarmEmptyComponent\n    },\n    {\n      path: ':id',\n      rootContext: context,\n      component: ContextRouteComponent,\n      canActivate: [ContextRouteGuard],\n      data: { context, contextData: {} },\n      resolve: {\n        tabs: RouterTabsResolver\n      }\n    }\n  ] as Array<Route | ViewContextRootRoute>;\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { DatePipe, TitleCasePipe } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n  CommonModule,\n  CoreModule,\n  DynamicComponentModule,\n  HeaderModule,\n  RelativeTimePipe,\n  hookNavigator,\n  hookRoute\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AlarmDetailsComponent } from './alarm-details.component';\nimport { AlarmEmptyComponent } from './alarm-empty.component';\nimport { AlarmInfoComponent } from './alarm-info.component';\nimport { AlarmSeveritiesToTitlePipe } from './alarm-severities-to-title.pipe';\nimport { AlarmSeverityToIconPipe } from './alarm-severity-to-icon.pipe';\nimport { AlarmSeverityToLabelPipe } from './alarm-severity-to-label.pipe';\nimport { AlarmStatusToIconPipe } from './alarm-status-to-icon.pipe';\nimport { AlarmStatusToLabelPipe } from './alarm-status-to-label.pipe';\nimport { AlarmsFilterComponent } from './alarms-filter.component';\nimport { AlarmsIconComponent } from './alarms-icon.component';\nimport { AlarmsIntervalRefreshComponent } from './alarms-interval-refresh.component';\nimport { AlarmsListComponent } from './alarms-list.component';\nimport { AlarmsComponent } from './alarms.component';\nimport { ALARMS_MODULE_CONFIG, AlarmsModuleConfig } from './alarms.model';\nimport { AuditChangesMessagePipe } from './audit-changes-message.pipe';\nimport { smartRulesUpgradeServiceProvider } from './ng1-smart-rules-upgrade.service';\nimport { AlarmEventSelectorModule } from '@c8y/ngx-components/alarm-event-selector';\nimport { AlarmsTypeFilterComponent } from './alarms-type-filter.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AlarmListIndicatorPipe } from './alarm-list-custom-indicator/alarm-list-indicator.pipe';\nimport { AlarmDetailsButtonPipe } from './alarm-details-custom-button/alarm-details-button.pipe';\nimport { AlarmsDateFilterComponent } from './alarms-date-filter.component';\nimport { IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';\n\nconst defaultAlarmsConfig: AlarmsModuleConfig = {\n  hybrid: true\n};\n\n@NgModule({\n  declarations: [\n    AlarmDetailsComponent,\n    AlarmInfoComponent,\n    AlarmsComponent,\n    AlarmSeveritiesToTitlePipe,\n    AlarmsFilterComponent,\n    AlarmsIconComponent,\n    AlarmsIntervalRefreshComponent,\n    AlarmsListComponent,\n    AlarmStatusToIconPipe,\n    AuditChangesMessagePipe,\n    AlarmSeverityToLabelPipe,\n    AlarmStatusToLabelPipe,\n    AlarmEmptyComponent,\n    AlarmsDateFilterComponent,\n    AlarmsTypeFilterComponent\n  ],\n  exports: [AlarmsComponent, AlarmsListComponent, AlarmsFilterComponent, AlarmsDateFilterComponent],\n  providers: [\n    DatePipe,\n    TitleCasePipe,\n    RelativeTimePipe,\n    {\n      provide: ALARMS_MODULE_CONFIG,\n      useValue: defaultAlarmsConfig\n    }\n  ],\n  imports: [\n    A11yModule,\n    BsDropdownModule,\n    CommonModule,\n    CoreModule,\n    HeaderModule,\n    PopoverModule,\n    TooltipModule.forRoot(),\n    TranslateModule,\n    RouterModule,\n    AlarmEventSelectorModule,\n    RouterModule,\n    AlarmListIndicatorPipe,\n    AlarmDetailsButtonPipe,\n    AlarmSeverityToIconPipe,\n    DynamicComponentModule,\n    IntervalPickerComponent\n  ]\n})\nexport class AlarmsModule {\n  static config(config: AlarmsModuleConfig = {}): ModuleWithProviders<AlarmsModule> {\n    const alarmsConfig: AlarmsModuleConfig = { ...defaultAlarmsConfig, ...config };\n    return {\n      ngModule: AlarmsModule,\n      providers: [\n        ...(alarmsConfig.hybrid ? [smartRulesUpgradeServiceProvider] : []),\n        hookNavigator(alarmsConfig.rootNavigatorNode),\n        hookRoute(alarmsConfig.route),\n        {\n          provide: ALARMS_MODULE_CONFIG,\n          useValue: alarmsConfig\n        }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.AlarmDetailsButtonService","i2","i1.AlarmDetailsService","i4.Ng1SmartRulesUpgradeService","i5","i6.AlarmsViewService","i8","i9.AlarmDetailsButtonPipe","i10.AlarmSeverityToIconPipe","i11.AlarmStatusToIconPipe","i12.AuditChangesMessagePipe","i3.AlarmsViewService","i4","i5.AlarmDetailsComponent","i6","i1.AlarmListIndicatorService","i2.AlarmsViewService","i9.AlarmSeverityToIconPipe","i10.AlarmSeveritiesToTitlePipe","i3","i5.AlarmSeverityToIconPipe","i6.AlarmStatusToIconPipe","i7.AlarmSeverityToLabelPipe","i8.AlarmStatusToLabelPipe","i7.AlarmsIconComponent","i8.AlarmListIndicatorPipe","takeUntil","i7","map","i9","i7.AlarmsFilterComponent","i8.AlarmsIntervalRefreshComponent","i9.AlarmsListComponent","i10.AlarmsDateFilterComponent","i11.AlarmsTypeFilterComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;;AAEG;MACU,yBAAyB,CAAA;IACpC,WACU,CAAA,eAAgC,EAChC,eAAsC,EAAA;QADtC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAChC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuB;KAC5C;IAEJ,IAAI,CAAC,KAAa,EAAE,MAAsB,EAAA;AACxC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAC5D,MAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC,MAAK;YACP,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;SACvD,CAAC,CACH,CAAC;QAEF,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,SAAS,IAAG;YACpB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,IACzC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACF,YAAA,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AACrC,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAG;AACf,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAyB,CAAC;AAC5D,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CACvD,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,IAAwB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,OAAO,CAAC,CAAC;SACV;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;KACvB;+GAjCU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAJZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAInB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACGlC;;;;AAIG;MACU,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAoB,yBAAoD,EAAA;QAApD,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;KAAI;IAE5E,SAAS,CAAC,KAAa,EAAE,MAAsB,EAAA;QAC7C,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KAC3D;+GALU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAA;;;MCHY,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAF3B,IAAgB,CAAA,gBAAA,GAAG,QAAQ,CAAC;KAEG;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;IACH,iBAAiB,CAAC,MAAuB,EAAE,QAAwB,EAAA;QACjE,IAAI,cAAc,GAAG,IAAI,CAAC;AAE1B,QAAA,IAAI,MAAM,KAAK,WAAW,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AAC1E,YAAA,OAAO,cAAc,CAAC;SACvB;AAED,QAAA,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAElC,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,YAAY,KAAI;AAChD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACvD,MAAM,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAC3C,CAAC,MAAe,KACd,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,YAAY,CAC7F,CAAC;YACF,OAAO,CAAC,wBAAwB,IAAI,YAAY,CAAC,IAAI,KAAK,GAAG,CAAC;SAC/D,EAAE,cAAc,CAAC,CAAC;KACpB;AAED;;;;;;;;;;;;;;;;;AAiBG;AACH,IAAA,kBAAkB,CAAC,QAAwB,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;QAEvE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,YAAY,KAAI;AAChD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACvD,MAAM,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAC3C,CAAC,MAAe,KACd,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,YAAY,CAC7F,CAAC;YACF,OAAO,wBAAwB,GAAG,YAAY,CAAC,YAAY,GAAG,GAAG,CAAC;SACnE,EAAE,YAAY,CAAC,CAAC;KAClB;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;AACH,IAAA,UAAU,CAAC,QAAwB,EAAA;QACjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,sBAAsB,GAAG,IAAI,CAAC;AAElC,QAAA,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE;AACnC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACvD,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CACtC,MAAM,IACJ,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,OAAO,CACxF,CAAC;YAEF,IAAI,mBAAmB,EAAE;gBACvB,IAAI,CAAC,sBAAsB,IAAI,YAAY,CAAC,YAAY,GAAG,sBAAsB,EAAE;AACjF,oBAAA,sBAAsB,GAAG,YAAY,CAAC,YAAY,CAAC;iBACpD;aACF;SACF;QAED,OAAO,sBAAsB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;KAC3D;IAED,0CAA0C,GAAA;AACxC,QAAA,MAAM,kCAAkC,GAAG;AACzC,YAAA;AACE,gBAAA,WAAW,CAAC,oBAAoB;AAChC,gBAAA,WAAW,CAAC,qBAAqB;AACjC,gBAAA,WAAW,CAAC,yBAAyB;AACrC,gBAAA,WAAW,CAAC,0BAA0B;AACvC,aAAA;AACD,YAAA,CAAC,WAAW,CAAC,yBAAyB,EAAE,WAAW,CAAC,oBAAoB,CAAC;SAC1E,CAAC;QAEF,QACE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAClE;KACH;+GA5IU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC2CY,oBAAoB,GAAG,IAAI,cAAc,CAAC,oBAAoB,EAAE;AAIhE,MAAA,iBAAiB,GAAG;AAC/B,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,IAAI,EAAE,MAAM;EACH;AAIX;;AAEG;AACU,MAAA,YAAY,GAA6C;AACpE,IAAA,CAAC,WAAW,CAAC,OAAO,GAAG,iBAAiB,CAAC,UAAU;AACnD,IAAA,CAAC,WAAW,CAAC,YAAY,GAAG,iBAAiB,CAAC,UAAU;AACxD,IAAA,CAAC,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI;EACnC;AAEE,MAAA,mBAAmB,GAAG;AACjC,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,kBAAkB,EAAE,oBAAoB;EAC/B;AAEJ,MAAM,SAAS,GAAG,OAAO;AAGhC;;AAEG;AACU,MAAA,uBAAuB,GAA4C;AAC9E,IAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB;AAC3D,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,mBAAmB,CAAC,OAAO;AAC7C,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa;AACnD,IAAA,CAAC,QAAQ,CAAC,OAAO,GAAG,mBAAmB,CAAC,MAAM;EACrC;AAQX;;AAEG;AACU,MAAA,wBAAwB,GAA8C;AACjF,IAAA,GAAG,eAAe;AAClB,IAAA,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC;EAC/B;AAEW,MAAA,kBAAkB,GAA0B;AACvD,IAAA;AACE,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACjC,KAAA;AACD,IAAA,GAAG,SAAS;EACZ;MASW,oBAAoB,GAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;AAEnF,MAAA,uBAAuB,GAAmB;AACrD,IAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI;AACzB,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI;AACtB,IAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI;AACtB,IAAA,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI;EACxB;AAEW,MAAA,qBAAqB,GAAwB;AACxD,IAAA,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI;AAC1B,IAAA,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI;AAChC,IAAA,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI;EAC3B;AAEK,MAAM,WAAW,GAAG,SAAS;AAMpC;;AAEG;AACU,MAAA,wBAAwB,GAAG;IACtC,UAAU;IACV,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,MAAM;IACN,cAAc;IACd,qBAAqB;IACrB,aAAa;EACkC;AAE1C,MAAM,yBAAyB,GAAG;;AChKzC;;;;;;;AAOG;MACmB,2BAA2B,CAAA;AAIhD,CAAA;AAEK,SAAU,+BAA+B,CAAC,QAAa,EAAA;AAC3D,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACvC,CAAC;AAEY,MAAA,gCAAgC,GAAG;AAC9C,IAAA,OAAO,EAAE,2BAA2B;AACpC,IAAA,UAAU,EAAE,+BAA+B;IAC3C,IAAI,EAAE,CAAC,WAAW,CAAC;;;ACIrB;;;;;;;;AAQG;MAIU,iBAAiB,CAAA;IAY5B,WACU,CAAA,YAA0B,EAC1B,cAA8B,EAAA;QAD9B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAb/B,IAAsB,CAAA,sBAAA,GAA6B,mBAAmB,CAAC;QACvE,IAAsB,CAAA,sBAAA,GAAG,MAAM,CAAC;QAChC,IAA4B,CAAA,4BAAA,GAAG,UAAU,CAAC;AAC1C,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,8BAA8B,GAAG,OAAO,CAAC,yCAAyC,CAAC,CAAC;AAG7F,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAQtC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAClE;KACF;AAED;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC/B;AAED;;;;;;;;;AASG;IACH,sBAAsB,CACpB,UAA0B,EAC1B,WAAW,GAAG,KAAK,EACnB,aAA4B,EAC5B,MAAyB,EAAA;QAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAEhE,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,cAAc,EAAE,IAAI;YACpB,IAAI,eAAe,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;YACrD,IAAI,aAAa,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YAC/C,IAAI,aAAa,IAAI;AACnB,gBAAA,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC/C,gBAAA,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;aAC1C,CAAC;AACF,YAAA,GAAG,MAAM;SACV,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACxC;AAED,IAAA,oBAAoB,CAAC,KAAsB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC5B,YAAA,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACvC,YAAA,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACjC,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,cAAc,EAAE,IAAI;AACrB,SAAA,CAAC,CAAC;KACJ;AAED;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;AAED;;;;;;;;;AASG;AACH,IAAA,MAAM,wBAAwB,CAC5B,QAAsB,EACtB,WAAoB,EACpB,MAAyB,EAAA;QAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAChE,QAAA,MAAM,OAAO,GAAqB;YAChC,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACvC,IAAI,aAAa,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAC/C,YAAA,GAAG,MAAM;SACV,CAAC;AACF,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;;AAKG;IACH,iBAAiB,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QAC/E,OAAO,KAAK,KAAK,UAAU,CAAC;KAC7B;AAED;;;;;;AAMG;AACH,IAAA,wBAAwB,CAAC,eAA+B,EAAA;AACtD,QAAA,OAAQ,MAAM,CAAC,IAAI,CAAC,eAAe,CAAoB;aACpD,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;aACnC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAkB,CAAC,CAAC;KAClD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACH,IAAA,MAAM,oBAAoB,CACxB,kBAAkC,EAClC,QAAyB,EAAA;AAEzB,QAAA,MAAM,kBAAkB,GAAG,kBAAkB,IAAI,QAAQ,CAAC;AAE1D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,QAAsB,KAAI;YAChF,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAEnD,MAAM,UAAU,GAAG,QAAQ;AACzB,kBAAE;AACE,oBAAA,GAAG,YAAY;AACf,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,iBAAiB,EAAE,IAAI;AACxB,iBAAA;kBACD,YAAY,CAAC;AAEjB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACnF,SAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO;YACL,mBAAmB,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;SACjD,CAAC;KACH;AAED;;;;;AAKG;IACH,aAAa,CAAC,WAAyB,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,SAAS,GAAG,CAAI,CAAA,EAAA,WAAW,EAAE,CAAC;QAClC,IAAI,KAAK,EAAE;YACT,SAAS,GAAG,IAAI,WAAW,CAAA,CAAA,EAAI,KAAK,CAAC,EAAE,EAAE,CAAC;SAC3C;QACD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;SAClB;AAED,QAAA,QAAQ,WAAW,CAAC,OAAO;YACzB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,CAAA,QAAA,EAAW,WAAW,CAAC,WAAW,CAAC,EAAE,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC;YAC7D,KAAK,WAAW,CAAC,KAAK;gBACpB,OAAO,CAAA,OAAA,EAAU,WAAW,CAAC,WAAW,CAAC,EAAE,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC;YAC5D,KAAK,WAAW,CAAC,UAAU;gBACzB,OAAO,CAAA,YAAA,EAAe,WAAW,CAAC,WAAW,CAAC,EAAE,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC;AACjE,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;SACpB;KACF;AAED;;;;;AAKG;IACH,wBAAwB,CAAC,WAAyB,EAAE,KAAc,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC1E;AAED;;;;AAIG;AACH,IAAA,4BAA4B,CAAC,UAAqC,EAAA;AAChE,QAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,UAAU,CAAC,CAAC;AACxE,QAAA,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,EAAE;YAC1B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;SAClC;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACpE,QAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC3B;AAED;;;;;;;;AAQG;AACK,IAAA,yBAAyB,CAAC,UAA0B,EAAA;QAC1D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C,OAAO;SACR;AACD,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;YACtD,OAAO;SACR;AAED,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC7B;AAED;;;;;;;AAOG;AACK,IAAA,uBAAuB,CAAC,WAAoB,EAAA;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAsB,CAAC;QACvE,MAAM,gBAAgB,GAAG,WAAW;AAClC,cAAE,QAAQ;AACV,cAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC;AACpD,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnC;+GAjRU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AChCD;;;;;;;AAOG;MAKU,uBAAuB,CAAA;AAClC;;;;;AAKG;AACH,IAAA,SAAS,CAAC,aAA2B,EAAA;QACnC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;AACnE,QAAA,OAAO,uBAAuB,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;KAClE;+GAVU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;ACZD;;;;;;;AAOG;MAIU,qBAAqB,CAAA;AAChC;;;;;AAKG;AACH,IAAA,SAAS,CAAC,WAA4B,EAAA;QACpC,OAAO,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,IAAI,SAAS,CAAC;KAC9D;+GATU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAArB,qBAAqB,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA,EAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,mBAAmB;AAC1B,iBAAA,CAAA;;;ACRD;;;AAGG;MAIU,uBAAuB,CAAA;AAClC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAI;AAE1D;;;;;;;;;;AAUG;AACH,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;YAClD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SACtD;AAED,QAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;AAE9C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAA,+DAAA,CAAiE,CAAC,CAAC;AAE3F,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;YAC5C,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;YAC3D,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClD,SAAA,CAAC,CAAC;KACJ;+GA7BU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAvB,uBAAuB,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,qBAAqB;AAC5B,iBAAA,CAAA;;;MC+BY,qBAAqB,CAAA;IAuEhC,WACU,CAAA,mBAAwC,EACxC,YAA0B,EAC1B,YAA0B,EAC1B,QAAyB,EACzB,YAA0B,EAC1B,YAA8B,EAClB,2BAAwD,EACpE,gBAAkC,EAClC,gBAAkC,EAClC,iBAAoC,EACpC,YAA0B,EAC1B,eAAgC,EAAA;QAXhC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAClB,IAA2B,CAAA,2BAAA,GAA3B,2BAA2B,CAA6B;QACpE,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAhFjC,QAAA,IAAA,CAAA,yBAAyB,GAAG,WAAW,CAAC,YAAY,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,WAAW,CAAC,OAAO,CAAC;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACzC,IAAe,CAAA,eAAA,GAAG,eAAe,CAAC;AAClC,QAAA,IAAA,CAAA,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC;AAC/C,QAAA,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAY5C,QAAA,IAAA,CAAA,sBAAsB,GAAoB,aAAa,CAAC,gBAAgB,CAAC;AAChE,QAAA,IAAA,CAAA,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAWrC,IAAS,CAAA,SAAA,GAAG,GAAG,CAAC;AAcjC;;AAEG;QACH,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;AAa9B;;AAEG;QACH,IAAe,CAAA,eAAA,GAAmB,IAAI,CAAC;KAiBnC;AAEJ,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,6BAA6B,GAAG,CAAC,EAAE,MAAM,cAAc,CAC3D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CACvD,CAAC,CAAC;QACH,MAAM,mCAAmC,GACvC,IAAI,CAAC,mBAAmB,CAAC,0CAA0C,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,iCAAiC;YACpC,CAAC,CAAC,IAAI,CAAC,2BAA2B;gBAClC,6BAA6B;AAC7B,gBAAA,mCAAmC,CAAC;AACtC,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CACtE,IAAI,CAAC,sBAAsB,CAC5B,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACjF;IAED,MAAM,WAAW,CAAC,OAAsB,EAAA;QACtC,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE;YAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACjC,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClF,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACpE;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;YAC3C,OAAO;SACR;AACD,QAAA,IAAI,CAAC,2BAA2B,CAAC,sCAAsC,CACrE,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAChC,CAAC;KACH;AAED;;;;AAIG;IACH,MAAM,eAAe,CAAC,QAAyB,EAAA;AAC7C,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACtC,IAAI,CAAC,sBAAsB,EAC3B,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,OAAA,CAAS,CACpC,CAAC;KACH;AAED;;;;;;;;;;;;;;;AAeG;IACH,MAAM,cAAc,CAClB,QAAQ,GAAG,IAAI,EACf,cAAc,GAAG,KAAK,EAAA;AAEtB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;aAC9B;AAED,YAAA,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;KACF;IAED,MAAM,eAAe,CAAC,MAAuB,EAAA;AAC3C,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnD;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;gBAAS;AACR,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;SACpC;KACF;AAED,IAAA,MAAM,mBAAmB,CAAC,MAA0B,EAAE,KAAa,EAAA;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,YAAY,GAAqB,KAAK,CAAC;AAC3C,QAAA,IAAI,MAAM,YAAY,OAAO,EAAE;YAC7B,YAAY,GAAG,MAAM,MAAM,CAAC;SAC7B;aAAM;YACL,YAAY,GAAG,MAAM,CAAC;SACvB;QAED,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,KAAa,CAAC;AAClB,YAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,gBAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACrF,KAAK,GAAG,YAAY,CAAC;aACtB;iBAAM;gBACL,KAAK,GAAG,YAAY,CAAC;aACtB;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;AAEzC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC;AACf,gBAAA,aAAa,EAAE;AACb,oBAAA,YAAY,EAAE,KAAK;oBACnB,aAAa;AACb,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,aAAa,EAAE,MAAM,KAAK;AAC3B,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;KACF;IAEO,MAAM,iBAAiB,CAAC,MAAuB,EAAA;AACrD,QAAA,MAAM,qBAAqB,GAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;QACrF,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACtD,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,sCAAsC,CAAC,EAAE;AAC7E,YAAA,MAAM,EAAE,qBAAqB,CAAC,WAAW,EAAE;AAC5C,SAAA,CAAC,CACH,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;KAC1C;AAED;;;;;;;;;;;AAWG;AACK,IAAA,MAAM,uBAAuB,GAAA;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzD,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzE,QAAA,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,QAAA,OAAO,kBAAkB,CAAC;KAC3B;AAEO,IAAA,YAAY,CAAC,SAAoC,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC3B;AAEO,IAAA,qBAAqB,CAAC,mBAAiC,EAAA;QAC7D,IAAI,CAAC,mBAAmB,EAAE;YACxB,OAAO;SACR;AAED,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;KACjC;AAEO,IAAA,sBAAsB,CAAC,IAAY,EAAA;QACzC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,+CAA+C,CAAC,EAAE;AAC7F,YAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,SAAA,CAAC,CAAC;KACJ;IAEO,4BAA4B,CAAC,MAAuB,EAAE,SAAyB,EAAA;AACrF,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;SACtE;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrF,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE/E,IAAI,cAAc,EAAE;YAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,OAAO,CAAC,sDAAsD,CAAC,EAC/D;AACE,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;AACvE,aAAA,CACF,CAAC;SACH;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,EAAE;AACtF,YAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;AACvE,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,uBAAuB,CAAC,QAAwB,EAAA;AACtD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACjE;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClC,OAAO,CAAC,kDAAkD,CAAC,EAC3D;YACE,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC;AACjE,SAAA,CACF,CAAC;KACH;AAED;;;;;;;;;;;;AAYG;AACK,IAAA,sBAAsB,CAAC,QAAwB,EAAA;QACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE9D,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5C,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAExC,OAAO,aAAa,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;KAC5D;AAED;;;;;;;;;;;;;;AAcG;AACK,IAAA,MAAM,oBAAoB,CAAC,QAAQ,GAAG,IAAI,EAAA;AAChD,QAAA,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;YAC1C,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;AACvC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7B,YAAA,cAAc,EAAE,IAAI;SACrB,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACjD;AAEO,IAAA,MAAM,mBAAmB,GAAA;AAC/B,QAAA,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM;YAC/B,KAAK,IAAI,CAAC,mBAAmB;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC1E,MAAM;YACR,KAAK,IAAI,CAAC,yBAAyB;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,4BAA4B,CACpD,IAAI,CAAC,aAAa,CAAC,MAAoC,EACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CACnB,CAAC;gBACF,MAAM;YACR,KAAK,IAAI,CAAC,oBAAoB;AAC5B,gBAAA,IAAI,IAAI,CAAC,iCAAiC,EAAE,EAAE;oBAC5C,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAC9D,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAC/E,OAAO;iBACR;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtE,MAAM;SACT;KACF;IAEO,iCAAiC,GAAA;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC;KACpD;AAEO,IAAA,kBAAkB,CAAC,aAAqB,EAAA;QAC9C,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC5B,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gBAClD,IAAI,CAAC,gBAAgB,EAAE;oBACrB,gBAAgB,GAAG,EAAE,CAAC;iBACvB;gBACD,gBAAgB,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;aAC5C;SACF;AAED,QAAA,OAAO,gBAAgB,CAAC;KACzB;+GApZU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,0HC1ClC,qpSA0RA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,sBAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDhPa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,qpSAAA,EAAA,CAAA;;0BAiF1B,QAAQ;6LA7EF,aAAa,EAAA,CAAA;sBAArB,KAAK;;;MErCK,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,wDCNhC,iTAQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDFa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,iTAAA,EAAA,CAAA;;;MEQjB,kBAAkB,CAAA;AAO7B,IAAA,WAAA,CACS,cAA8B,EAC7B,MAAc,EACd,mBAAwC,EACxC,iBAAoC,EAAA;QAHrC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC7B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QAP9C,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AACd,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;KAO/B;AAEJ,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,WAAW,CAAC,WAAqB,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AAC7E,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;IAED,IAAI,GAAA;AACF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAC;KACrE;+GA3BU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,sDCX/B,sxCAwCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD7Ba,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,sxCAAA,EAAA,CAAA;;;AEC5B;;AAEG;MACU,yBAAyB,CAAA;IACpC,WACU,CAAA,eAAgC,EAChC,eAAsC,EAAA;QADtC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAChC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuB;KAC5C;AAEJ,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAC5D,MAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC,MAAK;YACP,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;SACvD,CAAC,CACH,CAAC;QAEF,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,SAAS,IAAG;YACpB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,IACzC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC9D,CAAC;AACF,YAAA,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AACrC,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAG;AACf,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAyB,CAAC;AAC5D,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CACvD,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,IAAwB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,OAAO,CAAC,CAAC;SACV;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;KACvB;+GAjCU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAJZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAInB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACGlC;;;;AAIG;MACU,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAoB,yBAAoD,EAAA;QAApD,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;KAAI;AAE5E,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnD;+GALU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAgB,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAA;;;ACLD;;;;;;AAMG;MAIU,0BAA0B,CAAA;AAGrC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAFrC,IAAoB,CAAA,oBAAA,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;KAElB;AAC1D;;;;;AAKG;AACH,IAAA,SAAS,CAAC,UAA0B,EAAA;QAClC,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAElD,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,IAAI,eAAe,CAAC,CAAC,EAAE;AACrE,YAAA,OAAO,IAAI,CAAC;SACb;QACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,CAAC,oBAAoB,EAAE;YACzD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;SAC7D;AAED,QAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChG,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;AACD;;;;;;AAMG;AACK,IAAA,sBAAsB,CAAC,IAAkB,EAAA;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7D;+GAhCU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAA1B,0BAA0B,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA,CAAA;;;ACVD;;AAEG;MAIU,wBAAwB,CAAA;AACnC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAI;AAE1D;;;;AAIG;AACH,IAAA,SAAS,CAAC,aAAqB,EAAA;QAC7B,MAAM,iBAAiB,GAAG,eAAe,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,IAAI,aAAa,CAAC,CAAC;KAC1E;+GAXU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAxB,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,sBAAsB;AAC7B,iBAAA,CAAA;;;ACLD;;AAEG;MAIU,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAI;AAE1D;;;;AAIG;AACH,IAAA,SAAS,CAAC,WAA4B,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;KACvF;+GAVU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAtB,sBAAsB,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA,EAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,oBAAoB;AAC3B,iBAAA,CAAA;;;MC2BY,qBAAqB,CAAA;IAgChC,WACU,CAAA,WAAwB,EACxB,iBAAoC,EACpC,YAA0B,EAC1B,MAAc,EACd,cAA8B,EAAA;QAJ9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AApC/B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAmB,CAAC;AAKzE;;;AAGG;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAwB,CAAC;QAK3D,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC5D,IAAK,CAAA,KAAA,GAAmB,EAAE,CAAC;QAG3B,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACpB,IAAW,CAAA,WAAA,GAAe,oBAAoB,CAAC;QAI5B,IAAe,CAAA,eAAA,GAAG,eAAe,CAAC;AAC7C,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC9D,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAE9C,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAQ,CAAC;KAQlD;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;YAChF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC;AACjD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACtB,gBAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM;AACzD,gBAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM;AACnD,gBAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM;AACnD,gBAAA,CAAC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,MAAM;AACxD,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,MAAM,CAAC,eAAe,EAAE;gBAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;aACrF;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,iCAAiC,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC;QAChD,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACpC;IAED,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,CAAC,YAAY;AAC9B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;aAC/C,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KAC9C;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,UAAU,CAAC,QAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,YAAA,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ;AAC7B,YAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ;AAC1B,YAAA,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ;AAC1B,YAAA,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ;AACX,SAAA,CAAC,CAAC;KACtB;AAED,IAAA,YAAY,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAA;QACvC,IAAI,CAAC,2BAA2B,EAAE,CAAC;AACnC,QAAA,MAAM,iBAAiB,GAAyB;YAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;QACF,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9C;QACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC;QAEhD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;AACvB,gBAAA,WAAW,EAAE;oBACX,WAAW,EAAE,iBAAiB,CAAC,WAAW;oBAC1C,GAAG,iBAAiB,CAAC,eAAe;oBACpC,eAAe,EAAE,iBAAiB,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE;oBACpE,SAAS,EAAE,iBAAiB,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE;AAC/D,iBAAA;AACD,gBAAA,mBAAmB,EAAE,OAAO;AAC7B,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,YAAY,CAAC,IAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;YACvB,CAAC,IAAI,GAAG,KAAK;AACd,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC;SACrC;KACF;IAED,SAAS,GAAA;QACP,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC;KACjD;IAED,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACpC;AAED;;;;;;;;AAQG;AACH,IAAA,MAAM,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,EAAA;AAChE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,GAA4B,IAAI,CAAC,eAAe;AAC/D,cAAE;gBACE,MAAM,EAAE,IAAI,CAAC,eAAe;AAC5B,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,iBAAiB,EAAE,IAAI;AACxB,aAAA;cACD,IAAI,CAAC;AACT,QAAA,MAAM,WAAW,GAA6C,IAAI,CAAC,cAAc,CAAC,MAAM,CACtF,CAAC,GAAG,EAAE,QAAQ,KAAI;AAChB,YAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAClB,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CACpF,CAAC;AACF,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,EACD;AACE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CACF,CAAC;QACF,QAAQ,CAAC,WAAW,CAAC;AAClB,aAAA,IAAI,CACH,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,WAAW,GAAG,EAAgB,CAAC;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,EACF,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAC5C;AACA,aAAA,SAAS,CAAC,CAAC,WAAuB,MAAM,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC;KAC7E;IAEO,gCAAgC,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1E;IAEO,iCAAiC,GAAA;AACvC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAC3D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACxE;AAEO,IAAA,uBAAuB,CAAC,UAAsC,EAAA;QACpE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACrF;AAEO,IAAA,yBAAyB,CAAC,UAAsC,EAAA;AACtE,QAAA,OAAO,UAAU,CAAC,IAAI,CACpB,GAAG,CACD,UAAU,IACR,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CACvF,CACF,CAAC;KACH;AAEO,IAAA,0BAA0B,CAAC,UAAsC,EAAA;AACvE,QAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,IAAG;AAC/D,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;KACJ;IAEO,8BAA8B,GAAA;AACpC,QAAA,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAChF,GAAG,CACD,CAAC,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,KAC5C,wBAAwB,IAAI,CAAC,iBAAiB,CACjD,CACF,CAAC;KACH;IAEO,2BAA2B,GAAA;AACjC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;AACtC,QAAA,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC;QAE7C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB,CAAC;QAChG,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAChD,IAAI,eAAe,EAAE;YACnB,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAC9C,YAAA,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAmB,CAAC;SAC3D;KACF;+GAlOU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAhB,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,8QCpClC,64KA8JA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAW,uBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD1Ha,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,64KAAA,EAAA,CAAA;gMAO7B,eAAe,EAAA,CAAA;sBADd,KAAK;gBAQN,eAAe,EAAA,CAAA;sBADd,MAAM;gBAIP,eAAe,EAAA,CAAA;sBADd,SAAS;uBAAC,iBAAiB,CAAA;;;MExCjB,mBAAmB,CAAA;AAJhC,IAAA,WAAA,GAAA;QAWE,IAAmB,CAAA,mBAAA,GAAG,MAAM,CAAC;QAC7B,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExB,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAC9D,QAAA,IAAA,CAAA,gBAAgB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAOpD,KAAA;IALC,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,mBAAmB;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC;KAC7F;+GAlBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,+GCThC,8wCA2CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkB,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,uBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDlCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,8wCAAA,EAAA,CAAA;8BAK3B,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;;;MEOK,8BAA8B,CAAA;AAYzC;;;;;;;;;;AAUG;IACH,IACI,uBAAuB,CAAC,KAAc,EAAA;QACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,6BAA6B,CAAC;AAC7F,QAAA,MAAM,oBAAoB,GACxB,CAAC,IAAI,CAAC,UAAU;AAChB,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,6BAA6B;AAClC,YAAA,KAAK,CAAC;QACR,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC5E;;;AAGG;AACH,QAAA,IAAI,qBAAqB,CAAC,KAAK,IAAI,CAAC,iBAAiB,EAAE;YACrD,OAAO;SACR;AACD;;;;AAIG;QACH,IAAI,oBAAoB,EAAE;YACxB,OAAO;SACR;AACD,QAAA,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACvC;AACD;;;;AAIG;AACH,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;KAChF;IAkBD,WACU,CAAA,EAAe,EACf,iBAAoC,EAAA;QADpC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AA3ErC,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC;AAChF,QAAA,IAAA,CAAA,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEnD,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAmD5B;;AAEG;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAI5C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAQ,CAAC;KAWlD;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACtC;IAED,eAAe,GAAA;QACb,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,CAAC;KAC1C;AAED,IAAA,8BAA8B,CAAC,MAAmB,EAAA;AAChD,QAAA,IAAI,CAAC,6BAA6B,GAAI,MAA2B,CAAC,OAAO,CAAC;KAC3E;IAED,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,UAAU;AACpB,cAAE,OAAO,CAAC,UAAU,CAAC;cACnB,IAAI,CAAC,uBAAuB;kBAC1B,IAAI,CAAC,oBAAoB;AAC3B,kBAAE,IAAI,CAAC,mBAAmB,CAAC;KAChC;IAEO,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC;KACzC;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB;aACpB,GAAG,CAAC,gBAAgB,CAAC;AACrB,aAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5D,aAAA,SAAS,CAAC,MAAM,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;KAC7D;IAEO,QAAQ,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,sBAAsB;AAC/D,SAAA,CAAC,CAAC;KACJ;IAEO,6BAA6B,GAAA;AACnC,QAAA,IAAI,CAAC,kBAAkB;aACpB,GAAG,CAAC,iBAAiB,CAAC;aACtB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC3C,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KAC3C;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB;AACpB,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,CAAC;aACxD,SAAS,CAAC,KAAK,IAAG;YACjB,CAAC,KAAK,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,CAAC;AACrD,SAAC,CAAC,CAAC;KACN;+GA5IU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxB,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA9B,8BAA8B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+D9B,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnFvC,yjFAgFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD5Da,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;+BACE,6BAA6B,EAAA,QAAA,EAAA,yjFAAA,EAAA,CAAA;+GAS9B,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAcF,uBAAuB,EAAA,CAAA;sBAD1B,KAAK;gBAsCN,gBAAgB,EAAA,CAAA;sBADf,MAAM;gBAIP,0BAA0B,EAAA,CAAA;sBADzB,SAAS;uBAAC,0BAA0B,CAAA;;;ME3C1B,mBAAmB,CAAA;AAmG9B,IAAA,WAAA,CACU,cAA8B,EAC9B,iBAAoC,EACpC,mBAAwC,EACxC,MAAc,EAAA;QAHd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAtGf,QAAA,IAAA,CAAA,iBAAiB,GAAG,OAAO,CAClC,uHAAuH,CACxH,CAAC;AACO,QAAA,IAAA,CAAA,wBAAwB,GAAG,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAQnF,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;AAE/B;;AAEG;QAEH,IAAW,CAAA,WAAA,GAAmB,EAAE,CAAC;AAEjC;;AAEG;QAEH,IAAY,CAAA,YAAA,GAAiB,QAAQ,CAAC;AAEtC;;;AAGG;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAA2B;AAC1C,YAAA,2BAA2B,EAAE,IAAI;AACjC,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,mBAAmB,EAAE,OAAO;SAC7B,CAAC;AAEF;;;AAGG;QAEH,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAEzB;;;;;;;AAOG;QAEH,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB;;AAEG;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AAE7C;;AAEG;AAEH,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAW,CAAC;AAErD;;AAEG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,UAAU,EAAU,CAAC;QAK7C,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AACpB;;;;AAIG;QACH,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;AAE1B,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,+BAA+B,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CACjB,GAAG,CAAC,CAAC,MAAgB,KACnB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAa,KAAI;YAC3B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACvC,YAAA,OAAO,KAAK,CAAC;SACd,CAAC,CACH,CACF,CAAC;AAEM,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAQ,CAAC;QAC9C,IAA8B,CAAA,8BAAA,GAAG,EAAE,CAAC;QAQ1C,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;AAED;;;;;;AAMG;AACH,IAAA,kBAAkB,CAAC,QAAiB,EAAE,YAA+B,EAAE,KAAa,EAAA;QAClF,IAAI,QAAQ,EAAE;AACZ,YAAA,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC;AAChD,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;SACtD;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,YAAY,KAAK,KAAK,EAAE;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,IAAI,qBAAqB,CAAC;AACxB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,OAAO,CAAC,2CAA2C,CAAC;AAC3D,aAAA,CAAC,CACH,CAAC;SACH;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,EAAE;AAC9C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAC5D,YAAA,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC/B,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AACjD,iBAAA,SAAS,CAAC,CAAC,KAAY,KAAI;AAC1B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;gBAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrD,aAAC,CAAC,CAAC;SACN;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE;YACpD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC1D;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KACjE;AAEO,IAAA,+BAA+B,CAAC,MAAmB,EAAA;AACzD,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;AACzC,QAAA,OAAO,eAAe,GAAG,IAAI,CAAC,8BAA8B,CAAC;KAC9D;IAEO,4BAA4B,GAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC9C,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,aAAa,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAClF,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACvD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,EACxB,oBAAoB,EAAE,EACtB,WAAW,EAAE,EACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC;;AAGF,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;KACpC;+GA5LU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAjB,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,ogBCxChC,45LAqLA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAZ,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAW,sBAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD7Ia,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,45LAAA,EAAA,CAAA;2KAa3B,MAAM,EAAA,CAAA;sBADL,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAMN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAON,YAAY,EAAA,CAAA;sBADX,KAAK;gBAQN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAaN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAYN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAON,eAAe,EAAA,CAAA;sBADd,MAAM;gBAOP,sBAAsB,EAAA,CAAA;sBADrB,MAAM;gBAUP,kBAAkB,EAAA,CAAA;sBADjB,SAAS;uBAAC,eAAe,CAAA;;;ME/Ef,yBAAyB,CAAA;AAyBpC,IAAA,WAAA,CACU,WAAwB,EACxB,MAAc,EACd,cAA8B,EAC9B,iBAAoC,EAAA;QAHpC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QA5BrC,IAAS,CAAA,SAAA,GAAG,kBAAkB,CAAC;QAC/B,IAAe,CAAA,eAAA,GAAG,wBAAwB,CAAC;QAC3C,IAAW,CAAA,WAAA,GAAG,OAAO,CAAC;QAEtB,IAAgB,CAAA,gBAAA,GAA8B,MAAM,CAAC;QACrD,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC;AAKlC,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAKlC,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAQ,CAAC;AAE5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAwB,CAAC;;AAetE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG,CAAC;KAHjB;IAKJ,QAAQ,GAAA;AACN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB;SACzC,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAEC,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;YACzF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC;YACjD,IAAI,CAAC,eAAe,GAAG;gBACrB,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM;gBAC/C,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM;gBACzC,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM;gBACzC,CAAC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM;aAC9C,CAAC;AACF,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;aACvC;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACpB,OAAO;aACR;AACD,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACtC;iBAAM;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;oBACnB,0BAA0B,EAAE,MAAM,CAAC,QAAQ;oBAC3C,6BAA6B,EAAE,MAAM,CAAC,eAAe;oBACrD,2BAA2B,EAAE,MAAM,CAAC,SAAS;AAC9C,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;aACxD;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;IAED,eAAe,GAAA;AACb,QAAA,MAAM,iBAAiB,GAAG;YACxB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B;AACpD,YAAA,aAAa,EAAE;gBACb,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;gBACvD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC;AACnC,aAAA;SACrB,CAAC;;QAGF,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B;SAC5C,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI,CAAC,cAAc;AAC/B,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B;gBACpD,eAAe,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBACjE,SAAS,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC5D,aAAA;AACD,YAAA,mBAAmB,EAAE,OAAO;AAC7B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC/C;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnB,0BAA0B,EACxB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAClE,wBAAwB,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC3F,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,SAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;AAEO,IAAA,cAAc,CAAC,QAAmC,EAAA;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;SAC9B;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAqB,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAClB;AACE,YAAA,6BAA6B,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACpD,YAAA,2BAA2B,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAClD,YAAA,0BAA0B,EAAE,QAAQ;AACrC,SAAA,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAEO,iBAAiB,GAAA;QACvB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAChF,QAAQ,EAAE,IAAI,CAAC,gBAAgB;SAChC,CAAC;KACH;IAEO,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,YAAY;AACvD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,QAAQ,IAAG;AACpB,YAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAClB;AACE,oBAAA,6BAA6B,EAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;0BAChF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK;0BACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,KAAK;AAC5D,oBAAA,0BAA0B,EAAE,QAAQ;AACrC,iBAAA,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;gBACF,OAAO;aACR;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,UAAU,CAAC,OAAuC,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,6BAA6B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC5D,2BAA2B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC1D,0BAA0B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YACzD,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACvD,YAAA,0BAA0B,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;AACzD,SAAA,CAAC,CAAC;KACJ;+GAjLU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA3B,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EARzB,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAqBU,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,mBAAmB,gDCtDhC,ssKA+IA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD5Ga,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAXrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAEvB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,ssKAAA,EAAA,CAAA;qKAOQ,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAIG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAQI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACyB,QAAQ,EAAA,CAAA;sBAAvC,SAAS;uBAAC,mBAAmB,CAAA;;;MElCnB,yBAAyB,CAAA;AAsBpC,IAAA,WAAA,CACU,yBAAoD,EACpD,cAA8B,EAC9B,MAAc,EACd,YAA0B,EAAA;QAH1B,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA2B;QACpD,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QArBpC,IAAe,CAAA,eAAA,GAAmB,EAAE,CAAC;QAGrC,IAAa,CAAA,aAAA,GAAmB,EAAE,CAAC;AAGnC,QAAA,IAAA,CAAA,eAAe,GAAiC,IAAI,YAAY,EAAE,CAAC;QAEnE,IAAgB,CAAA,gBAAA,GAAmB,EAAE,CAAC;QACtC,IAAoB,CAAA,oBAAA,GAAG,EAAE,CAAC;QAEjB,IAAc,CAAA,cAAA,GAAG,YAAY,CAAC;QAC9B,IAAkB,CAAA,kBAAA,GAAG,kBAAkB,CAAC;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAC/B,IAAiB,CAAA,iBAAA,GAAG,EAAE,CAAC;KAO3B;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACpC;IAED,MAAM,WAAW,CAAC,OAAsB,EAAA;AACtC,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACpF,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;KACF;IAED,2BAA2B,GAAA;QACzB,IAAI,CAAC,cAAc,CAAC,WAAW;AAC5B,aAAA,IAAI,CACHsB,KAAG,CAAC,MAAM,IAAG;AACX,YAAA,MAAM,MAAM,GAAmB,IAAI,CAAC,eAAe,CAAC;AACpD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,uCAAuC,CAClE,MAAM,EACN,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAC5B,CAAC;AACF,YAAA,OAAO,eAAe,CAAC;SACxB,CAAC,EACFF,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB;AACA,aAAA,SAAS,CAAC,CAAC,eAA+B,KAAI;AAC7C,YAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;YACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,eAAe,CAAC,SAAuB,EAAA;AACrC,QAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC1C;AAED,IAAA,QAAQ,CAAC,IAAkB,EAAA;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC3C,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAClD,CAAC;AACF,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,IAAG;YACtD,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,QAAQ,EAAE,KAAK;aAChB,CAAC;AACJ,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACzC,CAAC,WAAyB,KAAK,WAAW,CAAC,QAAQ,CACpD,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnD,QAAA,MAAM,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC;QAC5D,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;AACvB,gBAAA,WAAW,EAAE;oBACX,UAAU,EAAE,aAAa,IAAI,IAAI;AAClC,iBAAA;AACD,gBAAA,mBAAmB,EAAE,OAAO;AAC7B,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;SACxC;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,IAAG;AAC5C,YAAA,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC/C,CAAC,YAA0B,KAAK,YAAY,KAAK,cAAc,CAChE,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,iBAAiB,CAAC,YAA0B,EAAA;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,YAAY,CAAC,CAAC;QACtF,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;AAED,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;KACF;AAED,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,oBAAoB;YAChC,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACvE,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,oBAAoB;AAChC,aAAA;AACD,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAEO,qBAAqB,GAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAoB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5F,QAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;KACnF;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACnE,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;KACvC;AAEO,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC5F,QAAA,MAAM,kCAAkC,GACtC,MAAM,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7E,QAAA,MAAM,gCAAgC,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;AAC9E,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,uCAAuC,CACvE,CAAC,GAAG,gCAAgC,EAAE,GAAG,kCAAkC,CAAC,EAC5E,eAAe,CAChB,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC;KAC7C;AAEO,IAAA,uCAAuC,CAC7C,YAA4B,EAC5B,gBAAgB,GAAG,EAAE,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,KAAmB,MAAM;AAChD,YAAA,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7C,SAAA,CAAC,CAAC,CAAC;KACL;AAEO,IAAA,cAAc,CAAC,aAA6B,EAAA;AAClD,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnE;+GAjLU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA3B,IAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,sOCpBtC,+6LA4KA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArB,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDxJa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,+6LAAA,EAAA,CAAA;iLAKlC,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,MAAM;;;MEMI,eAAe,CAAA;AA0B1B,IAAA,WAAA,CACS,cAA8B,EAC7B,iBAAoC,EACpC,gCAAkE,EAClE,YAA0B,EAC1B,mBAAwC,EACxC,YAA0B,EAC1B,gBAAkC,EAClC,MAAc,EAAA;QAPf,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC7B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAgC,CAAA,gCAAA,GAAhC,gCAAgC,CAAkC;QAClE,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAjCf,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC;AACnF,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAI5C,QAAA,IAAA,CAAA,OAAO,GAAyC,IAAI,eAAe,CAAsB,IAAI,CAAC,CAAC;AAI/F,QAAA,IAAA,CAAA,UAAU,GAA6B,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAEvD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;QAC/D,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;QAC1B,IAAW,CAAA,WAAA,GAAmB,EAAE,CAAC;QACjC,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAEX,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAQ,CAAC;AAC9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAmB,CAAC;QACpE,IAAe,CAAA,eAAA,GAAmB,uBAAuB,CAAC;QAC1D,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACX,IAAgD,CAAA,gDAAA,GAAG,GAAG,CAAC;QAatE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QACpE,IAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7E,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC5B;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;QAED,IAAI,CAAC,iBAAiB,CAAC,iBAAiB;AACrC,aAAA,IAAI,CACH,YAAY,CAAC,IAAI,CAAC,gDAAgD,CAAC,EACnE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;AACtB,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,gBAAgB,CAAC,WAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,gBAAgB,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAwB,EAAA;AACpF,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,MAAM,eAAe,CAAC,aAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClD,OAAO,CAAC,gEAAgE,CAAC,CAC1E,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC7B,OAAO,CAAC,0BAA0B,CAAC,EACnC,cAAc,EACd,QAAQ,EACR;AACE,gBAAA,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC;AACtB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC1B,aAAA,CACF,CAAC;SACH;AAAC,QAAA,MAAM;;YAEN,OAAO;SACR;AAED,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;KAC1B;IAED,OAAO,GAAA;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,cAAc,CAAC,KAAK,GAAG,IAAI,EAAA;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;KACpD;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAEO,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAC9D,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,CACrB,CAAC;AAEF,YAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACrF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;iBAAM;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,CAClF,CAAC;aACH;SACF;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE;AACjF,YAAA,mBAAmB,EAAE,OAAO;AAC7B,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3B,MAAM,gBAAgB,GAA8B,EAAE,CAAC;AAEvD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;AAC7C,qBAAC,gBAAgB,CAAC,gBAAgB,GAAG,IAAI;AACzC,qBAAC,gBAAgB,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;aAC/C;YAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACvF;YAED,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CACxD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,EAClB,gBAAgB,CACjB,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,OAAO;aACR;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;gBAAS;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7B;KACF;AAEO,IAAA,MAAM,YAAY,GAAA;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC3C;IAEO,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,gCAAgC;AAClC,aAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;aAC5B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,YAAY,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACvE;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;iBAAM;AACL,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC;AACH,SAAC,CAAC,CAAC;KACN;IAEO,yBAAyB,GAAA;AAC/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;AACD,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAC9C,IACE,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,QAAQ,CAC3F,OAAO,CACR,EACD;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,WAAW,EAAE,EAAE,CAAC;SACxC;KACF;+GA3NU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA9B,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAb,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,qCAFf,CAAC,gCAAgC,CAAC,EAOlC,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,8BAA8B,gDCzC3C,mnHA+HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA9B,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD3Fa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,YAAY,EAAA,SAAA,EAEX,CAAC,gCAAgC,CAAC,EAAA,QAAA,EAAA,mnHAAA,EAAA,CAAA;+SAQ7C,6BAA6B,EAAA,CAAA;sBAD5B,SAAS;uBAAC,8BAA8B,CAAA;;;AE5BrC,SAAU,oBAAoB,CAAC,QAAuB,EAAA;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK;QAC9B,OAAO;AACP,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,UAAU,EAAE,QAAQ;AACrB,KAAA,CAAC,CAAC,CAAC;AACN,CAAC;AAEK,SAAU,yBAAyB,CAAC,OAAoB,EAAA;IAC5D,OAAO;AACL,QAAA;AACE,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,SAAS,EAAE,mBAAmB;AAC/B,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,SAAS,EAAE,qBAAqB;YAChC,WAAW,EAAE,CAAC,iBAAiB,CAAC;AAChC,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;AAClC,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,kBAAkB;AACzB,aAAA;AACF,SAAA;KACqC,CAAC;AAC3C;;ACDA,MAAM,mBAAmB,GAAuB;AAC9C,IAAA,MAAM,EAAE,IAAI;CACb,CAAC;MAiDW,YAAY,CAAA;AACvB,IAAA,OAAO,MAAM,CAAC,MAAA,GAA6B,EAAE,EAAA;QAC3C,MAAM,YAAY,GAAuB,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/E,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,gCAAgC,CAAC,GAAG,EAAE,CAAC;AAClE,gBAAA,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC;AAC7C,gBAAA,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7B,gBAAA;AACE,oBAAA,OAAO,EAAE,oBAAoB;AAC7B,oBAAA,QAAQ,EAAE,YAAY;AACvB,iBAAA;AACF,aAAA;SACF,CAAC;KACH;+GAfU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,iBA7CrB,qBAAqB;YACrB,kBAAkB;YAClB,eAAe;YACf,0BAA0B;YAC1B,qBAAqB;YACrB,mBAAmB;YACnB,8BAA8B;YAC9B,mBAAmB;YACnB,qBAAqB;YACrB,uBAAuB;YACvB,wBAAwB;YACxB,sBAAsB;YACtB,mBAAmB;YACnB,yBAAyB;AACzB,YAAA,yBAAyB,aAazB,UAAU;YACV,gBAAgB;YAChB,YAAY;YACZ,UAAU;YACV,YAAY;AACZ,YAAA,aAAa,sBAEb,eAAe;YACf,YAAY;YACZ,wBAAwB;YACxB,YAAY;YACZ,sBAAsB;YACtB,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;AACtB,YAAA,uBAAuB,aA1Bf,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA,EAAA;AA6BrF,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EA5BZ,SAAA,EAAA;YACT,QAAQ;YACR,aAAa;YACb,gBAAgB;AAChB,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAEC,UAAU;YACV,gBAAgB;YAChB,YAAY;YACZ,UAAU;YACV,YAAY;YACZ,aAAa;YACb,aAAa,CAAC,OAAO,EAAE;YACvB,eAAe;YACf,YAAY;YACZ,wBAAwB;YACxB,YAAY;YAIZ,sBAAsB;YACtB,uBAAuB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAGd,YAAY,EAAA,UAAA,EAAA,CAAA;kBA/CxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,kBAAkB;wBAClB,eAAe;wBACf,0BAA0B;wBAC1B,qBAAqB;wBACrB,mBAAmB;wBACnB,8BAA8B;wBAC9B,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,wBAAwB;wBACxB,sBAAsB;wBACtB,mBAAmB;wBACnB,yBAAyB;wBACzB,yBAAyB;AAC1B,qBAAA;oBACD,OAAO,EAAE,CAAC,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,CAAC;AACjG,oBAAA,SAAS,EAAE;wBACT,QAAQ;wBACR,aAAa;wBACb,gBAAgB;AAChB,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,mBAAmB;AAC9B,yBAAA;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,gBAAgB;wBAChB,YAAY;wBACZ,UAAU;wBACV,YAAY;wBACZ,aAAa;wBACb,aAAa,CAAC,OAAO,EAAE;wBACvB,eAAe;wBACf,YAAY;wBACZ,wBAAwB;wBACxB,YAAY;wBACZ,sBAAsB;wBACtB,sBAAsB;wBACtB,uBAAuB;wBACvB,sBAAsB;wBACtB,uBAAuB;AACxB,qBAAA;AACF,iBAAA,CAAA;;;AC1FD;;AAEG;;;;"}