{"version":3,"file":"ng-open-cv.mjs","sources":["../../../projects/ng-open-cv/src/lib/ng-open-cv.service.ts","../../../projects/ng-open-cv/src/lib/ng-open-cv.module.ts","../../../projects/ng-open-cv/src/public_api.ts","../../../projects/ng-open-cv/src/ng-open-cv.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { OpenCVLoadResult, OpenCVOptions } from './ng-open-cv.models';\n\ndeclare const cv: any;\n\ndeclare global {\n  interface Window {\n    Module?: Record<string, unknown>;\n  }\n}\n\nexport const OPEN_CV_CONFIGURATION = new InjectionToken<OpenCVOptions>(\n  'Angular OpenCV Configuration Object'\n);\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgOpenCVService {\n  errorOutput?: HTMLElement;\n  src: any = null;\n  dstC1: any = null;\n  dstC3: any = null;\n  dstC4: any = null;\n\n  stream: MediaStream | null = null;\n  video: HTMLVideoElement | null = null;\n\n  private readonly isReadySubject = new BehaviorSubject<OpenCVLoadResult>({\n    ready: false,\n    error: false,\n    loading: true\n  });\n\n  readonly isReady$: Observable<OpenCVLoadResult> = this.isReadySubject.asObservable();\n\n  onCameraStartedCallback?: (stream: MediaStream, video: HTMLVideoElement) => void;\n  OPENCV_URL = 'opencv.js';\n\n  DEFAULT_OPTIONS: OpenCVOptions = {\n    scriptUrl: 'assets/opencv/asm/3.4/opencv.js',\n    wasmBinaryFile: 'wasm/3.4/opencv_js.wasm',\n    usingWasm: false,\n    locateFile: this.locateFile.bind(this),\n    onRuntimeInitialized: () => {}\n  };\n\n  constructor(@Optional() @Inject(OPEN_CV_CONFIGURATION) options: OpenCVOptions | null) {\n    const mergedOptions = { ...this.DEFAULT_OPTIONS, ...(options ?? {}) };\n    this.setScriptUrl(mergedOptions.scriptUrl);\n\n    if (typeof document !== 'undefined') {\n      this.loadOpenCv(mergedOptions);\n    } else {\n      this.isReadySubject.next({\n        ready: false,\n        error: false,\n        loading: false\n      });\n    }\n  }\n\n  private locateFile(path: string, scriptDirectory: string): string {\n    if (path === 'opencv_js.wasm') {\n      return `${scriptDirectory}/wasm/${path}`;\n    }\n    return `${scriptDirectory}${path}`;\n  }\n\n  setScriptUrl(url: string): void {\n    this.OPENCV_URL = url;\n  }\n\n  loadOpenCv(options: OpenCVOptions): void {\n    this.isReadySubject.next({\n      ready: false,\n      error: false,\n      loading: true\n    });\n\n    (globalThis as { Module?: Record<string, unknown> }).Module = { ...options };\n\n    const script = document.createElement('script');\n    script.async = true;\n    script.type = 'text/javascript';\n\n    script.addEventListener('load', () => {\n      cv.onRuntimeInitialized = () => {\n        options.onRuntimeInitialized?.();\n        this.isReadySubject.next({\n          ready: true,\n          error: false,\n          loading: false\n        });\n      };\n    });\n\n    script.addEventListener('error', () => {\n      const message = `Failed to load ${this.OPENCV_URL}`;\n      this.printError(message);\n      this.isReadySubject.next({\n        ready: false,\n        error: true,\n        loading: false\n      });\n      this.isReadySubject.error(new Error(message));\n    });\n\n    script.src = this.OPENCV_URL;\n    const node = document.getElementsByTagName('script')[0];\n    if (node?.parentNode) {\n      node.parentNode.insertBefore(script, node);\n    } else {\n      document.head.appendChild(script);\n    }\n  }\n\n  createFileFromUrl(path: string, url: string): Observable<void> {\n    const request = new XMLHttpRequest();\n    request.open('GET', url, true);\n    request.responseType = 'arraybuffer';\n\n    return new Observable<void>((observer) => {\n      request.onload = () => {\n        if (request.readyState !== 4) {\n          return;\n        }\n\n        if (request.status === 200) {\n          const data = new Uint8Array(request.response);\n          cv.FS_createDataFile('/', path, data, true, false, false);\n          observer.next();\n          observer.complete();\n        } else {\n          this.printError(`Failed to load ${url} status: ${request.status}`);\n          observer.error(new Error(`Failed to load ${url}`));\n        }\n      };\n\n      request.onerror = () => {\n        const message = `Failed to load ${url}`;\n        this.printError(message);\n        observer.error(new Error(message));\n      };\n\n      request.send();\n    });\n  }\n\n  loadImageToCanvas(imageUrl: string, canvasId: string): Observable<void> {\n    return new Observable<void>((observer) => {\n      const canvas = document.getElementById(canvasId) as HTMLCanvasElement | null;\n      if (!canvas) {\n        observer.error(new Error(`Canvas element not found: ${canvasId}`));\n        return;\n      }\n\n      const ctx = canvas.getContext('2d');\n      if (!ctx) {\n        observer.error(new Error(`Unable to get 2d context for canvas: ${canvasId}`));\n        return;\n      }\n\n      const img = new Image();\n      img.crossOrigin = 'anonymous';\n      img.onload = () => {\n        canvas.width = img.width;\n        canvas.height = img.height;\n        ctx.drawImage(img, 0, 0, img.width, img.height);\n        observer.next();\n        observer.complete();\n      };\n      img.onerror = () => {\n        observer.error(new Error(`Failed to load image: ${imageUrl}`));\n      };\n      img.src = imageUrl;\n    });\n  }\n\n  loadImageToHTMLCanvas(imageUrl: string, canvas: HTMLCanvasElement): Observable<void> {\n    return new Observable<void>((observer) => {\n      const ctx = canvas.getContext('2d');\n      if (!ctx) {\n        observer.error(new Error('Unable to get 2d context for output canvas'));\n        return;\n      }\n\n      const img = new Image();\n      img.crossOrigin = 'anonymous';\n      img.onload = () => {\n        canvas.width = img.width;\n        canvas.height = img.height;\n        ctx.drawImage(img, 0, 0, img.width, img.height);\n        observer.next();\n        observer.complete();\n      };\n      img.onerror = () => {\n        observer.error(new Error(`Failed to load image: ${imageUrl}`));\n      };\n      img.src = imageUrl;\n    });\n  }\n\n  clearError(): void {\n    if (this.errorOutput) {\n      this.errorOutput.innerHTML = '';\n    }\n  }\n\n  printError(err: unknown): string {\n    let message: string;\n\n    if (typeof err === 'undefined') {\n      message = '';\n    } else if (typeof err === 'number') {\n      if (!Number.isNaN(err) && typeof cv !== 'undefined') {\n        message = `Exception: ${cv.exceptionFromPtr(err).msg}`;\n      } else {\n        message = String(err);\n      }\n    } else if (typeof err === 'string') {\n      const ptr = Number(err.split(' ')[0]);\n      if (!Number.isNaN(ptr) && typeof cv !== 'undefined') {\n        message = `Exception: ${cv.exceptionFromPtr(ptr).msg}`;\n      } else {\n        message = err;\n      }\n    } else if (err instanceof Error) {\n      message = err.stack?.replace(/\\n/g, '<br>') ?? err.message;\n    } else {\n      message = String(err);\n    }\n\n    throw new Error(message);\n  }\n\n  loadCode(scriptId: string, textAreaId: string): void {\n    const scriptNode = document.getElementById(scriptId) as HTMLScriptElement | null;\n    const textArea = document.getElementById(textAreaId) as HTMLTextAreaElement | null;\n\n    if (!scriptNode || !textArea) {\n      throw new Error('Code snippet elements not found');\n    }\n\n    if (scriptNode.type !== 'text/code-snippet') {\n      throw new Error('Unknown code snippet type');\n    }\n\n    textArea.value = scriptNode.text.replace(/^\\n/, '');\n  }\n\n  addFileInputHandler(fileInputId: string, canvasId: string): void {\n    const inputElement = document.getElementById(fileInputId) as HTMLInputElement | null;\n    if (!inputElement) {\n      throw new Error(`Input element not found: ${fileInputId}`);\n    }\n\n    inputElement.addEventListener('change', (event: Event) => {\n      const target = event.target as HTMLInputElement | null;\n      const files = target?.files;\n      if (files && files.length > 0) {\n        const imgUrl = URL.createObjectURL(files[0]);\n        this.loadImageToCanvas(imgUrl, canvasId).subscribe();\n      }\n    });\n  }\n\n  onVideoCanPlay(): void {\n    if (this.onCameraStartedCallback && this.stream && this.video) {\n      this.onCameraStartedCallback(this.stream, this.video);\n    }\n  }\n\n  startCamera(\n    resolution: 'qvga' | 'vga' | string,\n    callback: (stream: MediaStream, video: HTMLVideoElement) => void,\n    videoId: string\n  ): void {\n    const constraints = {\n      qvga: { width: { exact: 320 }, height: { exact: 240 } },\n      vga: { width: { exact: 640 }, height: { exact: 480 } }\n    } as const;\n\n    let video = document.getElementById(videoId) as HTMLVideoElement | null;\n    if (!video) {\n      video = document.createElement('video');\n    }\n\n    const videoConstraint = (constraints as Record<string, MediaTrackConstraints>)[resolution] ?? true;\n\n    navigator.mediaDevices\n      .getUserMedia({ video: videoConstraint, audio: false })\n      .then((stream) => {\n        video!.srcObject = stream;\n        void video!.play();\n        this.video = video;\n        this.stream = stream;\n        this.onCameraStartedCallback = callback;\n        video!.addEventListener('canplay', this.onVideoCanPlay.bind(this), false);\n      })\n      .catch((err: DOMException) => {\n        this.printError(`Camera Error: ${err.name} ${err.message}`);\n      });\n  }\n\n  stopCamera(): void {\n    if (this.video) {\n      this.video.pause();\n      this.video.srcObject = null;\n      this.video.removeEventListener('canplay', this.onVideoCanPlay.bind(this));\n    }\n\n    if (this.stream) {\n      this.stream.getVideoTracks()[0]?.stop();\n    }\n  }\n\n  getContours(src: any, width: number, height: number): any {\n    cv.cvtColor(src, this.dstC1, cv.COLOR_RGBA2GRAY);\n    cv.threshold(this.dstC1, this.dstC4, 120, 200, cv.THRESH_BINARY);\n    const contours = new cv.MatVector();\n    const hierarchy = new cv.Mat();\n    cv.findContours(this.dstC4, contours, hierarchy, cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE, {\n      x: 0,\n      y: 0\n    });\n    this.dstC3?.delete?.();\n    this.dstC3 = cv.Mat.ones(height, width, cv.CV_8UC3);\n    for (let i = 0; i < contours.size(); ++i) {\n      const color = new cv.Scalar(0, 255, 0);\n      cv.drawContours(this.dstC3, contours, i, color, 1, cv.LINE_8, hierarchy);\n    }\n    contours.delete();\n    hierarchy.delete();\n    return this.dstC3;\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NgOpenCVService, OPEN_CV_CONFIGURATION } from './ng-open-cv.service';\nimport { OpenCVOptions } from './ng-open-cv.models';\n\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: [],\n  providers: [NgOpenCVService]\n})\nexport class NgOpenCVModule {\n  /**\n   *\n   * Setup the module in your application's root bootstrap.\n   *\n   *\n   * @memberOf NgOpenCvModule\n   */\n  static forRoot(config: OpenCVOptions): ModuleWithProviders<NgOpenCVModule> {\n    return {\n      ngModule: NgOpenCVModule,\n      providers: [{ provide: OPEN_CV_CONFIGURATION, useValue: config }]\n    };\n  }\n}\n","/*\n * Public API Surface of ng-open-cv\n */\n\nexport * from './lib/ng-open-cv.models';\nexport * from './lib/ng-open-cv.service';\nexport * from './lib/ng-open-cv.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAaa,qBAAqB,GAAG,IAAI,cAAc,CACrD,qCAAqC;MAM1B,eAAe,CAAA;AA6B1B,IAAA,WAAA,CAAuD,OAA6B,EAAA;QA3BpF,IAAA,CAAA,GAAG,GAAQ,IAAI;QACf,IAAA,CAAA,KAAK,GAAQ,IAAI;QACjB,IAAA,CAAA,KAAK,GAAQ,IAAI;QACjB,IAAA,CAAA,KAAK,GAAQ,IAAI;QAEjB,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,KAAK,GAA4B,IAAI;QAEpB,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAmB;AACtE,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,QAAQ,GAAiC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QAGpF,IAAA,CAAA,UAAU,GAAG,WAAW;AAExB,QAAA,IAAA,CAAA,eAAe,GAAkB;AAC/B,YAAA,SAAS,EAAE,iCAAiC;AAC5C,YAAA,cAAc,EAAE,yBAAyB;AACzC,YAAA,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,YAAA,oBAAoB,EAAE,MAAK,EAAE;SAC9B;AAGC,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,EAAE;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;AAE1C,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;QACJ;IACF;IAEQ,UAAU,CAAC,IAAY,EAAE,eAAuB,EAAA;AACtD,QAAA,IAAI,IAAI,KAAK,gBAAgB,EAAE;AAC7B,YAAA,OAAO,CAAA,EAAG,eAAe,CAAA,MAAA,EAAS,IAAI,EAAE;QAC1C;AACA,QAAA,OAAO,CAAA,EAAG,eAAe,CAAA,EAAG,IAAI,EAAE;IACpC;AAEA,IAAA,YAAY,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;IACvB;AAEA,IAAA,UAAU,CAAC,OAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;AAED,QAAA,UAAmD,CAAC,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE;QAE5E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB;AAE/B,QAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAK;AACnC,YAAA,EAAE,CAAC,oBAAoB,GAAG,MAAK;AAC7B,gBAAA,OAAO,CAAC,oBAAoB,IAAI;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;AACJ,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACpC,YAAA,MAAM,OAAO,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,UAAU,EAAE;AACnD,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvD,QAAA,IAAI,IAAI,EAAE,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;QAC5C;aAAO;AACL,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACnC;IACF;IAEA,iBAAiB,CAAC,IAAY,EAAE,GAAW,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;QACpC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;AAC9B,QAAA,OAAO,CAAC,YAAY,GAAG,aAAa;AAEpC,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAAQ,KAAI;AACvC,YAAA,OAAO,CAAC,MAAM,GAAG,MAAK;AACpB,gBAAA,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;oBAC5B;gBACF;AAEA,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC1B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC7C,oBAAA,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;oBACzD,QAAQ,CAAC,IAAI,EAAE;oBACf,QAAQ,CAAC,QAAQ,EAAE;gBACrB;qBAAO;oBACL,IAAI,CAAC,UAAU,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,SAAA,EAAY,OAAO,CAAC,MAAM,CAAA,CAAE,CAAC;oBAClE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC,CAAC;gBACpD;AACF,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,MAAK;AACrB,gBAAA,MAAM,OAAO,GAAG,CAAA,eAAA,EAAkB,GAAG,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACpC,YAAA,CAAC;YAED,OAAO,CAAC,IAAI,EAAE;AAChB,QAAA,CAAC,CAAC;IACJ;IAEA,iBAAiB,CAAC,QAAgB,EAAE,QAAgB,EAAA;AAClD,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAAQ,KAAI;YACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAA6B;YAC5E,IAAI,CAAC,MAAM,EAAE;gBACX,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAE,CAAC,CAAC;gBAClE;YACF;YAEA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YACnC,IAAI,CAAC,GAAG,EAAE;gBACR,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAE,CAAC,CAAC;gBAC7E;YACF;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW;AAC7B,YAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,gBAAA,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACxB,gBAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AAC1B,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;gBAC/C,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,OAAO,GAAG,MAAK;gBACjB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAE,CAAC,CAAC;AAChE,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,GAAG,GAAG,QAAQ;AACpB,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,CAAC,QAAgB,EAAE,MAAyB,EAAA;AAC/D,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAAQ,KAAI;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YACnC,IAAI,CAAC,GAAG,EAAE;gBACR,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBACvE;YACF;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW;AAC7B,YAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,gBAAA,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACxB,gBAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AAC1B,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;gBAC/C,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,OAAO,GAAG,MAAK;gBACjB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAE,CAAC,CAAC;AAChE,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,GAAG,GAAG,QAAQ;AACpB,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE;QACjC;IACF;AAEA,IAAA,UAAU,CAAC,GAAY,EAAA;AACrB,QAAA,IAAI,OAAe;AAEnB,QAAA,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;YAC9B,OAAO,GAAG,EAAE;QACd;AAAO,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;gBACnD,OAAO,GAAG,CAAA,WAAA,EAAc,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAA,CAAE;YACxD;iBAAO;AACL,gBAAA,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YACvB;QACF;AAAO,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;gBACnD,OAAO,GAAG,CAAA,WAAA,EAAc,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAA,CAAE;YACxD;iBAAO;gBACL,OAAO,GAAG,GAAG;YACf;QACF;AAAO,aAAA,IAAI,GAAG,YAAY,KAAK,EAAE;AAC/B,YAAA,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO;QAC5D;aAAO;AACL,YAAA,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB;AAEA,QAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;IAC1B;IAEA,QAAQ,CAAC,QAAgB,EAAE,UAAkB,EAAA;QAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAA6B;QAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAA+B;AAElF,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;QACpD;AAEA,QAAA,IAAI,UAAU,CAAC,IAAI,KAAK,mBAAmB,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AAEA,QAAA,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACrD;IAEA,mBAAmB,CAAC,WAAmB,EAAE,QAAgB,EAAA;QACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAA4B;QACpF,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,CAAA,CAAE,CAAC;QAC5D;QAEA,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAY,KAAI;AACvD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;AACtD,YAAA,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK;YAC3B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE;YACtD;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7D,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;QACvD;IACF;AAEA,IAAA,WAAW,CACT,UAAmC,EACnC,QAAgE,EAChE,OAAe,EAAA;AAEf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;AACvD,YAAA,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SAC5C;QAEV,IAAI,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAA4B;QACvE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QACzC;QAEA,MAAM,eAAe,GAAI,WAAqD,CAAC,UAAU,CAAC,IAAI,IAAI;AAElG,QAAA,SAAS,CAAC;aACP,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE;AACrD,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACf,YAAA,KAAM,CAAC,SAAS,GAAG,MAAM;AACzB,YAAA,KAAK,KAAM,CAAC,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ;AACvC,YAAA,KAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;AAC3E,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAiB,KAAI;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,CAAA,cAAA,EAAiB,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC;AAC7D,QAAA,CAAC,CAAC;IACN;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACzC;IACF;AAEA,IAAA,WAAW,CAAC,GAAQ,EAAE,KAAa,EAAE,MAAc,EAAA;AACjD,QAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC;AAChD,QAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,SAAS,EAAE;AACnC,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE;AAC9B,QAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAmB,EAAE;AACtF,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE;AACJ,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC;AACnD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACtC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;QAC1E;QACA,QAAQ,CAAC,MAAM,EAAE;QACjB,SAAS,CAAC,MAAM,EAAE;QAClB,OAAO,IAAI,CAAC,KAAK;IACnB;AA7TW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBA6BM,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA7B1C,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BA8Bc;;0BAAY,MAAM;2BAAC,qBAAqB;;;MCvC1C,cAAc,CAAA;AACzB;;;;;;AAMG;IACH,OAAO,OAAO,CAAC,MAAqB,EAAA;QAClC,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE;SACjE;IACH;+GAbW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAd,cAAc,EAAA,CAAA,CAAA;gHAAd,cAAc,EAAA,SAAA,EAFd,CAAC,eAAe,CAAC,EAAA,CAAA,CAAA;;4FAEjB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,CAAC,eAAe;AAC5B,iBAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}