{"version":3,"file":"popeyelab-ngx-validator.mjs","sources":["../../../projects/ngx-validator/src/lib/components/base-validation-messages.ts","../../../projects/ngx-validator/src/lib/components/default-validation-messages/default-validation-messages.ts","../../../projects/ngx-validator/src/lib/components/mat-validation-messages/mat-validation-messages.component.ts","../../../projects/ngx-validator/src/lib/form-validator-token.ts","../../../projects/ngx-validator/src/lib/form-validator.model.ts","../../../projects/ngx-validator/src/lib/directives/validator-target.directive.ts","../../../projects/ngx-validator/src/lib/directives/validator-container.directive.ts","../../../projects/ngx-validator/src/lib/directives/mat-form-field.directive.ts","../../../projects/ngx-validator/src/lib/directives/form-group-validator.directive.ts","../../../projects/ngx-validator/src/lib/directives/form-control-validator.directive.ts","../../../projects/ngx-validator/src/lib/validators/validators.ts","../../../projects/ngx-validator/src/lib/form-validator.module.ts","../../../projects/ngx-validator/src/public-api.ts","../../../projects/ngx-validator/src/popeyelab-ngx-validator.ts"],"sourcesContent":["import { TrackByFunction } from '@angular/core';\nimport { FormatedError } from '../form-validator.model';\n\nexport abstract class BaseValidationMessagesComponent {\n  errors: FormatedError[] = [];\n  classes = '';\n\n  trackByFn: TrackByFunction<FormatedError> = (_, item) => item.key;\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';\nimport { BaseValidationMessagesComponent } from '../base-validation-messages';\n\n@Component({\n  selector: 'validation-messages',\n  template: `\n    <div *ngFor=\"let error of errors; trackBy: trackByFn\">\n      {{ error.message }}\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class DefaultValidationMessagesComponent extends BaseValidationMessagesComponent {\n  @HostBinding('class') override classes: string = '';\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';\nimport { animate, state, style, trigger, transition } from '@angular/animations';\n\nimport { BaseValidationMessagesComponent } from '../base-validation-messages';\n\nconst transitionMessages = trigger('transitionMessages', [\n  state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n  transition('void => enter', [\n    style({ opacity: 0, transform: 'translateY(-5px)' }),\n    animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\n  ]),\n]);\n\n@Component({\n  selector: 'validation-messages',\n  template: `\n    <div [@transitionMessages]=\"'enter'\" class=\"mat-mdc-form-field-error mat-mdc-form-field-bottom-align\" *ngFor=\"let error of errors; trackBy: trackByFn\">\n      {{ error.message }}\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  animations: [transitionMessages],\n})\nexport class MatValidationMessagesComponent extends BaseValidationMessagesComponent {\n  @HostBinding('class') override classes: string = '';\n}\n","import { InjectionToken } from '@angular/core';\nimport { FormValidatorConfig } from './form-validator.model';\n\nexport const FORM_VALIDATOR_CONFIGURATION = new InjectionToken<FormValidatorConfig>('Ngx form validator configuration');\n","import { Type } from '@angular/core';\nimport { BaseValidationMessagesComponent } from './components';\n\nexport interface ValidationMessages {\n  [key: string]: string;\n}\n\nexport interface FormatedError {\n  key: string;\n  message: string;\n}\n\nexport enum FormEventType {\n  FormInitial = 'FORM_INITIAL',\n  ValueChange = 'VALUE_CHANGES',\n  StatusChange = 'STATUS_CHANGES',\n  FormSubmit = 'FORM_SUBMIT',\n  Blur = 'BLUR',\n}\n\nexport interface FormEvent {\n  type: FormEventType;\n  value?: any;\n}\n\nexport const enum UIFramework {\n  Bootstrap = 'bootstrap',\n  AngularMaterial = 'angular-material',\n  Auto = 'auto',\n  None = 'none',\n}\n\nexport type ValidateOnFn = (status: { dirty: boolean; touched: boolean; submited: boolean }) => boolean;\n\nexport interface FormValidatorConfig {\n  skipValidate: boolean;\n  uiFrameWork: UIFramework;\n  validationMessages: ValidationMessages;\n  unknownErrorValidationMessage: string;\n  validationMessagesComponent: Type<BaseValidationMessagesComponent>;\n  validateOn: ValidateOnFn;\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: '[validatorMessagesTarget]',\n  exportAs: 'validatorMessagesTarget',\n})\nexport class ValidatorTargetDirective {\n  constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { ContentChild, Directive } from '@angular/core';\nimport { ValidatorTargetDirective } from './validator-target.directive';\n\n@Directive({\n  selector: '[validatorContainer]',\n  exportAs: 'validatorContainer',\n})\nexport class ValidatorContainerDirective {\n  @ContentChild(ValidatorTargetDirective) targetRef: ValidatorTargetDirective | null = null;\n}\n","import { Directive, ElementRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: 'mat-error',\n  exportAs: 'matError',\n})\nexport class MatErrorDirective {\n  constructor(public viewContainerRef: ViewContainerRef) {\n  }\n}\n\n@Directive({\n  selector: 'mat-form-field',\n  exportAs: 'matFormField',\n})\nexport class MatFormFieldDirective {\n  constructor(public elementRef: ElementRef) {\n  }\n}\n","import {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Self,\n  SkipSelf,\n} from '@angular/core';\nimport { FormGroup, FormGroupDirective, FormGroupName } from '@angular/forms';\nimport { merge, NEVER, Observable, Subject, Subscription } from 'rxjs';\nimport { FormEvent, FormEventType, FormValidatorConfig } from '../form-validator.model';\nimport { FORM_VALIDATOR_CONFIGURATION } from '../form-validator-token';\n\n@Directive({\n  selector: '[formGroup],[formGroupName]',\n  exportAs: 'formGroupValidator',\n})\nexport class FormGroupValidatorDirective implements AfterViewInit, OnDestroy {\n  @Input('skipValidate') _skipValidate = false;\n\n  get parent(): Partial<FormGroupValidatorDirective> {\n    return this.parentFormGroupValidatorDirective;\n  }\n\n  get skipValidate(): boolean {\n    return (\n      this.config.skipValidate ??\n      this._skipValidate ??\n      Boolean(this.parent?.skipValidate)\n    );\n  }\n\n  get formGroup(): FormGroup {\n    return this.formGroupDirective\n      ? this.formGroupDirective.form\n      : this.formGroupName.control;\n  }\n\n  get events$(): Observable<FormEvent> {\n    return merge(this._events$ ?? NEVER, this.parent?.events$ ?? NEVER);\n  }\n\n  private _events$ = new Subject<FormEvent>();\n  private _subscriptions = new Subscription();\n\n  constructor(\n    private readonly elementRef: ElementRef,\n\n    @Self()\n    @Optional()\n    private readonly formGroupName: FormGroupName,\n\n    @Self()\n    @Optional()\n    private readonly formGroupDirective: FormGroupDirective,\n\n    @Inject(FORM_VALIDATOR_CONFIGURATION)\n    private readonly config: FormValidatorConfig,\n\n    @SkipSelf()\n    @Optional()\n    private readonly parentFormGroupValidatorDirective: FormGroupValidatorDirective\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.listenFormEvents();\n  }\n\n  ngOnDestroy(): void {\n    this._subscriptions.unsubscribe();\n  }\n\n  @HostListener('submit', ['$event'])\n  onSubmit(event: Event): void {\n    if (!(this.elementRef.nativeElement instanceof HTMLFormElement)) {\n      return;\n    }\n\n    if (this.formGroup.invalid) {\n      event.preventDefault();\n    }\n    this._events$.next({\n      type: FormEventType.FormSubmit,\n      value: this.formGroup,\n    });\n  }\n\n  private listenFormEvents(): void {\n    this._events$.next({\n      type: FormEventType.FormInitial,\n      value: this.formGroup,\n    });\n\n    this._subscriptions.add(\n      this.formGroup.statusChanges.subscribe(() => {\n        this._events$.next({\n          type: FormEventType.StatusChange,\n          value: this.formGroup,\n        });\n      })\n    );\n\n    this._subscriptions.add(\n      this.formGroup.valueChanges.subscribe(() => {\n        this._events$.next({\n          type: FormEventType.ValueChange,\n          value: this.formGroup,\n        });\n      })\n    );\n  }\n}\n","import {\n  AfterViewInit,\n  ApplicationRef,\n  ChangeDetectorRef,\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EmbeddedViewRef,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n  TemplateRef,\n  Type,\n  ViewContainerRef,\n} from '@angular/core';\nimport {\n  FormGroupDirective,\n  NgControl,\n  ValidationErrors,\n} from '@angular/forms';\nimport { map, merge, Subject, Subscription } from 'rxjs';\nimport { skipWhile } from 'rxjs/operators';\n\nimport { FormGroupValidatorDirective } from './form-group-validator.directive';\nimport { FORM_VALIDATOR_CONFIGURATION } from '../form-validator-token';\nimport {\n  ValidationMessages,\n  FormEvent,\n  FormEventType,\n  FormValidatorConfig,\n  FormatedError,\n  UIFramework,\n} from '../form-validator.model';\nimport {\n  BaseValidationMessagesComponent,\n  DefaultValidationMessagesComponent,\n  MatValidationMessagesComponent,\n} from '../components';\nimport { ValidatorContainerDirective } from './validator-container.directive';\nimport { ValidatorTargetDirective } from './validator-target.directive';\nimport { MatFormFieldDirective } from './mat-form-field.directive';\n\nexport function interpolate(text: string): string {\n  return '{{\\\\s*(' + text + ')\\\\s*}}';\n}\n\nexport function mapReplace(\n  defaultMessage: string,\n  error: ValidationErrors\n): string {\n  if (typeof defaultMessage !== 'string') {\n    return '';\n  }\n\n  if (typeof error !== 'object') {\n    return defaultMessage;\n  }\n\n  const expression = Object.keys(error).join('|');\n  const mapRegExp = new RegExp(interpolate(expression), 'g');\n\n  return defaultMessage.replace(mapRegExp, (match) => {\n    return String(error[match.replace(/\\{\\{\\s*|\\s*\\}\\}/g, '')]);\n  });\n}\n\n@Directive({\n  selector: '[formControl],[formControlName]',\n  exportAs: 'formControlValidator',\n})\nexport class FormControlValidatorDirective implements AfterViewInit, OnDestroy {\n  @Input('skipValidate') _skipValidate = false;\n\n  @Input() validationMessages: ValidationMessages | null = null;\n\n  @Input() validationMessagesTemplateRef: TemplateRef<any> | null = null;\n\n  get parent(): Partial<FormGroupValidatorDirective> {\n    return this.parentFormGroupValidatorDirective;\n  }\n\n  get skipValidate(): boolean {\n    return (\n      Boolean(this.config.skipValidate) ||\n      Boolean(this._skipValidate) ||\n      Boolean(this.parent.skipValidate)\n    );\n  }\n\n  get validationMessageComponent(): Type<BaseValidationMessagesComponent> {\n    return (\n      this.config.validationMessagesComponent ??\n      DefaultValidationMessagesComponent\n    );\n  }\n\n  private _subscriptions = new Subscription();\n  private _errorRef:\n    | ComponentRef<BaseValidationMessagesComponent>\n    | EmbeddedViewRef<any>\n    | null = null;\n\n  private _events$ = new Subject<FormEvent>();\n  private _cachedValidationErrors = '';\n\n  private get hasCacheValidationErrors(): boolean {\n    return Boolean(this._cachedValidationErrors);\n  }\n\n  constructor(\n    private readonly changeDetectorRef: ChangeDetectorRef,\n    private readonly applicationRef: ApplicationRef,\n    private readonly control: NgControl,\n    private readonly elementRef: ElementRef,\n    private readonly viewContainerRef: ViewContainerRef,\n\n    @Optional()\n    private containerRef: ValidatorContainerDirective,\n\n    @Optional()\n    @SkipSelf()\n    public targetRef: ValidatorTargetDirective,\n\n    @Optional()\n    private readonly formGroupDirective: FormGroupDirective,\n\n    @Inject(FORM_VALIDATOR_CONFIGURATION)\n    private readonly config: FormValidatorConfig,\n\n    @Optional()\n    private readonly matFormFieldDirective: MatFormFieldDirective,\n\n    @Optional()\n    public readonly parentFormGroupValidatorDirective: FormGroupValidatorDirective,\n  ) { }\n\n  ngAfterViewInit(): void {\n    this.listenFormEvents();\n  }\n\n  ngOnDestroy(): void {\n    this._subscriptions.unsubscribe();\n    this.removeValidationErrors();\n  }\n\n  @HostListener('blur', ['$event'])\n  onBlur(): void {\n    this._events$.next({ type: FormEventType.Blur });\n  }\n\n  private listenFormEvents(): void {\n    if (!this.parent ?? !this.parent.events$) {\n      return;\n    }\n\n    const sub = merge(this.parent.events$, this._events$)\n      .pipe(\n        skipWhile(() => this.skipValidate),\n        map(() => this.formatErrors())\n      )\n      .subscribe((errors) => {\n        this.validate(errors);\n      });\n\n    this._subscriptions.add(sub);\n  }\n\n  private shouldShowValidationError(errors: FormatedError[]): boolean {\n    if (errors.length <= 0) {\n      return false;\n    }\n\n    if (\n      !this.config.validateOn ||\n      typeof this.config.validateOn !== 'function'\n    ) {\n      return true;\n    }\n\n    return this.config.validateOn({\n      dirty: this.control.dirty ?? false,\n      touched: this.control.touched ?? false,\n      submited: this.formGroupDirective.submitted,\n    });\n  }\n\n  private formatErrors(): FormatedError[] {\n    const errors = this.control.errors;\n    if (!errors) {\n      return [];\n    }\n\n    return Object.keys(errors || {}).map((key) => {\n      const message = this.getErrorMessage(errors, key);\n\n      return {\n        ...errors[key],\n        message,\n        key,\n      };\n    });\n  }\n\n  private getErrorMessage(errors: ValidationErrors, key: string): string {\n    if (errors[key]?.message) {\n      return errors[key].message;\n    }\n\n    if (this.validationMessages?.[key]) {\n      return this.validationMessages[key];\n    }\n\n    if (this.config.validationMessages?.[key]) {\n      return mapReplace(this.config.validationMessages[key], errors[key]);\n    }\n\n    return this.config.unknownErrorValidationMessage ?? '[This field is invalid]';\n  }\n\n  private removeValidationErrors(): void {\n    if (this._errorRef) {\n      this._errorRef.destroy();\n      this._errorRef = null;\n    }\n  }\n\n  private cacheValidationErrors(errors: FormatedError[]): void {\n    this._cachedValidationErrors = JSON.stringify(errors);\n  }\n\n  private clearCacheValidationErrors(): void {\n    this._cachedValidationErrors = '';\n  }\n\n  private isValidationErrorsChanged(errors: FormatedError[]): boolean {\n    return this._cachedValidationErrors !== JSON.stringify(errors);\n  }\n\n  private validate(errors: FormatedError[]): void {\n    if (!this.isValidationErrorsChanged(errors)) {\n      return;\n    }\n\n    const uiFrameWork = this.config.uiFrameWork === 'auto' ? this.detectUIFramework() : this.config.uiFrameWork;\n\n    switch (uiFrameWork) {\n      case UIFramework.Bootstrap:\n        this.bootstrapValidate(errors);\n        break;\n\n      case UIFramework.AngularMaterial:\n        this.angularMaterialValidate(errors);\n        break;\n\n      default:\n        this.defaultValidate(errors);\n        break;\n    }\n  }\n\n  private getViewContainerRef(): ViewContainerRef {\n    const targetRef = this.containerRef\n      ? this.containerRef.targetRef\n      : this.targetRef;\n    return targetRef ? targetRef.viewContainerRef : this.viewContainerRef;\n  }\n\n  private defaultValidate(errors: FormatedError[]): void {\n    this.removeValidationErrors();\n\n    if (this.shouldShowValidationError(errors)) {\n      this.defaultShowValidationError(errors);\n      this.cacheValidationErrors(errors);\n    } else {\n      this.clearCacheValidationErrors();\n    }\n  }\n\n  private defaultShowValidationError(errors: FormatedError[]): void {\n\n    const targetRef = this.containerRef ? this.containerRef.targetRef : this.targetRef;\n    const viewContainerRef = targetRef ? targetRef.viewContainerRef : this.viewContainerRef;\n\n    if (\n      this.validationMessagesTemplateRef &&\n      this.validationMessagesTemplateRef instanceof TemplateRef\n    ) {\n      this._errorRef = viewContainerRef.createEmbeddedView(\n        this.validationMessagesTemplateRef,\n        { $implicit: errors },\n        viewContainerRef.length\n      );\n    } else if (this.validationMessageComponent) {\n      this._errorRef = viewContainerRef.createComponent(\n        this.validationMessageComponent,\n        {\n          index: viewContainerRef.length\n        }\n      );\n\n      if (this._errorRef instanceof ComponentRef && this._errorRef.instance) {\n        this._errorRef.instance.errors = errors;\n        this.changeDetectorRef.detectChanges();\n      }\n    }\n  }\n\n  private bootstrapValidate(errors: FormatedError[]): void {\n    this.removeValidationErrors();\n\n    if (this.shouldShowValidationError(errors)) {\n      if (!this.hasCacheValidationErrors) {\n        this.bootstrapAddErrorClassToControl();\n      }\n      this.bootstrapShowValidationError(errors);\n      this.cacheValidationErrors(errors);\n    } else {\n      this.clearCacheValidationErrors();\n      this.bootstrapRemoveErrorClassFromControl();\n    }\n  }\n\n  private bootstrapAddErrorClassToControl(): void {\n    (this.elementRef.nativeElement as HTMLElement).classList.add('is-invalid');\n  }\n\n  private bootstrapRemoveErrorClassFromControl(): void {\n    (this.elementRef.nativeElement as HTMLElement).classList.remove('is-invalid');\n  }\n\n  private bootstrapShowValidationError(errors: FormatedError[]): void {\n    const targetRef = this.containerRef ? this.containerRef.targetRef : this.targetRef;\n    const viewContainerRef = targetRef ? targetRef.viewContainerRef : this.viewContainerRef;\n\n    if (\n      this.validationMessagesTemplateRef &&\n      this.validationMessagesTemplateRef instanceof TemplateRef\n    ) {\n      this._errorRef = viewContainerRef.createEmbeddedView(\n        this.validationMessagesTemplateRef,\n        { $implicit: errors },\n        viewContainerRef.length\n      );\n    } else if (this.validationMessageComponent) {\n      this._errorRef = viewContainerRef.createComponent(\n        this.validationMessageComponent,\n        {\n          index: viewContainerRef.length\n        }\n      );\n\n      if (this._errorRef instanceof ComponentRef && this._errorRef.instance) {\n        this._errorRef.instance.errors = errors;\n        this._errorRef.instance.classes = 'invalid-feedback';\n        this.changeDetectorRef.detectChanges();\n      }\n    }\n\n    if (!targetRef) {\n      let rootNode: HTMLElement | null = null;\n      if (this._errorRef instanceof ComponentRef) {\n        rootNode = (this._errorRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n      } else if (this._errorRef instanceof EmbeddedViewRef) {\n        rootNode = this._errorRef.rootNodes[0] as HTMLElement;\n      }\n\n      const containerTarget = (viewContainerRef.element.nativeElement as HTMLElement).parentElement;\n      if (rootNode && containerTarget) {\n        containerTarget.appendChild(rootNode);\n      }\n    }\n  }\n\n  private angularMaterialValidate(errors: FormatedError[]): void {\n    this.removeValidationErrors();\n\n    if (this.shouldShowValidationError(errors)) {\n      this.angularMaterialShowValidationError(errors);\n      this.cacheValidationErrors(errors);\n    } else {\n      this.clearCacheValidationErrors();\n    }\n  }\n\n  private angularMaterialShowValidationError(errors: FormatedError[]): void {\n    const viewContainerRef = this.viewContainerRef;\n\n    if (\n      this.validationMessagesTemplateRef &&\n      this.validationMessagesTemplateRef instanceof TemplateRef\n    ) {\n      this._errorRef = viewContainerRef.createEmbeddedView(\n        this.validationMessagesTemplateRef,\n        { $implicit: errors },\n        viewContainerRef.length\n      );\n    } else {\n      this._errorRef = viewContainerRef.createComponent(\n        MatValidationMessagesComponent,\n        {\n          index: viewContainerRef.length\n        }\n      );\n\n      if (this._errorRef instanceof ComponentRef && this._errorRef.instance) {\n        this._errorRef.instance.errors = errors;\n        this._errorRef.instance.classes = 'mat-mdc-form-field-error-wrapper';\n        this.changeDetectorRef.detectChanges();\n      }\n    }\n\n    let rootNode: HTMLElement | null = null;\n    if (this._errorRef instanceof ComponentRef) {\n      rootNode = (this._errorRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n    } else if (this._errorRef instanceof EmbeddedViewRef) {\n      rootNode = this._errorRef.rootNodes[0] as HTMLElement;\n    }\n\n    const selector = '.mat-mdc-form-field-subscript-wrapper';\n\n    const containerTarget = (this.matFormFieldDirective.elementRef.nativeElement as HTMLElement).querySelector(selector);\n    if (rootNode && containerTarget) {\n      containerTarget.appendChild(rootNode);\n    }\n  }\n\n  private detectUIFramework(): UIFramework {\n    const classList = (this.elementRef.nativeElement as HTMLElement).classList;\n    if (classList.contains('form-control') || classList.contains('form-select') || classList.contains('form-check-input')) {\n      return UIFramework.Bootstrap\n    }\n\n    if (this.matFormFieldDirective && (classList.contains('mat-mdc-input-element') || classList.contains('mat-mdc-select'))) {\n      return UIFramework.AngularMaterial\n    }\n\n    return UIFramework.None;\n  }\n}\n","import {\n  Validators as NgValidators,\n  ValidatorFn,\n  AbstractControl,\n  ValidationErrors,\n} from '@angular/forms';\n\nconst URL_REGEXP = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\n\nfunction isObject(arg: any): boolean {\n  return arg !== null && typeof arg === 'object' && !Array.isArray(arg);\n}\n\nfunction validate(\n  validatorFn: ValidatorFn,\n  validatorKey: string,\n  control: AbstractControl,\n  message: string\n): ValidationErrors | null {\n  const validationErrors = validatorFn(control);\n\n  if (message) {\n    if (validationErrors?.[validatorKey]) {\n      if (!isObject(validationErrors[validatorKey])) {\n        validationErrors[validatorKey] = {};\n      }\n\n      validationErrors[validatorKey].message = message;\n    }\n  }\n\n  return validationErrors;\n}\n\nfunction isEmptyInputValue(value: any): boolean {\n  /**\n   * Check if the object is a string or array before evaluating the length attribute.\n   * This avoids falsely rejecting objects that contain a custom length attribute.\n   * For example, the object {id: 1, length: 0, width: 0} should not be returned as empty.\n   */\n  return (\n    value == null ||\n    ((typeof value === 'string' || Array.isArray(value)) && value.length === 0)\n  );\n}\n\n/**\n * @description\n * Validator that requires the control's value to be greater than or equal to the provided number.\n *\n * @usageNotes\n *\n * ### Validate against a minimum of 3\n *\n * ```typescript\n * const control = new FormControl(2, min(3));\n *\n * console.log(control.errors); // {min: {min: 3, actual: 2}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `min` property if the validation check fails, otherwise `null`.\n *\n */\nexport function min(min: number, message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.min(min), 'min', control, message);\n  };\n}\n\n/**\n * @description\n * Validator that requires the control's value to be less than or equal to the provided number.\n *\n * @usageNotes\n *\n * ### Validate against a maximum of 15\n *\n * ```typescript\n * const control = new FormControl(16, max(15));\n *\n * console.log(control.errors); // {max: {max: 15, actual: 16}}\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `max` property if the validation check fails, otherwise `null`.\n *\n */\nexport function max(max: number, message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.max(max), 'max', control, message);\n  };\n}\n\n/**\n * @description\n * Validator that requires the control have a non-empty value.\n *\n * @usageNotes\n *\n * ### Validate that the field is non-empty\n *\n * ```typescript\n * const control = new FormControl('', Validators.required('This field is required'));\n *\n * console.log(control.errors); // {required: {message: 'This field is required'}}\n * ```\n *\n * @returns An error map with the `required` property\n * if the validation check fails, otherwise `null`.\n *\n *\n */\n\nexport function required(message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.required, 'required', control, message);\n  };\n}\n\n/**\n * @description\n * Validator that requires the control's value be true. This validator is commonly\n * used for required checkboxes.\n *\n * @usageNotes\n *\n * ### Validate that the field value is true\n *\n * ```typescript\n * const control = new FormControl('some value', Validators.requiredTrue('This field is required'));\n *\n * console.log(control.errors); // {required: {message: 'This field is required'}}\n * ```\n *\n * @returns An error map that contains the `required` property\n * set to `true` if the validation check fails, otherwise `null`.\n *\n *\n */\n\nexport function requiredTrue(message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.requiredTrue, 'required', control, message);\n  };\n}\n\n/**\n * @description\n * Validator that requires the control's value pass an email validation test.\n *\n * Tests the value using a [regular\n * expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\n * pattern suitable for common use cases. The pattern is based on the definition of a valid email\n * address in the [WHATWG HTML\n * specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with\n * some enhancements to incorporate more RFC rules (such as rules related to domain names and the\n * lengths of different parts of the address).\n *\n * The differences from the WHATWG version include:\n * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`).\n * - Disallow `local-part` to be longer than 64 characters.\n * - Disallow the whole address to be longer than 254 characters.\n *\n * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to\n * validate the value against a different pattern.\n *\n * @usageNotes\n *\n * ### Validate that the field matches a valid email pattern\n *\n * ```typescript\n * const control = new FormControl('bad@', Validators.email);\n *\n * console.log(control.errors); // {email: {message: 'Invalid email'}}\n * ```\n *\n * @returns An error map with the `email` property\n * if the validation check fails, otherwise `null`.\n *\n */\nexport function email(message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.email, 'email', control, message);\n  };\n}\n\n/**\n * @description\n * Validator that requires the length of the control's value to be greater than or equal\n * to the provided minimum length. This validator is also provided by default if you use the\n * the HTML5 `minlength` attribute. Note that the `minLength` validator is intended to be used\n * only for types that have a numeric `length` property, such as strings or arrays. The\n * `minLength` validator logic is also not invoked for values when their `length` property is 0\n * (for example in case of an empty string or an empty array), to support optional controls. You\n * can use the standard `required` validator if empty values should not be considered valid.\n *\n * @usageNotes\n *\n * ### Validate that the field has a minimum of 3 characters\n *\n * ```typescript\n * const control = new FormControl('ng', Validators.minLength(3));\n *\n * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}\n * ```\n *\n * ```html\n * <input minlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `minlength` property if the validation check fails, otherwise `null`.\n *\n * @see `updateValueAndValidity()`\n *\n */\nexport function minLength(minLength: number, message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(\n      NgValidators.minLength(minLength),\n      'minlength',\n      control,\n      message\n    );\n  };\n}\n\n/**\n * @description\n * Validator that requires the length of the control's value to be less than or equal\n * to the provided maximum length. This validator is also provided by default if you use the\n * the HTML5 `maxlength` attribute. Note that the `maxLength` validator is intended to be used\n * only for types that have a numeric `length` property, such as strings or arrays.\n *\n * @usageNotes\n *\n * ### Validate that the field has maximum of 5 characters\n *\n * ```typescript\n * const control = new FormControl('Angular', Validators.maxLength(5));\n *\n * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}\n * ```\n *\n * ```html\n * <input maxlength=\"5\">\n * ```\n *\n * @returns A validator function that returns an error map with the\n * `maxlength` property if the validation check fails, otherwise `null`.\n *\n * @see `updateValueAndValidity()`\n *\n */\nexport function maxLength(maxLength: number, message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(\n      NgValidators.maxLength(maxLength),\n      'maxlength',\n      control,\n      message\n    );\n  };\n}\n\n/**\n * @description\n * Validator that requires the control's value to match a regex pattern. This validator is also\n * provided by default if you use the HTML5 `pattern` attribute.\n *\n * @usageNotes\n *\n * ### Validate that the field only contains letters or spaces\n *\n * ```typescript\n * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));\n *\n * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}\n * ```\n *\n * ```html\n * <input pattern=\"[a-zA-Z ]*\">\n * ```\n *\n * ### Pattern matching with the global or sticky flag\n *\n * `RegExp` objects created with the `g` or `y` flags that are passed into `Validators.pattern`\n * can produce different results on the same input when validations are run consecutively. This is\n * due to how the behavior of `RegExp.prototype.test` is\n * specified in [ECMA-262](https://tc39.es/ecma262/#sec-regexpbuiltinexec)\n * (`RegExp` preserves the index of the last match when the global or sticky flag is used).\n * Due to this behavior, it is recommended that when using\n * `Validators.pattern` you **do not** pass in a `RegExp` object with either the global or sticky\n * flag enabled.\n *\n * ```typescript\n * // Not recommended (since the `g` flag is used)\n * const controlOne = new FormControl('1', Validators.pattern(/foo/g));\n *\n * // Good\n * const controlTwo = new FormControl('1', Validators.pattern(/foo/));\n * ```\n *\n * @param pattern A regular expression to be used as is to test the values, or a string.\n * If a string is passed, the `^` character is prepended and the `$` character is\n * appended to the provided string (if not already present), and the resulting regular\n * expression is used to test the values.\n *\n * @returns A validator function that returns an error map with the\n * `pattern` property if the validation check fails, otherwise `null`.\n *\n * @see `updateValueAndValidity()`\n *\n */\nexport function pattern(pattern: string | RegExp, message: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return validate(NgValidators.pattern(pattern), 'pattern', control, message);\n  };\n}\n\nexport function range(range: [number, number], message?: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    if (isEmptyInputValue(control.value) || isEmptyInputValue(range)) {\n      return null; // don't validate empty values to allow optional controls\n    }\n\n    const [min, max] = range;\n    const value = parseFloat(control.value);\n\n    if (isNaN(value)) {\n      return null;\n    }\n\n    return value < min || value > max\n      ? { range: { range, message, actual: control.value } }\n      : null;\n  };\n}\n\nexport function url(message?: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    if (isEmptyInputValue(control.value) || isEmptyInputValue(range)) {\n      return null; // don't validate empty values to allow optional controls\n    }\n\n    return URL_REGEXP.test(control.value) ? null : { url: { message } };\n  };\n}\n\nexport function equal(value: any, message?: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    if (isEmptyInputValue(control.value) || isEmptyInputValue(value)) {\n      return null; // don't validate empty values to allow optional controls\n    }\n\n    return value === control.value\n      ? null\n      : { equal: { requiredValue: value, actual: control.value, message } };\n  };\n};\n\nexport function equalTo(controlNamePath: string, message?: string): ValidatorFn {\n  let subscribe: boolean = false;\n\n  return (control: AbstractControl): ValidationErrors | null => {\n    const equalControl = control.root.get(controlNamePath);\n\n    if (isEmptyInputValue(control.value) || isEmptyInputValue(controlNamePath) || !equalControl) {\n      return null; // don't validate empty values to allow optional controls\n    }\n\n    if (!subscribe) {\n      subscribe = true;\n      equalControl.valueChanges.subscribe(() => {\n        control.updateValueAndValidity();\n      });\n    };\n\n    return equalControl.value === control.value\n      ? null\n      : { equalTo: { requiredValue: equalControl.value, actual: control.value, message } };\n  }\n}\n\nexport function noWhitespace(message?: string): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    return (control.value || '').trim().length ? null : { whitespace: { message } };\n  };\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormValidatorConfig, UIFramework } from './form-validator.model';\nimport { FORM_VALIDATOR_CONFIGURATION } from './form-validator-token';\nimport { DefaultValidationMessagesComponent } from './components';\nimport {\n  FormControlValidatorDirective,\n  FormGroupValidatorDirective,\n  MatFormFieldDirective,\n  ValidatorContainerDirective,\n  ValidatorTargetDirective\n} from './directives';\nimport { MatValidationMessagesComponent } from './components/mat-validation-messages/mat-validation-messages.component';\n\nexport const defaultFormValidationConfig: FormValidatorConfig = {\n  skipValidate: false,\n  uiFrameWork: UIFramework.Auto,\n  unknownErrorValidationMessage: '[This field is invalid]',\n  validationMessages: {\n    required: 'This field is required.',\n    email: 'Email is invalid',\n    max: 'Value should be less than or equal to {{ max }}.',\n    maxlength: '{{ requiredLength }} characters are allowed.',\n    min: 'Value should be greater than or equal to {{ min }}.',\n    minlength: 'Should have at least {{ requiredLength }} characters.',\n    pattern: 'Invalid pattern. Please review your input.',\n    range: 'Value should be in the range of {{ range }}',\n    url: 'URL is invalid.',\n  },\n  validationMessagesComponent: DefaultValidationMessagesComponent,\n  validateOn: ({ dirty, touched, submited }) => {\n    return (dirty && touched) || submited;\n  },\n}\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  declarations: [\n    DefaultValidationMessagesComponent,\n    MatValidationMessagesComponent,\n    FormControlValidatorDirective,\n    FormGroupValidatorDirective,\n    MatFormFieldDirective,\n    ValidatorContainerDirective,\n    ValidatorTargetDirective,\n  ],\n  providers: [\n    {\n      provide: FORM_VALIDATOR_CONFIGURATION,\n      useValue: defaultFormValidationConfig\n    }\n  ],\n  exports: [\n    FormControlValidatorDirective,\n    FormGroupValidatorDirective,\n    MatFormFieldDirective,\n    ValidatorContainerDirective,\n    ValidatorTargetDirective,\n  ],\n})\nexport class FormValidatorModule {\n  static configure(config: Partial<FormValidatorConfig>): ModuleWithProviders<FormValidatorModule> {\n    const formValidationConfig = { ...defaultFormValidationConfig, ...config };\n\n    return {\n      ngModule: FormValidatorModule,\n      providers: [\n        {\n          provide: FORM_VALIDATOR_CONFIGURATION,\n          useValue: formValidationConfig\n        }\n      ],\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-validator\n */\n\nexport * from './lib/components';\nexport * from './lib/directives';\nexport * from './lib/validators';\nexport * from './lib/form-validator-token';\nexport * from './lib/form-validator.model';\nexport * from './lib/form-validator.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.MatFormFieldDirective","i5.FormGroupValidatorDirective","NgValidators"],"mappings":";;;;;;;;;;MAGsB,+BAA+B,CAAA;AAArD,IAAA,WAAA,GAAA;QACE,IAAM,CAAA,MAAA,GAAoB,EAAE,CAAC;QAC7B,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;QAEb,IAAS,CAAA,SAAA,GAAmC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC;KACnE;AAAA;;ACKK,MAAO,kCAAmC,SAAQ,+BAA+B,CAAA;AAVvF,IAAA,WAAA,GAAA;;QAWiC,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AACrD,KAAA;;+HAFY,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,kCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EARnC,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAIU,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAV9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACtC,iBAAA,CAAA;8BAEgC,OAAO,EAAA,CAAA;sBAArC,WAAW;uBAAC,OAAO,CAAA;;;ACTtB,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,EAAE;AACvD,IAAA,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClE,UAAU,CAAC,eAAe,EAAE;QAC1B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;QACpD,OAAO,CAAC,wCAAwC,CAAC;KAClD,CAAC;AACH,CAAA,CAAC,CAAC;AAaG,MAAO,8BAA+B,SAAQ,+BAA+B,CAAA;AAXnF,IAAA,WAAA,GAAA;;QAYiC,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AACrD,KAAA;;2HAFY,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAT/B,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EAGW,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,kBAAkB,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAErB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,UAAU,EAAE,CAAC,kBAAkB,CAAC;AACjC,iBAAA,CAAA;8BAEgC,OAAO,EAAA,CAAA;sBAArC,WAAW;uBAAC,OAAO,CAAA;;;MCtBT,4BAA4B,GAAG,IAAI,cAAc,CAAsB,kCAAkC;;ICS1G,cAMX;AAND,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,gBAA+B,CAAA;AAC/B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EANW,aAAa,KAAb,aAAa,GAMxB,EAAA,CAAA,CAAA;;MCZY,wBAAwB,CAAA;AACnC,IAAA,WAAA,CAAmB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAI;;qHAD9C,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAxB,wBAAwB,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACpC,iBAAA,CAAA;;;MCEY,2BAA2B,CAAA;AAJxC,IAAA,WAAA,GAAA;QAK0C,IAAS,CAAA,SAAA,GAAoC,IAAI,CAAC;AAC3F,KAAA;;wHAFY,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,mGACxB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAD3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA,CAAA;8BAEyC,SAAS,EAAA,CAAA;sBAAhD,YAAY;uBAAC,wBAAwB,CAAA;;;MCF3B,iBAAiB,CAAA;AAC5B,IAAA,WAAA,CAAmB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KACpD;;8GAFU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,UAAU;AACrB,iBAAA,CAAA;;MAUY,qBAAqB,CAAA;AAChC,IAAA,WAAA,CAAmB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KACxC;;kHAFU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAArB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;;;MCOY,2BAA2B,CAAA;AAGtC,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,iCAAiC,CAAC;KAC/C;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QACE,IAAI,CAAC,MAAM,CAAC,YAAY;AACxB,YAAA,IAAI,CAAC,aAAa;YAClB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC;KACH;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,kBAAkB;AAC5B,cAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI;AAC9B,cAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;KAChC;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;KACrE;IAKD,WACmB,CAAA,UAAsB,EAItB,aAA4B,EAI5B,kBAAsC,EAGtC,MAA2B,EAI3B,iCAA8D,EAAA;QAf9D,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAItB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAI5B,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QAGtC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;QAI3B,IAAiC,CAAA,iCAAA,GAAjC,iCAAiC,CAA6B;QA3C1D,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAwBrC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAa,CAAC;AACpC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;KAmBxC;IAEJ,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACnC;AAGD,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,YAAY,eAAe,CAAC,EAAE;YAC/D,OAAO;AACR,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,UAAU;YAC9B,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,SAAA,CAAC,CAAC;KACJ;IAEO,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa,CAAC,YAAY;gBAChC,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,aAAA,CAAC,CAAC;SACJ,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa,CAAC,WAAW;gBAC/B,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,aAAA,CAAC,CAAC;SACJ,CAAC,CACH,CAAC;KACH;;AA7FU,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,uKAuC5B,4BAA4B,EAAA,EAAA,EAAA,KAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4GAvC3B,2BAA2B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA,CAAA;;0BAgCI,IAAI;;0BACJ,QAAQ;;0BAGR,IAAI;;0BACJ,QAAQ;;0BAGR,MAAM;2BAAC,4BAA4B,CAAA;;0BAGnC,QAAQ;;0BACR,QAAQ;4CA1CY,aAAa,EAAA,CAAA;sBAAnC,KAAK;uBAAC,cAAc,CAAA;gBAuDrB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AC/B9B,SAAU,WAAW,CAAC,IAAY,EAAA;AACtC,IAAA,OAAO,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;AACtC,CAAC;AAEe,SAAA,UAAU,CACxB,cAAsB,EACtB,KAAuB,EAAA;AAEvB,IAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AACtC,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AAED,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,cAAc,CAAC;AACvB,KAAA;AAED,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,IAAA,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3D,OAAO,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACjD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,KAAC,CAAC,CAAC;AACL,CAAC;MAMY,6BAA6B,CAAA;AAOxC,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,iCAAiC,CAAC;KAC/C;AAED,IAAA,IAAI,YAAY,GAAA;QACd,QACE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EACjC;KACH;AAED,IAAA,IAAI,0BAA0B,GAAA;AAC5B,QAAA,QACE,IAAI,CAAC,MAAM,CAAC,2BAA2B;AACvC,YAAA,kCAAkC,EAClC;KACH;AAWD,IAAA,IAAY,wBAAwB,GAAA;AAClC,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;KAC9C;IAED,WACmB,CAAA,iBAAoC,EACpC,cAA8B,EAC9B,OAAkB,EAClB,UAAsB,EACtB,gBAAkC,EAG3C,YAAyC,EAI1C,SAAmC,EAGzB,kBAAsC,EAGtC,MAA2B,EAG3B,qBAA4C,EAG7C,iCAA8D,EAAA;QAvB7D,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAW;QAClB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAG3C,IAAY,CAAA,YAAA,GAAZ,YAAY,CAA6B;QAI1C,IAAS,CAAA,SAAA,GAAT,SAAS,CAA0B;QAGzB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QAGtC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;QAG3B,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;QAG7C,IAAiC,CAAA,iCAAA,GAAjC,iCAAiC,CAA6B;QA9DzD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEpC,IAAkB,CAAA,kBAAA,GAA8B,IAAI,CAAC;QAErD,IAA6B,CAAA,6BAAA,GAA4B,IAAI,CAAC;AAqB/D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;QACpC,IAAS,CAAA,SAAA,GAGN,IAAI,CAAC;AAER,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAa,CAAC;QACpC,IAAuB,CAAA,uBAAA,GAAG,EAAE,CAAC;KA+BhC;IAEL,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;KAClD;IAEO,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACxC,OAAO;AACR,SAAA;AAED,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;aAClD,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAClC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAC/B;AACA,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxB,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC9B;AAEO,IAAA,yBAAyB,CAAC,MAAuB,EAAA;AACvD,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;AACvB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,EAC5C;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC5B,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK;AAClC,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS;AAC5C,SAAA,CAAC,CAAC;KACJ;IAEO,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAElD,OAAO;gBACL,GAAG,MAAM,CAAC,GAAG,CAAC;gBACd,OAAO;gBACP,GAAG;aACJ,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAEO,eAAe,CAAC,MAAwB,EAAE,GAAW,EAAA;AAC3D,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;AACxB,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,6BAA6B,IAAI,yBAAyB,CAAC;KAC/E;IAEO,sBAAsB,GAAA;QAC5B,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,SAAA;KACF;AAEO,IAAA,qBAAqB,CAAC,MAAuB,EAAA;QACnD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACvD;IAEO,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;KACnC;AAEO,IAAA,yBAAyB,CAAC,MAAuB,EAAA;QACvD,OAAO,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAChE;AAEO,IAAA,QAAQ,CAAC,MAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAE5G,QAAA,QAAQ,WAAW;AACjB,YAAA,KAAA,WAAA;AACE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM;AAER,YAAA,KAAA,kBAAA;AACE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM;AAER,YAAA;AACE,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;AACT,SAAA;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY;AACjC,cAAE,IAAI,CAAC,YAAY,CAAC,SAAS;AAC7B,cAAE,IAAI,CAAC,SAAS,CAAC;AACnB,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;KACvE;AAEO,IAAA,eAAe,CAAC,MAAuB,EAAA;QAC7C,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,SAAA;KACF;AAEO,IAAA,0BAA0B,CAAC,MAAuB,EAAA;AAExD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACnF,QAAA,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAExF,IACE,IAAI,CAAC,6BAA6B;AAClC,YAAA,IAAI,CAAC,6BAA6B,YAAY,WAAW,EACzD;YACA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAClD,IAAI,CAAC,6BAA6B,EAClC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,gBAAgB,CAAC,MAAM,CACxB,CAAC;AACH,SAAA;aAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAC/C,IAAI,CAAC,0BAA0B,EAC/B;gBACE,KAAK,EAAE,gBAAgB,CAAC,MAAM;AAC/B,aAAA,CACF,CAAC;YAEF,IAAI,IAAI,CAAC,SAAS,YAAY,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;AACxC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACxC,aAAA;AACF,SAAA;KACF;AAEO,IAAA,iBAAiB,CAAC,MAAuB,EAAA;QAC/C,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAClC,IAAI,CAAC,+BAA+B,EAAE,CAAC;AACxC,aAAA;AACD,YAAA,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,oCAAoC,EAAE,CAAC;AAC7C,SAAA;KACF;IAEO,+BAA+B,GAAA;QACpC,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KAC5E;IAEO,oCAAoC,GAAA;QACzC,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC/E;AAEO,IAAA,4BAA4B,CAAC,MAAuB,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACnF,QAAA,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAExF,IACE,IAAI,CAAC,6BAA6B;AAClC,YAAA,IAAI,CAAC,6BAA6B,YAAY,WAAW,EACzD;YACA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAClD,IAAI,CAAC,6BAA6B,EAClC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,gBAAgB,CAAC,MAAM,CACxB,CAAC;AACH,SAAA;aAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAC/C,IAAI,CAAC,0BAA0B,EAC/B;gBACE,KAAK,EAAE,gBAAgB,CAAC,MAAM;AAC/B,aAAA,CACF,CAAC;YAEF,IAAI,IAAI,CAAC,SAAS,YAAY,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,GAAG,kBAAkB,CAAC;AACrD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACxC,aAAA;AACF,SAAA;QAED,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,QAAQ,GAAuB,IAAI,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,SAAS,YAAY,YAAY,EAAE;gBAC1C,QAAQ,GAAI,IAAI,CAAC,SAAS,CAAC,QAAiC,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC;AAC1F,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,SAAS,YAAY,eAAe,EAAE;gBACpD,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC;AACvD,aAAA;YAED,MAAM,eAAe,GAAI,gBAAgB,CAAC,OAAO,CAAC,aAA6B,CAAC,aAAa,CAAC;YAC9F,IAAI,QAAQ,IAAI,eAAe,EAAE;AAC/B,gBAAA,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACvC,aAAA;AACF,SAAA;KACF;AAEO,IAAA,uBAAuB,CAAC,MAAuB,EAAA;QACrD,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,SAAA;KACF;AAEO,IAAA,kCAAkC,CAAC,MAAuB,EAAA;AAChE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE/C,IACE,IAAI,CAAC,6BAA6B;AAClC,YAAA,IAAI,CAAC,6BAA6B,YAAY,WAAW,EACzD;YACA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAClD,IAAI,CAAC,6BAA6B,EAClC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,gBAAgB,CAAC,MAAM,CACxB,CAAC;AACH,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAC/C,8BAA8B,EAC9B;gBACE,KAAK,EAAE,gBAAgB,CAAC,MAAM;AAC/B,aAAA,CACF,CAAC;YAEF,IAAI,IAAI,CAAC,SAAS,YAAY,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,GAAG,kCAAkC,CAAC;AACrE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACxC,aAAA;AACF,SAAA;QAED,IAAI,QAAQ,GAAuB,IAAI,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,YAAY,YAAY,EAAE;YAC1C,QAAQ,GAAI,IAAI,CAAC,SAAS,CAAC,QAAiC,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC;AAC1F,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,SAAS,YAAY,eAAe,EAAE;YACpD,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC;AACvD,SAAA;QAED,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AAEzD,QAAA,MAAM,eAAe,GAAI,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrH,IAAI,QAAQ,IAAI,eAAe,EAAE;AAC/B,YAAA,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAA;KACF;IAEO,iBAAiB,GAAA;QACvB,MAAM,SAAS,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,SAAS,CAAC;QAC3E,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YACrH,OAA4B,WAAA,6BAAA;AAC7B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE;YACvH,OAAkC,kBAAA,mCAAA;AACnC,SAAA;QAED,OAAwB,MAAA,wBAAA;KACzB;;AA/WU,6BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,uVAwD9B,4BAA4B,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;8GAxD3B,6BAA6B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA,CAAA;;0BA+CI,QAAQ;;0BAGR,QAAQ;;0BACR,QAAQ;;0BAGR,QAAQ;;0BAGR,MAAM;2BAAC,4BAA4B,CAAA;;0BAGnC,QAAQ;;0BAGR,QAAQ;4CA7DY,aAAa,EAAA,CAAA;sBAAnC,KAAK;uBAAC,cAAc,CAAA;gBAEZ,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,6BAA6B,EAAA,CAAA;sBAArC,KAAK;gBAuEN,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AC7IlC,MAAM,UAAU,GAAG,0cAA0c,CAAC;AAE9d,SAAS,QAAQ,CAAC,GAAQ,EAAA;AACxB,IAAA,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,QAAQ,CACf,WAAwB,EACxB,YAAoB,EACpB,OAAwB,EACxB,OAAe,EAAA;AAEf,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAE9C,IAAA,IAAI,OAAO,EAAE;AACX,QAAA,IAAI,gBAAgB,GAAG,YAAY,CAAC,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE;AAC7C,gBAAA,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AACrC,aAAA;AAED,YAAA,gBAAgB,CAAC,YAAY,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;AAClD,SAAA;AACF,KAAA;AAED,IAAA,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU,EAAA;AACnC;;;;AAIG;IACH,QACE,KAAK,IAAI,IAAI;SACZ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3E;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;AAiBG;AACa,SAAA,GAAG,CAAC,GAAW,EAAE,OAAe,EAAA;IAC9C,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACC,UAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAClE,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;AAiBG;AACa,SAAA,GAAG,CAAC,GAAW,EAAE,OAAe,EAAA;IAC9C,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACA,UAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAClE,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AAEG,SAAU,QAAQ,CAAC,OAAe,EAAA;IACtC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACA,UAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACvE,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;AAmBG;AAEG,SAAU,YAAY,CAAC,OAAe,EAAA;IAC1C,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACA,UAAY,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3E,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACG,SAAU,KAAK,CAAC,OAAe,EAAA;IACnC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACA,UAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjE,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACa,SAAA,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAA;IAC1D,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CACbA,UAAY,CAAC,SAAS,CAAC,SAAS,CAAC,EACjC,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAC;AACJ,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AACa,SAAA,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAA;IAC1D,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CACbA,UAAY,CAAC,SAAS,CAAC,SAAS,CAAC,EACjC,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAC;AACJ,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;AACa,SAAA,OAAO,CAAC,OAAwB,EAAE,OAAe,EAAA;IAC/D,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,OAAO,QAAQ,CAACA,UAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9E,KAAC,CAAC;AACJ,CAAC;AAEe,SAAA,KAAK,CAAC,KAAuB,EAAE,OAAgB,EAAA;IAC7D,OAAO,CAAC,OAAwB,KAA6B;QAC3D,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAExC,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG;AAC/B,cAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;cACpD,IAAI,CAAC;AACX,KAAC,CAAC;AACJ,CAAC;AAEK,SAAU,GAAG,CAAC,OAAgB,EAAA;IAClC,OAAO,CAAC,OAAwB,KAA6B;QAC3D,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;AACb,SAAA;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AACtE,KAAC,CAAC;AACJ,CAAC;AAEe,SAAA,KAAK,CAAC,KAAU,EAAE,OAAgB,EAAA;IAChD,OAAO,CAAC,OAAwB,KAA6B;QAC3D,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,KAAK,KAAK,OAAO,CAAC,KAAK;AAC5B,cAAE,IAAI;AACN,cAAE,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC1E,KAAC,CAAC;AACJ,CAAC;AAAA,CAAC;AAEc,SAAA,OAAO,CAAC,eAAuB,EAAE,OAAgB,EAAA;IAC/D,IAAI,SAAS,GAAY,KAAK,CAAC;IAE/B,OAAO,CAAC,OAAwB,KAA6B;QAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEvD,QAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE;YAC3F,OAAO,IAAI,CAAC;AACb,SAAA;QAED,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,CAAC;AACjB,YAAA,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;gBACvC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACnC,aAAC,CAAC,CAAC;AACJ,SAAA;QAAA,CAAC;AAEF,QAAA,OAAO,YAAY,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;AACzC,cAAE,IAAI;cACJ,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACzF,KAAC,CAAA;AACH,CAAC;AAEK,SAAU,YAAY,CAAC,OAAgB,EAAA;IAC3C,OAAO,CAAC,OAAwB,KAA6B;QAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AAClF,KAAC,CAAC;AACJ;;ACtXa,MAAA,2BAA2B,GAAwB;AAC9D,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAkB,MAAA;AAC7B,IAAA,6BAA6B,EAAE,yBAAyB;AACxD,IAAA,kBAAkB,EAAE;AAClB,QAAA,QAAQ,EAAE,yBAAyB;AACnC,QAAA,KAAK,EAAE,kBAAkB;AACzB,QAAA,GAAG,EAAE,kDAAkD;AACvD,QAAA,SAAS,EAAE,8CAA8C;AACzD,QAAA,GAAG,EAAE,qDAAqD;AAC1D,QAAA,SAAS,EAAE,uDAAuD;AAClE,QAAA,OAAO,EAAE,4CAA4C;AACrD,QAAA,KAAK,EAAE,6CAA6C;AACpD,QAAA,GAAG,EAAE,iBAAiB;AACvB,KAAA;AACD,IAAA,2BAA2B,EAAE,kCAAkC;IAC/D,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAI;AAC3C,QAAA,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,QAAQ,CAAC;KACvC;EACF;MA6BY,mBAAmB,CAAA;IAC9B,OAAO,SAAS,CAAC,MAAoC,EAAA;QACnD,MAAM,oBAAoB,GAAG,EAAE,GAAG,2BAA2B,EAAE,GAAG,MAAM,EAAE,CAAC;QAE3E,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,4BAA4B;AACrC,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;AACF,aAAA;SACF,CAAC;KACH;;gHAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBAtB5B,kCAAkC;QAClC,8BAA8B;QAC9B,6BAA6B;QAC7B,2BAA2B;QAC3B,qBAAqB;QACrB,2BAA2B;QAC3B,wBAAwB,CAAA,EAAA,OAAA,EAAA,CATxB,YAAY,CAAA,EAAA,OAAA,EAAA,CAkBZ,6BAA6B;QAC7B,2BAA2B;QAC3B,qBAAqB;QACrB,2BAA2B;QAC3B,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAdnB,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,4BAA4B;AACrC,YAAA,QAAQ,EAAE,2BAA2B;AACtC,SAAA;AACF,KAAA,EAAA,OAAA,EAAA,CAhBC,YAAY,CAAA,EAAA,CAAA,CAAA;2FAyBH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA3B/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,kCAAkC;wBAClC,8BAA8B;wBAC9B,6BAA6B;wBAC7B,2BAA2B;wBAC3B,qBAAqB;wBACrB,2BAA2B;wBAC3B,wBAAwB;AACzB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,2BAA2B;AACtC,yBAAA;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,6BAA6B;wBAC7B,2BAA2B;wBAC3B,qBAAqB;wBACrB,2BAA2B;wBAC3B,wBAAwB;AACzB,qBAAA;AACF,iBAAA,CAAA;;;AC9DD;;AAEG;;ACFH;;AAEG;;;;"}