{"version":3,"file":"nicky-lenaers-ngx-scroll-to.mjs","sources":["../../../projects/ngx-scroll-to/src/lib/scroll-to-helpers.ts","../../../projects/ngx-scroll-to/src/lib/scroll-to-animation.ts","../../../projects/ngx-scroll-to/src/lib/scroll-to.service.ts","../../../projects/ngx-scroll-to/src/lib/scroll-to.directive.ts","../../../projects/ngx-scroll-to/src/lib/scroll-to.module.ts","../../../projects/ngx-scroll-to/src/public-api.ts","../../../projects/ngx-scroll-to/src/nicky-lenaers-ngx-scroll-to.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport { ScrollToAnimationEasingCollection } from './scroll-to-easing.interface';\nimport { ScrollToDefaultConfigOptions } from './scroll-to-config.interface';\n\n/** Default values for Component Input */\nexport const DEFAULTS: ScrollToDefaultConfigOptions = {\n  target: null,\n  action: 'click',\n  duration: 650,\n  easing: 'easeInOutQuad',\n  offset: 0,\n  offsetMap: new Map()\n};\n\n/** Easing Colleciton */\nexport const EASING: ScrollToAnimationEasingCollection = {\n  easeInQuad: (time: number) => {\n    return time * time;\n  },\n  easeOutQuad: (time: number) => {\n    return time * (2 - time);\n  },\n  easeInOutQuad: (time: number) => {\n    return time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time;\n  },\n  easeInCubic: (time: number) => {\n    return time * time * time;\n  },\n  easeOutCubic: (time: number) => {\n    return (--time) * time * time + 1;\n  },\n  easeInOutCubic: (time: number) => {\n    return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1;\n  },\n  easeInQuart: (time: number) => {\n    return time * time * time * time;\n  },\n  easeOutQuart: (time: number) => {\n    return 1 - (--time) * time * time * time;\n  },\n  easeInOutQuart: (time: number) => {\n    return time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time;\n  },\n  easeInQuint: (time: number) => {\n    return time * time * time * time * time;\n  },\n  easeOutQuint: (time: number) => {\n    return 1 + (--time) * time * time * time * time;\n  },\n  easeInOutQuint: (time: number) => {\n    return time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time;\n  },\n  easeOutElastic: (time: number) => {\n    return Math.pow(2, -10 * time) * Math.sin((time - 1 / 4) * (2 * Math.PI) / 1) + 1;\n  }\n};\n\n/**\n * Set of allowed events as triggers\n * for the Animation to start.\n */\nexport const EVENTS: string[] = [\n  'click',\n  'mouseenter',\n  'mouseover',\n  'mousedown',\n  'mouseup',\n  'dblclick',\n  'contextmenu',\n  'wheel',\n  'mouseleave',\n  'mouseout'\n];\n\n/**\n * Strip hash (#) from value.\n *\n * @param value \t\t\t\tThe given string value\n * @returns \t\t\t\t\tThe stripped string value\n */\nexport function stripHash(value: string): string {\n  return value.substring(0, 1) === '#' ? value.substring(1) : value;\n}\n\n/**\n * Test if a given value is a string.\n *\n * @param value \t\t\t\t\tThe given value\n * @returns \t\t\t\t\t\tWhether the given value is a string\n */\nexport function isString(value: any): value is string {\n  return typeof value === 'string' || value instanceof String;\n}\n\n/**\n * Test if a given Element is the Window.\n *\n * @param container \t\t\t\tThe given Element\n * @returns \t\t\t\t\t\tWhether the given Element is Window\n */\nexport function isWindow(container: any): container is Window {\n  return container === window;\n}\n\n/**\n * Test if a given value is of type ElementRef.\n *\n * @param value \t\t\t\t\tThe given value\n * @returns               Whether the given value is a number\n */\nexport function isElementRef(value: any): value is ElementRef {\n  return value instanceof ElementRef;\n}\n\n/**\n * Whether or not the given value is a Native Element.\n *\n * @param value           The given value\n * @returns               Whether or not the value is a Native Element\n */\nexport function isNativeElement(value: any): value is HTMLElement {\n  return value instanceof HTMLElement;\n}\n\n/**\n * Test if a given value is type number.\n *\n * @param value \t\t\t\t\tThe given value\n * @returns \t\t\t\t\t\tWhether the given value is a number\n */\nexport function isNumber(value: any): value is number {\n  return !isNaN(parseFloat(value)) && isFinite(value);\n}\n","import { Observable, ReplaySubject } from 'rxjs';\n\nimport { EASING } from './scroll-to-helpers';\nimport { ScrollToConfigOptions, ScrollToListenerTarget } from './scroll-to-config.interface';\n\n/** Scroll To Animation */\nexport class ScrollToAnimation {\n\n  /** Number of milliseconds for each Tick */\n  private tick: number;\n\n  /** Interval */\n  private interval: any;\n\n  /** Time Lapsed in milliseconds */\n  private timeLapsed: number;\n\n  /** Percentage of time lapsed */\n  private percentage: number;\n\n  /** Position of the Element */\n  private position: number;\n\n  /** Last Element Position */\n  private lastPosition: number;\n\n  /** Start Position of the Element */\n  private startPosition: number;\n\n  /** The Distance to scroll */\n  private distance: number;\n\n  /** Observable Source */\n  private source$: ReplaySubject<number>;\n\n  /** Scroll Top of the Window */\n  private windowScrollTop: number;\n\n  /** Mapped Offset taken from the active Offset Map */\n  private mappedOffset: number;\n\n  /**\n   * Class Constructor.\n   *\n   * @param container            The Container\n   * @param listenerTarget       The Element that listens for DOM Events\n   * @param isWindow             Whether or not the listener is the Window\n   * @param to                   Position to scroll to\n   * @param options              Additional options for scrolling\n   * @param isBrowser            Whether or not execution runs in the browser\n   *                              (as opposed to the server)\n   */\n  constructor(\n    private container: HTMLElement,\n    private listenerTarget: ScrollToListenerTarget,\n    private readonly isWindow: boolean,\n    private readonly to: number,\n    private readonly options: ScrollToConfigOptions,\n    private isBrowser: boolean\n  ) {\n    this.tick = 16;\n    this.interval = null;\n    this.lastPosition = null;\n    this.timeLapsed = 0;\n\n    this.windowScrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n\n    if (!this.container) {\n      this.startPosition = this.windowScrollTop;\n    } else {\n      this.startPosition = this.isWindow ? this.windowScrollTop : this.container.scrollTop;\n    }\n\n    // Correction for Starting Position of nested HTML Elements\n    if (this.container && !this.isWindow) {\n      this.to = this.to - this.container.getBoundingClientRect().top + this.startPosition;\n    }\n\n    // Set Distance\n    const directionalDistance = this.startPosition - this.to;\n    this.distance = this.container ? Math.abs(this.startPosition - this.to) : this.to;\n\n    this.mappedOffset = this.options.offset;\n\n    // Set offset from Offset Map\n    if (this.isBrowser) {\n      this.options\n        .offsetMap\n        .forEach((value, key) => this.mappedOffset = window.innerWidth > key ? value : this.mappedOffset);\n    }\n\n    this.distance += this.mappedOffset * (directionalDistance <= 0 ? 1 : -1);\n    this.source$ = new ReplaySubject();\n  }\n\n  /**\n   * Start the new Scroll Animation.\n   *\n   * @returns         Observable containing a number\n   */\n  start(): Observable<number> {\n    clearInterval(this.interval);\n    this.interval = setInterval(this.loop, this.tick);\n    return this.source$.asObservable();\n  }\n\n  /**\n   * Stop the current Scroll Animation Loop.\n   *\n   * @param force          Force to stop the Animation Loop\n   * @returns               Void\n   */\n  stop(): void {\n    clearInterval(this.interval);\n    this.interval = null;\n    this.source$.complete();\n  }\n\n  /** Recursively loop over the Scroll Animation */\n  private loop = (): void => {\n\n    this.timeLapsed += this.tick;\n    this.percentage = (this.timeLapsed / this.options.duration);\n    this.percentage = (this.percentage > 1) ? 1 : this.percentage;\n\n    // Position Update\n    this.position = this.startPosition +\n      ((this.startPosition - this.to <= 0 ? 1 : -1) *\n        this.distance *\n        EASING[this.options.easing](this.percentage));\n\n    if (this.lastPosition !== null && this.position === this.lastPosition) {\n      this.stop();\n    } else {\n      this.source$.next(this.position);\n      this.isWindow\n        ? this.listenerTarget.scrollTo(0, Math.floor(this.position))\n        : this.container.scrollTop = Math.floor(this.position);\n      this.lastPosition = this.position;\n    }\n  }\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nimport {\n  ScrollToConfigOptions,\n  ScrollToConfigOptionsTarget,\n  ScrollToListenerTarget,\n  ScrollToTarget\n} from './scroll-to-config.interface';\nimport { ScrollToAnimation } from './scroll-to-animation';\nimport { DEFAULTS, isElementRef, isNativeElement, isNumber, isString, isWindow, stripHash } from './scroll-to-helpers';\nimport { Observable, ReplaySubject, throwError } from 'rxjs';\n\n/**\n * The Scroll To Service handles starting, interrupting\n * and ending the actual Scroll Animation. It provides\n * some utilities to find the proper HTML Element on a\n * given page to setup Event Listeners and calculate\n * distances for the Animation.\n */\n@Injectable()\nexport class ScrollToService {\n\n  /**\n   * The animation that provides the scrolling\n   * to happen smoothly over time. Defining it here\n   * allows for usage of e.g. `start` and `stop`\n   * methods within this Angular Service.\n   */\n  private animation: ScrollToAnimation;\n\n  /**\n   * Interruptive Events allow to scrolling animation\n   * to be interrupted before it is finished. The list\n   * of Interruptive Events represents those.\n   */\n  private interruptiveEvents: string[];\n\n  /**\n   * Construct and setup required paratemeters.\n   *\n   * @param document         A Reference to the Document\n   * @param platformId       Angular Platform ID\n   */\n  constructor(\n    @Inject(DOCUMENT) private document: any,\n    @Inject(PLATFORM_ID) private platformId: any\n  ) {\n    this.interruptiveEvents = ['mousewheel', 'DOMMouseScroll', 'touchstart'];\n  }\n\n  /**\n   * Target an Element to scroll to. Notice that the `TimeOut` decorator\n   * ensures the executing to take place in the next Angular lifecycle.\n   * This allows for scrolling to elements that are e.g. initially hidden\n   * by means of `*ngIf`, but ought to be scrolled to eventually.\n   *\n   * @todo type 'any' in Observable should become custom type like 'ScrollToEvent' (base class), see issue comment:\n   *  - https://github.com/nicky-lenaers/ngx-scroll-to/issues/10#issuecomment-317198481\n   *\n   * @param options         Configuration Object\n   * @returns               Observable\n   */\n  scrollTo(options: ScrollToConfigOptions): Observable<any> {\n\n    if (!isPlatformBrowser(this.platformId)) {\n      return new ReplaySubject().asObservable();\n    }\n\n    return this.start(options);\n  }\n\n  /**\n   * Start a new Animation.\n   *\n   * @todo Emit proper events from subscription\n   *\n   * @param options         Configuration Object\n   * @returns               Observable\n   */\n  private start(options: ScrollToConfigOptions): Observable<number> {\n\n    // Merge config with default values\n    const mergedConfigOptions = {\n      ...DEFAULTS as ScrollToConfigOptions,\n      ...options\n    } as ScrollToConfigOptionsTarget;\n\n    if (this.animation) {\n      this.animation.stop();\n    }\n\n    const targetNode = this.getNode(mergedConfigOptions.target);\n    if (mergedConfigOptions.target && !targetNode) {\n      return throwError(() => new Error('Unable to find Target Element'));\n    }\n\n    const container: HTMLElement = this.getContainer(mergedConfigOptions, targetNode);\n    if (mergedConfigOptions.container && !container) {\n      return throwError(() => new Error('Unable to find Container Element'));\n    }\n\n    const listenerTarget = this.getListenerTarget(container) || window;\n\n    let to = container ? container.getBoundingClientRect().top : 0;\n\n    if (targetNode) {\n      to = isWindow(listenerTarget) ?\n        window.scrollY + targetNode.getBoundingClientRect().top :\n        targetNode.getBoundingClientRect().top;\n    }\n\n    // Create Animation\n    this.animation = new ScrollToAnimation(\n      container,\n      listenerTarget,\n      isWindow(listenerTarget),\n      to,\n      mergedConfigOptions,\n      isPlatformBrowser(this.platformId)\n    );\n    const onInterrupt = () => this.animation.stop();\n    this.addInterruptiveEventListeners(listenerTarget, onInterrupt);\n\n    // Start Animation\n    const animation$ = this.animation.start();\n    this.subscribeToAnimation(animation$, listenerTarget, onInterrupt);\n\n    return animation$;\n  }\n\n  /**\n   * Subscribe to the events emitted from the Scrolling\n   * Animation. Events might be used for e.g. unsubscribing\n   * once finished.\n   *\n   * @param animation$              The Animation Observable\n   * @param listenerTarget          The Listener Target for events\n   * @param onInterrupt             The handler for Interruptive Events\n   * @returns                       Void\n   */\n  private subscribeToAnimation(\n    animation$: Observable<any>,\n    listenerTarget: ScrollToListenerTarget,\n    onInterrupt: EventListenerOrEventListenerObject\n  ) {\n    const subscription = animation$\n      .subscribe(\n        {\n          complete: () => {\n            this.removeInterruptiveEventListeners(this.interruptiveEvents, listenerTarget, onInterrupt);\n            subscription.unsubscribe();\n          }\n        }\n      );\n  }\n\n  /**\n   * Get the container HTML Element in which\n   * the scrolling should happen.\n   *\n   * @param options         The Merged Configuration Object\n   * @param targetNode    the targeted HTMLElement\n   */\n  private getContainer(options: ScrollToConfigOptions, targetNode: HTMLElement): HTMLElement | null {\n\n    let container: HTMLElement | null = null;\n\n    if (options.container) {\n      container = this.getNode(options.container, true);\n    } else if (targetNode) {\n      container = this.getFirstScrollableParent(targetNode);\n    }\n\n    return container;\n  }\n\n  /**\n   * Add listeners for the Animation Interruptive Events\n   * to the Listener Target.\n   *\n   * @param events            List of events to listen to\n   * @param listenerTarget    Target to attach the listener on\n   * @param handler           Handler for when the listener fires\n   * @returns                 Void\n   */\n  private addInterruptiveEventListeners(\n    listenerTarget: ScrollToListenerTarget,\n    handler: EventListenerOrEventListenerObject): void {\n\n    if (!listenerTarget) {\n      listenerTarget = window;\n    }\n\n    this.interruptiveEvents\n      .forEach(event => listenerTarget\n        .addEventListener(event, handler, this.supportPassive() ? {passive: true} : false));\n  }\n\n  /**\n   * Feature-detect support for passive event listeners.\n   *\n   * @returns       Whether or not passive event listeners are supported\n   */\n  private supportPassive(): boolean {\n\n    let supportsPassive = false;\n\n    try {\n      const opts = Object.defineProperty({}, 'passive', {\n        get: () => {\n          supportsPassive = true;\n        }\n      });\n      window.addEventListener('testPassive', null, opts);\n      window.removeEventListener('testPassive', null, opts);\n    } catch (e) {\n    }\n\n    return supportsPassive;\n  }\n\n  /**\n   * Remove listeners for the Animation Interrupt Event from\n   * the Listener Target. Specifying the correct handler prevents\n   * memory leaks and makes the allocated memory available for\n   * Garbage Collection.\n   *\n   * @param events            List of Interruptive Events to remove\n   * @param listenerTarget    Target to attach the listener on\n   * @param handler           Handler for when the listener fires\n   * @returns                 Void\n   */\n  private removeInterruptiveEventListeners(\n    events: string[],\n    listenerTarget: ScrollToListenerTarget,\n    handler: EventListenerOrEventListenerObject): void {\n\n    if (!listenerTarget) {\n      listenerTarget = window;\n    }\n    events.forEach(event => listenerTarget.removeEventListener(event, handler));\n  }\n\n  /**\n   * Find the first scrollable parent Node of a given\n   * Element. The DOM Tree gets searched upwards\n   * to find this first scrollable parent. Parents might\n   * be ignored by CSS styles applied to the HTML Element.\n   *\n   * @param nativeElement     The Element to search the DOM Tree upwards from\n   * @returns                 The first scrollable parent HTML Element\n   */\n  private getFirstScrollableParent(nativeElement: HTMLElement): HTMLElement {\n\n    let style: CSSStyleDeclaration = window.getComputedStyle(nativeElement);\n\n    const overflowRegex: RegExp = /(auto|scroll|overlay)/;\n\n    if (style.position === 'fixed') {\n      return null;\n    }\n\n    let parent = nativeElement;\n    while (parent.parentElement) {\n      parent = parent.parentElement;\n      style = window.getComputedStyle(parent);\n\n      if (style.position === 'absolute'\n        || style.overflow === 'hidden'\n        || style.overflowY === 'hidden') {\n        continue;\n      }\n\n      if (overflowRegex.test(style.overflow + style.overflowY)\n        || parent.tagName === 'BODY') {\n        return parent;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the Target Node to scroll to.\n   *\n   * @param id              The given ID of the node, either a string or\n   *                        an element reference\n   * @param allowBodyTag    Indicate whether or not the Document Body is\n   *                        considered a valid Target Node\n   * @returns               The Target Node to scroll to\n   */\n  private getNode(id: ScrollToTarget, allowBodyTag: boolean = false): HTMLElement {\n\n    let targetNode: HTMLElement;\n\n    if (isString(id)) {\n      if (allowBodyTag && (id === 'body' || id === 'BODY')) {\n        targetNode = this.document.body;\n      } else {\n        targetNode = this.document.getElementById(stripHash(id));\n      }\n    } else if (isNumber(id)) {\n      targetNode = this.document.getElementById(String(id));\n    } else if (isElementRef(id)) {\n      targetNode = id.nativeElement;\n    } else if (isNativeElement(id)) {\n      targetNode = id;\n    }\n\n    return targetNode;\n  }\n\n  /**\n   * Retrieve the Listener target. This Listener Target is used\n   * to attach Event Listeners on. In case of the target being\n   * the Document Body, we need the actual `window` to listen\n   * for events.\n   *\n   * @param container           The HTML Container element\n   * @returns                   The Listener Target to attach events on\n   */\n  private getListenerTarget(container: HTMLElement): ScrollToListenerTarget {\n    if (!container) {\n      return null;\n    }\n    return this.isDocumentBody(container) ? window : container;\n  }\n\n  /**\n   * Test if a given HTML Element is the Document Body.\n   *\n   * @param element             The given HTML Element\n   * @returns                   Whether or not the Element is the\n   *                            Document Body Element\n   */\n  private isDocumentBody(element: HTMLElement): element is HTMLBodyElement {\n    return element.tagName.toUpperCase() === 'BODY';\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, Renderer2 } from '@angular/core';\n\nimport { DEFAULTS, EVENTS } from './scroll-to-helpers';\nimport { ScrollToConfigOptions, ScrollToOffsetMap, ScrollToTarget } from './scroll-to-config.interface';\nimport { ScrollToAnimationEasing } from './scroll-to-easing.interface';\nimport { ScrollToEvent } from './scroll-to-event.interface';\nimport { ScrollToService } from './scroll-to.service';\n\n@Directive({\n  selector: '[ngxScrollTo]'\n})\nexport class ScrollToDirective implements AfterViewInit {\n\n  @Input()\n  ngxScrollTo: ScrollToTarget = DEFAULTS.target;\n\n  @Input()\n  ngxScrollToEvent: ScrollToEvent = DEFAULTS.action;\n\n  @Input()\n  ngxScrollToDuration: number = DEFAULTS.duration;\n\n  @Input()\n  ngxScrollToEasing: ScrollToAnimationEasing = DEFAULTS.easing;\n\n  @Input()\n  ngxScrollToOffset: number = DEFAULTS.offset;\n\n  @Input()\n  ngxScrollToOffsetMap: ScrollToOffsetMap = DEFAULTS.offsetMap;\n\n  private options: ScrollToConfigOptions;\n\n  constructor(\n    private elementRef: ElementRef,\n    private scrollToService: ScrollToService,\n    private renderer2: Renderer2) {\n  }\n\n  /**\n   * Angular Lifecycle Hook - After View Init\n   *\n   * @todo Implement Subscription for Events\n   *\n   * @returns void\n   */\n  ngAfterViewInit(): void {\n\n    // Test Event Support\n    if (EVENTS.indexOf(this.ngxScrollToEvent) === -1) {\n      throw new Error(`Unsupported Event '${this.ngxScrollToEvent}'`);\n    }\n\n    // Listen for the trigger...\n    this.renderer2.listen(this.elementRef.nativeElement, this.ngxScrollToEvent,\n      (event: Event) => {\n\n        this.options = {\n          target: this.ngxScrollTo,\n          duration: this.ngxScrollToDuration,\n          easing: this.ngxScrollToEasing,\n          offset: this.ngxScrollToOffset,\n          offsetMap: this.ngxScrollToOffsetMap\n        };\n\n        this.scrollToService.scrollTo(this.options);\n      });\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { ScrollToDirective } from './scroll-to.directive';\nimport { ScrollToService } from './scroll-to.service';\n\n/** Scroll To Module */\n@NgModule({\n  declarations: [\n    ScrollToDirective\n  ],\n  exports: [\n    ScrollToDirective\n  ]\n})\nexport class ScrollToModule {\n\n  /**\n   * Guaranteed singletons for provided Services across App.\n   *\n   * @return          An Angular Module with Providers\n   */\n  static forRoot(): ModuleWithProviders<ScrollToModule> {\n    return {\n      ngModule: ScrollToModule,\n      providers: [\n        ScrollToService\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-scroll-to\n */\n\nexport * from './lib/scroll-to-config.interface';\nexport * from './lib/scroll-to-easing.interface';\nexport * from './lib/scroll-to.directive';\nexport * from './lib/scroll-to.module';\nexport * from './lib/scroll-to.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ScrollToService"],"mappings":";;;;;AAKA;AACO,MAAM,QAAQ,GAAiC;AACpD,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,IAAI,GAAG,EAAE;CACrB,CAAC;AAEF;AACO,MAAM,MAAM,GAAsC;AACvD,IAAA,UAAU,EAAE,CAAC,IAAY,KAAI;QAC3B,OAAO,IAAI,GAAG,IAAI,CAAC;KACpB;AACD,IAAA,WAAW,EAAE,CAAC,IAAY,KAAI;AAC5B,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;KAC1B;AACD,IAAA,aAAa,EAAE,CAAC,IAAY,KAAI;QAC9B,OAAO,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;KAClE;AACD,IAAA,WAAW,EAAE,CAAC,IAAY,KAAI;AAC5B,QAAA,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KAC3B;AACD,IAAA,YAAY,EAAE,CAAC,IAAY,KAAI;QAC7B,OAAO,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;KACnC;AACD,IAAA,cAAc,EAAE,CAAC,IAAY,KAAI;AAC/B,QAAA,OAAO,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KAC/F;AACD,IAAA,WAAW,EAAE,CAAC,IAAY,KAAI;AAC5B,QAAA,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KAClC;AACD,IAAA,YAAY,EAAE,CAAC,IAAY,KAAI;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KAC1C;AACD,IAAA,cAAc,EAAE,CAAC,IAAY,KAAI;AAC/B,QAAA,OAAO,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KAC3F;AACD,IAAA,WAAW,EAAE,CAAC,IAAY,KAAI;QAC5B,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KACzC;AACD,IAAA,YAAY,EAAE,CAAC,IAAY,KAAI;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KACjD;AACD,IAAA,cAAc,EAAE,CAAC,IAAY,KAAI;AAC/B,QAAA,OAAO,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KAC3G;AACD,IAAA,cAAc,EAAE,CAAC,IAAY,KAAI;AAC/B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACnF;CACF,CAAC;AAEF;;;AAGG;AACI,MAAM,MAAM,GAAa;IAC9B,OAAO;IACP,YAAY;IACZ,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,aAAa;IACb,OAAO;IACP,YAAY;IACZ,UAAU;CACX,CAAC;AAEF;;;;;AAKG;AACG,SAAU,SAAS,CAAC,KAAa,EAAA;IACrC,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACpE,CAAC;AAED;;;;;AAKG;AACG,SAAU,QAAQ,CAAC,KAAU,EAAA;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,CAAC;AAC9D,CAAC;AAED;;;;;AAKG;AACG,SAAU,QAAQ,CAAC,SAAc,EAAA;IACrC,OAAO,SAAS,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;;;;AAKG;AACG,SAAU,YAAY,CAAC,KAAU,EAAA;IACrC,OAAO,KAAK,YAAY,UAAU,CAAC;AACrC,CAAC;AAED;;;;;AAKG;AACG,SAAU,eAAe,CAAC,KAAU,EAAA;IACxC,OAAO,KAAK,YAAY,WAAW,CAAC;AACtC,CAAC;AAED;;;;;AAKG;AACG,SAAU,QAAQ,CAAC,KAAU,EAAA;AACjC,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtD;;AChIA;MACa,iBAAiB,CAAA;AAmC5B;;;;;;;;;;AAUG;IACH,WACU,CAAA,SAAsB,EACtB,cAAsC,EAC7B,QAAiB,EACjB,EAAU,EACV,OAA8B,EACvC,SAAkB,EAAA;AALlB,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;AACtB,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAwB;AAC7B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAS;AACjB,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;AACV,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAuB;AACvC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAS;;AA6DpB,QAAA,IAAI,CAAA,IAAA,GAAG,MAAW;AAExB,YAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;;AAG9D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa;AAChC,iBAAC,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,QAAQ;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAElD,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;gBACrE,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ;AACX,sBAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D,sBAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,aAAA;AACH,SAAC,CAAA;AAhFC,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;AAEhH,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;AAC3C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AACtF,SAAA;;QAGD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;AACrF,SAAA;;QAGD,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAElF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;QAGxC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO;iBACT,SAAS;AACT,iBAAA,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AACrG,SAAA;QAED,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,mBAAmB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;KACpC;AAED;;;;AAIG;IACH,KAAK,GAAA;AACH,QAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAED;;;;;AAKG;IACH,IAAI,GAAA;AACF,QAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACzB;AAyBF;;AChID;;;;;;AAMG;MAEU,eAAe,CAAA;AAiB1B;;;;;AAKG;IACH,WAC4B,CAAA,QAAa,EACV,UAAe,EAAA;AADlB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAK;AACV,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAK;QAE5C,IAAI,CAAC,kBAAkB,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;KAC1E;AAED;;;;;;;;;;;AAWG;AACH,IAAA,QAAQ,CAAC,OAA8B,EAAA;AAErC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,aAAa,EAAE,CAAC,YAAY,EAAE,CAAC;AAC3C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC5B;AAED;;;;;;;AAOG;AACK,IAAA,KAAK,CAAC,OAA8B,EAAA;;AAG1C,QAAA,MAAM,mBAAmB,GACpB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,QAAiC,CACjC,EAAA,OAAO,CACoB,CAAC;QAEjC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACvB,SAAA;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5D,QAAA,IAAI,mBAAmB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;YAC7C,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;AACrE,SAAA;QAED,MAAM,SAAS,GAAgB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;AAClF,QAAA,IAAI,mBAAmB,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;YAC/C,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;AACxE,SAAA;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC;AAEnE,QAAA,IAAI,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAE/D,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC;gBAC3B,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,GAAG;AACvD,gBAAA,UAAU,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AAC1C,SAAA;;QAGD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CACpC,SAAS,EACT,cAAc,EACd,QAAQ,CAAC,cAAc,CAAC,EACxB,EAAE,EACF,mBAAmB,EACnB,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;;QAGhE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;AAEnE,QAAA,OAAO,UAAU,CAAC;KACnB;AAED;;;;;;;;;AASG;AACK,IAAA,oBAAoB,CAC1B,UAA2B,EAC3B,cAAsC,EACtC,WAA+C,EAAA;QAE/C,MAAM,YAAY,GAAG,UAAU;AAC5B,aAAA,SAAS,CACR;YACE,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;gBAC5F,YAAY,CAAC,WAAW,EAAE,CAAC;aAC5B;AACF,SAAA,CACF,CAAC;KACL;AAED;;;;;;AAMG;IACK,YAAY,CAAC,OAA8B,EAAE,UAAuB,EAAA;QAE1E,IAAI,SAAS,GAAuB,IAAI,CAAC;QAEzC,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnD,SAAA;AAAM,aAAA,IAAI,UAAU,EAAE;AACrB,YAAA,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;AACvD,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;AAED;;;;;;;;AAQG;IACK,6BAA6B,CACnC,cAAsC,EACtC,OAA2C,EAAA;QAE3C,IAAI,CAAC,cAAc,EAAE;YACnB,cAAc,GAAG,MAAM,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB;AACpB,aAAA,OAAO,CAAC,KAAK,IAAI,cAAc;aAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,EAAC,OAAO,EAAE,IAAI,EAAC,GAAG,KAAK,CAAC,CAAC,CAAC;KACzF;AAED;;;;AAIG;IACK,cAAc,GAAA;QAEpB,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE;gBAChD,GAAG,EAAE,MAAK;oBACR,eAAe,GAAG,IAAI,CAAC;iBACxB;AACF,aAAA,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvD,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACX,SAAA;AAED,QAAA,OAAO,eAAe,CAAC;KACxB;AAED;;;;;;;;;;AAUG;AACK,IAAA,gCAAgC,CACtC,MAAgB,EAChB,cAAsC,EACtC,OAA2C,EAAA;QAE3C,IAAI,CAAC,cAAc,EAAE;YACnB,cAAc,GAAG,MAAM,CAAC;AACzB,SAAA;AACD,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;KAC7E;AAED;;;;;;;;AAQG;AACK,IAAA,wBAAwB,CAAC,aAA0B,EAAA;QAEzD,IAAI,KAAK,GAAwB,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAExE,MAAM,aAAa,GAAW,uBAAuB,CAAC;AAEtD,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,IAAI,MAAM,GAAG,aAAa,CAAC;QAC3B,OAAO,MAAM,CAAC,aAAa,EAAE;AAC3B,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,YAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAExC,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU;mBAC5B,KAAK,CAAC,QAAQ,KAAK,QAAQ;AAC3B,mBAAA,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;gBACjC,SAAS;AACV,aAAA;YAED,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;AACnD,mBAAA,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;AAC9B,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;;;;;AAQG;AACK,IAAA,OAAO,CAAC,EAAkB,EAAE,YAAA,GAAwB,KAAK,EAAA;AAE/D,QAAA,IAAI,UAAuB,CAAC;AAE5B,QAAA,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YAChB,IAAI,YAAY,KAAK,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE;AACpD,gBAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;AACvB,YAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,SAAA;AAAM,aAAA,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;AAC3B,YAAA,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC;AAC/B,SAAA;AAAM,aAAA,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;YAC9B,UAAU,GAAG,EAAE,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AAED;;;;;;;;AAQG;AACK,IAAA,iBAAiB,CAAC,SAAsB,EAAA;QAC9C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;KAC5D;AAED;;;;;;AAMG;AACK,IAAA,cAAc,CAAC,OAAoB,EAAA;QACzC,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;KACjD;;4GA7TU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAwBhB,QAAQ,EAAA,EAAA,EAAA,KAAA,EACR,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;gHAzBV,eAAe,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;8BAyBN,MAAM;+BAAC,QAAQ,CAAA;;8BACf,MAAM;+BAAC,WAAW,CAAA;;;;MCnCV,iBAAiB,CAAA;AAsB5B,IAAA,WAAA,CACU,UAAsB,EACtB,eAAgC,EAChC,SAAoB,EAAA;AAFpB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtB,QAAA,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAChC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAtB9B,QAAA,IAAA,CAAA,WAAW,GAAmB,QAAQ,CAAC,MAAM,CAAC;AAG9C,QAAA,IAAA,CAAA,gBAAgB,GAAkB,QAAQ,CAAC,MAAM,CAAC;AAGlD,QAAA,IAAA,CAAA,mBAAmB,GAAW,QAAQ,CAAC,QAAQ,CAAC;AAGhD,QAAA,IAAA,CAAA,iBAAiB,GAA4B,QAAQ,CAAC,MAAM,CAAC;AAG7D,QAAA,IAAA,CAAA,iBAAiB,GAAW,QAAQ,CAAC,MAAM,CAAC;AAG5C,QAAA,IAAA,CAAA,oBAAoB,GAAsB,QAAQ,CAAC,SAAS,CAAC;KAQ5D;AAED;;;;;;AAMG;IACH,eAAe,GAAA;;QAGb,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,gBAAgB,CAAG,CAAA,CAAA,CAAC,CAAC;AACjE,SAAA;;AAGD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EACxE,CAAC,KAAY,KAAI;YAEf,IAAI,CAAC,OAAO,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,QAAQ,EAAE,IAAI,CAAC,mBAAmB;gBAClC,MAAM,EAAE,IAAI,CAAC,iBAAiB;gBAC9B,MAAM,EAAE,IAAI,CAAC,iBAAiB;gBAC9B,SAAS,EAAE,IAAI,CAAC,oBAAoB;aACrC,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KACN;;8GAxDU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;iBAC1B,CAAA;oJAIC,WAAW,EAAA,CAAA;sBADV,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;;;ACxBR;MASa,cAAc,CAAA;AAEzB;;;;AAIG;AACH,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;gBACT,eAAe;AAChB,aAAA;SACF,CAAC;KACH;;2GAdU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,CANvB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CAGjB,iBAAiB,CAAA,EAAA,CAAA,CAAA;4GAGR,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;AAClB,qBAAA;iBACF,CAAA;;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}