jbrowse-plugin-msaview 5.2.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/MsaViewPanel/model.d.ts +9 -11
  2. package/dist/MsaViewPanel/model.js +7 -0
  3. package/dist/MsaViewPanel/model.test.js +3 -0
  4. package/dist/chunks/AboutDialog-HCCCEJ6V.js +2 -0
  5. package/dist/chunks/{AboutDialog-IRBPUPJK.js.map → AboutDialog-HCCCEJ6V.js.map} +4 -4
  6. package/dist/chunks/AnnotationFileDialog-CPJ4X7XW.js +2 -0
  7. package/dist/chunks/AnnotationFileDialog-CPJ4X7XW.js.map +7 -0
  8. package/dist/chunks/ExportSVGDialog-YUFLYBYW.js +2 -0
  9. package/dist/chunks/ExportSVGDialog-YUFLYBYW.js.map +7 -0
  10. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js → FeatureDialog-NBDB5SWU.js} +1 -1
  11. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js.map → FeatureDialog-NBDB5SWU.js.map} +1 -1
  12. package/dist/chunks/HelpDialog-UCUYPCOI.js +2 -0
  13. package/dist/chunks/HelpDialog-UCUYPCOI.js.map +7 -0
  14. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js → LaunchMsaViewDialog-HGL6P4E4.js} +2 -2
  15. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js.map → LaunchMsaViewDialog-HGL6P4E4.js.map} +1 -1
  16. package/dist/chunks/{MetadataDialog-KZWQFRF7.js → MetadataDialog-DSA3545E.js} +2 -2
  17. package/dist/chunks/{MetadataDialog-KZWQFRF7.js.map → MetadataDialog-DSA3545E.js.map} +1 -1
  18. package/dist/chunks/MsaViewPanel-XSXFJWWY.js +2 -0
  19. package/dist/chunks/{MsaViewPanel-RUZAKFCB.js.map → MsaViewPanel-XSXFJWWY.js.map} +1 -1
  20. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js → TrackInfoDialog-YXCIGFYM.js} +2 -2
  21. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js.map → TrackInfoDialog-YXCIGFYM.js.map} +1 -1
  22. package/dist/chunks/{TreeNodeInfoDialog-VRCVIF26.js → TreeNodeInfoDialog-QCWDJTM4.js} +2 -2
  23. package/dist/chunks/{TreeNodeInfoDialog-VRCVIF26.js.map → TreeNodeInfoDialog-QCWDJTM4.js.map} +1 -1
  24. package/dist/chunks/{chunk-NI3VGKQP.js → chunk-2XCUSA22.js} +2 -2
  25. package/dist/chunks/{chunk-GIHMPOCO.js → chunk-35FWLG3N.js} +1 -1
  26. package/dist/chunks/{chunk-GIHMPOCO.js.map → chunk-35FWLG3N.js.map} +1 -1
  27. package/dist/chunks/{chunk-F3EC6OCO.js → chunk-5OSSOQH4.js} +1 -1
  28. package/dist/chunks/{chunk-F3EC6OCO.js.map → chunk-5OSSOQH4.js.map} +1 -1
  29. package/dist/chunks/{chunk-GDFVLZYX.js → chunk-666BV764.js} +2 -2
  30. package/dist/chunks/{chunk-GDFVLZYX.js.map → chunk-666BV764.js.map} +1 -1
  31. package/dist/chunks/{chunk-YUKJI2AH.js → chunk-AQ2THRTR.js} +2 -2
  32. package/dist/chunks/{chunk-YUKJI2AH.js.map → chunk-AQ2THRTR.js.map} +1 -1
  33. package/dist/chunks/chunk-ASUKJX5J.js +2 -0
  34. package/dist/chunks/chunk-ASUKJX5J.js.map +7 -0
  35. package/dist/chunks/chunk-FFHB7WP7.js +18 -0
  36. package/dist/chunks/chunk-FFHB7WP7.js.map +7 -0
  37. package/dist/chunks/{chunk-YOTSFJMU.js → chunk-GAY2PLS6.js} +1 -1
  38. package/dist/chunks/{chunk-YOTSFJMU.js.map → chunk-GAY2PLS6.js.map} +1 -1
  39. package/dist/chunks/chunk-JDQUBCHM.js +2 -0
  40. package/dist/chunks/chunk-JDQUBCHM.js.map +7 -0
  41. package/dist/chunks/{chunk-IBBQUV2I.js → chunk-KSCGTF4R.js} +1 -1
  42. package/dist/chunks/{chunk-IBBQUV2I.js.map → chunk-KSCGTF4R.js.map} +1 -1
  43. package/dist/chunks/{chunk-6YFCSBEE.js → chunk-NLAW2OYS.js} +2 -2
  44. package/dist/chunks/{chunk-6YFCSBEE.js.map → chunk-NLAW2OYS.js.map} +1 -1
  45. package/dist/chunks/{chunk-ZCT7RD24.js → chunk-QQKPT6EL.js} +2 -2
  46. package/dist/chunks/{chunk-H6IQBAW7.js → chunk-WMDOEOAH.js} +2 -2
  47. package/dist/chunks/{chunk-H6IQBAW7.js.map → chunk-WMDOEOAH.js.map} +1 -1
  48. package/dist/chunks/chunk-XTQQNBQ5.js +2 -0
  49. package/dist/chunks/chunk-XTQQNBQ5.js.map +7 -0
  50. package/dist/chunks/chunk-XXCNVFGP.js +11 -0
  51. package/dist/chunks/chunk-XXCNVFGP.js.map +7 -0
  52. package/dist/chunks/chunk-ZQSWX57C.js +2 -0
  53. package/dist/chunks/chunk-ZQSWX57C.js.map +7 -0
  54. package/dist/chunks/{dist-CMWKVHC7.js → dist-GXYZN4ZR.js} +2 -2
  55. package/dist/chunks/{dist-CMWKVHC7.js.map → dist-GXYZN4ZR.js.map} +3 -3
  56. package/dist/chunks/dist-GZKCGB2N.js +2 -0
  57. package/dist/chunks/{model-VE7IYWNU.js → model-36HCIOZJ.js} +3 -3
  58. package/dist/chunks/model-36HCIOZJ.js.map +7 -0
  59. package/dist/chunks/renderToSvg-5DMIQ72S.js +2 -0
  60. package/dist/jbrowse-plugin-msaview.esm.js +2 -2
  61. package/dist/jbrowse-plugin-msaview.esm.js.map +2 -2
  62. package/dist/version.d.ts +1 -1
  63. package/dist/version.js +1 -1
  64. package/package.json +18 -18
  65. package/src/MsaViewPanel/model.test.ts +4 -0
  66. package/src/MsaViewPanel/model.ts +8 -0
  67. package/src/version.ts +1 -1
  68. package/dist/chunks/AboutDialog-IRBPUPJK.js +0 -2
  69. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js +0 -2
  70. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js.map +0 -7
  71. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js +0 -2
  72. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js.map +0 -7
  73. package/dist/chunks/MsaViewPanel-RUZAKFCB.js +0 -2
  74. package/dist/chunks/chunk-NMYD2GWF.js +0 -18
  75. package/dist/chunks/chunk-NMYD2GWF.js.map +0 -7
  76. package/dist/chunks/chunk-QQ5LZUIO.js +0 -11
  77. package/dist/chunks/chunk-QQ5LZUIO.js.map +0 -7
  78. package/dist/chunks/chunk-QUWPHTZQ.js +0 -2
  79. package/dist/chunks/chunk-QUWPHTZQ.js.map +0 -7
  80. package/dist/chunks/dist-R73J3CC3.js +0 -2
  81. package/dist/chunks/model-VE7IYWNU.js.map +0 -7
  82. package/dist/chunks/renderToSvg-VDXAB7TT.js +0 -2
  83. /package/dist/chunks/{chunk-NI3VGKQP.js.map → chunk-2XCUSA22.js.map} +0 -0
  84. /package/dist/chunks/{chunk-ZCT7RD24.js.map → chunk-QQKPT6EL.js.map} +0 -0
  85. /package/dist/chunks/{dist-R73J3CC3.js.map → dist-GZKCGB2N.js.map} +0 -0
  86. /package/dist/chunks/{renderToSvg-VDXAB7TT.js.map → renderToSvg-5DMIQ72S.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+svgcanvas@9.0.0/node_modules/@jbrowse/svgcanvas/src/index.ts"],
4
- "sourcesContent": ["/**\n * SVGCanvas v2.0.3\n * Draw on SVG using Canvas's 2D Context API.\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n * Original Authors: Kerry Liu, Zeno Zeng\n * Copyright (c) 2014 Gliffy Inc.\n * Copyright (c) 2021 Zeno Zeng\n *\n * Vendored, converted to ESM/TypeScript, and cut down to the calls the\n * renderers make: rectangles, paths, arcs and glyphs.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nfunction getTextAnchor(textAlign: string): string {\n const mapping: Record<string, string> = {\n left: 'start',\n right: 'end',\n center: 'middle',\n start: 'start',\n end: 'end',\n }\n return mapping[textAlign] || mapping.start!\n}\n\nfunction getDominantBaseline(textBaseline: string): string {\n const mapping: Record<string, string> = {\n alphabetic: 'alphabetic',\n hanging: 'hanging',\n top: 'text-before-edge',\n bottom: 'text-after-edge',\n middle: 'central',\n }\n return mapping[textBaseline] || mapping.alphabetic!\n}\n\n/**\n * SVG's initial values for text presentation attributes. Omitting them from\n * every glyph takes ~22% off a sequence-logo figure.\n */\nconst TEXT_ATTR_DEFAULTS: Record<string, string> = {\n 'font-style': 'normal',\n 'font-weight': 'normal',\n // the initial value is `auto`, which resolves to the alphabetic baseline\n 'dominant-baseline': 'alphabetic',\n}\n\nfunction omitDefault(attr: string, value: string | undefined) {\n return value === TEXT_ATTR_DEFAULTS[attr] ? undefined : value\n}\n\nconst STYLES: Record<string, any> = {\n strokeStyle: {\n svgAttr: 'stroke',\n canvas: '#000000',\n svg: 'none',\n apply: 'stroke',\n },\n fillStyle: {\n svgAttr: 'fill',\n canvas: '#000000',\n svg: null,\n apply: 'fill',\n },\n lineWidth: {\n svgAttr: 'stroke-width',\n canvas: 1,\n svg: 1,\n apply: 'stroke',\n },\n font: {\n canvas: '10px sans-serif',\n },\n textAlign: {\n canvas: 'start',\n },\n textBaseline: {\n canvas: 'alphabetic',\n },\n // null on both sides so the canvas and svg defaults compare equal and strokes\n // carry no empty stroke-dasharray\n lineDash: {\n svgAttr: 'stroke-dasharray',\n canvas: null,\n svg: null,\n apply: 'stroke',\n },\n}\n\nconst rgbaRegex =\n /rgba\\(\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/i\n\ninterface ContextOptions {\n document?: Document\n ctx?: CanvasRenderingContext2D\n}\n\nexport class Context {\n width: number\n height: number\n canvas: Context\n\n __document: Document\n __ctx: CanvasRenderingContext2D\n __canvas?: HTMLCanvasElement\n __root: SVGSVGElement\n __currentElement: SVGElement\n __styleStack: any[]\n __groupStack: SVGElement[]\n __currentDefaultPath: string\n __currentPosition: { x?: number; y?: number }\n __transformMatrix: DOMMatrix\n __transformMatrixStack?: DOMMatrix[]\n // parsed fonts keyed by `font` string; each parse costs a DOM element and a\n // CSS parse, and exports ask per glyph\n __fontCache = new Map<string, CSSStyleDeclaration>()\n\n strokeStyle: any\n fillStyle: any\n lineWidth: any\n font: any\n textAlign: any\n textBaseline: any\n lineDash: any\n\n constructor(width: number, height: number, options: ContextOptions = {}) {\n this.width = width\n this.height = height\n this.canvas = this\n this.__document = options.document || document\n\n if (options.ctx) {\n this.__ctx = options.ctx\n } else {\n this.__canvas = this.__document.createElement('canvas')\n this.__ctx = this.__canvas.getContext('2d')!\n }\n\n this.__setDefaultStyles()\n this.__styleStack = [this.__getStyleState()]\n this.__groupStack = []\n\n this.__root = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg',\n )\n this.__root.setAttribute('version', '1.1')\n this.__root.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n this.__root.setAttribute('width', String(width))\n this.__root.setAttribute('height', String(height))\n\n this.__currentElement = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'g',\n )\n this.__root.appendChild(this.__currentElement)\n\n this.__currentDefaultPath = ''\n this.__currentPosition = {}\n this.__transformMatrix = new DOMMatrix()\n\n this.resetTransform()\n }\n\n __createElement(\n elementName: string,\n properties: Record<string, any> = {},\n resetFill?: boolean,\n ): SVGElement {\n const element = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n elementName,\n )\n if (resetFill) {\n // placeholders: fill()/stroke() overwrite their own attribute, and\n // __applyStyleToCurrentElement drops the other when it is the svg default\n element.setAttribute('fill', 'none')\n element.setAttribute('stroke', 'none')\n }\n for (const key of Object.keys(properties)) {\n // __applyText passes optional attributes through unconditionally; skipping\n // unset ones keeps an invalid text-decoration=\"undefined\" (~28 bytes) off\n // every glyph\n const value = properties[key]\n if (value !== undefined && value !== null) {\n element.setAttribute(key, value)\n }\n }\n return element\n }\n\n __setDefaultStyles() {\n for (const key of Object.keys(STYLES)) {\n ;(this as any)[key] = STYLES[key].canvas\n }\n }\n\n __applyStyleState(styleState: Record<string, any>) {\n for (const key of Object.keys(styleState)) {\n ;(this as any)[key] = styleState[key]\n }\n }\n\n __getStyleState(): Record<string, any> {\n const styleState: Record<string, any> = {}\n for (const key of Object.keys(STYLES)) {\n styleState[key] = (this as any)[key]\n }\n return styleState\n }\n\n /**\n * A pure translation folds into the element's x/y, saving ~35 bytes per\n * glyph. Any other transform, such as a sequence-logo letter's scale, is\n * written as a matrix.\n */\n __applyTransformation(element: SVGElement, matrix?: DOMMatrix) {\n const { a, b, c, d, e, f } = matrix || this.getTransform()\n if (\n a === 1 &&\n b === 0 &&\n c === 0 &&\n d === 1 &&\n element.hasAttribute('x') &&\n element.hasAttribute('y')\n ) {\n if (e !== 0) {\n element.setAttribute('x', String(Number(element.getAttribute('x')) + e))\n }\n if (f !== 0) {\n element.setAttribute('y', String(Number(element.getAttribute('y')) + f))\n }\n return\n }\n element.setAttribute('transform', `matrix(${a} ${b} ${c} ${d} ${e} ${f})`)\n }\n\n __applyStyleToCurrentElement(type: string) {\n const currentElement = this.__currentElement\n\n for (const key of Object.keys(STYLES)) {\n const style = STYLES[key]\n const value = (this as any)[key]\n if (!style.apply?.includes(type) || style.svg === value) {\n continue\n }\n const matches =\n (style.svgAttr === 'stroke' || style.svgAttr === 'fill') &&\n typeof value === 'string' &&\n value.includes('rgba')\n ? rgbaRegex.exec(value)\n : null\n if (matches) {\n // SVG has no rgba(); the alpha goes in the -opacity attribute\n currentElement.setAttribute(\n style.svgAttr,\n `rgb(${matches[1]},${matches[2]},${matches[3]})`,\n )\n currentElement.setAttribute(`${style.svgAttr}-opacity`, matches[4]!)\n } else if (key === 'lineWidth') {\n const scale = this.__getTransformScale()\n currentElement.setAttribute(\n style.svgAttr,\n String(value * Math.max(scale.x, scale.y)),\n )\n } else {\n currentElement.setAttribute(style.svgAttr, value)\n }\n }\n\n // svg defaults stroke to none, so a fill drops stroke=\"none\". Fill defaults\n // to black, so a stroked element keeps fill=\"none\".\n if (type === 'fill' && currentElement.getAttribute('stroke') === 'none') {\n currentElement.removeAttribute('stroke')\n }\n }\n\n __closestGroupOrSvg(node?: SVGElement): SVGElement {\n node = node || this.__currentElement\n if (node.nodeName === 'g' || node.nodeName === 'svg') {\n return node\n }\n return this.__closestGroupOrSvg(node.parentNode as SVGElement)\n }\n\n getSvg(): SVGSVGElement {\n return this.__root\n }\n\n save() {\n const group = this.__createElement('g')\n const parent = this.__closestGroupOrSvg()\n this.__groupStack.push(parent)\n parent.appendChild(group)\n this.__currentElement = group\n this.__styleStack.push(this.__getStyleState())\n if (!this.__transformMatrixStack) {\n this.__transformMatrixStack = []\n }\n this.__transformMatrixStack.push(this.getTransform())\n }\n\n restore() {\n this.__currentElement = this.__groupStack.pop()!\n if (!this.__currentElement) {\n this.__currentElement = this.__root.childNodes[0] as SVGElement\n }\n this.__applyStyleState(this.__styleStack.pop())\n if (this.__transformMatrixStack && this.__transformMatrixStack.length > 0) {\n this.setTransform(this.__transformMatrixStack.pop()!)\n }\n }\n\n beginPath() {\n this.__currentDefaultPath = ''\n this.__currentPosition = {}\n const path = this.__createElement('path', {}, true)\n this.__closestGroupOrSvg().appendChild(path)\n this.__currentElement = path\n }\n\n __applyCurrentDefaultPath() {\n if (this.__currentElement.nodeName === 'path') {\n this.__currentElement.setAttribute('d', this.__currentDefaultPath)\n }\n }\n\n __addPathCommand(command: string) {\n this.__currentDefaultPath += ' '\n this.__currentDefaultPath += command\n }\n\n moveTo(x: number, y: number) {\n if (this.__currentElement.nodeName !== 'path') {\n this.beginPath()\n }\n this.__currentPosition = { x, y }\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(`M ${p.x} ${p.y}`)\n }\n\n closePath() {\n if (this.__currentDefaultPath) {\n this.__addPathCommand('Z')\n }\n }\n\n lineTo(x: number, y: number) {\n this.__currentPosition = { x, y }\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(\n this.__currentDefaultPath.includes('M')\n ? `L ${p.x} ${p.y}`\n : `M ${p.x} ${p.y}`,\n )\n }\n\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n this.__currentPosition = { x, y }\n const cp = this.__matrixTransform(cpx, cpy)\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(`Q ${cp.x} ${cp.y} ${p.x} ${p.y}`)\n }\n\n // paint-order matters only on an element with both fill and stroke: the\n // collapsed-clade triangle\n __applyPaintOrder(order: string, other: string) {\n const current = this.__currentElement\n if (\n current.nodeName === 'path' &&\n current.hasAttribute(other) &&\n current.getAttribute(other) !== 'none'\n ) {\n current.setAttribute('paint-order', order)\n }\n }\n\n stroke() {\n this.__applyPaintOrder('fill stroke markers', 'fill')\n this.__applyCurrentDefaultPath()\n this.__applyStyleToCurrentElement('stroke')\n }\n\n fill() {\n this.__applyPaintOrder('stroke fill markers', 'stroke')\n this.__applyCurrentDefaultPath()\n this.__applyStyleToCurrentElement('fill')\n }\n\n // A fill covering the whole context paints over what is under it, as on a\n // canvas; it does not clear the drawing.\n fillRect(x: number, y: number, width: number, height: number) {\n const rect = this.__createElement('rect', { x, y, width, height }, true)\n this.__closestGroupOrSvg().appendChild(rect)\n this.__currentElement = rect\n this.__applyTransformation(rect)\n this.__applyStyleToCurrentElement('fill')\n }\n\n strokeRect(x: number, y: number, width: number, height: number) {\n const rect = this.__createElement('rect', { x, y, width, height }, true)\n this.__closestGroupOrSvg().appendChild(rect)\n this.__currentElement = rect\n this.__applyTransformation(rect)\n this.__applyStyleToCurrentElement('stroke')\n }\n\n clearRect(x: number, y: number, width: number, height: number) {\n const { a, b, c, d, e, f } = this.getTransform()\n if (\n a === 1 &&\n b === 0 &&\n c === 0 &&\n d === 1 &&\n e === 0 &&\n f === 0 &&\n x === 0 &&\n y === 0 &&\n width === this.width &&\n height === this.height\n ) {\n this.__clearCanvas()\n return\n }\n const rect = this.__createElement(\n 'rect',\n { x, y, width, height, fill: '#FFFFFF' },\n true,\n )\n this.__applyTransformation(rect)\n this.__closestGroupOrSvg().appendChild(rect)\n }\n\n __clearCanvas() {\n this.__root.removeChild(this.__root.childNodes[0]!)\n this.__currentElement = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'g',\n )\n this.__root.appendChild(this.__currentElement)\n this.__groupStack = []\n }\n\n __parsedFont() {\n const hit = this.__fontCache.get(this.font)\n if (hit) {\n return hit\n }\n const el = document.createElement('span')\n el.setAttribute('style', `font:${this.font}`)\n this.__fontCache.set(this.font, el.style)\n return el.style\n }\n\n fillText(text: string, x: number, y: number) {\n const style = this.__parsedFont()\n const parent = this.__closestGroupOrSvg()\n const textElement = this.__createElement(\n 'text',\n {\n 'font-family': style.fontFamily,\n 'font-size': style.fontSize,\n 'font-style': omitDefault('font-style', style.fontStyle),\n 'font-weight': omitDefault('font-weight', style.fontWeight),\n x,\n y,\n 'text-anchor': getTextAnchor(this.textAlign),\n 'dominant-baseline': omitDefault(\n 'dominant-baseline',\n getDominantBaseline(this.textBaseline),\n ),\n },\n true,\n )\n\n textElement.appendChild(this.__document.createTextNode(text))\n this.__currentElement = textElement\n this.__applyTransformation(textElement)\n this.__applyStyleToCurrentElement('fill')\n parent.appendChild(textElement)\n }\n\n measureText(text: string): TextMetrics {\n this.__ctx.font = this.font\n return this.__ctx.measureText(text)\n }\n\n arc(\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n counterClockwise?: boolean,\n ) {\n if (startAngle === endAngle) {\n return\n }\n startAngle = startAngle % (2 * Math.PI)\n endAngle = endAngle % (2 * Math.PI)\n if (startAngle === endAngle) {\n endAngle =\n (endAngle + 2 * Math.PI - 0.001 * (counterClockwise ? -1 : 1)) %\n (2 * Math.PI)\n }\n const endX = x + radius * Math.cos(endAngle)\n const endY = y + radius * Math.sin(endAngle)\n const startX = x + radius * Math.cos(startAngle)\n const startY = y + radius * Math.sin(startAngle)\n const sweepFlag = counterClockwise ? 0 : 1\n let diff = endAngle - startAngle\n if (diff < 0) {\n diff += 2 * Math.PI\n }\n const largeArcFlag = counterClockwise\n ? diff > Math.PI\n ? 0\n : 1\n : diff > Math.PI\n ? 1\n : 0\n\n const { x: scaleX, y: scaleY } = this.__getTransformScale()\n const end = this.__matrixTransform(endX, endY)\n\n this.lineTo(startX, startY)\n this.__addPathCommand(\n `A ${radius * scaleX} ${radius * scaleY} 0 ${largeArcFlag} ${sweepFlag} ${end.x} ${end.y}`,\n )\n this.__currentPosition = { x: endX, y: endY }\n }\n\n setLineDash(dashArray: number[]) {\n this.lineDash = dashArray.length > 0 ? dashArray.join(',') : null\n }\n\n setTransform(\n a: number | DOMMatrix,\n b?: number,\n c?: number,\n d?: number,\n e?: number,\n f?: number,\n ) {\n this.__transformMatrix =\n a instanceof DOMMatrix\n ? new DOMMatrix([a.a, a.b, a.c, a.d, a.e, a.f])\n : new DOMMatrix([a, b!, c!, d!, e!, f!])\n }\n\n getTransform(): DOMMatrix {\n const { a, b, c, d, e, f } = this.__transformMatrix\n return new DOMMatrix([a, b, c, d, e, f])\n }\n\n resetTransform() {\n this.setTransform(1, 0, 0, 1, 0, 0)\n }\n\n scale(x: number, y?: number) {\n if (y === undefined) {\n y = x\n }\n if (isNaN(x) || isNaN(y) || !isFinite(x) || !isFinite(y)) {\n return\n }\n this.setTransform(this.getTransform().scale(x, y))\n }\n\n translate(x: number, y: number) {\n this.setTransform(this.getTransform().translate(x, y))\n }\n\n __matrixTransform(x: number, y: number): DOMPoint {\n return new DOMPoint(x, y).matrixTransform(this.__transformMatrix)\n }\n\n __getTransformScale(): { x: number; y: number } {\n return {\n x: Math.hypot(this.__transformMatrix.a, this.__transformMatrix.b),\n y: Math.hypot(this.__transformMatrix.c, this.__transformMatrix.d),\n }\n }\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+svgcanvas@9.1.0/node_modules/@jbrowse/svgcanvas/src/index.ts"],
4
+ "sourcesContent": ["/**\n * SVGCanvas v2.0.3\n * Draw on SVG using Canvas's 2D Context API.\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n * Original Authors: Kerry Liu, Zeno Zeng\n * Copyright (c) 2014 Gliffy Inc.\n * Copyright (c) 2021 Zeno Zeng\n *\n * Vendored, converted to ESM/TypeScript, and cut down to the calls the\n * renderers make: rectangles, paths, arcs and glyphs.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nfunction getTextAnchor(textAlign: string): string {\n const mapping: Record<string, string> = {\n left: 'start',\n right: 'end',\n center: 'middle',\n start: 'start',\n end: 'end',\n }\n return mapping[textAlign] || mapping.start!\n}\n\nfunction getDominantBaseline(textBaseline: string): string {\n const mapping: Record<string, string> = {\n alphabetic: 'alphabetic',\n hanging: 'hanging',\n top: 'text-before-edge',\n bottom: 'text-after-edge',\n middle: 'central',\n }\n return mapping[textBaseline] || mapping.alphabetic!\n}\n\n/**\n * SVG's initial values for text presentation attributes. Omitting them from\n * every glyph takes ~22% off a sequence-logo figure.\n */\nconst TEXT_ATTR_DEFAULTS: Record<string, string> = {\n 'font-style': 'normal',\n 'font-weight': 'normal',\n // the initial value is `auto`, which resolves to the alphabetic baseline\n 'dominant-baseline': 'alphabetic',\n}\n\nfunction omitDefault(attr: string, value: string | undefined) {\n return value === TEXT_ATTR_DEFAULTS[attr] ? undefined : value\n}\n\nconst STYLES: Record<string, any> = {\n strokeStyle: {\n svgAttr: 'stroke',\n canvas: '#000000',\n svg: 'none',\n apply: 'stroke',\n },\n fillStyle: {\n svgAttr: 'fill',\n canvas: '#000000',\n svg: null,\n apply: 'fill',\n },\n lineWidth: {\n svgAttr: 'stroke-width',\n canvas: 1,\n svg: 1,\n apply: 'stroke',\n },\n font: {\n canvas: '10px sans-serif',\n },\n textAlign: {\n canvas: 'start',\n },\n textBaseline: {\n canvas: 'alphabetic',\n },\n // null on both sides so the canvas and svg defaults compare equal and strokes\n // carry no empty stroke-dasharray\n lineDash: {\n svgAttr: 'stroke-dasharray',\n canvas: null,\n svg: null,\n apply: 'stroke',\n },\n}\n\nconst rgbaRegex =\n /rgba\\(\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/i\n\ninterface ContextOptions {\n document?: Document\n ctx?: CanvasRenderingContext2D\n}\n\nexport class Context {\n width: number\n height: number\n canvas: Context\n\n __document: Document\n __ctx: CanvasRenderingContext2D\n __canvas?: HTMLCanvasElement\n __root: SVGSVGElement\n __currentElement: SVGElement\n __styleStack: any[]\n __groupStack: SVGElement[]\n __currentDefaultPath: string\n __currentPosition: { x?: number; y?: number }\n __transformMatrix: DOMMatrix\n __transformMatrixStack?: DOMMatrix[]\n // parsed fonts keyed by `font` string; each parse costs a DOM element and a\n // CSS parse, and exports ask per glyph\n __fontCache = new Map<string, CSSStyleDeclaration>()\n\n strokeStyle: any\n fillStyle: any\n lineWidth: any\n font: any\n textAlign: any\n textBaseline: any\n lineDash: any\n\n constructor(width: number, height: number, options: ContextOptions = {}) {\n this.width = width\n this.height = height\n this.canvas = this\n this.__document = options.document || document\n\n if (options.ctx) {\n this.__ctx = options.ctx\n } else {\n this.__canvas = this.__document.createElement('canvas')\n this.__ctx = this.__canvas.getContext('2d')!\n }\n\n this.__setDefaultStyles()\n this.__styleStack = [this.__getStyleState()]\n this.__groupStack = []\n\n this.__root = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg',\n )\n this.__root.setAttribute('version', '1.1')\n this.__root.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n this.__root.setAttribute('width', String(width))\n this.__root.setAttribute('height', String(height))\n\n this.__currentElement = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'g',\n )\n this.__root.appendChild(this.__currentElement)\n\n this.__currentDefaultPath = ''\n this.__currentPosition = {}\n this.__transformMatrix = new DOMMatrix()\n\n this.resetTransform()\n }\n\n __createElement(\n elementName: string,\n properties: Record<string, any> = {},\n resetFill?: boolean,\n ): SVGElement {\n const element = this.__document.createElementNS(\n 'http://www.w3.org/2000/svg',\n elementName,\n )\n if (resetFill) {\n // placeholders: fill()/stroke() overwrite their own attribute, and\n // __applyStyleToCurrentElement drops the other when it is the svg default\n element.setAttribute('fill', 'none')\n element.setAttribute('stroke', 'none')\n }\n for (const key of Object.keys(properties)) {\n // __applyText passes optional attributes through unconditionally; skipping\n // unset ones keeps an invalid text-decoration=\"undefined\" (~28 bytes) off\n // every glyph\n const value = properties[key]\n if (value !== undefined && value !== null) {\n element.setAttribute(key, value)\n }\n }\n return element\n }\n\n __setDefaultStyles() {\n for (const key of Object.keys(STYLES)) {\n ;(this as any)[key] = STYLES[key].canvas\n }\n }\n\n __applyStyleState(styleState: Record<string, any>) {\n for (const key of Object.keys(styleState)) {\n ;(this as any)[key] = styleState[key]\n }\n }\n\n __getStyleState(): Record<string, any> {\n const styleState: Record<string, any> = {}\n for (const key of Object.keys(STYLES)) {\n styleState[key] = (this as any)[key]\n }\n return styleState\n }\n\n /**\n * A pure translation folds into the element's x/y, saving ~35 bytes per\n * glyph. Any other transform, such as a sequence-logo letter's scale, is\n * written as a matrix.\n */\n __applyTransformation(element: SVGElement, matrix?: DOMMatrix) {\n const { a, b, c, d, e, f } = matrix || this.getTransform()\n if (\n a === 1 &&\n b === 0 &&\n c === 0 &&\n d === 1 &&\n element.hasAttribute('x') &&\n element.hasAttribute('y')\n ) {\n if (e !== 0) {\n element.setAttribute('x', String(Number(element.getAttribute('x')) + e))\n }\n if (f !== 0) {\n element.setAttribute('y', String(Number(element.getAttribute('y')) + f))\n }\n return\n }\n element.setAttribute('transform', `matrix(${a} ${b} ${c} ${d} ${e} ${f})`)\n }\n\n __applyStyleToCurrentElement(type: string) {\n const currentElement = this.__currentElement\n\n for (const key of Object.keys(STYLES)) {\n const style = STYLES[key]\n const value = (this as any)[key]\n if (!style.apply?.includes(type) || style.svg === value) {\n continue\n }\n const matches =\n (style.svgAttr === 'stroke' || style.svgAttr === 'fill') &&\n typeof value === 'string' &&\n value.includes('rgba')\n ? rgbaRegex.exec(value)\n : null\n if (matches) {\n // SVG has no rgba(); the alpha goes in the -opacity attribute\n currentElement.setAttribute(\n style.svgAttr,\n `rgb(${matches[1]},${matches[2]},${matches[3]})`,\n )\n currentElement.setAttribute(`${style.svgAttr}-opacity`, matches[4]!)\n } else if (key === 'lineWidth') {\n const scale = this.__getTransformScale()\n currentElement.setAttribute(\n style.svgAttr,\n String(value * Math.max(scale.x, scale.y)),\n )\n } else {\n currentElement.setAttribute(style.svgAttr, value)\n }\n }\n\n // svg defaults stroke to none, so a fill drops stroke=\"none\". Fill defaults\n // to black, so a stroked element keeps fill=\"none\".\n if (type === 'fill' && currentElement.getAttribute('stroke') === 'none') {\n currentElement.removeAttribute('stroke')\n }\n }\n\n __closestGroupOrSvg(node?: SVGElement): SVGElement {\n node = node || this.__currentElement\n if (node.nodeName === 'g' || node.nodeName === 'svg') {\n return node\n }\n return this.__closestGroupOrSvg(node.parentNode as SVGElement)\n }\n\n getSvg(): SVGSVGElement {\n return this.__root\n }\n\n save() {\n const group = this.__createElement('g')\n const parent = this.__closestGroupOrSvg()\n this.__groupStack.push(parent)\n parent.appendChild(group)\n this.__currentElement = group\n this.__styleStack.push(this.__getStyleState())\n if (!this.__transformMatrixStack) {\n this.__transformMatrixStack = []\n }\n this.__transformMatrixStack.push(this.getTransform())\n }\n\n restore() {\n this.__currentElement = this.__groupStack.pop()!\n if (!this.__currentElement) {\n this.__currentElement = this.__root.childNodes[0] as SVGElement\n }\n this.__applyStyleState(this.__styleStack.pop())\n if (this.__transformMatrixStack && this.__transformMatrixStack.length > 0) {\n this.setTransform(this.__transformMatrixStack.pop()!)\n }\n }\n\n beginPath() {\n this.__currentDefaultPath = ''\n this.__currentPosition = {}\n const path = this.__createElement('path', {}, true)\n this.__closestGroupOrSvg().appendChild(path)\n this.__currentElement = path\n }\n\n __applyCurrentDefaultPath() {\n if (this.__currentElement.nodeName === 'path') {\n this.__currentElement.setAttribute('d', this.__currentDefaultPath)\n }\n }\n\n __addPathCommand(command: string) {\n this.__currentDefaultPath += ' '\n this.__currentDefaultPath += command\n }\n\n moveTo(x: number, y: number) {\n if (this.__currentElement.nodeName !== 'path') {\n this.beginPath()\n }\n this.__currentPosition = { x, y }\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(`M ${p.x} ${p.y}`)\n }\n\n closePath() {\n if (this.__currentDefaultPath) {\n this.__addPathCommand('Z')\n }\n }\n\n lineTo(x: number, y: number) {\n this.__currentPosition = { x, y }\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(\n this.__currentDefaultPath.includes('M')\n ? `L ${p.x} ${p.y}`\n : `M ${p.x} ${p.y}`,\n )\n }\n\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n this.__currentPosition = { x, y }\n const cp = this.__matrixTransform(cpx, cpy)\n const p = this.__matrixTransform(x, y)\n this.__addPathCommand(`Q ${cp.x} ${cp.y} ${p.x} ${p.y}`)\n }\n\n // paint-order matters only on an element with both fill and stroke: the\n // collapsed-clade triangle\n __applyPaintOrder(order: string, other: string) {\n const current = this.__currentElement\n if (\n current.nodeName === 'path' &&\n current.hasAttribute(other) &&\n current.getAttribute(other) !== 'none'\n ) {\n current.setAttribute('paint-order', order)\n }\n }\n\n stroke() {\n this.__applyPaintOrder('fill stroke markers', 'fill')\n this.__applyCurrentDefaultPath()\n this.__applyStyleToCurrentElement('stroke')\n }\n\n fill() {\n this.__applyPaintOrder('stroke fill markers', 'stroke')\n this.__applyCurrentDefaultPath()\n this.__applyStyleToCurrentElement('fill')\n }\n\n // A fill covering the whole context paints over what is under it, as on a\n // canvas; it does not clear the drawing.\n fillRect(x: number, y: number, width: number, height: number) {\n const rect = this.__createElement('rect', { x, y, width, height }, true)\n this.__closestGroupOrSvg().appendChild(rect)\n this.__currentElement = rect\n this.__applyTransformation(rect)\n this.__applyStyleToCurrentElement('fill')\n }\n\n strokeRect(x: number, y: number, width: number, height: number) {\n const rect = this.__createElement('rect', { x, y, width, height }, true)\n this.__closestGroupOrSvg().appendChild(rect)\n this.__currentElement = rect\n this.__applyTransformation(rect)\n this.__applyStyleToCurrentElement('stroke')\n }\n\n __parsedFont() {\n const hit = this.__fontCache.get(this.font)\n if (hit) {\n return hit\n }\n const el = document.createElement('span')\n el.setAttribute('style', `font:${this.font}`)\n this.__fontCache.set(this.font, el.style)\n return el.style\n }\n\n fillText(text: string, x: number, y: number) {\n const style = this.__parsedFont()\n const parent = this.__closestGroupOrSvg()\n const textElement = this.__createElement(\n 'text',\n {\n 'font-family': style.fontFamily,\n 'font-size': style.fontSize,\n 'font-style': omitDefault('font-style', style.fontStyle),\n 'font-weight': omitDefault('font-weight', style.fontWeight),\n x,\n y,\n 'text-anchor': getTextAnchor(this.textAlign),\n 'dominant-baseline': omitDefault(\n 'dominant-baseline',\n getDominantBaseline(this.textBaseline),\n ),\n },\n true,\n )\n\n textElement.appendChild(this.__document.createTextNode(text))\n this.__currentElement = textElement\n this.__applyTransformation(textElement)\n this.__applyStyleToCurrentElement('fill')\n parent.appendChild(textElement)\n }\n\n measureText(text: string): TextMetrics {\n this.__ctx.font = this.font\n return this.__ctx.measureText(text)\n }\n\n arc(\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n counterClockwise?: boolean,\n ) {\n if (startAngle === endAngle) {\n return\n }\n startAngle = startAngle % (2 * Math.PI)\n endAngle = endAngle % (2 * Math.PI)\n if (startAngle === endAngle) {\n endAngle =\n (endAngle + 2 * Math.PI - 0.001 * (counterClockwise ? -1 : 1)) %\n (2 * Math.PI)\n }\n const endX = x + radius * Math.cos(endAngle)\n const endY = y + radius * Math.sin(endAngle)\n const startX = x + radius * Math.cos(startAngle)\n const startY = y + radius * Math.sin(startAngle)\n const sweepFlag = counterClockwise ? 0 : 1\n let diff = endAngle - startAngle\n if (diff < 0) {\n diff += 2 * Math.PI\n }\n const largeArcFlag = counterClockwise\n ? diff > Math.PI\n ? 0\n : 1\n : diff > Math.PI\n ? 1\n : 0\n\n const { x: scaleX, y: scaleY } = this.__getTransformScale()\n const end = this.__matrixTransform(endX, endY)\n\n this.lineTo(startX, startY)\n this.__addPathCommand(\n `A ${radius * scaleX} ${radius * scaleY} 0 ${largeArcFlag} ${sweepFlag} ${end.x} ${end.y}`,\n )\n this.__currentPosition = { x: endX, y: endY }\n }\n\n setLineDash(dashArray: number[]) {\n this.lineDash = dashArray.length > 0 ? dashArray.join(',') : null\n }\n\n setTransform(\n a: number | DOMMatrix,\n b?: number,\n c?: number,\n d?: number,\n e?: number,\n f?: number,\n ) {\n this.__transformMatrix =\n a instanceof DOMMatrix\n ? new DOMMatrix([a.a, a.b, a.c, a.d, a.e, a.f])\n : new DOMMatrix([a, b!, c!, d!, e!, f!])\n }\n\n getTransform(): DOMMatrix {\n const { a, b, c, d, e, f } = this.__transformMatrix\n return new DOMMatrix([a, b, c, d, e, f])\n }\n\n resetTransform() {\n this.setTransform(1, 0, 0, 1, 0, 0)\n }\n\n scale(x: number, y?: number) {\n if (y === undefined) {\n y = x\n }\n if (isNaN(x) || isNaN(y) || !isFinite(x) || !isFinite(y)) {\n return\n }\n this.setTransform(this.getTransform().scale(x, y))\n }\n\n translate(x: number, y: number) {\n this.setTransform(this.getTransform().translate(x, y))\n }\n\n __matrixTransform(x: number, y: number): DOMPoint {\n return new DOMPoint(x, y).matrixTransform(this.__transformMatrix)\n }\n\n __getTransformScale(): { x: number; y: number } {\n return {\n x: Math.hypot(this.__transformMatrix.a, this.__transformMatrix.b),\n y: Math.hypot(this.__transformMatrix.c, this.__transformMatrix.d),\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["getTextAnchor", "textAlign", "mapping", "getDominantBaseline", "textBaseline", "TEXT_ATTR_DEFAULTS", "omitDefault", "attr", "value", "STYLES", "rgbaRegex", "Context", "width", "height", "options", "elementName", "properties", "resetFill", "element", "key", "styleState", "matrix", "a", "b", "c", "d", "e", "f", "type", "currentElement", "style", "matches", "scale", "node", "group", "parent", "path", "command", "x", "y", "p", "cpx", "cpy", "cp", "order", "other", "current", "rect", "hit", "el", "text", "textElement", "radius", "startAngle", "endAngle", "counterClockwise", "endX", "endY", "startX", "startY", "sweepFlag", "diff", "largeArcFlag", "scaleX", "scaleY", "end", "dashArray"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a as d,b as e,c as f,d as g,e as h,f as i,g as j,h as k,i as l,j as m,k as n}from"./chunk-FFHB7WP7.js";import"./chunk-JDQUBCHM.js";import"./chunk-5OSSOQH4.js";import"./chunk-FCWXYIFC.js";import"./chunk-AQ2THRTR.js";import"./chunk-XXCNVFGP.js";import"./chunk-KSCGTF4R.js";import{K as b,Z as c}from"./chunk-ASUKJX5J.js";import{G as a}from"./chunk-ZQSWX57C.js";import"./chunk-73KAPCJ2.js";import"./chunk-35FWLG3N.js";import"./chunk-CVLB4VFP.js";import"./chunk-DNFD5II2.js";import"./chunk-BX4Z274Q.js";import"./chunk-J6KYLXRD.js";import"./chunk-FY3BTKY4.js";export{b as CHAR_WIDTH_RATIO,h as MSAModelF,g as MSAView,k as MSAViewer,m as defineMsaElement,f as expandSpec,d as installHeadlessRenderEnv,a as maxNeighborJoiningRows,l as mount,c as renderToSvg,e as residueLabel,i as resolveTheme,n as useMsaSvgFigure,j as viewerSnapshot};
2
+ //# sourceMappingURL=dist-GZKCGB2N.js.map
@@ -1,4 +1,4 @@
1
- import{b as tt,e as nt}from"./chunk-ZCT7RD24.js";import{f as et}from"./chunk-NMYD2GWF.js";import"./chunk-F3EC6OCO.js";import{a as MA,b as Ue,c as uA,d as FA,e as _e,f as xA,g as qe,h as Ye,i as vo}from"./chunk-JFL3LJPO.js";import{a as te}from"./chunk-FCWXYIFC.js";import{A as oA,B as $e,C as At,D as rA,b as Te,j as RA,l as Lo,m as Oe,n as tA,o as nA,p as Xe,t as Ve,u as je,w as We,x as lA,y as JA,z as ze}from"./chunk-NI3VGKQP.js";import{b as He,d as T,e as Pe,f as R,j as Ke,p as Ze}from"./chunk-F726IWCW.js";import{c as Uo}from"./chunk-YUKJI2AH.js";import"./chunk-QQ5LZUIO.js";import{a as fA}from"./chunk-IBBQUV2I.js";import{a as Go}from"./chunk-2IWD4OO4.js";import{a as GA}from"./chunk-QUWPHTZQ.js";import"./chunk-73KAPCJ2.js";import"./chunk-GIHMPOCO.js";import"./chunk-CVLB4VFP.js";import"./chunk-DNFD5II2.js";import"./chunk-BX4Z274Q.js";import"./chunk-J6KYLXRD.js";import{b as x}from"./chunk-FY3BTKY4.js";var Ro=x(vo()),Jo=x(fA()),b=x(te()),Ae=x(GA());var Bo=x(fA()),SA=x(te()),bA=x(GA());var oe="ARNDCQEGHILKMFPSTWYVBZX*",_o=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],it=oe.length,qo=Int8Array.from(_o.flat()),at=oe.indexOf("X"),ne=new Uint8Array(128).fill(at);for(let A=0;A<it;A++){let t=oe[A];ne[t.charCodeAt(0)]=A,ne[t.toLowerCase().charCodeAt(0)]=A}function ot(A){let t=new Uint8Array(A.length);for(let e=0;e<A.length;e++){let n=A.charCodeAt(e);t[e]=n<128?ne[n]:at}return t}var iA=11,vA=1,j=-1e6,W=0,aA=1,hA=2;function Yo(A,t){let e=ot(A),n=ot(t),r=e.length,o=n.length,i=o+1,s=new Uint8Array((r+1)*i),I=new Int32Array(i),a=new Int32Array(i),g=new Int32Array(i),d=new Int32Array(i),Q=new Int32Array(i),c=new Int32Array(i);I[0]=0,a[0]=j,g[0]=j;for(let w=1;w<=o;w++)I[w]=j,a[w]=j,g[w]=0;let E=j,m=0,u=0,l=W;for(let w=1;w<=r;w++){d[0]=j,Q[0]=0,c[0]=j;let D=e[w-1]*it,F=w*i;for(let N=1;N<=o;N++){let L=qo[D+n[N-1]],U=I[N-1],eA=W;a[N-1]>U&&(U=a[N-1],eA=aA),g[N-1]>U&&(U=g[N-1],eA=hA),d[N]=U+L;let _=I[N]-iA,K=W;a[N]-vA>_&&(_=a[N]-vA,K=aA),g[N]-iA>_&&(_=g[N]-iA,K=hA),Q[N]=_;let dA=d[N-1]-iA,ee=W;c[N-1]-vA>dA&&(dA=c[N-1]-vA,ee=hA),Q[N-1]-iA>dA&&(dA=Q[N-1]-iA,ee=aA),c[N]=dA,s[F+N]=eA|K<<2|ee<<4}for(let[N,L]of[[W,d],[aA,Q],[hA,c]])L[o]>E&&(E=L[o],m=w,u=o,l=N);if(w===r)for(let N=0;N<o;N++)for(let[L,U]of[[W,d],[aA,Q],[hA,c]])U[N]>E&&(E=U[N],m=r,u=N,l=L);[I,d]=[d,I],[a,Q]=[Q,a],[g,c]=[c,g]}let p=Array.from({length:r}).fill("-"),h=Array.from({length:r+1}).fill("");h[r]=t.slice(u);let B=m,C=u,y=l,f=[],k=w=>{f.length&&(h[w]=f.reverse().join("")+h[w],f=[])};for(;B>0&&C>0;){let w=B*i+C;y===W?(k(B),p[B-1]=t[C-1],y=s[w]&3,B--,C--):y===aA?(k(B),y=s[w]>>2&3,B--):(f.push(t[C-1]),y=s[w]>>4,C--)}return k(B),h[0]=t.slice(0,C)+h[0],{matched:p,inserts:h}}function Ho(A,t){let e=A.sequence.length,n=new Array(e+1).fill(0);for(let{alignment:o}of t)for(let i=0;i<=e;i++)n[i]=Math.max(n[i],o.inserts[i].length);let r=(o,i)=>{let s=[];for(let I=0;I<=e;I++)s.push(i[I].padEnd(n[I],"-")),I<e&&s.push(o[I]);return s.join("")};return[{name:A.name,sequence:r(A.sequence.split(""),Array.from({length:e+1}).fill(""))},...t.map(({name:o,alignment:i})=>({name:o,sequence:r(i.matched,i.inserts)}))]}var rt=5e7,Po=5e6;function re(A,t,e){if(t*e>rt)throw new Error(`${A} (${t} residues) against the ${e}-residue query is too large to align in the browser, which stops at ${rt/1e6}M residue pairs per sequence. Choose an EBI aligner such as Clustal Omega instead.`)}async function st({query:A,targets:t,onProgress:e,signal:n}){for(let i of t)re(i.name,i.sequence.length,A.sequence.length);let r=[],o=1/0;for(let i of t)o>=Po&&(e?.(`Aligning ${r.length+1} of ${t.length} sequences in the browser...`),await Pe(0,n),o=0),r.push({name:i.name,alignment:Yo(A.sequence,i.sequence)}),o+=A.sequence.length*i.sequence.length;return Ho(A,r).map(i=>`>${i.name}
1
+ import{b as tt,e as nt}from"./chunk-QQKPT6EL.js";import{e as et}from"./chunk-FFHB7WP7.js";import"./chunk-JDQUBCHM.js";import"./chunk-5OSSOQH4.js";import{a as MA,b as Ue,c as uA,d as FA,e as _e,f as xA,g as qe,h as Ye,i as vo}from"./chunk-JFL3LJPO.js";import{a as te}from"./chunk-FCWXYIFC.js";import{A as oA,B as $e,C as At,D as rA,b as Te,j as RA,l as Lo,m as Oe,n as tA,o as nA,p as Xe,t as Ve,u as je,w as We,x as lA,y as JA,z as ze}from"./chunk-2XCUSA22.js";import{b as He,d as T,e as Pe,f as R,j as Ke,p as Ze}from"./chunk-F726IWCW.js";import{c as Uo}from"./chunk-AQ2THRTR.js";import"./chunk-XXCNVFGP.js";import{a as fA}from"./chunk-KSCGTF4R.js";import{a as Go}from"./chunk-2IWD4OO4.js";import{a as GA}from"./chunk-ASUKJX5J.js";import"./chunk-ZQSWX57C.js";import"./chunk-73KAPCJ2.js";import"./chunk-35FWLG3N.js";import"./chunk-CVLB4VFP.js";import"./chunk-DNFD5II2.js";import"./chunk-BX4Z274Q.js";import"./chunk-J6KYLXRD.js";import{b as x}from"./chunk-FY3BTKY4.js";var Ro=x(vo()),Jo=x(fA()),b=x(te()),Ae=x(GA());var Bo=x(fA()),SA=x(te()),bA=x(GA());var oe="ARNDCQEGHILKMFPSTWYVBZX*",_o=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],it=oe.length,qo=Int8Array.from(_o.flat()),at=oe.indexOf("X"),ne=new Uint8Array(128).fill(at);for(let A=0;A<it;A++){let t=oe[A];ne[t.charCodeAt(0)]=A,ne[t.toLowerCase().charCodeAt(0)]=A}function ot(A){let t=new Uint8Array(A.length);for(let e=0;e<A.length;e++){let n=A.charCodeAt(e);t[e]=n<128?ne[n]:at}return t}var iA=11,vA=1,j=-1e6,W=0,aA=1,hA=2;function Yo(A,t){let e=ot(A),n=ot(t),r=e.length,o=n.length,i=o+1,s=new Uint8Array((r+1)*i),I=new Int32Array(i),a=new Int32Array(i),g=new Int32Array(i),d=new Int32Array(i),Q=new Int32Array(i),c=new Int32Array(i);I[0]=0,a[0]=j,g[0]=j;for(let w=1;w<=o;w++)I[w]=j,a[w]=j,g[w]=0;let E=j,m=0,u=0,l=W;for(let w=1;w<=r;w++){d[0]=j,Q[0]=0,c[0]=j;let D=e[w-1]*it,F=w*i;for(let N=1;N<=o;N++){let L=qo[D+n[N-1]],U=I[N-1],eA=W;a[N-1]>U&&(U=a[N-1],eA=aA),g[N-1]>U&&(U=g[N-1],eA=hA),d[N]=U+L;let _=I[N]-iA,K=W;a[N]-vA>_&&(_=a[N]-vA,K=aA),g[N]-iA>_&&(_=g[N]-iA,K=hA),Q[N]=_;let dA=d[N-1]-iA,ee=W;c[N-1]-vA>dA&&(dA=c[N-1]-vA,ee=hA),Q[N-1]-iA>dA&&(dA=Q[N-1]-iA,ee=aA),c[N]=dA,s[F+N]=eA|K<<2|ee<<4}for(let[N,L]of[[W,d],[aA,Q],[hA,c]])L[o]>E&&(E=L[o],m=w,u=o,l=N);if(w===r)for(let N=0;N<o;N++)for(let[L,U]of[[W,d],[aA,Q],[hA,c]])U[N]>E&&(E=U[N],m=r,u=N,l=L);[I,d]=[d,I],[a,Q]=[Q,a],[g,c]=[c,g]}let p=Array.from({length:r}).fill("-"),h=Array.from({length:r+1}).fill("");h[r]=t.slice(u);let B=m,C=u,y=l,f=[],k=w=>{f.length&&(h[w]=f.reverse().join("")+h[w],f=[])};for(;B>0&&C>0;){let w=B*i+C;y===W?(k(B),p[B-1]=t[C-1],y=s[w]&3,B--,C--):y===aA?(k(B),y=s[w]>>2&3,B--):(f.push(t[C-1]),y=s[w]>>4,C--)}return k(B),h[0]=t.slice(0,C)+h[0],{matched:p,inserts:h}}function Ho(A,t){let e=A.sequence.length,n=new Array(e+1).fill(0);for(let{alignment:o}of t)for(let i=0;i<=e;i++)n[i]=Math.max(n[i],o.inserts[i].length);let r=(o,i)=>{let s=[];for(let I=0;I<=e;I++)s.push(i[I].padEnd(n[I],"-")),I<e&&s.push(o[I]);return s.join("")};return[{name:A.name,sequence:r(A.sequence.split(""),Array.from({length:e+1}).fill(""))},...t.map(({name:o,alignment:i})=>({name:o,sequence:r(i.matched,i.inserts)}))]}var rt=5e7,Po=5e6;function re(A,t,e){if(t*e>rt)throw new Error(`${A} (${t} residues) against the ${e}-residue query is too large to align in the browser, which stops at ${rt/1e6}M residue pairs per sequence. Choose an EBI aligner such as Clustal Omega instead.`)}async function st({query:A,targets:t,onProgress:e,signal:n}){for(let i of t)re(i.name,i.sequence.length,A.sequence.length);let r=[],o=1/0;for(let i of t)o>=Po&&(e?.(`Aligning ${r.length+1} of ${t.length} sequences in the browser...`),await Pe(0,n),o=0),r.push({name:i.name,alignment:Yo(A.sequence,i.sequence)}),o+=A.sequence.length*i.sequence.length;return Ho(A,r).map(i=>`>${i.name}
2
2
  ${i.sequence}`).join(`
3
3
  `)}function gt(A){let t=[];for(let e of A.split(">")){let[n,...r]=e.split(`
4
4
  `),o=n?.trim().split(/\s+/)[0];o&&t.push({name:o,sequence:r.join("").replaceAll(/[\s*-]/g,"")})}return t}var It={blastp:tt,phmmer:nt};var Ko={clustalo:{params:{},msaResult:"aln-clustal_num",treeResult:"phylotree"},muscle:{params:{format:"clw",tree:"tree1"},msaResult:"fa",treeResult:"phylotree"},kalign:{params:{stype:"protein"},msaResult:"fa",treeResult:"phylotree"},mafft:{params:{stype:"protein"},msaResult:"fa",treeResult:"phylotree"}};async function LA({algorithm:A,sequence:t,onProgress:e,signal:n}){if(A==="browser"){let[I,...a]=gt(t);if(!I)throw new Error("Nothing to align");return{msa:await st({query:I,targets:a,onProgress:e,signal:n}),tree:""}}let r=Ko[A],o=await Ke({tool:A,label:`${A} MSA`,params:{...r.params,sequence:t},onProgress:e,signal:n}),[i,s]=await Promise.all([o.result(r.msaResult),o.result(r.treeResult)]);return{msa:i,tree:s}}function To(A,t){let e=A.sciname.replaceAll(" ","_");if(A.taxid&&t?.has(A.taxid)){let n=t.get(A.taxid);n.commonName&&(e=n.commonName.split(" ").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join("_"))}return`${A.accession}-${e}`}function Oo(A,t){let e={},n=A.taxid?t.get(A.taxid):void 0;return n?.sciname&&(e["Scientific name"]=n.sciname),n?.commonName&&(e["Common name"]=n.commonName),A.accession&&(e.Accession=A.accession),A.id&&(e.ID=A.id),A.title&&(e.Description=A.title),e}function Zo(A,t){let e=A.map(o=>To(o,t)),n=new Map;for(let o of e)n.set(o,(n.get(o)??0)+1);let r=new Set;return e.map((o,i)=>{let s=n.get(o)>1?`${o}_${A[i].range??i+1}`:o;for(;r.has(s);)s=`${s}_${i+1}`;return r.add(s),s})}function ct({hits:A,query:t,queryRow:e,taxonomyInfo:n,querySeqName:r="QUERY"}){let o={},i=Zo(A,n),s=A.map((I,a)=>{let g=i[a];return o[g]=Oo(I,n),`>${g}
@@ -8,5 +8,5 @@ ${e??t}`,...s].join(`
8
8
  ${h}`,...l.map(f=>`>${f.label}
9
9
  ${f.sequence}`)].join(`
10
10
  `),onProgress:d,signal:c}),treeMetadata:JSON.stringify(C),warnings:p?[p]:[]}}async function Br({taxId:A,geneCandidates:t,onProgress:e,signal:n,...r}){e("Resolving gene at NCBI...");let o=await ze(t,A,n);if(!o)throw new Error(`Could not resolve any of ${t.join(", ")} to an NCBI gene in taxon ${A}. Try the NCBI BLAST tab, which needs no gene identifier.`);let i=await ur(o.geneId,n),s=await At({geneId:o.geneId,onProgress:e,signal:n,...r});return{geneId:o.geneId,representative:i,rows:s}}var Cr={ncbi:"NCBI",panther:"PANTHER",uniref:"UniProt"};async function Er({geneCandidates:A,identity:t,referenceProteomesOnly:e,...n}){let r=await ht({candidates:A,identity:t,referenceProteomesOnly:e,...n});return{geneId:r.query.id,representative:{accession:r.query.accession,sequence:r.query.sequence},rows:r.rows,warning:r.warning}}async function dr({geneCandidates:A,...t}){let e=await yt({candidates:A,...t});return{geneId:e.query?.geneRef??e.matched,representative:e.query,rows:e.rows}}async function fr(A,t,e){let n;try{let r=(await rA([A],e)).get(A);n=r?.commonName??r?.sciname}catch(r){if(R(r))throw r;console.warn("[msaview-orthologs] taxonomy name lookup failed:",r)}return oA([...t.map(r=>r.label),`${n??"query"}_query`]).at(-1)}async function ur(A,t){try{return await $e(A,t)}catch(e){if(R(e))throw e;console.warn("[msaview-orthologs] query protein lookup failed:",e);return}}function lr(A,t,e,n){let r={"Gene ID":t},o=FA(A.orthologParams?.selectedTranscript);return o&&(r.Transcript=o),n?.sequence===e&&(r.Accession=n.accession),r}function hr(A){let t={"Scientific name":A.scientificName,Accession:A.protein,"Gene ID":A.geneId};return A.commonName&&(t["Common name"]=A.commonName),t}function _A(A,t=0){let e=A.getUint32(t,!0);return A.getUint32(t+4,!0)*4294967296+e}var Ie=16,mr={compressed:new Float64Array(0),uncompressed:new Float64Array(0)};function kt(A,t){let e=new Float64Array(t+1),n=new Float64Array(t+1),r=new DataView(A.buffer,A.byteOffset,A.byteLength);for(let o=0;o<t;o+=1){let i=o*Ie;e[o+1]=_A(r,i),n[o+1]=_A(r,i+8)}return{compressed:e,uncompressed:n}}function bt(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<=t?e=r+1:n=r}return e}var mA=class{filehandle;index;constructor({filehandle:t}){this.filehandle=t}_getIndex(){return this.index||(this.index=this._readIndex().catch(t=>{throw this.index=void 0,t})),this.index}async _readIndex(){let t=await this.filehandle.read(8,0),e=_A(new DataView(t.buffer,t.byteOffset,t.byteLength));if(e===0)return kt(new Uint8Array(0),0);if(e>Number.MAX_SAFE_INTEGER/Ie)throw new TypeError("integer overflow");let n=await this.filehandle.read(Ie*e,8);return kt(n,e)}async getRelevantBlocksForRead(t,e){if(t===0)return{...mr,nextCompressedPosition:void 0};let{compressed:n,uncompressed:r}=await this._getIndex(),o=bt(r,e)-1,i=bt(r,e+t-1);return{compressed:n.subarray(o,i),uncompressed:r.subarray(o,i),nextCompressedPosition:i<n.length?n[i]:void 0}}};var ce=0;var Qe=2;var wA=4;var O=0,pA=1,St=2;var Mt=-5;function wr(A,t){return Object.prototype.hasOwnProperty.call(A,t)}function Ft(A){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var e=t.shift();if(e){if(typeof e!="object")throw new TypeError(e+"must be non-object");for(var n in e)wr(e,n)&&(A[n]=e[n])}}return A}function YA(A,t){return A.length===t?A:A.subarray?A.subarray(0,t):(A.length=t,A)}var DA={arraySet:function(A,t,e,n,r){if(t.subarray&&A.subarray){A.set(t.subarray(e,e+n),r);return}for(var o=0;o<n;o++)A[r+o]=t[e+o]},flattenChunks:function(A){var t,e,n,r,o,i;for(n=0,t=0,e=A.length;t<e;t++)n+=A[t].length;for(i=new Uint8Array(n),r=0,t=0,e=A.length;t<e;t++)o=A[t],i.set(o,r),r+=o.length;return i},Buf8:function(A){return new Uint8Array(A)},Buf16:function(A){return new Uint16Array(A)},Buf32:function(A){return new Int32Array(A)}},yA={arraySet:function(A,t,e,n,r){for(var o=0;o<n;o++)A[r+o]=t[e+o]},flattenChunks:function(A){return[].concat.apply([],A)},Buf8:function(A){return new Array(A)},Buf16:function(A){return new Array(A)},Buf32:function(A){return new Array(A)}},gA=()=>{let A=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";return gA=()=>A,A},q=(A,t,e,n,r)=>(q=gA()?DA.arraySet:yA.arraySet,q(A,t,e,n,r)),qA=A=>(qA=gA()?DA.flattenChunks:yA.flattenChunks,qA(A)),Y=A=>(Y=gA()?DA.Buf8:yA.Buf8,Y(A)),Z=A=>(Z=gA()?DA.Buf16:yA.Buf16,Z(A)),z=A=>(z=gA()?DA.Buf32:yA.Buf32,z(A));var xt=function(){let A=!0;try{String.fromCharCode.apply(null,[0])}catch{A=!1}return xt=()=>A,A},Rt=function(){let A=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{A=!1}return Rt=()=>A,A},Be=function(A){for(var t=Y(256),e=0;e<256;e++)t[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;return t[254]=t[254]=1,Be=n=>t[n],t[A]};function Ce(A){var t,e,n,r,o,i=A.length,s=0;for(r=0;r<i;r++)e=A.charCodeAt(r),(e&64512)===55296&&r+1<i&&(n=A.charCodeAt(r+1),(n&64512)===56320&&(e=65536+(e-55296<<10)+(n-56320),r++)),s+=e<128?1:e<2048?2:e<65536?3:4;for(t=new Uint8Array(s),o=0,r=0;o<s;r++)e=A.charCodeAt(r),(e&64512)===55296&&r+1<i&&(n=A.charCodeAt(r+1),(n&64512)===56320&&(e=65536+(e-55296<<10)+(n-56320),r++)),e<128?t[o++]=e:e<2048?(t[o++]=192|e>>>6,t[o++]=128|e&63):e<65536?(t[o++]=224|e>>>12,t[o++]=128|e>>>6&63,t[o++]=128|e&63):(t[o++]=240|e>>>18,t[o++]=128|e>>>12&63,t[o++]=128|e>>>6&63,t[o++]=128|e&63);return t}function pr(A,t){if(t<65534&&(A.subarray&&Rt()||!A.subarray&&xt()))return String.fromCharCode.apply(null,YA(A,t));for(var e="",n=0;n<t;n++)e+=String.fromCharCode(A[n]);return e}function Jt(A){for(var t=new Uint8Array(A.length),e=0,n=t.length;e<n;e++)t[e]=A.charCodeAt(e);return t}function Gt(A,t){var e,n,r,o,i=t||A.length,s=new Array(i*2);for(n=0,e=0;e<i;){if(r=A[e++],r<128){s[n++]=r;continue}if(o=Be(r),o>4){s[n++]=65533,e+=o-1;continue}for(r&=o===2?31:o===3?15:7;o>1&&e<i;)r=r<<6|A[e++]&63,o--;if(o>1){s[n++]=65533;continue}r<65536?s[n++]=r:(r-=65536,s[n++]=55296|r>>10&1023,s[n++]=56320|r&1023)}return pr(s,n)}function vt(A,t){var e;for(t=t||A.length,t>A.length&&(t=A.length),e=t-1;e>=0&&(A[e]&192)===128;)e--;return e<0||e===0?t:e+Be(A[e])>t?e:t}function Ee(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}function NA(A,t,e,n){for(var r=A&65535|0,o=A>>>16&65535|0,i=0;e!==0;){i=e>2e3?2e3:e,e-=i;do r=r+t[n++]|0,o=o+r|0;while(--i);r%=65521,o%=65521}return r|o<<16|0}function Dr(){for(var A,t=[],e=0;e<256;e++){A=e;for(var n=0;n<8;n++)A=A&1?3988292384^A>>>1:A>>>1;t[e]=A}return t}var Lt=function(){let A=Dr();return Lt=()=>A,A};function G(A,t,e,n){var r=Lt(),o=n+e;A^=-1;for(var i=n;i<o;i++)A=A>>>8^r[(A^t[i])&255];return A^-1}var HA=30,yr=12;function de(A,t){var e,n,r,o,i,s,I,a,g,d,Q,c,E,m,u,l,p,h,B,C,y,f,k,w,D;e=A.state,n=A.next_in,w=A.input,r=n+(A.avail_in-5),o=A.next_out,D=A.output,i=o-(t-A.avail_out),s=o+(A.avail_out-257),I=e.dmax,a=e.wsize,g=e.whave,d=e.wnext,Q=e.window,c=e.hold,E=e.bits,m=e.lencode,u=e.distcode,l=(1<<e.lenbits)-1,p=(1<<e.distbits)-1;A:do{E<15&&(c+=w[n++]<<E,E+=8,c+=w[n++]<<E,E+=8),h=m[c&l];e:for(;;){if(B=h>>>24,c>>>=B,E-=B,B=h>>>16&255,B===0)D[o++]=h&65535;else if(B&16){C=h&65535,B&=15,B&&(E<B&&(c+=w[n++]<<E,E+=8),C+=c&(1<<B)-1,c>>>=B,E-=B),E<15&&(c+=w[n++]<<E,E+=8,c+=w[n++]<<E,E+=8),h=u[c&p];t:for(;;){if(B=h>>>24,c>>>=B,E-=B,B=h>>>16&255,B&16){if(y=h&65535,B&=15,E<B&&(c+=w[n++]<<E,E+=8,E<B&&(c+=w[n++]<<E,E+=8)),y+=c&(1<<B)-1,y>I){A.msg="invalid distance too far back",e.mode=HA;break A}if(c>>>=B,E-=B,B=o-i,y>B){if(B=y-B,B>g&&e.sane){A.msg="invalid distance too far back",e.mode=HA;break A}if(f=0,k=Q,d===0){if(f+=a-B,B<C){C-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}}else if(d<B){if(f+=a+d-B,B-=d,B<C){C-=B;do D[o++]=Q[f++];while(--B);if(f=0,d<C){B=d,C-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}}}else if(f+=d-B,B<C){C-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}for(;C>2;)D[o++]=k[f++],D[o++]=k[f++],D[o++]=k[f++],C-=3;C&&(D[o++]=k[f++],C>1&&(D[o++]=k[f++]))}else{f=o-y;do D[o++]=D[f++],D[o++]=D[f++],D[o++]=D[f++],C-=3;while(C>2);C&&(D[o++]=D[f++],C>1&&(D[o++]=D[f++]))}}else if((B&64)===0){h=u[(h&65535)+(c&(1<<B)-1)];continue t}else{A.msg="invalid distance code",e.mode=HA;break A}break}}else if((B&64)===0){h=m[(h&65535)+(c&(1<<B)-1)];continue e}else if(B&32){e.mode=yr;break A}else{A.msg="invalid literal/length code",e.mode=HA;break A}break}}while(n<r&&o<s);C=E>>3,n-=C,E-=C<<3,c&=(1<<E)-1,A.next_in=n,A.next_out=o,A.avail_in=n<r?5+(r-n):5-(n-r),A.avail_out=o<s?257+(s-o):257-(o-s),e.hold=c,e.bits=E}var IA=15,Ut=852,_t=592,qt=0,fe=1,Yt=2,Nr=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],kr=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],br=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],Sr=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function $(A,t,e,n,r,o,i,s){var I=s.bits,a=0,g=0,d=0,Q=0,c=0,E=0,m=0,u=0,l=0,p=0,h,B,C,y,f,k=null,w=0,D,F=Z(IA+1),N=Z(IA+1),L=null,U=0,eA,_,K;for(a=0;a<=IA;a++)F[a]=0;for(g=0;g<n;g++)F[t[e+g]]++;for(c=I,Q=IA;Q>=1&&F[Q]===0;Q--);if(c>Q&&(c=Q),Q===0)return r[o++]=1<<24|64<<16|0,r[o++]=1<<24|64<<16|0,s.bits=1,0;for(d=1;d<Q&&F[d]===0;d++);for(c<d&&(c=d),u=1,a=1;a<=IA;a++)if(u<<=1,u-=F[a],u<0)return-1;if(u>0&&(A===qt||Q!==1))return-1;for(N[1]=0,a=1;a<IA;a++)N[a+1]=N[a]+F[a];for(g=0;g<n;g++)t[e+g]!==0&&(i[N[t[e+g]]++]=g);if(A===qt?(k=L=i,D=19):A===fe?(k=Nr,w-=257,L=kr,U-=257,D=256):(k=br,L=Sr,D=-1),p=0,g=0,a=d,f=o,E=c,m=0,C=-1,l=1<<c,y=l-1,A===fe&&l>Ut||A===Yt&&l>_t)return 1;for(;;){eA=a-m,i[g]<D?(_=0,K=i[g]):i[g]>D?(_=L[U+i[g]],K=k[w+i[g]]):(_=96,K=0),h=1<<a-m,B=1<<E,d=B;do B-=h,r[f+(p>>m)+B]=eA<<24|_<<16|K|0;while(B!==0);for(h=1<<a-1;p&h;)h>>=1;if(h!==0?(p&=h-1,p+=h):p=0,g++,--F[a]===0){if(a===Q)break;a=t[e+i[g]]}if(a>c&&(p&y)!==C){for(m===0&&(m=c),f+=d,E=a-m,u=1<<E;E+m<Q&&(u-=F[E+m],!(u<=0));)E++,u<<=1;if(l+=1<<E,A===fe&&l>Ut||A===Yt&&l>_t)return 1;C=p&y,r[C]=c<<24|E<<16|f-o|0}}return p!==0&&(r[f+p]=a-m<<24|64<<16|0),s.bits=c,0}var Mr=0,Cn=1,En=2,Ht=4,Fr=5,PA=6,AA=0,xr=1,Rr=2,v=-2,dn=-3,pe=-4,Jr=-5,Pt=8,fn=1,Kt=2,Tt=3,Ot=4,Zt=5,Xt=6,Vt=7,jt=8,Wt=9,zt=10,OA=11,H=12,ue=13,$t=14,le=15,An=16,en=17,tn=18,nn=19,KA=20,TA=21,on=22,rn=23,an=24,sn=25,gn=26,he=27,In=28,cn=29,M=30,De=31,Gr=32,vr=852,Lr=592;function Qn(A){return(A>>>24&255)+(A>>>8&65280)+((A&65280)<<8)+((A&255)<<24)}function Ur(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=Z(320),this.work=Z(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function _r(A){var t;return!A||!A.state?v:(t=A.state,A.total_in=A.total_out=t.total=0,A.msg="",t.wrap&&(A.adler=t.wrap&1),t.mode=fn,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=z(vr),t.distcode=t.distdyn=z(Lr),t.sane=1,t.back=-1,AA)}function qr(A){var t;return!A||!A.state?v:(t=A.state,t.wsize=0,t.whave=0,t.wnext=0,_r(A))}function Yr(A,t){var e,n;return!A||!A.state||(n=A.state,t<0?(e=0,t=-t):(e=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?v:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=e,n.wbits=t,qr(A))}function un(A,t){var e,n;return A?(n=new Ur,A.state=n,n.window=null,e=Yr(A,t),e!==AA&&(A.state=null),e):v}var Bn=!0,me,we;function Hr(A){if(Bn){var t;for(me=z(512),we=z(32),t=0;t<144;)A.lens[t++]=8;for(;t<256;)A.lens[t++]=9;for(;t<280;)A.lens[t++]=7;for(;t<288;)A.lens[t++]=8;for($(Cn,A.lens,0,288,me,0,A.work,{bits:9}),t=0;t<32;)A.lens[t++]=5;$(En,A.lens,0,32,we,0,A.work,{bits:5}),Bn=!1}A.lencode=me,A.lenbits=9,A.distcode=we,A.distbits=5}function ln(A,t,e,n){var r,o=A.state;return o.window===null&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=Y(o.wsize)),n>=o.wsize?(q(o.window,t,e-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(r=o.wsize-o.wnext,r>n&&(r=n),q(o.window,t,e-n,r,o.wnext),n-=r,n?(q(o.window,t,e-n,n,0),o.wnext=n,o.whave=o.wsize):(o.wnext+=r,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=r))),0}function hn(A,t){var e,n,r,o,i,s,I,a,g,d,Q,c,E,m,u=0,l,p,h,B,C,y,f,k,w=Y(4),D,F,N=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!A||!A.state||!A.output||!A.input&&A.avail_in!==0)return v;e=A.state,e.mode===H&&(e.mode=ue),i=A.next_out,r=A.output,I=A.avail_out,o=A.next_in,n=A.input,s=A.avail_in,a=e.hold,g=e.bits,d=s,Q=I,k=AA;A:for(;;)switch(e.mode){case fn:if(e.wrap===0){e.mode=ue;break}for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.wrap&2&&a===35615){e.check=0,w[0]=a&255,w[1]=a>>>8&255,e.check=G(e.check,w,2,0),a=0,g=0,e.mode=Kt;break}if(e.flags=0,e.head&&(e.head.done=!1),!(e.wrap&1)||(((a&255)<<8)+(a>>8))%31){A.msg="incorrect header check",e.mode=M;break}if((a&15)!==Pt){A.msg="unknown compression method",e.mode=M;break}if(a>>>=4,g-=4,f=(a&15)+8,e.wbits===0)e.wbits=f;else if(f>e.wbits){A.msg="invalid window size",e.mode=M;break}e.dmax=1<<f,A.adler=e.check=1,e.mode=a&512?zt:H,a=0,g=0;break;case Kt:for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.flags=a,(e.flags&255)!==Pt){A.msg="unknown compression method",e.mode=M;break}if(e.flags&57344){A.msg="unknown header flags set",e.mode=M;break}e.head&&(e.head.text=a>>8&1),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=G(e.check,w,2,0)),a=0,g=0,e.mode=Tt;case Tt:for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.head&&(e.head.time=a),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,w[2]=a>>>16&255,w[3]=a>>>24&255,e.check=G(e.check,w,4,0)),a=0,g=0,e.mode=Ot;case Ot:for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.head&&(e.head.xflags=a&255,e.head.os=a>>8),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=G(e.check,w,2,0)),a=0,g=0,e.mode=Zt;case Zt:if(e.flags&1024){for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.length=a,e.head&&(e.head.extra_len=a),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=G(e.check,w,2,0)),a=0,g=0}else e.head&&(e.head.extra=null);e.mode=Xt;case Xt:if(e.flags&1024&&(c=e.length,c>s&&(c=s),c&&(e.head&&(f=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),q(e.head.extra,n,o,c,f)),e.flags&512&&(e.check=G(e.check,n,c,o)),s-=c,o+=c,e.length-=c),e.length))break A;e.length=0,e.mode=Vt;case Vt:if(e.flags&2048){if(s===0)break A;c=0;do f=n[o+c++],e.head&&f&&e.length<65536&&(e.head.name+=String.fromCharCode(f));while(f&&c<s);if(e.flags&512&&(e.check=G(e.check,n,c,o)),s-=c,o+=c,f)break A}else e.head&&(e.head.name=null);e.length=0,e.mode=jt;case jt:if(e.flags&4096){if(s===0)break A;c=0;do f=n[o+c++],e.head&&f&&e.length<65536&&(e.head.comment+=String.fromCharCode(f));while(f&&c<s);if(e.flags&512&&(e.check=G(e.check,n,c,o)),s-=c,o+=c,f)break A}else e.head&&(e.head.comment=null);e.mode=Wt;case Wt:if(e.flags&512){for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a!==(e.check&65535)){A.msg="header crc mismatch",e.mode=M;break}a=0,g=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),A.adler=e.check=0,e.mode=H;break;case zt:for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}A.adler=e.check=Qn(a),a=0,g=0,e.mode=OA;case OA:if(e.havedict===0)return A.next_out=i,A.avail_out=I,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,Rr;A.adler=e.check=1,e.mode=H;case H:if(t===Fr||t===PA)break A;case ue:if(e.last){a>>>=g&7,g-=g&7,e.mode=he;break}for(;g<3;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}switch(e.last=a&1,a>>>=1,g-=1,a&3){case 0:e.mode=$t;break;case 1:if(Hr(e),e.mode=KA,t===PA){a>>>=2,g-=2;break A}break;case 2:e.mode=en;break;case 3:A.msg="invalid block type",e.mode=M}a>>>=2,g-=2;break;case $t:for(a>>>=g&7,g-=g&7;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if((a&65535)!==(a>>>16^65535)){A.msg="invalid stored block lengths",e.mode=M;break}if(e.length=a&65535,a=0,g=0,e.mode=le,t===PA)break A;case le:e.mode=An;case An:if(c=e.length,c){if(c>s&&(c=s),c>I&&(c=I),c===0)break A;q(r,n,o,c,i),s-=c,o+=c,I-=c,i+=c,e.length-=c;break}e.mode=H;break;case en:for(;g<14;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.nlen=(a&31)+257,a>>>=5,g-=5,e.ndist=(a&31)+1,a>>>=5,g-=5,e.ncode=(a&15)+4,a>>>=4,g-=4,e.nlen>286||e.ndist>30){A.msg="too many length or distance symbols",e.mode=M;break}e.have=0,e.mode=tn;case tn:for(;e.have<e.ncode;){for(;g<3;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.lens[N[e.have++]]=a&7,a>>>=3,g-=3}for(;e.have<19;)e.lens[N[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,D={bits:e.lenbits},k=$(Mr,e.lens,0,19,e.lencode,0,e.work,D),e.lenbits=D.bits,k){A.msg="invalid code lengths set",e.mode=M;break}e.have=0,e.mode=nn;case nn:for(;e.have<e.nlen+e.ndist;){for(;u=e.lencode[a&(1<<e.lenbits)-1],l=u>>>24,p=u>>>16&255,h=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(h<16)a>>>=l,g-=l,e.lens[e.have++]=h;else{if(h===16){for(F=l+2;g<F;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a>>>=l,g-=l,e.have===0){A.msg="invalid bit length repeat",e.mode=M;break}f=e.lens[e.have-1],c=3+(a&3),a>>>=2,g-=2}else if(h===17){for(F=l+3;g<F;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=l,g-=l,f=0,c=3+(a&7),a>>>=3,g-=3}else{for(F=l+7;g<F;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=l,g-=l,f=0,c=11+(a&127),a>>>=7,g-=7}if(e.have+c>e.nlen+e.ndist){A.msg="invalid bit length repeat",e.mode=M;break}for(;c--;)e.lens[e.have++]=f}}if(e.mode===M)break;if(e.lens[256]===0){A.msg="invalid code -- missing end-of-block",e.mode=M;break}if(e.lenbits=9,D={bits:e.lenbits},k=$(Cn,e.lens,0,e.nlen,e.lencode,0,e.work,D),e.lenbits=D.bits,k){A.msg="invalid literal/lengths set",e.mode=M;break}if(e.distbits=6,e.distcode=e.distdyn,D={bits:e.distbits},k=$(En,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,D),e.distbits=D.bits,k){A.msg="invalid distances set",e.mode=M;break}if(e.mode=KA,t===PA)break A;case KA:e.mode=TA;case TA:if(s>=6&&I>=258){A.next_out=i,A.avail_out=I,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,de(A,Q),i=A.next_out,r=A.output,I=A.avail_out,o=A.next_in,n=A.input,s=A.avail_in,a=e.hold,g=e.bits,e.mode===H&&(e.back=-1);break}for(e.back=0;u=e.lencode[a&(1<<e.lenbits)-1],l=u>>>24,p=u>>>16&255,h=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(p&&(p&240)===0){for(B=l,C=p,y=h;u=e.lencode[y+((a&(1<<B+C)-1)>>B)],l=u>>>24,p=u>>>16&255,h=u&65535,!(B+l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=B,g-=B,e.back+=B}if(a>>>=l,g-=l,e.back+=l,e.length=h,p===0){e.mode=gn;break}if(p&32){e.back=-1,e.mode=H;break}if(p&64){A.msg="invalid literal/length code",e.mode=M;break}e.extra=p&15,e.mode=on;case on:if(e.extra){for(F=e.extra;g<F;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.length+=a&(1<<e.extra)-1,a>>>=e.extra,g-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=rn;case rn:for(;u=e.distcode[a&(1<<e.distbits)-1],l=u>>>24,p=u>>>16&255,h=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if((p&240)===0){for(B=l,C=p,y=h;u=e.distcode[y+((a&(1<<B+C)-1)>>B)],l=u>>>24,p=u>>>16&255,h=u&65535,!(B+l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=B,g-=B,e.back+=B}if(a>>>=l,g-=l,e.back+=l,p&64){A.msg="invalid distance code",e.mode=M;break}e.offset=h,e.extra=p&15,e.mode=an;case an:if(e.extra){for(F=e.extra;g<F;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.offset+=a&(1<<e.extra)-1,a>>>=e.extra,g-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){A.msg="invalid distance too far back",e.mode=M;break}e.mode=sn;case sn:if(I===0)break A;if(c=Q-I,e.offset>c){if(c=e.offset-c,c>e.whave&&e.sane){A.msg="invalid distance too far back",e.mode=M;break}c>e.wnext?(c-=e.wnext,E=e.wsize-c):E=e.wnext-c,c>e.length&&(c=e.length),m=e.window}else m=r,E=i-e.offset,c=e.length;c>I&&(c=I),I-=c,e.length-=c;do r[i++]=m[E++];while(--c);e.length===0&&(e.mode=TA);break;case gn:if(I===0)break A;r[i++]=e.length,I--,e.mode=TA;break;case he:if(e.wrap){for(;g<32;){if(s===0)break A;s--,a|=n[o++]<<g,g+=8}if(Q-=I,A.total_out+=Q,e.total+=Q,Q&&(A.adler=e.check=e.flags?G(e.check,r,Q,i-Q):NA(e.check,r,Q,i-Q)),Q=I,(e.flags?a:Qn(a))!==e.check){A.msg="incorrect data check",e.mode=M;break}a=0,g=0}e.mode=In;case In:if(e.wrap&&e.flags){for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a!==(e.total&4294967295)){A.msg="incorrect length check",e.mode=M;break}a=0,g=0}e.mode=cn;case cn:k=xr;break A;case M:k=dn;break A;case De:return pe;case Gr:default:return v}return A.next_out=i,A.avail_out=I,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,(e.wsize||Q!==A.avail_out&&e.mode<M&&(e.mode<he||t!==Ht))&&ln(A,A.output,A.next_out,Q-A.avail_out)?(e.mode=De,pe):(d-=A.avail_in,Q-=A.avail_out,A.total_in+=d,A.total_out+=Q,e.total+=Q,e.wrap&&Q&&(A.adler=e.check=e.flags?G(e.check,r,Q,A.next_out-Q):NA(e.check,r,Q,A.next_out-Q)),A.data_type=e.bits+(e.last?64:0)+(e.mode===H?128:0)+(e.mode===KA||e.mode===le?256:0),(d===0&&Q===0||t===Ht)&&k===AA&&(k=Jr),k)}function mn(A){if(!A||!A.state)return v;var t=A.state;return t.window&&(t.window=null),A.state=null,AA}function wn(A,t){var e;return!A||!A.state||(e=A.state,(e.wrap&2)===0)?v:(e.head=t,t.done=!1,AA)}function ye(A,t){var e=t.length,n,r,o;return!A||!A.state||(n=A.state,n.wrap!==0&&n.mode!==OA)?v:n.mode===OA&&(r=1,r=NA(r,t,e,0),r!==n.check)?dn:(o=ln(A,t,e,e),o?(n.mode=De,pe):(n.havedict=1,AA))}var ZA={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function Ne(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var ke=Object.prototype.toString,be=class A{constructor(t){if(!(this instanceof A))return new A(t);this.options=Ft({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Ne,this.strm.avail_out=0;var n=un(this.strm,e.windowBits);if(n!==O)throw new Error(ZA[n]);if(this.header=new Ee,wn(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Ce(e.dictionary):ke.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=ye(this.strm,e.dictionary),n!==O)))throw new Error(ZA[n])}push(t,e){var n=this.strm,r=this.options.chunkSize,o=this.options.dictionary,i,s,I,a,g,d,Q=!1;if(this.ended)return!1;s=e===~~e?e:e===!0?wA:ce,typeof t=="string"?n.input=Jt(t):ke.call(t)==="[object ArrayBuffer]"?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(n.avail_out===0&&(n.output=Y(r),n.next_out=0,n.avail_out=r),i=hn(n,ce),i===St&&o&&(typeof o=="string"?d=Ce(o):ke.call(o)==="[object ArrayBuffer]"?d=new Uint8Array(o):d=o,i=ye(this.strm,d)),i===Mt&&Q===!0&&(i=O,Q=!1),i!==pA&&i!==O)return this.onEnd(i),this.ended=!0,!1;n.next_out&&(n.avail_out===0||i===pA||n.avail_in===0&&(s===wA||s===Qe))&&(this.options.to==="string"?(I=vt(n.output,n.next_out),a=n.next_out-I,g=Gt(n.output,I),n.next_out=a,n.avail_out=r-a,a&&q(n.output,n.output,I,a,0),this.onData(g)):this.onData(YA(n.output,n.next_out))),n.avail_in===0&&n.avail_out===0&&(Q=!0)}while((n.avail_in>0||n.avail_out===0)&&i!==pA);return i===pA&&(s=wA),s===wA?(i=mn(this.strm),this.onEnd(i),this.ended=!0,i===O):(s===Qe&&(this.onEnd(O),n.avail_out=0),!0)}onData(t){this.chunks.push(t)}onEnd(t){t===O&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=qA(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg}};function Pr(A,t){var e=new be(t);if(e.push(A,!0),e.err)throw e.msg||ZA[e.err];return e.result}var pn=Pr;function Dn(A){let t=0;for(let r of A)t+=r.length;let e=new Uint8Array(t),n=0;for(let r of A)e.set(r,n),n+=r.length;return e}var X={};X.d=(A,t)=>{if(Array.isArray(t))for(var e=0;e<t.length;){var n=t[e++],r=t[e++];X.o(A,n)?r===0&&e++:r===0?Object.defineProperty(A,n,{enumerable:!0,value:t[e++]}):Object.defineProperty(A,n,{enumerable:!0,get:r})}else for(var n in t)X.o(t,n)&&!X.o(A,n)&&Object.defineProperty(A,n,{enumerable:!0,get:t[n]})};X.o=(A,t)=>Object.prototype.hasOwnProperty.call(A,t);X.r=A=>{Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var Fe={};X.r(Fe);X.d(Fe,{ChunkSliceResult:()=>BA,__wbg_Error_92b29b0548f8b746:()=>Or,__wbg___wbindgen_throw_344f42d3211c4765:()=>Zr,__wbg_set_wasm:()=>xn,decompress_all:()=>kn,decompress_chunk_slice:()=>Tr});var Kr="data:application/wasm;base64,AGFzbQEAAAABfRFgAABgAAF/YAF/AGABfwF/YAJ/fwBgAn9/AX9gA39/fwBgA39/fwF/YAR/f39/AGAEf39/fwF/YAV/f39/fwBgBX9/f39/AX9gBn9/f39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gCH9/f39/f39/AX9gB39/f3x8fHwAAm4CES4vYmd6Zl93YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfMzQ0ZjQyZDMyMTFjNDc2NQAEES4vYmd6Zl93YXNtX2JnLmpzHF9fd2JnX0Vycm9yXzkyYjI5YjA1NDhmOGI3NDYABQNsawMODxAFCQINBwYJBAUEBAgFBQQKEAYEBwUEBAcEDAwGCgYEAgICDAIGBwQDBQMEBgYFBQsEAgYCAgQEBQMCAgEEAgUCBAYGDQIEBAcJAgQFBQYEBwADBQUEAAAEBAQFBAUCAgICBAQFAAAABAUBcAEaGgUDAQARBhkDfwFBgIDAAAt/AEGkmsAAC38AQdSawAALB6wCDAZtZW1vcnkCABtfX3diZ19jaHVua3NsaWNlcmVzdWx0X2ZyZWUAFBxjaHVua3NsaWNlcmVzdWx0X3Rha2VfYnVmZmVyAB4gY2h1bmtzbGljZXJlc3VsdF90YWtlX2Nwb3NpdGlvbnMAGyBjaHVua3NsaWNlcmVzdWx0X3Rha2VfZHBvc2l0aW9ucwAcDmRlY29tcHJlc3NfYWxsABcWZGVjb21wcmVzc19jaHVua19zbGljZQAWD19fYWJvcnRfaGFuZGxlcgMBFV9faW5zdGFuY2VfdGVybWluYXRlZAMCH19fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIAVxFfX3diaW5kZ2VuX2V4cG9ydABIEl9fd2JpbmRnZW5fZXhwb3J0MgAzCR8BAEEBCxlsPkVnPSw8aEMrE1VRMFBePzQYJExLEmBSCp3GAWvNJAIJfwF+IwBBEGsiASQAAkACQAJAAkAgAEH1AUkNAAJAIABBzP97TQ0AQQAhAAwECyAAQQtqIgJBeHEhA0EAKAKYnkAiBEUNAkEfIQUgAEH1//8HTw0BIANBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQwBCwJAAkACQAJAAkACQEEAKAKUnkAiBkEQIABBC2pB+ANxIABBC0kbIgNBA3YiAnYiAEEDcUUNACAAQX9zQQFxIAJqIgdBA3QiA0GMnMAAaiIAIANBlJzAAGooAgAiAigCCCIIRg0BIAggADYCDCAAIAg2AggMAgsgA0EAKAKcnkBNDQYgAA0CQQAoApieQCIARQ0GIABoQQJ0QfyawABqKAIAIggoAgRBeHEgA2shAiAIIQYDQAJAIAgoAhAiAA0AIAgoAhQiAA0AIAYoAhghBQJAAkACQCAGKAIMIgAgBkcNACAGQRRBECAGKAIUIgAbaigCACIIDQFBACEADAILIAYoAggiCCAANgIMIAAgCDYCCAwBCyAGQRRqIAZBEGogABshBwNAIAchCSAIIgBBFGogAEEQaiAAKAIUIggbIQcgAEEUQRAgCBtqKAIAIggNAAsgCUEANgIACyAFRQ0GAkACQCAGIAYoAhxBAnRB/JrAAGoiCCgCAEYNAAJAIAUoAhAgBkYNACAFIAA2AhQgAA0CDAkLIAUgADYCECAADQEMCAsgCCAANgIAIABFDQYLIAAgBTYCGAJAIAYoAhAiCEUNACAAIAg2AhAgCCAANgIYCyAGKAIUIghFDQYgACAINgIUIAggADYCGAwGCyAAKAIEQXhxIANrIgggAiAIIAJJIggbIQIgACAGIAgbIQYgACEIDAALC0EAIAZBfiAHd3E2ApSeQAsgAkEIaiEAIAIgA0EDcjYCBCACIANqIgMgAygCBEEBcjYCBAwFCwJAAkAgACACdEECIAJ0IgBBACAAa3JxaCIJQQN0IgJBjJzAAGoiCCACQZScwABqKAIAIgAoAggiB0YNACAHIAg2AgwgCCAHNgIIDAELQQAgBkF+IAl3cTYClJ5ACyAAIANBA3I2AgQgACADaiIGIAIgA2siCEEBcjYCBCAAIAJqIAg2AgACQEEAKAKcnkAiAkUNAEEAKAKknkAhAwJAAkBBACgClJ5AIgdBASACQQN2dCIJcQ0AQQAgByAJcjYClJ5AIAJBeHFBjJzAAGoiAiEHDAELIAJBeHEiAkGMnMAAaiEHIAJBlJzAAGooAgAhAgsgByADNgIIIAIgAzYCDCADIAc2AgwgAyACNgIICyAAQQhqIQBBACAGNgKknkBBACAINgKcnkAMBAtBAEEAKAKYnkBBfiAGKAIcd3E2ApieQAsCQAJAAkAgAkEQSQ0AIAYgA0EDcjYCBCAGIANqIgggAkEBcjYCBCAIIAJqIAI2AgBBACgCnJ5AIgdFDQFBACgCpJ5AIQACQAJAQQAoApSeQCIJQQEgB0EDdnQiBXENAEEAIAkgBXI2ApSeQCAHQXhxQYycwABqIgchCQwBCyAHQXhxIgdBjJzAAGohCSAHQZScwABqKAIAIQcLIAkgADYCCCAHIAA2AgwgACAJNgIMIAAgBzYCCAwBCyAGIAIgA2oiAEEDcjYCBCAGIABqIgAgACgCBEEBcjYCBAwBC0EAIAg2AqSeQEEAIAI2ApyeQAsgBkEIaiIARQ0BDAILQQAgA2shAgJAAkACQAJAIAVBAnRB/JrAAGooAgAiBg0AQQAhCEEAIQAMAQtBACEIIANBAEEZIAVBAXZrIAVBH0YbdCEHQQAhAANAAkAgBiIGKAIEQXhxIgkgA0kNACAJIANrIgkgAk8NACAGIQggCSECIAkNAEEAIQIgBiEAIAYhCAwDCyAGKAIUIgkgACAJIAYgB0EddkEEcWooAhAiBkcbIAAgCRshACAHQQF0IQcgBg0ACwsCQCAAIAhyDQBBACEIQQIgBXQiAEEAIABrciAEcSIARQ0DIABoQQJ0QfyawABqKAIAIQALIABFDQELA0AgACgCBEF4cSIGIANrIgcgAiAHIAJJIgkbIQUgBiADSSEHIAAgCCAJGyEJAkAgACgCECIGDQAgACgCFCEGCyACIAUgBxshAiAIIAkgBxshCCAGIQAgBg0ACwsgCEUNAAJAQQAoApyeQCIAIANJDQAgAiAAIANrTw0BCyAIKAIYIQUCQAJAAkAgCCgCDCIAIAhHDQAgCEEUQRAgCCgCFCIAG2ooAgAiBg0BQQAhAAwCCyAIKAIIIgYgADYCDCAAIAY2AggMAQsgCEEUaiAIQRBqIAAbIQcDQCAHIQkgBiIAQRRqIABBEGogACgCFCIGGyEHIABBFEEQIAYbaigCACIGDQALIAlBADYCAAsCQCAFRQ0AAkACQAJAIAggCCgCHEECdEH8msAAaiIGKAIARg0AAkAgBSgCECAIRg0AIAUgADYCFCAADQIMBAsgBSAANgIQIAANAQwDCyAGIAA2AgAgAEUNAQsgACAFNgIYAkAgCCgCECIGRQ0AIAAgBjYCECAGIAA2AhgLIAgoAhQiBkUNASAAIAY2AhQgBiAANgIYDAELQQBBACgCmJ5AQX4gCCgCHHdxNgKYnkALAkACQCACQRBJDQAgCCADQQNyNgIEIAggA2oiACACQQFyNgIEIAAgAmogAjYCAAJAIAJBgAJJDQAgACACEBAMAgsCQAJAQQAoApSeQCIGQQEgAkEDdnQiB3ENAEEAIAYgB3I2ApSeQCACQfgBcUGMnMAAaiICIQYMAQsgAkH4AXEiAkGMnMAAaiEGIAJBlJzAAGooAgAhAgsgBiAANgIIIAIgADYCDCAAIAY2AgwgACACNgIIDAELIAggAiADaiIAQQNyNgIEIAggAGoiACAAKAIEQQFyNgIECyAIQQhqIgANAQsCQAJAAkACQAJAAkBBACgCnJ5AIgAgA08NAAJAQQAoAqCeQCIAIANLDQAgAUEEakHAnsAAIANBr4AEakGAgHxxECECQCABKAIEIgYNAEEAIQAMCAsgASgCDCEFQQBBACgCrJ5AIAEoAggiCWoiADYCrJ5AQQAgAEEAKAKwnkAiAiAAIAJLGzYCsJ5AAkACQAJAQQAoAqieQCICRQ0AQfybwAAhAANAIAYgACgCACIIIAAoAgQiB2pGDQIgACgCCCIADQAMAwsLAkACQEEAKAK4nkAiAEUNACAGIABPDQELQQAgBjYCuJ5AC0EAQf8fNgK8nkBBACAFNgKInEBBACAJNgKAnEBBACAGNgL8m0BBAEGMnMAANgKYnEBBAEGUnMAANgKgnEBBAEGMnMAANgKUnEBBAEGcnMAANgKonEBBAEGUnMAANgKcnEBBAEGknMAANgKwnEBBAEGcnMAANgKknEBBAEGsnMAANgK4nEBBAEGknMAANgKsnEBBAEG0nMAANgLAnEBBAEGsnMAANgK0nEBBAEG8nMAANgLInEBBAEG0nMAANgK8nEBBAEHEnMAANgLQnEBBAEG8nMAANgLEnEBBAEHMnMAANgLYnEBBAEHEnMAANgLMnEBBAEHMnMAANgLUnEBBAEHUnMAANgLgnEBBAEHUnMAANgLcnEBBAEHcnMAANgLonEBBAEHcnMAANgLknEBBAEHknMAANgLwnEBBAEHknMAANgLsnEBBAEHsnMAANgL4nEBBAEHsnMAANgL0nEBBAEH0nMAANgKAnUBBAEH0nMAANgL8nEBBAEH8nMAANgKInUBBAEH8nMAANgKEnUBBAEGEncAANgKQnUBBAEGEncAANgKMnUBBAEGMncAANgKYnUBBAEGUncAANgKgnUBBAEGMncAANgKUnUBBAEGcncAANgKonUBBAEGUncAANgKcnUBBAEGkncAANgKwnUBBAEGcncAANgKknUBBAEGsncAANgK4nUBBAEGkncAANgKsnUBBAEG0ncAANgLAnUBBAEGsncAANgK0nUBBAEG8ncAANgLInUBBAEG0ncAANgK8nUBBAEHEncAANgLQnUBBAEG8ncAANgLEnUBBAEHMncAANgLYnUBBAEHEncAANgLMnUBBAEHUncAANgLgnUBBAEHMncAANgLUnUBBAEHcncAANgLonUBBAEHUncAANgLcnUBBAEHkncAANgLwnUBBAEHcncAANgLknUBBAEHsncAANgL4nUBBAEHkncAANgLsnUBBAEH0ncAANgKAnkBBAEHsncAANgL0nUBBAEH8ncAANgKInkBBAEH0ncAANgL8nUBBAEGEnsAANgKQnkBBAEH8ncAANgKEnkBBACAGQQ9qQXhxIgBBeGoiAjYCqJ5AQQBBhJ7AADYCjJ5AQQAgBiAAayAJQVhqIgBqQQhqIgg2AqCeQCACIAhBAXI2AgQgBiAAakEoNgIEQQBBgICAATYCtJ5ADAgLIAIgBk8NACAIIAJLDQAgACgCDCIIQQFxDQAgCEEBdiAFRg0DC0EAQQAoArieQCIAIAYgACAGSRs2ArieQCAGIAlqIQhB/JvAACEAAkACQAJAA0AgACgCACIHIAhGDQEgACgCCCIADQAMAgsLIAAoAgwiCEEBcQ0AIAhBAXYgBUYNAQtB/JvAACEAAkADQAJAIAAoAgAiCCACSw0AIAIgCCAAKAIEaiIISQ0CCyAAKAIIIQAMAAsLQQAgBkEPakF4cSIAQXhqIgc2AqieQEEAIAYgAGsgCUFYaiIAakEIaiIENgKgnkAgByAEQQFyNgIEIAYgAGpBKDYCBEEAQYCAgAE2ArSeQCACIAhBYGpBeHFBeGoiACAAIAJBEGpJGyIHQRs2AgRBACkC/JtAIQogB0EQakEAKQKEnEA3AgAgB0EIaiIAIAo3AgBBACAFNgKInEBBACAJNgKAnEBBACAGNgL8m0BBACAANgKEnEAgB0EcaiEAA0AgAEEHNgIAIABBBGoiACAISQ0ACyAHIAJGDQcgByAHKAIEQX5xNgIEIAIgByACayIAQQFyNgIEIAcgADYCAAJAIABBgAJJDQAgAiAAEBAMCAsCQAJAQQAoApSeQCIIQQEgAEEDdnQiBnENAEEAIAggBnI2ApSeQCAAQfgBcUGMnMAAaiIAIQgMAQsgAEH4AXEiAEGMnMAAaiEIIABBlJzAAGooAgAhAAsgCCACNgIIIAAgAjYCDCACIAg2AgwgAiAANgIIDAcLIAAgBjYCACAAIAAoAgQgCWo2AgQgBkEPakF4cUF4aiIIIANBA3I2AgQgB0EPakF4cUF4aiICIAggA2oiAGshAyACQQAoAqieQEYNAyACQQAoAqSeQEYNBAJAIAIoAgQiBkEDcUEBRw0AIAIgBkF4cSIGEA8gBiADaiEDIAIgBmoiAigCBCEGCyACIAZBfnE2AgQgACADQQFyNgIEIAAgA2ogAzYCAAJAIANBgAJJDQAgACADEBAMBgsCQAJAQQAoApSeQCICQQEgA0EDdnQiBnENAEEAIAIgBnI2ApSeQCADQfgBcUGMnMAAaiIDIQIMAQsgA0H4AXEiA0GMnMAAaiECIANBlJzAAGooAgAhAwsgAiAANgIIIAMgADYCDCAAIAI2AgwgACADNgIIDAULQQAgACADayICNgKgnkBBAEEAKAKonkAiACADaiIINgKonkAgCCACQQFyNgIEIAAgA0EDcjYCBCAAQQhqIQAMBgtBACgCpJ5AIQICQAJAIAAgA2siCEEPSw0AQQBBADYCpJ5AQQBBADYCnJ5AIAIgAEEDcjYCBCACIABqIgAgACgCBEEBcjYCBAwBC0EAIAg2ApyeQEEAIAIgA2oiBjYCpJ5AIAYgCEEBcjYCBCACIABqIAg2AgAgAiADQQNyNgIECyACQQhqIQAMBQsgACAHIAlqNgIEQQBBACgCqJ5AIgBBD2pBeHEiAkF4aiIINgKonkBBACAAIAJrQQAoAqCeQCAJaiICakEIaiIGNgKgnkAgCCAGQQFyNgIEIAAgAmpBKDYCBEEAQYCAgAE2ArSeQAwDC0EAIAA2AqieQEEAQQAoAqCeQCADaiIDNgKgnkAgACADQQFyNgIEDAELQQAgADYCpJ5AQQBBACgCnJ5AIANqIgM2ApyeQCAAIANBAXI2AgQgACADaiADNgIACyAIQQhqIQAMAQtBACEAQQAoAqCeQCICIANNDQBBACACIANrIgI2AqCeQEEAQQAoAqieQCIAIANqIgg2AqieQCAIIAJBAXI2AgQgACADQQNyNgIEIABBCGohAAsgAUEQaiQAIAALwh0BFn8gASACaiIHIAJBESACQRFJG2shCCADIARqIgkgBEGXAiAEQZcCSRtrIQogAEGk2gBqIQsgAEGYyQBqIQwgAEHg1QBqIQ0gAEHMA2ohDkEAIQ9BACEQQQAhAiABIREgAyEEAkADQAJAAkAgByARa0EDSw0AIAIhEiAQQf8BcSICQRdLDQEDQAJAAkAgESAHRg0AIBEtAAAgAnQgEnIhEiARQQFqIREMAQtBASETIAchESAPQQFqIg9BBEsNBQsgEEEIaiIQQf8BcSICQRhJDQAMAgsLIBEoAAAgEEH/AXF0IAJyIRIgESAQQQN2QQdxa0EDaiERIBBBGHIhEAtBASETAkACQAJAAkACQAJAIBJBAXZBA3EOAwQBAAcLQQAhFCAAQQA6AKBaIBBBb2ohAiASQRF2IRUgEkENdiIWQQ9xIhdBBGohECASQQh2QR9xQQFqIRggEkEDdkEfcUGBAmohGQNAAkACQCACQf8BcSITQQJNDQAgAiEaDAELAkAgByARa0EDSw0AIAIhGgNAAkACQCARIAdGDQAgES0AACATdCAVciEVIBFBAWohEQwBC0EBIRMgByERIA9BAWoiD0EESw0LCyAaQQhqIhpB/wFxIhNBGEkNAAwCCwsgAkEYciEaIBEoAAAgE3QgFXIhFSARIAJBA3ZBB3FrQQNqIRELIAAgFEGQisAAai0AAGogFUEHcToAACAaQX1qIQIgFUEDdiEVIBRBAWoiFCAQRw0ACwJAIBdBD0YNAAJAIBZBf3NBA3EiFEUNAANAIAAgEEGQisAAai0AAGpBADoAACAQQQFqIRAgFEF/aiIUDQALCyAXQXRqQQNJDQADQCAAIBBBkIrAAGotAABqQQA6AAAgACAQQZGKwABqLQAAakEAOgAAIAAgEEGSisAAai0AAGpBADoAACAAIBBBk4rAAGotAABqQQA6AAAgEEEEaiIQQRNHDQALCwJAIA4gAEETQbCKwABBB0EHIA1BABAEDQBBAQ8LIBkgGGohF0EAIRADQAJAAkAgAkH/AXEiFEENTQ0AIAIhGgwBCwJAIAcgEWtBA0sNACACIRoDQAJAAkAgESAHRg0AIBEtAAAgFHQgFXIhFSARQQFqIREMAQtBASETIAchESAPQQFqIg9BBEsNCwsgGkEIaiIaQf8BcSIUQRhJDQAMAgsLIAJBGHIhGiARKAAAIBR0IBVyIRUgESACQQN2QQdxa0EDaiERCyAAIBVB/wBxQQJ0akHMA2ooAgAiFEEQdiETIBogFGshAiAVIBRB/wFxdiEVAkACQCAUQf//P0sNACAAIBBqIBM6AAAgEEEBaiEQDAELAkACQAJAAkAgE0Fwag4CAAECCwJAIBANAEEBDwsgACAQaiIUQQVqIBRBf2otAAAiGjoAACAUQQRqIBo6AAAgFEEDaiAaOgAAIBRBAmogGjoAACAUQQFqIBo6AAAgFCAaOgAAIAJBfmohAiAVQQNxQQNqIRQgFUECdiEVDAILIAAgEGoiFEIANwAAIBRBCGpBADsAACACQX1qIQIgFUEHcUEDaiEUIBVBA3YhFQwBCyAAIBBqQQAgFUH/AHFBC2oiFBAdGiACQXlqIQIgFUEHdiEVCyAUIBBqIRALIBAgF0kNAAsgECAXRg0BQQEPCyAQQX1qIQIgEkEDdiEVIAAtAKBaDQEgAEEBOgCgWkEAIRADQCAAIBBqIhRCiJCgwICBgoQINwAAIBRBCGpBCDoAACAQQQlqIhBBkAFHDQALQZB/IRADQCAAIBBqQYACakKJkqTIkKHChAk3AAAgEEEIaiIQDQALIABChYqUqNCgwYIFNwC4AiAAQoWKlKjQoMGCBTcAsAIgAEKFipSo0KDBggU3AKgCIABChYqUqNCgwYIFNwCgAiAAQoiQoMCAgYKECDcAmAIgAEKHjpy48ODBgwc3AJACIABCh46cuPDgwYMHNwCIAiAAQoeOnLjw4MGDBzcAgAJBICEYQaACIRkLAkAgDCAAIBlqIBhBgIvAAEEIQQ8gDUEAEAQNAEEBDwsgACAAIBlBgIzAAEELQQ8gDSALEAQNAEEBDwtBfyALKAIAdEF/cyEXAkACQCARIAhPDQAgBCAKTw0AIAJBGHIhECARIAJBA3ZBB3FrQQNqIRQgACARKAAAIAJB/wFxdCAVciIVIBdxQQJ0aigCACEYA0AgECAYayEQIBUgGEH/AXEiE3YhAgJAAkACQAJAIBhBAEgNAAJAIBhBgIACcQ0AIAIhEQwDCwJAIBhBgMAAcUUNACAUIREMCQsgECAAIAJBfyAYQQh2dEF/c3EgGEEQdmpBAnRqKAIAIhhrIRAgAiAYQf8BcSITdiERIBhBAE4NASARIQILIAQgGEEQdjoAACAEQQFqIQQgFCgAACAQQf8BcXQgAnIhFSAUIBBBA3ZBB3FrQQNqIRQgACACIBdxQQJ0aigCACEYDAILIAIhFSAYQYDAAHFFDQAgESECIBQhEQwGCyAQQRhyIRkgFCgAACAQQf8BcXQgEXIhGiAUIBBBA3ZBB3FrQQNqIRQCQCAAIBFB/wFxQQJ0akGYyQBqKAIAIhFBgIACcUUNACAUKAAAIBlBeGoiAkH3AXF0IBpBCHYiEHIhGiAAIBBBfyARQQh2QT9xdEF/c3EgEUEQdmpBAnRqQZjJAGooAgAhESACQRhyIRkgFCACQQN2QQZxa0EDaiEUCwJAIBpBfyARQf8BcSIWdEF/c3EgEUEIdkH/AXF2IhsgEUEQdiIcaiICIAQgA2tNDQBBAQ8LIBVBfyATdEF/c3EhEyAUKAAAIBkgEWsiEEH/AXF0IBogFnYiGXIhFSAEIBMgGEEIdkH/AXF2IBhBEHZqIhNqIREgBCACayEaIBQgEEEDdkEHcWtBA2ohFCAAIBkgF3FBAnRqKAIAIRgCQAJAIAJBBEkNACAEIBooAAA2AAAgBCAaKAAENgAEIAQgGigACDYACCAEIBooAAw2AAwgBCAaKAAQNgAQIBNBFUgNAUEAIAJrIRMDQCAEQRRqIhogBCATaiICQRRqKAAANgAAIARBGGogAkEYaigAADYAACAEQRxqIAJBHGooAAA2AAAgBEEgaiACQSBqKAAANgAAIARBJGogAkEkaigAADYAACAEQShqIQIgGiEEIAIgEUkNAAwCCwsCQCACQQFHDQAgBCAaLQAAQYGChAhsIho2AAwgBCAaNgAIIAQgGjYABCAEIBo2AAAgE0ERSA0BIARBEGohAgNAIAIgGjYAACACQQxqIBo2AAAgAkEIaiAaNgAAIAJBBGogGjYAACACQRBqIgIgEUkNAAwCCwsgBCAaKAAAIho2AAAgBCACaiAaNgAAIBtBAXQgHEEBdGohGiACQQNsIRYDQCAEIBpqIAQgAmoiEygAACIZNgAAIAQgFmogGTYAACATIAJqIgQgGmogEUkNAAsLIBEhBAsgEEEYciEQIBQgCE8NAiAEIApJDQAMAgsLIAIhECARIRQLA0ACQAJAIAcgFGtBA0sNACAQQf8BcSICQRdLDQEDQAJAAkAgFCAHRg0AIBQtAAAgAnQgFXIhFSAUQQFqIRQMAQtBASETIAchFCAPQQFqIg9BBEsNCAsgEEEIaiIQQf8BcSICQRhJDQAMAgsLIBQoAAAgEEH/AXF0IBVyIRUgFCAQQQN2QQdxa0EDaiEUIBBBGHIhEAsgECAAIBUgF3FBAnRqKAIAIgJrIRAgFSACQf8BcXYhEQJAAkAgAkGAgAFxDQAgFSEaIBEhFQwBCyAQIAAgEUF/IAJBCHZBP3F0QX9zcSACQRB2akECdGooAgAiAmshECARIAJB/wFxdiEVIBEhGgsgAkEQdiERAkAgAkF/Sg0AAkAgBCAJRw0AQQMPCyAEIBE6AAAgBEEBaiEEDAELAkAgAkGAwABxRQ0AIBUhAiAUIREMAwsCQCAaQX8gAkH/AXF0QX9zcSACQQh2Qd8BcXYgEWoiGiAJIARrTQ0AQQMPCwJAAkAgByAUa0EDSw0AIBBB/wFxIgJBF0sNAQNAAkACQCAUIAdGDQAgFC0AACACdCAVciEVIBRBAWohFAwBC0EBIRMgByEUIA9BAWoiD0EESw0ICyAQQQhqIhBB/wFxIgJBGEkNAAwCCwsgFCgAACAQQf8BcXQgFXIhFSAUIBBBA3ZBB3FrQQNqIRQgEEEYciEQCwJAIAAgFUH/AXFBAnRqQZjJAGooAgAiAkGAgAJxRQ0AIAAgFUEIdiIVQX8gAkEIdkE/cXRBf3NxIAJBEHZqQQJ0akGYyQBqKAIAIQIgEEF4aiERAkACQCAHIBRrQQNLDQAgEUH/AXEiE0EXTQ0BIBEhEAwCCyARQRhyIRAgFCgAACARQf8BcXQgFXIhFSAUIBFBA3ZBB3FrQQNqIRQMAQsDQAJAAkAgFCAHRg0AIBQtAAAgE3QgFXIhFSAUQQFqIRQMAQtBASETIAchFCAPQQFqIg9BBEsNBwsgEEH/AXEhEyAQQQhqIhEhECATQRhJDQALIBFBeGohEAsCQCAVQX8gAkH/AXEiE3RBf3NxIAJBCHZB/wFxdiACQRB2aiIRIAQgA2tNDQBBAQ8LIBAgAmshECAVIBN2IRUgBCAEIBFrIgItAAA6AAAgBCACLQABOgABIARBAmohAiAEIBpqIQRBACARayERA0AgAiACIBFqLQAAOgAAIAJBAWoiAiAESQ0ADAELCwsCQCAPIBBB/QFqQQN2QR9xIgJNDQBBAQ8LAkAgByARIA8gAmtqIhFrQQRODQBBAQ8LAkAgES8AAiARLwAAIgJzQf//A3FB//8DRg0AQQEPCwJAIAkgBGsgAk4NAEEDDwsCQCAHIBFBBGoiEWsgAk4NAEEBDwsgBCARIAIQGSACaiEEIBEgAmohEUEAIQ9BACEQQQAhAgsgEkEBcUUNAAtBASETIA8gEEEDdkEfcSICSw0AAkAgBUUNACAFIBEgDyACa2ogAWs2AgALAkACQCAGRQ0AIAYgBCADazYCAAwBC0ECIRMgBCAJRw0BC0EAIRMLIBMLjw8BD38jAEGAAWsiCCQAIAVBAWoiCUEHcSEKQQAhCwJAIAVBB0kNACAJQXhxIQxBACELIAhBwABqIQkDQCAJQgA3AwAgCUEYakIANwMAIAlBEGpCADcDACAJQQhqQgA3AwAgCUEgaiEJIAwgC0EIaiILRw0ACwsCQCAKRQ0AIAhBwABqIAtBAnRqIQkDQCAJQQA2AgAgCUEEaiEJIApBf2oiCg0ACwsCQCACRQ0AIAJBA3EhC0EAIQoCQCACQQRJDQAgAkF8cSENQQAhCgNAIAhBwABqIAEgCmoiCS0AAEECdGoiDCAMKAIAQQFqNgIAIAhBwABqIAlBAWotAABBAnRqIgwgDCgCAEEBajYCACAIQcAAaiAJQQJqLQAAQQJ0aiIMIAwoAgBBAWo2AgAgCEHAAGogCUEDai0AAEECdGoiCSAJKAIAQQFqNgIAIA0gCkEEaiIKRw0ACwsgC0UNACABIApqIQkDQCAIQcAAaiAJLQAAQQJ0aiIKIAooAgBBAWo2AgAgCUEBaiEJIAtBf2oiCw0ACwsCQAJAIAVBAk8NACAFIQ4MAQsgCEHAAGogBUECdGohCQNAAkAgCSgCAEUNACAFIQ4MAgsgCUF8aiEJQQEhDiAFQX9qIgVBAUsNAAsLAkAgB0UNACAHIA4gBCAOIARJGyIENgIAC0EAIQkgCEEANgIAIAggCCgCQCIFNgIEQQEhCgJAIA5BAkkNAEEBIQkgDkF/aiIKQQFxIQ8CQAJAIA5BAkcNAEEAIQsMAQsgCkF+cSEQIAhBwABqQQhyIQkgCEEMciEKQQAhC0EAIQwDQCAKQXxqIAlBfGooAgAiDSAFaiIFNgIAIAogCSgCACIHIAVqIgU2AgAgByALQQJ0IA1BAXRqaiELIAlBCGohCSAKQQhqIQogECAMQQJqIgxHDQALIAxBAWohCQsCQCAPRQ0AIAlBAnQiCSAIakEEaiAIQcAAaiAJaigCACIJIAVqNgIAIAkgC0EBdGohCwsgC0EBdCEJIA4hCgsgCEHAAGogCkECdGooAgAgCWohDQJAIAJFDQAgAkEBcSEHQQAhCQJAIAJBAUYNACACQX5xIQxBACEJA0AgBiAIIAEgCWoiCi0AAEECdGoiCygCACIFQQF0aiAJOwEAIAsgBUEBajYCACAIIApBAWotAABBAnRqIgogCigCACIKQQFqNgIAIAYgCkEBdGogCUEBajsBACAMIAlBAmoiCUcNAAsLIAdFDQAgCCABIAlqLQAAQQJ0aiIKIAooAgAiCkEBajYCACAGIApBAXRqIAk7AQALAkACQCANQQEgDnQiCU0NAEEAIQYMAQsgBiAIKAIAQQF0aiEQAkACQAJAIA0gCUkNACAIQcAAakEEciEJQQAhBwNAIAdBAWohByAJKAIAIQwgCUEEaiEJIAxFDQALQQAhESAHIARNDQFBACENDAILAkACQCANDQBBACEJDAELQQAhBiANQQEgDkF/anRHDQMgCCgCREEBRw0DIBAvAQAhCQsgAyAJQQJ0aigCAEGBAmohC0EBIQZBASEJA0AgACALNgIAIABBBGohACAJIAR2IQogCUEBaiEJIApFDQAMAwsLQQEgB3QhCiAIQcAAakEEciEBQQAhDQNAIApBf2ohCSAHQYECbCEGA0AgACANQQJ0aiAGIAMgEC8BAEECdGooAgBqNgIAAkAgDSAJRw0AQQEhBiAEIAdNDQRBASEGIAdBAWohCQJAIAQgB2tBAXFFDQAgACAKQQJ0IgtqIAAgCxAZGiAKQQF0IQogCSEHCyAEIAlGDQQgBCAHayELA0AgACAKQQJ0IglqIAAgCRAZGiAAIApBA3QiCmogACAKEBkaIAkhCiALQX5qIgsNAAwFCwtBgICAgHggCSANc2d2IgtBf2ogDXEgC3IhDSAQQQJqIRAgDEF/aiIMDQALIAEgB0ECdGohCQNAAkAgB0EBaiIHIARLDQAgACAKQQJ0IgtqIAAgCxAZGiAKQQF0IQoLIAkoAgAhDCAJQQRqIQkgDEUNAAsgByAETQ0ACwtBASAEdCICQX9qIRIgCEHAAGpBBHIhE0F/IQkDQCATIAdBAnRqIQ5BfyAHdEF/cyEUIAcgBGsiFUGBAmwhFkEBIBV0IgZBAnQhBQNAAkACQCANIBJxIg8gCUcNACACIQsgCSEPDAELIBUhCiAGIQECQCAMIAZPDQAgDiEJIBUhCiAMIQsDQCAJKAIAIQEgCUEEaiEJIAEgC0EBdGoiC0EBIApBAWoiCnQiAUkNAAsLIAAgD0ECdGogAkEQdCAKQQh0ciAEckGAgANyNgIAIAEgAmohCyACIRELIAAgESANIAR2aiIKQQJ0aiEJIBYgAyAQLwEAQQJ0aigCAGohAQNAIAkgATYCACAJIAVqIQkgCiAGaiIKIAtJDQALAkAgDSAURw0AQQEhBgwDC0GAgICAeCANIBRzZ3YiCUF/aiANcSAJciENIBBBAmohECALIQIgDyEJIAxBf2oiDA0ACwNAIAdBAWohByAOKAIAIQwgDkEEaiEOIAxFDQALIAshAiAPIQkMAAsLIAhBgAFqJAAgBguiCwERfyMAQdAAayIHJAACQAJAAkACQAJAAkACQCACQRpJDQAgAS0AAEEfRw0AIAEtAAFBiwFHDQAgAS0AAkEIRw0AIAEtAANBBEcNACABLQAKQQZHDQAgAS0ADEHCAEcNACABLQANQcMARw0AIAEvABAiCEEZSQ0AIAIgCE0NACABIAhqQX1qKAAAQYCABEsNABBqQYABQQgQWCIJRQ0BQQAhCiAHQQA2AgwgByAJNgIIIAdBEDYCBBBqQYABQQgQWCILRQ0CIAdBADYCGCAHIAs2AhQgB0EQNgIQIAEgAhAaIghBAEgNA0EBIQwCQCAIRQ0AEGpBASEKIAhBARBYIgxFDQQLIAcgDDYCICAHIAg2AhwgB0EANgIkAkBBAC0AtJpAQQFGDQBBABAnCwJAAkBBACgCrJpADQBBAEF/NgKsmkBBACgClJpADQYgBvwDIQxBAEF/NgKUmkACQEEAKAKgmkAiCEGAgARPDQAgCCEKAkBBgIAEIAhrIg1BACgCmJpAIAhrTQ0AQZiawAAgCCANECNBACgCoJpAIQoLQQAoApyaQCIOIApqIQ0CQCAIQf//A0YNAAJAQf//AyAIayIPRQ0AIA1BACAP/AsACyAOIAogCGtB//8DaiIKaiENCyANQQA6AABBACAKQQFqNgKgmkALIAT8AyEQIAxBAWohEUEAIQ9BACEOQQAhCgJAA0AgAiAKTQ0BIAIgCmsiDEEaSQ0BIAEgCmoiCC0AAEEfRw0BIAgtAAFBiwFHDQEgCC0AAkEIRw0BIAgtAANBBEcNASAILQAKQQZHDQEgCC0ADEHCAEcNASAILQANQcMARw0BIAgvABAiDUEZSQ0BIAwgDU0NASAIIA1qQX1qKAAAIgxBgIAESw0BIAxBACgCoJpAIhJLDQkgB0EoakGwmsAAIAhBEmogDUFnakEAKAKcmkAiEyAMECggBy0AKA0DIAMgCrigIQYCQCAOIAcoAgRHDQAgB0EEahApIAcoAgghCQsgCSAPaiAGOQMAIAcgDkEBaiIONgIMAkAgBygCGCIIIAcoAhBHDQAgB0EQahApCyAHKAIUIgsgCEEDdGogBDkDACAHIAhBAWoiFDYCGAJAIAwgESAMIBFJGyAMIAYgBWYiFRsiFkEAIBAgChsiEk0NAAJAIBYgEmsiFiAHKAIcIAcoAiQiF2tNDQAgB0EcaiAXIBYQIyAHKAIkIRcLAkAgFkUNACAHKAIgIBdqIBMgEmogFvwKAAALIAcgFyAWajYCJAsgBEEAIAwgEmsiEiASIAxLG7igIQQgD0EIaiEPIAogDWpBAWohCiAVRQ0ACyADIAq4oCEDAkAgBygCBCAORw0AIAdBBGoQKQsgBygCCCAPaiADOQMAIAcgDkEBajYCDAJAIBQgBygCEEcNACAHQRBqECkgBygCFCELCyALIBRBA3RqIAQ5AwAgByAIQQJqNgIYC0EAQQAoApSaQEEBajYClJpAQQBBACgCrJpAQQFqNgKsmkAgACAHKQIcNwIAIAAgBykCEDcCGCAAIAcoAhg2AiAgByAHKAIkNgIwIAcgBykCBDcCNCAAIAcpAzA3AgggByAHKAIMNgI8IAAgBykDODcCEAwIC0HohcAAEDcAC0EAQQAoApSaQEEBajYClJpAQQBBACgCrJpAQQFqNgKsmkBBuIbAAEEUEGIhAiAAQX82AgAgACACNgIEAkAgBygCHCIARQ0AIAcoAiAgAEEBEFMLAkAgBygCECIARQ0AIAsgAEEDdEEIEFMLIAcoAgQiAEUNBiAHKAIIIABBA3RBCBBTDAYLQcyGwABBExBiIQIgAEF/NgIAIAAgAjYCBAwFC0EIQYABEEYAC0EIQYABEEYACyAKIAgQRgALQYiGwAAQNwALQQAgDCASQfiFwAAQEQALIAdB0ABqJAAL6wYBCH8CQAJAIAEgAEEDakF8cSICIABrIgNJDQAgASADayIEQQJ2IgVFDQAgBEEDcSEGQQAhB0EAIQECQCACIABGDQBBACEIQQAhAQJAIAAgAmsiCUF8Sw0AQQAhCEEAIQEDQCABIAAgCGoiAiwAAEG/f0pqIAJBAWosAABBv39KaiACQQJqLAAAQb9/SmogAkEDaiwAAEG/f0pqIQEgCEEEaiIIDQALCyAAIAhqIQIDQCABIAIsAABBv39KaiEBIAJBAWohAiAJQQFqIgkNAAsLIAAgA2ohCQJAIAZFDQAgCSAEQfz///8HcWoiAiwAAEG/f0ohByAGQQFGDQAgByACLAABQb9/SmohByAGQQJGDQAgByACLAACQb9/SmohBwsgByABaiEIA0AgCSEDIAVFDQIgBUHAASAFQcABSRsiB0EDcSEGAkACQCAHQQJ0IgRB8AdxIgENAEEAIQIMAQsgAyABaiEAQQAhAiADIQEDQCABQQxqKAIAIglBf3NBB3YgCUEGdnJBgYKECHEgAUEIaigCACIJQX9zQQd2IAlBBnZyQYGChAhxIAFBBGooAgAiCUF/c0EHdiAJQQZ2ckGBgoQIcSABKAIAIglBf3NBB3YgCUEGdnJBgYKECHEgAmpqamohAiABQRBqIgEgAEcNAAsLIAUgB2shBSADIARqIQkgAkEIdkH/gfwHcSACQf+B/AdxakGBgARsQRB2IAhqIQggBkUNAAsgAyAHQfwBcUECdGoiAigCACIBQX9zQQd2IAFBBnZyQYGChAhxIQECQCAGQQFGDQAgAigCBCIJQX9zQQd2IAlBBnZyQYGChAhxIAFqIQEgBkECRg0AIAIoAggiAkF/c0EHdiACQQZ2ckGBgoQIcSABaiEBCyABQQh2Qf+BHHEgAUH/gfwHcWpBgYAEbEEQdiAIaiEIDAELAkAgAQ0AQQAPCyABQQNxIQJBACEJQQAhCAJAIAFBBEkNACABQXxxIQVBACEIQQAhCQNAIAggACAJaiIBLAAAQb9/SmogAUEBaiwAAEG/f0pqIAFBAmosAABBv39KaiABQQNqLAAAQb9/SmohCCAFIAlBBGoiCUcNAAsgAkUNAQsgACAJaiEBA0AgCCABLAAAQb9/SmohCCABQQFqIQEgAkF/aiICDQALCyAIC/UGAQZ/AkACQAJAAkACQAJAAkACQCAAQXxqIgQoAgAiBUF4cSIGQQRBCCAFQQNxIgcbIAFqSQ0AIAFBJ2ohCAJAIAdFDQAgBiAISw0CCwJAAkAgAkEJSQ0AIAIgAxAOIgINAUEADwtBACECIANBzP97Sw0IQRAgA0ELakF4cSADQQtJGyEBIABBeGohCAJAIAcNACABQYACSQ0HIAhFDQcgBiABTQ0HIAYgAWtBgIAISw0HIAAPCyAIIAZqIQcCQAJAIAYgAU8NACAHQQAoAqieQEYNAQJAIAdBACgCpJ5ARg0AIAcoAgQiBUECcQ0JIAVBeHEiCSAGaiIFIAFJDQkgByAJEA8CQCAFIAFrIgdBEEkNACAEIAEgBCgCAEEBcXJBAnI2AgAgCCABaiIBIAdBA3I2AgQgCCAFaiIFIAUoAgRBAXI2AgQgASAHEA0MCQsgBCAFIAQoAgBBAXFyQQJyNgIAIAggBWoiASABKAIEQQFyNgIEDAgLQQAoApyeQCAGaiIHIAFJDQgCQAJAIAcgAWsiBkEPSw0AIAQgBUEBcSAHckECcjYCACAIIAdqIgEgASgCBEEBcjYCBEEAIQZBACEBDAELIAQgASAFQQFxckECcjYCACAIIAFqIgEgBkEBcjYCBCAIIAdqIgcgBjYCACAHIAcoAgRBfnE2AgQLQQAgATYCpJ5AQQAgBjYCnJ5ADAcLIAYgAWsiBkEPTQ0GIAQgASAFQQFxckECcjYCACAIIAFqIgEgBkEDcjYCBCAHIAcoAgRBAXI2AgQgASAGEA0MBgtBACgCoJ5AIAZqIgcgAUsNBAwGCwJAIAMgASADIAFJGyIDRQ0AIAIgACAD/AoAAAsgBCgCACIDQXhxIgdBBEEIIANBA3EiAxsgAWpJDQIgA0UNBiAHIAhNDQZBzJbAAEEuQfyWwAAQRwALQYyWwABBLkG8lsAAEEcAC0HMlsAAQS5B/JbAABBHAAtBjJbAAEEuQbyWwAAQRwALIAQgASAFQQFxckECcjYCACAIIAFqIgUgByABayIBQQFyNgIEQQAgATYCoJ5AQQAgBTYCqJ5ACyAIRQ0AIAAPCyADEAIiAUUNAQJAIANBfEF4IAQoAgAiAkEDcRsgAkF4cWoiAiADIAJJGyIDRQ0AIAEgACAD/AoAAAsgASECCyAAEAgLIAILoAYBBH8gAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkACQCACQQFxDQAgAkECcUUNASABKAIAIgIgAGohAAJAIAEgAmsiAUEAKAKknkBHDQAgAygCBEEDcUEDRw0BQQAgADYCnJ5AIAMgAygCBEF+cTYCBCABIABBAXI2AgQgAyAANgIADwsgASACEA8LAkACQAJAAkACQAJAAkACQCADKAIEIgJBAnENACADQQAoAqieQEYNAiADQQAoAqSeQEYNAyADIAJBeHEiAhAPIAEgAiAAaiIAQQFyNgIEIAEgAGogADYCACABQQAoAqSeQEcNAUEAIAA2ApyeQA8LIAMgAkF+cTYCBCABIABBAXI2AgQgASAAaiAANgIACyAAQYACSQ0EIAEgABAQQQBBACgCvJ5AQX9qIgE2AryeQCABDQZBACgChJxAIgANAkH/HyEBDAMLQQAgATYCqJ5AQQBBACgCoJ5AIABqIgA2AqCeQCABIABBAXI2AgQCQCABQQAoAqSeQEcNAEEAQQA2ApyeQEEAQQA2AqSeQAsgAEEAKAK0nkAiAk0NBUEAKAKonkAiAEUNBUEAKAKgnkAiBEEpSQ0EQfybwAAhAQNAAkAgASgCACIDIABLDQAgACADIAEoAgRqSQ0GCyABKAIIIQEMAAsLQQAgATYCpJ5AQQBBACgCnJ5AIABqIgA2ApyeQCABIABBAXI2AgQgASAAaiAANgIADwtBACEBA0AgAUEBaiEBIAAoAggiAA0ACyABQf8fIAFB/x9LGyEBC0EAIAE2AryeQA8LAkACQEEAKAKUnkAiA0EBIABBA3Z0IgJxDQBBACADIAJyNgKUnkAgAEH4AXFBjJzAAGoiACEDDAELIABB+AFxIgBBjJzAAGohAyAAQZScwABqKAIAIQALIAMgATYCCCAAIAE2AgwgASADNgIMIAEgADYCCA8LAkACQEEAKAKEnEAiAA0AQf8fIQEMAQtBACEBA0AgAUEBaiEBIAAoAggiAA0ACyABQf8fIAFB/x9LGyEBC0EAIAE2AryeQCAEIAJNDQBBAEF/NgK0nkALC9kFAgh/AX5BK0F/IAAoAggiBkGAgIABcSIHGyEIIAdBFXZBASABGyAFaiEJAkACQCAGQYCAgARxDQBBACECDAELAkACQCADQRBJDQAgAiADEAYhBwwBCwJAIAMNAEEAIQcMAQsgA0EDcSEKQQAhC0EAIQcCQCADQQRJDQAgA0EMcSEMQQAhC0EAIQcDQCAHIAIgC2oiDSwAAEG/f0pqIA1BAWosAABBv39KaiANQQJqLAAAQb9/SmogDUEDaiwAAEG/f0pqIQcgDCALQQRqIgtHDQALIApFDQELIAIgC2ohDQNAIAcgDSwAAEG/f0pqIQcgDUEBaiENIApBf2oiCg0ACwsgByAJaiEJCyAIQS0gARshDAJAAkAgCSAALwEMIgFPDQACQAJAAkAgBkGAgIAIcQ0AIAEgCWshCEEAIQdBACEBAkACQAJAIAZBHXZBA3EOBAIAAQACCyAIIQEMAQsgCEH+/wNxQQF2IQELIAZB////AHEhCSAAKAIEIQsgACgCACEKA0AgB0H//wNxIAFB//8DcU8NAkEBIQ0gB0EBaiEHIAogCSALKAIQEQUARQ0ADAULCyAAIAApAggiDqdBgICA/3lxQbCAgIACcjYCCEEBIQ0gACgCACIKIAAoAgQiCyAMIAIgAxA1DQNBACEHIAEgCWtB//8DcSECA0AgB0H//wNxIAJPDQJBASENIAdBAWohByAKQTAgCygCEBEFAEUNAAwECwtBASENIAogCyAMIAIgAxA1DQIgCiAEIAUgCygCDBEHAA0CQQAhByAIIAFrQf//A3EhAANAIAdB//8DcSICIABJIQ0gAiAATw0DIAdBAWohByAKIAkgCygCEBEFAEUNAAwDCwtBASENIAogBCAFIAsoAgwRBwANASAAIA43AghBAA8LQQEhDSAAKAIAIgcgACgCBCIKIAwgAiADEDUNACAHIAQgBSAKKAIMEQcAIQ0LIA0L+gQBB38CQAJAIAAoAggiA0GAgIDAAXFFDQACQAJAAkACQAJAIANBgICAgAFxRQ0AIAAvAQ4iBA0BQQAhAgwCCwJAIAJBEEkNACABIAIQBiEFDAQLAkAgAg0AQQAhBQwECyACQQNxIQZBACEHQQAhBQJAIAJBBEkNACACQQxxIQRBACEFQQAhBwNAIAUgASAHaiIILAAAQb9/SmogCEEBaiwAAEG/f0pqIAhBAmosAABBv39KaiAIQQNqLAAAQb9/SmohBSAEIAdBBGoiB0cNAAsgBkUNBAsgASAHaiEIA0AgBSAILAAAQb9/SmohBSAIQQFqIQggBkF/aiIGDQAMBAsLIAEgAmohB0EAIQIgASEIIAQhBgNAIAgiBSAHRg0CAkACQCAFLAAAIghBf0wNACAFQQFqIQgMAQsCQCAIQWBPDQAgBUECaiEIDAELIAVBBEEDIAhBb0sbaiEICyAIIAVrIAJqIQIgBkF/aiIGDQALC0EAIQYLIAQgBmshBQsgBSAALwEMIghPDQAgCCAFayEJQQAhBUEAIQQCQAJAAkAgA0EddkEDcQ4EAgABAgILIAkhBAwBCyAJQf7/A3FBAXYhBAsgA0H///8AcSEHIAAoAgQhBiAAKAIAIQACQANAIAVB//8DcSAEQf//A3FPDQFBASEIIAVBAWohBSAAIAcgBigCEBEFAA0DDAALC0EBIQggACABIAIgBigCDBEHAA0BQQAhBSAJIARrQf//A3EhAgNAIAVB//8DcSIEIAJJIQggBCACTw0CIAVBAWohBSAAIAcgBigCEBEFAA0CDAALCyAAKAIAIAEgAiAAKAIEKAIMEQcAIQgLIAgL7QQBCX8jAEEQayIDJAACQAJAAkACQAJAAkAgAkEaSQ0AIAEtAABBH0cNACABLQABQYsBRw0AIAEtAAJBCEcNACABLQADQQRHDQAgAS0ACkEGRw0AIAEtAAxBwgBHDQAgAS0ADUHDAEcNACABLwAQIgRBGUkNACACIARNDQAgASAEakF9aigAAEGAgARLDQBBACEEIAEgAhAaIgVBAEgNBEEBIQYCQCAFRQ0AEGpBASEEIAVBARBZIgZFDQULAkBBAC0AtJpAQQFGDQBBABAnCwJAQQAoAqyaQA0AQQAhB0EAQX82AqyaQEEAIQgDQCACIAhrIglBGkkNBCABIAhqIgQtAABBH0cNBCAELQABQYsBRw0EIAQtAAJBCEcNBCAELQADQQRHDQQgBC0ACkEGRw0EIAQtAAxBwgBHDQQgBC0ADUHDAEcNBCAELwAQIgpBGUkNBCAJIApNDQQgBCAKakF9aigAACIJQYCABEsNBCAJIAdqIgsgCUkNByALIAVLDQcgA0EIakGwmsAAIARBEmogCkFnaiAGIAdqIAkQKCADLQAIDQMgCyEHIAggCmpBAWoiCCACTQ0ACyAIIAIgAkGohsAAEBEAC0HohcAAEDcAC0HMhsAAQRMQYiECIABBfzYCACAAIAI2AgQMAgtBAEEAKAKsmkBBAWo2AqyaQEG4hsAAQRQQYiECIABBfzYCACAAIAI2AgQgBUUNASAGIAVBARBTDAELIAAgBTYCCCAAIAY2AgQgACAFNgIAQQBBACgCrJpAQQFqNgKsmkALIANBEGokAA8LIAQgBRBGAAsgByALIAVBmIbAABARAAvABAEIfyMAQRBrIgQkAAJAAkACQCADQQFxDQAgAi0AACIFDQFBACEFDAILIAAgAiADQQF2IAEoAgwRBwAhBQwBCyABKAIMIQZBACEHA0AgAkEBaiEIAkACQAJAAkACQCAFwEF/Sg0AIAVB/wFxIglBgAFGDQEgCUHAAUcNAyAEIAE2AgQgBCAANgIAIARCoICAgAY3AgggAyAHQQN0aiIFKAIAIAQgBSgCBBEFAEUNAkEBIQUMBgsCQCAAIAggBUH/AXEiBSAGEQcADQAgCCAFaiECDAQLQQEhBQwFCwJAIAAgAkEDaiIFIAIvAAEiAiAGEQcADQAgBSACaiECDAMLQQEhBQwECyAHQQFqIQcgCCECDAELQaCAgIAGIQoCQCAFQQFxRQ0AIAJBBWohCCACKAABIQoLQQAhCQJAAkAgBUECcQ0AQQAhCyAIIQIMAQsgCEECaiECIAgvAAAhCwsCQAJAIAVBBHENACACIQgMAQsgAkECaiEIIAIvAAAhCQsCQAJAIAVBCHENACAIIQIMAQsgCEECaiECIAgvAAAhBwsCQCAFQRBxRQ0AIAMgC0H//wNxQQN0ai8BBCELCwJAIAVBIHFFDQAgAyAJQf//A3FBA3RqLwEEIQkLIAQgCTsBDiAEIAs7AQwgBCAKNgIIIAQgATYCBCAEIAA2AgACQCADIAdBA3RqIgUoAgAgBCAFKAIEEQUARQ0AQQEhBQwDCyAHQQFqIQcLIAItAAAiBQ0AC0EAIQULIARBEGokACAFC4MEAQJ/IAAgAWohAgJAAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAoAgAiAyABaiEBAkAgACADayIAQQAoAqSeQEcNACACKAIEQQNxQQNHDQFBACABNgKcnkAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCACIAE2AgAPCyAAIAMQDwsCQAJAAkAgAigCBCIDQQJxDQAgAkEAKAKonkBGDQIgAkEAKAKknkBGDQQgAiADQXhxIgMQDyAAIAMgAWoiAUEBcjYCBCAAIAFqIAE2AgAgAEEAKAKknkBHDQFBACABNgKcnkAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsCQCABQYACSQ0AIAAgARAQDwsCQAJAQQAoApSeQCICQQEgAUEDdnQiA3ENAEEAIAIgA3I2ApSeQCABQfgBcUGMnMAAaiIBIQIMAQsgAUH4AXEiAUGMnMAAaiECIAFBlJzAAGooAgAhAQsgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBACAANgKonkBBAEEAKAKgnkAgAWoiATYCoJ5AIAAgAUEBcjYCBCAAQQAoAqSeQEcNAEEAQQA2ApyeQEEAQQA2AqSeQAsPC0EAIAA2AqSeQEEAQQAoApyeQCABaiIBNgKcnkAgACABQQFyNgIEIAAgAWogATYCAAvvAgEFf0EAIQICQCABQc3/eyAAQRAgAEEQSxsiAGtPDQAgAEEQIAFBC2pBeHEgAUELSRsiA2pBDGoQAiIBRQ0AIAFBeGohAgJAAkAgAEF/aiIEIAFxDQAgAiEADAELIAFBfGoiBSgCACIGQXhxIAQgAWpBACAAa3FBeGoiAUEAIAAgASACa0EQSxtqIgAgAmsiAWshBAJAIAZBA3FFDQAgACAEIAAoAgRBAXFyQQJyNgIEIAAgBGoiBCAEKAIEQQFyNgIEIAUgASAFKAIAQQFxckECcjYCACACIAFqIgQgBCgCBEEBcjYCBCACIAEQDQwBCyACKAIAIQIgACAENgIEIAAgAiABajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIANBEGpNDQAgACADIAFBAXFyQQJyNgIEIAAgA2oiASACIANrIgNBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASADEA0LIABBCGohAgsgAguJAwEEfyAAKAIMIQICQAJAAkACQCABQYACSQ0AIAAoAhghAwJAAkACQCACIABHDQAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAgJAAkAgACAAKAIcQQJ0QfyawABqIgEoAgBGDQAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCwJAIAIgACgCCCIERg0AIAQgAjYCDCACIAQ2AggPC0EAQQAoApSeQEF+IAFBA3Z3cTYClJ5ADwsgAiADNgIYAkAgACgCECIBRQ0AIAIgATYCECABIAI2AhgLIAAoAhQiAUUNACACIAE2AhQgASACNgIYDwsPC0EAQQAoApieQEF+IAAoAhx3cTYCmJ5AC8cCAQR/QQAhAgJAIAFBCHYiA0UNAEEfIQIgAUGAgIAITw0AIAFBJiADZyICa3ZBAXEgAkEBdHJBPnMhAgsgAEIANwIQIAAgAjYCHCACQQJ0QfyawABqIQMCQEEAKAKYnkBBASACdCIEcQ0AIAMgADYCACAAIAM2AhggACAANgIMIAAgADYCCEEAQQAoApieQCAEcjYCmJ5ADwsCQAJAAkAgAygCACIEKAIEQXhxIAFHDQAgBCECDAELIAFBAEEZIAJBAXZrIAJBH0YbdCEDA0AgBCADQR12QQRxaiIFKAIQIgJFDQIgA0EBdCEDIAIhBCACKAIEQXhxIAFHDQALCyACKAIIIgMgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAM2AggPCyAFQRBqIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AggLpQICAX8BfiMAQSBrIgQkAAJAAkACQCAAIAJLDQAgASACSw0BQRetQiCGIQUgACABTQ0CIAQgADYCCCAEIAE2AgwgBCAFIARBDGqthDcDGCAEIAUgBEEIaq2ENwMQQb6AwAAgBEEQaiADEDEACyAEIAA2AgggBCACNgIMIARBF61CIIYiBSAEQQxqrYQ3AxggBCAFIARBCGqthDcDEEHmgMAAIARBEGogAxAxAAsgBCABNgIIIAQgAjYCDCAEQRetQiCGIgUgBEEMaq2ENwMYIAQgBSAEQQhqrYQ3AxBBn4HAACAEQRBqIAMQMQALIAQgATYCCCAEIAI2AgwgBCAFIARBDGqthDcDGCAEIAUgBEEIaq2ENwMQQZ+BwAAgBEEQaiADEDEAC6cCAQd/IwBBEGsiAiQAQQohAyAAKAIAIgQhBQJAIARB6AdJDQBBCiEDIAQhBQNAIAJBBmogA2oiBkF8aiAFIgAgAEGQzgBuIgVBkM4AbGsiB0H//wNxQeQAbiIIQQF0LwC0mEA7AAAgBkF+aiAHIAhB5ABsa0H//wNxQQF0LwC0mEA7AAAgA0F8aiEDIABB/6ziBEsNAAsLAkACQCAFQQlLDQAgBSEADAELIAJBBmogA0F+aiIDaiAFIAVB//8DcUHkAG4iAEHkAGxrQf//A3FBAXQvALSYQDsAAAsCQAJAIARFDQAgAEUNAQsgAkEGaiADQX9qIgNqIABBAXQtALWYQDoAAAsgAUEBQQFBACACQQZqIANqQQogA2sQCSEDIAJBEGokACADC5oCAQZ/IAAoAgghAgJAAkAgAUGAAU8NAEEBIQMMAQsCQCABQYAQTw0AQQIhAwwBC0EDQQQgAUGAgARJGyEDCwJAIAMgACgCACACa00NACAAIAIgA0EBQQEQIgsgACgCBCACaiEEAkACQCABQYABSQ0AIAFBP3FBgH9yIQUgAUEGdiEGAkAgAUGAEE8NACAEIAU6AAEgBCAGQcABcjoAAAwCCyABQQx2IQcgBkE/cUGAf3IhBgJAIAFB//8DSw0AIAQgBToAAiAEIAY6AAEgBCAHQeABcjoAAAwCCyAEIAU6AAMgBCAGOgACIAQgB0E/cUGAf3I6AAEgBCABQRJ2QXByOgAADAELIAQgAToAAAsgACADIAJqNgIIQQALggIBB38jAEEQayICJAACQAJAAkACQCABDQAgAEUNASAAQXhqIgEoAgBBAUcNAiAAKAIgIQMgACgCHCEEIAAoAhQhBSAAKAIQIQYgACgCCCEHIAAoAgQhCCABQQA2AgACQCABQX9GDQAgAEF8aiIAIAAoAgBBf2oiADYCACAADQAgAUEwQQQQUwsCQCAIRQ0AIAcgCEEBEFMLAkAgBkUNACAFIAZBA3RBCBBTCyAERQ0DIAMgBEEDdEEIEFMMAwsgAEUNACAAQXhqIgAgACgCAEF/aiIBNgIAIAIgADYCDCABDQIgAkEMahAlDAILEFsAC0HwhsAAQT8QWgALIAJBEGokAAuKAgEDfyMAQSBrIgUkAAJAAkACQAJAAkACQAJAAkBBARAvQf8BcQ4DBAEAAQtBACgC7JpAIgZBf0wNAyAGQQFqIgcgBkgNBEEAIAc2AuyaQEEAKALwmkBFDQEgBUEIaiAAIAEoAhQRBAAgBSAEOgAdIAUgAzoAHCAFIAI2AhggBSAFKQMINwIQQQAoAvCaQCAFQRBqQQAoAvSaQCgCFBEEAAwCCyAFIAAgASgCGBEEAAALQX8gBRBCC0EAQQAoAuyaQCIFQX9qNgLsmkAgBUEATA0CQQBBADoA5JpAIAMNAwsAC0GMl8AAQRxBqJfAABAyAAtB2JfAAEHNAEGAmMAAEDEACyAAIAEQVAAL2gEBAX8jAEEwayIHJAAgB0EMaiABIAIgAyAEIAUgBhAFAkAgAkUNACABIAJBARBTCwJAAkACQCAHKAIMQX9HDQBBASEBIAcoAhAhAgwBCxBqQTBBBBBYIgJFDQFBACEBIAJBADYCCCACQoGAgIAQNwIAIAIgBykCDDcCDCACIAcpAhQ3AhQgAiAHKQIcNwIcIAIgBykCJDcCJCACIAcoAiw2AiwgAkEIaiECCyAAIAE2AgggACACQQAgARs2AgQgAEEAIAIgARs2AgAgB0EwaiQADwtBBEEwEF8AC8gBAQN/IwBBEGsiAyQAIANBBGogASACEAsCQCACRQ0AIAEgAkEBEFMLAkACQAJAIAMoAgQiBEF/Rw0AQQEhBEEAIQEgAygCCCEFQQAhAgwBCyADKAIIIQUCQAJAIAQgAygCDCICSw0AIAUhAQwBCwJAIAINAEEBIQEgBSAEQQEQUwwBCyAFIARBASACEE4iAUUNAgtBACEFQQAhBAsgACAENgIMIAAgBTYCCCAAIAI2AgQgACABNgIAIANBEGokAA8LQQEgAhBGAAvnAQICfwF+IwBBIGsiAiQAAkAgASgCAEF/Rw0AIAEoAgwhAyACQQA2AhggAkKAgICAEDcCECACQRBqQZyVwAAgAygCACIDKAIAIAMoAgQQDBogAiACKAIYIgM2AgggAiACKQIQIgQ3AwAgASADNgIIIAEgBDcCAAsgASgCCCEDIAFBADYCCCABKQIAIQQgAUKAgICAEDcCACACIAM2AhggAiAENwMQEGoCQEEMQQQQWCIBDQBBBEEMEF8ACyABIAIoAhg2AgggASACKQMQNwIAIABByJfAADYCBCAAIAE2AgAgAkEgaiQAC7gBAQR/AkAgAkUNACACQQNxIQNBACEEAkAgAkEESQ0AIAJBfHEhBUEAIQQDQCAAIARqIgIgASAEaiIGLQAAOgAAIAJBAWogBkEBai0AADoAACACQQJqIAZBAmotAAA6AAAgAkEDaiAGQQNqLQAAOgAAIAUgBEEEaiIERw0ACwsgA0UNACABIARqIQIgACAEaiEEA0AgBCACLQAAOgAAIAJBAWohAiAEQQFqIQQgA0F/aiIDDQALCyAAC7kBAQV/QQAhAkEAIQMCQANAIAEgA2siBEEaSQ0BIAAgA2oiBS0AAEEfRw0BIAUtAAFBiwFHDQEgBS0AAkEIRw0BIAUtAANBBEcNASAFLQAKQQZHDQEgBS0ADEHCAEcNASAFLQANQcMARw0BIAUvABAiBkEZSQ0BIAQgBk0NASAFIAZqQX1qKAAAIgVBgIAESw0BIAUgAmohAiADIAZqQQFqIgMgAU0NAAsgAyABIAFB4IbAABARAAsgAgvFAQEFfwJAAkACQAJAIAFFDQAgAUF4aiICIAIoAgAiA0EBaiIENgIAIARFDQEgASgCAA0CIAEoAhghBCABQQA2AhggASgCFCEFIAEoAhAhBiABQoCAgICAATcCECACIAM2AgACQAJAIAYgBEsNACAFIQEMAQsgBkEDdCECAkAgBA0AQQghASAFIAJBCBBTDAELIAUgAkEIIARBA3QiBhBOIgFFDQQLIAAgBDYCBCAAIAE2AgAPCxBbCwALEFwAC0EIIAYQRgALxQEBBX8CQAJAAkACQCABRQ0AIAFBeGoiAiACKAIAIgNBAWoiBDYCACAERQ0BIAEoAgANAiABKAIkIQQgAUEANgIkIAEoAiAhBSABKAIcIQYgAUKAgICAgAE3AhwgAiADNgIAAkACQCAGIARLDQAgBSEBDAELIAZBA3QhAgJAIAQNAEEIIQEgBSACQQgQUwwBCyAFIAJBCCAEQQN0IgYQTiIBRQ0ECyAAIAQ2AgQgACABNgIADwsQWwsACxBcAAtBCCAGEEYAC7UBAQN/AkAgAkUNACACQQdxIQNBACEEAkAgAkEISQ0AIAJBeHEhBUEAIQQDQCAAIARqIgIgAToAACACQQdqIAE6AAAgAkEGaiABOgAAIAJBBWogAToAACACQQRqIAE6AAAgAkEDaiABOgAAIAJBAmogAToAACACQQFqIAE6AAAgBSAEQQhqIgRHDQALCyADRQ0AIAAgBGohAgNAIAIgAToAACACQQFqIQIgA0F/aiIDDQALCyAAC7gBAQV/AkACQAJAAkAgAUUNACABQXhqIgIgAigCACIDQQFqIgQ2AgAgBEUNASABKAIADQIgASgCDCEEIAFBADYCDCABKAIIIQUgASgCBCEGIAFCgICAgBA3AgQgAiADNgIAAkACQCAGIARLDQAgBSEBDAELAkAgBA0AQQEhASAFIAZBARBTDAELIAUgBkEBIAQQTiIBRQ0ECyAAIAQ2AgQgACABNgIADwsQWwsACxBcAAtBASAEEEYAC6oBAgJ/AX5BASEGQQQhBwJAAkAgBa0gA61+IghCIIinRQ0AQQAhAwwBCwJAIAinIgNBgICAgHggBGtNDQBBACEDDAELAkACQAJAAkAgAUUNACACIAUgAWwgBCADEE4hBwwBCwJAIAMNACAEIQcMAgsQaiADIAQQWCEHCyAHDQAgACAENgIEDAELIAAgBzYCBEEAIQYLQQghBwsgACAHaiADNgIAIAAgBjYCAAuqAQICfwF+QQEhBkEEIQcCQAJAIAWtIAOtfiIIQiCIp0UNAEEAIQMMAQsCQCAIpyIDQYCAgIB4IARrTQ0AQQAhAwwBCwJAAkACQAJAIAFFDQAgAiAFIAFsIAQgAxBOIQcMAQsCQCADDQAgBCEHDAILEGogAyAEEFghBwsgBw0AIAAgBDYCBAwBCyAAIAc2AgRBACEGC0EIIQcLIAAgB2ogAzYCACAAIAY2AgALtQEBAn8CQAJAIAJFDQBBAC0AwZ5AIQNBAEEBOgDBnkBB0J7AACEEQYCAxABB0J7AAE0NACACQYCAxABB0J7AAGtLDQAgA0H/AXENAEGAgMQAQdCewABrIQIMAQtBACEEAkAgAkEQdiACQf//A3FBAEdqIgJAACIDQX9HDQBBACECDAELIAJBEHQiAkFwaiACIANBEHQiBEEAIAJrRhshAgsgAEEANgIIIAAgAjYCBCAAIAQ2AgALlQEBAX8jAEEQayIFJAACQCACIAFqIgEgAk8NAEEAQQAQRgALIAVBBGogACgCACICIAAoAgQgASACQQF0IgIgASACSxsiAkEIQQQgBEEBRhsiASACIAFLGyICIAMgBBAgAkAgBSgCBEEBRw0AIAUoAgggBSgCDBBGAAsgBSgCCCEEIAAgAjYCACAAIAQ2AgQgBUEQaiQAC4sBAQF/IwBBEGsiAyQAAkAgAiABaiIBIAJPDQBBAEEAEEYACyADQQRqIAAoAgAiAiAAKAIEIAEgAkEBdCICIAEgAksbIgJBCCACQQhLGyICQQFBARAfAkAgAygCBEEBRw0AIAMoAgggAygCDBBGAAsgAygCCCEBIAAgAjYCACAAIAE2AgQgA0EQaiQAC48BAgJ/AX4jAEEgayICJAACQCABKAIAQX9HDQAgASgCDCEDIAJBADYCHCACQoCAgIAQNwIUIAJBFGpBnJXAACADKAIAIgMoAgAgAygCBBAMGiACIAIoAhwiAzYCECACIAIpAhQiBDcDCCABIAM2AgggASAENwIACyAAQciXwAA2AgQgACABNgIAIAJBIGokAAt8AQF/AkAgACgCACIAKAIMIgFFDQAgACgCECABQQEQUwsCQCAAKAIYIgFFDQAgACgCHCABQQN0QQgQUwsCQCAAKAIkIgFFDQAgACgCKCABQQN0QQgQUwsCQCAAQX9GDQAgACAAKAIEQX9qIgE2AgQgAQ0AIABBMEEEEFMLC4QBAQN/IwBBEGsiASQAAkAgACgCACICKAIEIgNBAXFFDQAgAigCACECIAEgA0EBdjYCBCABIAI2AgAgAUG0lcAAIAAoAgQgACgCCCIALQAIIAAtAAkQFQALIAFBfzYCACABIAA2AgwgAUHQlcAAIAAoAgQgACgCCCIALQAIIAAtAAkQFQALkAEBAX8CQAJAIABFDQAgACgCACEBIABBADYCACABQQFxRQ0AIAAoAgghASAAKAIEIQAMAQtBACEAEEEhAQsCQAJAAkBBAC0AtJpAQX9qDgIBAAILQYCAwABB/QBB2IXAABAxAAtBAEECOgC0mkBBsJrAABBjC0EAQQE6ALSaQEEAIAE2ArCaQEEAIAA2AqyaQAuEAQECfyMAQRBrIgYkAEEAIQcgBkEANgIMAkACQAJAAkACQCABKAIAIAIgAyAEIAUgBkEMahBJDgQBAgADAAtBvIjAAEHsAEGoicAAEDgACyAAIAYoAgw2AgQMAgsgAEEAOgABQQEhBwwBC0EBIQcgAEEBOgABCyAAIAc6AAAgBkEQaiQAC2sBA38jAEEQayIBJAAgAUEEaiAAKAIAIgIgACgCBCACQQF0IgJBBCACQQRLGyICQQhBCBAfAkAgASgCBEEBRw0AIAEoAgggASgCDBBGAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQAC2ABAn8CQAJAIABBfGooAgAiA0F4cSIEQQRBCCADQQNxIgMbIAFqSQ0AAkAgA0UNACAEIAFBJ2pLDQILIAAQCA8LQYyWwABBLkG8lsAAEEcAC0HMlsAAQS5B/JbAABBHAAtaAQF/AkACQAJAIAIgACgCACAAKAIIIgNrTQ0AIAAgAyACQQFBARAiIAAoAgghAwwBCyACRQ0BCyACRQ0AIAAoAgQgA2ogASAC/AoAAAsgACADIAJqNgIIQQALWQECfyABKAIAIQIgAUEANgIAAkACQCACRQ0AIAEoAgQhAxBqQQhBBBBYIgFFDQEgASADNgIEIAEgAjYCACAAQbiXwAA2AgQgACABNgIADwsAC0EEQQgQXwALXQECf0EAIQECQCAAKAIAQQxHDQBBACEBQazaACAAKAIEIgJBACgC2JpAIAIbEQMAIgJFDQAgAkEAQazaABAdIgEgACgCCCIAQQAoAtyaQCAAGzYCqFogASEBCyABC0UAAkACQCABQQlJDQAgASAAEA4hAQwBCyAAEAIhAQsCQCABRQ0AIAFBfGotAABBA3FFDQAgAEUNACABQQAgAPwLAAsgAQtSAQJ/QQAhAUEAQQAoAviaQCICQQFqNgL4mkACQCACQQBIDQBBASEBQQAtAOSaQA0AQQAgADoA5JpAQQBBACgC4JpAQQFqNgLgmkBBAiEBCyABC0cBAn8gASgCBCECIAEoAgAhAxBqAkBBCEEEEFgiAQ0AQQRBCBBfAAsgASACNgIEIAEgAzYCACAAQbiXwAA2AgQgACABNgIACzsBAX8jAEEgayIDJAAgAyABNgIQIAMgADYCDCADQQE7ARwgAyACNgIYIAMgA0EMajYCFCADQRRqEDoACzkBAX8jAEEQayIDJAAgAyABNgIEIAMgADYCACADQRmtQiCGIAOthDcDCEHUgcAAIANBCGogAhAxAAs0AAJAIAFpQQFHDQAgAEGAgICAeCABa0sNAAJAIABFDQAQaiAAIAEQWCIBRQ0BCyABDwsACzwAAkAgACgCAEF/Rg0AIAEgACgCBCAAKAIIEE0PCyABKAIAIAEoAgQgACgCDCgCACIAKAIAIAAoAgQQDAs2AAJAIAJBf0YNACAAIAIgASgCEBEFAEUNAEEBDwsCQCADDQBBAA8LIAAgAyAEIAEoAgwRBwALNQEBfwJAIABFDQACQCABKAIAIgJFDQAgACACEQIACyABKAIEIgJFDQAgACACIAEoAggQUwsLKwEBfyMAQRBrIgEkACABQRitQiCGIAFBD2qthDcDAEHUgcAAIAEgABAxAAsqAQF/IwBBEGsiAyQAIAMgAjYCDCADIAE2AgggAyAANgIEIANBBGoQZAALLQEBfyMAQRBrIgEkACABIAApAgA3AgggAUEIakGAlcAAIAAoAghBAUEAEBUACywCAX8BfiMAQRBrIgEkACAAKQIAIQIgASAANgIMIAEgAjcCBCABQQRqEGYACyMBAX8jAEEQayICJAAgAiABNgIMIAIgADYCCCACQQhqEGUACyAAAkAgASgCAEUNACAAQbiXwAA2AgQgACABNgIADwsACx4BAX8CQCAAKAIAIgJFDQAgASACIAAoAgQQTQ8LAAsbAQF/EGogAEEEakEEEFgiASAANgIAIAFBBGoLHgEBfwJAIAAoAgAiAUEBSA0AIAAoAgQgAUEBEFMLCx4AIAAoAgAgACgCBEEAKALomkAiAEEEIAAbEQQAAAsjAQF/AkBBhIrAABAtIgANAEG4icAAQTpB9InAABA4AAsgAAsXAAJAIABBf2pBfk8NACABIABBARBTCwscAQF/AkAgACgCACIBRQ0AIAAoAgQgAUEBEFMLCxcAAkAgAUEJSQ0AIAEgABAODwsgABACCxUAIABBfGoiACAAKAIAQQRqQQQQUwsUAAJAIABFDQAgACABEF8ACxBWAAsRACAAIAFBAXRBAXIgAhAxAAsSAAJAIAFFDQAgACABIAIQUwsLEgAgACABIAIgAyAEQQAgBRADCxUAAkAgAEUNACAAIAAoAqhaEQIACwsaACAAQQApAoSWQDcCCCAAQQApAvyVQDcCAAsaACAAQQApAvSVQDcCCCAAQQApAuyVQDcCAAsWACAAKAIAIAEgAiAAKAIEKAIMEQcACw0AIAAgASACIAMQBw8LFABBACAANgK8mkBBAEEBNgK4mkALEwAgAEG4l8AANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBBNCxAAIAEgACgCACAAKAIEEAoLCwAgACABIAIQKg8LCgAgACABEGkaAAsPACAAQZyVwAAgASACEAwLEQBBkJjAAEEjQaSYwAAQMQALCwAgACMAaiQAIwALCQAgACABEEQPCwkAIAAgARAuDwsJACAAIAEQYQALDABBr4fAAEEbEFoACw0AQcqHwABBzwAQWgALCQAgASAAEDsACwwAIAAgASkCADcDAAsJACABIAAQXQALDQAgAUH8mcAAQRgQCgsIACAAIAEQAAsIACAAIAEQAQsJACAAKAIAEEoLBwAgABA5AAsHACAAEEAACwcAIAAQJgALCwBBAEEBOgDAnkALCQAgAEEANgIACwUAEGsACwMADwsDAAALAgALC74aAgBBgIDAAAuUGkF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAABJyYW5nZSBzdGFydCBpbmRleCDAIiBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCDAABByYW5nZSBlbmQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAvcnVzdGMvNDhhMjI5Y2VhZWZkNDk4NWM1MDk5MGIxNDExNmI2ZDg1NmFmMDk4NS9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEyNi9zcmMvZXh0ZXJucmVmLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjEzL3NyYy9kbG1hbGxvYy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJkZWZsYXRlci0xLjI1LjIvc3JjL2xpYi5ycwAA1gAQAF4AAABrAAAADQAAAMwCEAAKAAAAHAAAACQAAADMAhAACgAAAMIAAAApAAAAzAIQAAoAAAC2AAAAJwAAAMwCEAAKAAAAcQAAABwAAADMAhAACgAAAG0AAABBAAAAZGVjb21wcmVzc2lvbiBmYWlsZWRpbnZhbGlkIGJnemYgaGVhZGVyAMwCEAAKAAAATAAAAD0A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",BA=class A{static __wrap(t){let e=Object.create(A.prototype);return e.__wbg_ptr=t,yn.register(e,e.__wbg_ptr,e),e}__destroy_into_raw(){let t=this.__wbg_ptr;return this.__wbg_ptr=0,yn.unregister(this),t}free(){let t=this.__destroy_into_raw();S.__wbg_chunksliceresult_free(t,0)}take_buffer(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_buffer(r,this.__wbg_ptr);var t=J().getInt32(r+0,!0),e=J().getInt32(r+4,!0),n=bn(t,e).slice();return S.__wbindgen_export(t,e*1,1),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}take_cpositions(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_cpositions(r,this.__wbg_ptr);var t=J().getInt32(r+0,!0),e=J().getInt32(r+4,!0),n=Nn(t,e).slice();return S.__wbindgen_export(t,e*8,8),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}take_dpositions(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_dpositions(r,this.__wbg_ptr);var t=J().getInt32(r+0,!0),e=J().getInt32(r+4,!0),n=Nn(t,e).slice();return S.__wbindgen_export(t,e*8,8),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}};Symbol.dispose&&(BA.prototype[Symbol.dispose]=BA.prototype.free);function kn(A){try{let i=S.__wbindgen_add_to_stack_pointer(-16),s=Mn(A,S.__wbindgen_export2),I=Re;S.decompress_all(i,s,I);var t=J().getInt32(i+0,!0),e=J().getInt32(i+4,!0),n=J().getInt32(i+8,!0),r=J().getInt32(i+12,!0);if(r)throw Fn(n);var o=bn(t,e).slice();return S.__wbindgen_export(t,e*1,1),o}finally{S.__wbindgen_add_to_stack_pointer(16)}}function Tr(A,t,e,n,r){try{let I=S.__wbindgen_add_to_stack_pointer(-16),a=Mn(A,S.__wbindgen_export2),g=Re;S.decompress_chunk_slice(I,a,g,t,e,n,r);var o=J().getInt32(I+0,!0),i=J().getInt32(I+4,!0),s=J().getInt32(I+8,!0);if(s)throw Fn(i);return BA.__wrap(o)}finally{S.__wbindgen_add_to_stack_pointer(16)}}function Or(A,t){let e=Error(Sn(A,t));return Xr(e)}function Zr(A,t){throw new Error(Sn(A,t))}var yn=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(A=>S.__wbg_chunksliceresult_free(A,1));function Xr(A){kA===P.length&&P.push(P.length+1);let t=kA;return kA=P[t],P[t]=A,t}function Vr(A){A<1028||(P[A]=kA,kA=A)}function Nn(A,t){return A=A>>>0,jr().subarray(A/8,A/8+t)}function bn(A,t){return A=A>>>0,xe().subarray(A/1,A/1+t)}var cA=null;function J(){return(cA===null||cA.buffer.detached===!0||cA.buffer.detached===void 0&&cA.buffer!==S.memory.buffer)&&(cA=new DataView(S.memory.buffer)),cA}var XA=null;function jr(){return(XA===null||XA.byteLength===0)&&(XA=new Float64Array(S.memory.buffer)),XA}function Sn(A,t){return $r(A>>>0,t)}var VA=null;function xe(){return(VA===null||VA.byteLength===0)&&(VA=new Uint8Array(S.memory.buffer)),VA}function Wr(A){return P[A]}var P=new Array(1024).fill(void 0);P.push(void 0,null,!0,!1);var kA=P.length;function Mn(A,t){let e=t(A.length*1,1)>>>0;return xe().set(A,e/1),Re=A.length,e}function Fn(A){let t=Wr(A);return Vr(A),t}var jA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});jA.decode();var zr=2146435072,Se=0;function $r(A,t){return Se+=t,Se>=zr&&(jA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),jA.decode(),Se=t),jA.decode(xe().subarray(A,A+t).slice())}var Re=0,S;function xn(A){S=A}var QA=null,Me=null;async function Ai(){return QA||(Me||(Me=(async()=>{let t=await(await fetch(Kr)).arrayBuffer(),{instance:e}=await WebAssembly.instantiate(t,{"./bgzf_wasm_bg.js":Fe});return QA=e.exports,xn(QA),QA})()),Me)}async function Rn(A){return QA||await Ai(),kn(A)}var ei=26;function Gn(A){return A[0]===31&&A[1]===139}function ti(A){return A.length>=ei&&Gn(A)&&A[2]===8&&A[3]===4&&A[10]===6&&A[12]===66&&A[13]===67}function vn(A){return A instanceof Error?A.message:`${A}`}async function Jn(A){if(typeof DecompressionStream<"u"){let t=new Blob([A]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}else return pn(A,void 0)}function ni(A){return vn(A).includes("invalid gzip header")?new Error("problem decompressing block: incorrect gzip header check",{cause:A}):A}async function Ln(A){if(A.length===0)return new Uint8Array(0);if(!ti(A)){if(Gn(A))return Jn(A);throw new Error("problem decompressing block: not a valid bgzf or gzip block")}try{return await Rn(A)}catch(t){if(vn(t).includes("invalid bgzf header"))return Jn(A);throw ni(t)}}var oi=10,ri=32*1024*1024;function ii(A){let t=0,e=[],n=()=>{t--,e.shift()?.()};return async r=>{t>=A&&await new Promise(o=>{e.push(o)}),t++;try{return await r()}finally{n()}}}function ai(A,t,e){let n=[],r=A.length,o=0;for(;o<r;){let i=o+1;for(;i<r&&t[i]-t[o]<ri;)i+=1;n.push({compressedStart:A[o],compressedEnd:i<r?A[i]:e??A[r-1]+65536,uncompressedStart:t[o]}),o=i}return n}function si(A,t,e,n){let r=Math.max(0,e-t),o=Math.min(n,t+A.length)-t;return r<A.length?A.subarray(r,o):new Uint8Array(0)}var CA=class{filehandle;gzi;limit;constructor({filehandle:t,gziFilehandle:e,blockConcurrency:n=oi}){this.filehandle=t,this.gzi=new mA({filehandle:e}),this.limit=ii(n)}async read(t,e){let{compressed:n,uncompressed:r,nextCompressedPosition:o}=await this.gzi.getRelevantBlocksForRead(t,e);if(n.length===0)return new Uint8Array(0);let i=e+t,s=ai(n,r,o),I=await Promise.all(s.map(a=>this.limit(async()=>{let g=await this.filehandle.read(a.compressedEnd-a.compressedStart,a.compressedStart);return si(await Ln(g),a.uncompressedStart,e,i)})));return Dn(I)}};var _n=x(Uo());async function qn({location:A,name:t}){let e=o=>(0,_n.openLocation)({uri:o,locationType:"UriLocation"}),n=await e(`${A.uri}.idx`).readFile("utf8"),r=gi(n,t);if(r){let i=await new CA({filehandle:e(A.uri),gziFilehandle:e(`${A.uri}.gzi`)}).read(r.length,r.offset);return new TextDecoder().decode(i).trim()}}var Un=A=>A.replace(/\.\d+$/,"");function gi(A,t){let e=Un(t);for(let n of A.split(`
11
- `)){let[r,o,i]=n.split(" ");if(r&&Un(r)===e)return{offset:Number(o),length:Number(i)}}}var Yn=x(fA());function Hn({model:A}){let{assemblyManager:t,hovered:e}=(0,Yn.getSession)(A),{transcriptToMsaMap:n,connectedView:r,mafRegion:o}=A;if(!r?.initialized||!qe(e)||!MA(A))return;let{coord:i,refName:s}=e.hoverPosition,I=i-1,a=t.get(o?.assemblyName??r.assemblyNames[0]??""),g=Q=>(a?.initialized?a.getCanonicalRefName(Q):void 0)??Q,d=g(s);if(o)return d!==g(o.refName)||!r.assemblyNames.includes(o.assemblyName)||I<o.start||I>=o.end?void 0:_e(A,I-o.start);if(n&&d===g(n.refName)){let Q=n.g2p[I];if(Q!==void 0)return xA(A,Q)}}var Ii="jbrowse-msaview-domain-cache",WA="domains",ci=1,Pn=tA(Ii,ci,A=>{A.objectStoreNames.contains(WA)||A.createObjectStore(WA,{keyPath:"accession"})});function Kn(A){return nA("domain cache read",async()=>{let e=(await Pn()).transaction(WA,"readonly"),n=await Promise.all(A.map(r=>e.store.get(r)));return await e.done,n},[])}function Tn(A){return nA("domain cache write",async()=>{let e=(await Pn()).transaction(WA,"readwrite");for(let n of A)await e.store.put(n);await e.done},void 0)}function V(A,t){let e=new RegExp(`<${t}>(.*?)</${t}>`,"s").exec(A)?.[1];return e===void 0?void 0:We(e)}function Qi(A){let t={},e=/<GBQualifier>([\s\S]*?)<\/GBQualifier>/g,n;for(;(n=e.exec(A))!==null;){let r=V(n[1],"GBQualifier_name"),o=V(n[1],"GBQualifier_value");r&&o!==void 0&&t[r]===void 0&&(t[r]=o)}return t}function Bi(A){let t=[],e=[],n=/<GBInterval>([\s\S]*?)<\/GBInterval>/g,r;for(;(r=n.exec(A))!==null;){let o=r[1],i=V(o,"GBInterval_from"),s=V(o,"GBInterval_to"),I=V(o,"GBInterval_point");i&&s?(t.push(Number(i)),e.push(Number(s))):I&&(t.push(Number(I)),e.push(Number(I)))}return t.length>0?{start:Math.min(...t),end:Math.max(...e)}:void 0}var Ci=2;function Ei(A){let t=V(A,"GBFeature_key"),e=Qi(A),n=e.db_xref,r=Bi(A);if((t==="Region"||t==="Site")&&n?.startsWith("CDD:")&&r&&r.end-r.start+1>=Ci){let o=n.replace("CDD:",""),i=t==="Region",s=e.note?.split(/[[(]/)[0]?.trim(),I=i?e.region_name??o:s||e.site_type||"site",a=i?o:`${o}:${I}`;return{signature:{entry:{name:I,description:e.note??I,accession:a}},locations:[r]}}}function di(A){let t=new Map,e=/<GBSeq>([\s\S]*?)<\/GBSeq>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=[],i=/<GBFeature>([\s\S]*?)<\/GBFeature>/g,s;for(;(s=i.exec(r))!==null;){let I=Ei(s[1]);I&&o.push(I)}for(let I of[V(r,"GBSeq_accession-version"),V(r,"GBSeq_primary-accession")])I&&t.set(I,o)}return t}async function On(A,t){let e=[...new Set(A)].filter(Boolean),n=new Map,r=await Kn(e),o=[];e.forEach((I,a)=>{let g=r[a];g?n.set(I,g.matches):o.push(I)});let i=[],s=100;for(let I=0;I<o.length;I+=s){let a=o.slice(I,I+s),g;try{g=await je(Ve({db:"protein",id:a.join(","),rettype:"gp",retmode:"xml"}),{signal:t})}catch(Q){if(R(Q))throw Q;console.warn("[msaview-domains] efetch failed, keeping what loaded:",Q);break}let d=di(g);for(let Q of a){let c=d.get(Q);c!==void 0&&(n.set(Q,c),i.push({accession:Q,matches:c}))}}return i.length>0&&await Tn(i),n}async function Zn(A,t){let e=Object.entries(A.rowData).flatMap(([o,i])=>i?.Accession?[{rowName:o,accession:i.Accession}]:[]);if(e.length===0)throw new Error("No NCBI accessions found in alignment rows");let n=await On(e.map(o=>o.accession),t),r=e.flatMap(({rowName:o,accession:i})=>(n.get(i)??[]).flatMap(({signature:s,locations:I})=>s.entry?I.map(({start:a,end:g})=>({id:o,accession:s.entry.accession,name:s.entry.name,description:s.entry.description,start:a,end:g})):[]));if(r.length===0)throw new Error("No CDD domain annotations found for these proteins");A.setAnnotations(r)}var fi="jbrowse-msaview-data",ui=1,EA="msa-data",Je=tA(fi,ui,A=>{A.objectStoreNames.contains(EA)||A.createObjectStore(EA,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1})});function Xn(){return`msa-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function Vn(A,t){try{let e=await Je(),n={...t,id:A,timestamp:Date.now()};return await e.put(EA,n),!0}catch(e){return console.warn("Failed to store MSA data:",e),!1}}async function jn(A){let t=await Je(),e=await t.get(EA,A);if(!e)return;try{await t.put(EA,{...e,timestamp:Date.now()})}catch(i){console.warn("Failed to refresh MSA data timestamp:",i)}let{id:n,timestamp:r,...o}=e;return o}async function Wn(A=10080*60*1e3){try{let t=await Je(),e=Date.now()-A,o=await t.transaction(EA,"readwrite").store.index("timestamp").openCursor(IDBKeyRange.upperBound(e)),i=0;for(;o;)await o.delete(),i++,o=await o.continue();return i}catch(t){return console.warn("Failed to cleanup old MSA data:",t),0}}var zn=x(fA()),$n=x(GA());function li(A){if(!(A.rows.length<2))try{A.calculateNeighborJoiningTreeFromMSA()}catch(t){console.error(t);try{(0,zn.getSession)(A).notify(`The alignment loaded, but no tree was built. ${t instanceof Error?t.message:String(t)}`,"warning")}catch(e){console.error(e)}}}function Ao(A){(0,$n.untracked)(()=>{hi(A)})}function hi({self:A,message:t,launch:e,onLaunched:n}){A.launchController?.abort();let r=new AbortController,{signal:o}=r;A.setLaunchController(r);let i=I=>{o.aborted||I()},s={signal:o,act:i,onProgress:I=>{i(()=>{A.setProgress(I)})},onRid:I=>{i(()=>{A.setRid(I)})}};(async()=>{try{i(()=>{A.setProgress(t),A.setError(void 0)});let{warnings:I=[],...a}=await e(s);i(()=>{A.setData(a);for(let g of I)A.addWarning(g);n()}),a.tree||i(()=>{li(A)})}catch(I){R(I)||(i(()=>{A.setError(I)}),console.error(I))}finally{i(()=>{A.setProgress(""),A.launchController===r&&A.setLaunchController(void 0)})}})()}function mi(A){let t=A;return t.type==="ProteinView"&&Array.isArray(t.structures)}function eo(A){return A.filter(mi)}function to(A){let t=A.strand,e=A.refName;if(t!==-1&&t!==1)throw new Error(`Invalid strand value: ${t}. Expected 1 or -1.`);if(!e)throw new Error("refName is required");let n=new Map;for(let I of A.subfeatures??[])if(I.type==="CDS"&&I.start<I.end){let a=`${I.start}-${I.end}`;n.has(a)||n.set(a,I)}let r=[...n.values()].sort((I,a)=>t*(I.start-a.start)),o={},i={},s={};if(r.length!==0){let a=(3-(r[0]?.phase??0))%3,g=-1;for(let d of r){let Q=d.end-d.start;for(let c=0;c<Q;c++){let E=t===1?d.start+c:d.end-1-c,m=Math.floor(a++/3);o[E]=m,m!==g?(i[m]=E,s[m]=[E],g=m):s[m].push(E)}}}return{g2p:o,p2g:i,p2gCodon:s,refName:e,strand:t}}function no(A,t){let e=A[t];if(e===void 0)return;let n=[...e].sort((o,i)=>o-i),r=[];for(let o of n){let i=r.at(-1);i?.[1]===o?i[1]=o+1:r.push([o,o+1])}return r}var wi=1e6;function Ge(A){return typeof A=="object"&&A!==null}function oo(A){return Number.isSafeInteger(A)}function ro(A){return Ge(A)&&typeof A.type=="string"&&A.type.toLowerCase()==="cds"&&oo(A.start)&&oo(A.end)&&A.start<A.end}function pi(A){let t=Number(A);return t===1||t===2?t:0}function Di(A){let{subfeatures:t}=A,e=(Array.isArray(t)?t:[]).filter(ro);return e.length>0?e:ro(A)?[A]:[]}function yi(A){if(!Ge(A))return{reason:"it is not a feature"};let{refName:t,strand:e}=A;if(typeof t!="string"||!t)return{reason:"it has no refName"};if(e!==1&&e!==-1)return{reason:`its strand is ${JSON.stringify(e)}, not 1 or -1`};let n=Di(A).map(o=>({refName:t,type:"CDS",start:o.start,end:o.end,phase:pi(o.phase)}));if(n.length===0)return{reason:"it has no CDS with numeric start < end"};let r=n.reduce((o,i)=>o+i.end-i.start,0);return r>wi?{reason:`its CDS covers ${r} bases, more than any real transcript`}:{transcript:{refName:t,strand:e,start:Math.min(...n.map(o=>o.start)),end:Math.max(...n.map(o=>o.end)),subfeatures:n}}}var io=new WeakSet;function ao(A){let t=yi(A);if("reason"in t){Ge(A)&&!io.has(A)&&(io.add(A),console.warn(`[msaview] the linked transcript is not mapped to the genome: ${t.reason}`));return}let e=to(t.transcript);return{...e,codingPositions:Object.keys(e.g2p).map(Number).sort((n,r)=>n-r)}}function Ni(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<t?e=r+1:n=r}return e}function so(A,t,e){let n=new Set,{codingPositions:r,g2p:o}=A;for(let i=Ni(r,t);i<r.length&&r[i]<e;i++)n.add(o[r[i]]);return n}var ki="This view's alignment is no longer in browser storage. Stored alignments are kept for 7 days after they were last used, and are lost when site data is cleared.",go=" Retry runs the original search again and rebuilds it.",Io=" Relaunch it from the gene to rebuild it.",bi="This view's alignment could not be read from browser storage.",Si="Part of this view is no longer in browser storage: annotations, a tree or row metadata too large for the session. Stored documents are kept for 7 days after they were last used, and are lost when site data is cleared.";function Co(A){let{dataStoreId:t}=A;t&&(async()=>{try{A.setLoadingStoredData(!0);let e=await jn(t);if(A.dataStoreId!==t)return;(0,bA.transaction)(()=>{if(e){let{data:n}=A;e.msa&&!n.msa&&A.setMSA(e.msa),e.tree&&!n.tree&&A.setTree(e.tree),e.treeMetadata&&!n.treeMetadata&&A.setTreeMetadata(e.treeMetadata),e.gff&&!n.gff&&A.setGFF(e.gff),A.setLastStoredData(e)}else A.setDataStoreId(void 0),co(A)?A.addWarning(Si):A.setError(new Error(ki+(A.blastParams??A.orthologParams?go:Io)))})}catch(e){console.error("Failed to load MSA data from IndexedDB:",e),(0,SA.isAlive)(A)&&!co(A)&&A.setError(new Error(`${bi} ${e}.${A.blastParams??A.orthologParams?go:Io}`))}finally{A.setLoadingStoredData(!1)}})()}function co(A){return!!(A.data.msa||A.msaFilehandle||A.init?.msaIndexedLocation)}function Mi(A){return!(A.msa||A.tree||A.treeMetadata||A.gff)}function Fi(A,t){return!!A&&A.msa===t.msa&&A.tree===t.tree&&A.treeMetadata===t.treeMetadata&&A.gff===t.gff}function Eo(A){let{dataStoreId:t,ownsDataStoreRow:e,isStoringData:n,loadingStoredData:r,lastStoredData:o}=A,i=A.unsavedDocuments;if(!(n||r||Fi(o,i))){if(Mi(i)){o&&(0,bA.transaction)(()=>{A.setDataStoreId(void 0),A.setOwnsDataStoreRow(!1),A.setLastStoredData(i)});return}A.setIsStoringData(!0),(async()=>{try{let s=t&&e?t:Xn();await Vn(s,i)&&(0,bA.transaction)(()=>{A.setDataStoreId(s),A.setOwnsDataStoreRow(!0)})}catch(s){console.error("Failed to store MSA data to IndexedDB:",s)}finally{(0,bA.transaction)(()=>{A.setLastStoredData(i),A.setIsStoringData(!1)})}})()}}function xi(A){return!!A.connectedTranscript&&!A.connectedFeature}function fo(A,t,e,n){t&&!A.launchCompleted&&!xi(A)&&Ao({self:A,message:e,launch:n,onLaunched:()=>{A.setLaunchCompleted(!0)}})}function uo(A){fo(A,!!A.orthologParams,"Resolving orthologs",t=>Nt({self:A,scope:t}))}function lo(A){fo(A,!!A.blastParams,"Submitting query",t=>mt({self:A,scope:t}))}function ho(A){let{rows:t,domainsRequested:e,annotations:n,rowData:r}=A;if(t.length>0&&n.length===0&&!e&&Object.values(r).some(o=>o?.Accession)){let o=new AbortController,i=()=>{o.abort()};(0,SA.addDisposer)(A,i),A.setDomainsRequested(!0),A.setStatus({msg:"Fetching protein domains from NCBI",onCancel:i}),(async()=>{try{await Zn(A,o.signal)}catch(s){R(s)||console.error("[msaview-domains] auto-load failed:",s)}finally{(0,SA.isAlive)(A)&&A.setStatus(void 0)}})()}}function mo(A){let{init:t}=A;if(t){let{msaUrl:e,msaIndexedLocation:n,msaName:r,querySeqName:o}=t,i=!!(n&&r);if(i&&A.data.msa)return;(async()=>{try{A.setError(void 0);let s=e?Ye(e):void 0;s&&A.setUniprotId(s);let I=o??(s?"query":void 0);if(I&&A.setQuerySeqName(I),e)A.setMSAFilehandle({uri:e,locationType:"UriLocation"});else if(n&&r){let a=await qn({location:n,name:r});if(!a)throw new Error(`No alignment named ${r} in ${n.uri}`);A.setMSA(a)}i||A.setInit(void 0)}catch(s){A.setError(s),console.error(s)}})()}}function wo(A){let t=!1;return()=>{let e=Hn({model:A});e!==void 0?(A.setMousePos(e),t=!0):t&&(A.setMousePos(void 0),t=!1)}}function Qo(A,t){let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!n||!MA(A))return[];let r=new Set;for(let o of eo((0,Bo.getSession)(A).views))for(let i of o.structures)if(i.connectedViewId===e)for(let{start:s,end:I}of i[t]??[])for(let a of so(n,s,I)){let g=xA(A,a);g!==void 0&&r.add(g)}return[...r]}function Ri(A,t){return!A||!t?A===t:A.length===t.length&&A.every((e,n)=>e===t[n])}function po(A){let t;return()=>{let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!e||!n)return;let r=Qo(A,"hoverGenomeHighlights"),o=r.length?[]:Qo(A,"clickGenomeHighlights"),i=A.highlightColumns??[],s=r.length?r:o.length?o:i,I=s.length>0?s:void 0;Ri(t,I)||(t=I,A.setHighlightedColumns(I))}}function Do(){Wn().catch(A=>{console.error("Failed to cleanup old MSA data:",A)})}function zA({model:A,coord:t}){let{querySeqName:e,transcriptToMsaMap:n,mafRegion:r}=A,o=A.visibleColToSeqPos(e,t);if(o===void 0)return[];if(r){let i=r.start+o;return i<r.end?[{refName:r.refName,start:i,end:i+1}]:[]}if(n){let{refName:i,p2gCodon:s}=n,I=o+(A.querySeqOffset??0);return no(s,I)?.map(([a,g])=>({refName:i,start:a,end:g}))??[]}return[]}function yo(A){let t=zA(A),e=t[0],n=t.at(-1);return e&&n?{refName:e.refName,start:e.start,end:n.end}:void 0}var bo=x(Go()),Le=x(fA()),So=x(Lo()),Mo=x(te()),$A=x(GA());function No(A){return A.replace(/\.\d+$/,"")}function Ji(A,t){let e=No(t);return[A.get("name"),A.get("id"),A.get("transcript_id"),A.id()].some(n=>typeof n=="string"&&(n===t||No(n)===e))}function ko(A){return A.map(t=>({assemblyName:t.assemblyName,refName:t.refName,start:Math.floor(t.start),end:Math.ceil(t.end)}))}function Gi(A){let t=ko(A.dynamicBlocks?.contentBlocks??[]),e=ko(A.displayedRegions);return t.length>0?[t,e]:[e]}function Fo(A){return A.filter(t=>t.type==="FeatureTrack")}async function vi(A,t){let e=A.connectedView,n=(0,Le.getSession)(A),r="msaview-connectedTranscript",o=Fo(e.tracks);for(let i of Gi(e))for(let s of o){let I=await n.rpcManager.call(r,"CoreGetFeatures",{adapterConfig:(0,bo.getConf)(s,"adapter"),regions:i});for(let a of I){let g=Te(a).find(d=>Ji(d,t));if(g)return g}}}async function Li(A,t){let e=await Oe({start:t.get("start"),end:t.get("end"),refName:t.get("refName"),assemblyName:A.connectedView.assemblyNames[0],session:(0,Le.getSession)(A)});return(0,So.translateTranscript)({transcript:t,...e})?.protein}var ve=new WeakMap;async function Ui({self:A,transcriptId:t,blastParams:e,orthologParams:n,isCurrent:r}){let o=Fo(A.connectedView.tracks).length;try{A.setProgress(`Looking up ${t} in the genome view...`);let i=await vi(A,t);if(!i)throw new Error(`Transcript "${t}" was not found in the ${o} feature track(s) open in the connected genome view. Open the gene track that carries it, and make sure the view is on its locus.`);let s=await Li(A,i);if(!s)throw new Error(`Transcript "${t}" has no CDS to translate`);if(!r())return;let I=i.toJSON();(0,$A.transaction)(()=>{A.setProgress(""),e&&!e.proteinSequence&&A.setBlastParams({...e,selectedTranscript:I,proteinSequence:s}),n&&!n.proteinSequence&&A.setOrthologParams({...n,selectedTranscript:I,proteinSequence:s}),A.setConnectedFeature(I)})}catch(i){console.error(i),r()&&(A.setProgress(""),A.setError(i))}}function xo(A){let{connectedTranscript:t,connectedFeature:e,connectedView:n,blastParams:r,orthologParams:o}=A;if(!t||e||!n?.initialized||n.tracks.length===0)return;let i=(ve.get(A)??0)+1;ve.set(A,i),(0,$A.untracked)(()=>{Ui({self:A,transcriptId:t,blastParams:r,orthologParams:o,isCurrent:()=>(0,Mo.isAlive)(A)&&ve.get(A)===i})})}var eg=["ncbi","panther","uniref"];function _i(){return b.types.compose(Ro.BaseViewModel,et(),b.types.model("MsaView",{connectedViewId:b.types.maybe(b.types.string),connectedFeature:b.types.frozen(),connectedTranscript:b.types.maybe(b.types.string),blastParams:b.types.frozen(),orthologParams:b.types.frozen(),querySeqName:b.types.stripDefault(b.types.string,"QUERY"),querySeqOffset:b.types.stripDefault(b.types.number,0),uniprotId:b.types.maybe(b.types.string),zoomToBaseLevel:b.types.stripDefault(b.types.boolean,!1),init:b.types.frozen(),dataStoreId:b.types.maybe(b.types.string),launchCompleted:!1,mafRegion:b.types.frozen()})).volatile(()=>({rid:void 0,progress:"",loadingStoredData:!1,isStoringData:!1,lastStoredData:void 0,ownsDataStoreRow:!1,launchController:void 0,domainsRequested:!1})).views(A=>({get transcriptToMsaMap(){return A.connectedFeature?ao(A.connectedFeature):void 0},get connectedView(){let{views:t}=(0,Jo.getSession)(A);return t.find(e=>e.id===A.connectedViewId)}})).views(A=>({get connectedHoverHighlights(){let{mouseCol:t}=A;return t===void 0?[]:zA({model:A,coord:t})},get connectedClickHighlights(){let{mouseClickCol:t}=A;return t===void 0?[]:zA({model:A,coord:t})},get connectedHighlights(){return[...this.connectedHoverHighlights,...this.connectedClickHighlights]}})).views(A=>({get hostRestoresData(){let{msaIndexedLocation:t,msaName:e}=A.init??{};return A.hostCarriesData||!!(t&&e)},get unsavedDocuments(){let{data:t,init:e}=A,n=(0,b.getSnapshot)(t),r=(o,i)=>{let s=t[o];return s&&!i&&!n[o]?s:void 0};return{msa:r("msa",A.msaFilehandle??e?.msaIndexedLocation),tree:r("tree",A.treeFilehandle),treeMetadata:r("treeMetadata",A.treeMetadataFilehandle),gff:r("gff",A.gffFilehandle)}}})).actions(A=>({setZoomToBaseLevel(t){A.zoomToBaseLevel=t},setProgress(t){A.progress=t},setRid(t){A.rid=t},setBlastParams(t){A.blastParams=t},setConnectedFeature(t){A.connectedFeature=t},setOrthologParams(t){A.orthologParams=t},setInit(t){A.init=t},setQuerySeqName(t){A.querySeqName=t},setUniprotId(t){A.uniprotId=t},setDataStoreId(t){A.dataStoreId=t},setLaunchCompleted(t){A.launchCompleted=t},setLoadingStoredData(t){A.loadingStoredData=t},setIsStoringData(t){A.isStoringData=t},setLastStoredData(t){A.lastStoredData=t},setOwnsDataStoreRow(t){A.ownsDataStoreRow=t},setLaunchController(t){A.launchController=t},cancelLaunch(){A.launchController?.abort(),A.launchController=void 0,A.blastParams=void 0,A.orthologParams=void 0,A.init=void 0,A.launchCompleted=!1,A.progress="",A.rid=void 0,A.error=void 0},retryLaunch(){A.launchController?.abort(),A.launchController=void 0,A.progress="",A.rid=void 0,A.error=void 0,A.launchCompleted=!1,A.blastParams&&(A.blastParams={...A.blastParams}),A.orthologParams&&(A.orthologParams={...A.orthologParams}),A.init&&(A.init={...A.init})},setDomainsRequested(t){A.domainsRequested=t},handleMsaClick(t){let{connectedView:e,zoomToBaseLevel:n}=A,r=yo({model:A,coord:t});!r||!e||(n?e.navTo(r):e.centerAt(r.start,r.refName))}})).actions(A=>{let t=A.setMouseClickPos.bind(A);return{setMouseClickPos(e,n){t(e,n),e!==void 0&&A.handleMsaClick(e)}}}).actions(A=>{let t=A.reset.bind(A);return{reset(){let{displayName:e,minimized:n,zoomToBaseLevel:r}=A;t(),e!==void 0&&A.setDisplayName(e),A.setMinimized(n),A.setZoomToBaseLevel(r),A.setDomainsRequested(!1),A.setLastStoredData(void 0),A.setOwnsDataStoreRow(!1)}}}).views(A=>{let t=A.menuItems.bind(A);return{menuItems(){return[...t(),{label:"Zoom to base level on click?",type:"checkbox",checked:A.zoomToBaseLevel,onClick:()=>{A.setZoomToBaseLevel(!A.zoomToBaseLevel)}}]}}}).actions(A=>({afterCreate(){Do(),(0,b.addDisposer)(A,()=>{A.launchController?.abort()}),Co(A);for(let t of[Eo,xo,lo,uo,mo,ho])(0,b.addDisposer)(A,(0,Ae.autorun)(()=>{t(A)}));(0,b.addDisposer)(A,(0,Ae.autorun)(wo(A))),(0,b.addDisposer)(A,(0,Ae.autorun)(po(A)))}}))}export{_i as default,eg as orthologSources};
12
- //# sourceMappingURL=model-VE7IYWNU.js.map
11
+ `)){let[r,o,i]=n.split(" ");if(r&&Un(r)===e)return{offset:Number(o),length:Number(i)}}}var Yn=x(fA());function Hn({model:A}){let{assemblyManager:t,hovered:e}=(0,Yn.getSession)(A),{transcriptToMsaMap:n,connectedView:r,mafRegion:o}=A;if(!r?.initialized||!qe(e)||!MA(A))return;let{coord:i,refName:s}=e.hoverPosition,I=i-1,a=t.get(o?.assemblyName??r.assemblyNames[0]??""),g=Q=>(a?.initialized?a.getCanonicalRefName(Q):void 0)??Q,d=g(s);if(o)return d!==g(o.refName)||!r.assemblyNames.includes(o.assemblyName)||I<o.start||I>=o.end?void 0:_e(A,I-o.start);if(n&&d===g(n.refName)){let Q=n.g2p[I];if(Q!==void 0)return xA(A,Q)}}var Ii="jbrowse-msaview-domain-cache",WA="domains",ci=1,Pn=tA(Ii,ci,A=>{A.objectStoreNames.contains(WA)||A.createObjectStore(WA,{keyPath:"accession"})});function Kn(A){return nA("domain cache read",async()=>{let e=(await Pn()).transaction(WA,"readonly"),n=await Promise.all(A.map(r=>e.store.get(r)));return await e.done,n},[])}function Tn(A){return nA("domain cache write",async()=>{let e=(await Pn()).transaction(WA,"readwrite");for(let n of A)await e.store.put(n);await e.done},void 0)}function V(A,t){let e=new RegExp(`<${t}>(.*?)</${t}>`,"s").exec(A)?.[1];return e===void 0?void 0:We(e)}function Qi(A){let t={},e=/<GBQualifier>([\s\S]*?)<\/GBQualifier>/g,n;for(;(n=e.exec(A))!==null;){let r=V(n[1],"GBQualifier_name"),o=V(n[1],"GBQualifier_value");r&&o!==void 0&&t[r]===void 0&&(t[r]=o)}return t}function Bi(A){let t=[],e=[],n=/<GBInterval>([\s\S]*?)<\/GBInterval>/g,r;for(;(r=n.exec(A))!==null;){let o=r[1],i=V(o,"GBInterval_from"),s=V(o,"GBInterval_to"),I=V(o,"GBInterval_point");i&&s?(t.push(Number(i)),e.push(Number(s))):I&&(t.push(Number(I)),e.push(Number(I)))}return t.length>0?{start:Math.min(...t),end:Math.max(...e)}:void 0}var Ci=2;function Ei(A){let t=V(A,"GBFeature_key"),e=Qi(A),n=e.db_xref,r=Bi(A);if((t==="Region"||t==="Site")&&n?.startsWith("CDD:")&&r&&r.end-r.start+1>=Ci){let o=n.replace("CDD:",""),i=t==="Region",s=e.note?.split(/[[(]/)[0]?.trim(),I=i?e.region_name??o:s||e.site_type||"site",a=i?o:`${o}:${I}`;return{signature:{entry:{name:I,description:e.note??I,accession:a}},locations:[r]}}}function di(A){let t=new Map,e=/<GBSeq>([\s\S]*?)<\/GBSeq>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=[],i=/<GBFeature>([\s\S]*?)<\/GBFeature>/g,s;for(;(s=i.exec(r))!==null;){let I=Ei(s[1]);I&&o.push(I)}for(let I of[V(r,"GBSeq_accession-version"),V(r,"GBSeq_primary-accession")])I&&t.set(I,o)}return t}async function On(A,t){let e=[...new Set(A)].filter(Boolean),n=new Map,r=await Kn(e),o=[];e.forEach((I,a)=>{let g=r[a];g?n.set(I,g.matches):o.push(I)});let i=[],s=100;for(let I=0;I<o.length;I+=s){let a=o.slice(I,I+s),g;try{g=await je(Ve({db:"protein",id:a.join(","),rettype:"gp",retmode:"xml"}),{signal:t})}catch(Q){if(R(Q))throw Q;console.warn("[msaview-domains] efetch failed, keeping what loaded:",Q);break}let d=di(g);for(let Q of a){let c=d.get(Q);c!==void 0&&(n.set(Q,c),i.push({accession:Q,matches:c}))}}return i.length>0&&await Tn(i),n}async function Zn(A,t){let e=Object.entries(A.rowData).flatMap(([o,i])=>i?.Accession?[{rowName:o,accession:i.Accession}]:[]);if(e.length===0)throw new Error("No NCBI accessions found in alignment rows");let n=await On(e.map(o=>o.accession),t),r=e.flatMap(({rowName:o,accession:i})=>(n.get(i)??[]).flatMap(({signature:s,locations:I})=>s.entry?I.map(({start:a,end:g})=>({id:o,accession:s.entry.accession,name:s.entry.name,description:s.entry.description,start:a,end:g})):[]));if(r.length===0)throw new Error("No CDD domain annotations found for these proteins");A.setAnnotations(r)}var fi="jbrowse-msaview-data",ui=1,EA="msa-data",Je=tA(fi,ui,A=>{A.objectStoreNames.contains(EA)||A.createObjectStore(EA,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1})});function Xn(){return`msa-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function Vn(A,t){try{let e=await Je(),n={...t,id:A,timestamp:Date.now()};return await e.put(EA,n),!0}catch(e){return console.warn("Failed to store MSA data:",e),!1}}async function jn(A){let t=await Je(),e=await t.get(EA,A);if(!e)return;try{await t.put(EA,{...e,timestamp:Date.now()})}catch(i){console.warn("Failed to refresh MSA data timestamp:",i)}let{id:n,timestamp:r,...o}=e;return o}async function Wn(A=10080*60*1e3){try{let t=await Je(),e=Date.now()-A,o=await t.transaction(EA,"readwrite").store.index("timestamp").openCursor(IDBKeyRange.upperBound(e)),i=0;for(;o;)await o.delete(),i++,o=await o.continue();return i}catch(t){return console.warn("Failed to cleanup old MSA data:",t),0}}var zn=x(fA()),$n=x(GA());function li(A){if(!(A.rows.length<2))try{A.calculateNeighborJoiningTreeFromMSA()}catch(t){console.error(t);try{(0,zn.getSession)(A).notify(`The alignment loaded, but no tree was built. ${t instanceof Error?t.message:String(t)}`,"warning")}catch(e){console.error(e)}}}function Ao(A){(0,$n.untracked)(()=>{hi(A)})}function hi({self:A,message:t,launch:e,onLaunched:n}){A.launchController?.abort();let r=new AbortController,{signal:o}=r;A.setLaunchController(r);let i=I=>{o.aborted||I()},s={signal:o,act:i,onProgress:I=>{i(()=>{A.setProgress(I)})},onRid:I=>{i(()=>{A.setRid(I)})}};(async()=>{try{i(()=>{A.setProgress(t),A.setError(void 0)});let{warnings:I=[],...a}=await e(s);i(()=>{A.setData(a);for(let g of I)A.addWarning(g);n()}),a.tree||i(()=>{li(A)})}catch(I){R(I)||(i(()=>{A.setError(I)}),console.error(I))}finally{i(()=>{A.setProgress(""),A.launchController===r&&A.setLaunchController(void 0)})}})()}function mi(A){let t=A;return t.type==="ProteinView"&&Array.isArray(t.structures)}function eo(A){return A.filter(mi)}function to(A){let t=A.strand,e=A.refName;if(t!==-1&&t!==1)throw new Error(`Invalid strand value: ${t}. Expected 1 or -1.`);if(!e)throw new Error("refName is required");let n=new Map;for(let I of A.subfeatures??[])if(I.type==="CDS"&&I.start<I.end){let a=`${I.start}-${I.end}`;n.has(a)||n.set(a,I)}let r=[...n.values()].sort((I,a)=>t*(I.start-a.start)),o={},i={},s={};if(r.length!==0){let a=(3-(r[0]?.phase??0))%3,g=-1;for(let d of r){let Q=d.end-d.start;for(let c=0;c<Q;c++){let E=t===1?d.start+c:d.end-1-c,m=Math.floor(a++/3);o[E]=m,m!==g?(i[m]=E,s[m]=[E],g=m):s[m].push(E)}}}return{g2p:o,p2g:i,p2gCodon:s,refName:e,strand:t}}function no(A,t){let e=A[t];if(e===void 0)return;let n=[...e].sort((o,i)=>o-i),r=[];for(let o of n){let i=r.at(-1);i?.[1]===o?i[1]=o+1:r.push([o,o+1])}return r}var wi=1e6;function Ge(A){return typeof A=="object"&&A!==null}function oo(A){return Number.isSafeInteger(A)}function ro(A){return Ge(A)&&typeof A.type=="string"&&A.type.toLowerCase()==="cds"&&oo(A.start)&&oo(A.end)&&A.start<A.end}function pi(A){let t=Number(A);return t===1||t===2?t:0}function Di(A){let{subfeatures:t}=A,e=(Array.isArray(t)?t:[]).filter(ro);return e.length>0?e:ro(A)?[A]:[]}function yi(A){if(!Ge(A))return{reason:"it is not a feature"};let{refName:t,strand:e}=A;if(typeof t!="string"||!t)return{reason:"it has no refName"};if(e!==1&&e!==-1)return{reason:`its strand is ${JSON.stringify(e)}, not 1 or -1`};let n=Di(A).map(o=>({refName:t,type:"CDS",start:o.start,end:o.end,phase:pi(o.phase)}));if(n.length===0)return{reason:"it has no CDS with numeric start < end"};let r=n.reduce((o,i)=>o+i.end-i.start,0);return r>wi?{reason:`its CDS covers ${r} bases, more than any real transcript`}:{transcript:{refName:t,strand:e,start:Math.min(...n.map(o=>o.start)),end:Math.max(...n.map(o=>o.end)),subfeatures:n}}}var io=new WeakSet;function ao(A){let t=yi(A);if("reason"in t){Ge(A)&&!io.has(A)&&(io.add(A),console.warn(`[msaview] the linked transcript is not mapped to the genome: ${t.reason}`));return}let e=to(t.transcript);return{...e,codingPositions:Object.keys(e.g2p).map(Number).sort((n,r)=>n-r)}}function Ni(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<t?e=r+1:n=r}return e}function so(A,t,e){let n=new Set,{codingPositions:r,g2p:o}=A;for(let i=Ni(r,t);i<r.length&&r[i]<e;i++)n.add(o[r[i]]);return n}var ki="This view's alignment is no longer in browser storage. Stored alignments are kept for 7 days after they were last used, and are lost when site data is cleared.",go=" Retry runs the original search again and rebuilds it.",Io=" Relaunch it from the gene to rebuild it.",bi="This view's alignment could not be read from browser storage.",Si="Part of this view is no longer in browser storage: annotations, a tree or row metadata too large for the session. Stored documents are kept for 7 days after they were last used, and are lost when site data is cleared.";function Co(A){let{dataStoreId:t}=A;t&&(async()=>{try{A.setLoadingStoredData(!0);let e=await jn(t);if(A.dataStoreId!==t)return;(0,bA.transaction)(()=>{if(e){let{data:n}=A;e.msa&&!n.msa&&A.setMSA(e.msa),e.tree&&!n.tree&&A.setTree(e.tree),e.treeMetadata&&!n.treeMetadata&&A.setTreeMetadata(e.treeMetadata),e.gff&&!n.gff&&A.setGFF(e.gff),A.setLastStoredData(e)}else A.setDataStoreId(void 0),co(A)?A.addWarning(Si):A.setError(new Error(ki+(A.blastParams??A.orthologParams?go:Io)))})}catch(e){console.error("Failed to load MSA data from IndexedDB:",e),(0,SA.isAlive)(A)&&!co(A)&&A.setError(new Error(`${bi} ${e}.${A.blastParams??A.orthologParams?go:Io}`))}finally{A.setLoadingStoredData(!1)}})()}function co(A){return!!(A.data.msa||A.msaFilehandle||A.init?.msaIndexedLocation)}function Mi(A){return!(A.msa||A.tree||A.treeMetadata||A.gff)}function Fi(A,t){return!!A&&A.msa===t.msa&&A.tree===t.tree&&A.treeMetadata===t.treeMetadata&&A.gff===t.gff}function Eo(A){let{dataStoreId:t,ownsDataStoreRow:e,isStoringData:n,loadingStoredData:r,lastStoredData:o}=A,i=A.unsavedDocuments;if(!(n||r||Fi(o,i))){if(Mi(i)){o&&(0,bA.transaction)(()=>{A.setDataStoreId(void 0),A.setOwnsDataStoreRow(!1),A.setLastStoredData(i)});return}A.setIsStoringData(!0),(async()=>{try{let s=t&&e?t:Xn();await Vn(s,i)&&(0,bA.transaction)(()=>{A.setDataStoreId(s),A.setOwnsDataStoreRow(!0)})}catch(s){console.error("Failed to store MSA data to IndexedDB:",s)}finally{(0,bA.transaction)(()=>{A.setLastStoredData(i),A.setIsStoringData(!1)})}})()}}function xi(A){return!!A.connectedTranscript&&!A.connectedFeature}function fo(A,t,e,n){t&&!A.launchCompleted&&!xi(A)&&Ao({self:A,message:e,launch:n,onLaunched:()=>{A.setLaunchCompleted(!0)}})}function uo(A){fo(A,!!A.orthologParams,"Resolving orthologs",t=>Nt({self:A,scope:t}))}function lo(A){fo(A,!!A.blastParams,"Submitting query",t=>mt({self:A,scope:t}))}function ho(A){let{rows:t,domainsRequested:e,annotations:n,rowData:r}=A;if(t.length>0&&n.length===0&&!e&&Object.values(r).some(o=>o?.Accession)){let o=new AbortController,i=()=>{o.abort()};(0,SA.addDisposer)(A,i),A.setDomainsRequested(!0),A.setStatus({msg:"Fetching protein domains from NCBI",onCancel:i}),(async()=>{try{await Zn(A,o.signal)}catch(s){R(s)||console.error("[msaview-domains] auto-load failed:",s)}finally{(0,SA.isAlive)(A)&&A.setStatus(void 0)}})()}}function mo(A){let{init:t}=A;if(t){let{msaUrl:e,msaIndexedLocation:n,msaName:r,querySeqName:o}=t,i=!!(n&&r);if(i&&A.data.msa)return;(async()=>{try{A.setError(void 0);let s=e?Ye(e):void 0;s&&A.setUniprotId(s);let I=o??(s?"query":void 0);if(I&&A.setQuerySeqName(I),e)A.setMSAFilehandle({uri:e,locationType:"UriLocation"});else if(n&&r){let a=await qn({location:n,name:r});if(!a)throw new Error(`No alignment named ${r} in ${n.uri}`);A.setMSA(a)}i||A.setInit(void 0)}catch(s){A.setError(s),console.error(s)}})()}}function wo(A){let t=!1;return()=>{let e=Hn({model:A});e!==void 0?(A.setMousePos(e),t=!0):t&&(A.setMousePos(void 0),t=!1)}}function Qo(A,t){let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!n||!MA(A))return[];let r=new Set;for(let o of eo((0,Bo.getSession)(A).views))for(let i of o.structures)if(i.connectedViewId===e)for(let{start:s,end:I}of i[t]??[])for(let a of so(n,s,I)){let g=xA(A,a);g!==void 0&&r.add(g)}return[...r]}function Ri(A,t){return!A||!t?A===t:A.length===t.length&&A.every((e,n)=>e===t[n])}function po(A){let t;return()=>{let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!e||!n)return;let r=Qo(A,"hoverGenomeHighlights"),o=r.length?[]:Qo(A,"clickGenomeHighlights"),i=A.highlightColumns??[],s=r.length?r:o.length?o:i,I=s.length>0?s:void 0;Ri(t,I)||(t=I,A.setHighlightedColumns(I))}}function Do(){Wn().catch(A=>{console.error("Failed to cleanup old MSA data:",A)})}function zA({model:A,coord:t}){let{querySeqName:e,transcriptToMsaMap:n,mafRegion:r}=A,o=A.visibleColToSeqPos(e,t);if(o===void 0)return[];if(r){let i=r.start+o;return i<r.end?[{refName:r.refName,start:i,end:i+1}]:[]}if(n){let{refName:i,p2gCodon:s}=n,I=o+(A.querySeqOffset??0);return no(s,I)?.map(([a,g])=>({refName:i,start:a,end:g}))??[]}return[]}function yo(A){let t=zA(A),e=t[0],n=t.at(-1);return e&&n?{refName:e.refName,start:e.start,end:n.end}:void 0}var bo=x(Go()),Le=x(fA()),So=x(Lo()),Mo=x(te()),$A=x(GA());function No(A){return A.replace(/\.\d+$/,"")}function Ji(A,t){let e=No(t);return[A.get("name"),A.get("id"),A.get("transcript_id"),A.id()].some(n=>typeof n=="string"&&(n===t||No(n)===e))}function ko(A){return A.map(t=>({assemblyName:t.assemblyName,refName:t.refName,start:Math.floor(t.start),end:Math.ceil(t.end)}))}function Gi(A){let t=ko(A.dynamicBlocks?.contentBlocks??[]),e=ko(A.displayedRegions);return t.length>0?[t,e]:[e]}function Fo(A){return A.filter(t=>t.type==="FeatureTrack")}async function vi(A,t){let e=A.connectedView,n=(0,Le.getSession)(A),r="msaview-connectedTranscript",o=Fo(e.tracks);for(let i of Gi(e))for(let s of o){let I=await n.rpcManager.call(r,"CoreGetFeatures",{adapterConfig:(0,bo.getConf)(s,"adapter"),regions:i});for(let a of I){let g=Te(a).find(d=>Ji(d,t));if(g)return g}}}async function Li(A,t){let e=await Oe({start:t.get("start"),end:t.get("end"),refName:t.get("refName"),assemblyName:A.connectedView.assemblyNames[0],session:(0,Le.getSession)(A)});return(0,So.translateTranscript)({transcript:t,...e})?.protein}var ve=new WeakMap;async function Ui({self:A,transcriptId:t,blastParams:e,orthologParams:n,isCurrent:r}){let o=Fo(A.connectedView.tracks).length;try{A.setProgress(`Looking up ${t} in the genome view...`);let i=await vi(A,t);if(!i)throw new Error(`Transcript "${t}" was not found in the ${o} feature track(s) open in the connected genome view. Open the gene track that carries it, and make sure the view is on its locus.`);let s=await Li(A,i);if(!s)throw new Error(`Transcript "${t}" has no CDS to translate`);if(!r())return;let I=i.toJSON();(0,$A.transaction)(()=>{A.setProgress(""),e&&!e.proteinSequence&&A.setBlastParams({...e,selectedTranscript:I,proteinSequence:s}),n&&!n.proteinSequence&&A.setOrthologParams({...n,selectedTranscript:I,proteinSequence:s}),A.setConnectedFeature(I)})}catch(i){console.error(i),r()&&(A.setProgress(""),A.setError(i))}}function xo(A){let{connectedTranscript:t,connectedFeature:e,connectedView:n,blastParams:r,orthologParams:o}=A;if(!t||e||!n?.initialized||n.tracks.length===0)return;let i=(ve.get(A)??0)+1;ve.set(A,i),(0,$A.untracked)(()=>{Ui({self:A,transcriptId:t,blastParams:r,orthologParams:o,isCurrent:()=>(0,Mo.isAlive)(A)&&ve.get(A)===i})})}var eg=["ncbi","panther","uniref"];function _i(){return b.types.compose(Ro.BaseViewModel,et(),b.types.model("MsaView",{connectedViewId:b.types.maybe(b.types.string),connectedFeature:b.types.frozen(),connectedTranscript:b.types.maybe(b.types.string),blastParams:b.types.frozen(),orthologParams:b.types.frozen(),querySeqName:b.types.stripDefault(b.types.string,"QUERY"),querySeqOffset:b.types.stripDefault(b.types.number,0),uniprotId:b.types.maybe(b.types.string),zoomToBaseLevel:b.types.stripDefault(b.types.boolean,!1),init:b.types.frozen(),dataStoreId:b.types.maybe(b.types.string),launchCompleted:!1,mafRegion:b.types.frozen(),embeddedMode:!0})).volatile(()=>({rid:void 0,progress:"",loadingStoredData:!1,isStoringData:!1,lastStoredData:void 0,ownsDataStoreRow:!1,launchController:void 0,domainsRequested:!1})).views(A=>({get transcriptToMsaMap(){return A.connectedFeature?ao(A.connectedFeature):void 0},get connectedView(){let{views:t}=(0,Jo.getSession)(A);return t.find(e=>e.id===A.connectedViewId)}})).views(A=>({get connectedHoverHighlights(){let{mouseCol:t}=A;return t===void 0?[]:zA({model:A,coord:t})},get connectedClickHighlights(){let{mouseClickCol:t}=A;return t===void 0?[]:zA({model:A,coord:t})},get connectedHighlights(){return[...this.connectedHoverHighlights,...this.connectedClickHighlights]}})).views(A=>({get hostRestoresData(){let{msaIndexedLocation:t,msaName:e}=A.init??{};return A.hostCarriesData||!!(t&&e)},get unsavedDocuments(){let{data:t,init:e}=A,n=(0,b.getSnapshot)(t),r=(o,i)=>{let s=t[o];return s&&!i&&!n[o]?s:void 0};return{msa:r("msa",A.msaFilehandle??e?.msaIndexedLocation),tree:r("tree",A.treeFilehandle),treeMetadata:r("treeMetadata",A.treeMetadataFilehandle),gff:r("gff",A.gffFilehandle)}}})).actions(A=>({setZoomToBaseLevel(t){A.zoomToBaseLevel=t},setProgress(t){A.progress=t},setRid(t){A.rid=t},setBlastParams(t){A.blastParams=t},setConnectedFeature(t){A.connectedFeature=t},setOrthologParams(t){A.orthologParams=t},setInit(t){A.init=t},setQuerySeqName(t){A.querySeqName=t},setUniprotId(t){A.uniprotId=t},setDataStoreId(t){A.dataStoreId=t},setLaunchCompleted(t){A.launchCompleted=t},setLoadingStoredData(t){A.loadingStoredData=t},setIsStoringData(t){A.isStoringData=t},setLastStoredData(t){A.lastStoredData=t},setOwnsDataStoreRow(t){A.ownsDataStoreRow=t},setLaunchController(t){A.launchController=t},cancelLaunch(){A.launchController?.abort(),A.launchController=void 0,A.blastParams=void 0,A.orthologParams=void 0,A.init=void 0,A.launchCompleted=!1,A.progress="",A.rid=void 0,A.error=void 0},retryLaunch(){A.launchController?.abort(),A.launchController=void 0,A.progress="",A.rid=void 0,A.error=void 0,A.launchCompleted=!1,A.blastParams&&(A.blastParams={...A.blastParams}),A.orthologParams&&(A.orthologParams={...A.orthologParams}),A.init&&(A.init={...A.init})},setDomainsRequested(t){A.domainsRequested=t},handleMsaClick(t){let{connectedView:e,zoomToBaseLevel:n}=A,r=yo({model:A,coord:t});!r||!e||(n?e.navTo(r):e.centerAt(r.start,r.refName))}})).actions(A=>{let t=A.setMouseClickPos.bind(A);return{setMouseClickPos(e,n){t(e,n),e!==void 0&&A.handleMsaClick(e)}}}).actions(A=>{let t=A.reset.bind(A);return{reset(){let{displayName:e,minimized:n,zoomToBaseLevel:r}=A;t(),e!==void 0&&A.setDisplayName(e),A.setMinimized(n),A.setZoomToBaseLevel(r),A.setDomainsRequested(!1),A.setLastStoredData(void 0),A.setOwnsDataStoreRow(!1)}}}).views(A=>{let t=A.menuItems.bind(A);return{menuItems(){return[...t(),{label:"Zoom to base level on click?",type:"checkbox",checked:A.zoomToBaseLevel,onClick:()=>{A.setZoomToBaseLevel(!A.zoomToBaseLevel)}}]}}}).actions(A=>({afterCreate(){Do(),(0,b.addDisposer)(A,()=>{A.launchController?.abort()}),Co(A);for(let t of[Eo,xo,lo,uo,mo,ho])(0,b.addDisposer)(A,(0,Ae.autorun)(()=>{t(A)}));(0,b.addDisposer)(A,(0,Ae.autorun)(wo(A))),(0,b.addDisposer)(A,(0,Ae.autorun)(po(A)))}}))}export{_i as default,eg as orthologSources};
12
+ //# sourceMappingURL=model-36HCIOZJ.js.map