{"version":3,"file":"ngneat-reactive-forms.mjs","sources":["../../../../libs/reactive-forms/src/lib/core.ts","../../../../libs/reactive-forms/src/lib/form-group.ts","../../../../libs/reactive-forms/src/lib/form-control.ts","../../../../libs/reactive-forms/src/lib/form-array.ts","../../../../libs/reactive-forms/src/lib/form-builder.ts","../../../../libs/reactive-forms/src/lib/operators/diff.ts","../../../../libs/reactive-forms/src/lib/persist/persist.ts","../../../../libs/reactive-forms/src/lib/control-value.accessor.ts","../../../../libs/reactive-forms/src/ngneat-reactive-forms.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { defer, merge, Observable, of, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport function selectControlValue$<T, R>(\n  control: any,\n  mapFn: (state: T) => R\n): Observable<R> {\n  return (control.value$ as Observable<any>).pipe(\n    map(mapFn),\n    distinctUntilChanged()\n  );\n}\n\nexport function controlValueChanges$<T>(\n  control: AbstractControl & { getRawValue: () => T }\n): Observable<T> {\n  return merge(\n    defer(() => of(control.getRawValue())),\n    control.valueChanges.pipe(map(() => control.getRawValue()))\n  ) as Observable<T>;\n}\n\nexport type ControlState = 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED';\n\nexport function controlStatus$<\n  K extends 'disabled' | 'enabled' | 'invalid' | 'valid' | 'status'\n>(\n  control: AbstractControl,\n  type: K\n): Observable<K extends 'status' ? ControlState : boolean> {\n  return merge(\n    defer(() => of(control[type])),\n    control.statusChanges.pipe(\n      map(() => control[type]),\n      distinctUntilChanged()\n    )\n  ) as Observable<any>;\n}\n\nexport function enableControl(\n  control: AbstractControl,\n  enabled: boolean,\n  opts?: any\n) {\n  if (enabled) {\n    control.enable(opts);\n  } else {\n    control.disable(opts);\n  }\n}\n\nexport function disableControl(\n  control: AbstractControl,\n  disabled: boolean,\n  opts?: any\n) {\n  enableControl(control, !disabled, opts);\n}\n\nexport function controlDisabledWhile(\n  control: AbstractControl,\n  observable: Observable<boolean>,\n  opts?: any\n): Subscription {\n  return observable.subscribe((isDisabled) =>\n    disableControl(control, isDisabled, opts)\n  );\n}\n\nexport function controlEnabledWhile(\n  control: AbstractControl,\n  observable: Observable<boolean>,\n  opts?: any\n): Subscription {\n  return observable.subscribe((isEnabled) =>\n    enableControl(control, isEnabled, opts)\n  );\n}\n\nexport function mergeErrors(\n  existing: ValidationErrors | null,\n  toAdd: ValidationErrors | null\n) {\n  if (!existing && !toAdd) {\n    return null;\n  }\n\n  return {\n    ...existing,\n    ...toAdd,\n  };\n}\n\nexport function removeError(errors: ValidationErrors | null, key: string) {\n  if (!errors) {\n    return null;\n  }\n\n  const updatedErrors = {\n    ...errors,\n  };\n\n  delete updatedErrors[key];\n\n  return Object.keys(updatedErrors).length > 0 ? updatedErrors : null;\n}\n\nexport function hasErrorAnd(\n  and: 'touched' | 'dirty',\n  control: AbstractControl,\n  error: string,\n  path?: Parameters<AbstractControl['hasError']>[1]\n): boolean {\n  const hasError = control.hasError(\n    error,\n    !path || path.length === 0 ? undefined : path\n  );\n  return hasError && control[and];\n}\n\nexport function controlErrorChanges$(\n  control: AbstractControl,\n  errors$: Observable<ValidationErrors | null>\n): Observable<ValidationErrors | null> {\n  return merge(\n    defer(() => of(control.errors)),\n    errors$,\n    control.valueChanges.pipe(\n      map(() => control.errors),\n      distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\n    )\n  );\n}\n\nexport function markAllDirty(control: AbstractControl): void {\n  control.markAsDirty({ onlySelf: true });\n\n  (control as any)._forEachChild((control: any) => control.markAllAsDirty?.() || control.markAsDirty({ onlySelf: true }));\n}\n","import {\n  AbstractControl,\n  UntypedFormGroup,\n  ValidationErrors,\n} from '@angular/forms';\nimport { isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport {\n  controlDisabledWhile,\n  controlEnabledWhile,\n  controlErrorChanges$,\n  controlStatus$,\n  controlValueChanges$,\n  disableControl,\n  enableControl,\n  hasErrorAnd,\n  markAllDirty,\n  mergeErrors,\n  removeError,\n  selectControlValue$,\n} from './core';\nimport { DeepPartial, ValuesOf } from './types';\n\nexport class FormGroup<T extends Record<string, any>> extends UntypedFormGroup {\n  readonly value!: ValuesOf<T>;\n  readonly valueChanges!: Observable<ValuesOf<T>>;\n\n  private touchChanges = new Subject<boolean>();\n  private dirtyChanges = new Subject<boolean>();\n  private errorsSubject = new Subject<ValidationErrors | null>();\n\n  readonly touch$ = this.touchChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly dirty$ = this.dirtyChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly value$ = controlValueChanges$<ValuesOf<T>>(this);\n  readonly disabled$ = controlStatus$(this, 'disabled');\n  readonly enabled$ = controlStatus$(this, 'enabled');\n  readonly invalid$ = controlStatus$(this, 'invalid');\n  readonly valid$ = controlStatus$(this, 'valid');\n  readonly status$ = controlStatus$(this, 'status');\n  readonly errors$ = controlErrorChanges$(\n    this,\n    this.errorsSubject.asObservable()\n  );\n\n  constructor(\n    public controls: T,\n    validatorOrOpts?: ConstructorParameters<typeof UntypedFormGroup>[1],\n    asyncValidator?: ConstructorParameters<typeof UntypedFormGroup>[2]\n  ) {\n    super(controls, validatorOrOpts, asyncValidator);\n  }\n\n  select<R>(mapFn: (state: ValuesOf<T>) => R): Observable<R> {\n    return selectControlValue$(this, mapFn);\n  }\n\n  get<\n    K extends keyof ValuesOf<T>,\n    K1 extends keyof ValuesOf<T>[K],\n    K2 extends keyof ValuesOf<T>[K][K1],\n    FirstLevel = GroupPath<T[K], K1 & string>,\n    SecondLevel = GroupPath<FirstLevel, K2 & string>\n  >(keys: [K, K1, K2]): SecondLevel;\n  get<K extends keyof ValuesOf<T>, K1 extends keyof ValuesOf<T>[K]>(\n    keys: [K, K1]\n  ): GroupPath<T[K], K1 & string>;\n\n  get<K extends keyof ValuesOf<T>>(keys: [K]): T[K];\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  get<\n    K extends string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    P = K extends `${infer Key}.${infer Rest}` ? unknown : K\n  >(key: K): unknown extends P ? AbstractControl : T[K];\n  get(key: string | string[]): AbstractControl {\n    return super.get(key) as AbstractControl;\n  }\n\n  setValue(\n    valueOrObservable: Observable<ValuesOf<T>>,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): Subscription;\n  setValue(\n    valueOrObservable: ValuesOf<T>,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): void;\n  setValue(\n    valueOrObservable: any,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.setValue(value as ValuesOf<T>, options)\n      );\n    }\n\n    super.setValue(valueOrObservable, options);\n  }\n\n  patchValue(\n    valueOrObservable: Observable<DeepPartial<ValuesOf<T>>>,\n    options?: Parameters<AbstractControl['patchValue']>[1]\n  ): Subscription;\n  patchValue(\n    valueOrObservable: DeepPartial<ValuesOf<T>>,\n    options?: Parameters<AbstractControl['patchValue']>[1]\n  ): void;\n  patchValue(valueOrObservable: any, options?: any): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.patchValue(value as DeepPartial<ValuesOf<T>>, options)\n      );\n    }\n\n    super.patchValue(valueOrObservable, options);\n  }\n\n  getRawValue(): ValuesOf<T> {\n    return super.getRawValue();\n  }\n\n  markAsTouched(\n    ...opts: Parameters<AbstractControl['markAsTouched']>\n  ): ReturnType<AbstractControl['markAsTouched']> {\n    super.markAsTouched(...opts);\n    this.touchChanges.next(true);\n  }\n\n  markAsUntouched(\n    ...opts: Parameters<AbstractControl['markAsUntouched']>\n  ): ReturnType<AbstractControl['markAsUntouched']> {\n    super.markAsUntouched(...opts);\n    this.touchChanges.next(false);\n  }\n\n  markAsPristine(\n    ...opts: Parameters<AbstractControl['markAsPristine']>\n  ): ReturnType<AbstractControl['markAsPristine']> {\n    super.markAsPristine(...opts);\n    this.dirtyChanges.next(false);\n  }\n\n  markAsDirty(\n    ...opts: Parameters<AbstractControl['markAsDirty']>\n  ): ReturnType<AbstractControl['markAsDirty']> {\n    super.markAsDirty(...opts);\n    this.dirtyChanges.next(true);\n  }\n\n  markAllAsDirty(): void {\n    markAllDirty(this);\n  }\n\n  setEnable(enable = true, opts?: Parameters<AbstractControl['enable']>[0]) {\n    enableControl(this, enable, opts);\n  }\n\n  setDisable(disable = true, opts?: Parameters<AbstractControl['disable']>[0]) {\n    disableControl(this, disable, opts);\n  }\n\n  disabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<AbstractControl['disable']>[0]\n  ) {\n    return controlDisabledWhile(this, observable, options);\n  }\n\n  enabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<AbstractControl['enable']>[0]\n  ) {\n    return controlEnabledWhile(this, observable, options);\n  }\n\n  reset(\n    formState?: ValuesOf<T>,\n    options?: Parameters<AbstractControl['reset']>[1]\n  ): void {\n    super.reset(formState, options);\n  }\n\n  setValidators(\n    newValidators: Parameters<AbstractControl['setValidators']>[0],\n    options?: Parameters<AbstractControl['updateValueAndValidity']>[0]\n  ) {\n    super.setValidators(newValidators);\n    super.updateValueAndValidity(options);\n  }\n\n  setAsyncValidators(\n    newValidator: Parameters<AbstractControl['setAsyncValidators']>[0],\n    options?: Parameters<AbstractControl['updateValueAndValidity']>[0]\n  ) {\n    super.setAsyncValidators(newValidator);\n    super.updateValueAndValidity(options);\n  }\n\n  getError<E>(...params: Parameters<AbstractControl['getError']>): E | null {\n    return super.getError(...params);\n  }\n\n  setErrors(...opts: Parameters<AbstractControl['setErrors']>) {\n    /**\n     * @description\n     * Use an elvis operator to avoid a throw when the control is used with an async validator\n     * Which will be instantly resolved (like with `of(null)`)\n     * In such case, Angular will call this method instantly before even instancing the properties causing the throw\n     * Can be easily reproduced with a step-by-step debug once compiled when checking the stack trace of the constructor\n     *\n     * Issue: https://github.com/ngneat/reactive-forms/issues/91\n     * Reproduction: https://codesandbox.io/embed/github/C0ZEN/ngneat-reactive-forms-error-issue-cs/tree/main/?autoresize=1&expanddevtools=1&fontsize=14&hidenavigation=1&theme=dark\n     */\n    this.errorsSubject?.next(opts[0]);\n    return super.setErrors(...opts);\n  }\n\n  mergeErrors(\n    errors: ValidationErrors | null,\n    opts?: Parameters<AbstractControl['setErrors']>[1]\n  ) {\n    this.setErrors(mergeErrors(this.errors, errors), opts);\n  }\n\n  removeError(\n    key: string,\n    opts?: Parameters<AbstractControl['setErrors']>[1]\n  ): void {\n    this.setErrors(removeError(this.errors, key), opts);\n  }\n\n  hasErrorAndTouched(\n    error: string,\n    path?: Parameters<AbstractControl['hasError']>[1]\n  ): boolean {\n    return hasErrorAnd('touched', this, error, path);\n  }\n\n  hasErrorAndDirty(\n    error: string,\n    path?: Parameters<AbstractControl['hasError']>[1]\n  ): boolean {\n    return hasErrorAnd('dirty', this, error, path);\n  }\n}\n\ntype GroupPath<T, K extends string> = T extends FormGroup<infer U>\n  ? U[K & string]\n  : never;\n","import {\n  UntypedFormControl,\n  AbstractControl,\n  ValidationErrors,\n} from '@angular/forms';\nimport { isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport {\n  controlValueChanges$,\n  controlStatus$,\n  controlDisabledWhile,\n  controlEnabledWhile,\n  disableControl,\n  enableControl,\n  mergeErrors,\n  removeError,\n  hasErrorAnd,\n  controlErrorChanges$,\n} from './core';\nimport { BoxedValue } from './types';\n\nexport class FormControl<T> extends UntypedFormControl {\n  readonly value!: T;\n  readonly valueChanges!: Observable<T>;\n\n  private touchChanges = new Subject<boolean>();\n  private dirtyChanges = new Subject<boolean>();\n  private errorsSubject = new Subject<ValidationErrors | null>();\n\n  readonly touch$ = this.touchChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly dirty$ = this.dirtyChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly value$ = controlValueChanges$<T>(this);\n  readonly disabled$ = controlStatus$(this, 'disabled');\n  readonly enabled$ = controlStatus$(this, 'enabled');\n  readonly invalid$ = controlStatus$(this, 'invalid');\n  readonly valid$ = controlStatus$(this, 'valid');\n  readonly status$ = controlStatus$(this, 'status');\n  readonly errors$ = controlErrorChanges$(\n    this,\n    this.errorsSubject.asObservable()\n  );\n\n  constructor(\n    formState?: BoxedValue<T>,\n    validatorOrOpts?: ConstructorParameters<typeof UntypedFormControl>[1],\n    asyncValidator?: ConstructorParameters<typeof UntypedFormControl>[2]\n  ) {\n    super(formState, validatorOrOpts, asyncValidator);\n  }\n\n  setValue(\n    valueOrObservable: Observable<T>,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): Subscription;\n  setValue(\n    valueOrObservable: T,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): void;\n  setValue(\n    valueOrObservable: any,\n    options?: Parameters<AbstractControl['setValue']>[1]\n  ): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.setValue(value as T, options)\n      );\n    }\n\n    super.setValue(valueOrObservable, options);\n  }\n\n  patchValue(\n    valueOrObservable: Observable<T>,\n    options?: Parameters<AbstractControl['patchValue']>[1]\n  ): Subscription;\n  patchValue(\n    valueOrObservable: T,\n    options?: Parameters<AbstractControl['patchValue']>[1]\n  ): void;\n  patchValue(valueOrObservable: any, options?: any): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.patchValue(value as T, options)\n      );\n    }\n\n    super.patchValue(valueOrObservable, options);\n  }\n\n  getRawValue(): T {\n    return this.value;\n  }\n\n  markAsTouched(\n    ...opts: Parameters<AbstractControl['markAsTouched']>\n  ): ReturnType<AbstractControl['markAsTouched']> {\n    super.markAsTouched(...opts);\n    this.touchChanges.next(true);\n  }\n\n  markAsUntouched(\n    ...opts: Parameters<AbstractControl['markAsUntouched']>\n  ): ReturnType<AbstractControl['markAsUntouched']> {\n    super.markAsUntouched(...opts);\n    this.touchChanges.next(false);\n  }\n\n  markAsPristine(\n    ...opts: Parameters<AbstractControl['markAsPristine']>\n  ): ReturnType<AbstractControl['markAsPristine']> {\n    super.markAsPristine(...opts);\n    this.dirtyChanges.next(false);\n  }\n\n  markAsDirty(\n    ...opts: Parameters<AbstractControl['markAsDirty']>\n  ): ReturnType<AbstractControl['markAsDirty']> {\n    super.markAsDirty(...opts);\n    this.dirtyChanges.next(true);\n  }\n\n  setEnable(enable = true, opts?: Parameters<AbstractControl['enable']>[0]) {\n    enableControl(this, enable, opts);\n  }\n\n  setDisable(disable = true, opts?: Parameters<AbstractControl['disable']>[0]) {\n    disableControl(this, disable, opts);\n  }\n\n  disabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<AbstractControl['disable']>[0]\n  ) {\n    return controlDisabledWhile(this, observable, options);\n  }\n\n  enabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<AbstractControl['enable']>[0]\n  ) {\n    return controlEnabledWhile(this, observable, options);\n  }\n\n  reset(\n    formState?: T,\n    options?: Parameters<AbstractControl['reset']>[1]\n  ): void {\n    super.reset(formState, options);\n  }\n\n  setValidators(\n    newValidators: Parameters<AbstractControl['setValidators']>[0],\n    options?: Parameters<AbstractControl['updateValueAndValidity']>[0]\n  ) {\n    super.setValidators(newValidators);\n    super.updateValueAndValidity(options);\n  }\n\n  setAsyncValidators(\n    newValidator: Parameters<AbstractControl['setAsyncValidators']>[0],\n    options?: Parameters<AbstractControl['updateValueAndValidity']>[0]\n  ) {\n    super.setAsyncValidators(newValidator);\n    super.updateValueAndValidity(options);\n  }\n\n  getError<E>(...params: Parameters<AbstractControl['getError']>): E | null {\n    return super.getError(...params);\n  }\n\n  setErrors(...opts: Parameters<AbstractControl['setErrors']>) {\n    /**\n     * @description\n     * Use an elvis operator to avoid a throw when the control is used with an async validator\n     * Which will be instantly resolved (like with `of(null)`)\n     * In such case, Angular will call this method instantly before even instancing the properties causing the throw\n     * Can be easily reproduced with a step-by-step debug once compiled when checking the stack trace of the constructor\n     *\n     * Issue: https://github.com/ngneat/reactive-forms/issues/91\n     * Reproduction: https://codesandbox.io/embed/github/C0ZEN/ngneat-reactive-forms-error-issue-cs/tree/main/?autoresize=1&expanddevtools=1&fontsize=14&hidenavigation=1&theme=dark\n     */\n    this.errorsSubject?.next(opts[0]);\n    return super.setErrors(...opts);\n  }\n\n  mergeErrors(\n    errors: ValidationErrors | null,\n    opts?: Parameters<AbstractControl['setErrors']>[1]\n  ) {\n    this.setErrors(mergeErrors(this.errors, errors), opts);\n  }\n\n  removeError(\n    key: string,\n    opts?: Parameters<AbstractControl['setErrors']>[1]\n  ): void {\n    this.setErrors(removeError(this.errors, key), opts);\n  }\n\n  hasErrorAndTouched(error: string): boolean {\n    return hasErrorAnd('touched', this, error);\n  }\n\n  hasErrorAndDirty(error: string): boolean {\n    return hasErrorAnd('dirty', this, error);\n  }\n}\n","import {\n  AbstractControl,\n  UntypedFormArray,\n  ValidationErrors,\n} from '@angular/forms';\nimport { isObservable, Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport {ControlsOf, FormControl, FormGroup, ValuesOf} from '..';\nimport {\n  controlValueChanges$,\n  controlStatus$,\n  controlErrorChanges$,\n  hasErrorAnd,\n  mergeErrors,\n  removeError,\n  controlDisabledWhile,\n  controlEnabledWhile,\n  disableControl,\n  enableControl,\n  markAllDirty,\n} from './core';\nimport { DeepPartial } from './types';\n\ntype ValueOfControl<T> = T extends FormControl<infer C>\n  ?  C\n  : T extends FormGroup<infer C> ? ValuesOf<C> : never;\n\n\nexport class FormArray<\n  T,\n  Control extends AbstractControl = T extends Record<any, any>\n    ? FormGroup<ControlsOf<T>>\n    : FormControl<T>\n> extends UntypedFormArray {\n  readonly value!: ValueOfControl<Control>[];\n  readonly valueChanges!: Observable<ValueOfControl<Control>[]>;\n\n  private touchChanges = new Subject<boolean>();\n  private dirtyChanges = new Subject<boolean>();\n  private errorsSubject = new Subject<ValidationErrors | null>();\n\n  readonly touch$ = this.touchChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly dirty$ = this.dirtyChanges\n    .asObservable()\n    .pipe(distinctUntilChanged());\n  readonly value$ = controlValueChanges$<Array<ValueOfControl<Control>>>(this);\n  readonly disabled$ = controlStatus$(this, 'disabled');\n  readonly enabled$ = controlStatus$(this, 'enabled');\n  readonly invalid$ = controlStatus$(this, 'invalid');\n  readonly valid$ = controlStatus$(this, 'valid');\n  readonly status$ = controlStatus$(this, 'status');\n  readonly errors$ = controlErrorChanges$(\n    this,\n    this.errorsSubject.asObservable()\n  );\n\n  constructor(\n    public controls: Array<Control>,\n    validatorOrOpts?: ConstructorParameters<typeof UntypedFormArray>[1],\n    asyncValidator?: ConstructorParameters<typeof UntypedFormArray>[2]\n  ) {\n    super(controls, validatorOrOpts, asyncValidator);\n  }\n\n  select<R>(mapFn: (state: ValueOfControl<Control>[]) => R): Observable<R> {\n    return this.value$.pipe(map(mapFn), distinctUntilChanged());\n  }\n\n  setValue(\n    valueOrObservable: Observable<ValueOfControl<Control>[]>,\n    options?: Parameters<UntypedFormArray['setValue']>[1]\n  ): Subscription;\n  setValue(\n    valueOrObservable: ValueOfControl<Control>[],\n    options?: Parameters<UntypedFormArray['setValue']>[1]\n  ): void;\n  setValue(\n    valueOrObservable: any,\n    options?: Parameters<UntypedFormArray['setValue']>[1]\n  ): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.setValue(value as T[], options)\n      );\n    }\n\n    super.setValue(valueOrObservable, options);\n  }\n\n  patchValue(\n    valueOrObservable: Observable<DeepPartial<ValueOfControl<Control>>[]>,\n    options?: Parameters<UntypedFormArray['patchValue']>[1]\n  ): Subscription;\n  patchValue(\n    valueOrObservable: DeepPartial<ValueOfControl<Control>>[],\n    options?: Parameters<UntypedFormArray['patchValue']>[1]\n  ): void;\n  patchValue(valueOrObservable: any, options?: any): any {\n    if (isObservable(valueOrObservable)) {\n      return valueOrObservable.subscribe((value) =>\n        super.patchValue(value as T[], options)\n      );\n    }\n\n    super.patchValue(valueOrObservable, options);\n  }\n\n  getRawValue(): ValueOfControl<Control>[] {\n    return super.getRawValue();\n  }\n\n  push(control: Control, options?: Parameters<UntypedFormArray['push']>[1]) {\n    return super.push(control, options);\n  }\n\n  insert(index: number, control: Control, options?: Parameters<UntypedFormArray['insert']>[2]) {\n    return super.insert(index, control, options);\n  }\n\n  setControl(index: number, control: Control, options?: Parameters<UntypedFormArray['setControl']>[2]) {\n    return super.setControl(index, control, options);\n  }\n\n  at(index: number): Control {\n    return super.at(index) as Control;\n  }\n\n  remove(value: ValueOfControl<Control>,  options?: Parameters<UntypedFormArray['removeAt']>[1]): void {\n    this.removeWhen((v) => v.value === value);\n  }\n\n  removeWhen(predicate: (element: Control) => boolean, options?: Parameters<UntypedFormArray['removeAt']>[1]): void {\n    for (let i = this.length - 1; i >= 0; --i) {\n      if (predicate(this.at(i))) {\n        this.removeAt(i, options);\n      }\n    }\n  }\n\n  markAsTouched(\n    ...opts: Parameters<UntypedFormArray['markAsTouched']>\n  ): ReturnType<UntypedFormArray['markAsTouched']> {\n    super.markAsTouched(...opts);\n    this.touchChanges.next(true);\n  }\n\n  markAsUntouched(\n    ...opts: Parameters<UntypedFormArray['markAsUntouched']>\n  ): ReturnType<UntypedFormArray['markAsUntouched']> {\n    super.markAsUntouched(...opts);\n    this.touchChanges.next(false);\n  }\n\n  markAsPristine(\n    ...opts: Parameters<UntypedFormArray['markAsPristine']>\n  ): ReturnType<UntypedFormArray['markAsPristine']> {\n    super.markAsPristine(...opts);\n    this.dirtyChanges.next(false);\n  }\n\n  markAsDirty(\n    ...opts: Parameters<UntypedFormArray['markAsDirty']>\n  ): ReturnType<UntypedFormArray['markAsDirty']> {\n    super.markAsDirty(...opts);\n    this.dirtyChanges.next(true);\n  }\n\n  markAllAsDirty(): void {\n    markAllDirty(this);\n  }\n\n  setEnable(enable = true, opts?: Parameters<UntypedFormArray['enable']>[0]) {\n    enableControl(this, enable, opts);\n  }\n\n  setDisable(disable = true, opts?: Parameters<UntypedFormArray['disable']>[0]) {\n    disableControl(this, disable, opts);\n  }\n\n  disabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<UntypedFormArray['disable']>[0]\n  ) {\n    return controlDisabledWhile(this, observable, options);\n  }\n\n  enabledWhile(\n    observable: Observable<boolean>,\n    options?: Parameters<UntypedFormArray['enable']>[0]\n  ) {\n    return controlEnabledWhile(this, observable, options);\n  }\n\n  reset(\n    formState?: ValueOfControl<Control>[],\n    options?: Parameters<UntypedFormArray['reset']>[1]\n  ): void {\n    super.reset(formState, options);\n  }\n\n  setValidators(\n    newValidators: Parameters<UntypedFormArray['setValidators']>[0],\n    options?: Parameters<UntypedFormArray['updateValueAndValidity']>[0]\n  ) {\n    super.setValidators(newValidators);\n    super.updateValueAndValidity(options);\n  }\n\n  setAsyncValidators(\n    newValidator: Parameters<UntypedFormArray['setAsyncValidators']>[0],\n    options?: Parameters<UntypedFormArray['updateValueAndValidity']>[0]\n  ) {\n    super.setAsyncValidators(newValidator);\n    super.updateValueAndValidity(options);\n  }\n\n  getError<E>(...params: Parameters<UntypedFormArray['getError']>): E | null {\n    return super.getError(...params);\n  }\n\n  setErrors(...opts: Parameters<UntypedFormArray['setErrors']>) {\n    /**\n     * @description\n     * Use an elvis operator to avoid a throw when the control is used with an async validator\n     * Which will be instantly resolved (like with `of(null)`)\n     * In such case, Angular will call this method instantly before even instancing the properties causing the throw\n     * Can be easily reproduced with a step-by-step debug once compiled when checking the stack trace of the constructor\n     *\n     * Issue: https://github.com/ngneat/reactive-forms/issues/91\n     * Reproduction: https://codesandbox.io/embed/github/C0ZEN/ngneat-reactive-forms-error-issue-cs/tree/main/?autoresize=1&expanddevtools=1&fontsize=14&hidenavigation=1&theme=dark\n     */\n    this.errorsSubject?.next(opts[0]);\n    return super.setErrors(...opts);\n  }\n\n  mergeErrors(\n    errors: ValidationErrors | null,\n    opts?: Parameters<UntypedFormArray['setErrors']>[1]\n  ) {\n    this.setErrors(mergeErrors(this.errors, errors), opts);\n  }\n\n  removeError(\n    key: string,\n    opts?: Parameters<UntypedFormArray['setErrors']>[1]\n  ): void {\n    this.setErrors(removeError(this.errors, key), opts);\n  }\n\n  hasErrorAndTouched(\n    error: string,\n    path?: Parameters<UntypedFormArray['hasError']>[1]\n  ): boolean {\n    return hasErrorAnd('touched', this, error, path);\n  }\n\n  hasErrorAndDirty(\n    error: string,\n    path?: Parameters<UntypedFormArray['hasError']>[1]\n  ): boolean {\n    return hasErrorAnd('dirty', this, error, path);\n  }\n}\n","import { Injectable } from \"@angular/core\";\nimport { AbstractControl, AbstractControlOptions, AsyncValidatorFn, UntypedFormBuilder, ValidatorFn } from '@angular/forms';\nimport { FormControl, FormGroup } from \"..\";\nimport { FormArray } from \"./form-array\";\nimport { BoxedValue, ControlsOf } from \"./types\";\n\n@Injectable({ providedIn: 'root' })\nexport class FormBuilder extends UntypedFormBuilder {\n\n  control<T>(\n    formState?: BoxedValue<T>,\n    validatorOrOpts?: ConstructorParameters<typeof FormControl>[1],\n    asyncValidator?: ConstructorParameters<typeof FormControl>[2]\n  ) {\n    return new FormControl<T>(formState, validatorOrOpts, asyncValidator);\n  }\n\n  array<T, Control extends AbstractControl = T extends Record<any, any> ? FormGroup<ControlsOf<T>> : FormControl<T>>(\n    controlsConfig: Control[],\n    validatorOrOpts?: ConstructorParameters<typeof FormArray>[1],\n    asyncValidator?: ConstructorParameters<typeof FormArray>[2]) {\n    const controls = controlsConfig.map(c => (this as any)._createControl(c));\n\n    return new FormArray<T,Control>(controls, validatorOrOpts, asyncValidator);\n  }\n\n\n  group<T extends Record<string, any>>(\n    controlsConfig: Controls<T>,\n    options?: AbstractControlOptions,\n  ): FormGroup<GroupResolverFormBuilder<T>> {\n    const controls = (this as any)._reduceControls(controlsConfig);\n\n    let validators: any = null;\n    let asyncValidators: any = null;\n    let updateOn: any;\n\n    if (options != null) {\n      validators = options.validators != null ? options.validators : null;\n      asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;\n      updateOn = options.updateOn != null ? options.updateOn : undefined;\n    }\n\n    return new FormGroup(controls, { asyncValidators, updateOn, validators });\n  }\n}\n\nexport type GroupResolverFormBuilder<T extends Record<string, any>> = {\n  [K in keyof T]:\n  // { key: builder.group/array()/FormControl([]) }\n  T[K] extends AbstractControl ? T[K] :\n\n  // { key: [''], ['', Validators.required] }\n  T[K] extends (infer U)[] ? FormControl<ResolveTypeArray<U>> :\n\n  // { key: '' }\n  FormControl<T[K]>\n}\n\ntype FormControlBuilderOptions<T> = [T, (ValidatorFn | ValidatorFn[] | null)?, (AsyncValidatorFn | AsyncValidatorFn[] | null)?]\n\n// { key: ['', Validators.required] } - get the first key type\ntype ResolveTypeArray<U> = Exclude<U, null | ValidatorFn | ValidatorFn[] | AsyncValidatorFn | AsyncValidatorFn[]>\n\ntype Controls<T> = {\n  [K in keyof T]: T[K] extends AbstractControl ? T[K] :\n  T[K] extends (infer U)[] ? FormControlBuilderOptions<ResolveTypeArray<U>> :\n  T[K] extends Record<any, any> ? FormGroup<Controls<T[K]>> :\n  T[K]\n}\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\nimport { filter, pairwise, startWith, map } from 'rxjs/operators';\n\nconst toArray = (object: Record<any, any>) => Object.keys(object);\nconst isArray = (value: any): boolean => value && Array.isArray(value);\nconst isObject = (value: any): boolean => typeof value === 'object' && value !== null;\nconst isFormArray = (prev: any, curr: any): boolean => isArray(curr) || isArray(prev);\nconst isFormGroup = (prev: any, curr: any): boolean => isObject(curr) || isObject(prev);\nconst isFormControl = (prev: any, curr: any): boolean => !isFormArray(prev, curr) && !isFormGroup(prev, curr);\nconst convertTypesToArray = (left: any, right: any): Array<[]> => [(left as unknown) as [], (right as unknown) as []];\n\n/**\n * An operator which is used to filter valueChanges$ output, that it would emit only changed parts.\n * \n * @return {MonoTypeOperatorFunction} An Observable that emits items from the source Observable with only changed values.\n */\nexport function diff<T>(): MonoTypeOperatorFunction<T | undefined> {\n  return (source$: Observable<T | undefined>) =>\n    source$.pipe(\n      startWith(undefined),\n      pairwise(),\n      map(control => reduceControlValue<T>(...control)),\n      filter(control => control !== undefined)\n    )\n}\n\nfunction reduceControlValue<T>(prev: T | undefined, curr: T | undefined): T | undefined {\n  if (prev === undefined) {\n    return curr;\n  }\n\n  if (isFormControl(prev, curr)) {\n    return prev === curr ? undefined : curr;\n  }\n\n  if (isFormArray(prev, curr)) {\n    const [left, right] = convertTypesToArray(prev, curr);\n    return compareArraysContent(left, right) ? undefined : curr;\n  }\n\n  return compareFormGroup(prev, curr);\n}\n\nfunction compareFormGroup<T>(prev: T, curr: T): T | undefined {\n  const reduced = reduceFormGroup(prev, curr);\n\n  return toArray(reduced).length === 0 ? undefined : reduced;\n}\n\nfunction reduceFormGroup<T extends Record<any, any>>(prev: T, curr: T): T {\n  if (!prev) {\n    return curr;\n  }\n\n  return toArray(curr).reduce((acc, key) => {\n    const control = reduceControlValue(prev[key], curr[key]);\n    if (control !== undefined) {\n      acc[key] = control;\n    }\n\n    return acc;\n  }, {} as Record<any, any>);\n}\n\n\nfunction compareArraysContent<T extends []>(left: T, right: T): boolean {\n  left = Array.isArray(left) ? left : ([] as T);\n  right = Array.isArray(right) ? right : ([] as T);\n  return left.length === right.length && left.every(value => right.includes(value));\n}","\nimport { AbstractControl, UntypedFormArray } from \"@angular/forms\";\nimport { from, isObservable, Observable, of } from \"rxjs\";\nimport { debounceTime, switchMap, take, tap } from \"rxjs/operators\";\n\nexport interface PersistOptions<T> {\n  debounceTime?: number;\n  manager?: PersistManager<T>;\n  arrControlFactory?: ControlFactoryMap<T>;\n  persistDisabledControls?: boolean;\n}\n\nexport function persistControl<T>(\n  control: AbstractControl,\n  key: string,\n  { debounceTime, manager, arrControlFactory, persistDisabledControls }: PersistOptions<T>\n): Observable<unknown> {\n  const persistManager = manager || new LocalStorageManager();\n\n  return restoreControl(control, key, persistManager, arrControlFactory).pipe(\n    switchMap(() =>\n      persistValue$(control, key, {\n        debounceTime: debounceTime || 250,\n        manager: persistManager,\n        persistDisabledControls\n      })\n    )\n  );\n}\n\nfunction persistValue$<T>(control: AbstractControl, key: string, options: PersistOptions<T>): Observable<T> {\n  return control.valueChanges.pipe(\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    debounceTime(options.debounceTime!),\n    switchMap(value =>\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      wrapIntoObservable(options.manager!.setValue(key, options.persistDisabledControls ? (control as any).getRawValue() : value))\n    )\n  );\n}\n\n\nexport function restoreControl<T>(control: AbstractControl, key: string, manager: PersistManager<T>, arrControlFactory: ControlFactoryMap<T> | undefined): Observable<T> {\n  return wrapIntoObservable(manager.getValue(key)).pipe(\n    take(1),\n    tap(value => {\n      if (!value) return;\n\n      if (arrControlFactory) {\n        handleFormArrays(control, value, arrControlFactory);\n      }\n\n      control.patchValue(value, { emitEvent: false });\n    })\n  );\n}\n\n\nfunction handleFormArrays<T>(\n  control: AbstractControl,\n  formValue: T,\n  arrControlFactory: ControlFactoryMap<T>\n) {\n  Object.keys(formValue).forEach(controlName => {\n    const value = (formValue as any)[controlName];\n\n    if (Array.isArray(value) && control.get(controlName) instanceof UntypedFormArray) {\n      if (!arrControlFactory || (arrControlFactory && !(controlName in arrControlFactory))) {\n        throw new Error(`Please provide arrControlFactory for ${controlName}`);\n      }\n      const current = control.get(controlName) as UntypedFormArray;\n      const fc = (arrControlFactory as any)[controlName]\n      clearFormArray(current);\n      value.forEach((v, i) => current.insert(i, fc(v)));\n    }\n  });\n}\n\nexport function clearFormArray(control: UntypedFormArray) {\n  while (control.length !== 0) {\n    control.removeAt(0);\n  }\n}\n\nexport function wrapIntoObservable<T>(value: T | Promise<T> | Observable<T>): Observable<T> {\n  if (isObservable(value) || isPromise(value)) {\n    return from(value);\n  }\n\n  return of(value);\n}\n\nfunction isPromise(value: any): value is Promise<unknown> {\n  return typeof value?.then === 'function';\n}\n\nexport type ArrayKeys<T> = { [K in keyof T]: T[K] extends any[] ? K : never }[keyof T];\nexport type ControlFactory<T> = (value: T) => AbstractControl;\nexport type ControlFactoryMap<T> = {\n  [K in ArrayKeys<T>]?: ControlFactory<ArrayType<T[K]>>;\n};\ntype ArrayType<T> = T extends Array<infer R> ? R : any;\n\n\nexport interface PersistManager<T> {\n  setValue(key: string, data: T): T | Promise<T> | Observable<T>;\n  getValue(key: string): T | Promise<T> | Observable<T>;\n}\n\n\nexport class LocalStorageManager<T> implements PersistManager<T> {\n  setValue(key: string, data: T): T {\n    localStorage.setItem(key, JSON.stringify(data));\n    return data;\n  }\n\n  getValue(key: string): T {\n    return JSON.parse(localStorage.getItem(key) || '{}');\n  }\n}\n\nexport class SessionStorageManager<T> implements PersistManager<T> {\n  setValue(key: string, data: T): T {\n    sessionStorage.setItem(key, JSON.stringify(data));\n    return data;\n  }\n\n  getValue(key: string): T {\n    return JSON.parse(sessionStorage.getItem(key) || '{}');\n  }\n}","import { ControlValueAccessor as NgControlValueAccessor } from '@angular/forms';\n\nexport abstract class ControlValueAccessor<T = any> implements NgControlValueAccessor {\n  abstract writeValue(value: T): void;\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onChange?= (value: T | null) => {\n    //\n  };\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched?= () => { };\n\n  registerOnChange(fn: (value: T | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAIgB,SAAA,mBAAmB,CACjC,OAAY,EACZ,KAAsB,EAAA;AAEtB,IAAA,OAAQ,OAAO,CAAC,MAA0B,CAAC,IAAI,CAC7C,GAAG,CAAC,KAAK,CAAC,EACV,oBAAoB,EAAE,CACvB,CAAC;AACJ,CAAC;AAEK,SAAU,oBAAoB,CAClC,OAAmD,EAAA;AAEnD,IAAA,OAAO,KAAK,CACV,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EACtC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAC3C,CAAC;AACrB,CAAC;AAIe,SAAA,cAAc,CAG5B,OAAwB,EACxB,IAAO,EAAA;AAEP,IAAA,OAAO,KAAK,CACV,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC9B,OAAO,CAAC,aAAa,CAAC,IAAI,CACxB,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EACxB,oBAAoB,EAAE,CACvB,CACiB,CAAC;AACvB,CAAC;SAEe,aAAa,CAC3B,OAAwB,EACxB,OAAgB,EAChB,IAAU,EAAA;AAEV,IAAA,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,KAAA;AACH,CAAC;SAEe,cAAc,CAC5B,OAAwB,EACxB,QAAiB,EACjB,IAAU,EAAA;IAEV,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;SAEe,oBAAoB,CAClC,OAAwB,EACxB,UAA+B,EAC/B,IAAU,EAAA;AAEV,IAAA,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,KACrC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1C,CAAC;AACJ,CAAC;SAEe,mBAAmB,CACjC,OAAwB,EACxB,UAA+B,EAC/B,IAAU,EAAA;AAEV,IAAA,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,KACpC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CACxC,CAAC;AACJ,CAAC;AAEe,SAAA,WAAW,CACzB,QAAiC,EACjC,KAA8B,EAAA;AAE9B,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IAED,OACK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,QAAQ,CACR,EAAA,KAAK,CACR,CAAA;AACJ,CAAC;AAEe,SAAA,WAAW,CAAC,MAA+B,EAAE,GAAW,EAAA;IACtE,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,MAAM,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACd,MAAM,CACV,CAAC;AAEF,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAE1B,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC;AACtE,CAAC;AAEK,SAAU,WAAW,CACzB,GAAwB,EACxB,OAAwB,EACxB,KAAa,EACb,IAAiD,EAAA;IAEjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAC/B,KAAK,EACL,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,CAC9C,CAAC;AACF,IAAA,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAEe,SAAA,oBAAoB,CAClC,OAAwB,EACxB,OAA4C,EAAA;IAE5C,OAAO,KAAK,CACV,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAC/B,OAAO,EACP,OAAO,CAAC,YAAY,CAAC,IAAI,CACvB,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EACzB,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACxE,CACF,CAAC;AACJ,CAAC;AAEK,SAAU,YAAY,CAAC,OAAwB,EAAA;IACnD,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEvC,IAAA,OAAe,CAAC,aAAa,CAAC,CAAC,OAAY,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,CAAA,EAAA,GAAA,OAAO,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAI,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AAC1H;;ACpHM,MAAO,SAAyC,SAAQ,gBAAgB,CAAA;AAyB5E,IAAA,WAAA,CACS,QAAW,EAClB,eAAmE,EACnE,cAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAJ1C,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAG;AAtBZ,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEtD,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,oBAAoB,CAAc,IAAI,CAAC,CAAC;QACjD,IAAA,CAAA,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,IAAA,CAAA,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,oBAAoB,CACrC,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAClC,CAAC;KAQD;AAED,IAAA,MAAM,CAAI,KAAgC,EAAA;AACxC,QAAA,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACzC;AAoBD,IAAA,GAAG,CAAC,GAAsB,EAAA;AACxB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAoB,CAAC;KAC1C;IAUD,QAAQ,CACN,iBAAsB,EACtB,OAAoD,EAAA;AAEpD,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,QAAQ,CAAC,KAAoB,EAAE,OAAO,CAAC,CAC9C,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC5C;IAUD,UAAU,CAAC,iBAAsB,EAAE,OAAa,EAAA;AAC9C,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,UAAU,CAAC,KAAiC,EAAE,OAAO,CAAC,CAC7D,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC9C;IAED,WAAW,GAAA;AACT,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC5B;IAED,aAAa,CACX,GAAG,IAAkD,EAAA;AAErD,QAAA,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,eAAe,CACb,GAAG,IAAoD,EAAA;AAEvD,QAAA,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,cAAc,CACZ,GAAG,IAAmD,EAAA;AAEtD,QAAA,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,WAAW,CACT,GAAG,IAAgD,EAAA;AAEnD,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,cAAc,GAAA;QACZ,YAAY,CAAC,IAAI,CAAC,CAAC;KACpB;AAED,IAAA,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,IAA+C,EAAA;AACtE,QAAA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,IAAgD,EAAA;AACzE,QAAA,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;KACrC;IAED,aAAa,CACX,UAA+B,EAC/B,OAAmD,EAAA;QAEnD,OAAO,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACxD;IAED,YAAY,CACV,UAA+B,EAC/B,OAAkD,EAAA;QAElD,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACvD;IAED,KAAK,CACH,SAAuB,EACvB,OAAiD,EAAA;AAEjD,QAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACjC;IAED,aAAa,CACX,aAA8D,EAC9D,OAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACnC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,kBAAkB,CAChB,YAAkE,EAClE,OAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,QAAQ,CAAI,GAAG,MAA+C,EAAA;AAC5D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;KAClC;IAED,SAAS,CAAC,GAAG,IAA8C,EAAA;;AACzD;;;;;;;;;AASG;QACH,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;KACjC;IAED,WAAW,CACT,MAA+B,EAC/B,IAAkD,EAAA;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;KACxD;IAED,WAAW,CACT,GAAW,EACX,IAAkD,EAAA;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KACrD;IAED,kBAAkB,CAChB,KAAa,EACb,IAAiD,EAAA;QAEjD,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KAClD;IAED,gBAAgB,CACd,KAAa,EACb,IAAiD,EAAA;QAEjD,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KAChD;AACF;;ACnOK,MAAO,WAAe,SAAQ,kBAAkB,CAAA;AAyBpD,IAAA,WAAA,CACE,SAAyB,EACzB,eAAqE,EACrE,cAAoE,EAAA;AAEpE,QAAA,KAAK,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AA1B5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEtD,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,oBAAoB,CAAI,IAAI,CAAC,CAAC;QACvC,IAAA,CAAA,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,IAAA,CAAA,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,oBAAoB,CACrC,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAClC,CAAC;KAQD;IAUD,QAAQ,CACN,iBAAsB,EACtB,OAAoD,EAAA;AAEpD,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,QAAQ,CAAC,KAAU,EAAE,OAAO,CAAC,CACpC,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC5C;IAUD,UAAU,CAAC,iBAAsB,EAAE,OAAa,EAAA;AAC9C,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,UAAU,CAAC,KAAU,EAAE,OAAO,CAAC,CACtC,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC9C;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,aAAa,CACX,GAAG,IAAkD,EAAA;AAErD,QAAA,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,eAAe,CACb,GAAG,IAAoD,EAAA;AAEvD,QAAA,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,cAAc,CACZ,GAAG,IAAmD,EAAA;AAEtD,QAAA,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,WAAW,CACT,GAAG,IAAgD,EAAA;AAEnD,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;AAED,IAAA,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,IAA+C,EAAA;AACtE,QAAA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,IAAgD,EAAA;AACzE,QAAA,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;KACrC;IAED,aAAa,CACX,UAA+B,EAC/B,OAAmD,EAAA;QAEnD,OAAO,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACxD;IAED,YAAY,CACV,UAA+B,EAC/B,OAAkD,EAAA;QAElD,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACvD;IAED,KAAK,CACH,SAAa,EACb,OAAiD,EAAA;AAEjD,QAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACjC;IAED,aAAa,CACX,aAA8D,EAC9D,OAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACnC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,kBAAkB,CAChB,YAAkE,EAClE,OAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,QAAQ,CAAI,GAAG,MAA+C,EAAA;AAC5D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;KAClC;IAED,SAAS,CAAC,GAAG,IAA8C,EAAA;;AACzD;;;;;;;;;AASG;QACH,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;KACjC;IAED,WAAW,CACT,MAA+B,EAC/B,IAAkD,EAAA;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;KACxD;IAED,WAAW,CACT,GAAW,EACX,IAAkD,EAAA;AAElD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KACrD;AAED,IAAA,kBAAkB,CAAC,KAAa,EAAA;QAC9B,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5C;AAED,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1C;AACF;;ACtLK,MAAO,SAKX,SAAQ,gBAAgB,CAAA;AAyBxB,IAAA,WAAA,CACS,QAAwB,EAC/B,eAAmE,EACnE,cAAkE,EAAA;AAElE,QAAA,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAJ1C,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAgB;AAtBzB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEtD,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,YAAY;AAChC,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,oBAAoB,CAAiC,IAAI,CAAC,CAAC;QACpE,IAAA,CAAA,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAA,CAAA,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,IAAA,CAAA,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,oBAAoB,CACrC,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAClC,CAAC;KAQD;AAED,IAAA,MAAM,CAAI,KAA8C,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;KAC7D;IAUD,QAAQ,CACN,iBAAsB,EACtB,OAAqD,EAAA;AAErD,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,QAAQ,CAAC,KAAY,EAAE,OAAO,CAAC,CACtC,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC5C;IAUD,UAAU,CAAC,iBAAsB,EAAE,OAAa,EAAA;AAC9C,QAAA,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACnC,YAAA,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAAK,KACvC,KAAK,CAAC,UAAU,CAAC,KAAY,EAAE,OAAO,CAAC,CACxC,CAAC;AACH,SAAA;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;KAC9C;IAED,WAAW,GAAA;AACT,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC5B;IAED,IAAI,CAAC,OAAgB,EAAE,OAAiD,EAAA;QACtE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACrC;AAED,IAAA,MAAM,CAAC,KAAa,EAAE,OAAgB,EAAE,OAAmD,EAAA;QACzF,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAC9C;AAED,IAAA,UAAU,CAAC,KAAa,EAAE,OAAgB,EAAE,OAAuD,EAAA;QACjG,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAClD;AAED,IAAA,EAAE,CAAC,KAAa,EAAA;AACd,QAAA,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAY,CAAC;KACnC;IAED,MAAM,CAAC,KAA8B,EAAG,OAAqD,EAAA;AAC3F,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;KAC3C;IAED,UAAU,CAAC,SAAwC,EAAE,OAAqD,EAAA;AACxG,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;YACzC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3B,aAAA;AACF,SAAA;KACF;IAED,aAAa,CACX,GAAG,IAAmD,EAAA;AAEtD,QAAA,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,eAAe,CACb,GAAG,IAAqD,EAAA;AAExD,QAAA,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,cAAc,CACZ,GAAG,IAAoD,EAAA;AAEvD,QAAA,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,WAAW,CACT,GAAG,IAAiD,EAAA;AAEpD,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,cAAc,GAAA;QACZ,YAAY,CAAC,IAAI,CAAC,CAAC;KACpB;AAED,IAAA,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,IAAgD,EAAA;AACvE,QAAA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,IAAiD,EAAA;AAC1E,QAAA,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;KACrC;IAED,aAAa,CACX,UAA+B,EAC/B,OAAoD,EAAA;QAEpD,OAAO,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACxD;IAED,YAAY,CACV,UAA+B,EAC/B,OAAmD,EAAA;QAEnD,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACvD;IAED,KAAK,CACH,SAAqC,EACrC,OAAkD,EAAA;AAElD,QAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACjC;IAED,aAAa,CACX,aAA+D,EAC/D,OAAmE,EAAA;AAEnE,QAAA,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACnC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,kBAAkB,CAChB,YAAmE,EACnE,OAAmE,EAAA;AAEnE,QAAA,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,QAAQ,CAAI,GAAG,MAAgD,EAAA;AAC7D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;KAClC;IAED,SAAS,CAAC,GAAG,IAA+C,EAAA;;AAC1D;;;;;;;;;AASG;QACH,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;KACjC;IAED,WAAW,CACT,MAA+B,EAC/B,IAAmD,EAAA;AAEnD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;KACxD;IAED,WAAW,CACT,GAAW,EACX,IAAmD,EAAA;AAEnD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KACrD;IAED,kBAAkB,CAChB,KAAa,EACb,IAAkD,EAAA;QAElD,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KAClD;IAED,gBAAgB,CACd,KAAa,EACb,IAAkD,EAAA;QAElD,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KAChD;AACF;;ACjQK,MAAO,WAAY,SAAQ,kBAAkB,CAAA;AAEjD,IAAA,OAAO,CACL,SAAyB,EACzB,eAA8D,EAC9D,cAA6D,EAAA;QAE7D,OAAO,IAAI,WAAW,CAAI,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KACvE;AAED,IAAA,KAAK,CACH,cAAyB,EACzB,eAA4D,EAC5D,cAA2D,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAK,IAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1E,OAAO,IAAI,SAAS,CAAY,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KAC5E;IAGD,KAAK,CACH,cAA2B,EAC3B,OAAgC,EAAA;QAEhC,MAAM,QAAQ,GAAI,IAAY,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAE/D,IAAI,UAAU,GAAQ,IAAI,CAAC;QAC3B,IAAI,eAAe,GAAQ,IAAI,CAAC;AAChC,QAAA,IAAI,QAAa,CAAC;QAElB,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,YAAA,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AACpE,YAAA,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;AACnF,YAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;AACpE,SAAA;AAED,QAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;KAC3E;;wGArCU,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACHlC,MAAM,OAAO,GAAG,CAAC,MAAwB,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,CAAC,KAAU,KAAc,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,MAAM,QAAQ,GAAG,CAAC,KAAU,KAAc,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACtF,MAAM,WAAW,GAAG,CAAC,IAAS,EAAE,IAAS,KAAc,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AACtF,MAAM,WAAW,GAAG,CAAC,IAAS,EAAE,IAAS,KAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxF,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,IAAS,KAAc,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9G,MAAM,mBAAmB,GAAG,CAAC,IAAS,EAAE,KAAU,KAAgB,CAAE,IAAsB,EAAG,KAAuB,CAAC,CAAC;AAEtH;;;;AAIG;SACa,IAAI,GAAA;AAClB,IAAA,OAAO,CAAC,OAAkC,KACxC,OAAO,CAAC,IAAI,CACV,SAAS,CAAC,SAAS,CAAC,EACpB,QAAQ,EAAE,EACV,GAAG,CAAC,OAAO,IAAI,kBAAkB,CAAI,GAAG,OAAO,CAAC,CAAC,EACjD,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CACzC,CAAA;AACL,CAAC;AAED,SAAS,kBAAkB,CAAI,IAAmB,EAAE,IAAmB,EAAA;IACrE,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;QAC7B,OAAO,IAAI,KAAK,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AACzC,KAAA;AAED,IAAA,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC3B,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD,QAAA,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAC7D,KAAA;AAED,IAAA,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAI,IAAO,EAAE,IAAO,EAAA;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE5C,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAA6B,IAAO,EAAE,IAAO,EAAA;IACnE,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AACvC,QAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACpB,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,EAAE,EAAsB,CAAC,CAAC;AAC7B,CAAC;AAGD,SAAS,oBAAoB,CAAe,IAAO,EAAE,KAAQ,EAAA;AAC3D,IAAA,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAI,EAAQ,CAAC;AAC9C,IAAA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAI,EAAQ,CAAC;IACjD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF;;ACzDgB,SAAA,cAAc,CAC5B,OAAwB,EACxB,GAAW,EACX,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAqB,EAAA;AAExF,IAAA,MAAM,cAAc,GAAG,OAAO,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAE5D,OAAO,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACzE,SAAS,CAAC,MACR,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE;QAC1B,YAAY,EAAE,YAAY,IAAI,GAAG;AACjC,QAAA,OAAO,EAAE,cAAc;QACvB,uBAAuB;KACxB,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAI,OAAwB,EAAE,GAAW,EAAE,OAA0B,EAAA;AACzF,IAAA,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI;;IAE9B,YAAY,CAAC,OAAO,CAAC,YAAa,CAAC,EACnC,SAAS,CAAC,KAAK;;IAEb,kBAAkB,CAAC,OAAO,CAAC,OAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,GAAI,OAAe,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAC7H,CACF,CAAC;AACJ,CAAC;AAGK,SAAU,cAAc,CAAI,OAAwB,EAAE,GAAW,EAAE,OAA0B,EAAE,iBAAmD,EAAA;IACtJ,OAAO,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACnD,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,KAAK,IAAG;AACV,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;AAEnB,QAAA,IAAI,iBAAiB,EAAE;AACrB,YAAA,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACrD,SAAA;QAED,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACjD,CAAC,CACH,CAAC;AACJ,CAAC;AAGD,SAAS,gBAAgB,CACvB,OAAwB,EACxB,SAAY,EACZ,iBAAuC,EAAA;IAEvC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAW,IAAG;AAC3C,QAAA,MAAM,KAAK,GAAI,SAAiB,CAAC,WAAW,CAAC,CAAC;AAE9C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,gBAAgB,EAAE;AAChF,YAAA,IAAI,CAAC,iBAAiB,KAAK,iBAAiB,IAAI,EAAE,WAAW,IAAI,iBAAiB,CAAC,CAAC,EAAE;AACpF,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,WAAW,CAAA,CAAE,CAAC,CAAC;AACxE,aAAA;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAqB,CAAC;AAC7D,YAAA,MAAM,EAAE,GAAI,iBAAyB,CAAC,WAAW,CAAC,CAAA;YAClD,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,SAAA;AACH,KAAC,CAAC,CAAC;AACL,CAAC;AAEK,SAAU,cAAc,CAAC,OAAyB,EAAA;AACtD,IAAA,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,QAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,KAAA;AACH,CAAC;AAEK,SAAU,kBAAkB,CAAI,KAAqC,EAAA;IACzE,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,KAAA;AAED,IAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,KAAU,EAAA;AAC3B,IAAA,OAAO,QAAO,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,IAAI,CAAA,KAAK,UAAU,CAAC;AAC3C,CAAC;MAgBY,mBAAmB,CAAA;IAC9B,QAAQ,CAAC,GAAW,EAAE,IAAO,EAAA;AAC3B,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;KACtD;AACF,CAAA;MAEY,qBAAqB,CAAA;IAChC,QAAQ,CAAC,GAAW,EAAE,IAAO,EAAA;AAC3B,QAAA,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;KACxD;AACF;;MChIqB,oBAAoB,CAAA;AAA1C,IAAA,WAAA,GAAA;;;;AAME,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAe,KAAI;;AAE/B,SAAC,CAAC;;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;KASvB;AAPC,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AACF;;ACrBD;;AAEG;;;;"}