{"version":3,"file":"sdcorejs-angular-services-task.mjs","sources":["../../../projects/sdcorejs-angular/services/task/src/task.model.ts","../../../projects/sdcorejs-angular/services/task/src/task.tokens.ts","../../../projects/sdcorejs-angular/services/task/src/task.service.ts","../../../projects/sdcorejs-angular/services/task/sdcorejs-angular-services-task.ts"],"sourcesContent":["import { Signal } from '@angular/core';\n\nexport type SdTaskMaybeAsync<T> = T | PromiseLike<T>;\nexport type SdTaskStatus = 'idle' | 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';\nexport type SdTaskConnectionState = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed' | 'error';\n\nexport interface SdTaskState<TResult = unknown> {\n  readonly id: string;\n  readonly status: SdTaskStatus;\n  readonly progress?: number;\n  readonly title?: string;\n  readonly message?: string;\n  readonly error?: unknown;\n  readonly result?: TResult;\n  readonly updatedAt?: number | Date;\n}\n\nexport interface SdTaskRetryPolicy {\n  readonly maxAttempts?: number;\n  readonly initialDelayMs?: number;\n  readonly backoff?: number;\n  readonly maxDelayMs?: number;\n  readonly jitter?: number;\n}\n\nexport interface SdTaskLoadContext<TResult = unknown> {\n  readonly id: string;\n  readonly signal: AbortSignal;\n  readonly attempt: number;\n  readonly state: SdTaskState<TResult>;\n}\n\nexport interface SdTaskActionContext<TResult = unknown> {\n  readonly id: string;\n  readonly state: SdTaskState<TResult>;\n}\n\nexport type SdTaskCancelResult<TResult = unknown> = void | boolean | SdTaskState<TResult>;\nexport type SdTaskCancelHandler<TResult = unknown> = (\n  context: SdTaskActionContext<TResult>\n) => SdTaskMaybeAsync<SdTaskCancelResult<TResult>>;\n\ninterface SdTaskSourceBase<TResult> {\n  readonly cancel?: SdTaskCancelHandler<TResult>;\n}\n\nexport interface SdTaskManualSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n  readonly mode: 'manual';\n}\n\nexport interface SdTaskPollingSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n  readonly mode: 'poll';\n  readonly load: (context: SdTaskLoadContext<TResult>) => SdTaskMaybeAsync<SdTaskState<TResult>>;\n  readonly intervalMs?: number;\n  readonly retry?: SdTaskRetryPolicy;\n}\n\nexport interface SdTaskSseSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n  readonly mode: 'sse';\n  readonly url: string | (() => string);\n  readonly eventSourceInit?: EventSourceInit;\n  readonly parse?: (event: MessageEvent<string>) => SdTaskMaybeAsync<SdTaskState<TResult>>;\n  readonly retry?: SdTaskRetryPolicy;\n}\n\nexport type SdTaskSource<TResult = unknown> = SdTaskManualSource<TResult> | SdTaskPollingSource<TResult> | SdTaskSseSource<TResult>;\n\nexport interface SdTaskWatchOptions<TResult = unknown> {\n  readonly id: string;\n  readonly initialState?: SdTaskState<TResult>;\n  readonly source: SdTaskSource<TResult>;\n}\n\nexport interface SdTaskView<TResult = unknown> {\n  readonly id: string;\n  readonly state: Signal<SdTaskState<TResult>>;\n  readonly connection: Signal<SdTaskConnectionState>;\n  readonly error: Signal<unknown | null>;\n  readonly subscriberCount: Signal<number>;\n  readonly canCancel: Signal<boolean>;\n  readonly canRetry: Signal<boolean>;\n  cancel(): Promise<boolean>;\n  retry(): void;\n}\n\nexport interface SdTaskSubscription<TResult = unknown> extends SdTaskView<TResult> {\n  readonly destroyed: Signal<boolean>;\n  destroy(): void;\n}\n\nexport function isSdTaskTerminal(status: SdTaskStatus): boolean {\n  return status === 'succeeded' || status === 'failed' || status === 'cancelled';\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport interface SdTaskEventSource {\n  onopen: ((event: Event) => void) | null;\n  onmessage: ((event: MessageEvent<string>) => void) | null;\n  onerror: ((event: Event) => void) | null;\n  close(): void;\n}\n\nexport interface SdTaskEventSourceFactory {\n  create(url: string, init?: EventSourceInit): SdTaskEventSource;\n}\n\nexport const SD_TASK_EVENT_SOURCE_FACTORY = new InjectionToken<SdTaskEventSourceFactory | null>('SD_TASK_EVENT_SOURCE_FACTORY', {\n  factory: () => {\n    const windowRef = inject(DOCUMENT).defaultView;\n    if (!windowRef?.EventSource) return null;\n    return {\n      create: (url: string, init?: EventSourceInit): SdTaskEventSource => new windowRef.EventSource(url, init),\n    };\n  },\n});\n\nexport const SD_TASK_RANDOM = new InjectionToken<() => number>('SD_TASK_RANDOM', {\n  factory: () => Math.random,\n});\n","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n  SdTaskConnectionState,\n  SdTaskRetryPolicy,\n  SdTaskSource,\n  SdTaskState,\n  SdTaskSubscription,\n  SdTaskView,\n  SdTaskWatchOptions,\n  isSdTaskTerminal,\n} from './task.model';\nimport { SD_TASK_EVENT_SOURCE_FACTORY, SD_TASK_RANDOM, SdTaskEventSource } from './task.tokens';\n\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_RETRY_POLICY: Required<SdTaskRetryPolicy> = {\n  maxAttempts: 3,\n  initialDelayMs: 1000,\n  backoff: 2,\n  maxDelayMs: 30_000,\n  jitter: 0.2,\n};\nconst MAX_TIMER_MS = 2_147_483_647;\n\ninterface TaskEntry<TResult = unknown> {\n  readonly id: string;\n  readonly source: SdTaskSource<TResult>;\n  readonly stateSignal: ReturnType<typeof signal<SdTaskState<TResult>>>;\n  readonly connectionSignal: ReturnType<typeof signal<SdTaskConnectionState>>;\n  readonly errorSignal: ReturnType<typeof signal<unknown | null>>;\n  readonly subscriberCountSignal: ReturnType<typeof signal<number>>;\n  readonly view: SdTaskView<TResult>;\n  timer?: ReturnType<typeof setTimeout>;\n  controller?: AbortController;\n  eventSource?: SdTaskEventSource;\n  pendingCancel?: Promise<boolean>;\n  readonly pendingCancelSignal: ReturnType<typeof signal<boolean>>;\n  messageQueue: Promise<void>;\n  generation: number;\n  failures: number;\n  requestAttempt: number;\n  destroyed: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SdTaskService {\n  readonly #eventSourceFactory = inject(SD_TASK_EVENT_SOURCE_FACTORY);\n  readonly #random = inject(SD_TASK_RANDOM);\n  readonly #destroyRef = inject(DestroyRef);\n  readonly #entries = signal<ReadonlyMap<string, TaskEntry>>(new Map());\n\n  readonly tasks = computed(() => [...this.#entries().values()].map(entry => entry.view));\n\n  constructor() {\n    this.#destroyRef.onDestroy(() => {\n      for (const entry of this.#entries().values()) {\n        entry.destroyed = true;\n        this.#stop(entry);\n      }\n      this.#entries.set(new Map());\n    });\n  }\n\n  watch<TResult = unknown>(options: SdTaskWatchOptions<TResult>): SdTaskSubscription<TResult> {\n    const existing = this.#entries().get(options.id) as TaskEntry<TResult> | undefined;\n    if (existing) {\n      existing.subscriberCountSignal.update(count => count + 1);\n      return this.#createLease(existing);\n    }\n\n    const initialState = normalizeState(options.id, options.initialState ?? { id: options.id, status: 'queued' });\n    const stateSignal = signal(initialState);\n    const connectionSignal = signal<SdTaskConnectionState>(options.source.mode === 'manual' ? 'idle' : 'connecting');\n    const errorSignal = signal<unknown | null>(null);\n    const subscriberCountSignal = signal(1);\n    const pendingCancelSignal = signal(false);\n    const entry = {} as TaskEntry<TResult>;\n    const view: SdTaskView<TResult> = {\n      id: options.id,\n      state: stateSignal.asReadonly(),\n      connection: connectionSignal.asReadonly(),\n      error: errorSignal.asReadonly(),\n      subscriberCount: subscriberCountSignal.asReadonly(),\n      canCancel: computed(() => {\n        const status = stateSignal().status;\n        return !pendingCancelSignal() && (status === 'queued' || status === 'running');\n      }),\n      canRetry: computed(() => {\n        const status = stateSignal().status;\n        return connectionSignal() === 'error' || status === 'failed' || status === 'cancelled';\n      }),\n      cancel: () => this.#cancel(entry),\n      retry: () => this.#retry(entry),\n    };\n    Object.assign(entry, {\n      id: options.id,\n      source: options.source,\n      stateSignal,\n      connectionSignal,\n      errorSignal,\n      subscriberCountSignal,\n      pendingCancelSignal,\n      view,\n      messageQueue: Promise.resolve(),\n      generation: 0,\n      failures: 0,\n      requestAttempt: 0,\n      destroyed: false,\n    });\n    this.#entries.update(entries => new Map(entries).set(options.id, entry as unknown as TaskEntry));\n\n    if (!isSdTaskTerminal(initialState.status)) this.#start(entry);\n    else connectionSignal.set('closed');\n    return this.#createLease(entry);\n  }\n\n  get<TResult = unknown>(id: string): SdTaskView<TResult> | undefined {\n    return this.#entries().get(id)?.view as SdTaskView<TResult> | undefined;\n  }\n\n  update<TResult = unknown>(id: string, patch: Partial<Omit<SdTaskState<TResult>, 'id'>>): boolean {\n    const entry = this.#entries().get(id) as TaskEntry<TResult> | undefined;\n    if (!entry) return false;\n    this.#applyState(entry, { ...entry.stateSignal(), ...patch, id });\n    return true;\n  }\n\n  cancel(id: string): Promise<boolean> {\n    const entry = this.#entries().get(id);\n    return entry ? this.#cancel(entry) : Promise.resolve(false);\n  }\n\n  retry(id: string): boolean {\n    const entry = this.#entries().get(id);\n    if (!entry) return false;\n    this.#retry(entry);\n    return true;\n  }\n\n  #createLease<TResult>(entry: TaskEntry<TResult>): SdTaskSubscription<TResult> {\n    const destroyed = signal(false);\n    return {\n      ...entry.view,\n      destroyed: destroyed.asReadonly(),\n      destroy: () => {\n        if (destroyed()) return;\n        destroyed.set(true);\n        entry.subscriberCountSignal.update(count => Math.max(0, count - 1));\n        if (entry.subscriberCountSignal() > 0) return;\n        entry.destroyed = true;\n        this.#stop(entry);\n        this.#entries.update(entries => {\n          if (entries.get(entry.id) !== entry) return entries;\n          const next = new Map(entries);\n          next.delete(entry.id);\n          return next;\n        });\n      },\n    };\n  }\n\n  #start<TResult>(entry: TaskEntry<TResult>): void {\n    if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status)) return;\n    this.#stop(entry);\n    entry.destroyed = false;\n    entry.failures = 0;\n    entry.requestAttempt = 0;\n    entry.errorSignal.set(null);\n    const generation = entry.generation;\n\n    if (entry.source.mode === 'manual') {\n      entry.connectionSignal.set('idle');\n      return;\n    }\n    entry.connectionSignal.set('connecting');\n    if (entry.source.mode === 'poll') void this.#runPoll(entry, generation);\n    else this.#openSse(entry, generation);\n  }\n\n  #stop<TResult>(entry: TaskEntry<TResult>): void {\n    entry.generation += 1;\n    if (entry.timer) clearTimeout(entry.timer);\n    entry.timer = undefined;\n    entry.controller?.abort();\n    entry.controller = undefined;\n    entry.eventSource?.close();\n    entry.eventSource = undefined;\n  }\n\n  async #runPoll<TResult>(entry: TaskEntry<TResult>, generation: number): Promise<void> {\n    if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'poll') return;\n    const controller = new AbortController();\n    entry.controller = controller;\n    const attempt = ++entry.requestAttempt;\n\n    try {\n      const state = await Promise.resolve(\n        entry.source.load({ id: entry.id, signal: controller.signal, attempt, state: entry.stateSignal() })\n      );\n      if (!this.#isCurrent(entry, generation) || controller.signal.aborted) return;\n      entry.controller = undefined;\n      entry.failures = 0;\n      entry.errorSignal.set(null);\n      entry.connectionSignal.set('open');\n      this.#applyState(entry, state);\n      if (!this.#isCurrent(entry, generation) || isSdTaskTerminal(entry.stateSignal().status)) return;\n      this.#schedule(entry, normalizeTimer(entry.source.intervalMs, DEFAULT_POLL_INTERVAL_MS), () => this.#runPoll(entry, generation));\n    } catch (error) {\n      if (!this.#isCurrent(entry, generation) || controller.signal.aborted) return;\n      entry.controller = undefined;\n      this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#runPoll(entry, generation));\n    }\n  }\n\n  #openSse<TResult>(entry: TaskEntry<TResult>, generation: number): void {\n    if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'sse') return;\n    if (!this.#eventSourceFactory) {\n      entry.connectionSignal.set('error');\n      entry.errorSignal.set(new Error('EventSource is unavailable in this environment.'));\n      return;\n    }\n\n    let eventSource: SdTaskEventSource;\n    try {\n      const url = typeof entry.source.url === 'function' ? entry.source.url() : entry.source.url;\n      eventSource = this.#eventSourceFactory.create(url, entry.source.eventSourceInit);\n    } catch (error) {\n      this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));\n      return;\n    }\n    entry.eventSource = eventSource;\n\n    eventSource.onopen = () => {\n      if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n      entry.failures = 0;\n      entry.errorSignal.set(null);\n      entry.connectionSignal.set('open');\n    };\n    eventSource.onmessage = event => {\n      entry.messageQueue = entry.messageQueue.then(() => this.#handleSseMessage(entry, generation, eventSource, event));\n    };\n    eventSource.onerror = event => {\n      if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n      eventSource.close();\n      entry.eventSource = undefined;\n      this.#handleConnectionFailure(entry, generation, event, entry.source.mode === 'sse' ? entry.source.retry : undefined, () =>\n        this.#openSse(entry, generation)\n      );\n    };\n  }\n\n  async #handleSseMessage<TResult>(\n    entry: TaskEntry<TResult>,\n    generation: number,\n    eventSource: SdTaskEventSource,\n    event: MessageEvent<string>\n  ): Promise<void> {\n    if (!this.#isCurrentEventSource(entry, generation, eventSource) || entry.source.mode !== 'sse') return;\n    try {\n      const state = entry.source.parse\n        ? await Promise.resolve(entry.source.parse(event))\n        : (JSON.parse(event.data) as SdTaskState<TResult>);\n      if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n      entry.errorSignal.set(null);\n      this.#applyState(entry, state);\n    } catch (error) {\n      if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n      eventSource.close();\n      entry.eventSource = undefined;\n      this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));\n    }\n  }\n\n  #handleConnectionFailure<TResult>(\n    entry: TaskEntry<TResult>,\n    generation: number,\n    error: unknown,\n    policy: SdTaskRetryPolicy | undefined,\n    retry: () => void | Promise<void>\n  ): void {\n    if (!this.#isCurrent(entry, generation)) return;\n    entry.failures += 1;\n    entry.errorSignal.set(error);\n    const normalized = normalizeRetryPolicy(policy);\n    if (entry.failures > normalized.maxAttempts) {\n      entry.connectionSignal.set('error');\n      return;\n    }\n    entry.connectionSignal.set('reconnecting');\n    this.#schedule(entry, this.#retryDelay(normalized, entry.failures), retry);\n  }\n\n  #retryDelay(policy: Required<SdTaskRetryPolicy>, failure: number): number {\n    const exponential = Math.min(policy.maxDelayMs, policy.initialDelayMs * Math.pow(policy.backoff, failure - 1));\n    const jitter = exponential * policy.jitter * (this.#random() * 2 - 1);\n    return Math.max(0, Math.min(policy.maxDelayMs, Math.round(exponential + jitter)));\n  }\n\n  #schedule<TResult>(entry: TaskEntry<TResult>, delayMs: number, callback: () => void | Promise<void>): void {\n    if (entry.timer) clearTimeout(entry.timer);\n    entry.timer = setTimeout(\n      () => {\n        entry.timer = undefined;\n        void callback();\n      },\n      normalizeTimer(delayMs, 0)\n    );\n  }\n\n  #applyState<TResult>(entry: TaskEntry<TResult>, state: SdTaskState<TResult>): void {\n    const normalized = normalizeState(entry.id, state);\n    entry.stateSignal.set(normalized);\n    if (!isSdTaskTerminal(normalized.status)) return;\n    this.#stop(entry);\n    entry.connectionSignal.set('closed');\n  }\n\n  #cancel<TResult>(entry: TaskEntry<TResult>): Promise<boolean> {\n    if (entry.pendingCancel) return entry.pendingCancel;\n    if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status)) {\n      return Promise.resolve(false);\n    }\n\n    const generation = entry.generation;\n    entry.pendingCancelSignal.set(true);\n    let actionResult: ReturnType<NonNullable<typeof entry.source.cancel>> | undefined;\n    try {\n      actionResult = entry.source.cancel?.({ id: entry.id, state: entry.stateSignal() });\n    } catch (error) {\n      entry.pendingCancelSignal.set(false);\n      entry.errorSignal.set(error);\n      return Promise.resolve(false);\n    }\n\n    const pending = Promise.resolve(actionResult)\n      .then(result => {\n        if (result === false) return false;\n        if (!this.#isCurrent(entry, generation)) return true;\n        if (result && typeof result === 'object') this.#applyState(entry, result);\n        else this.#applyState(entry, { ...entry.stateSignal(), id: entry.id, status: 'cancelled' });\n        return true;\n      })\n      .catch((error: unknown) => {\n        if (this.#isCurrent(entry, generation)) entry.errorSignal.set(error);\n        return false;\n      })\n      .finally(() => {\n        if (entry.pendingCancel === pending) {\n          entry.pendingCancel = undefined;\n          entry.pendingCancelSignal.set(false);\n        }\n      });\n    entry.pendingCancel = pending;\n    return pending;\n  }\n\n  #retry<TResult>(entry: TaskEntry<TResult>): void {\n    if (entry.destroyed || entry.subscriberCountSignal() === 0 || entry.stateSignal().status === 'succeeded') return;\n    const status = entry.stateSignal().status;\n    if (entry.connectionSignal() !== 'error' && status !== 'failed' && status !== 'cancelled') return;\n    if (status === 'failed' || status === 'cancelled') {\n      entry.stateSignal.set({ ...entry.stateSignal(), status: 'queued', progress: undefined, error: undefined });\n    }\n    this.#start(entry);\n  }\n\n  #isCurrent<TResult>(entry: TaskEntry<TResult>, generation: number): boolean {\n    return !entry.destroyed && entry.subscriberCountSignal() > 0 && entry.generation === generation;\n  }\n\n  #isCurrentEventSource<TResult>(entry: TaskEntry<TResult>, generation: number, eventSource: SdTaskEventSource): boolean {\n    return this.#isCurrent(entry, generation) && entry.eventSource === eventSource;\n  }\n}\n\nfunction normalizeState<TResult>(id: string, state: SdTaskState<TResult>): SdTaskState<TResult> {\n  const progress = state.progress;\n  return {\n    ...state,\n    id,\n    progress: progress === undefined || !Number.isFinite(progress) ? undefined : Math.max(0, Math.min(100, progress)),\n  };\n}\n\nfunction normalizeRetryPolicy(policy: SdTaskRetryPolicy | undefined): Required<SdTaskRetryPolicy> {\n  return {\n    maxAttempts: normalizeInteger(policy?.maxAttempts, DEFAULT_RETRY_POLICY.maxAttempts, 0, 100),\n    initialDelayMs: normalizeTimer(policy?.initialDelayMs, DEFAULT_RETRY_POLICY.initialDelayMs),\n    backoff: normalizeNumber(policy?.backoff, DEFAULT_RETRY_POLICY.backoff, 1, 100),\n    maxDelayMs: normalizeTimer(policy?.maxDelayMs, DEFAULT_RETRY_POLICY.maxDelayMs),\n    jitter: normalizeNumber(policy?.jitter, DEFAULT_RETRY_POLICY.jitter, 0, 1),\n  };\n}\n\nfunction normalizeTimer(value: number | undefined, fallback: number): number {\n  return normalizeInteger(value, fallback, 0, MAX_TIMER_MS);\n}\n\nfunction normalizeInteger(value: number | undefined, fallback: number, min: number, max: number): number {\n  return Math.round(normalizeNumber(value, fallback, min, max));\n}\n\nfunction normalizeNumber(value: number | undefined, fallback: number, min: number, max: number): number {\n  const normalized = typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n  return Math.max(min, Math.min(max, normalized));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AA0FM,SAAU,gBAAgB,CAAC,MAAoB,EAAA;IACnD,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;AAChF;;MC9Ea,4BAA4B,GAAG,IAAI,cAAc,CAAkC,8BAA8B,EAAE;IAC9H,OAAO,EAAE,MAAK;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW;QAC9C,IAAI,CAAC,SAAS,EAAE,WAAW;AAAE,YAAA,OAAO,IAAI;QACxC,OAAO;AACL,YAAA,MAAM,EAAE,CAAC,GAAW,EAAE,IAAsB,KAAwB,IAAI,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;SACzG;IACH,CAAC;AACF,CAAA;MAEY,cAAc,GAAG,IAAI,cAAc,CAAe,gBAAgB,EAAE;AAC/E,IAAA,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM;AAC3B,CAAA;;ACbD,MAAM,wBAAwB,GAAG,IAAI;AACrC,MAAM,oBAAoB,GAAgC;AACxD,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,GAAG;CACZ;AACD,MAAM,YAAY,GAAG,aAAa;MAuBrB,aAAa,CAAA;AACf,IAAA,mBAAmB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAC1D,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAiC,IAAI,GAAG,EAAE,oDAAC;AAE5D,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEvF,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AAC5C,gBAAA,KAAK,CAAC,SAAS,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACnB;YACA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,KAAK,CAAoB,OAAoC,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAmC;QAClF,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;AACzD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QACpC;QAEA,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC7G,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,uDAAC;QACxC,MAAM,gBAAgB,GAAG,MAAM,CAAwB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,GAAG,MAAM,GAAG,YAAY,4DAAC;AAChH,QAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,uDAAC;AAChD,QAAA,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,iEAAC;AACvC,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;QACzC,MAAM,KAAK,GAAG,EAAwB;AACtC,QAAA,MAAM,IAAI,GAAwB;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;AACd,YAAA,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE;AAC/B,YAAA,UAAU,EAAE,gBAAgB,CAAC,UAAU,EAAE;AACzC,YAAA,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE;AAC/B,YAAA,eAAe,EAAE,qBAAqB,CAAC,UAAU,EAAE;AACnD,YAAA,SAAS,EAAE,QAAQ,CAAC,MAAK;AACvB,gBAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM;AACnC,gBAAA,OAAO,CAAC,mBAAmB,EAAE,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AAChF,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAK;AACtB,gBAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM;AACnC,gBAAA,OAAO,gBAAgB,EAAE,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;AACxF,YAAA,CAAC,CAAC;YACF,MAAM,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjC,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SAChC;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YACnB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW;YACX,gBAAgB;YAChB,WAAW;YACX,qBAAqB;YACrB,mBAAmB;YACnB,IAAI;AACJ,YAAA,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE;AAC/B,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,KAA6B,CAAC,CAAC;AAEhG,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AACzD,YAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC;AAEA,IAAA,GAAG,CAAoB,EAAU,EAAA;QAC/B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAuC;IACzE;IAEA,MAAM,CAAoB,EAAU,EAAE,KAAgD,EAAA;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAmC;AACvE,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACrC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7D;AAEA,IAAA,KAAK,CAAC,EAAU,EAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAClB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,YAAY,CAAU,KAAyB,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;QAC/B,OAAO;YACL,GAAG,KAAK,CAAC,IAAI;AACb,YAAA,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE;YACjC,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,SAAS,EAAE;oBAAE;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnB,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AACnE,gBAAA,IAAI,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC;oBAAE;AACvC,gBAAA,KAAK,CAAC,SAAS,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;oBAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK;AAAE,wBAAA,OAAO,OAAO;AACnD,oBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACrB,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;YACJ,CAAC;SACF;IACH;AAEA,IAAA,MAAM,CAAU,KAAyB,EAAA;AACvC,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;YAAE;AAC5G,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjB,QAAA,KAAK,CAAC,SAAS,GAAG,KAAK;AACvB,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC;AAClB,QAAA,KAAK,CAAC,cAAc,GAAG,CAAC;AACxB,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,YAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC;QACF;AACA,QAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IACvC;AAEA,IAAA,KAAK,CAAU,KAAyB,EAAA;AACtC,QAAA,KAAK,CAAC,UAAU,IAAI,CAAC;QACrB,IAAI,KAAK,CAAC,KAAK;AAAE,YAAA,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1C,QAAA,KAAK,CAAC,KAAK,GAAG,SAAS;AACvB,QAAA,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,UAAU,GAAG,SAAS;AAC5B,QAAA,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;AAC1B,QAAA,KAAK,CAAC,WAAW,GAAG,SAAS;IAC/B;AAEA,IAAA,MAAM,QAAQ,CAAU,KAAyB,EAAE,UAAkB,EAAA;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YAAE;AACzE,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,QAAA,KAAK,CAAC,UAAU,GAAG,UAAU;AAC7B,QAAA,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,cAAc;AAEtC,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CACjC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CACpG;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE;AACtE,YAAA,KAAK,CAAC,UAAU,GAAG,SAAS;AAC5B,YAAA,KAAK,CAAC,QAAQ,GAAG,CAAC;AAClB,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;gBAAE;AACzF,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAClI;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE;AACtE,YAAA,KAAK,CAAC,UAAU,GAAG,SAAS;YAC5B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrH;IACF;IAEA,QAAQ,CAAU,KAAyB,EAAE,UAAkB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;YAAE;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;YACnC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACnF;QACF;AAEA,QAAA,IAAI,WAA8B;AAClC,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG;AAC1F,YAAA,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;QAClF;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnH;QACF;AACA,QAAA,KAAK,CAAC,WAAW,GAAG,WAAW;AAE/B,QAAA,WAAW,CAAC,MAAM,GAAG,MAAK;YACxB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;gBAAE;AACjE,YAAA,KAAK,CAAC,QAAQ,GAAG,CAAC;AAClB,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,QAAA,CAAC;AACD,QAAA,WAAW,CAAC,SAAS,GAAG,KAAK,IAAG;YAC9B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACnH,QAAA,CAAC;AACD,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK,IAAG;YAC5B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;gBAAE;YACjE,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,EAAE,MACpH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CACjC;AACH,QAAA,CAAC;IACH;IAEA,MAAM,iBAAiB,CACrB,KAAyB,EACzB,UAAkB,EAClB,WAA8B,EAC9B,KAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;YAAE;AAChG,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,kBAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;kBAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAA0B;YACpD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;gBAAE;AACjE,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QAChC;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;gBAAE;YACjE,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,KAAK,CAAC,WAAW,GAAG,SAAS;YAC7B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrH;IACF;IAEA,wBAAwB,CACtB,KAAyB,EACzB,UAAkB,EAClB,KAAc,EACd,MAAqC,EACrC,KAAiC,EAAA;QAEjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;YAAE;AACzC,QAAA,KAAK,CAAC,QAAQ,IAAI,CAAC;AACnB,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC;QAC/C,IAAI,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE;AAC3C,YAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;YACnC;QACF;AACA,QAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC5E;IAEA,WAAW,CAAC,MAAmC,EAAE,OAAe,EAAA;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAC9G,QAAA,MAAM,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;IACnF;AAEA,IAAA,SAAS,CAAU,KAAyB,EAAE,OAAe,EAAE,QAAoC,EAAA;QACjG,IAAI,KAAK,CAAC,KAAK;AAAE,YAAA,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1C,QAAA,KAAK,CAAC,KAAK,GAAG,UAAU,CACtB,MAAK;AACH,YAAA,KAAK,CAAC,KAAK,GAAG,SAAS;YACvB,KAAK,QAAQ,EAAE;QACjB,CAAC,EACD,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAC3B;IACH;IAEA,WAAW,CAAU,KAAyB,EAAE,KAA2B,EAAA;QACzE,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;AAClD,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE;AAC1C,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjB,QAAA,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC;AAEA,IAAA,OAAO,CAAU,KAAyB,EAAA;QACxC,IAAI,KAAK,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC,aAAa;QACnD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;AAC1G,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B;AAEA,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;AACnC,QAAA,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,YAA6E;AACjF,QAAA,IAAI;YACF,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACpF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B;AAEA,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY;aACzC,IAAI,CAAC,MAAM,IAAG;YACb,IAAI,MAAM,KAAK,KAAK;AAAE,gBAAA,OAAO,KAAK;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;AAAE,gBAAA,OAAO,IAAI;AACpD,YAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;;gBACpE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC3F,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;AACxB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;AAAE,gBAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACpE,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;aACA,OAAO,CAAC,MAAK;AACZ,YAAA,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;AACnC,gBAAA,KAAK,CAAC,aAAa,GAAG,SAAS;AAC/B,gBAAA,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;AACJ,QAAA,KAAK,CAAC,aAAa,GAAG,OAAO;AAC7B,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,CAAU,KAAyB,EAAA;AACvC,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,WAAW;YAAE;QAC1G,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM;AACzC,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;YAAE;QAC3F,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,EAAE;YACjD,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC5G;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;IAEA,UAAU,CAAU,KAAyB,EAAE,UAAkB,EAAA;AAC/D,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU;IACjG;AAEA,IAAA,qBAAqB,CAAU,KAAyB,EAAE,UAAkB,EAAE,WAA8B,EAAA;AAC1G,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW;IAChF;wGAvUW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA2UlC,SAAS,cAAc,CAAU,EAAU,EAAE,KAA2B,EAAA;AACtE,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC/B,OAAO;AACL,QAAA,GAAG,KAAK;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KAClH;AACH;AAEA,SAAS,oBAAoB,CAAC,MAAqC,EAAA;IACjE,OAAO;AACL,QAAA,WAAW,EAAE,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC;QAC5F,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,oBAAoB,CAAC,cAAc,CAAC;AAC3F,QAAA,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC;QAC/E,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,UAAU,CAAC;AAC/E,QAAA,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3E;AACH;AAEA,SAAS,cAAc,CAAC,KAAyB,EAAE,QAAgB,EAAA;IACjE,OAAO,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC;AAC3D;AAEA,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW,EAAA;AAC7F,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/D;AAEA,SAAS,eAAe,CAAC,KAAyB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW,EAAA;IAC5F,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ;AACzF,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjD;;ACpZA;;AAEG;;;;"}