{"version":3,"file":"ngx-editor.mjs","sources":["../../../projects/ngx-editor/src/lib/plugins/editable.ts","../../../projects/ngx-editor/src/lib/plugins/placeholder.ts","../../../projects/ngx-editor/src/lib/plugins/attributes.ts","../../../projects/ngx-editor/src/lib/plugins/focus.ts","../../../projects/ngx-editor/src/lib/plugins/blur.ts","../../../projects/ngx-editor/src/lib/components/image-view/image-view.component.ts","../../../projects/ngx-editor/src/lib/components/image-view/image-view.component.html","../../../projects/ngx-editor/src/lib/plugins/image-resize.ts","../../../projects/ngx-editor/src/lib/plugins/link.ts","../../../projects/ngx-editor/src/lib/parsers.ts","../../../projects/ngx-editor/src/lib/editor.component.ts","../../../projects/ngx-editor/src/lib/editor.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.service.ts","../../../projects/ngx-editor/src/lib/icons/bold.ts","../../../projects/ngx-editor/src/lib/icons/italic.ts","../../../projects/ngx-editor/src/lib/icons/code.ts","../../../projects/ngx-editor/src/lib/icons/underline.ts","../../../projects/ngx-editor/src/lib/icons/strike.ts","../../../projects/ngx-editor/src/lib/icons/ordered_list.ts","../../../projects/ngx-editor/src/lib/icons/bullet_list.ts","../../../projects/ngx-editor/src/lib/icons/quote.ts","../../../projects/ngx-editor/src/lib/icons/link.ts","../../../projects/ngx-editor/src/lib/icons/unlink.ts","../../../projects/ngx-editor/src/lib/icons/image.ts","../../../projects/ngx-editor/src/lib/icons/align_left.ts","../../../projects/ngx-editor/src/lib/icons/align_center.ts","../../../projects/ngx-editor/src/lib/icons/align_right.ts","../../../projects/ngx-editor/src/lib/icons/align_justify.ts","../../../projects/ngx-editor/src/lib/icons/text_color.ts","../../../projects/ngx-editor/src/lib/icons/color_fill.ts","../../../projects/ngx-editor/src/lib/icons/index.ts","../../../projects/ngx-editor/src/lib/commands/Mark.ts","../../../projects/ngx-editor/src/lib/commands/Blockquote.ts","../../../projects/ngx-editor/src/lib/commands/ListItem.ts","../../../projects/ngx-editor/src/lib/commands/Heading.ts","../../../projects/ngx-editor/src/lib/commands/TextAlign.ts","../../../projects/ngx-editor/src/lib/commands/Link.ts","../../../projects/ngx-editor/src/lib/commands/Image.ts","../../../projects/ngx-editor/src/lib/commands/TextColor.ts","../../../projects/ngx-editor/src/lib/commands/index.ts","../../../projects/ngx-editor/src/lib/modules/menu/MenuCommands.ts","../../../projects/ngx-editor/src/lib/Locals.ts","../../../projects/ngx-editor/src/lib/editor.service.ts","../../../projects/ngx-editor/src/lib/pipes/sanitize/sanitize-html.pipe.ts","../../../projects/ngx-editor/src/lib/modules/menu/toggle-command/toggle-command.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/toggle-command/toggle-command.component.html","../../../projects/ngx-editor/src/lib/modules/menu/link/link.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/link/link.component.html","../../../projects/ngx-editor/src/lib/modules/menu/image/image.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/image/image.component.html","../../../projects/ngx-editor/src/lib/modules/menu/dropdown/dropdown.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/dropdown/dropdown.component.html","../../../projects/ngx-editor/src/lib/modules/menu/color-picker/color-picker.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/color-picker/color-picker.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/menu.component.html","../../../projects/ngx-editor/src/lib/modules/menu/bubble/bubble.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/bubble/bubble.component.html","../../../projects/ngx-editor/src/lib/modules/menu/floating-menu/floating-menu.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/floating-menu/floating-menu.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.module.ts","../../../projects/ngx-editor/src/lib/editor.module.ts","../../../projects/ngx-editor/src/lib/validators.ts","../../../projects/ngx-editor/src/lib/EditorCommands.ts","../../../projects/ngx-editor/src/lib/defaultPlugins.ts","../../../projects/ngx-editor/src/lib/Editor.ts","../../../projects/ngx-editor/src/public_api.ts","../../../projects/ngx-editor/src/ngx-editor.ts"],"sourcesContent":["import { EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';\n\nconst editablePlugin = (editable = true): Plugin => {\n  return new Plugin({\n    key: new PluginKey('editable'),\n    state: {\n      init(): boolean {\n        return editable;\n      },\n      apply(tr: Transaction, previousVal: boolean): string {\n        return tr.getMeta('UPDATE_EDITABLE') ?? previousVal;\n      }\n    },\n    props: {\n      editable(state: EditorState): boolean {\n        return this.getState(state);\n      },\n      attributes(state: EditorState): Record<string, string> | null {\n        const isEnabled = this.getState(state);\n\n        if (isEnabled) {\n          return null;\n        }\n\n        return {\n          class: 'NgxEditor__Content--Disabled'\n        };\n      }\n    }\n  });\n};\n\nexport default editablePlugin;\n","import { Plugin, EditorState, PluginKey, Transaction } from 'prosemirror-state';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { Node as ProseMirrorNode } from 'prosemirror-model';\n\nconst PLACEHOLDER_CLASSNAME = 'NgxEditor__Placeholder';\n\nconst placeholderPlugin = (text?: string): Plugin => {\n  return new Plugin({\n    key: new PluginKey('placeholder'),\n    state: {\n      init(): string {\n        return text ?? '';\n      },\n      apply(tr: Transaction, previousVal: string): string {\n        const placeholder = tr.getMeta('UPDATE_PLACEHOLDER') ?? previousVal;\n        return placeholder;\n      }\n    },\n    props: {\n      decorations(state: EditorState): DecorationSet {\n        const { doc } = state;\n        const { textContent, childCount } = doc;\n\n        const placeholder = this.getState(state);\n\n        if (!placeholder || childCount > 1) {\n          return DecorationSet.empty;\n        }\n\n        const decorations: Decoration[] = [];\n\n        const decorate = (node: ProseMirrorNode, pos: number) => {\n          if (node.type.isBlock && node.childCount === 0 && textContent.length === 0) {\n            const placeholderNode = Decoration.node(pos, (pos + node.nodeSize), {\n              class: PLACEHOLDER_CLASSNAME,\n              'data-placeholder': placeholder,\n              'data-align': node.attrs['align'] ?? null\n            });\n\n            decorations.push(placeholderNode);\n          }\n\n          return false;\n        };\n\n        doc.descendants(decorate);\n        return DecorationSet.create(doc, decorations);\n      }\n    }\n  });\n};\n\nexport default placeholderPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst attributesPlugin = (attributes = {}): Plugin => {\n  return new Plugin({\n    key: new PluginKey('attributes'),\n    props: {\n      attributes\n    }\n  });\n};\n\nexport default attributesPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst focusPlugin = (cb: () => void): Plugin => {\n  return new Plugin({\n    key: new PluginKey('focus'),\n    props: {\n      handleDOMEvents: {\n        focus: () => {\n          cb();\n          return false;\n        }\n      }\n    }\n  });\n};\n\nexport default focusPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst blurPlugin = (cb: () => void):Plugin => {\n  return new Plugin({\n    key: new PluginKey('blur'),\n    props: {\n      handleDOMEvents: {\n        blur: () => {\n          cb();\n          return false;\n        }\n      }\n    }\n  });\n};\n\nexport default blurPlugin;\n","import {\n  Component, ElementRef, EventEmitter,\n  Input, Output, ViewChild\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\n\n@Component({\n  selector: 'ngx-image-view',\n  templateUrl: './image-view.component.html',\n  styleUrls: ['./image-view.component.scss']\n})\n\nexport class ImageViewComponent {\n  @Input() src: string;\n  @Input() alt = '';\n  @Input() title = '';\n  @Input() outerWidth = '';\n  @Input() selected = false;\n  @Input() view: EditorView;\n\n  @Output() imageResize = new EventEmitter();\n\n  @ViewChild('imgEl', { static: true }) imgEl: ElementRef;\n\n  startResizing(e: MouseEvent, direction: string): void {\n    e.preventDefault();\n    this.resizeImage(e, direction);\n  }\n\n  resizeImage(evt: MouseEvent, direction: string): void {\n    const startX = evt.pageX;\n    const startWidth = this.imgEl.nativeElement.clientWidth;\n\n    const isLeftResize = direction === 'left';\n\n    const { width } = window.getComputedStyle(this.view.dom);\n    const editorWidth = parseInt(width, 10);\n\n    const onMouseMove = (e: MouseEvent) => {\n      const currentX = e.pageX;\n      const diffInPx = currentX - startX;\n      const computedWidth = isLeftResize ? startWidth - diffInPx : startWidth + diffInPx;\n\n      // prevent image overflow the editor\n      // prevent resizng below 20px\n      if (computedWidth > editorWidth || computedWidth < 20) {\n        return;\n      }\n\n      this.outerWidth = `${computedWidth}px`;\n    };\n\n    const onMouseUp = (e: MouseEvent) => {\n      e.preventDefault();\n\n      document.removeEventListener('mousemove', onMouseMove);\n      document.removeEventListener('mouseup', onMouseUp);\n\n      this.imageResize.emit();\n    };\n\n    document.addEventListener('mousemove', onMouseMove);\n    document.addEventListener('mouseup', onMouseUp);\n  }\n}\n","<span class=\"NgxEditor__ImageWrapper\" [ngClass]=\"{'NgxEditor__Resizer--Active': selected}\" [style.width]=\"outerWidth\">\n  <span class=\"NgxEditor__ResizeHandle\" *ngIf=\"selected\">\n    <span class=\"NgxEditor__ResizeHandle--TL\"  (mousedown)=\"startResizing($event, 'left')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--TR\" (mousedown)=\"startResizing($event, 'right')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--BL\" (mousedown)=\"startResizing($event, 'left')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--BR\" (mousedown)=\"startResizing($event, 'right')\"></span>\n  </span>\n  <img [src]=\"src\" [alt]=\"alt\" [title]=\"title\" #imgEl />\n</span>\n","import { ApplicationRef, ComponentFactoryResolver, ComponentRef, Injector } from '@angular/core';\nimport { Node as ProseMirrorNode } from 'prosemirror-model';\nimport { NodeSelection, Plugin, PluginKey } from 'prosemirror-state';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { ImageViewComponent } from '../components/image-view/image-view.component';\n\nclass ImageRezieView implements NodeView {\n  dom: HTMLElement;\n  view: EditorView;\n  getPos: () => number;\n\n  applicationRef: ApplicationRef;\n  imageComponentRef: ComponentRef<ImageViewComponent>;\n  resizeSubscription: Subscription;\n\n  node: ProseMirrorNode;\n  updating = false;\n\n  constructor(node: ProseMirrorNode, view: EditorView, getPos: () => number, injector: Injector) {\n    const dom = document.createElement('image-view');\n\n    const componentFactoryResolver = injector.get(ComponentFactoryResolver);\n    this.applicationRef = injector.get(ApplicationRef);\n\n    // Create the component and wire it up with the element\n    const factory = componentFactoryResolver.resolveComponentFactory(ImageViewComponent);\n\n    this.imageComponentRef = factory.create(injector, [], dom);\n    // Attach to the view so that the change detector knows to run\n    this.applicationRef.attachView(this.imageComponentRef.hostView);\n\n    this.setNodeAttributes(node.attrs);\n    this.imageComponentRef.instance.view = view;\n\n    this.dom = dom;\n    this.view = view;\n    this.node = node;\n    this.getPos = getPos;\n\n    this.resizeSubscription = this.imageComponentRef.instance.imageResize.subscribe(() => {\n      this.handleResize();\n    });\n  }\n\n  private computeChanges(prevAttrs: Record<string, any>, newAttrs: Record<string, any>): boolean {\n    return JSON.stringify(prevAttrs) === JSON.stringify(newAttrs);\n  }\n\n  private setNodeAttributes(attrs: Record<string, any>): void {\n    this.imageComponentRef.instance.src = attrs['src'];\n    this.imageComponentRef.instance.alt = attrs['alt'];\n    this.imageComponentRef.instance.title = attrs['title'];\n    this.imageComponentRef.instance.outerWidth = attrs['width'];\n  }\n\n  handleResize = (): void => {\n    if (this.updating) {\n      return;\n    }\n\n    const { state, dispatch } = this.view;\n    const { tr } = state;\n\n    const transaction = tr.setNodeMarkup(this.getPos(), undefined, {\n      ...this.node.attrs,\n      width: this.imageComponentRef.instance.outerWidth,\n    });\n\n    const resolvedPos = transaction.doc.resolve(this.getPos());\n    const newSelection = new NodeSelection(resolvedPos);\n\n    transaction.setSelection(newSelection);\n    dispatch(transaction);\n  }\n\n  update(node: ProseMirrorNode): boolean {\n    if (node.type !== this.node.type) {\n      return false;\n    }\n\n    this.node = node;\n\n    const changed = this.computeChanges(this.node.attrs, node.attrs);\n    if (changed) {\n      this.updating = true;\n      this.setNodeAttributes(node.attrs);\n      this.updating = false;\n    }\n    return true;\n  }\n\n  ignoreMutation(): boolean {\n    return true;\n  }\n\n  selectNode(): void {\n    this.imageComponentRef.instance.selected = true;\n  }\n\n  deselectNode(): void {\n    this.imageComponentRef.instance.selected = false;\n  }\n\n  destroy(): void {\n    this.resizeSubscription.unsubscribe();\n    this.applicationRef.detachView(this.imageComponentRef.hostView);\n  }\n}\n\nconst imageResizePlugin = (injector: Injector): Plugin => {\n  return new Plugin({\n    key: new PluginKey('image-resize'),\n    props: {\n      nodeViews: {\n        image: (node: ProseMirrorNode, view: EditorView, getPos: () => number) => {\n          return new ImageRezieView(node, view, getPos, injector);\n        },\n      }\n    }\n  });\n};\n\nexport default imageResizePlugin;\n","import { Fragment, Slice, Node as ProseMirrorNode } from 'prosemirror-model';\nimport { Plugin, PluginKey } from 'prosemirror-state';\n\nconst HTTP_LINK_REGEX = /((https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+\\.?(:\\d+)?(\\/\\S*)?)$/;\n\nconst linkify = (fragment: Fragment): Fragment => {\n  const linkified: ProseMirrorNode[] = [];\n\n  fragment.forEach((child: ProseMirrorNode) => {\n    if (child.isText) {\n      const text = child.text as string;\n      let pos = 0;\n\n      const match: RegExpMatchArray | null = HTTP_LINK_REGEX.exec(text);\n\n      if (match) {\n        const start = match.index;\n        const end = start + match[0].length;\n        const link = child.type.schema.marks.link;\n\n        if (start > 0) {\n          linkified.push(child.cut(pos, start));\n        }\n\n        const urlText = text.slice(start, end);\n        linkified.push(\n          child.cut(start, end).mark(link.create({ href: urlText }).addToSet(child.marks))\n        );\n        pos = end;\n      }\n\n      if (pos < text.length) {\n        linkified.push(child.cut(pos));\n      }\n    } else {\n      linkified.push(child.copy(linkify(child.content)));\n    }\n  });\n\n  return Fragment.fromArray(linkified);\n};\n\nconst linkifyPlugin = ():Plugin => {\n  return new Plugin({\n    key: new PluginKey('linkify'),\n    props: {\n      transformPasted: (slice: Slice) => {\n        return new Slice(linkify(slice.content), slice.openStart, slice.openEnd);\n      }\n    }\n  });\n};\n\nexport default linkifyPlugin;\n","import { DOMSerializer, Schema, DOMParser, Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport defaultSchema from './schema';\n\nexport const emptyDoc = {\n  type: 'doc',\n  content: [\n    {\n      type: 'paragraph',\n    }\n  ],\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment\nexport const toHTML = (json: Record<string, any>, inputSchema?: Schema): string => {\n  const schema = inputSchema ?? defaultSchema;\n\n  const contentNode = schema.nodeFromJSON(json);\n  const html = DOMSerializer.fromSchema(schema).serializeFragment(contentNode.content);\n\n  const div = document.createElement('div');\n  div.appendChild(html);\n  return div.innerHTML;\n};\n\nexport const toDoc = (html: string, inputSchema?: Schema): Record<string, any> => {\n  const schema = inputSchema ?? defaultSchema;\n\n  const el = document.createElement('div');\n  el.innerHTML = html;\n\n  return DOMParser.fromSchema(schema).parse(el).toJSON();\n};\n\nexport const parseContent = (value: string | Record<string, any> | null, schema: Schema): ProseMirrorNode => {\n  if (!value) {\n    return schema.nodeFromJSON(emptyDoc);\n  }\n\n  if (typeof value !== 'string') {\n    return schema.nodeFromJSON(value);\n  }\n\n  const docJson = toDoc(value, schema);\n  return schema.nodeFromJSON(docJson);\n};\n","import {\n  Component, ViewChild, ElementRef,\n  forwardRef, OnDestroy, ViewEncapsulation,\n  OnInit, Output, EventEmitter,\n  Input, Renderer2, SimpleChanges,\n  OnChanges, Injector,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport * as plugins from './plugins';\nimport { toHTML } from './parsers';\nimport Editor from './Editor';\n\n@Component({\n  selector: 'ngx-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.scss'],\n  providers: [{\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => NgxEditorComponent),\n    multi: true\n  }],\n  encapsulation: ViewEncapsulation.None\n})\n\nexport class NgxEditorComponent implements ControlValueAccessor, OnInit, OnChanges, OnDestroy {\n  constructor(\n    private _renderer: Renderer2,\n    private _injector: Injector,\n    private _elementRef: ElementRef<HTMLElement>\n  ) { }\n\n  @ViewChild('ngxEditor', { static: true }) private ngxEditor: ElementRef;\n\n  @Input() editor: Editor;\n  @Input() outputFormat: 'doc' | 'html';\n  @Input() placeholder = 'Type Here...';\n\n  @Output() focusOut = new EventEmitter<void>();\n  @Output() focusIn = new EventEmitter<void>();\n\n  private subscriptions: Subscription[] = [];\n  private onChange: (value: Record<string, any> | string) => void = () => { /** */ };\n  private onTouched: () => void = () => { /** */ };\n\n  writeValue(value: Record<string, any> | string | null): void {\n    if (!this.outputFormat && typeof value === 'string') {\n      this.outputFormat = 'html';\n    }\n\n    this.editor.setContent(value ?? '');\n  }\n\n  registerOnChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.setMeta('UPDATE_EDITABLE', !isDisabled);\n    this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n  }\n\n  private handleChange(jsonDoc: Record<string, any>): void {\n    if (this.outputFormat === 'html') {\n      const html = toHTML(jsonDoc, this.editor.schema);\n      this.onChange(html);\n      return;\n    }\n\n    this.onChange(jsonDoc);\n  }\n\n  private setMeta(key: string, value: any): void {\n    const { dispatch, state: { tr } } = this.editor.view;\n    dispatch(tr.setMeta(key, value));\n  }\n\n  private setPlaceholder(placeholder: string): void {\n    this.setMeta('UPDATE_PLACEHOLDER', placeholder);\n  }\n\n  private registerPlugins(): void {\n    this.editor.registerPlugin(plugins.editable());\n    this.editor.registerPlugin(plugins.placeholder(this.placeholder));\n\n    this.editor.registerPlugin(plugins.attributes({\n      class: 'NgxEditor__Content'\n    }));\n\n    this.editor.registerPlugin(plugins.focus(() => {\n      this.focusIn.emit();\n    }));\n\n    this.editor.registerPlugin(plugins.focus(() => {\n      this.focusIn.emit();\n    }));\n\n    this.editor.registerPlugin(plugins.blur(() => {\n      this.focusOut.emit();\n      this.onTouched();\n    }));\n\n    if (this.editor.features.resizeImage) {\n      this.editor.registerPlugin(plugins.imageResize(this._injector));\n    }\n\n    if (this.editor.features.linkOnPaste) {\n      this.editor.registerPlugin(plugins.linkify());\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new Error('NgxEditor: Required editor instance');\n    }\n\n    this.registerPlugins();\n\n    this._renderer.appendChild(this.ngxEditor.nativeElement, this.editor.view.dom);\n\n    const contentChangeSubscription = this.editor.valueChanges.subscribe(jsonDoc => {\n      this.handleChange(jsonDoc);\n    });\n\n    this.subscriptions.push(contentChangeSubscription);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes?.['placeholder'] && !changes['placeholder'].isFirstChange()) {\n      this.setPlaceholder(changes['placeholder'].currentValue);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach(subscription => {\n      subscription.unsubscribe();\n    });\n  }\n}\n","<div class=\"NgxEditor\" #ngxEditor>\n  <ng-content></ng-content>\n</div>\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport Editor from '../../Editor';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MenuService {\n  editor: Editor;\n  customMenuRefChange: Subject<TemplateRef<any>> = new Subject<TemplateRef<any>>();\n\n  setCustomMenuRef(c: TemplateRef<any>): void {\n    this.customMenuRefChange.next(c);\n  }\n}\n","export default `\n  <path d=\"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\" />\n`;\n","export default `\n  <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\" />\n`;\n","export default `\n<path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\"/>\n`;\n","export default `\n<path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\"/>\n`;\n","export default `\n<path d=\"M6.85,7.08C6.85,4.37,9.45,3,12.24,3c1.64,0,3,0.49,3.9,1.28c0.77,0.65,1.46,1.73,1.46,3.24h-3.01 c0-0.31-0.05-0.59-0.15-0.85c-0.29-0.86-1.2-1.28-2.25-1.28c-1.86,0-2.34,1.02-2.34,1.7c0,0.48,0.25,0.88,0.74,1.21 C10.97,8.55,11.36,8.78,12,9H7.39C7.18,8.66,6.85,8.11,6.85,7.08z M21,12v-2H3v2h9.62c1.15,0.45,1.96,0.75,1.96,1.97 c0,1-0.81,1.67-2.28,1.67c-1.54,0-2.93-0.54-2.93-2.51H6.4c0,0.55,0.08,1.13,0.24,1.58c0.81,2.29,3.29,3.3,5.67,3.3 c2.27,0,5.3-0.89,5.3-4.05c0-0.3-0.01-1.16-0.48-1.94H21V12z\"/>\n`;\n","export default `\n<path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\"/>\n`;\n","export default `\n<path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\"/>\n`;\n","export default `\n<path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\"/>\n`;\n","export default `\n<path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"/>\n`;\n","export default `\n<path d=\"M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z\"/>\n`;\n","export default `\n<path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"/>\n`;\n","export default `\n<path d=\"M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M2,20h20v4H2V20z M5.49,17h2.42l1.27-3.58h5.65L16.09,17h2.42L13.25,3h-2.5L5.49,17z M9.91,11.39l2.03-5.79h0.12l2.03,5.79 H9.91z\"/>\n`;\n","export default `\n<path d=\"M16.56,8.94L7.62,0L6.21,1.41l2.38,2.38L3.44,8.94c-0.59,0.59-0.59,1.54,0,2.12l5.5,5.5C9.23,16.85,9.62,17,10,17 s0.77-0.15,1.06-0.44l5.5-5.5C17.15,10.48,17.15,9.53,16.56,8.94z M5.21,10L10,5.21L14.79,10H5.21z M19,11.5c0,0-2,2.17-2,3.5 c0,1.1,0.9,2,2,2s2-0.9,2-2C21,13.67,19,11.5,19,11.5z M2,20h20v4H2V20z\"/>\n`;\n","// Icons source: https://material.io/\n\nimport bold from './bold';\nimport italic from './italic';\nimport code from './code';\nimport underline from './underline';\nimport strike from './strike';\nimport orderedList from './ordered_list';\nimport bulletList from './bullet_list';\nimport quote from './quote';\nimport link from './link';\nimport unlink from './unlink';\nimport image from './image';\nimport alignLeft from './align_left';\nimport alignCenter from './align_center';\nimport alignRight from './align_right';\nimport alignJustify from './align_justify';\nimport textColor from './text_color';\nimport colorFill from './color_fill';\n\nconst DEFAULT_ICON_HEIGHT = 20;\nconst DEFAULT_ICON_WIDTH = 20;\nconst DEFAULT_ICON_FILL = 'currentColor'\n\nconst icons: Record<string, any> = {\n  bold,\n  italic,\n  code,\n  underline,\n  strike,\n  ordered_list: orderedList,\n  bullet_list: bulletList,\n  blockquote: quote,\n  link,\n  unlink,\n  image,\n  align_left: alignLeft,\n  align_center: alignCenter,\n  align_right: alignRight,\n  align_justify: alignJustify,\n  text_color: textColor,\n  color_fill: colorFill\n};\n\nclass Icon {\n  static get(name: keyof typeof icons, fill = DEFAULT_ICON_FILL): string {\n    const path = icons[name] || '<path></path>';\n    return `\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 24 24\"\n        fill=${fill}\n        height=${DEFAULT_ICON_HEIGHT}\n        width=${DEFAULT_ICON_WIDTH}\n      >\n        ${path}\n      </svg>\n    `;\n  }\n}\n\nexport default Icon;\n","import { MarkType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Command, toggleMark } from 'prosemirror-commands';\n\nimport { applyMark } from 'ngx-editor/commands';\nimport { isMarkActive } from 'ngx-editor/helpers';\n\nclass Mark {\n  name: string;\n\n  constructor(name: string) {\n    this.name = name;\n  }\n\n  apply(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { schema } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return applyMark(type)(state, dispatch);\n    };\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { schema } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return toggleMark(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type: MarkType = schema.marks[this.name];\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Mark;\n","import { NodeType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Command, lift, wrapIn } from 'prosemirror-commands';\n\nimport { isNodeActive } from 'ngx-editor/helpers';\n\nclass Blockqote {\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type: NodeType = schema.nodes.blockquote;\n      if (!type) {\n        return false;\n      }\n\n      if (this.isActive(state)) {\n        return lift(state, dispatch);\n      }\n\n      return wrapIn(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type: NodeType = schema.nodes.blockquote;\n    if (!type) {\n      return false;\n    }\n\n    return isNodeActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Blockqote;\n","import { NodeType, Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { liftListItem, wrapInList } from 'prosemirror-schema-list';\nimport { Command } from 'prosemirror-commands';\n\nimport { isNodeActive } from 'ngx-editor/helpers';\n\nclass ListItem {\n  isBulletList = false;\n\n  constructor(isBulletList = false) {\n    this.isBulletList = isBulletList;\n  }\n\n  getType(schema: Schema): NodeType {\n    return this.isBulletList ? schema.nodes['bullet_list'] : schema.nodes['ordered_list'];\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { schema } = state;\n\n      const type = this.getType(schema);\n      if (!type) {\n        return false;\n      }\n\n      if (this.isActive(state)) {\n        return liftListItem(schema.nodes.list_item)(state, dispatch);\n      }\n\n      return wrapInList(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type = this.getType(schema);\n    if (!type) {\n      return false;\n    }\n\n    return isNodeActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default ListItem;\n","import { NodeType, Node as ProseMirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Command, setBlockType } from 'prosemirror-commands';\n\nimport { getSelectionNodes } from 'ngx-editor/helpers';\n\nexport type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;\n\nclass Heading {\n  level: number;\n\n  constructor(level: HeadingLevels) {\n    this.level = level;\n  }\n\n  apply(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { schema } = state;\n\n      const type: NodeType = schema.nodes.heading;\n      if (!type) {\n        return false;\n      }\n\n      return setBlockType(type)(state, dispatch);\n    };\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { schema, selection, doc } = state;\n\n      const type: NodeType = schema.nodes.heading;\n      if (!type) {\n        return false;\n      }\n\n      const nodePos = selection.$from.before(1);\n      const node = doc.nodeAt(nodePos);\n\n      const attrs = node?.attrs ?? {};\n\n      if (this.isActive(state)) {\n        return setBlockType(schema.nodes.paragraph, attrs)(state, dispatch);\n      }\n\n      return setBlockType(type, { ...attrs, level: this.level })(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n    const nodesInSelection = getSelectionNodes(state);\n\n    const type: NodeType = schema.nodes.heading;\n    if (!type) {\n      return false;\n    }\n\n    const supportedNodes = [\n      type,\n      schema.nodes.text,\n      schema.nodes.blockquote\n    ];\n\n    // heading is a text node\n    // don't mark as active when it has more nodes\n    const nodes = nodesInSelection.filter(node => {\n      return supportedNodes.includes(node.type);\n    });\n\n    const acitveNode = nodes.find((node: ProseMirrorNode) => {\n      return node.attrs['level'] === this.level;\n    });\n\n    return Boolean(acitveNode);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Heading;\n","import { EditorState, Transaction } from 'prosemirror-state';\nimport { Node } from 'prosemirror-model';\nimport { Command } from 'prosemirror-commands';\n\nimport { getSelectionNodes } from 'ngx-editor/helpers';\n\nexport type Align = 'left' | 'center' | 'right' | 'justify';\n\nclass TextAlign {\n  align: string;\n\n  constructor(align: Align) {\n    this.align = align;\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n\n      const { doc, selection, tr, schema } = state;\n      const { from, to } = selection;\n\n      let applicable = false;\n\n      doc.nodesBetween(from, to, (node, pos) => {\n        const nodeType = node.type;\n        if ([schema.nodes.paragraph, schema.nodes.heading].includes(nodeType)) {\n          applicable = true;\n          tr.setNodeMarkup(pos, nodeType, { ...node.attrs, align: this.align });\n        }\n        return true;\n      });\n\n      if (!applicable) {\n        return false;\n      }\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n      }\n\n      return true;\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const nodes = getSelectionNodes(state);\n\n    const active = nodes.find((node: Node) => {\n      return node.attrs['align'] === this.align;\n    });\n\n    return Boolean(active);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default TextAlign;\n","import { MarkType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\nimport { Command, toggleMark } from 'prosemirror-commands';\n\nimport { isMarkActive } from 'ngx-editor/helpers';\nimport { removeLink } from 'ngx-editor/commands';\nimport { Dispatch } from './types';\n\nconst defaultOptions = {\n  strict: true\n};\n\nexport interface LinkAttrs {\n  href: string;\n  title?: string;\n  target?: string;\n}\n\nclass Link {\n  update(attrs: LinkAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, selection } = state;\n\n      const type: MarkType = schema.marks.link;\n      if (!type) {\n        return false;\n      }\n\n      if (selection.empty) {\n        return false;\n      }\n\n      return toggleMark(type, attrs)(state, dispatch);\n    };\n  }\n\n  insert(text: string, attrs: LinkAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, tr } = state;\n\n      const type: MarkType = schema.marks.link;\n      if (!type) {\n        return false;\n      }\n\n      const linkAttrs: LinkAttrs = {\n        href: attrs.href,\n        title: attrs.title ?? text,\n        target: attrs.target ?? '_blank'\n      };\n\n      const node = schema.text(text, [schema.marks.link.create(linkAttrs)]);\n\n      tr.replaceSelectionWith(node, false)\n        .scrollIntoView();\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n        return true;\n      }\n\n      return false;\n    };\n  }\n\n  isActive(state: EditorState, options = defaultOptions): boolean {\n    if (options.strict) {\n      return true;\n    }\n\n    const { schema } = state;\n    const type = schema.marks.link;\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  remove(state: EditorState, dispatch?: Dispatch): boolean {\n    return removeLink()(state, dispatch);\n  }\n\n  canExecute(state: EditorState): boolean {\n    const testAttrs: LinkAttrs = {\n      href: ''\n    }\n\n    return this.insert('Exec', testAttrs)(state) || this.update(testAttrs)(state);\n  }\n}\n\nexport default Link;\n","import { EditorState, NodeSelection } from 'prosemirror-state';\nimport { Command } from 'prosemirror-commands';\n\nimport { Dispatch } from './types';\n\nexport interface ImageAttrs {\n  alt?: string;\n  title?: string;\n  width?: string;\n}\n\nclass Image {\n  insert(src: string, attrs: ImageAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, tr, selection } = state;\n\n      const type = schema.nodes.image;\n      if (!type) {\n        return false;\n      }\n\n      const imageAttrs = {\n        width: null,\n        src,\n        ...attrs\n      };\n\n      if (!imageAttrs.width && selection instanceof NodeSelection && selection.node.type === type) {\n        imageAttrs.width = selection.node.attrs['width'];\n      }\n\n      tr.replaceSelectionWith(type.createAndFill(imageAttrs));\n\n      const resolvedPos = tr.doc.resolve(\n        tr.selection.anchor - tr.selection.$anchor.nodeBefore.nodeSize\n      );\n\n      tr\n        .setSelection(new NodeSelection(resolvedPos))\n        .scrollIntoView();\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n        return true;\n      }\n\n      return false;\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { selection } = state;\n    if (selection instanceof NodeSelection) {\n      return selection.node.type.name === 'image';\n    }\n\n    return false;\n  }\n}\n\nexport default Image;\n","import { MarkType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\nimport { Command } from 'prosemirror-commands';\n\nimport { getSelectionMarks, isMarkActive } from 'ngx-editor/helpers';\nimport { applyMark, removeMark } from 'ngx-editor/commands';\n\nimport { Dispatch } from './types';\n\ntype Name = 'text_color' | 'text_background_color';\ntype AttrName = 'color' | 'backgroundColor';\n\ninterface ColorAttrs {\n  color: string;\n}\n\ninterface BackgroundColorAttrs {\n  backgroundColor: string;\n}\n\nclass TextColor {\n  name: Name;\n  attrName: AttrName;\n\n  constructor(name: Name, attrName: AttrName = 'color') {\n    this.name = name;\n    this.attrName = attrName\n  }\n\n  apply(attrs: ColorAttrs | BackgroundColorAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, selection, doc } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      const { from, to, empty } = selection;\n\n      if (!empty && (from + 1 === to)) {\n        const node = doc.nodeAt(from);\n        if (node?.isAtom && !node.isText && node.isLeaf) {\n          // An atomic node (e.g. Image) is selected.\n          return false;\n        }\n      }\n\n      return applyMark(type, attrs)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n    const type: MarkType = schema.marks[this.name];\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  getActiveColors(state: EditorState): string[] {\n    if (!this.isActive(state)) {\n      return [];\n    }\n\n    const { schema } = state;\n    const marks = getSelectionMarks(state);\n\n    const colors = marks\n      .filter(mark => mark.type === schema.marks[this.name])\n      .map(mark => {\n        return mark.attrs[this.attrName]\n      })\n      .filter(Boolean);\n\n    return colors;\n  }\n\n  remove(): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema } = state;\n\n      const type = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return removeMark(type)(state, dispatch);\n    };\n  }\n\n  canExecute(state: EditorState): boolean {\n    const attrs = this.name === 'text_color' ? { color: '' } : { backgroundColor: '' };\n    return this.apply(attrs)(state);\n  }\n}\n\nexport default TextColor;\n","import Mark from './Mark';\nimport Blockquote from './Blockquote';\nimport ListItem from './ListItem';\nimport Heading from './Heading';\nimport TextAlign from './TextAlign';\nimport Link from './Link';\nimport Image from './Image';\nimport TextColor from './TextColor';\n\nexport const STRONG = new Mark('strong');\nexport const EM = new Mark('em');\nexport const CODE = new Mark('code');\nexport const UNDERLINE = new Mark('u');\nexport const STRIKE = new Mark('s');\nexport const BLOCKQUOTE = new Blockquote();\nexport const UL = new ListItem(true);\nexport const OL = new ListItem(false);\nexport const H1 = new Heading(1);\nexport const H2 = new Heading(2);\nexport const H3 = new Heading(3);\nexport const H4 = new Heading(4);\nexport const H5 = new Heading(5);\nexport const H6 = new Heading(6);\nexport const ALIGN_LEFT = new TextAlign('left');\nexport const ALIGN_CENTER = new TextAlign('center');\nexport const ALIGN_RIGHT = new TextAlign('right');\nexport const ALIGN_JUSTIFY = new TextAlign('justify');\nexport const LINK = new Link();\nexport const IMAGE = new Image();\nexport const TEXT_COLOR = new TextColor('text_color', 'color');\nexport const TEXT_BACKGROUND_COLOR = new TextColor('text_background_color', 'backgroundColor');\n","import * as Commands from '../../commands';\n\nimport { ToggleCommand } from '../../commands/types';\n\nexport const ToggleCommands: Record<string, ToggleCommand> = {\n  bold: Commands.STRONG,\n  italic: Commands.EM,\n  code: Commands.CODE,\n  underline: Commands.UNDERLINE,\n  strike: Commands.STRIKE,\n  blockquote: Commands.BLOCKQUOTE,\n  bullet_list: Commands.UL,\n  ordered_list: Commands.OL,\n  h1: Commands.H1,\n  h2: Commands.H2,\n  h3: Commands.H3,\n  h4: Commands.H4,\n  h5: Commands.H5,\n  h6: Commands.H6,\n  align_left: Commands.ALIGN_LEFT,\n  align_center: Commands.ALIGN_CENTER,\n  align_right: Commands.ALIGN_RIGHT,\n  align_justify: Commands.ALIGN_JUSTIFY\n};\n\nexport const Link = Commands.LINK;\nexport const Image = Commands.IMAGE;\nexport const TextColor = Commands.TEXT_COLOR;\nexport const TextBackgroundColor = Commands.TEXT_BACKGROUND_COLOR;\n","const defaults: Record<string, string> = {\n  // menu\n  bold: 'Bold',\n  italic: 'Italic',\n  code: 'Code',\n  underline: 'Underline',\n  strike: 'Strike',\n  blockquote: 'Blockquote',\n  bullet_list: 'Bullet List',\n  ordered_list: 'Ordered List',\n  heading: 'Heading',\n  h1: 'Header 1',\n  h2: 'Header 2',\n  h3: 'Header 3',\n  h4: 'Header 4',\n  h5: 'Header 5',\n  h6: 'Header 6',\n  align_left: 'Left Align',\n  align_center: 'Center Align',\n  align_right: 'Right Align',\n  align_justify: 'Justify',\n  text_color: 'Text Color',\n  background_color: 'Background Color',\n  insertLink: 'Insert Link',\n  removeLink: 'Remove Link',\n  insertImage: 'Insert Image',\n\n  // pupups, forms, others...\n  url: 'URL',\n  text: 'Text',\n  openInNewTab: 'Open in new tab',\n  insert: 'Insert',\n  altText: 'Alt Text',\n  title: 'Title',\n  remove: 'Remove',\n};\n\nexport type LocalsKeys = keyof typeof defaults;\n\nclass Locals {\n  locals = defaults;\n\n  constructor(newLocals: Partial<Record<LocalsKeys, string>> = {}) {\n    this.locals = Object.assign({}, defaults, newLocals);\n  }\n\n  get = (key: string):string => {\n    return this.locals[key] ?? '';\n  }\n}\n\nexport default Locals;\n","import { Injectable, Optional } from '@angular/core';\n\nimport { NgxEditorConfig} from './types';\nimport Locals from './Locals';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxEditorServiceConfig {\n  public locals = {};\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxEditorService {\n  config: NgxEditorServiceConfig;\n\n  constructor(@Optional() config?: NgxEditorServiceConfig) {\n    this.config = config;\n  }\n\n  get locals(): Locals {\n    return new Locals(this.config.locals);\n  }\n}\n\nexport const provideMyServiceOptions = (config?: NgxEditorConfig): NgxEditorServiceConfig => {\n  return {\n    locals: config.locals ?? {}\n  };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'sanitizeHtml'\n})\n\nexport class SanitizeHtmlPipe implements PipeTransform {\n\n  constructor(private sanitizer: DomSanitizer) { }\n\n  transform(value: string): SafeHtml {\n    return this.sanitizer.bypassSecurityTrustHtml(value);\n  }\n}\n","import { Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Icon from '../../../icons';\nimport { ToggleCommands } from '../MenuCommands';\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { TBItems, ToolbarItem } from '../../../types';\n\n@Component({\n  selector: 'ngx-toggle-command',\n  templateUrl: './toggle-command.component.html',\n  styleUrls: ['./toggle-command.component.scss']\n})\n\nexport class ToggleCommandComponent implements OnInit, OnDestroy {\n  @Input() toolbarItem: ToolbarItem;\n\n  get name(): TBItems {\n    return this.toolbarItem as TBItems;\n  }\n\n  html: string;\n  editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService\n  ) { }\n\n  @HostBinding('class.NgxEditor__MenuItem--Active') isActive = false;\n  @HostBinding('class.NgxEditor--Disabled') disabled = false;\n\n  toggle(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.editorView;\n    const command = ToggleCommands[this.name];\n    command.toggle()(state, dispatch);\n  }\n\n  update = (view: EditorView): void => {\n    const { state } = view;\n    const command = ToggleCommands[this.name];\n    this.isActive = command.isActive(state);\n    this.disabled = !command.canExecute(state);\n  }\n\n  getTitle(name: string): string {\n    return this.ngxeService.locals.get(name);\n  }\n\n  ngOnInit(): void {\n    this.html = Icon.get(this.name);\n\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<div class=\"NgxEditor__MenuItem--IconContainer\" [innerHTML]=\"html | sanitizeHtml\" (mousedown)=\"toggle($event)\"\n  [title]=\"getTitle(name)\">\n</div>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, OnDestroy, OnInit\n} from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport Icon from '../../../icons';\nimport { Link as LinkCommand } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-link',\n  templateUrl: './link.component.html',\n  styleUrls: ['./link.component.scss']\n})\n\nexport class LinkComponent implements OnInit, OnDestroy {\n  showPopup = false;\n  isActive = false;\n  private canExecute = true;\n  private editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  form = new FormGroup({\n    href: new FormControl('', [\n      Validators.required,\n      Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/??([^#\\n\\r]*)?#?([^\\n\\r]*)')\n    ]),\n    text: new FormControl('', [Validators.required]),\n    openInNewTab: new FormControl(true)\n  });\n\n  constructor(\n    private el: ElementRef,\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService\n  ) { }\n\n  @HostBinding('class.NgxEditor__MenuItem--Active') get valid(): boolean {\n    return this.isActive || this.showPopup;\n  }\n\n  @HostBinding('class.NgxEditor--Disabled') get disabled(): boolean {\n    return !this.canExecute;\n  }\n\n  get icon(): string {\n    return Icon.get(this.isActive ? 'unlink' : 'link');\n  }\n\n  get title(): string {\n    return this.ngxeService.locals.get(this.isActive ? 'removeLink' : 'insertLink');\n  }\n\n  get href(): AbstractControl {\n    return this.form.get('href');\n  }\n\n  get text(): AbstractControl {\n    return this.form.get('text');\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hideForm();\n    }\n  }\n\n  getLabel(key: string): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  private hideForm(): void {\n    this.showPopup = false;\n    this.form.reset({\n      href: '',\n      text: '',\n      openInNewTab: true\n    });\n    this.text.enable();\n  }\n\n  onMouseDown(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.editorView;\n\n    if (this.isActive) {\n      LinkCommand.remove(state, dispatch);\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n    if (this.showPopup) {\n      this.setText();\n    }\n  }\n\n  private setText = () => {\n    const { state: { selection, doc } } = this.editorView;\n    const { empty, from, to } = selection;\n    const selectedText = !empty ? doc.textBetween(from, to) : '';\n\n    if (selectedText) {\n      this.text.patchValue(selectedText);\n      this.text.disable();\n    }\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.isActive = LinkCommand.isActive(state, { strict: false });\n    this.canExecute = LinkCommand.canExecute(state);\n  }\n\n  insertLink(e: MouseEvent): void {\n    e.preventDefault();\n    const { text, href, openInNewTab } = this.form.getRawValue();\n    const { dispatch, state } = this.editorView;\n    const { selection } = state;\n\n    const attrs = {\n      title: href,\n      href,\n      target: openInNewTab ? '_blank' : '_self'\n    };\n\n    if (selection.empty) {\n      LinkCommand.insert(text, attrs)(state, dispatch);\n      this.editorView.focus();\n    } else {\n      LinkCommand.update(attrs)(state, dispatch);\n    }\n    this.hideForm();\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<div class=\"NgxEditor__MenuItem--IconContainer\" [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"onMouseDown($event)\"\n  [title]=\"title\">\n</div>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('url')}}</label>\n        <input type=\"href\" id=\"href\" formControlName=\"href\" autofocus autocomplete=\"off\" />\n        <div *ngIf=\"href.touched && href.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ href.errors?.['pattern'] && 'Please enter valid url.' }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('text')}}</label>\n        <input type=\"text\" formControlName=\"text\" autocomplete=\"off\" />\n        <div *ngIf=\"text.touched && text.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ text.errors?.['required'] && 'This is required' }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label>\n          <input type=\"checkbox\" formControlName=\"openInNewTab\" />\n          {{getLabel('openInNewTab')}}\n        </label>\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid\">{{getLabel('insert')}}</button>\n\n  </form>\n</div>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, OnDestroy, OnInit\n} from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport Icon from '../../../icons';\nimport { Image as ImageCommand } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-image',\n  templateUrl: './image.component.html',\n  styleUrls: ['./image.component.scss']\n})\nexport class ImageComponent implements OnInit, OnDestroy {\n  showPopup = false;\n  isActive = false;\n  private updateSubscription: Subscription;\n\n  form = new FormGroup({\n    src: new FormControl('', [\n      Validators.required,\n      Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/??([^#\\n\\r]*)?#?([^\\n\\r]*)')\n    ]),\n    alt: new FormControl(''),\n    title: new FormControl('')\n  });\n\n  private editorView: EditorView;\n\n  constructor(\n    private el: ElementRef,\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService\n  ) { }\n\n  @HostBinding('class.NgxEditor__MenuItem--Active') get valid(): boolean {\n    return this.isActive || this.showPopup;\n  }\n\n  get icon(): string {\n    return Icon.get('image');\n  }\n\n  get src(): AbstractControl {\n    return this.form.get('src');\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hideForm();\n    }\n  }\n\n  getLabel(key: string): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  private hideForm(): void {\n    this.showPopup = false;\n    this.form.reset({\n      src: '',\n      alt: '',\n      title: ''\n    });\n  }\n\n  onMouseDown(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n\n    if (this.showPopup) {\n      this.fillForm();\n    }\n  }\n\n  private fillForm(): void {\n    const { state } = this.editorView;\n    const { selection } = state;\n    if (selection instanceof NodeSelection && this.isActive) {\n      const { src, alt = '', title = '' } = selection.node.attrs;\n\n      this.form.setValue({\n        src,\n        alt,\n        title\n      });\n    }\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.isActive = ImageCommand.isActive(state);\n  }\n\n  insertLink(e: MouseEvent): void {\n    e.preventDefault();\n    const { src, alt, title } = this.form.getRawValue();\n    const { dispatch, state } = this.editorView;\n\n    const attrs = {\n      alt,\n      title\n    };\n\n    ImageCommand.insert(src, attrs)(state, dispatch);\n    this.editorView.focus();\n    this.hideForm();\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<div class=\"NgxEditor__MenuItem--IconContainer\" [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"onMouseDown($event)\"\n  [title]=\"getLabel('insertImage')\">\n</div>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('url')}}</label>\n        <input type=\"href\" id=\"href\" formControlName=\"src\" autofocus autocomplete=\"off\" />\n        <div *ngIf=\"src.touched && src.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ src.errors?.['pattern'] && 'Please enter valid url.' }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('altText')}}</label>\n        <input type=\"text\" formControlName=\"alt\" autocomplete=\"off\" />\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('title')}}</label>\n        <input type=\"text\" formControlName=\"title\" autocomplete=\"off\" />\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid || !form.dirty\">{{getLabel('insert')}}</button>\n\n  </form>\n</div>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, Input, OnDestroy, OnInit\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { ToggleCommands } from '../MenuCommands';\nimport { TBHeadingItems } from '../../../types';\n\n@Component({\n  selector: 'ngx-dropdown',\n  templateUrl: './dropdown.component.html',\n  styleUrls: ['./dropdown.component.scss']\n})\nexport class DropdownComponent implements OnInit, OnDestroy {\n  private editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  @Input() group: string;\n  @Input() items: TBHeadingItems[];\n\n  isDropdownOpen = false;\n\n  private activeItems: TBHeadingItems[] = [];\n  disabledItems: string[] = [];\n  activeItem: string | null;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n    private el: ElementRef\n  ) { }\n\n  @HostBinding('class.NgxEditor__Dropdown--Selected') get isSelected(): boolean {\n    return Boolean(this.activeItem || this.isDropdownOpen);\n  }\n\n  @HostBinding('class.NgxEditor--Disabled') get isDropdownDisabled(): boolean {\n    return this.disabledItems.length === this.items.length;\n  }\n\n  @HostListener('document:mousedown', ['$event.target']) onDocumentClick(target: Node): void {\n    if (!this.el.nativeElement.contains(target) && this.isDropdownOpen) {\n      this.isDropdownOpen = false;\n    }\n  }\n\n  getName(key: string): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  toggleDropdown(e: MouseEvent): void {\n    e.preventDefault();\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n\n  trackByIndex(index: number): number {\n    return index\n  }\n\n  onClick(e: MouseEvent, item: TBHeadingItems): void {\n    e.preventDefault();\n\n    // consider only left click\n    if (e.button !== 0) {\n      return;\n    }\n\n    const command = ToggleCommands[item];\n    const { state, dispatch } = this.editorView;\n    command.toggle()(state, dispatch);\n    this.isDropdownOpen = false;\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.activeItems = [];\n    this.disabledItems = [];\n\n    this.items.forEach((item: TBHeadingItems) => {\n      const command = ToggleCommands[item];\n      const isActive = command.isActive(state);\n\n      if (isActive) {\n        this.activeItems.push(item);\n      }\n\n      if (!command.canExecute(state)) {\n        this.disabledItems.push(item);\n      }\n    });\n\n    if (this.activeItems.length === 1) {\n      this.activeItem = this.activeItems[0];\n    } else {\n      this.activeItem = null;\n    }\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<div class=\"NgxEditor__Dropdown--Text\" (mousedown)=\"toggleDropdown($event)\">\n  {{getName(activeItem || group)}}\n</div>\n\n<div class=\"NgxEditor__Dropdown--DropdownMenu\" *ngIf=\"isDropdownOpen\">\n  <div class=\"NgxEditor__Dropdown--Item\" *ngFor=\"let item of items; trackBy: trackByIndex\" (mousedown)=\"onClick($event, item)\"\n    [ngClass]=\"{'NgxEditor__Dropdown--Active': item === activeItem, 'NgxEditor--Disabled':disabledItems.includes(item)}\">\n    {{getName(item)}}\n  </div>\n</div>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, OnDestroy, Input, OnInit\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Icon from '../../../icons';\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { TextColor, TextBackgroundColor } from '../MenuCommands';\n\ntype Command = typeof TextColor | typeof TextBackgroundColor;\n\n@Component({\n  selector: 'ngx-color-picker',\n  templateUrl: './color-picker.component.html',\n  styleUrls: ['./color-picker.component.scss']\n})\nexport class ColorPickerComponent implements OnInit, OnDestroy {\n  @Input() presets: string[][];\n  @Input() type: string;\n\n  constructor(\n    private el: ElementRef,\n    private menuService: MenuService,\n    private ngxeService: NgxEditorService\n  ) { }\n\n  @HostBinding('class.NgxEditor__MenuItem--Active') get valid(): boolean {\n    return this.isActive || this.showPopup;\n  }\n\n  @HostBinding('class.NgxEditor--Disabled') get disabled(): boolean {\n    return !this.canExecute;\n  }\n\n  get title(): string {\n    return this.getLabel(this.type === 'text_color' ? 'text_color' : 'background_color');\n  }\n\n  get icon(): string {\n    return Icon.get(this.type === 'text_color' ? 'text_color' : 'color_fill');\n  }\n\n  private get command(): Command {\n    return this.type === 'text_color' ? TextColor : TextBackgroundColor;\n  }\n\n  private updateSubscription: Subscription;\n  private editorView: EditorView;\n  showPopup = false;\n  isActive = false;\n  activeColors: string[] = [];\n  private canExecute = true;\n\n  getContrastYIQ(hexcolor: string): string {\n    const color = hexcolor.replace('#', '');\n    const r = parseInt(color.substring(0, 2), 16);\n    const g = parseInt(color.substring(2, 4), 16);\n    const b = parseInt(color.substring(4, 6), 16);\n    const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n    return (yiq >= 128) ? 'black' : 'white';\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hidePopup();\n    }\n  }\n\n  private hidePopup(): void {\n    this.showPopup = false;\n  }\n\n  togglePopup(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n  }\n\n  remove(e: MouseEvent): void {\n    e.preventDefault();\n    const { state, dispatch } = this.editorView;\n\n    this.command.remove()(state, dispatch);\n    this.hidePopup();\n  }\n\n  trackByIndex(index: number): number {\n    return index\n  }\n\n  onColorSelect(e: MouseEvent, color: string): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.editorView;\n\n    if (this.type === 'text_color') {\n      const attrs = { color };\n      this.command.apply(attrs)(state, dispatch);\n    } else {\n      const attrs = { backgroundColor: color };\n      this.command.apply(attrs)(state, dispatch);\n    }\n\n    if (!this.editorView.hasFocus()) {\n      this.editorView.focus();\n    }\n\n    this.hidePopup();\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.canExecute = this.command.canExecute(state);\n    this.isActive = this.command.isActive(state);\n    this.activeColors = [];\n\n    if (this.isActive) {\n      this.activeColors = this.command.getActiveColors(state);\n    }\n  }\n\n  getLabel(key: string): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<div class=\"NgxEditor__MenuItem--IconContainer\" [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"togglePopup($event)\"\n  [title]=\"title\">\n</div>\n\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <div *ngFor=\"let colorGroup of presets; trackBy: trackByIndex\" class=\"NgxEditor__ColorContainer\">\n    <button class=\"NgxEditor__Color\" *ngFor=\"let color of colorGroup; trackBy: trackByIndex\"\n      [ngStyle]=\"{backgroundColor: color, color:getContrastYIQ(color)}\" [title]=\"color\"\n      (mousedown)=\"onColorSelect($event, color)\"\n      [ngClass]=\"{'NgxEditor__Color--Active': activeColors.includes(color)}\"></button>\n  </div>\n\n  <button class=\"NgxEditor__MenuItem--Button\" (mousedown)=\"remove($event)\" [disabled]=\"!isActive\">\n    {{getLabel('remove')}}\n  </button>\n</div>\n","import {\n  Component, Input,\n  OnInit, TemplateRef\n} from '@angular/core';\n\nimport { Toolbar, ToolbarItem, ToolbarDropdown } from '../../types';\n\nimport { MenuService } from './menu.service';\nimport Editor from '../../Editor';\n\nexport const DEFAULT_TOOLBAR: Toolbar = [\n  ['bold', 'italic'],\n  ['code', 'blockquote'],\n  ['underline', 'strike'],\n  ['ordered_list', 'bullet_list'],\n  [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n  ['link', 'image'],\n  ['text_color', 'background_color'],\n  ['align_left', 'align_center', 'align_right', 'align_justify'],\n];\n\nexport const TOOLBAR_MINIMAL: Toolbar = [\n  ['bold', 'italic'],\n  [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n  ['link', 'image'],\n  ['text_color', 'background_color'],\n]\n\nconst DEFAULT_COLOR_PRESETS = [\n  '#b60205',\n  '#d93f0b',\n  '#fbca04',\n  '#0e8a16',\n  '#006b75',\n  '#1d76db',\n  '#0052cc',\n  '#5319e7',\n  '#e99695',\n  '#f9d0c4',\n  '#fef2c0',\n  '#c2e0c6',\n  '#bfdadc',\n  '#c5def5',\n  '#bfd4f2',\n  '#d4c5f9'\n];\n\n@Component({\n  selector: 'ngx-editor-menu',\n  templateUrl: './menu.component.html',\n  styleUrls: ['./menu.component.scss'],\n  providers: [MenuService]\n})\n\nexport class MenuComponent implements OnInit {\n  @Input() toolbar: Toolbar = TOOLBAR_MINIMAL;\n  @Input() colorPresets: string[] = DEFAULT_COLOR_PRESETS;\n  @Input() disabled = false;\n  @Input() editor: Editor;\n  @Input() customMenuRef: TemplateRef<any> | null = null;\n  @Input() dropdownPlacement: 'top' | 'bottom' = 'bottom';\n\n  toggleCommands: any[] = [\n    'bold', 'italic',\n    'underline', 'strike',\n    'code', 'blockquote',\n    'ordered_list', 'bullet_list',\n    'align_left', 'align_center', 'align_right', 'align_justify'\n  ];\n\n  iconContainerClass = ['NgxEditor__MenuItem', 'NgxEditor__MenuItem--Icon'];\n  dropdownContainerClass = ['NgxEditor__Dropdown'];\n  seperatorClass = ['NgxEditor__Seperator'];\n\n  constructor(private menuService: MenuService) { }\n\n  get presets(): string[][] {\n    const col = 8;\n    const colors: string[][] = [];\n\n    this.colorPresets.forEach((color, index) => {\n      const row = Math.floor(index / col);\n\n      if (!colors[row]) {\n        colors.push([]);\n      }\n\n      colors[row].push(color);\n    });\n\n    return colors;\n  }\n\n  trackByIndex(index: number): number {\n    return index\n  }\n\n  isDropDown(item: ToolbarItem): boolean {\n    if ((item as ToolbarDropdown)?.heading) {\n      return true;\n    }\n\n    return false;\n  }\n\n  getDropdownItems(item: ToolbarItem): ToolbarDropdown {\n    return item as ToolbarDropdown;\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new Error('NgxEditor: Required editor instance');\n    }\n\n    this.menuService.editor = this.editor;\n  }\n}\n","<div class=\"NgxEditor__MenuBar\"\n  [ngClass]=\"{'NgxEditor--Disabled': disabled, 'NgxEditor__MenuBar--Reverse': dropdownPlacement === 'top'}\">\n\n  <ng-container *ngFor=\"let toolbarItem of toolbar; let lastToolbarItem = last; trackBy: trackByIndex\">\n    <ng-container *ngFor=\"let item of toolbarItem; let lastItem = last; trackBy: trackByIndex\">\n\n      <!-- toggle icons -->\n      <ngx-toggle-command [toolbarItem]=\"item\" [class]=\"iconContainerClass\" *ngIf=\"toggleCommands.includes(item)\">\n      </ngx-toggle-command>\n\n      <!-- link -->\n      <ngx-link [class]=\"iconContainerClass\" *ngIf=\"item === 'link'\"></ngx-link>\n\n      <!-- image -->\n      <ngx-image [class]=\"iconContainerClass\" *ngIf=\"item === 'image'\">\n      </ngx-image>\n\n      <!-- dropdown -->\n      <ng-container *ngIf=\"isDropDown(item)\">\n        <ngx-dropdown *ngFor=\"let dropdownItem of getDropdownItems(item) | keyvalue; trackBy: trackByIndex\"\n          [class]=\"dropdownContainerClass\" [group]=\"dropdownItem.key\" [items]=\"dropdownItem.value\">\n        </ngx-dropdown>\n      </ng-container>\n\n      <!-- text color picker -->\n      <ngx-color-picker [class]=\"iconContainerClass\" *ngIf=\"item === 'text_color'\" type=\"text_color\"\n        [presets]=\"presets\">\n      </ngx-color-picker>\n      <!-- background color picker -->\n      <ngx-color-picker [class]=\"iconContainerClass\" *ngIf=\"item === 'background_color'\" type=\"background_color\"\n        [presets]=\"presets\">\n      </ngx-color-picker>\n\n      <!-- seperator -->\n      <div [class]=\"seperatorClass\" *ngIf=\"lastItem && !lastToolbarItem\"></div>\n    </ng-container>\n  </ng-container>\n\n  <!-- custom menu -->\n  <ng-container *ngIf=\"customMenuRef\">\n    <ng-container [ngTemplateOutlet]=\"customMenuRef\"></ng-container>\n  </ng-container>\n\n</div>\n","import {\n  Component, Input, OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Editor from '../../../Editor';\nimport Icon from '../../../icons';\nimport { TBItems } from '../../../types';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { ToggleCommands } from '../MenuCommands';\nimport { NgxEditorService } from '../../../editor.service';\n\n@Component({\n  selector: 'ngx-bubble',\n  templateUrl: './bubble.component.html',\n  styleUrls: ['./bubble.component.scss']\n})\nexport class BubbleComponent implements OnInit, OnDestroy {\n  constructor(private sanitizeHTML: SanitizeHtmlPipe, private ngxeService: NgxEditorService) { }\n\n  private get view(): EditorView {\n    return this.editor.view;\n  }\n\n  @Input() editor: Editor;\n\n  private updateSubscription: Subscription;\n  execulableItems: TBItems[] = [];\n  activeItems: TBItems[] = [];\n\n  toolbar: TBItems[][] = [\n    ['bold', 'italic', 'underline', 'strike'],\n    ['ordered_list', 'bullet_list', 'blockquote', 'code'],\n    ['align_left', 'align_center', 'align_right', 'align_justify']\n  ];\n\n  toggleCommands: TBItems[] = [\n    'bold', 'italic', 'underline', 'strike',\n    'ordered_list', 'bullet_list', 'blockquote', 'code',\n    'align_left', 'align_center', 'align_right', 'align_justify'\n  ];\n\n  getIcon(name: TBItems): SafeHtml {\n    const icon = Icon.get(name);\n    return this.sanitizeHTML.transform(icon);\n  }\n\n  getTitle(name: string): string {\n    return this.ngxeService.locals.get(name);\n  }\n\n  trackByIndex(index: number): number {\n    return index\n  }\n\n  onClick(e: MouseEvent, commandName: TBItems): void {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.view;\n\n    const command = ToggleCommands[commandName];\n    command.toggle()(state, dispatch);\n  }\n\n  private update(view: EditorView): void {\n    this.activeItems = [];\n    this.execulableItems = [];\n    const { state } = view;\n\n    this.toggleCommands.forEach(toolbarItem => {\n      const command = ToggleCommands[toolbarItem];\n\n      const isActive = command.isActive(state);\n      if (isActive) {\n        this.activeItems.push(toolbarItem);\n      }\n\n      const canExecute = command.canExecute(state);\n\n      if (canExecute) {\n        this.execulableItems.push(toolbarItem);\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.updateSubscription = this.editor.update\n      .subscribe((view) => {\n        this.update(view);\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<ng-container *ngFor=\"let toolbarItem of toolbar; let lastToolbarItem = last; trackBy: trackByIndex\">\n  <ng-container *ngFor=\"let item of toolbarItem; let lastItem = last; trackBy: trackByIndex\">\n    <div class=\"NgxBubbleMenu__Icon\" [ngClass]=\"{'NgxBubbleMenu__Icon--Active': this.activeItems.includes(item),\n  'NgxEditor--Disabled': !this.execulableItems.includes(item)}\" (mousedown)=\"onClick($event, item)\"\n      *ngIf=\"toggleCommands.includes(item)\" [title]=\"getTitle(item)\" [innerHTML]=\"getIcon(item)\">\n    </div>\n    <div class=\"NgxBubbleMenu__Seperator\" *ngIf=\"lastItem && !lastToolbarItem\"></div>\n  </ng-container>\n</ng-container>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, Input, OnDestroy, OnInit\n} from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { asyncScheduler, fromEvent, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\nimport Editor from '../../../Editor';\nimport Icon from '../../../icons';\nimport { TBItems } from '../../../types';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\n\ninterface BubblePosition {\n  top: number;\n  left: number;\n}\n\n@Component({\n  selector: 'ngx-editor-floating-menu',\n  templateUrl: './floating-menu.component.html',\n  styleUrls: ['./floating-menu.component.scss']\n})\nexport class FloatingMenuComponent implements OnInit, OnDestroy {\n\n  constructor(public el: ElementRef<HTMLElement>, private sanitizeHTML: SanitizeHtmlPipe) { }\n\n  @HostBinding('style') get display(): Partial<CSSStyleDeclaration> {\n    return {\n      visibility: this.showMenu ? 'visible' : 'hidden',\n      opacity: this.showMenu ? '1' : '0',\n      top: this.posTop + 'px',\n      left: this.posLeft + 'px',\n    };\n  }\n\n  private get view(): EditorView {\n    return this.editor.view;\n  }\n\n  @Input() editor: Editor;\n\n  private posLeft = 0;\n  private posTop = 0;\n  private showMenu = false;\n  private updateSubscription: Subscription;\n  private dragging = false;\n  private resizeSubscription: Subscription;\n  execulableItems: TBItems[] = [];\n  activeItems: TBItems[] = [];\n\n  @HostListener('document:mousedown', ['$event']) onMouseDown(e: MouseEvent): void {\n    const target = e.target as Node\n\n    if (this.el.nativeElement.contains(target) && target.nodeName !== 'INPUT') {\n      e.preventDefault();\n      return;\n    }\n\n    this.dragging = true;\n  }\n\n  @HostListener('document:keydown', ['$event']) onKeyDown(e: KeyboardEvent): void {\n    const target = e.target as Node\n\n    if (target.nodeName === 'INPUT') {\n      return;\n    }\n\n    this.dragging = true;\n    this.hide();\n  }\n\n  @HostListener('document:mouseup', ['$event']) onMouseUp(e: MouseEvent): void {\n    const target = e.target as Node\n\n    if (this.el.nativeElement.contains(target) || target.nodeName === 'INPUT') {\n      e.preventDefault();\n      return\n    }\n\n    this.dragging = false;\n    this.useUpdate();\n  }\n\n  @HostListener('document:keyup', ['$event']) onKeyUp(e: KeyboardEvent): void {\n    const target = e.target as Node\n\n    if (target.nodeName === 'INPUT') {\n      return;\n    }\n\n    this.dragging = false;\n    this.useUpdate();\n  }\n\n  private useUpdate(): void {\n    if (!this.view) {\n      return;\n    }\n\n    this.update(this.view);\n  }\n\n  private hide(): void {\n    this.showMenu = false;\n  }\n\n  private show(): void {\n    this.showMenu = true;\n  }\n\n  private calculateBubblePosition(view: EditorView): BubblePosition {\n    const { state: { selection } } = view;\n    const { from } = selection;\n\n    // the floating bubble itself\n    const bubbleEl = this.el.nativeElement;\n    const bubble = bubbleEl.getBoundingClientRect();\n\n    // The box in which the tooltip is positioned, to use as base\n    const box = bubbleEl.parentElement.getBoundingClientRect();\n\n    const start = view.coordsAtPos(from);\n\n    let left = start.left - box.left;\n\n    const overflowsRight = (\n      box.right < (start.left + bubble.width) ||\n      bubble.right > box.right\n    );\n\n    if (overflowsRight) {\n      left = box.width - bubble.width;\n    }\n\n    if (left < 0) {\n      left = 0;\n    }\n\n    const bubbleHeight = bubble.height + parseInt(getComputedStyle(bubbleEl).marginBottom, 10);\n    const top = (start.top - box.top) - bubbleHeight;\n\n    return {\n      left,\n      top\n    };\n  }\n\n  private update(view: EditorView): void {\n    const { state } = view;\n    const { selection } = state;\n    const { empty } = selection;\n\n    if (selection instanceof NodeSelection) {\n      if (selection.node.type.name === 'image') {\n        this.hide();\n        return;\n      }\n    }\n\n    const hasFocus = this.view.hasFocus();\n\n    if (!hasFocus || empty || this.dragging) {\n      this.hide();\n      return;\n    }\n\n    const { top, left } = this.calculateBubblePosition(this.view);\n\n    this.posLeft = left;\n    this.posTop = top;\n\n    this.show();\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new Error('NgxEditor: Required editor instance');\n    }\n\n    this.updateSubscription = this.editor.update\n      .subscribe((view) => {\n        this.update(view);\n      });\n\n    this.resizeSubscription = fromEvent(window, 'resize').pipe(\n      throttleTime(500, asyncScheduler, { leading: true, trailing: true })\n    ).subscribe(() => {\n      this.useUpdate();\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n    this.resizeSubscription.unsubscribe();\n  }\n}\n","<div #ref>\n  <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"ref.children.length === 0\">\n  <ngx-bubble [editor]=\"editor\"></ngx-bubble>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MenuComponent } from './menu.component';\nimport { ToggleCommandComponent } from './toggle-command/toggle-command.component';\nimport { LinkComponent } from './link/link.component';\nimport { DropdownComponent } from './dropdown/dropdown.component';\nimport { ImageComponent } from './image/image.component';\nimport { ColorPickerComponent } from './color-picker/color-picker.component';\nimport { FloatingMenuComponent } from './floating-menu/floating-menu.component';\nimport { BubbleComponent } from './bubble/bubble.component';\n\nimport { SanitizeHtmlPipe } from '../../pipes/sanitize/sanitize-html.pipe';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule\n  ],\n  declarations: [\n    // pipes\n    SanitizeHtmlPipe,\n\n    // components\n    MenuComponent,\n    ToggleCommandComponent,\n    LinkComponent,\n    DropdownComponent,\n    ImageComponent,\n    ColorPickerComponent,\n\n    FloatingMenuComponent,\n    BubbleComponent\n  ],\n  providers: [\n    SanitizeHtmlPipe,\n  ],\n  exports: [\n    MenuComponent,\n    FloatingMenuComponent\n  ],\n})\n\nexport class MenuModule { }\n","import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxEditorConfig } from './types';\n\nimport { NgxEditorComponent } from './editor.component';\nimport { NgxEditorService, NgxEditorServiceConfig, provideMyServiceOptions } from './editor.service';\nimport { MenuModule } from './modules/menu/menu.module';\n\nimport { MenuComponent } from './modules/menu/menu.component';\nimport { ImageViewComponent } from './components/image-view/image-view.component';\nimport { FloatingMenuComponent } from './modules/menu/floating-menu/floating-menu.component';\n\nconst NGX_EDITOR_CONFIG_TOKEN = new InjectionToken<NgxEditorConfig>('NgxEditorConfig');\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MenuModule,\n  ],\n  providers: [],\n  declarations: [\n    NgxEditorComponent,\n    ImageViewComponent\n  ],\n  exports: [\n    NgxEditorComponent,\n    MenuComponent,\n    FloatingMenuComponent\n  ]\n})\n\nexport class NgxEditorModule {\n  static forRoot(config: NgxEditorConfig): ModuleWithProviders<NgxEditorModule> {\n\n    return {\n      ngModule: NgxEditorModule,\n      providers: [\n        {\n          provide: NGX_EDITOR_CONFIG_TOKEN,\n          useValue: config\n        },\n        {\n          provide: NgxEditorServiceConfig,\n          useFactory: provideMyServiceOptions,\n          deps: [NGX_EDITOR_CONFIG_TOKEN]\n        }\n      ]\n    };\n  }\n\n  static forChild(config: NgxEditorConfig): ModuleWithProviders<NgxEditorModule> {\n    return {\n      ngModule: NgxEditorModule,\n      providers: [\n        {\n          provide: NGX_EDITOR_CONFIG_TOKEN,\n          useValue: config\n        },\n        {\n          provide: NgxEditorServiceConfig,\n          useFactory: provideMyServiceOptions,\n          deps: [NGX_EDITOR_CONFIG_TOKEN]\n        },\n        NgxEditorService,\n      ]\n    };\n  }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { Schema, Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport { parseContent } from './parsers';\nimport defaultSchema from './schema';\n\ntype ValidationErrors = Record<string, any>;\n\nconst isEmptyInputValue = (value: any): boolean => {\n  // we don't check for string here so it also works with arrays\n  return value === null || value.length === 0;\n};\n\nconst hasValidLength = (value: any): boolean => {\n  // non-strict comparison is intentional, to check for both `null` and `undefined` values\n  return value != null && typeof value.length === 'number';\n};\n\nconst isDocEmpty = (doc: ProseMirrorNode | null): boolean => {\n  if (!doc) {\n    return true;\n  }\n\n  const { childCount, firstChild } = doc;\n  return Boolean(childCount === 1 && firstChild?.isTextblock && firstChild.content.size === 0);\n};\n\n// @dynamic\nexport class Validators {\n\n  static required(userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const isEmpty = isDocEmpty(doc);\n\n      if (!isEmpty) {\n        return null;\n      }\n\n      return {\n        required: true\n      };\n    };\n  }\n\n  static maxLength(maxLength: number, userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const value = doc.textContent;\n\n      if (hasValidLength(value) && value.length > maxLength) {\n        return {\n          maxlength: {\n            requiredLength: maxLength,\n            actualLength: value.length\n          }\n        };\n      }\n\n      return null;\n    };\n  }\n\n  static minLength(minLength: number, userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const value = doc.textContent;\n\n      if (isEmptyInputValue(value) || !hasValidLength(value)) {\n        // don't validate empty values to allow optional controls\n        // don't validate values without `length` property\n        return null;\n      }\n\n      if (value.length < minLength) {\n        return {\n          minlength: {\n            requiredLength: minLength, actualLength: value.length\n          }\n        };\n      }\n\n      return null;\n    };\n  }\n}\n","import { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport {\n  chainCommands, createParagraphNear, liftEmptyBlock,\n  newlineInCode, splitBlock\n} from 'prosemirror-commands';\nimport { DOMParser } from 'prosemirror-model';\n\nimport MarkCommand from './commands/Mark';\nimport ListCommand from './commands/ListItem';\nimport LinkCommand, { LinkAttrs } from './commands/Link';\nimport HeadingCommand, { HeadingLevels } from './commands/Heading';\nimport ImageCommand, { ImageAttrs } from './commands/Image';\nimport TextColorCommand from './commands/TextColor';\nimport TextAlignCommand, { Align } from './commands/TextAlign';\n\nconst execMark = (name: string, toggle = false) => {\n  return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n    const command = new MarkCommand(name);\n\n    if (!toggle) {\n      return command.apply()(state, dispatch);\n    }\n\n    return command.toggle()(state, dispatch);\n  };\n};\n\nclass EditorCommands {\n  private view: EditorView;\n  private state: EditorState;\n  private tr: Transaction;\n\n  constructor(view: EditorView) {\n    if (!view) {\n      throw Error('NgxEditor: Required view to initialize commands.');\n    }\n\n    this.view = view;\n    this.state = view.state;\n    this.tr = this.view.state.tr;\n  }\n\n  private applyTrx = (tr?: Transaction) => {\n    this.state = this.state.apply(tr ?? this.tr);\n    this.tr = this.state.tr;\n    this.tr.setMeta('APPLIED_TRX', true);\n  }\n\n  private dispatch = (tr: Transaction): void => {\n    this.applyTrx(tr);\n  }\n\n  exec(): boolean {\n    // No changes applied\n    if (!this.tr.getMeta('APPLIED_TRX')) {\n      return false;\n    }\n\n    const forceEmit = !this.view.state.doc.eq(this.state.doc);\n    this.view.updateState(this.state);\n\n    const tr = this.tr\n      .setMeta('FORCE_EMIT', forceEmit);\n\n    this.view.dispatch(tr);\n    return true;\n  }\n\n  focus(): this {\n    this.view.focus();\n    return this;\n  }\n\n  scrollIntoView(): this {\n    this.tr.scrollIntoView();\n    this.applyTrx();\n    return this;\n  }\n\n  insertText(text: string): this {\n    this.tr.insertText(text);\n    this.applyTrx();\n    return this;\n  }\n\n  insertNewLine(): this {\n    const newLineCommands = [newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock];\n    chainCommands(...newLineCommands)(this.state, this.dispatch);\n    return this;\n  }\n\n  applyMark(name: string): this {\n    execMark(name, false)(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleMark(name: string): this {\n    execMark(name, true)(this.state, this.dispatch);\n    return this;\n  }\n\n  bold(): this {\n    execMark('strong')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleBold(): this {\n    execMark('strong', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  italics(): this {\n    execMark('em')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleItalics(): this {\n    execMark('em', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  underline(): this {\n    execMark('u')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleUnderline(): this {\n    execMark('u', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  strike(): this {\n    execMark('s')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleStrike(): this {\n    execMark('s', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  code(): this {\n    execMark('code')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleCode(): this {\n    execMark('code', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleOrderedList(): this {\n    const command = new ListCommand(false);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleBulletList(): this {\n    const command = new ListCommand(true);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleHeading(level: HeadingLevels): this {\n    const command = new HeadingCommand(level);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  insertLink(text: string, attrs: LinkAttrs): this {\n    const command = new LinkCommand();\n    command.insert(text, attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  updateLink(attrs: LinkAttrs): this {\n    const command = new LinkCommand();\n    command.update(attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  insertImage(src: string, attrs: ImageAttrs = {}): this {\n    const command = new ImageCommand();\n    command.insert(src, attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  textColor(color: string): this {\n    const command = new TextColorCommand('text_color');\n    command.apply({ color })(this.state, this.dispatch);\n    return this;\n  }\n\n  backgroundColor(color: string): this {\n    const command = new TextColorCommand('text_background_color');\n    command.apply({ backgroundColor: color })(this.state, this.dispatch);\n    return this;\n  }\n\n  removeTextColor(): this {\n    const command = new TextColorCommand('text_color');\n    command.remove()(this.state, this.dispatch);\n    return this;\n  }\n\n  removeBackgroundColor(): this {\n    const command = new TextColorCommand('text_background_color');\n    command.remove()(this.state, this.dispatch);\n    return this;\n  }\n\n  align(p: Align): this {\n    const command = new TextAlignCommand(p);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  insertHTML(html: string): this {\n    const { selection, schema, tr } = this.state;\n    const { from, to } = selection;\n\n    const element = document.createElement('div');\n    element.innerHTML = html.trim();\n    const slice = DOMParser.fromSchema(schema).parseSlice(element);\n\n    const transaction = tr.replaceRange(from, to, slice);\n    this.applyTrx(transaction);\n\n    return this;\n  }\n}\n\nexport default EditorCommands;\n","import { MarkType, NodeType, Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { keymap } from 'prosemirror-keymap';\nimport { toggleMark, baseKeymap, chainCommands, exitCode } from 'prosemirror-commands';\nimport { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list';\nimport { history, undo, redo } from 'prosemirror-history';\nimport {\n  inputRules, wrappingInputRule, textblockTypeInputRule,\n  smartQuotes, emDash, ellipsis, InputRule\n} from 'prosemirror-inputrules';\n\nimport { markInputRule } from 'ngx-editor/helpers';\n\ninterface Options {\n  history: boolean;\n  keyboardShortcuts: boolean;\n  inputRules: boolean;\n}\n\ninterface ShortcutOptions {\n  history: boolean;\n}\n\nconst isMacOs = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false\n\n// Input rules ref: https://github.com/ProseMirror/prosemirror-example-setup/\n\n// : (NodeType) → InputRule\n// Given a blockquote node type, returns an input rule that turns `\"> \"`\n// at the start of a textblock into a blockquote.\nconst blockQuoteRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n};\n\n// : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a number\n// followed by a dot at the start of a textblock into an ordered list.\nconst orderedListRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(\n    /^(\\d+)\\.\\s$/,\n    nodeType,\n    match => ({ order: +match[1] }),\n    (match, node) => node.childCount + node.attrs['order'] === +match[1]\n  );\n};\n\n// : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a bullet\n// (dash, plush, or asterisk) at the start of a textblock into a\n// bullet list.\nconst bulletListRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n};\n\n// : (NodeType) → InputRule\n// Given a code block node type, returns an input rule that turns a\n// textblock starting with three backticks into a code block.\nconst codeBlockRule = (nodeType: NodeType): InputRule => {\n  return textblockTypeInputRule(/^```$/, nodeType);\n};\n\n// : (NodeType, number) → InputRule\n// Given a node type and a maximum level, creates an input rule that\n// turns up to that number of `#` characters followed by a space at\n// the start of a textblock into a heading whose level corresponds to\n// the number of `#` signs.\nconst headingRule = (nodeType: NodeType, maxLevel: number): InputRule => {\n  return textblockTypeInputRule(\n    new RegExp('^(#{1,' + maxLevel + '})\\\\s$'),\n    nodeType,\n    (match) => ({ level: match[1].length })\n  );\n};\n\n// : (MarkType) → InputRule\n// Wraps matching text with bold mark\nconst boldRule = (markType: MarkType): InputRule => {\n  return markInputRule(/(?:^|\\s)((?:\\*\\*|__)((?:[^*_]+))(?:\\*\\*|__))$/, markType)\n}\n\n// : (MarkType) → InputRule\n// Wraps matching text with em mark\nconst emRule = (markType: MarkType): InputRule => {\n  return markInputRule(/(?:^|\\s)((?:\\*|_)((?:[^*_]+))(?:\\*|_))$/, markType)\n}\n\n// : (Schema) → Plugin\n// A set of input rules for creating the basic block quotes, lists,\n// code blocks, and heading.\nconst buildInputRules = (schema: Schema): Plugin => {\n  const rules = smartQuotes.concat(ellipsis, emDash);\n\n  rules.push(boldRule(schema.marks['strong']));\n  rules.push(emRule(schema.marks['em']));\n  rules.push(blockQuoteRule(schema.nodes['blockquote']));\n  rules.push(orderedListRule(schema.nodes['ordered_list']));\n  rules.push(bulletListRule(schema.nodes['bullet_list']));\n  rules.push(codeBlockRule(schema.nodes['code_block']));\n  rules.push(headingRule(schema.nodes['heading'], 6));\n\n  return inputRules({ rules });\n};\n\nconst getKeyboardShortcuts = (schema: Schema, options: ShortcutOptions) => {\n  const historyKeyMap: Record<string, any> = {};\n\n  historyKeyMap['Mod-z'] = undo;\n  if (isMacOs) {\n    historyKeyMap['Shift-Mod-z'] = redo;\n  } else {\n    historyKeyMap['Mod-y'] = redo;\n  }\n\n  const plugins = [\n    keymap({\n      'Mod-b': toggleMark(schema.marks['strong']),\n      'Mod-i': toggleMark(schema.marks['em']),\n      'Mod-u': toggleMark(schema.marks['u']),\n      'Mod-`': toggleMark(schema.marks['code']),\n    }),\n    keymap({\n      Enter: splitListItem(schema.nodes['list_item']),\n      'Shift-Enter': chainCommands(exitCode, (state, dispatch) => {\n        const tr = state.tr;\n        const br = schema.nodes['hard_break'];\n        dispatch(tr.replaceSelectionWith(br.create()).scrollIntoView());\n        return true;\n      }),\n      'Mod-[': liftListItem(schema.nodes['list_item']),\n      'Mod-]': sinkListItem(schema.nodes['list_item']),\n      Tab: sinkListItem(schema.nodes['list_item'])\n    }),\n    keymap(baseKeymap)\n  ];\n\n  if (options.history) {\n    plugins.push(keymap(historyKeyMap));\n  }\n\n  return plugins;\n};\n\nconst getDefaultPlugins = (schema: Schema, options: Options): Plugin[] => {\n  const plugins: Plugin[] = [];\n\n  if (options.keyboardShortcuts) {\n    plugins.push(...getKeyboardShortcuts(schema, { history: options.history }));\n  }\n\n  if (options.history) {\n    plugins.push(history());\n  }\n\n  if (options.inputRules) {\n    plugins.push(buildInputRules(schema));\n  }\n\n  return plugins;\n};\n\nexport default getDefaultPlugins;\n","import { Schema } from 'prosemirror-model';\nimport { EditorState, Plugin, Transaction } from 'prosemirror-state';\nimport { EditorProps, EditorView } from 'prosemirror-view';\nimport { Observable, Subject } from 'rxjs';\n\nimport { isNil } from 'ngx-editor/utils';\n\nimport EditorCommands from './EditorCommands';\nimport defautlSchema from './schema';\nimport { parseContent } from './parsers';\nimport getDefaultPlugins from './defaultPlugins';\n\ntype JSONDoc = Record<string, any>;\ntype Content = string | null | JSONDoc;\n\ninterface Options {\n  content?: Content;\n  history?: boolean;\n  keyboardShortcuts?: boolean;\n  inputRules?: boolean;\n  schema?: Schema;\n  plugins?: Plugin[];\n  nodeViews?: EditorProps['nodeViews'];\n  attributes?: Record<string, string>;\n  features?: EditorFeatures\n}\n\ninterface EditorFeatures {\n  linkOnPaste?: boolean;\n  resizeImage?: boolean;\n}\n\nconst defaultFeatures = {\n  linkOnPaste: true,\n  resizeImage: true\n}\n\nconst DEFAULT_OPTIONS: Options = {\n  content: null,\n  history: true,\n  keyboardShortcuts: true,\n  inputRules: true,\n  schema: defautlSchema,\n  plugins: [],\n  nodeViews: {},\n  attributes: {},\n  features: defaultFeatures\n};\n\nclass Editor {\n  private options: Options;\n  view: EditorView;\n\n  constructor(options: Options = DEFAULT_OPTIONS) {\n    this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n    this.createEditor();\n  }\n\n  private valueChangesSubject = new Subject<JSONDoc>();\n  private updateSubject = new Subject<EditorView>();\n\n  get valueChanges(): Observable<JSONDoc> {\n    return this.valueChangesSubject.asObservable();\n  }\n\n  get update(): Observable<EditorView> {\n    return this.updateSubject.asObservable();\n  }\n\n  get schema(): Schema {\n    return this.options.schema || defautlSchema;\n  }\n\n  get commands(): EditorCommands {\n    return new EditorCommands(this.view);\n  }\n\n  get features(): EditorFeatures {\n    return { ...defaultFeatures, ...this.options.features }\n  }\n\n  private handleTransactions(tr: Transaction): void {\n    const state = this.view.state.apply(tr);\n    this.view.updateState(state);\n\n    this.updateSubject.next(this.view);\n\n    if (!tr.docChanged && !tr.getMeta('FORCE_EMIT')) {\n      return;\n    }\n\n    const json = state.doc.toJSON();\n    this.valueChangesSubject.next(json);\n  }\n\n  private createEditor(): void {\n    const { options } = this;\n    const { content = null, nodeViews } = options;\n    const { history = true, keyboardShortcuts = true, inputRules = true } = options;\n    const schema = this.schema;\n\n    const doc = parseContent(content, schema);\n\n    const plugins: Plugin[] = options.plugins ?? [];\n    const attributes: Record<string, string> = options.attributes ?? {};\n\n    const defaultPlugins = getDefaultPlugins(schema, {\n      history,\n      keyboardShortcuts,\n      inputRules\n    });\n\n    this.view = new EditorView(null, {\n      state: EditorState.create({\n        doc,\n        schema,\n        plugins: [...defaultPlugins, ...plugins],\n      }),\n      nodeViews,\n      dispatchTransaction: this.handleTransactions.bind(this),\n      attributes\n    });\n  }\n\n  setContent(content: Content): void {\n    if (isNil(content)) {\n      return;\n    }\n\n    const { state } = this.view;\n    const { tr, doc } = state;\n\n    const newDoc = parseContent(content, this.schema);\n\n    tr.replaceWith(0, state.doc.content.size, newDoc);\n\n    // don't emit if both content is same\n    if (doc.eq(tr.doc)) {\n      return;\n    }\n\n    if (!tr.docChanged) {\n      return;\n    }\n\n    this.view.dispatch(tr);\n  }\n\n  registerPlugin(plugin: Plugin): void {\n    const { state } = this.view;\n    const plugins = [...state.plugins, plugin];\n\n    const newState = state.reconfigure({ plugins });\n    this.view.updateState(newState);\n  }\n\n  destroy(): void {\n    this.view.destroy();\n  }\n}\n\nexport default Editor;\n","/*\n * Public API Surface of ngx-editor\n */\n\nexport * from './lib/editor.component';\nexport * from './lib/modules/menu/menu.component';\nexport * from './lib/modules/menu/floating-menu/floating-menu.component';\nexport * from './lib/editor.module';\n\nexport * from './lib/schema';\nexport * from './lib/validators';\n\nexport * from './lib/types';\nexport * from './lib/parsers';\nexport { default as Editor } from './lib/Editor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["schema","defaultSchema","plugins.editable","plugins.placeholder","plugins.attributes","plugins.focus","plugins.blur","plugins.imageResize","plugins.linkify","Link","Image","TextColor","Blockquote","Commands.STRONG","Commands.EM","Commands.CODE","Commands.UNDERLINE","Commands.STRIKE","Commands.BLOCKQUOTE","Commands.UL","Commands.OL","Commands.H1","Commands.H2","Commands.H3","Commands.H4","Commands.H5","Commands.H6","Commands.ALIGN_LEFT","Commands.ALIGN_CENTER","Commands.ALIGN_RIGHT","Commands.ALIGN_JUSTIFY","Commands.LINK","Commands.IMAGE","Commands.TEXT_COLOR","Commands.TEXT_BACKGROUND_COLOR","Validators","LinkCommand","ImageCommand","MarkCommand","ListCommand","HeadingCommand","TextColorCommand","TextAlignCommand","defautlSchema"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,IAAI;IACrC,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;QAC9B,KAAK,EAAE;YACL,IAAI;gBACF,OAAO,QAAQ,CAAC;aACjB;YACD,KAAK,CAAC,EAAe,EAAE,WAAoB;gBACzC,OAAO,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,WAAW,CAAC;aACrD;SACF;QACD,KAAK,EAAE;YACL,QAAQ,CAAC,KAAkB;gBACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC7B;YACD,UAAU,CAAC,KAAkB;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEvC,IAAI,SAAS,EAAE;oBACb,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO;oBACL,KAAK,EAAE,8BAA8B;iBACtC,CAAC;aACH;SACF;KACF,CAAC,CAAC;AACL,CAAC;;AC1BD,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAEvD,MAAM,iBAAiB,GAAG,CAAC,IAAa;IACtC,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,aAAa,CAAC;QACjC,KAAK,EAAE;YACL,IAAI;gBACF,OAAO,IAAI,IAAI,EAAE,CAAC;aACnB;YACD,KAAK,CAAC,EAAe,EAAE,WAAmB;gBACxC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC;gBACpE,OAAO,WAAW,CAAC;aACpB;SACF;QACD,KAAK,EAAE;YACL,WAAW,CAAC,KAAkB;gBAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;gBACtB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;gBAExC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAI,CAAC,WAAW,IAAI,UAAU,GAAG,CAAC,EAAE;oBAClC,OAAO,aAAa,CAAC,KAAK,CAAC;iBAC5B;gBAED,MAAM,WAAW,GAAiB,EAAE,CAAC;gBAErC,MAAM,QAAQ,GAAG,CAAC,IAAqB,EAAE,GAAW;oBAClD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1E,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG;4BAClE,KAAK,EAAE,qBAAqB;4BAC5B,kBAAkB,EAAE,WAAW;4BAC/B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;yBAC1C,CAAC,CAAC;wBAEH,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBACnC;oBAED,OAAO,KAAK,CAAC;iBACd,CAAC;gBAEF,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC1B,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;aAC/C;SACF;KACF,CAAC,CAAC;AACL,CAAC;;AChDD,MAAM,gBAAgB,GAAG,CAAC,UAAU,GAAG,EAAE;IACvC,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE;YACL,UAAU;SACX;KACF,CAAC,CAAC;AACL,CAAC;;ACPD,MAAM,WAAW,GAAG,CAAC,EAAc;IACjC,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;QAC3B,KAAK,EAAE;YACL,eAAe,EAAE;gBACf,KAAK,EAAE;oBACL,EAAE,EAAE,CAAC;oBACL,OAAO,KAAK,CAAC;iBACd;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;;ACZD,MAAM,UAAU,GAAG,CAAC,EAAc;IAChC,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE;YACL,eAAe,EAAE;gBACf,IAAI,EAAE;oBACJ,EAAE,EAAE,CAAC;oBACL,OAAO,KAAK,CAAC;iBACd;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;;MCFY,kBAAkB;IAN/B;QAQW,QAAG,GAAG,EAAE,CAAC;QACT,UAAK,GAAG,EAAE,CAAC;QACX,eAAU,GAAG,EAAE,CAAC;QAChB,aAAQ,GAAG,KAAK,CAAC;QAGhB,gBAAW,GAAG,IAAI,YAAY,EAAE,CAAC;KA4C5C;IAxCC,aAAa,CAAC,CAAa,EAAE,SAAiB;QAC5C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KAChC;IAED,WAAW,CAAC,GAAe,EAAE,SAAiB;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC;QAExD,MAAM,YAAY,GAAG,SAAS,KAAK,MAAM,CAAC;QAE1C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,CAAC,CAAa;YAChC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;YACnC,MAAM,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;;;YAInF,IAAI,aAAa,GAAG,WAAW,IAAI,aAAa,GAAG,EAAE,EAAE;gBACrD,OAAO;aACR;YAED,IAAI,CAAC,UAAU,GAAG,GAAG,aAAa,IAAI,CAAC;SACxC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,CAAa;YAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;YAEnB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACvD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAEnD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzB,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACpD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KACjD;;+GAnDU,kBAAkB;mGAAlB,kBAAkB,+TCZ/B,krBASA;2FDGa,kBAAkB;kBAN9B,SAAS;+BACE,gBAAgB;8BAMjB,GAAG;sBAAX,KAAK;gBACG,GAAG;sBAAX,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBAEI,WAAW;sBAApB,MAAM;gBAE+B,KAAK;sBAA1C,SAAS;uBAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEdtC,MAAM,cAAc;IAYlB,YAAY,IAAqB,EAAE,IAAgB,EAAE,MAAoB,EAAE,QAAkB;QAF7F,aAAQ,GAAG,KAAK,CAAC;QAuCjB,iBAAY,GAAG;YACb,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO;aACR;YAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAErB,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;gBAC7D,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;gBAClB,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU;aAClD,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;YAEpD,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACvC,QAAQ,CAAC,WAAW,CAAC,CAAC;SACvB,CAAA;QAtDC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,wBAAwB,GAAG,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;;QAGnD,MAAM,OAAO,GAAG,wBAAwB,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAErF,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;;QAE3D,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEhE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QAE5C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;YAC9E,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAC,CAAC;KACJ;IAEO,cAAc,CAAC,SAA8B,EAAE,QAA6B;QAClF,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC/D;IAEO,iBAAiB,CAAC,KAA0B;QAClD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;KAC7D;IAsBD,MAAM,CAAC,IAAqB;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACvB;QACD,OAAO,IAAI,CAAC;KACb;IAED,cAAc;QACZ,OAAO,IAAI,CAAC;KACb;IAED,UAAU;QACR,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;KACjD;IAED,YAAY;QACV,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;KAClD;IAED,OAAO;QACL,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KACjE;CACF;AAED,MAAM,iBAAiB,GAAG,CAAC,QAAkB;IAC3C,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,cAAc,CAAC;QAClC,KAAK,EAAE;YACL,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC,IAAqB,EAAE,IAAgB,EAAE,MAAoB;oBACnE,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACzD;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;;ACvHD,MAAM,eAAe,GAAG,sDAAsD,CAAC;AAE/E,MAAM,OAAO,GAAG,CAAC,QAAkB;IACjC,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAsB;QACtC,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;YAClC,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,MAAM,KAAK,GAA4B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElE,IAAI,KAAK,EAAE;gBACT,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAE1C,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;iBACvC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvC,SAAS,CAAC,IAAI,CACZ,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CACjF,CAAC;gBACF,GAAG,GAAG,GAAG,CAAC;aACX;YAED,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAChC;SACF;aAAM;YACL,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACpD;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,OAAO,IAAI,MAAM,CAAC;QAChB,GAAG,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC;QAC7B,KAAK,EAAE;YACL,eAAe,EAAE,CAAC,KAAY;gBAC5B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAC1E;SACF;KACF,CAAC,CAAC;AACL,CAAC;;MC/CY,QAAQ,GAAG;IACtB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE;QACP;YACE,IAAI,EAAE,WAAW;SAClB;KACF;EACD;AAEF;MACa,MAAM,GAAG,CAAC,IAAyB,EAAE,WAAoB;IACpE,MAAMA,QAAM,GAAG,WAAW,IAAIC,MAAa,CAAC;IAE5C,MAAM,WAAW,GAAGD,QAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAACA,QAAM,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAErF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,EAAE;MAEW,KAAK,GAAG,CAAC,IAAY,EAAE,WAAoB;IACtD,MAAMA,QAAM,GAAG,WAAW,IAAIC,MAAa,CAAC;IAE5C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;IAEpB,OAAO,SAAS,CAAC,UAAU,CAACD,QAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACzD,EAAE;MAEW,YAAY,GAAG,CAAC,KAA0C,EAAE,MAAc;IACrF,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;KACtC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACtC;;MCnBa,kBAAkB;IAC7B,YACU,SAAoB,EACpB,SAAmB,EACnB,WAAoC;QAFpC,cAAS,GAAT,SAAS,CAAW;QACpB,cAAS,GAAT,SAAS,CAAU;QACnB,gBAAW,GAAX,WAAW,CAAyB;QAOrC,gBAAW,GAAG,cAAc,CAAC;QAE5B,aAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;QACpC,YAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QAErC,kBAAa,GAAmB,EAAE,CAAC;QACnC,aAAQ,GAAkD,SAAgB,CAAC;QAC3E,cAAS,GAAe,SAAgB,CAAC;KAb5C;IAeL,UAAU,CAAC,KAA0C;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACnD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;SAC5B;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;KACrC;IAED,gBAAgB,CAAC,EAAc;QAC7B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,iBAAiB,CAAC,EAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAED,gBAAgB,CAAC,UAAmB;QAClC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACpF;IAEO,YAAY,CAAC,OAA4B;QAC/C,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;YAChC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACxB;IAEO,OAAO,CAAC,GAAW,EAAE,KAAU;QACrC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACrD,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KAClC;IAEO,cAAc,CAAC,WAAmB;QACxC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;KACjD;IAEO,eAAe;QACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CAACE,cAAgB,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,iBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,gBAAkB,CAAC;YAC5C,KAAK,EAAE,oBAAoB;SAC5B,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,WAAa,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,cAAc,CAACA,WAAa,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,UAAY,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB,CAAC,CAAC,CAAC;QAEJ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,iBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,cAAc,CAACC,aAAe,EAAE,CAAC,CAAC;SAC/C;KACF;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/E,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO;YAC1E,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;KACpD;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,EAAE;YACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY;YACrC,YAAY,CAAC,WAAW,EAAE,CAAC;SAC5B,CAAC,CAAC;KACJ;;+GApHU,kBAAkB;mGAAlB,kBAAkB,oLARlB,CAAC;YACV,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;YACjD,KAAK,EAAE,IAAI;SACZ,CAAC,qKCtBJ,6EAGA;2FDuBa,kBAAkB;kBAZ9B,SAAS;+BACE,YAAY,aAGX,CAAC;4BACV,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;4BACjD,KAAK,EAAE,IAAI;yBACZ,CAAC,iBACa,iBAAiB,CAAC,IAAI;gJAUa,SAAS;sBAA1D,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE/B,MAAM;sBAAd,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBAEI,QAAQ;sBAAjB,MAAM;gBACG,OAAO;sBAAhB,MAAM;;;MEhCI,WAAW;IAHxB;QAKE,wBAAmB,GAA8B,IAAI,OAAO,EAAoB,CAAC;KAKlF;IAHC,gBAAgB,CAAC,CAAmB;QAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAClC;;wGANU,WAAW;4GAAX,WAAW,cAFV,MAAM;2FAEP,WAAW;kBAHvB,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;ACPD,WAAe;;CAEd;;ACFD,aAAe;;CAEd;;ACFD,WAAe;;CAEd;;ACFD,gBAAe;;CAEd;;ACFD,aAAe;;CAEd;;ACFD,kBAAe;;CAEd;;ACFD,iBAAe;;CAEd;;ACFD,YAAe;;CAEd;;ACFD,WAAe;;CAEd;;ACFD,aAAe;;CAEd;;ACFD,YAAe;;CAEd;;ACFD,gBAAe;;CAEd;;ACFD,kBAAe;;CAEd;;ACFD,iBAAe;;CAEd;;ACFD,mBAAe;;CAEd;;ACFD,gBAAe;;CAEd;;ACFD,gBAAe;;CAEd;;ACFD;AAoBA,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAExC,MAAM,KAAK,GAAwB;IACjC,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,SAAS;IACT,MAAM;IACN,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,KAAK;IACjB,IAAI;IACJ,MAAM;IACN,KAAK;IACL,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,UAAU;IACvB,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF,MAAM,IAAI;IACR,OAAO,GAAG,CAAC,IAAwB,EAAE,IAAI,GAAG,iBAAiB;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;QAC5C,OAAO;;;;eAII,IAAI;iBACF,mBAAmB;gBACpB,kBAAkB;;UAExB,IAAI;;KAET,CAAC;KACH;;;ACnDH,MAAM,IAAI;IAGR,YAAY,IAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,KAAK;QACH,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACzC,CAAC;KACH;IAED,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC1C,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,UAAU,CAAC,KAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7B;;;AClDH,MAAM,SAAS;IACb,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC9B;YAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACtC,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,UAAU,CAAC,KAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7B;;;AC9BH,MAAM,QAAQ;IAGZ,YAAY,YAAY,GAAG,KAAK;QAFhC,iBAAY,GAAG,KAAK,CAAC;QAGnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;KACvF;IAED,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC9D;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC1C,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,UAAU,CAAC,KAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7B;;;ACzCH,MAAM,OAAO;IAGX,YAAY,KAAoB;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,KAAK;QACH,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5C,CAAC;KACH;IAED,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YAEzC,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEjC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAEhC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aACrE;YAED,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC7E,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAElD,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,MAAM,cAAc,GAAG;YACrB,IAAI;YACJ,MAAM,CAAC,KAAK,CAAC,IAAI;YACjB,MAAM,CAAC,KAAK,CAAC,UAAU;SACxB,CAAC;;;QAIF,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI;YACxC,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAqB;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;KAC5B;IAED,UAAU,CAAC,KAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7B;;;AC1EH,MAAM,SAAS;IAGb,YAAY,KAAY;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAoC;YAE9D,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAC7C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;YAE/B,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACrE,UAAU,GAAG,IAAI,CAAC;oBAClB,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;iBACvE;gBACD,OAAO,IAAI,CAAC;aACb,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO,KAAK,CAAC;aACd;YAED,IAAI,EAAE,CAAC,UAAU,EAAE;gBACjB,QAAQ,GAAG,EAAE,CAAC,CAAC;aAChB;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAU;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;KACxB;IAED,UAAU,CAAC,KAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7B;;;AChDH,MAAM,cAAc,GAAG;IACrB,MAAM,EAAE,IAAI;CACb,CAAC;AAQF,MAAMC,MAAI;IACR,MAAM,CAAC,KAAgB;QACrB,OAAO,CAAC,KAAkB,EAAE,QAAmB;YAC7C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;YAEpC,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,IAAI,SAAS,CAAC,KAAK,EAAE;gBACnB,OAAO,KAAK,CAAC;aACd;YAED,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACjD,CAAC;KACH;IAED,MAAM,CAAC,IAAY,EAAE,KAAgB;QACnC,OAAO,CAAC,KAAkB,EAAE,QAAmB;YAC7C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAE7B,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,MAAM,SAAS,GAAc;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ;aACjC,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAEtE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;iBACjC,cAAc,EAAE,CAAC;YAEpB,IAAI,EAAE,CAAC,UAAU,EAAE;gBACjB,QAAQ,GAAG,EAAE,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;aACb;YAED,OAAO,KAAK,CAAC;SACd,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB,EAAE,OAAO,GAAG,cAAc;QACnD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,MAAM,CAAC,KAAkB,EAAE,QAAmB;QAC5C,OAAO,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACtC;IAED,UAAU,CAAC,KAAkB;QAC3B,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,EAAE;SACT,CAAA;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;KAC/E;;;AC/EH,MAAMC,OAAK;IACT,MAAM,CAAC,GAAW,EAAE,KAAiB;QACnC,OAAO,CAAC,KAAkB,EAAE,QAAmB;YAC7C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;YAExC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,MAAM,UAAU,GAAG;gBACjB,KAAK,EAAE,IAAI;gBACX,GAAG;gBACH,GAAG,KAAK;aACT,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,SAAS,YAAY,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC3F,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAClD;YAED,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YAExD,MAAM,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAChC,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAC/D,CAAC;YAEF,EAAE;iBACC,YAAY,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;iBAC5C,cAAc,EAAE,CAAC;YAEpB,IAAI,EAAE,CAAC,UAAU,EAAE;gBACjB,QAAQ,GAAG,EAAE,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;aACb;YAED,OAAO,KAAK,CAAC;SACd,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC5B,IAAI,SAAS,YAAY,aAAa,EAAE;YACtC,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;SAC7C;QAED,OAAO,KAAK,CAAC;KACd;;;ACrCH,MAAMC,WAAS;IAIb,YAAY,IAAU,EAAE,WAAqB,OAAO;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;KACzB;IAED,KAAK,CAAC,KAAwC;QAC5C,OAAO,CAAC,KAAkB,EAAE,QAAmB;YAC7C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YAEzC,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;YAEtC,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE;gBAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;;oBAE/C,OAAO,KAAK,CAAC;iBACd;aACF;YAED,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAChD,CAAC;KACH;IAED,QAAQ,CAAC,KAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,MAAM,IAAI,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,eAAe,CAAC,KAAkB;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,KAAK;aACjB,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrD,GAAG,CAAC,IAAI;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SACjC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,OAAO,MAAM,CAAC;KACf;IAED,MAAM;QACJ,OAAO,CAAC,KAAkB,EAAE,QAAmB;YAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC1C,CAAC;KACH;IAED,UAAU,CAAC,KAAkB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;KACjC;;;ACxFI,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAM,UAAU,GAAG,IAAIC,SAAU,EAAE,CAAC;AACpC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,IAAIH,MAAI,EAAE,CAAC;AACxB,MAAM,KAAK,GAAG,IAAIC,OAAK,EAAE,CAAC;AAC1B,MAAM,UAAU,GAAG,IAAIC,WAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,qBAAqB,GAAG,IAAIA,WAAS,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;;AC1BvF,MAAM,cAAc,GAAkC;IAC3D,IAAI,EAAEE,MAAe;IACrB,MAAM,EAAEC,EAAW;IACnB,IAAI,EAAEC,IAAa;IACnB,SAAS,EAAEC,SAAkB;IAC7B,MAAM,EAAEC,MAAe;IACvB,UAAU,EAAEC,UAAmB;IAC/B,WAAW,EAAEC,EAAW;IACxB,YAAY,EAAEC,EAAW;IACzB,EAAE,EAAEC,EAAW;IACf,EAAE,EAAEC,EAAW;IACf,EAAE,EAAEC,EAAW;IACf,EAAE,EAAEC,EAAW;IACf,EAAE,EAAEC,EAAW;IACf,EAAE,EAAEC,EAAW;IACf,UAAU,EAAEC,UAAmB;IAC/B,YAAY,EAAEC,YAAqB;IACnC,WAAW,EAAEC,WAAoB;IACjC,aAAa,EAAEC,aAAsB;CACtC,CAAC;AAEK,MAAM,IAAI,GAAGC,IAAa,CAAC;AAC3B,MAAM,KAAK,GAAGC,KAAc,CAAC;AAC7B,MAAM,SAAS,GAAGC,UAAmB,CAAC;AACtC,MAAM,mBAAmB,GAAGC,qBAA8B;;AC5BjE,MAAM,QAAQ,GAA2B;;IAEvC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,YAAY;IACxB,gBAAgB,EAAE,kBAAkB;IACpC,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,cAAc;;IAG3B,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,iBAAiB;IAC/B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;CACjB,CAAC;AAIF,MAAM,MAAM;IAGV,YAAY,YAAiD,EAAE;QAF/D,WAAM,GAAG,QAAQ,CAAC;QAMlB,QAAG,GAAG,CAAC,GAAW;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SAC/B,CAAA;QALC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;KACtD;;;MCpCU,sBAAsB;IAHnC;QAIS,WAAM,GAAG,EAAE,CAAC;KACpB;;mHAFY,sBAAsB;uHAAtB,sBAAsB,cAFrB,MAAM;2FAEP,sBAAsB;kBAHlC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;MAQY,gBAAgB;IAG3B,YAAwB,MAA+B;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,IAAI,MAAM;QACR,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACvC;;6GATU,gBAAgB,kBAGM,sBAAsB;iHAH5C,gBAAgB,cAFf,MAAM;2FAEP,gBAAgB;kBAH5B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;0DAIkC,sBAAsB;0BAA1C,QAAQ;;AAShB,MAAM,uBAAuB,GAAG,CAAC,MAAwB;IAC9D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;;MCxBY,gBAAgB;IAE3B,YAAoB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;KAAK;IAEhD,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACtD;;6GANU,gBAAgB;2GAAhB,gBAAgB;2FAAhB,gBAAgB;kBAJ5B,IAAI;mBAAC;oBACJ,IAAI,EAAE,cAAc;iBACrB;;;MCWY,sBAAsB;IAWjC,YACU,WAA6B,EAC7B,WAAwB;QADxB,gBAAW,GAAX,WAAW,CAAkB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QAGgB,aAAQ,GAAG,KAAK,CAAC;QACzB,aAAQ,GAAG,KAAK,CAAC;QAc3D,WAAM,GAAG,CAAC,IAAgB;YACxB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC5C,CAAA;KAtBI;IAXL,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAsB,CAAC;KACpC;IAcD,MAAM,CAAC,CAAa;QAClB,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACnC;IASD,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1C;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB;YAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;mHAtDU,sBAAsB;uGAAtB,sBAAsB,gOChBnC,+JAGA;2FDaa,sBAAsB;kBANlC,SAAS;+BACE,oBAAoB;2HAMrB,WAAW;sBAAnB,KAAK;gBAe4C,QAAQ;sBAAzD,WAAW;uBAAC,mCAAmC;gBACN,QAAQ;sBAAjD,WAAW;uBAAC,2BAA2B;;;MEd7B,aAAa;IAgBxB,YACU,EAAc,EACd,WAA6B,EAC7B,WAAwB;QAFxB,OAAE,GAAF,EAAE,CAAY;QACd,gBAAW,GAAX,WAAW,CAAkB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QAlBlC,cAAS,GAAG,KAAK,CAAC;QAClB,aAAQ,GAAG,KAAK,CAAC;QACT,eAAU,GAAG,IAAI,CAAC;QAI1B,SAAI,GAAG,IAAI,SAAS,CAAC;YACnB,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE;gBACxBC,YAAU,CAAC,QAAQ;gBACnBA,YAAU,CAAC,OAAO,CAAC,gFAAgF,CAAC;aACrG,CAAC;YACF,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAACA,YAAU,CAAC,QAAQ,CAAC,CAAC;YAChD,YAAY,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;SACpC,CAAC,CAAC;QAsEK,YAAO,GAAG;YAChB,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;YACtC,MAAM,YAAY,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAE7D,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aACrB;SACF,CAAA;QAEO,WAAM,GAAG,CAAC,IAAgB;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAGC,IAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,UAAU,GAAGA,IAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACjD,CAAA;KA/EI;IAEL,IAAsD,KAAK;QACzD,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;KACxC;IAED,IAA8C,QAAQ;QACpD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;KACzB;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;KACpD;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;KACjF;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9B;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9B;IAE+C,eAAe,CAAC,CAAa;QAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzC;IAEO,QAAQ;QACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACpB;IAED,WAAW,CAAC,CAAa;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjBA,IAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO;SACR;QAED,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;KACF;IAmBD,UAAU,CAAC,CAAa;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAE5B,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,OAAO;SAC1C,CAAC;QAEF,IAAI,SAAS,CAAC,KAAK,EAAE;YACnBA,IAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SACzB;aAAM;YACLA,IAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB;YAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;0GApIU,aAAa;8FAAb,aAAa,2OCnB1B,4oDAyCA;2FDtBa,aAAa;kBANzB,SAAS;+BACE,UAAU;oJA2BkC,KAAK;sBAA1D,WAAW;uBAAC,mCAAmC;gBAIF,QAAQ;sBAArD,WAAW;uBAAC,2BAA2B;gBAoBQ,eAAe;sBAA9D,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;;ME9CnC,cAAc;IAgBzB,YACU,EAAc,EACd,WAA6B,EAC7B,WAAwB;QAFxB,OAAE,GAAF,EAAE,CAAY;QACd,gBAAW,GAAX,WAAW,CAAkB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QAlBlC,cAAS,GAAG,KAAK,CAAC;QAClB,aAAQ,GAAG,KAAK,CAAC;QAGjB,SAAI,GAAG,IAAI,SAAS,CAAC;YACnB,GAAG,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE;gBACvBD,YAAU,CAAC,QAAQ;gBACnBA,YAAU,CAAC,OAAO,CAAC,gFAAgF,CAAC;aACrG,CAAC;YACF,GAAG,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;YACxB,KAAK,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;SAC3B,CAAC,CAAC;QAmEK,WAAM,GAAG,CAAC,IAAgB;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAGE,KAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC9C,CAAA;KA9DI;IAEL,IAAsD,KAAK;QACzD,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;KACxC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC1B;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC7B;IAE+C,eAAe,CAAC,CAAa;QAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzC;IAEO,QAAQ;QACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;KACJ;IAED,WAAW,CAAC,CAAa;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAEjC,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAEO,QAAQ;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC5B,IAAI,SAAS,YAAY,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvD,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAE3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjB,GAAG;gBACH,GAAG;gBACH,KAAK;aACN,CAAC,CAAC;SACJ;KACF;IAOD,UAAU,CAAC,CAAa;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAE5C,MAAM,KAAK,GAAG;YACZ,GAAG;YACH,KAAK;SACN,CAAC;QAEFA,KAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB;YAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;2GA7GU,cAAc;+FAAd,cAAc,8LCnB3B,w/CAoCA;2FDjBa,cAAc;kBAL1B,SAAS;+BACE,WAAW;oJA0BiC,KAAK;sBAA1D,WAAW;uBAAC,mCAAmC;gBAYA,eAAe;sBAA9D,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;;MEpCnC,iBAAiB;IAa5B,YACU,WAA6B,EAC7B,WAAwB,EACxB,EAAc;QAFd,gBAAW,GAAX,WAAW,CAAkB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QACxB,OAAE,GAAF,EAAE,CAAY;QATxB,mBAAc,GAAG,KAAK,CAAC;QAEf,gBAAW,GAAqB,EAAE,CAAC;QAC3C,kBAAa,GAAa,EAAE,CAAC;QAkDrB,WAAM,GAAG,CAAC,IAAgB;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAoB;gBACtC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC7B;gBAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC/B;aACF,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aACvC;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB;SACF,CAAA;KAlEI;IAEL,IAAwD,UAAU;QAChE,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC;KACxD;IAED,IAA8C,kBAAkB;QAC9D,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;KACxD;IAEsD,eAAe,CAAC,MAAY;QACjF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YAClE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B;KACF;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzC;IAED,cAAc,CAAC,CAAa;QAC1B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;KAC5C;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,KAAK,CAAA;KACb;IAED,OAAO,CAAC,CAAa,EAAE,IAAoB;QACzC,CAAC,CAAC,cAAc,EAAE,CAAC;;QAGnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5C,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;IA2BD,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB;YAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;8GA/FU,iBAAiB;kGAAjB,iBAAiB,mTCjB9B,0fAUA;2FDOa,iBAAiB;kBAL7B,SAAS;+BACE,cAAc;oJAQf,KAAK;sBAAb,KAAK;gBACG,KAAK;sBAAb,KAAK;gBAckD,UAAU;sBAAjE,WAAW;uBAAC,qCAAqC;gBAIJ,kBAAkB;sBAA/D,WAAW;uBAAC,2BAA2B;gBAIe,eAAe;sBAArE,YAAY;uBAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC;;;MEzB1C,oBAAoB;IAI/B,YACU,EAAc,EACd,WAAwB,EACxB,WAA6B;QAF7B,OAAE,GAAF,EAAE,CAAY;QACd,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAkB;QAyBvC,cAAS,GAAG,KAAK,CAAC;QAClB,aAAQ,GAAG,KAAK,CAAC;QACjB,iBAAY,GAAa,EAAE,CAAC;QACpB,eAAU,GAAG,IAAI,CAAC;QAmElB,WAAM,GAAG,CAAC,IAAgB;YAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aACzD;SACF,CAAA;KAvGI;IAEL,IAAsD,KAAK;QACzD,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;KACxC;IAED,IAA8C,QAAQ;QACpD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;KACzB;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,YAAY,GAAG,kBAAkB,CAAC,CAAC;KACtF;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;KAC3E;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,SAAS,GAAG,mBAAmB,CAAC;KACrE;IASD,cAAc,CAAC,QAAgB;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC;QACvD,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,OAAO,GAAG,OAAO,CAAC;KACzC;IAE+C,eAAe,CAAC,CAAa;QAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;IAEO,SAAS;QACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAED,WAAW,CAAC,CAAa;QACvB,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC;IAED,MAAM,CAAC,CAAa;QAClB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,KAAK,CAAA;KACb;IAED,aAAa,CAAC,CAAa,EAAE,KAAa;QACxC,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;YAC9B,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5C;aAAM;YACL,MAAM,KAAK,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5C;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE;YAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAaD,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAgB;YAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;iHA/HU,oBAAoB;qGAApB,oBAAoB,iSCnBjC,gzBAgBA;2FDGa,oBAAoB;kBALhC,SAAS;+BACE,kBAAkB;oJAKnB,OAAO;sBAAf,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBAQgD,KAAK;sBAA1D,WAAW;uBAAC,mCAAmC;gBAIF,QAAQ;sBAArD,WAAW;uBAAC,2BAA2B;gBAgCQ,eAAe;sBAA9D,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;;MEvDnC,eAAe,GAAY;IACtC,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,cAAc,EAAE,aAAa,CAAC;IAC/B,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAClC,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC;EAC9D;MAEW,eAAe,GAAY;IACtC,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,YAAY,EAAE,kBAAkB,CAAC;EACnC;AAED,MAAM,qBAAqB,GAAG;IAC5B,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;MASW,aAAa;IAoBxB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAnBnC,YAAO,GAAY,eAAe,CAAC;QACnC,iBAAY,GAAa,qBAAqB,CAAC;QAC/C,aAAQ,GAAG,KAAK,CAAC;QAEjB,kBAAa,GAA4B,IAAI,CAAC;QAC9C,sBAAiB,GAAqB,QAAQ,CAAC;QAExD,mBAAc,GAAU;YACtB,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,QAAQ;YACrB,MAAM,EAAE,YAAY;YACpB,cAAc,EAAE,aAAa;YAC7B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe;SAC7D,CAAC;QAEF,uBAAkB,GAAG,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,CAAC;QAC1E,2BAAsB,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACjD,mBAAc,GAAG,CAAC,sBAAsB,CAAC,CAAC;KAEO;IAEjD,IAAI,OAAO;QACT,MAAM,GAAG,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjB;YAED,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACf;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,KAAK,CAAA;KACb;IAED,UAAU,CAAC,IAAiB;QAC1B,IAAK,IAAwB,EAAE,OAAO,EAAE;YACtC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CAAC,IAAiB;QAChC,OAAO,IAAuB,CAAC;KAChC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KACvC;;0GA7DU,aAAa;8FAAb,aAAa,wNAHb,CAAC,WAAW,CAAC,0BCnD1B,+zDA4CA;2FDUa,aAAa;kBAPzB,SAAS;+BACE,iBAAiB,aAGhB,CAAC,WAAW,CAAC;+FAIf,OAAO;sBAAf,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,MAAM;sBAAd,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,iBAAiB;sBAAzB,KAAK;;;MExCK,eAAe;IAC1B,YAAoB,YAA8B,EAAU,WAA6B;QAArE,iBAAY,GAAZ,YAAY,CAAkB;QAAU,gBAAW,GAAX,WAAW,CAAkB;QASzF,oBAAe,GAAc,EAAE,CAAC;QAChC,gBAAW,GAAc,EAAE,CAAC;QAE5B,YAAO,GAAgB;YACrB,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;YACzC,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC;YACrD,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC;SAC/D,CAAC;QAEF,mBAAc,GAAc;YAC1B,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ;YACvC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM;YACnD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe;SAC7D,CAAC;KAtB4F;IAE9F,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KACzB;IAoBD,OAAO,CAAC,IAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC1C;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1C;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,KAAK,CAAA;KACb;IAED,OAAO,CAAC,CAAa,EAAE,WAAoB;QACzC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAEpB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtC,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACnC;IAEO,MAAM,CAAC,IAAgB;QAC7B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW;YACrC,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACpC;YAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACxC;SACF,CAAC,CAAC;KACJ;IAED,QAAQ;QACN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;aACzC,SAAS,CAAC,CAAC,IAAI;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;KACN;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;4GAlFU,eAAe;gGAAf,eAAe,gFCpB5B,6pBASA;2FDWa,eAAe;kBAL3B,SAAS;+BACE,YAAY;gIAWb,MAAM;sBAAd,KAAK;;;MEFK,qBAAqB;IAEhC,YAAmB,EAA2B,EAAU,YAA8B;QAAnE,OAAE,GAAF,EAAE,CAAyB;QAAU,iBAAY,GAAZ,YAAY,CAAkB;QAiB9E,YAAO,GAAG,CAAC,CAAC;QACZ,WAAM,GAAG,CAAC,CAAC;QACX,aAAQ,GAAG,KAAK,CAAC;QAEjB,aAAQ,GAAG,KAAK,CAAC;QAEzB,oBAAe,GAAc,EAAE,CAAC;QAChC,gBAAW,GAAc,EAAE,CAAC;KAxB+D;IAE3F,IAA0B,OAAO;QAC/B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ;YAChD,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG;YAClC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;SAC1B,CAAC;KACH;IAED,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KACzB;IAa+C,WAAW,CAAC,CAAa;QACvE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAA;QAE/B,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;YACzE,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAE6C,SAAS,CAAC,CAAgB;QACtE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAA;QAE/B,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAE6C,SAAS,CAAC,CAAa;QACnE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAA;QAE/B,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;YACzE,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAM;SACP;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAE2C,OAAO,CAAC,CAAgB;QAClE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAA;QAE/B,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;IAEO,IAAI;QACV,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAEO,IAAI;QACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAEO,uBAAuB,CAAC,IAAgB;QAC9C,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;;QAG3B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;;QAGhD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAE3D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAEjC,MAAM,cAAc,IAClB,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;YACvC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CACzB,CAAC;QAEF,IAAI,cAAc,EAAE;YAClB,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;SACjC;QAED,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,IAAI,GAAG,CAAC,CAAC;SACV;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC;QAEjD,OAAO;YACL,IAAI;YACJ,GAAG;SACJ,CAAC;KACH;IAEO,MAAM,CAAC,IAAgB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAE5B,IAAI,SAAS,YAAY,aAAa,EAAE;YACtC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO;aACR;SACF;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;SACR;QAED,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAElB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;aACzC,SAAS,CAAC,CAAC,IAAI;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB,CAAC,CAAC;QAEL,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CACxD,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACrE,CAAC,SAAS,CAAC;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;;kHA7KU,qBAAqB;sGAArB,qBAAqB,oUCzBlC,yKAMA;2FDmBa,qBAAqB;kBALjC,SAAS;+BACE,0BAA0B;6HAQV,OAAO;sBAAhC,WAAW;uBAAC,OAAO;gBAaX,MAAM;sBAAd,KAAK;gBAW0C,WAAW;sBAA1D,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;gBAWA,SAAS;sBAAtD,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;gBAWE,SAAS;sBAAtD,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;gBAYA,OAAO;sBAAlD,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ME3C/B,UAAU;;uGAAV,UAAU;wGAAV,UAAU;;QAtBnB,gBAAgB;;QAGhB,aAAa;QACb,sBAAsB;QACtB,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,oBAAoB;QAEpB,qBAAqB;QACrB,eAAe,aAhBf,YAAY;QACZ,mBAAmB,aAqBnB,aAAa;QACb,qBAAqB;wGAIZ,UAAU,aATV;QACT,gBAAgB;KACjB,YArBQ;YACP,YAAY;YACZ,mBAAmB;SACpB;2FAyBU,UAAU;kBA7BtB,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;qBACpB;oBACD,YAAY,EAAE;;wBAEZ,gBAAgB;;wBAGhB,aAAa;wBACb,sBAAsB;wBACtB,aAAa;wBACb,iBAAiB;wBACjB,cAAc;wBACd,oBAAoB;wBAEpB,qBAAqB;wBACrB,eAAe;qBAChB;oBACD,SAAS,EAAE;wBACT,gBAAgB;qBACjB;oBACD,OAAO,EAAE;wBACP,aAAa;wBACb,qBAAqB;qBACtB;iBACF;;;AC7BD,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAkB,iBAAiB,CAAC,CAAC;MAmB1E,eAAe;IAC1B,OAAO,OAAO,CAAC,MAAuB;QAEpC,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,OAAO,EAAE,sBAAsB;oBAC/B,UAAU,EAAE,uBAAuB;oBACnC,IAAI,EAAE,CAAC,uBAAuB,CAAC;iBAChC;aACF;SACF,CAAC;KACH;IAED,OAAO,QAAQ,CAAC,MAAuB;QACrC,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,OAAO,EAAE,sBAAsB;oBAC/B,UAAU,EAAE,uBAAuB;oBACnC,IAAI,EAAE,CAAC,uBAAuB,CAAC;iBAChC;gBACD,gBAAgB;aACjB;SACF,CAAC;KACH;;4GAnCU,eAAe;6GAAf,eAAe,iBAVxB,kBAAkB;QAClB,kBAAkB,aANlB,YAAY;QACZ,UAAU,aAQV,kBAAkB;QAClB,aAAa;QACb,qBAAqB;6GAIZ,eAAe,aAZf,EAAE,YAJJ;YACP,YAAY;YACZ,UAAU;SACX;2FAaU,eAAe;kBAjB3B,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,UAAU;qBACX;oBACD,SAAS,EAAE,EAAE;oBACb,YAAY,EAAE;wBACZ,kBAAkB;wBAClB,kBAAkB;qBACnB;oBACD,OAAO,EAAE;wBACP,kBAAkB;wBAClB,aAAa;wBACb,qBAAqB;qBACtB;iBACF;;;ACtBD,MAAM,iBAAiB,GAAG,CAAC,KAAU;;IAEnC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAU;;IAEhC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAA2B;IAC7C,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IACvC,OAAO,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,UAAU,EAAE,WAAW,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF;MACa,UAAU;IAErB,OAAO,QAAQ,CAAC,UAAmB;QACjC,OAAO,CAAC,OAAwB;YAE9B,MAAMrC,QAAM,GAAG,UAAU,IAAIC,MAAa,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAED,QAAM,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAEhC,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,IAAI,CAAC;aACb;YAED,OAAO;gBACL,QAAQ,EAAE,IAAI;aACf,CAAC;SACH,CAAC;KACH;IAED,OAAO,SAAS,CAAC,SAAiB,EAAE,UAAmB;QACrD,OAAO,CAAC,OAAwB;YAC9B,MAAMA,QAAM,GAAG,UAAU,IAAIC,MAAa,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAED,QAAM,CAAC,CAAC;YAEhD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;YAE9B,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;gBACrD,OAAO;oBACL,SAAS,EAAE;wBACT,cAAc,EAAE,SAAS;wBACzB,YAAY,EAAE,KAAK,CAAC,MAAM;qBAC3B;iBACF,CAAC;aACH;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAO,SAAS,CAAC,SAAiB,EAAE,UAAmB;QACrD,OAAO,CAAC,OAAwB;YAE9B,MAAMA,QAAM,GAAG,UAAU,IAAIC,MAAa,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAED,QAAM,CAAC,CAAC;YAEhD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;YAE9B,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;;;gBAGtD,OAAO,IAAI,CAAC;aACb;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;gBAC5B,OAAO;oBACL,SAAS,EAAE;wBACT,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM;qBACtD;iBACF,CAAC;aACH;YAED,OAAO,IAAI,CAAC;SACb,CAAC;KACH;;;AC5EH,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAM,GAAG,KAAK;IAC5C,OAAO,CAAC,KAAkB,EAAE,QAAmC;QAC7D,MAAM,OAAO,GAAG,IAAIsC,IAAW,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACzC;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc;IAKlB,YAAY,IAAgB;QAUpB,aAAQ,GAAG,CAAC,EAAgB;YAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;SACtC,CAAA;QAEO,aAAQ,GAAG,CAAC,EAAe;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACnB,CAAA;QAjBC,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACjE;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;KAC9B;IAYD,IAAI;;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC;SACd;QAED,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;aACf,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;KACb;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;KACb;IAED,cAAc;QACZ,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;KACb;IAED,aAAa;QACX,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACzF,aAAa,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;KACb;IAED,SAAS,CAAC,IAAY;QACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,IAAY;QACrB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;KACb;IAED,IAAI;QACF,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,UAAU;QACR,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;KACb;IAED,OAAO;QACL,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;KACb;IAED,aAAa;QACX,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;KACb;IAED,SAAS;QACP,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;KACb;IAED,eAAe;QACb,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,MAAM;QACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;KACb;IAED,YAAY;QACV,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,IAAI;QACF,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,UAAU;QACR,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB;QACf,MAAM,OAAO,GAAG,IAAIC,QAAW,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB;QACd,MAAM,OAAO,GAAG,IAAIA,QAAW,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,aAAa,CAAC,KAAoB;QAChC,MAAM,OAAO,GAAG,IAAIC,OAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,IAAY,EAAE,KAAgB;QACvC,MAAM,OAAO,GAAG,IAAIJ,MAAW,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,KAAgB;QACzB,MAAM,OAAO,GAAG,IAAIA,MAAW,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAC,GAAW,EAAE,QAAoB,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAIC,OAAY,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;KACb;IAED,SAAS,CAAC,KAAa;QACrB,MAAM,OAAO,GAAG,IAAII,WAAgB,CAAC,YAAY,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;KACb;IAED,eAAe,CAAC,KAAa;QAC3B,MAAM,OAAO,GAAG,IAAIA,WAAgB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;KACb;IAED,eAAe;QACb,MAAM,OAAO,GAAG,IAAIA,WAAgB,CAAC,YAAY,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,qBAAqB;QACnB,MAAM,OAAO,GAAG,IAAIA,WAAgB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,KAAK,CAAC,CAAQ;QACZ,MAAM,OAAO,GAAG,IAAIC,SAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,IAAY;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;QAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;KACb;;;AC/MH,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;AAEzF;AAEA;AACA;AACA;AACA,MAAM,cAAc,GAAG,CAAC,QAAkB;IACxC,OAAO,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;AACA;AACA;AACA,MAAM,eAAe,GAAG,CAAC,QAAkB;IACzC,OAAO,iBAAiB,CACtB,aAAa,EACb,QAAQ,EACR,KAAK,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAC/B,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACrE,CAAC;AACJ,CAAC,CAAC;AAEF;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,CAAC,QAAkB;IACxC,OAAO,iBAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,QAAkB;IACvC,OAAO,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG,CAAC,QAAkB,EAAE,QAAgB;IACvD,OAAO,sBAAsB,CAC3B,IAAI,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC1C,QAAQ,EACR,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,QAAkB;IAClC,OAAO,aAAa,CAAC,+CAA+C,EAAE,QAAQ,CAAC,CAAA;AACjF,CAAC,CAAA;AAED;AACA;AACA,MAAM,MAAM,GAAG,CAAC,QAAkB;IAChC,OAAO,aAAa,CAAC,yCAAyC,EAAE,QAAQ,CAAC,CAAA;AAC3E,CAAC,CAAA;AAED;AACA;AACA;AACA,MAAM,eAAe,GAAG,CAAC,MAAc;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEnD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAE,OAAwB;IACpE,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9B,IAAI,OAAO,EAAE;QACX,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;KACrC;SAAM;QACL,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAC/B;IAED,MAAM,OAAO,GAAG;QACd,MAAM,CAAC;YACL,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC1C,CAAC;QACF,MAAM,CAAC;YACL,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/C,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ;gBACrD,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACtC,QAAQ,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;gBAChE,OAAO,IAAI,CAAC;aACb,CAAC;YACF,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAChD,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAChD,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;SAC7C,CAAC;QACF,MAAM,CAAC,UAAU,CAAC;KACnB,CAAC;IAEF,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;KACrC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,OAAgB;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,iBAAiB,EAAE;QAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KAC7E;IAED,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;KACzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;KACvC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;;AC9HD,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;CAClB,CAAA;AAED,MAAM,eAAe,GAAY;IAC/B,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,iBAAiB,EAAE,IAAI;IACvB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAEC,MAAa;IACrB,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,eAAe;CAC1B,CAAC;AAEF,MAAM,MAAM;IAIV,YAAY,UAAmB,eAAe;QAKtC,wBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;QAC7C,kBAAa,GAAG,IAAI,OAAO,EAAc,CAAC;QALhD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAKD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;KAChD;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;KAC1C;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAIA,MAAa,CAAC;KAC7C;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACtC;IAED,IAAI,QAAQ;QACV,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;KACxD;IAEO,kBAAkB,CAAC,EAAe;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC/C,OAAO;SACR;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrC;IAEO,YAAY;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAa,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAChD,MAAM,UAAU,GAA2B,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAEpE,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE;YAC/C,OAAO;YACP,iBAAiB;YACjB,UAAU;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;YAC/B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;gBACxB,GAAG;gBACH,MAAM;gBACN,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;aACzC,CAAC;YACF,SAAS;YACT,mBAAmB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,UAAU;SACX,CAAC,CAAC;KACJ;IAED,UAAU,CAAC,OAAgB;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;YAClB,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAE1B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAElD,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;;QAGlD,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO;SACR;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;YAClB,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACxB;IAED,cAAc,CAAC,MAAc;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KACjC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KACrB;;;AC9JH;;;;ACAA;;;;;;"}