{"version":3,"file":"index.11ad22a0.js","sources":["../../../node_modules/rrweb/dist/rrweb.js","../../../node_modules/spark-md5/spark-md5.js","../../../app/javascript/modules/event_processor/rrweb-cache.ts","../../../app/javascript/modules/event_processor/replayer.ts","../../../node_modules/grapheme-splitter/index.js","../../../app/javascript/modules/event_processor/get.ts","../../../app/javascript/modules/event_processor/comparisons.ts","../../../node_modules/@rrweb/types/dist/types.js","../../../app/javascript/modules/event_processor/scroll.ts","../../../app/javascript/modules/event_processor/index.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar _a;\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$2 || {});\nfunction isElement(n2) {\n return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n const host = n2 == null ? void 0 : n2.host;\n return Boolean((host == null ? void 0 : host.shadowRoot) === n2);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n cssText = cssText.replace(\n /\\sbackground-clip:\\s*text;/g,\n \" -webkit-background-clip: text; background-clip: text;\"\n );\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === \"\") {\n statement.push(`layer`);\n } else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n try {\n const rules2 = s2.rules || s2.cssRules;\n return rules2 ? fixBrowserCompatibilityIssuesInCSS(\n Array.from(rules2, stringifyRule).join(\"\")\n ) : null;\n } catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified = // for same-origin stylesheets,\n // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule);\n } catch (error) {\n }\n } else if (isCSSStyleRule(rule) && rule.selectorText.includes(\":\")) {\n return fixSafariColons(rule.cssText);\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n return \"selectorText\" in rule;\n}\nclass Mirror {\n constructor() {\n __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2)\n return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction createMirror$2() {\n return new Mirror();\n}\nfunction maskInputValue({\n element,\n maskInputOptions,\n tagName,\n type,\n value,\n maskInputFn\n}) {\n let text = value || \"\";\n const actualType = type && toLowerCase(type);\n if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = \"*\".repeat(text.length);\n }\n }\n return text;\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext(\"2d\");\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n const pixelBuffer = new Uint32Array(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(\n ctx,\n x,\n y,\n Math.min(chunkSize, canvas.width - x),\n Math.min(chunkSize, canvas.height - y)\n ).data.buffer\n );\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction isNodeMetaEqual(a2, b) {\n if (!a2 || !b || a2.type !== b.type)\n return false;\n if (a2.type === NodeType$2.Document)\n return a2.compatMode === b.compatMode;\n else if (a2.type === NodeType$2.DocumentType)\n return a2.name === b.name && a2.publicId === b.publicId && a2.systemId === b.systemId;\n else if (a2.type === NodeType$2.Comment || a2.type === NodeType$2.Text || a2.type === NodeType$2.CDATA)\n return a2.textContent === b.textContent;\n else if (a2.type === NodeType$2.Element)\n return a2.tagName === b.tagName && JSON.stringify(a2.attributes) === JSON.stringify(b.attributes) && a2.isSVG === b.isSVG && a2.needBlock === b.needBlock;\n return false;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n ) : null;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, baseURL ?? window.location.href);\n } catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return (match == null ? void 0 : match[1]) ?? null;\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName$1(element) {\n if (element instanceof HTMLFormElement) {\n return \"form\";\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return \"div\";\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = \"\";\n if (url.indexOf(\"//\") > -1) {\n origin = url.split(\"/\").slice(0, 3).join(\"/\");\n } else {\n origin = url.split(\"/\")[0];\n }\n origin = origin.split(\"?\")[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || \"\").replace(\n URL_IN_CSS_REF,\n (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || \"\";\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === \"/\") {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split(\"/\");\n const parts = filePath.split(\"/\");\n stack.pop();\n for (const part of parts) {\n if (part === \".\") {\n continue;\n } else if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n }\n );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === \"\") {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars2;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars2 = match[0];\n pos += chars2.length;\n return chars2;\n }\n return \"\";\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === \",\") {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n } else {\n let descriptorsStr = \"\";\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c2 = attributeValue.charAt(pos);\n if (c2 === \"\") {\n output.push((url + descriptorsStr).trim());\n break;\n } else if (!inParens) {\n if (c2 === \",\") {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n } else if (c2 === \"(\") {\n inParens = true;\n }\n } else {\n if (c2 === \")\") {\n inParens = false;\n }\n }\n descriptorsStr += c2;\n pos += 1;\n }\n }\n }\n return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === \"\") {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a2 = cachedDocument.get(doc);\n if (!a2) {\n a2 = doc.createElement(\"a\");\n cachedDocument.set(doc, a2);\n }\n if (!customHref) {\n customHref = \"\";\n } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n return customHref;\n }\n a2.setAttribute(\"href\", customHref);\n return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (!value) {\n return value;\n }\n if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n return absoluteToDoc(doc, value);\n } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n return absoluteToDoc(doc, value);\n } else if (name === \"srcset\") {\n return getAbsoluteSrcsetString(doc, value);\n } else if (name === \"style\") {\n return absoluteToStylesheet(value, getHref(doc));\n } else if (tagName === \"object\" && name === \"data\") {\n return absoluteToDoc(doc, value);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n try {\n if (typeof blockClass === \"string\") {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n } else {\n for (let eIndex = element.classList.length; eIndex--; ) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n } catch (e2) {\n }\n return false;\n}\nfunction classMatchesRegex(node, regex, checkAncestors) {\n if (!node)\n return false;\n if (node.nodeType !== node.ELEMENT_NODE) {\n if (!checkAncestors)\n return false;\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\n }\n for (let eIndex = node.classList.length; eIndex--; ) {\n const className = node.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n if (!checkAncestors)\n return false;\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n if (el === null)\n return false;\n if (typeof maskTextClass === \"string\") {\n if (checkAncestors) {\n if (el.closest(`.${maskTextClass}`))\n return true;\n } else {\n if (el.classList.contains(maskTextClass))\n return true;\n }\n } else {\n if (classMatchesRegex(el, maskTextClass, checkAncestors))\n return true;\n }\n if (maskTextSelector) {\n if (checkAncestors) {\n if (el.closest(maskTextSelector))\n return true;\n } else {\n if (el.matches(maskTextSelector))\n return true;\n }\n }\n } catch (e2) {\n }\n return false;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n } catch (error) {\n return;\n }\n if (readyState !== \"complete\") {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = \"about:blank\";\n if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n setTimeout(listener, 0);\n return iframeEl.addEventListener(\"load\", listener);\n }\n iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n } catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener(\"load\", () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false\n } = options;\n const rootId = getRootId(doc, mirror2);\n switch (n2.nodeType) {\n case n2.DOCUMENT_NODE:\n if (n2.compatMode !== \"CSS1Compat\") {\n return {\n type: NodeType$2.Document,\n childNodes: [],\n compatMode: n2.compatMode\n // probably \"BackCompat\"\n };\n } else {\n return {\n type: NodeType$2.Document,\n childNodes: []\n };\n }\n case n2.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$2.DocumentType,\n name: n2.name,\n publicId: n2.publicId,\n systemId: n2.systemId,\n rootId\n };\n case n2.ELEMENT_NODE:\n return serializeElementNode(n2, {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId\n });\n case n2.TEXT_NODE:\n return serializeTextNode(n2, {\n doc,\n needsMask,\n maskTextFn,\n rootId\n });\n case n2.CDATA_SECTION_NODE:\n return {\n type: NodeType$2.CDATA,\n textContent: \"\",\n rootId\n };\n case n2.COMMENT_NODE:\n return {\n type: NodeType$2.Comment,\n textContent: n2.textContent || \"\",\n rootId\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror2) {\n if (!mirror2.hasNode(doc))\n return void 0;\n const docId = mirror2.getId(doc);\n return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n var _a2;\n const { needsMask, maskTextFn, rootId } = options;\n const parentTagName = n2.parentNode && n2.parentNode.tagName;\n let textContent = n2.textContent;\n const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n if (isStyle && textContent) {\n try {\n if (n2.nextSibling || n2.previousSibling) {\n } else if ((_a2 = n2.parentNode.sheet) == null ? void 0 : _a2.cssRules) {\n textContent = stringifyStylesheet(\n n2.parentNode.sheet\n );\n }\n } catch (err) {\n console.warn(\n `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n n2\n );\n }\n textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n }\n if (isScript) {\n textContent = \"SCRIPT_PLACEHOLDER\";\n }\n if (!isStyle && !isScript && textContent && needsMask) {\n textContent = maskTextFn ? maskTextFn(textContent, n2.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n }\n return {\n type: NodeType$2.Text,\n textContent: textContent || \"\",\n isStyle,\n rootId\n };\n}\nfunction serializeElementNode(n2, options) {\n const {\n doc,\n blockClass,\n blockSelector,\n inlineStylesheet,\n maskInputOptions = {},\n maskInputFn,\n dataURLOptions = {},\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement = false,\n rootId\n } = options;\n const needBlock = _isBlockedElement(n2, blockClass, blockSelector);\n const tagName = getValidTagName$1(n2);\n let attributes2 = {};\n const len = n2.attributes.length;\n for (let i2 = 0; i2 < len; i2++) {\n const attr = n2.attributes[i2];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes2[attr.name] = transformAttribute(\n doc,\n tagName,\n toLowerCase(attr.name),\n attr.value\n );\n }\n }\n if (tagName === \"link\" && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s2) => {\n return s2.href === n2.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes2.rel;\n delete attributes2.href;\n attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === \"style\" && n2.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n !(n2.innerText || n2.textContent || \"\").trim().length) {\n const cssText = stringifyStylesheet(\n n2.sheet\n );\n if (cssText) {\n attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n }\n }\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n const value = n2.value;\n const checked = n2.checked;\n if (attributes2.type !== \"radio\" && attributes2.type !== \"checkbox\" && attributes2.type !== \"submit\" && attributes2.type !== \"button\" && value) {\n attributes2.value = maskInputValue({\n element: n2,\n type: getInputType(n2),\n tagName,\n value,\n maskInputOptions,\n maskInputFn\n });\n } else if (checked) {\n attributes2.checked = checked;\n }\n }\n if (tagName === \"option\") {\n if (n2.selected && !maskInputOptions[\"select\"]) {\n attributes2.selected = true;\n } else {\n delete attributes2.selected;\n }\n }\n if (tagName === \"canvas\" && recordCanvas) {\n if (n2.__context === \"2d\") {\n if (!is2DCanvasBlank(n2)) {\n attributes2.rr_dataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n }\n } else if (!(\"__context\" in n2)) {\n const canvasDataURL = n2.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n const blankCanvas = doc.createElement(\"canvas\");\n blankCanvas.width = n2.width;\n blankCanvas.height = n2.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes2.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === \"img\" && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement(\"canvas\");\n canvasCtx = canvasService.getContext(\"2d\");\n }\n const image = n2;\n const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"\";\n const priorCrossOrigin = image.crossOrigin;\n const recordInlineImage = () => {\n image.removeEventListener(\"load\", recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes2.rr_dataURL = canvasService.toDataURL(\n dataURLOptions.type,\n dataURLOptions.quality\n );\n } catch (err) {\n if (image.crossOrigin !== \"anonymous\") {\n image.crossOrigin = \"anonymous\";\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener(\"load\", recordInlineImage);\n return;\n } else {\n console.warn(\n `Cannot inline img src=${imageSrc}! Error: ${err}`\n );\n }\n }\n if (image.crossOrigin === \"anonymous\") {\n priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n }\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener(\"load\", recordInlineImage);\n }\n if (tagName === \"audio\" || tagName === \"video\") {\n const mediaAttributes = attributes2;\n mediaAttributes.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n mediaAttributes.rr_mediaCurrentTime = n2.currentTime;\n mediaAttributes.rr_mediaPlaybackRate = n2.playbackRate;\n mediaAttributes.rr_mediaMuted = n2.muted;\n mediaAttributes.rr_mediaLoop = n2.loop;\n mediaAttributes.rr_mediaVolume = n2.volume;\n }\n if (!newlyAddedElement) {\n if (n2.scrollLeft) {\n attributes2.rr_scrollLeft = n2.scrollLeft;\n }\n if (n2.scrollTop) {\n attributes2.rr_scrollTop = n2.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n2.getBoundingClientRect();\n attributes2 = {\n class: attributes2.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`\n };\n }\n if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n if (!n2.contentDocument) {\n attributes2.rr_src = attributes2.src;\n }\n delete attributes2.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n } catch (e2) {\n }\n return {\n type: NodeType$2.Element,\n tagName,\n attributes: attributes2,\n childNodes: [],\n isSVG: isSVGElement(n2) || void 0,\n needBlock,\n rootId,\n isCustom: isCustomElement\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === void 0 || maybeAttr === null) {\n return \"\";\n } else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$2.Comment) {\n return true;\n } else if (sn.type === NodeType$2.Element) {\n if (slimDOMOptions.script && // script tag\n (sn.tagName === \"script\" || // (module)preload link\n sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") && sn.attributes.as === \"script\" || // prefetch link\n sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n return true;\n } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n /^msapplication-tile(image|color)$/\n ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n return true;\n } else if (sn.tagName === \"meta\") {\n if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n return true;\n } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n return true;\n } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n return true;\n } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n2, options) {\n const {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild = false,\n inlineStylesheet = true,\n maskInputOptions = {},\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions = {},\n inlineImages = false,\n recordCanvas = false,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout = 5e3,\n onStylesheetLoad,\n stylesheetLoadTimeout = 5e3,\n keepIframeSrcFn = () => false,\n newlyAddedElement = false\n } = options;\n let { needsMask } = options;\n let { preserveWhiteSpace = true } = options;\n if (!needsMask && n2.childNodes) {\n const checkAncestors = needsMask === void 0;\n needsMask = needMaskingText(\n n2,\n maskTextClass,\n maskTextSelector,\n checkAncestors\n );\n }\n const _serializedNode = serializeNode(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement\n });\n if (!_serializedNode) {\n console.warn(n2, \"not serialized\");\n return null;\n }\n let id;\n if (mirror2.hasNode(n2)) {\n id = mirror2.getId(n2);\n } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$2.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n id = IGNORED_NODE;\n } else {\n id = genId();\n }\n const serializedNode2 = Object.assign(_serializedNode, { id });\n mirror2.add(n2, serializedNode2);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n2);\n }\n let recordChild = !skipChild;\n if (serializedNode2.type === NodeType$2.Element) {\n recordChild = recordChild && !serializedNode2.needBlock;\n delete serializedNode2.needBlock;\n const shadowRoot = n2.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode2.isShadowHost = true;\n }\n if ((serializedNode2.type === NodeType$2.Document || serializedNode2.type === NodeType$2.Element) && recordChild) {\n if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"head\") {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n };\n if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"textarea\" && serializedNode2.attributes.value !== void 0)\n ;\n else {\n for (const childN of Array.from(n2.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode2.childNodes.push(serializedChildNode);\n }\n }\n }\n if (isElement(n2) && n2.shadowRoot) {\n for (const childN of Array.from(n2.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n2.shadowRoot) && (serializedChildNode.isShadow = true);\n serializedNode2.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n2.parentNode && isShadowRoot(n2.parentNode) && isNativeShadowDom(n2.parentNode)) {\n serializedNode2.isShadow = true;\n }\n if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"iframe\") {\n onceIframeLoaded(\n n2,\n () => {\n const iframeDoc = n2.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedIframeNode) {\n onIframeLoad(\n n2,\n serializedIframeNode\n );\n }\n }\n },\n iframeLoadTimeout\n );\n }\n if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n onceStylesheetLoaded(\n n2,\n () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n2, {\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n needsMask,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn\n });\n if (serializedLinkNode) {\n onStylesheetLoad(\n n2,\n serializedLinkNode\n );\n }\n }\n },\n stylesheetLoadTimeout\n );\n }\n return serializedNode2;\n}\nfunction snapshot(n2, options) {\n const {\n mirror: mirror2 = new Mirror(),\n blockClass = \"rr-block\",\n blockSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n inlineImages = false,\n recordCanvas = false,\n maskAllInputs = false,\n maskTextFn,\n maskInputFn,\n slimDOM = false,\n dataURLOptions,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn = () => false\n } = options || {};\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : maskAllInputs === false ? {\n password: true\n } : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n // if true: set of sensible options that should not throw away any information\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === \"all\",\n // destructive\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n }\n ) : slimDOM === false ? {} : slimDOM;\n return serializeNodeWithId(n2, {\n doc: n2,\n mirror: mirror2,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false\n });\n}\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options = {}) {\n let lineno = 1;\n let column = 1;\n function updatePosition(str) {\n const lines = str.match(/\\n/g);\n if (lines) {\n lineno += lines.length;\n }\n const i2 = str.lastIndexOf(\"\\n\");\n column = i2 === -1 ? column + str.length : str.length - i2;\n }\n function position() {\n const start = { line: lineno, column };\n return (node) => {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n const _Position = class _Position2 {\n constructor(start) {\n __publicField$1(this, \"content\");\n __publicField$1(this, \"start\");\n __publicField$1(this, \"end\");\n __publicField$1(this, \"source\");\n this.start = start;\n this.end = { line: lineno, column };\n this.source = options.source;\n this.content = _Position2.content;\n }\n };\n __publicField$1(_Position, \"content\");\n let Position = _Position;\n Position.content = css;\n const errorsList = [];\n function error(msg) {\n const err = new Error(\n `${options.source || \"\"}:${lineno}:${column}: ${msg}`\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = css;\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n function stylesheet() {\n const rulesList = rules2();\n return {\n type: \"stylesheet\",\n stylesheet: {\n source: options.source,\n rules: rulesList,\n parsingErrors: errorsList\n }\n };\n }\n function open() {\n return match(/^{\\s*/);\n }\n function close() {\n return match(/^}/);\n }\n function rules2() {\n let node;\n const rules22 = [];\n whitespace();\n comments(rules22);\n while (css.length && css.charAt(0) !== \"}\" && (node = atrule() || rule())) {\n if (node) {\n rules22.push(node);\n comments(rules22);\n }\n }\n return rules22;\n }\n function match(re) {\n const m = re.exec(css);\n if (!m) {\n return;\n }\n const str = m[0];\n updatePosition(str);\n css = css.slice(str.length);\n return m;\n }\n function whitespace() {\n match(/^\\s*/);\n }\n function comments(rules22 = []) {\n let c2;\n while (c2 = comment()) {\n if (c2) {\n rules22.push(c2);\n }\n c2 = comment();\n }\n return rules22;\n }\n function comment() {\n const pos = position();\n if (\"/\" !== css.charAt(0) || \"*\" !== css.charAt(1)) {\n return;\n }\n let i2 = 2;\n while (\"\" !== css.charAt(i2) && (\"*\" !== css.charAt(i2) || \"/\" !== css.charAt(i2 + 1))) {\n ++i2;\n }\n i2 += 2;\n if (\"\" === css.charAt(i2 - 1)) {\n return error(\"End of comment missing\");\n }\n const str = css.slice(2, i2 - 2);\n column += 2;\n updatePosition(str);\n css = css.slice(i2);\n column += 2;\n return pos({\n type: \"comment\",\n comment: str\n });\n }\n const selectorMatcher = new RegExp(\n \"^((\" + [\n /[^\\\\]\"(?:\\\\\"|[^\"])*\"/.source,\n // consume any quoted parts (checking that the double quote isn't itself escaped)\n /[^\\\\]'(?:\\\\'|[^'])*'/.source,\n // same but for single quotes\n \"[^{]\"\n ].join(\"|\") + \")+)\"\n );\n function selector() {\n whitespace();\n while (css[0] == \"}\") {\n error(\"extra closing bracket\");\n css = css.slice(1);\n whitespace();\n }\n const m = match(selectorMatcher);\n if (!m) {\n return;\n }\n const cleanedInput = m[0].trim().replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\").replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m2) => {\n return m2.replace(/,/g, \"‌\");\n });\n return customSplit(cleanedInput).map(\n (s2) => s2.replace(/\\u200C/g, \",\").trim()\n );\n }\n function customSplit(input) {\n const result = [];\n let currentSegment = \"\";\n let depthParentheses = 0;\n let depthBrackets = 0;\n let currentStringChar = null;\n for (const char of input) {\n const hasStringEscape = currentSegment.endsWith(\"\\\\\");\n if (currentStringChar) {\n if (currentStringChar === char && !hasStringEscape) {\n currentStringChar = null;\n }\n } else if (char === \"(\") {\n depthParentheses++;\n } else if (char === \")\") {\n depthParentheses--;\n } else if (char === \"[\") {\n depthBrackets++;\n } else if (char === \"]\") {\n depthBrackets--;\n } else if (`'\"`.includes(char)) {\n currentStringChar = char;\n }\n if (char === \",\" && depthParentheses === 0 && depthBrackets === 0) {\n result.push(currentSegment);\n currentSegment = \"\";\n } else {\n currentSegment += char;\n }\n }\n if (currentSegment) {\n result.push(currentSegment);\n }\n return result;\n }\n function declaration() {\n const pos = position();\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n if (!propMatch) {\n return;\n }\n const prop = trim(propMatch[0]);\n if (!match(/^:\\s*/)) {\n return error(`property missing ':'`);\n }\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n const ret = pos({\n type: \"declaration\",\n property: prop.replace(commentre, \"\"),\n value: val ? trim(val[0]).replace(commentre, \"\") : \"\"\n });\n match(/^[;\\s]*/);\n return ret;\n }\n function declarations() {\n const decls = [];\n if (!open()) {\n return error(`missing '{'`);\n }\n comments(decls);\n let decl;\n while (decl = declaration()) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n decl = declaration();\n }\n if (!close()) {\n return error(`missing '}'`);\n }\n return decls;\n }\n function keyframe() {\n let m;\n const vals = [];\n const pos = position();\n while (m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/)) {\n vals.push(m[1]);\n match(/^,\\s*/);\n }\n if (!vals.length) {\n return;\n }\n return pos({\n type: \"keyframe\",\n values: vals,\n declarations: declarations()\n });\n }\n function atkeyframes() {\n const pos = position();\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\n if (!m) {\n return;\n }\n const vendor = m[1];\n m = match(/^([-\\w]+)\\s*/);\n if (!m) {\n return error(\"@keyframes missing name\");\n }\n const name = m[1];\n if (!open()) {\n return error(`@keyframes missing '{'`);\n }\n let frame;\n let frames = comments();\n while (frame = keyframe()) {\n frames.push(frame);\n frames = frames.concat(comments());\n }\n if (!close()) {\n return error(`@keyframes missing '}'`);\n }\n return pos({\n type: \"keyframes\",\n name,\n vendor,\n keyframes: frames\n });\n }\n function atsupports() {\n const pos = position();\n const m = match(/^@supports *([^{]+)/);\n if (!m) {\n return;\n }\n const supports = trim(m[1]);\n if (!open()) {\n return error(`@supports missing '{'`);\n }\n const style = comments().concat(rules2());\n if (!close()) {\n return error(`@supports missing '}'`);\n }\n return pos({\n type: \"supports\",\n supports,\n rules: style\n });\n }\n function athost() {\n const pos = position();\n const m = match(/^@host\\s*/);\n if (!m) {\n return;\n }\n if (!open()) {\n return error(`@host missing '{'`);\n }\n const style = comments().concat(rules2());\n if (!close()) {\n return error(`@host missing '}'`);\n }\n return pos({\n type: \"host\",\n rules: style\n });\n }\n function atmedia() {\n const pos = position();\n const m = match(/^@media *([^{]+)/);\n if (!m) {\n return;\n }\n const media = trim(m[1]);\n if (!open()) {\n return error(`@media missing '{'`);\n }\n const style = comments().concat(rules2());\n if (!close()) {\n return error(`@media missing '}'`);\n }\n return pos({\n type: \"media\",\n media,\n rules: style\n });\n }\n function atcustommedia() {\n const pos = position();\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n if (!m) {\n return;\n }\n return pos({\n type: \"custom-media\",\n name: trim(m[1]),\n media: trim(m[2])\n });\n }\n function atpage() {\n const pos = position();\n const m = match(/^@page */);\n if (!m) {\n return;\n }\n const sel = selector() || [];\n if (!open()) {\n return error(`@page missing '{'`);\n }\n let decls = comments();\n let decl;\n while (decl = declaration()) {\n decls.push(decl);\n decls = decls.concat(comments());\n }\n if (!close()) {\n return error(`@page missing '}'`);\n }\n return pos({\n type: \"page\",\n selectors: sel,\n declarations: decls\n });\n }\n function atdocument() {\n const pos = position();\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\n if (!m) {\n return;\n }\n const vendor = trim(m[1]);\n const doc = trim(m[2]);\n if (!open()) {\n return error(`@document missing '{'`);\n }\n const style = comments().concat(rules2());\n if (!close()) {\n return error(`@document missing '}'`);\n }\n return pos({\n type: \"document\",\n document: doc,\n vendor,\n rules: style\n });\n }\n function atfontface() {\n const pos = position();\n const m = match(/^@font-face\\s*/);\n if (!m) {\n return;\n }\n if (!open()) {\n return error(`@font-face missing '{'`);\n }\n let decls = comments();\n let decl;\n while (decl = declaration()) {\n decls.push(decl);\n decls = decls.concat(comments());\n }\n if (!close()) {\n return error(`@font-face missing '}'`);\n }\n return pos({\n type: \"font-face\",\n declarations: decls\n });\n }\n const atimport = _compileAtrule(\"import\");\n const atcharset = _compileAtrule(\"charset\");\n const atnamespace = _compileAtrule(\"namespace\");\n function _compileAtrule(name) {\n const re = new RegExp(\n \"^@\" + name + \"\\\\s*((?:\" + [\n /[^\\\\]\"(?:\\\\\"|[^\"])*\"/.source,\n // consume any quoted parts (checking that the double quote isn't itself escaped)\n /[^\\\\]'(?:\\\\'|[^'])*'/.source,\n // same but for single quotes\n \"[^;]\"\n ].join(\"|\") + \")+);\"\n );\n return () => {\n const pos = position();\n const m = match(re);\n if (!m) {\n return;\n }\n const ret = { type: name };\n ret[name] = m[1].trim();\n return pos(ret);\n };\n }\n function atrule() {\n if (css[0] !== \"@\") {\n return;\n }\n return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();\n }\n function rule() {\n const pos = position();\n const sel = selector();\n if (!sel) {\n return error(\"selector missing\");\n }\n comments();\n return pos({\n type: \"rule\",\n selectors: sel,\n declarations: declarations()\n });\n }\n return addParent(stylesheet());\n}\nfunction trim(str) {\n return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\nfunction addParent(obj, parent) {\n const isNode = obj && typeof obj.type === \"string\";\n const childParent = isNode ? obj : parent;\n for (const k of Object.keys(obj)) {\n const value = obj[k];\n if (Array.isArray(value)) {\n value.forEach((v2) => {\n addParent(v2, childParent);\n });\n } else if (value && typeof value === \"object\") {\n addParent(value, childParent);\n }\n }\n if (isNode) {\n Object.defineProperty(obj, \"parent\", {\n configurable: true,\n writable: true,\n enumerable: false,\n value: parent || null\n });\n }\n return obj;\n}\nconst tagMap = {\n script: \"noscript\",\n // camel case svg element tag names\n altglyph: \"altGlyph\",\n altglyphdef: \"altGlyphDef\",\n altglyphitem: \"altGlyphItem\",\n animatecolor: \"animateColor\",\n animatemotion: \"animateMotion\",\n animatetransform: \"animateTransform\",\n clippath: \"clipPath\",\n feblend: \"feBlend\",\n fecolormatrix: \"feColorMatrix\",\n fecomponenttransfer: \"feComponentTransfer\",\n fecomposite: \"feComposite\",\n feconvolvematrix: \"feConvolveMatrix\",\n fediffuselighting: \"feDiffuseLighting\",\n fedisplacementmap: \"feDisplacementMap\",\n fedistantlight: \"feDistantLight\",\n fedropshadow: \"feDropShadow\",\n feflood: \"feFlood\",\n fefunca: \"feFuncA\",\n fefuncb: \"feFuncB\",\n fefuncg: \"feFuncG\",\n fefuncr: \"feFuncR\",\n fegaussianblur: \"feGaussianBlur\",\n feimage: \"feImage\",\n femerge: \"feMerge\",\n femergenode: \"feMergeNode\",\n femorphology: \"feMorphology\",\n feoffset: \"feOffset\",\n fepointlight: \"fePointLight\",\n fespecularlighting: \"feSpecularLighting\",\n fespotlight: \"feSpotLight\",\n fetile: \"feTile\",\n feturbulence: \"feTurbulence\",\n foreignobject: \"foreignObject\",\n glyphref: \"glyphRef\",\n lineargradient: \"linearGradient\",\n radialgradient: \"radialGradient\"\n};\nfunction getTagName(n2) {\n let tagName = tagMap[n2.tagName] ? tagMap[n2.tagName] : n2.tagName;\n if (tagName === \"link\" && n2.attributes._cssText) {\n tagName = \"style\";\n }\n return tagName;\n}\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, \"g\");\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, \"g\");\nfunction adaptCssForReplay(cssText, cache) {\n const cachedStyle = cache == null ? void 0 : cache.stylesWithHoverClass.get(cssText);\n if (cachedStyle)\n return cachedStyle;\n const ast = parse(cssText, {\n silent: true\n });\n if (!ast.stylesheet) {\n return cssText;\n }\n const selectors = [];\n const medias = [];\n function getSelectors(rule) {\n if (\"selectors\" in rule && rule.selectors) {\n rule.selectors.forEach((selector) => {\n if (HOVER_SELECTOR.test(selector)) {\n selectors.push(selector);\n }\n });\n }\n if (\"media\" in rule && rule.media && MEDIA_SELECTOR.test(rule.media)) {\n medias.push(rule.media);\n }\n if (\"rules\" in rule && rule.rules) {\n rule.rules.forEach(getSelectors);\n }\n }\n getSelectors(ast.stylesheet);\n let result = cssText;\n if (selectors.length > 0) {\n const selectorMatcher = new RegExp(\n selectors.filter((selector, index) => selectors.indexOf(selector) === index).sort((a2, b) => b.length - a2.length).map((selector) => {\n return escapeRegExp(selector);\n }).join(\"|\"),\n \"g\"\n );\n result = result.replace(selectorMatcher, (selector) => {\n const newSelector = selector.replace(\n HOVER_SELECTOR_GLOBAL,\n \"$1.\\\\:hover\"\n );\n return `${selector}, ${newSelector}`;\n });\n }\n if (medias.length > 0) {\n const mediaMatcher = new RegExp(\n medias.filter((media, index) => medias.indexOf(media) === index).sort((a2, b) => b.length - a2.length).map((media) => {\n return escapeRegExp(media);\n }).join(\"|\"),\n \"g\"\n );\n result = result.replace(mediaMatcher, (media) => {\n return media.replace(MEDIA_SELECTOR_GLOBAL, \"$1-$2\");\n });\n }\n cache == null ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\n return result;\n}\nfunction createCache() {\n const stylesWithHoverClass = /* @__PURE__ */ new Map();\n return {\n stylesWithHoverClass\n };\n}\nfunction buildNode(n2, options) {\n var _a2;\n const { doc, hackCss, cache } = options;\n switch (n2.type) {\n case NodeType$2.Document:\n return doc.implementation.createDocument(null, \"\", null);\n case NodeType$2.DocumentType:\n return doc.implementation.createDocumentType(\n n2.name || \"html\",\n n2.publicId,\n n2.systemId\n );\n case NodeType$2.Element: {\n const tagName = getTagName(n2);\n let node;\n if (n2.isSVG) {\n node = doc.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n } else {\n if (\n // If the tag name is a custom element name\n n2.isCustom && // If the browser supports custom elements\n ((_a2 = doc.defaultView) == null ? void 0 : _a2.customElements) && // If the custom element hasn't been defined yet\n !doc.defaultView.customElements.get(n2.tagName)\n )\n doc.defaultView.customElements.define(\n n2.tagName,\n class extends doc.defaultView.HTMLElement {\n }\n );\n node = doc.createElement(tagName);\n }\n const specialAttributes = {};\n for (const name in n2.attributes) {\n if (!Object.prototype.hasOwnProperty.call(n2.attributes, name)) {\n continue;\n }\n let value = n2.attributes[name];\n if (tagName === \"option\" && name === \"selected\" && value === false) {\n continue;\n }\n if (value === null) {\n continue;\n }\n if (value === true)\n value = \"\";\n if (name.startsWith(\"rr_\")) {\n specialAttributes[name] = value;\n continue;\n }\n const isTextarea = tagName === \"textarea\" && name === \"value\";\n const isRemoteOrDynamicCss = tagName === \"style\" && name === \"_cssText\";\n if (isRemoteOrDynamicCss && hackCss && typeof value === \"string\") {\n value = adaptCssForReplay(value, cache);\n }\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === \"string\") {\n node.appendChild(doc.createTextNode(value));\n n2.childNodes = [];\n continue;\n }\n try {\n if (n2.isSVG && name === \"xlink:href\") {\n node.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n name,\n value.toString()\n );\n } else if (name === \"onload\" || name === \"onclick\" || name.substring(0, 7) === \"onmouse\") {\n node.setAttribute(\"_\" + name, value.toString());\n } else if (tagName === \"meta\" && n2.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n node.setAttribute(\"csp-content\", value.toString());\n continue;\n } else if (tagName === \"link\" && (n2.attributes.rel === \"preload\" || n2.attributes.rel === \"modulepreload\") && n2.attributes.as === \"script\") {\n } else if (tagName === \"link\" && n2.attributes.rel === \"prefetch\" && typeof n2.attributes.href === \"string\" && n2.attributes.href.endsWith(\".js\")) {\n } else if (tagName === \"img\" && n2.attributes.srcset && n2.attributes.rr_dataURL) {\n node.setAttribute(\n \"rrweb-original-srcset\",\n n2.attributes.srcset\n );\n } else {\n node.setAttribute(name, value.toString());\n }\n } catch (error) {\n }\n }\n for (const name in specialAttributes) {\n const value = specialAttributes[name];\n if (tagName === \"canvas\" && name === \"rr_dataURL\") {\n const image = doc.createElement(\"img\");\n image.onload = () => {\n const ctx = node.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n image.src = value.toString();\n if (node.RRNodeType)\n node.rr_dataURL = value.toString();\n } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n const image = node;\n if (!image.currentSrc.startsWith(\"data:\")) {\n image.setAttribute(\n \"rrweb-original-src\",\n n2.attributes.src\n );\n image.src = value.toString();\n }\n }\n if (name === \"rr_width\") {\n node.style.width = value.toString();\n } else if (name === \"rr_height\") {\n node.style.height = value.toString();\n } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n node.currentTime = value;\n } else if (name === \"rr_mediaState\") {\n switch (value) {\n case \"played\":\n node.play().catch((e2) => console.warn(\"media playback error\", e2));\n break;\n case \"paused\":\n node.pause();\n break;\n }\n } else if (name === \"rr_mediaPlaybackRate\" && typeof value === \"number\") {\n node.playbackRate = value;\n } else if (name === \"rr_mediaMuted\" && typeof value === \"boolean\") {\n node.muted = value;\n } else if (name === \"rr_mediaLoop\" && typeof value === \"boolean\") {\n node.loop = value;\n } else if (name === \"rr_mediaVolume\" && typeof value === \"number\") {\n node.volume = value;\n }\n }\n if (n2.isShadowHost) {\n if (!node.shadowRoot) {\n node.attachShadow({ mode: \"open\" });\n } else {\n while (node.shadowRoot.firstChild) {\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\n }\n }\n }\n return node;\n }\n case NodeType$2.Text:\n return doc.createTextNode(\n n2.isStyle && hackCss ? adaptCssForReplay(n2.textContent, cache) : n2.textContent\n );\n case NodeType$2.CDATA:\n return doc.createCDATASection(n2.textContent);\n case NodeType$2.Comment:\n return doc.createComment(n2.textContent);\n default:\n return null;\n }\n}\nfunction buildNodeWithSN(n2, options) {\n const {\n doc,\n mirror: mirror2,\n skipChild = false,\n hackCss = true,\n afterAppend,\n cache\n } = options;\n if (mirror2.has(n2.id)) {\n const nodeInMirror = mirror2.getNode(n2.id);\n const meta = mirror2.getMeta(nodeInMirror);\n if (isNodeMetaEqual(meta, n2))\n return mirror2.getNode(n2.id);\n }\n let node = buildNode(n2, { doc, hackCss, cache });\n if (!node) {\n return null;\n }\n if (n2.rootId && mirror2.getNode(n2.rootId) !== doc) {\n mirror2.replace(n2.rootId, doc);\n }\n if (n2.type === NodeType$2.Document) {\n doc.close();\n doc.open();\n if (n2.compatMode === \"BackCompat\" && n2.childNodes && n2.childNodes[0].type !== NodeType$2.DocumentType) {\n if (n2.childNodes[0].type === NodeType$2.Element && \"xmlns\" in n2.childNodes[0].attributes && n2.childNodes[0].attributes.xmlns === \"http://www.w3.org/1999/xhtml\") {\n doc.write(\n ''\n );\n } else {\n doc.write(\n ''\n );\n }\n }\n node = doc;\n }\n mirror2.add(node, n2);\n if ((n2.type === NodeType$2.Document || n2.type === NodeType$2.Element) && !skipChild) {\n for (const childN of n2.childNodes) {\n const childNode = buildNodeWithSN(childN, {\n doc,\n mirror: mirror2,\n skipChild: false,\n hackCss,\n afterAppend,\n cache\n });\n if (!childNode) {\n console.warn(\"Failed to rebuild\", childN);\n continue;\n }\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\n node.shadowRoot.appendChild(childNode);\n } else if (n2.type === NodeType$2.Document && childN.type == NodeType$2.Element) {\n const htmlElement = childNode;\n let body = null;\n htmlElement.childNodes.forEach((child) => {\n if (child.nodeName === \"BODY\")\n body = child;\n });\n if (body) {\n htmlElement.removeChild(body);\n node.appendChild(childNode);\n htmlElement.appendChild(body);\n } else {\n node.appendChild(childNode);\n }\n } else {\n node.appendChild(childNode);\n }\n if (afterAppend) {\n afterAppend(childNode, childN.id);\n }\n }\n }\n return node;\n}\nfunction visit(mirror2, onVisit) {\n function walk(node) {\n onVisit(node);\n }\n for (const id of mirror2.getIds()) {\n if (mirror2.has(id)) {\n walk(mirror2.getNode(id));\n }\n }\n}\nfunction handleScroll(node, mirror2) {\n const n2 = mirror2.getMeta(node);\n if ((n2 == null ? void 0 : n2.type) !== NodeType$2.Element) {\n return;\n }\n const el = node;\n for (const name in n2.attributes) {\n if (!(Object.prototype.hasOwnProperty.call(n2.attributes, name) && name.startsWith(\"rr_\"))) {\n continue;\n }\n const value = n2.attributes[name];\n if (name === \"rr_scrollLeft\") {\n el.scrollLeft = value;\n }\n if (name === \"rr_scrollTop\") {\n el.scrollTop = value;\n }\n }\n}\nfunction rebuild(n2, options) {\n const {\n doc,\n onVisit,\n hackCss = true,\n afterAppend,\n cache,\n mirror: mirror2 = new Mirror()\n } = options;\n const node = buildNodeWithSN(n2, {\n doc,\n mirror: mirror2,\n skipChild: false,\n hackCss,\n afterAppend,\n cache\n });\n visit(mirror2, (visitedNode) => {\n if (onVisit) {\n onVisit(visitedNode);\n }\n handleScroll(visitedNode, mirror2);\n });\n return node;\n}\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === \"map\") {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction throttle(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function(...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked ? d : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n }\n }\n );\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n var _a2, _b, _c, _d, _e, _f;\n const doc = win.document;\n return {\n left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : (doc == null ? void 0 : doc.documentElement.scrollLeft) || ((_b = (_a2 = doc == null ? void 0 : doc.body) == null ? void 0 : _a2.parentElement) == null ? void 0 : _b.scrollLeft) || ((_c = doc == null ? void 0 : doc.body) == null ? void 0 : _c.scrollLeft) || 0,\n top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc == null ? void 0 : doc.documentElement.scrollTop) || ((_e = (_d = doc == null ? void 0 : doc.body) == null ? void 0 : _d.parentElement) == null ? void 0 : _e.scrollTop) || ((_f = doc == null ? void 0 : doc.body) == null ? void 0 : _f.scrollTop) || 0\n };\n}\nfunction getWindowHeight() {\n return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node) {\n if (!node) {\n return null;\n }\n const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = closestElementOfNode(node);\n if (!el) {\n return false;\n }\n try {\n if (typeof blockClass === \"string\") {\n if (el.classList.contains(blockClass))\n return true;\n if (checkAncestors && el.closest(\".\" + blockClass) !== null)\n return true;\n } else {\n if (classMatchesRegex(el, blockClass, checkAncestors))\n return true;\n }\n } catch (e2) {\n }\n if (blockSelector) {\n if (el.matches(blockSelector))\n return true;\n if (checkAncestors && el.closest(blockSelector) !== null)\n return true;\n }\n return false;\n}\nfunction isSerialized(n2, mirror2) {\n return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2, slimDOMOptions) {\n if (n2.tagName === \"TITLE\" && slimDOMOptions.headTitleMutations) {\n return true;\n }\n return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror2.getId(target);\n if (!mirror2.has(id)) {\n return true;\n }\n if (target.parentNode && target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype.forEach;\n }\n if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError(\"1 argument is required\");\n }\n do {\n if (this === node) {\n return true;\n }\n } while (node = node && node.parentNode);\n return false;\n };\n }\n}\nfunction queueToResolveTrees(queue) {\n const queueNodeMap = {};\n const putIntoMap = (m, parent) => {\n const nodeInTree = {\n value: m,\n parent,\n children: []\n };\n queueNodeMap[m.node.id] = nodeInTree;\n return nodeInTree;\n };\n const queueNodeTrees = [];\n for (const mutation of queue) {\n const { nextId, parentId } = mutation;\n if (nextId && nextId in queueNodeMap) {\n const nextInTree = queueNodeMap[nextId];\n if (nextInTree.parent) {\n const idx = nextInTree.parent.children.indexOf(nextInTree);\n nextInTree.parent.children.splice(\n idx,\n 0,\n putIntoMap(mutation, nextInTree.parent)\n );\n } else {\n const idx = queueNodeTrees.indexOf(nextInTree);\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n }\n continue;\n }\n if (parentId in queueNodeMap) {\n const parentInTree = queueNodeMap[parentId];\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\n continue;\n }\n queueNodeTrees.push(putIntoMap(mutation, null));\n }\n return queueNodeTrees;\n}\nfunction iterateResolveTree(tree, cb) {\n cb(tree.value);\n for (let i2 = tree.children.length - 1; i2 >= 0; i2--) {\n iterateResolveTree(tree.children[i2], cb);\n }\n}\nfunction isSerializedIframe(n2, mirror2) {\n return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n return Boolean(\n n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n );\n}\nfunction getBaseDimension(node, rootIframe) {\n var _a2, _b;\n const frameElement = (_b = (_a2 = node.ownerDocument) == null ? void 0 : _a2.defaultView) == null ? void 0 : _b.frameElement;\n if (!frameElement || frameElement === rootIframe) {\n return {\n x: 0,\n y: 0,\n relativeScale: 1,\n absoluteScale: 1\n };\n }\n const frameDimension = frameElement.getBoundingClientRect();\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n const relativeScale = frameDimension.height / frameElement.clientHeight;\n return {\n x: frameDimension.x * frameBaseDimension.relativeScale + frameBaseDimension.x,\n y: frameDimension.y * frameBaseDimension.relativeScale + frameBaseDimension.y,\n relativeScale,\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale\n };\n}\nfunction hasShadowRoot(n2) {\n return Boolean(n2 == null ? void 0 : n2.shadowRoot);\n}\nfunction getNestedRule(rules2, position) {\n const rule = rules2[position[0]];\n if (position.length === 1) {\n return rule;\n } else {\n return getNestedRule(\n rule.cssRules[position[1]].cssRules,\n position.slice(2)\n );\n }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n const positions = [...nestedIndex];\n const index = positions.pop();\n return { positions, index };\n}\nfunction uniqueTextMutations(mutations) {\n const idSet = /* @__PURE__ */ new Set();\n const uniqueMutations = [];\n for (let i2 = mutations.length; i2--; ) {\n const mutation = mutations[i2];\n if (!idSet.has(mutation.id)) {\n uniqueMutations.push(mutation);\n idSet.add(mutation.id);\n }\n }\n return uniqueMutations;\n}\nclass StyleSheetMirror {\n constructor() {\n __publicField(this, \"id\", 1);\n __publicField(this, \"styleIDMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"idStyleMap\", /* @__PURE__ */ new Map());\n }\n getId(stylesheet) {\n return this.styleIDMap.get(stylesheet) ?? -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n /**\n * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n */\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === void 0) {\n newId = this.id++;\n } else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = /* @__PURE__ */ new WeakMap();\n this.idStyleMap = /* @__PURE__ */ new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n2) {\n var _a2, _b;\n let shadowHost = null;\n if (((_b = (_a2 = n2.getRootNode) == null ? void 0 : _a2.call(n2)) == null ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE && n2.getRootNode().host)\n shadowHost = n2.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n let rootShadowHost = n2;\n let shadowHost;\n while (shadowHost = getShadowHost(rootShadowHost))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n2);\n return doc.contains(shadowHost);\n}\nfunction inDom(n2) {\n const doc = n2.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n2) || shadowHostInDom(n2);\n}\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n StyleSheetMirror,\n get _mirror() {\n return _mirror;\n },\n closestElementOfNode,\n getBaseDimension,\n getNestedRule,\n getPositionsAndIndex,\n getRootShadowHost,\n getShadowHost,\n getWindowHeight,\n getWindowScroll,\n getWindowWidth,\n hasShadowRoot,\n hookSetter,\n inDom,\n isAncestorRemoved,\n isBlocked,\n isIgnored,\n isSerialized,\n isSerializedIframe,\n isSerializedStylesheet,\n iterateResolveTree,\n legacy_isTouchEvent,\n get nowTimestamp() {\n return nowTimestamp;\n },\n on,\n patch,\n polyfill: polyfill$1,\n queueToResolveTrees,\n shadowHostInDom,\n throttle,\n uniqueTextMutations\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nfunction isNodeInLinkedList(n2) {\n return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n constructor() {\n __publicField(this, \"length\", 0);\n __publicField(this, \"head\", null);\n __publicField(this, \"tail\", null);\n }\n get(position) {\n if (position >= this.length) {\n throw new Error(\"Position outside of list range\");\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = (current == null ? void 0 : current.next) || null;\n }\n return current;\n }\n addNode(n2) {\n const node = {\n value: n2,\n previous: null,\n next: null\n };\n n2.__ln = node;\n if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n const current = n2.previousSibling.__ln.next;\n node.next = current;\n node.previous = n2.previousSibling.__ln;\n n2.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n const current = n2.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n2.nextSibling.__ln;\n n2.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n } else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n2) {\n const current = n2.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n } else {\n this.tail = null;\n }\n } else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n } else {\n this.tail = current.previous;\n }\n }\n if (n2.__ln) {\n delete n2.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"texts\", []);\n __publicField(this, \"attributes\", []);\n __publicField(this, \"attributeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"removes\", []);\n __publicField(this, \"mapRemoves\", []);\n __publicField(this, \"movedMap\", {});\n /**\n * the browser MutationObserver emits multiple mutations after\n * a delay for performance reasons, making tracing added nodes hard\n * in our `processMutations` callback function.\n * For example, if we append an element el_1 into body, and then append\n * another element el_2 into el_1, these two mutations may be passed to the\n * callback function together when the two operations were done.\n * Generally we need to trace child nodes of newly added nodes, but in this\n * case if we count el_2 as el_1's child node in the first mutation record,\n * then we will count el_2 again in the second mutation record which was\n * duplicated.\n * To avoid of duplicate counting added nodes, we use a Set to store\n * added nodes and its child nodes during iterate mutation records. Then\n * collect added nodes from the Set which have no duplicate copy. But\n * this also causes newly added nodes will not be serialized with id ASAP,\n * which means all the id related calculation should be lazy too.\n */\n __publicField(this, \"addedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"movedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"droppedSet\", /* @__PURE__ */ new Set());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"blockClass\");\n __publicField(this, \"blockSelector\");\n __publicField(this, \"maskTextClass\");\n __publicField(this, \"maskTextSelector\");\n __publicField(this, \"inlineStylesheet\");\n __publicField(this, \"maskInputOptions\");\n __publicField(this, \"maskTextFn\");\n __publicField(this, \"maskInputFn\");\n __publicField(this, \"keepIframeSrcFn\");\n __publicField(this, \"recordCanvas\");\n __publicField(this, \"inlineImages\");\n __publicField(this, \"slimDOMOptions\");\n __publicField(this, \"dataURLOptions\");\n __publicField(this, \"doc\");\n __publicField(this, \"mirror\");\n __publicField(this, \"iframeManager\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"shadowDomManager\");\n __publicField(this, \"canvasManager\");\n __publicField(this, \"processedNodeManager\");\n __publicField(this, \"unattachedDoc\");\n __publicField(this, \"processMutations\", (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n });\n __publicField(this, \"emit\", () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = /* @__PURE__ */ new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n2) => {\n let ns = n2;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n2) => {\n if (!n2.parentNode || !inDom(n2) || n2.parentNode.tagName === \"TEXTAREA\") {\n return;\n }\n const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode);\n const nextId = getNextId(n2);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n2);\n }\n const sn = serializeNodeWithId(n2, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskTextClass: this.maskTextClass,\n maskTextSelector: this.maskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(\n currentN\n );\n }\n if (hasShadowRoot(n2)) {\n this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n }\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n2 of this.movedSet) {\n if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) {\n continue;\n }\n pushAdd(n2);\n }\n for (const n2 of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n pushAdd(n2);\n } else if (isAncestorInSet(this.movedSet, n2)) {\n pushAdd(n2);\n } else {\n this.droppedSet.add(n2);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n } else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode.host;\n const parentId2 = this.mirror.getId(shadowHost);\n if (parentId2 !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts.map((text) => {\n const n2 = text.node;\n if (n2.parentNode && n2.parentNode.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(n2.parentNode);\n }\n return {\n id: this.mirror.getId(n2),\n value: text.value\n };\n }).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes.map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === \"string\") {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes\n };\n }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds\n };\n if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = /* @__PURE__ */ new WeakMap();\n this.removes = [];\n this.addedSet = /* @__PURE__ */ new Set();\n this.movedSet = /* @__PURE__ */ new Set();\n this.droppedSet = /* @__PURE__ */ new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n });\n __publicField(this, \"genTextAreaValueMutation\", (textarea) => {\n let item = this.attributeMap.get(textarea);\n if (!item) {\n item = {\n node: textarea,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(textarea, item);\n }\n item.attributes.value = Array.from(\n textarea.childNodes,\n (cn) => cn.textContent || \"\"\n ).join(\"\");\n });\n __publicField(this, \"processMutation\", (m) => {\n if (isIgnored(m.target, this.mirror, this.slimDOMOptions)) {\n return;\n }\n switch (m.type) {\n case \"characterData\": {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) && value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(\n m.target,\n this.maskTextClass,\n this.maskTextSelector,\n true\n // checkAncestors\n ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n node: m.target\n });\n }\n break;\n }\n case \"attributes\": {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === \"value\") {\n const type = getInputType(target);\n value = maskInputValue({\n element: target,\n maskInputOptions: this.maskInputOptions,\n tagName: target.tagName,\n type,\n value,\n maskInputFn: this.maskInputFn\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = \"rr_src\";\n } else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {}\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n target.setAttribute(\"data-rr-is-password\", \"true\");\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(\n this.doc,\n toLowerCase(target.tagName),\n toLowerCase(attributeName),\n value\n );\n if (attributeName === \"style\") {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc = document.implementation.createHTMLDocument();\n } catch (e2) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement(\"span\");\n if (m.oldValue) {\n old.setAttribute(\"style\", m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === \"\") {\n item.styleDiff[pname] = newValue;\n } else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n } else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === \"\") {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case \"childList\": {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\n return;\n if (m.target.tagName === \"TEXTAREA\") {\n this.genTextAreaValueMutation(m.target);\n return;\n }\n m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n m.removedNodes.forEach((n2) => {\n const nodeId = this.mirror.getId(n2);\n const parentId = isShadowRoot(m.target) ? this.mirror.getId(m.target.host) : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) || isIgnored(n2, this.mirror, this.slimDOMOptions) || !isSerialized(n2, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n2)) {\n deepDelete(this.addedSet, n2);\n this.droppedSet.add(n2);\n } else if (this.addedSet.has(m.target) && nodeId === -1)\n ;\n else if (isAncestorRemoved(m.target, this.mirror))\n ;\n else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n2);\n } else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n });\n }\n this.mapRemoves.push(n2);\n });\n break;\n }\n }\n });\n /**\n * Make sure you check if `n`'s parent is blocked before calling this function\n * */\n __publicField(this, \"genAdds\", (n2, target) => {\n if (this.processedNodeManager.inOtherBuffer(n2, this))\n return;\n if (this.addedSet.has(n2) || this.movedSet.has(n2))\n return;\n if (this.mirror.hasNode(n2)) {\n if (isIgnored(n2, this.mirror, this.slimDOMOptions)) {\n return;\n }\n this.movedSet.add(n2);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n }\n } else {\n this.addedSet.add(n2);\n this.droppedSet.delete(n2);\n }\n if (!isBlocked(n2, this.blockClass, this.blockSelector, false)) {\n n2.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n2)) {\n n2.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n2);\n });\n }\n }\n });\n }\n init(options) {\n [\n \"mutationCb\",\n \"blockClass\",\n \"blockSelector\",\n \"maskTextClass\",\n \"maskTextSelector\",\n \"inlineStylesheet\",\n \"maskInputOptions\",\n \"maskTextFn\",\n \"maskInputFn\",\n \"keepIframeSrcFn\",\n \"recordCanvas\",\n \"inlineImages\",\n \"slimDOMOptions\",\n \"dataURLOptions\",\n \"doc\",\n \"mirror\",\n \"iframeManager\",\n \"stylesheetManager\",\n \"shadowDomManager\",\n \"canvasManager\",\n \"processedNodeManager\"\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n2) {\n addsSet.delete(n2);\n n2.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n let node = n2.parentNode;\n while (node) {\n const parentId = mirror2.getId(node);\n if (removes.some((r2) => r2.id === parentId)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\nfunction isAncestorInSet(set, n2) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n const { parentNode } = n2;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = (...rest) => {\n try {\n return cb(...rest);\n } catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return;\n }\n throw error;\n }\n };\n return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if (\"composedPath\" in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n } else if (\"path\" in event && event.path.length) {\n return event.path[0];\n }\n } catch {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var _a2, _b;\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver || /**\n * Some websites may disable MutationObserver by removing it from the window object.\n * If someone is using rrweb to build a browser extention or things like it, they\n * could not change the website's code but can have an opportunity to inject some\n * code before the website executing its JS logic.\n * Then they can do this to store the native MutationObserver:\n * window.__rrMutationObserver = MutationObserver\n */\n window.__rrMutationObserver;\n const angularZoneSymbol = (_b = (_a2 = window == null ? void 0 : window.Zone) == null ? void 0 : _a2.__symbol__) == null ? void 0 : _b.call(_a2, \"MutationObserver\");\n if (angularZoneSymbol && window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(\n callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer))\n );\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction initMoveObserver({\n mousemoveCb,\n sampling,\n doc,\n mirror: mirror2\n}) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle(\n callbackWrapper(\n (source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(\n positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }),\n source\n );\n positions = [];\n timeBaseline = null;\n }\n ),\n callbackThreshold\n );\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror2.getId(target),\n timeOffset: nowTimestamp() - timeBaseline\n });\n wrappedCb(\n typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n );\n }),\n threshold,\n {\n trailing: false\n }\n )\n );\n const handlers = [\n on(\"mousemove\", updatePosition, doc),\n on(\"touchmove\", updatePosition, doc),\n on(\"drag\", updatePosition, doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({\n mouseInteractionCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if (\"pointerType\" in event) {\n switch (event.pointerType) {\n case \"mouse\":\n pointerType = PointerTypes.Mouse;\n break;\n case \"touch\":\n pointerType = PointerTypes.Touch;\n break;\n case \"pen\":\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = \"TouchStart\";\n } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = \"TouchEnd\";\n }\n } else if (pointerType === PointerTypes.Pen)\n ;\n } else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n pointerType = null;\n }\n } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e2) {\n return;\n }\n const id = mirror2.getId(target);\n const { clientX, clientY } = e2;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...pointerType !== null && { pointerType }\n });\n };\n };\n Object.keys(MouseInteractions).filter(\n (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n ).forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace(\n \"mouse\",\n \"pointer\"\n );\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({\n scrollCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n sampling\n}) {\n const updatePosition = callbackWrapper(\n throttle(\n callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const id = mirror2.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top\n });\n } else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop\n });\n }\n }),\n sampling.scroll || 100\n )\n );\n return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(\n throttle(\n callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height)\n });\n lastH = height;\n lastW = width;\n }\n }),\n 200\n )\n );\n return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n inputCb,\n doc,\n mirror: mirror2,\n blockClass,\n blockSelector,\n ignoreClass,\n ignoreSelector,\n maskInputOptions,\n maskInputFn,\n sampling,\n userTriggeredOnInput\n}) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && target.tagName;\n if (target && tagName === \"OPTION\") {\n target = target.parentElement;\n }\n if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n if (target.classList.contains(ignoreClass) || ignoreSelector && target.matches(ignoreSelector)) {\n return;\n }\n let text = target.value;\n let isChecked = false;\n const type = getInputType(target) || \"\";\n if (type === \"radio\" || type === \"checkbox\") {\n isChecked = target.checked;\n } else if (maskInputOptions[tagName.toLowerCase()] || maskInputOptions[type]) {\n text = maskInputValue({\n element: target,\n maskInputOptions,\n tagName,\n type,\n value: text,\n maskInputFn\n });\n }\n cbWithDedup(\n target,\n userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n );\n const name = target.name;\n if (type === \"radio\" && name && isChecked) {\n doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el) => {\n if (el !== target) {\n const text2 = el.value;\n cbWithDedup(\n el,\n userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n );\n }\n });\n }\n }\n function cbWithDedup(target, v2) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n lastInputValueMap.set(target, v2);\n const id = mirror2.getId(target);\n callbackWrapper(inputCb)({\n ...v2,\n id\n });\n }\n }\n const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n const handlers = events.map(\n (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n );\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n currentWindow.HTMLInputElement.prototype,\n \"value\"\n );\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, \"value\"],\n [currentWindow.HTMLInputElement.prototype, \"checked\"],\n [currentWindow.HTMLSelectElement.prototype, \"value\"],\n [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n // Some UI library use selectedIndex to set select value\n [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(\n ...hookProperties.map(\n (p) => hookSetter(\n p[0],\n p[1],\n {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false\n // userTriggered to false as this could well be programmatic\n });\n }\n },\n false,\n currentWindow\n )\n )\n );\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n const rules2 = Array.from(\n childRule.parentRule.cssRules\n );\n const index = rules2.indexOf(childRule);\n pos.unshift(index);\n } else if (childRule.parentStyleSheet) {\n const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules2.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror2.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n } else {\n if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n insertRule: type.prototype.insertRule,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n deleteRule: type.prototype.deleteRule\n };\n type.prototype.insertRule = new Proxy(\n unmodifiedFunctions[typeKey].insertRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0\n // defaults to 0\n ]\n }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n type.prototype.deleteRule = new Proxy(\n unmodifiedFunctions[typeKey].deleteRule,\n {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(\n thisArg.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] }\n ]\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n }\n );\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({\n mirror: mirror2,\n stylesheetManager\n}, host) {\n var _a2, _b, _c;\n let hostId = null;\n if (host.nodeName === \"#document\")\n hostId = mirror2.getId(host);\n else\n hostId = mirror2.getId(host.host);\n const patchTarget = host.nodeName === \"#document\" ? (_a2 = host.defaultView) == null ? void 0 : _a2.Document : (_c = (_b = host.ownerDocument) == null ? void 0 : _b.defaultView) == null ? void 0 : _c.ShadowRoot;\n const originalPropertyDescriptor = (patchTarget == null ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(\n patchTarget == null ? void 0 : patchTarget.prototype,\n \"adoptedStyleSheets\"\n ) : void 0;\n if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n var _a3;\n return (_a3 = originalPropertyDescriptor.get) == null ? void 0 : _a3.call(this);\n },\n set(sheets) {\n var _a3;\n const result = (_a3 = originalPropertyDescriptor.set) == null ? void 0 : _a3.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n } catch (e2) {\n }\n }\n return result;\n }\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, \"adoptedStyleSheets\", {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n get: originalPropertyDescriptor.get,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n set: originalPropertyDescriptor.set\n });\n });\n}\nfunction initStyleDeclarationObserver({\n styleDeclarationCb,\n mirror: mirror2,\n ignoreCSSAttributes,\n stylesheetManager\n}, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper(\n (target, thisArg, argumentsList) => {\n var _a2;\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(\n (_a2 = thisArg.parentRule) == null ? void 0 : _a2.parentStyleSheet,\n mirror2,\n stylesheetManager.styleMirror\n );\n if (id && id !== -1 || styleId && styleId !== -1) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n index: getNestedCSSRulePositions(thisArg.parentRule)\n });\n }\n return target.apply(thisArg, argumentsList);\n }\n )\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({\n mediaInteractionCb,\n blockClass,\n blockSelector,\n mirror: mirror2,\n sampling,\n doc\n}) {\n const handler = callbackWrapper(\n (type) => throttle(\n callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate, loop } = target;\n mediaInteractionCb({\n type,\n id: mirror2.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n loop\n });\n }),\n sampling.media || 500\n )\n );\n const handlers = [\n on(\"play\", handler(MediaInteractions.Play), doc),\n on(\"pause\", handler(MediaInteractions.Pause), doc),\n on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = /* @__PURE__ */ new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace2(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== \"string\",\n descriptors,\n fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n });\n return fontFace;\n };\n const restoreHandler = patch(\n doc.fonts,\n \"add\",\n function(original) {\n return function(fontFace) {\n setTimeout(\n callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }),\n 0\n );\n return original.apply(this, [fontFace]);\n };\n }\n );\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror: mirror2, blockClass, blockSelector, selectionCb } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || collapsed && (selection == null ? void 0 : selection.isCollapsed))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i2 = 0; i2 < count; i2++) {\n const range = selection.getRangeAt(i2);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror2.getId(startContainer),\n startOffset,\n end: mirror2.getId(endContainer),\n endOffset\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n doc,\n customElementCb\n}) {\n const win = doc.defaultView;\n if (!win || !win.customElements)\n return () => {\n };\n const restoreHandler = patch(\n win.customElements,\n \"define\",\n function(original) {\n return function(name, constructor, options) {\n try {\n customElementCb({\n define: {\n name\n }\n });\n } catch (e2) {\n console.warn(`Custom element callback failed for ${name}`);\n }\n return original.apply(this, [name, constructor, options]);\n };\n }\n );\n return restoreHandler;\n}\nfunction mergeHooks(o2, hooks) {\n const {\n mutationCb,\n mousemoveCb,\n mouseInteractionCb,\n scrollCb,\n viewportResizeCb,\n inputCb,\n mediaInteractionCb,\n styleSheetRuleCb,\n styleDeclarationCb,\n canvasMutationCb,\n fontCb,\n selectionCb,\n customElementCb\n } = o2;\n o2.mutationCb = (...p) => {\n if (hooks.mutation) {\n hooks.mutation(...p);\n }\n mutationCb(...p);\n };\n o2.mousemoveCb = (...p) => {\n if (hooks.mousemove) {\n hooks.mousemove(...p);\n }\n mousemoveCb(...p);\n };\n o2.mouseInteractionCb = (...p) => {\n if (hooks.mouseInteraction) {\n hooks.mouseInteraction(...p);\n }\n mouseInteractionCb(...p);\n };\n o2.scrollCb = (...p) => {\n if (hooks.scroll) {\n hooks.scroll(...p);\n }\n scrollCb(...p);\n };\n o2.viewportResizeCb = (...p) => {\n if (hooks.viewportResize) {\n hooks.viewportResize(...p);\n }\n viewportResizeCb(...p);\n };\n o2.inputCb = (...p) => {\n if (hooks.input) {\n hooks.input(...p);\n }\n inputCb(...p);\n };\n o2.mediaInteractionCb = (...p) => {\n if (hooks.mediaInteaction) {\n hooks.mediaInteaction(...p);\n }\n mediaInteractionCb(...p);\n };\n o2.styleSheetRuleCb = (...p) => {\n if (hooks.styleSheetRule) {\n hooks.styleSheetRule(...p);\n }\n styleSheetRuleCb(...p);\n };\n o2.styleDeclarationCb = (...p) => {\n if (hooks.styleDeclaration) {\n hooks.styleDeclaration(...p);\n }\n styleDeclarationCb(...p);\n };\n o2.canvasMutationCb = (...p) => {\n if (hooks.canvasMutation) {\n hooks.canvasMutation(...p);\n }\n canvasMutationCb(...p);\n };\n o2.fontCb = (...p) => {\n if (hooks.font) {\n hooks.font(...p);\n }\n fontCb(...p);\n };\n o2.selectionCb = (...p) => {\n if (hooks.selection) {\n hooks.selection(...p);\n }\n selectionCb(...p);\n };\n o2.customElementCb = (...c2) => {\n if (hooks.customElement) {\n hooks.customElement(...c2);\n }\n customElementCb(...c2);\n };\n}\nfunction initObservers(o2, hooks = {}) {\n const currentWindow = o2.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n mergeHooks(o2, hooks);\n let mutationObserver;\n if (o2.recordDOM) {\n mutationObserver = initMutationObserver(o2, o2.doc);\n }\n const mousemoveHandler = initMoveObserver(o2);\n const mouseInteractionHandler = initMouseInteractionObserver(o2);\n const scrollHandler = initScrollObserver(o2);\n const viewportResizeHandler = initViewportResizeObserver(o2, {\n win: currentWindow\n });\n const inputHandler = initInputObserver(o2);\n const mediaInteractionHandler = initMediaInteractionObserver(o2);\n let styleSheetObserver = () => {\n };\n let adoptedStyleSheetObserver = () => {\n };\n let styleDeclarationObserver = () => {\n };\n let fontObserver = () => {\n };\n if (o2.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n win: currentWindow\n });\n if (o2.collectFonts) {\n fontObserver = initFontObserver(o2);\n }\n }\n const selectionObserver = initSelectionObserver(o2);\n const customElementObserver = initCustomElementObserver(o2);\n const pluginHandlers = [];\n for (const plugin of o2.plugins) {\n pluginHandlers.push(\n plugin.observer(plugin.callback, currentWindow, plugin.options)\n );\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(\n typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n );\n}\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n __publicField(this, \"iframeIdToRemoteIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"iframeRemoteIdToIdMap\", /* @__PURE__ */ new WeakMap());\n this.generateIdFn = generateIdFn;\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map(\n (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n );\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== \"number\")\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = /* @__PURE__ */ new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = /* @__PURE__ */ new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\nclass IframeManager {\n constructor(options) {\n __publicField(this, \"iframes\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"crossOriginIframeMirror\", new CrossOriginIframeMirror(genId));\n __publicField(this, \"crossOriginIframeStyleMirror\");\n __publicField(this, \"crossOriginIframeRootIdMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"wrappedEmit\");\n __publicField(this, \"loadListener\");\n __publicField(this, \"stylesheetManager\");\n __publicField(this, \"recordCrossOriginIframes\");\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n this.stylesheetManager.styleMirror.generateId.bind(\n this.stylesheetManager.styleMirror\n )\n );\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n var _a2, _b;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n });\n if (this.recordCrossOriginIframes)\n (_a2 = iframeEl.contentWindow) == null ? void 0 : _a2.addEventListener(\n \"message\",\n this.handleMessage.bind(this)\n );\n (_b = this.loadListener) == null ? void 0 : _b.call(this, iframeEl);\n if (iframeEl.contentDocument && iframeEl.contentDocument.adoptedStyleSheets && iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(\n iframeEl.contentDocument.adoptedStyleSheets,\n this.mirror.getId(iframeEl.contentDocument)\n );\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(\n iframeEl,\n crossOriginMessageEvent.data.event\n );\n if (transformedEvent)\n this.wrappedEmit(\n transformedEvent,\n crossOriginMessageEvent.data.isCheckout\n );\n }\n transformCrossOriginEvent(iframeEl, e2) {\n var _a2;\n switch (e2.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e2.data.node, iframeEl);\n const rootId = e2.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e2.data.node, rootId);\n return {\n timestamp: e2.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e2.data.node\n }\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true\n }\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e2;\n }\n case EventType.Custom: {\n this.replaceIds(\n e2.data.payload,\n iframeEl,\n [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n );\n return e2;\n }\n case EventType.IncrementalSnapshot: {\n switch (e2.data.source) {\n case IncrementalSource.Mutation: {\n e2.data.adds.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\n \"parentId\",\n \"nextId\",\n \"previousId\"\n ]);\n this.replaceIdOnNode(n2.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n2.node, rootId);\n });\n e2.data.removes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n });\n e2.data.attributes.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n e2.data.texts.forEach((n2) => {\n this.replaceIds(n2, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e2.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, [\"id\"]);\n });\n return e2;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n return e2;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n return e2;\n }\n case IncrementalSource.Font: {\n return e2;\n }\n case IncrementalSource.Selection: {\n e2.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n });\n return e2;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e2.data, iframeEl, [\"id\"]);\n this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n (_a2 = e2.data.styles) == null ? void 0 : _a2.forEach((style) => {\n this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n });\n return e2;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\")\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(\n iframeEl,\n obj[key]\n );\n } else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, [\"id\", \"rootId\"]);\n if (\"childNodes\" in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$2.Document && !node.rootId)\n node.rootId = rootId;\n if (\"childNodes\" in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n __publicField(this, \"shadowDoms\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"scrollCb\");\n __publicField(this, \"bypassOptions\");\n __publicField(this, \"mirror\");\n __publicField(this, \"restoreHandlers\", []);\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n const observer = initMutationObserver(\n {\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this\n },\n shadowRoot\n );\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(\n initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n doc: shadowRoot,\n mirror: this.mirror\n })\n );\n setTimeout(() => {\n if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(\n shadowRoot.adoptedStyleSheets,\n this.mirror.getId(shadowRoot.host)\n );\n this.restoreHandlers.push(\n initAdoptedStyleSheetObserver(\n {\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager\n },\n shadowRoot\n )\n );\n }, 0);\n }\n /**\n * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n */\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n return;\n this.patchAttachShadow(\n iframeElement.contentWindow.Element,\n iframeElement.contentDocument\n );\n }\n /**\n * Patch 'attachShadow' to observe newly added shadow doms.\n */\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(\n patch(\n element.prototype,\n \"attachShadow\",\n function(original) {\n return function(option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }\n )\n );\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n } catch (e2) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = /* @__PURE__ */ new WeakSet();\n }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n for (i2 = 0; i2 < len; i2 += 3) {\n base64 += chars[bytes[i2] >> 2];\n base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n base64 += chars[bytes[i2 + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n};\nvar decode = function(base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i2, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i2 = 0; i2 < len; i2 += 4) {\n encoded1 = lookup[base64.charCodeAt(i2)];\n encoded2 = lookup[base64.charCodeAt(i2 + 1)];\n encoded3 = lookup[base64.charCodeAt(i2 + 2)];\n encoded4 = lookup[base64.charCodeAt(i2 + 3)];\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return arraybuffer;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n let contextMap = canvasVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n canvasVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n return;\n const name = value.constructor.name;\n const list = variableListFor$1(ctx, name);\n let index = list.indexOf(value);\n if (index === -1) {\n index = list.length;\n list.push(value);\n }\n return index;\n};\nfunction serializeArg(value, win, ctx) {\n if (value instanceof Array) {\n return value.map((arg) => serializeArg(arg, win, ctx));\n } else if (value === null) {\n return value;\n } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [Object.values(value)]\n };\n } else if (\n // SharedArrayBuffer disabled on most browsers due to spectre.\n // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n // value instanceof SharedArrayBuffer ||\n value instanceof ArrayBuffer\n ) {\n const name = value.constructor.name;\n const base64 = encode(value);\n return {\n rr_type: name,\n base64\n };\n } else if (value instanceof DataView) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [\n serializeArg(value.buffer, win, ctx),\n value.byteOffset,\n value.byteLength\n ]\n };\n } else if (value instanceof HTMLImageElement) {\n const name = value.constructor.name;\n const { src } = value;\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof HTMLCanvasElement) {\n const name = \"HTMLImageElement\";\n const src = value.toDataURL();\n return {\n rr_type: name,\n src\n };\n } else if (value instanceof ImageData) {\n const name = value.constructor.name;\n return {\n rr_type: name,\n args: [serializeArg(value.data, win, ctx), value.width, value.height]\n };\n } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n const name = value.constructor.name;\n const index = saveWebGLVar(value, win, ctx);\n return {\n rr_type: name,\n index\n };\n }\n return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n const webGLConstructorNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\",\n // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n \"WebGLVertexArrayObjectOES\"\n ];\n const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n (name) => typeof win[name] === \"function\"\n );\n return Boolean(\n supportedWebGLConstructorNames.find(\n (name) => value instanceof win[name]\n )\n );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass2, blockSelector) {\n const handlers = [];\n const props2D = Object.getOwnPropertyNames(\n win.CanvasRenderingContext2D.prototype\n );\n for (const prop of props2D) {\n try {\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n win.CanvasRenderingContext2D.prototype,\n prop,\n function(original) {\n return function(...args) {\n if (!isBlocked(this.canvas, blockClass2, blockSelector, true)) {\n setTimeout(() => {\n const recordArgs = serializeArgs(args, win, this);\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: recordArgs\n });\n }, 0);\n }\n return original.apply(this, args);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(\n win.CanvasRenderingContext2D.prototype,\n prop,\n {\n set(v2) {\n cb(this.canvas, {\n type: CanvasContext[\"2D\"],\n property: prop,\n args: [v2],\n setter: true\n });\n }\n }\n );\n handlers.push(hookHandler);\n }\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction getNormalizedContextName(contextType) {\n return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\n const handlers = [];\n try {\n const restoreHandler = patch(\n win.HTMLCanvasElement.prototype,\n \"getContext\",\n function(original) {\n return function(contextType, ...args) {\n if (!isBlocked(this, blockClass, blockSelector, true)) {\n const ctxName = getNormalizedContextName(contextType);\n if (!(\"__context\" in this))\n this.__context = ctxName;\n if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n if (args[0] && typeof args[0] === \"object\") {\n const contextAttributes = args[0];\n if (!contextAttributes.preserveDrawingBuffer) {\n contextAttributes.preserveDrawingBuffer = true;\n }\n } else {\n args.splice(0, 1, {\n preserveDrawingBuffer: true\n });\n }\n }\n }\n return original.apply(this, [contextType, ...args]);\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass2, blockSelector, _mirror2, win) {\n const handlers = [];\n const props = Object.getOwnPropertyNames(prototype);\n for (const prop of props) {\n if (\n //prop.startsWith('get') || // e.g. getProgramParameter, but too risky\n [\n \"isContextLost\",\n \"canvas\",\n \"drawingBufferWidth\",\n \"drawingBufferHeight\"\n ].includes(prop)\n ) {\n continue;\n }\n try {\n if (typeof prototype[prop] !== \"function\") {\n continue;\n }\n const restoreHandler = patch(\n prototype,\n prop,\n function(original) {\n return function(...args) {\n const result = original.apply(this, args);\n saveWebGLVar(result, win, this);\n if (\"tagName\" in this.canvas && !isBlocked(this.canvas, blockClass2, blockSelector, true)) {\n const recordArgs = serializeArgs(args, win, this);\n const mutation = {\n type,\n property: prop,\n args: recordArgs\n };\n cb(this.canvas, mutation);\n }\n return result;\n };\n }\n );\n handlers.push(restoreHandler);\n } catch {\n const hookHandler = hookSetter(prototype, prop, {\n set(v2) {\n cb(this.canvas, {\n type,\n property: prop,\n args: [v2],\n setter: true\n });\n }\n });\n handlers.push(hookHandler);\n }\n }\n return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass2, blockSelector, mirror2) {\n const handlers = [];\n handlers.push(\n ...patchGLPrototype(\n win.WebGLRenderingContext.prototype,\n CanvasContext.WebGL,\n cb,\n blockClass2,\n blockSelector,\n mirror2,\n win\n )\n );\n if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n handlers.push(\n ...patchGLPrototype(\n win.WebGL2RenderingContext.prototype,\n CanvasContext.WebGL2,\n cb,\n blockClass2,\n blockSelector,\n mirror2,\n win\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n };\n}\nconst encodedJs = \"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpCiAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50QmxvYk1hcC5nZXQoaWQpOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIHRyYW5zcGFyZW50QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICAgIHJldHVybiBiYXNlNjQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgfQogIGNvbnN0IHdvcmtlciA9IHNlbGY7CiAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGZ1bmN0aW9uKGUpIHsKICAgIGlmICgiT2Zmc2NyZWVuQ2FudmFzIiBpbiBnbG9iYWxUaGlzKSB7CiAgICAgIGNvbnN0IHsgaWQsIGJpdG1hcCwgd2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMgfSA9IGUuZGF0YTsKICAgICAgY29uc3QgdHJhbnNwYXJlbnRCYXNlNjQgPSBnZXRUcmFuc3BhcmVudEJsb2JGb3IoCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0LAogICAgICAgIGRhdGFVUkxPcHRpb25zCiAgICAgICk7CiAgICAgIGNvbnN0IG9mZnNjcmVlbiA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7CiAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCIyZCIpOwogICAgICBjdHguZHJhd0ltYWdlKGJpdG1hcCwgMCwgMCk7CiAgICAgIGJpdG1hcC5jbG9zZSgpOwogICAgICBjb25zdCBibG9iID0gYXdhaXQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOwogICAgICBjb25zdCB0eXBlID0gYmxvYi50eXBlOwogICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKTsKICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsKICAgICAgaWYgKCFsYXN0QmxvYk1hcC5oYXMoaWQpICYmIGF3YWl0IHRyYW5zcGFyZW50QmFzZTY0ID09PSBiYXNlNjQpIHsKICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOwogICAgICB9CiAgICAgIGlmIChsYXN0QmxvYk1hcC5nZXQoaWQpID09PSBiYXNlNjQpCiAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOwogICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoewogICAgICAgIGlkLAogICAgICAgIHR5cGUsCiAgICAgICAgYmFzZTY0LAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9KTsKICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkOiBlLmRhdGEuaWQgfSk7CiAgICB9CiAgfTsKfSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1hZ2UtYml0bWFwLWRhdGEtdXJsLXdvcmtlci1CWjFyN1JKRC5qcy5tYXAK\";\nconst decodeBase64 = (base64) => Uint8Array.from(atob(base64), (c2) => c2.charCodeAt(0));\nconst blob = typeof window !== \"undefined\" && window.Blob && new Blob([decodeBase64(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\nfunction WorkerWrapper(options) {\n let objURL;\n try {\n objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n if (!objURL)\n throw \"\";\n const worker = new Worker(objURL, {\n name: options == null ? void 0 : options.name\n });\n worker.addEventListener(\"error\", () => {\n (window.URL || window.webkitURL).revokeObjectURL(objURL);\n });\n return worker;\n } catch (e2) {\n return new Worker(\n \"data:text/javascript;base64,\" + encodedJs,\n {\n name: options == null ? void 0 : options.name\n }\n );\n } finally {\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n}\nclass CanvasManager {\n constructor(options) {\n __publicField(this, \"pendingCanvasMutations\", /* @__PURE__ */ new Map());\n __publicField(this, \"rafStamps\", { latestId: 0, invokeId: null });\n __publicField(this, \"mirror\");\n __publicField(this, \"mutationCb\");\n __publicField(this, \"resetObservers\");\n __publicField(this, \"frozen\", false);\n __publicField(this, \"locked\", false);\n __publicField(this, \"processMutation\", (target, mutation) => {\n const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n if (newFrame || !this.rafStamps.invokeId)\n this.rafStamps.invokeId = this.rafStamps.latestId;\n if (!this.pendingCanvasMutations.has(target)) {\n this.pendingCanvasMutations.set(target, []);\n }\n this.pendingCanvasMutations.get(target).push(mutation);\n });\n const {\n sampling = \"all\",\n win,\n blockClass,\n blockSelector,\n recordCanvas,\n dataURLOptions\n } = options;\n this.mutationCb = options.mutationCb;\n this.mirror = options.mirror;\n if (recordCanvas && sampling === \"all\")\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\n if (recordCanvas && typeof sampling === \"number\")\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\n dataURLOptions\n });\n }\n reset() {\n this.pendingCanvasMutations.clear();\n this.resetObservers && this.resetObservers();\n }\n freeze() {\n this.frozen = true;\n }\n unfreeze() {\n this.frozen = false;\n }\n lock() {\n this.locked = true;\n }\n unlock() {\n this.locked = false;\n }\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n true\n );\n const snapshotInProgressMap = /* @__PURE__ */ new Map();\n const worker = new WorkerWrapper();\n worker.onmessage = (e2) => {\n const { id } = e2.data;\n snapshotInProgressMap.set(id, false);\n if (!(\"base64\" in e2.data))\n return;\n const { base64, type, width, height } = e2.data;\n this.mutationCb({\n id,\n type: CanvasContext[\"2D\"],\n commands: [\n {\n property: \"clearRect\",\n // wipe canvas\n args: [0, 0, width, height]\n },\n {\n property: \"drawImage\",\n // draws (semi-transparent) image\n args: [\n {\n rr_type: \"ImageBitmap\",\n args: [\n {\n rr_type: \"Blob\",\n data: [{ rr_type: \"ArrayBuffer\", base64 }],\n type\n }\n ]\n },\n 0,\n 0\n ]\n }\n ]\n });\n };\n const timeBetweenSnapshots = 1e3 / fps;\n let lastSnapshotTime = 0;\n let rafId;\n const getCanvas = () => {\n const matchedCanvas = [];\n win.document.querySelectorAll(\"canvas\").forEach((canvas) => {\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\n matchedCanvas.push(canvas);\n }\n });\n return matchedCanvas;\n };\n const takeCanvasSnapshots = (timestamp) => {\n if (lastSnapshotTime && timestamp - lastSnapshotTime < timeBetweenSnapshots) {\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n return;\n }\n lastSnapshotTime = timestamp;\n getCanvas().forEach(async (canvas) => {\n var _a2;\n const id = this.mirror.getId(canvas);\n if (snapshotInProgressMap.get(id))\n return;\n if (canvas.width === 0 || canvas.height === 0)\n return;\n snapshotInProgressMap.set(id, true);\n if ([\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n const context = canvas.getContext(canvas.__context);\n if (((_a2 = context == null ? void 0 : context.getContextAttributes()) == null ? void 0 : _a2.preserveDrawingBuffer) === false) {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n const bitmap = await createImageBitmap(canvas);\n worker.postMessage(\n {\n id,\n bitmap,\n width: canvas.width,\n height: canvas.height,\n dataURLOptions: options.dataURLOptions\n },\n [bitmap]\n );\n });\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n };\n rafId = requestAnimationFrame(takeCanvasSnapshots);\n this.resetObservers = () => {\n canvasContextReset();\n cancelAnimationFrame(rafId);\n };\n }\n initCanvasMutationObserver(win, blockClass, blockSelector) {\n this.startRAFTimestamping();\n this.startPendingCanvasMutationFlusher();\n const canvasContextReset = initCanvasContextObserver(\n win,\n blockClass,\n blockSelector,\n false\n );\n const canvas2DReset = initCanvas2DMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector\n );\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n this.processMutation.bind(this),\n win,\n blockClass,\n blockSelector,\n this.mirror\n );\n this.resetObservers = () => {\n canvasContextReset();\n canvas2DReset();\n canvasWebGL1and2Reset();\n };\n }\n startPendingCanvasMutationFlusher() {\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n startRAFTimestamping() {\n const setLatestRAFTimestamp = (timestamp) => {\n this.rafStamps.latestId = timestamp;\n requestAnimationFrame(setLatestRAFTimestamp);\n };\n requestAnimationFrame(setLatestRAFTimestamp);\n }\n flushPendingCanvasMutations() {\n this.pendingCanvasMutations.forEach(\n (_values, canvas) => {\n const id = this.mirror.getId(canvas);\n this.flushPendingCanvasMutationFor(canvas, id);\n }\n );\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\n }\n flushPendingCanvasMutationFor(canvas, id) {\n if (this.frozen || this.locked) {\n return;\n }\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\n if (!valuesWithType || id === -1)\n return;\n const values = valuesWithType.map((value) => {\n const { type: type2, ...rest } = value;\n return rest;\n });\n const { type } = valuesWithType[0];\n this.mutationCb({ id, type, commands: values });\n this.pendingCanvasMutations.delete(canvas);\n }\n}\nclass StylesheetManager {\n constructor(options) {\n __publicField(this, \"trackedLinkElements\", /* @__PURE__ */ new WeakSet());\n __publicField(this, \"mutationCb\");\n __publicField(this, \"adoptedStyleSheetCb\");\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if (\"_cssText\" in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn.attributes\n }\n ]\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: []\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r2, index) => ({\n rule: stringifyRule(r2),\n index\n }))\n });\n } else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n }\n // TODO: take snapshot on stylesheet reload by applying event listener\n trackStylesheetInLinkElement(_linkEl) {\n }\n}\nclass ProcessedNodeManager {\n constructor() {\n __publicField(this, \"nodeMap\", /* @__PURE__ */ new WeakMap());\n __publicField(this, \"active\", false);\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n }\n add(node, buffer) {\n if (!this.active) {\n this.active = true;\n requestAnimationFrame(() => {\n this.nodeMap = /* @__PURE__ */ new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));\n }\n destroy() {\n }\n}\nlet wrappedEmit;\nlet takeFullSnapshot;\nlet canvasManager;\nlet recording = false;\ntry {\n if (Array.from([1], (x) => x * 2)[0] !== 2) {\n const cleanFrame = document.createElement(\"iframe\");\n document.body.appendChild(cleanFrame);\n Array.from = ((_a = cleanFrame.contentWindow) == null ? void 0 : _a.Array.from) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n} catch (err) {\n console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n const {\n emit,\n checkoutEveryNms,\n checkoutEveryNth,\n blockClass = \"rr-block\",\n blockSelector = null,\n ignoreClass = \"rr-ignore\",\n ignoreSelector = null,\n maskTextClass = \"rr-mask\",\n maskTextSelector = null,\n inlineStylesheet = true,\n maskAllInputs,\n maskInputOptions: _maskInputOptions,\n slimDOMOptions: _slimDOMOptions,\n maskInputFn,\n maskTextFn,\n hooks,\n packFn,\n sampling = {},\n dataURLOptions = {},\n mousemoveWait,\n recordDOM = true,\n recordCanvas = false,\n recordCrossOriginIframes = false,\n recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n userTriggeredOnInput = false,\n collectFonts = false,\n inlineImages = false,\n plugins,\n keepIframeSrcFn = () => false,\n ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n errorHandler: errorHandler2\n } = options;\n registerErrorHandler(errorHandler2);\n const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n } catch (e2) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error(\"emit function is required\");\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\n }\n if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true ? {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n } : _maskInputOptions !== void 0 ? _maskInputOptions : { password: true };\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n // the following are off for slimDOMOptions === true,\n // as they destroy some (hidden) info:\n headMetaAuthorship: _slimDOMOptions === \"all\",\n headMetaDescKeywords: _slimDOMOptions === \"all\",\n headTitleMutations: _slimDOMOptions === \"all\"\n } : _slimDOMOptions ? _slimDOMOptions : {};\n polyfill$1();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e2) => {\n for (const plugin of plugins || []) {\n if (plugin.eventProcessor) {\n e2 = plugin.eventProcessor(e2);\n }\n }\n if (packFn && // Disable packing events which will be emitted to parent frames.\n !passEmitsToParent) {\n e2 = packFn(e2);\n }\n return e2;\n };\n wrappedEmit = (r2, isCheckout) => {\n var _a2;\n const e2 = r2;\n e2.timestamp = nowTimestamp();\n if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);\n } else if (passEmitsToParent) {\n const message = {\n type: \"rrweb\",\n event: eventProcessor(e2),\n origin: window.location.origin,\n isCheckout\n };\n window.parent.postMessage(message, \"*\");\n }\n if (e2.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e2;\n incrementalSnapshotCount = 0;\n } else if (e2.type === EventType.IncrementalSnapshot) {\n if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m\n }\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p\n }\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p\n }\n });\n const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a2\n }\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n });\n const iframeManager = new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit\n });\n for (const plugin of plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n canvasManager = new CanvasManager({\n recordCanvas,\n mutationCb: wrappedCanvasMutationEmit,\n win: window,\n blockClass,\n blockSelector,\n mirror,\n sampling: sampling.canvas,\n dataURLOptions\n });\n const shadowDomManager = new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager\n },\n mirror\n });\n takeFullSnapshot = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit(\n {\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight()\n }\n },\n isCheckout\n );\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n2) => {\n if (isSerializedIframe(n2, mirror)) {\n iframeManager.addIframe(n2);\n }\n if (isSerializedStylesheet(n2, mirror)) {\n stylesheetManager.trackLinkElement(n2);\n }\n if (hasShadowRoot(n2)) {\n shadowDomManager.addShadowRoot(n2.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn\n });\n if (!node) {\n return console.warn(\"Failed to snapshot the document\");\n }\n wrappedEmit(\n {\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window)\n }\n },\n isCheckout\n );\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(\n document.adoptedStyleSheets,\n mirror.getId(document)\n );\n };\n try {\n const handlers = [];\n const observe = (doc) => {\n var _a2;\n return callbackWrapper(initObservers)(\n {\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions\n }\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d\n }\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d\n }\n }),\n inputCb: (v2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v2\n }\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p\n }\n }),\n styleSheetRuleCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r2\n }\n }),\n styleDeclarationCb: (r2) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r2\n }\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p\n }\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p\n }\n });\n },\n customElementCb: (c2) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c2\n }\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskTextClass,\n maskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: ((_a2 = plugins == null ? void 0 : plugins.filter((p) => p.observer)) == null ? void 0 : _a2.map((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload\n }\n })\n }))) || []\n },\n hooks\n );\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n } catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n recording = true;\n };\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n init();\n } else {\n handlers.push(\n on(\"DOMContentLoaded\", () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {}\n });\n if (recordAfter === \"DOMContentLoaded\")\n init();\n })\n );\n handlers.push(\n on(\n \"load\",\n () => {\n wrappedEmit({\n type: EventType.Load,\n data: {}\n });\n if (recordAfter === \"load\")\n init();\n },\n window\n )\n );\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n recording = false;\n unregisterErrorHandler();\n };\n } catch (error) {\n console.warn(error);\n }\n}\nrecord.addCustomEvent = (tag, payload) => {\n if (!recording) {\n throw new Error(\"please add custom event after start recording\");\n }\n wrappedEmit({\n type: EventType.Custom,\n data: {\n tag,\n payload\n }\n });\n};\nrecord.freezePage = () => {\n mutationBuffers.forEach((buf) => buf.freeze());\n};\nrecord.takeFullSnapshot = (isCheckout) => {\n if (!recording) {\n throw new Error(\"please take full snapshot after start recording\");\n }\n takeFullSnapshot(isCheckout);\n};\nrecord.mirror = mirror;\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => {\n __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar __defProp22 = Object.defineProperty;\nvar __defNormalProp22 = (obj, key, value) => key in obj ? __defProp22(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField22 = (obj, key, value) => {\n __defNormalProp22(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar NodeType$1 = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType$1 || {});\nlet Mirror$1 = class Mirror2 {\n constructor() {\n __publicField22(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField22(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2)\n return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach(\n (childNode) => this.removeNodeFromMap(childNode)\n );\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n};\nfunction createMirror$1() {\n return new Mirror$1();\n}\nfunction parseCSSText(cssText) {\n const res = {};\n const listDelimiter = /;(?![^(]*\\))/g;\n const propertyDelimiter = /:(.+)/;\n const comment = /\\/\\*.*?\\*\\//g;\n cssText.replace(comment, \"\").split(listDelimiter).forEach(function(item) {\n if (item) {\n const tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[camelize(tmp[0].trim())] = tmp[1].trim());\n }\n });\n return res;\n}\nfunction toCSSText(style) {\n const properties = [];\n for (const name in style) {\n const value = style[name];\n if (typeof value !== \"string\")\n continue;\n const normalizedName = hyphenate(name);\n properties.push(`${normalizedName}: ${value};`);\n }\n return properties.join(\" \");\n}\nconst camelizeRE = /-([a-z])/g;\nconst CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nconst camelize = (str) => {\n if (CUSTOM_PROPERTY_REGEX.test(str))\n return str;\n return str.replace(camelizeRE, (_, c2) => c2 ? c2.toUpperCase() : \"\");\n};\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = (str) => {\n return str.replace(hyphenateRE, \"-$1\").toLowerCase();\n};\nclass BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n constructor(..._args) {\n __publicField2(this, \"parentElement\", null);\n __publicField2(this, \"parentNode\", null);\n __publicField2(this, \"ownerDocument\");\n __publicField2(this, \"firstChild\", null);\n __publicField2(this, \"lastChild\", null);\n __publicField2(this, \"previousSibling\", null);\n __publicField2(this, \"nextSibling\", null);\n __publicField2(this, \"ELEMENT_NODE\", 1);\n __publicField2(this, \"TEXT_NODE\", 3);\n __publicField2(this, \"nodeType\");\n __publicField2(this, \"nodeName\");\n __publicField2(this, \"RRNodeType\");\n }\n get childNodes() {\n const childNodes = [];\n let childIterator = this.firstChild;\n while (childIterator) {\n childNodes.push(childIterator);\n childIterator = childIterator.nextSibling;\n }\n return childNodes;\n }\n contains(node) {\n if (!(node instanceof BaseRRNode))\n return false;\n else if (node.ownerDocument !== this.ownerDocument)\n return false;\n else if (node === this)\n return true;\n while (node.parentNode) {\n if (node.parentNode === this)\n return true;\n node = node.parentNode;\n }\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appendChild(_newChild) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n insertBefore(_newChild, _refChild) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removeChild(_node) {\n throw new Error(\n `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n );\n }\n toString() {\n return \"RRNode\";\n }\n}\nclass BaseRRDocument extends BaseRRNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args) {\n super(args);\n __publicField2(this, \"nodeType\", 9);\n __publicField2(this, \"nodeName\", \"#document\");\n __publicField2(this, \"compatMode\", \"CSS1Compat\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Document);\n __publicField2(this, \"textContent\", null);\n this.ownerDocument = this;\n }\n get documentElement() {\n return this.childNodes.find(\n (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"HTML\"\n ) || null;\n }\n get body() {\n var _a2;\n return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"BODY\"\n )) || null;\n }\n get head() {\n var _a2;\n return ((_a2 = this.documentElement) == null ? void 0 : _a2.childNodes.find(\n (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"HEAD\"\n )) || null;\n }\n get implementation() {\n return this;\n }\n get firstElementChild() {\n return this.documentElement;\n }\n appendChild(newChild) {\n const nodeType = newChild.RRNodeType;\n if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n throw new Error(\n `RRDomException: Failed to execute 'appendChild' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n );\n }\n }\n const child = appendChild(this, newChild);\n child.parentElement = null;\n return child;\n }\n insertBefore(newChild, refChild) {\n const nodeType = newChild.RRNodeType;\n if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n throw new Error(\n `RRDomException: Failed to execute 'insertBefore' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n );\n }\n }\n const child = insertBefore(this, newChild, refChild);\n child.parentElement = null;\n return child;\n }\n removeChild(node) {\n return removeChild(this, node);\n }\n open() {\n this.firstChild = null;\n this.lastChild = null;\n }\n close() {\n }\n /**\n * Adhoc implementation for setting xhtml namespace in rebuilt.ts (rrweb-snapshot).\n * There are two lines used this function:\n * 1. doc.write('\\')\n * 2. doc.write('\\')\n */\n write(content) {\n let publicId;\n if (content === '')\n publicId = \"-//W3C//DTD XHTML 1.0 Transitional//EN\";\n else if (content === '')\n publicId = \"-//W3C//DTD HTML 4.0 Transitional//EN\";\n if (publicId) {\n const doctype = this.createDocumentType(\"html\", publicId, \"\");\n this.open();\n this.appendChild(doctype);\n }\n }\n createDocument(_namespace, _qualifiedName, _doctype) {\n return new BaseRRDocument();\n }\n createDocumentType(qualifiedName, publicId, systemId) {\n const doctype = new BaseRRDocumentType(qualifiedName, publicId, systemId);\n doctype.ownerDocument = this;\n return doctype;\n }\n createElement(tagName) {\n const element = new BaseRRElement(tagName);\n element.ownerDocument = this;\n return element;\n }\n createElementNS(_namespaceURI, qualifiedName) {\n return this.createElement(qualifiedName);\n }\n createTextNode(data) {\n const text = new BaseRRText(data);\n text.ownerDocument = this;\n return text;\n }\n createComment(data) {\n const comment = new BaseRRComment(data);\n comment.ownerDocument = this;\n return comment;\n }\n createCDATASection(data) {\n const CDATASection = new BaseRRCDATASection(data);\n CDATASection.ownerDocument = this;\n return CDATASection;\n }\n toString() {\n return \"RRDocument\";\n }\n}\nclass BaseRRDocumentType extends BaseRRNode {\n constructor(qualifiedName, publicId, systemId) {\n super();\n __publicField2(this, \"nodeType\", 10);\n __publicField2(this, \"RRNodeType\", NodeType$1.DocumentType);\n __publicField2(this, \"name\");\n __publicField2(this, \"publicId\");\n __publicField2(this, \"systemId\");\n __publicField2(this, \"textContent\", null);\n this.name = qualifiedName;\n this.publicId = publicId;\n this.systemId = systemId;\n this.nodeName = qualifiedName;\n }\n toString() {\n return \"RRDocumentType\";\n }\n}\nclass BaseRRElement extends BaseRRNode {\n constructor(tagName) {\n super();\n __publicField2(this, \"nodeType\", 1);\n __publicField2(this, \"RRNodeType\", NodeType$1.Element);\n __publicField2(this, \"tagName\");\n __publicField2(this, \"attributes\", {});\n __publicField2(this, \"shadowRoot\", null);\n __publicField2(this, \"scrollLeft\");\n __publicField2(this, \"scrollTop\");\n this.tagName = tagName.toUpperCase();\n this.nodeName = tagName.toUpperCase();\n }\n get textContent() {\n let result = \"\";\n this.childNodes.forEach((node) => result += node.textContent);\n return result;\n }\n set textContent(textContent) {\n this.firstChild = null;\n this.lastChild = null;\n this.appendChild(this.ownerDocument.createTextNode(textContent));\n }\n get classList() {\n return new ClassList(\n this.attributes.class,\n (newClassName) => {\n this.attributes.class = newClassName;\n }\n );\n }\n get id() {\n return this.attributes.id || \"\";\n }\n get className() {\n return this.attributes.class || \"\";\n }\n get style() {\n const style = this.attributes.style ? parseCSSText(this.attributes.style) : {};\n const hyphenateRE2 = /\\B([A-Z])/g;\n style.setProperty = (name, value, priority) => {\n if (hyphenateRE2.test(name))\n return;\n const normalizedName = camelize(name);\n if (!value)\n delete style[normalizedName];\n else\n style[normalizedName] = value;\n if (priority === \"important\")\n style[normalizedName] += \" !important\";\n this.attributes.style = toCSSText(style);\n };\n style.removeProperty = (name) => {\n if (hyphenateRE2.test(name))\n return \"\";\n const normalizedName = camelize(name);\n const value = style[normalizedName] || \"\";\n delete style[normalizedName];\n this.attributes.style = toCSSText(style);\n return value;\n };\n return style;\n }\n getAttribute(name) {\n return this.attributes[name] || null;\n }\n setAttribute(name, attribute) {\n this.attributes[name] = attribute;\n }\n setAttributeNS(_namespace, qualifiedName, value) {\n this.setAttribute(qualifiedName, value);\n }\n removeAttribute(name) {\n delete this.attributes[name];\n }\n appendChild(newChild) {\n return appendChild(this, newChild);\n }\n insertBefore(newChild, refChild) {\n return insertBefore(this, newChild, refChild);\n }\n removeChild(node) {\n return removeChild(this, node);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n attachShadow(_init) {\n const shadowRoot = this.ownerDocument.createElement(\"SHADOWROOT\");\n this.shadowRoot = shadowRoot;\n return shadowRoot;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dispatchEvent(_event) {\n return true;\n }\n toString() {\n let attributeString = \"\";\n for (const attribute in this.attributes) {\n attributeString += `${attribute}=\"${this.attributes[attribute]}\" `;\n }\n return `${this.tagName} ${attributeString}`;\n }\n}\nclass BaseRRMediaElement extends BaseRRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"currentTime\");\n __publicField2(this, \"volume\");\n __publicField2(this, \"paused\");\n __publicField2(this, \"muted\");\n __publicField2(this, \"playbackRate\");\n __publicField2(this, \"loop\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n attachShadow(_init) {\n throw new Error(\n `RRDomException: Failed to execute 'attachShadow' on 'RRElement': This RRElement does not support attachShadow`\n );\n }\n play() {\n this.paused = false;\n }\n pause() {\n this.paused = true;\n }\n}\nclass BaseRRText extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeType\", 3);\n __publicField2(this, \"nodeName\", \"#text\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Text);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent) {\n this.data = textContent;\n }\n toString() {\n return `RRText text=${JSON.stringify(this.data)}`;\n }\n}\nclass BaseRRComment extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeType\", 8);\n __publicField2(this, \"nodeName\", \"#comment\");\n __publicField2(this, \"RRNodeType\", NodeType$1.Comment);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent) {\n this.data = textContent;\n }\n toString() {\n return `RRComment text=${JSON.stringify(this.data)}`;\n }\n}\nclass BaseRRCDATASection extends BaseRRNode {\n constructor(data) {\n super();\n __publicField2(this, \"nodeName\", \"#cdata-section\");\n __publicField2(this, \"nodeType\", 4);\n __publicField2(this, \"RRNodeType\", NodeType$1.CDATA);\n __publicField2(this, \"data\");\n this.data = data;\n }\n get textContent() {\n return this.data;\n }\n set textContent(textContent) {\n this.data = textContent;\n }\n toString() {\n return `RRCDATASection data=${JSON.stringify(this.data)}`;\n }\n}\nclass ClassList {\n constructor(classText, onChange) {\n __publicField2(this, \"onChange\");\n __publicField2(this, \"classes\", []);\n __publicField2(this, \"add\", (...classNames) => {\n for (const item of classNames) {\n const className = String(item);\n if (this.classes.indexOf(className) >= 0)\n continue;\n this.classes.push(className);\n }\n this.onChange && this.onChange(this.classes.join(\" \"));\n });\n __publicField2(this, \"remove\", (...classNames) => {\n this.classes = this.classes.filter(\n (item) => classNames.indexOf(item) === -1\n );\n this.onChange && this.onChange(this.classes.join(\" \"));\n });\n if (classText) {\n const classes = classText.trim().split(/\\s+/);\n this.classes.push(...classes);\n }\n this.onChange = onChange;\n }\n}\nfunction appendChild(parent, newChild) {\n if (newChild.parentNode)\n newChild.parentNode.removeChild(newChild);\n if (parent.lastChild) {\n parent.lastChild.nextSibling = newChild;\n newChild.previousSibling = parent.lastChild;\n } else {\n parent.firstChild = newChild;\n newChild.previousSibling = null;\n }\n parent.lastChild = newChild;\n newChild.nextSibling = null;\n newChild.parentNode = parent;\n newChild.parentElement = parent;\n newChild.ownerDocument = parent.ownerDocument;\n return newChild;\n}\nfunction insertBefore(parent, newChild, refChild) {\n if (!refChild)\n return appendChild(parent, newChild);\n if (refChild.parentNode !== parent)\n throw new Error(\n \"Failed to execute 'insertBefore' on 'RRNode': The RRNode before which the new node is to be inserted is not a child of this RRNode.\"\n );\n if (newChild === refChild)\n return newChild;\n if (newChild.parentNode)\n newChild.parentNode.removeChild(newChild);\n newChild.previousSibling = refChild.previousSibling;\n refChild.previousSibling = newChild;\n newChild.nextSibling = refChild;\n if (newChild.previousSibling)\n newChild.previousSibling.nextSibling = newChild;\n else\n parent.firstChild = newChild;\n newChild.parentElement = parent;\n newChild.parentNode = parent;\n newChild.ownerDocument = parent.ownerDocument;\n return newChild;\n}\nfunction removeChild(parent, child) {\n if (child.parentNode !== parent)\n throw new Error(\n \"Failed to execute 'removeChild' on 'RRNode': The RRNode to be removed is not a child of this RRNode.\"\n );\n if (child.previousSibling)\n child.previousSibling.nextSibling = child.nextSibling;\n else\n parent.firstChild = child.nextSibling;\n if (child.nextSibling)\n child.nextSibling.previousSibling = child.previousSibling;\n else\n parent.lastChild = child.previousSibling;\n child.previousSibling = null;\n child.nextSibling = null;\n child.parentElement = null;\n child.parentNode = null;\n return child;\n}\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\n NodeType2[NodeType2[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n NodeType2[NodeType2[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\n NodeType2[NodeType2[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n NodeType2[NodeType2[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\n NodeType2[NodeType2[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\n NodeType2[NodeType2[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\n NodeType2[NodeType2[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\n NodeType2[NodeType2[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\n NodeType2[NodeType2[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n return NodeType2;\n})(NodeType || {});\nconst NAMESPACES = {\n svg: \"http://www.w3.org/2000/svg\",\n \"xlink:href\": \"http://www.w3.org/1999/xlink\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\nconst SVGTagMap = {\n altglyph: \"altGlyph\",\n altglyphdef: \"altGlyphDef\",\n altglyphitem: \"altGlyphItem\",\n animatecolor: \"animateColor\",\n animatemotion: \"animateMotion\",\n animatetransform: \"animateTransform\",\n clippath: \"clipPath\",\n feblend: \"feBlend\",\n fecolormatrix: \"feColorMatrix\",\n fecomponenttransfer: \"feComponentTransfer\",\n fecomposite: \"feComposite\",\n feconvolvematrix: \"feConvolveMatrix\",\n fediffuselighting: \"feDiffuseLighting\",\n fedisplacementmap: \"feDisplacementMap\",\n fedistantlight: \"feDistantLight\",\n fedropshadow: \"feDropShadow\",\n feflood: \"feFlood\",\n fefunca: \"feFuncA\",\n fefuncb: \"feFuncB\",\n fefuncg: \"feFuncG\",\n fefuncr: \"feFuncR\",\n fegaussianblur: \"feGaussianBlur\",\n feimage: \"feImage\",\n femerge: \"feMerge\",\n femergenode: \"feMergeNode\",\n femorphology: \"feMorphology\",\n feoffset: \"feOffset\",\n fepointlight: \"fePointLight\",\n fespecularlighting: \"feSpecularLighting\",\n fespotlight: \"feSpotLight\",\n fetile: \"feTile\",\n feturbulence: \"feTurbulence\",\n foreignobject: \"foreignObject\",\n glyphref: \"glyphRef\",\n lineargradient: \"linearGradient\",\n radialgradient: \"radialGradient\"\n};\nlet createdNodeSet = null;\nfunction diff(oldTree, newTree, replayer, rrnodeMirror = newTree.mirror || newTree.ownerDocument.mirror) {\n oldTree = diffBeforeUpdatingChildren(\n oldTree,\n newTree,\n replayer,\n rrnodeMirror\n );\n diffChildren(oldTree, newTree, replayer, rrnodeMirror);\n diffAfterUpdatingChildren(oldTree, newTree, replayer);\n}\nfunction diffBeforeUpdatingChildren(oldTree, newTree, replayer, rrnodeMirror) {\n var _a2;\n if (replayer.afterAppend && !createdNodeSet) {\n createdNodeSet = /* @__PURE__ */ new WeakSet();\n setTimeout(() => {\n createdNodeSet = null;\n }, 0);\n }\n if (!sameNodeType(oldTree, newTree)) {\n const calibratedOldTree = createOrGetNode(\n newTree,\n replayer.mirror,\n rrnodeMirror\n );\n (_a2 = oldTree.parentNode) == null ? void 0 : _a2.replaceChild(calibratedOldTree, oldTree);\n oldTree = calibratedOldTree;\n }\n switch (newTree.RRNodeType) {\n case NodeType$1.Document: {\n if (!nodeMatching(oldTree, newTree, replayer.mirror, rrnodeMirror)) {\n const newMeta = rrnodeMirror.getMeta(newTree);\n if (newMeta) {\n replayer.mirror.removeNodeFromMap(oldTree);\n oldTree.close();\n oldTree.open();\n replayer.mirror.add(oldTree, newMeta);\n createdNodeSet == null ? void 0 : createdNodeSet.add(oldTree);\n }\n }\n break;\n }\n case NodeType$1.Element: {\n const oldElement = oldTree;\n const newRRElement = newTree;\n switch (newRRElement.tagName) {\n case \"IFRAME\": {\n const oldContentDocument = oldTree.contentDocument;\n if (!oldContentDocument)\n break;\n diff(\n oldContentDocument,\n newTree.contentDocument,\n replayer,\n rrnodeMirror\n );\n break;\n }\n }\n if (newRRElement.shadowRoot) {\n if (!oldElement.shadowRoot)\n oldElement.attachShadow({ mode: \"open\" });\n diffChildren(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n oldElement.shadowRoot,\n newRRElement.shadowRoot,\n replayer,\n rrnodeMirror\n );\n }\n diffProps(oldElement, newRRElement, rrnodeMirror);\n break;\n }\n }\n return oldTree;\n}\nfunction diffAfterUpdatingChildren(oldTree, newTree, replayer) {\n var _a2;\n switch (newTree.RRNodeType) {\n case NodeType$1.Document: {\n const scrollData = newTree.scrollData;\n scrollData && replayer.applyScroll(scrollData, true);\n break;\n }\n case NodeType$1.Element: {\n const oldElement = oldTree;\n const newRRElement = newTree;\n newRRElement.scrollData && replayer.applyScroll(newRRElement.scrollData, true);\n newRRElement.inputData && replayer.applyInput(newRRElement.inputData);\n switch (newRRElement.tagName) {\n case \"AUDIO\":\n case \"VIDEO\": {\n const oldMediaElement = oldTree;\n const newMediaRRElement = newRRElement;\n if (newMediaRRElement.paused !== void 0)\n newMediaRRElement.paused ? void oldMediaElement.pause() : void oldMediaElement.play();\n if (newMediaRRElement.muted !== void 0)\n oldMediaElement.muted = newMediaRRElement.muted;\n if (newMediaRRElement.volume !== void 0)\n oldMediaElement.volume = newMediaRRElement.volume;\n if (newMediaRRElement.currentTime !== void 0)\n oldMediaElement.currentTime = newMediaRRElement.currentTime;\n if (newMediaRRElement.playbackRate !== void 0)\n oldMediaElement.playbackRate = newMediaRRElement.playbackRate;\n if (newMediaRRElement.loop !== void 0)\n oldMediaElement.loop = newMediaRRElement.loop;\n break;\n }\n case \"CANVAS\": {\n const rrCanvasElement = newTree;\n if (rrCanvasElement.rr_dataURL !== null) {\n const image = document.createElement(\"img\");\n image.onload = () => {\n const ctx = oldElement.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n image.src = rrCanvasElement.rr_dataURL;\n }\n rrCanvasElement.canvasMutations.forEach(\n (canvasMutation2) => replayer.applyCanvas(\n canvasMutation2.event,\n canvasMutation2.mutation,\n oldTree\n )\n );\n break;\n }\n case \"STYLE\": {\n const styleSheet = oldElement.sheet;\n styleSheet && newTree.rules.forEach(\n (data) => replayer.applyStyleSheetMutation(data, styleSheet)\n );\n break;\n }\n }\n break;\n }\n case NodeType$1.Text:\n case NodeType$1.Comment:\n case NodeType$1.CDATA: {\n if (oldTree.textContent !== newTree.data)\n oldTree.textContent = newTree.data;\n break;\n }\n }\n if (createdNodeSet == null ? void 0 : createdNodeSet.has(oldTree)) {\n createdNodeSet.delete(oldTree);\n (_a2 = replayer.afterAppend) == null ? void 0 : _a2.call(replayer, oldTree, replayer.mirror.getId(oldTree));\n }\n}\nfunction diffProps(oldTree, newTree, rrnodeMirror) {\n const oldAttributes = oldTree.attributes;\n const newAttributes = newTree.attributes;\n for (const name in newAttributes) {\n const newValue = newAttributes[name];\n const sn = rrnodeMirror.getMeta(newTree);\n if ((sn == null ? void 0 : sn.isSVG) && NAMESPACES[name])\n oldTree.setAttributeNS(NAMESPACES[name], name, newValue);\n else if (newTree.tagName === \"CANVAS\" && name === \"rr_dataURL\") {\n const image = document.createElement(\"img\");\n image.src = newValue;\n image.onload = () => {\n const ctx = oldTree.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(image, 0, 0, image.width, image.height);\n }\n };\n } else if (newTree.tagName === \"IFRAME\" && name === \"srcdoc\")\n continue;\n else\n oldTree.setAttribute(name, newValue);\n }\n for (const { name } of Array.from(oldAttributes))\n if (!(name in newAttributes))\n oldTree.removeAttribute(name);\n newTree.scrollLeft && (oldTree.scrollLeft = newTree.scrollLeft);\n newTree.scrollTop && (oldTree.scrollTop = newTree.scrollTop);\n}\nfunction diffChildren(oldTree, newTree, replayer, rrnodeMirror) {\n const oldChildren = Array.from(oldTree.childNodes);\n const newChildren = newTree.childNodes;\n if (oldChildren.length === 0 && newChildren.length === 0)\n return;\n let oldStartIndex = 0, oldEndIndex = oldChildren.length - 1, newStartIndex = 0, newEndIndex = newChildren.length - 1;\n let oldStartNode = oldChildren[oldStartIndex], oldEndNode = oldChildren[oldEndIndex], newStartNode = newChildren[newStartIndex], newEndNode = newChildren[newEndIndex];\n let oldIdToIndex = void 0, indexInOld = void 0;\n while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {\n if (oldStartNode === void 0) {\n oldStartNode = oldChildren[++oldStartIndex];\n } else if (oldEndNode === void 0) {\n oldEndNode = oldChildren[--oldEndIndex];\n } else if (\n // same first node?\n nodeMatching(oldStartNode, newStartNode, replayer.mirror, rrnodeMirror)\n ) {\n oldStartNode = oldChildren[++oldStartIndex];\n newStartNode = newChildren[++newStartIndex];\n } else if (\n // same last node?\n nodeMatching(oldEndNode, newEndNode, replayer.mirror, rrnodeMirror)\n ) {\n oldEndNode = oldChildren[--oldEndIndex];\n newEndNode = newChildren[--newEndIndex];\n } else if (\n // is the first old node the same as the last new node?\n nodeMatching(oldStartNode, newEndNode, replayer.mirror, rrnodeMirror)\n ) {\n try {\n oldTree.insertBefore(oldStartNode, oldEndNode.nextSibling);\n } catch (e2) {\n console.warn(e2);\n }\n oldStartNode = oldChildren[++oldStartIndex];\n newEndNode = newChildren[--newEndIndex];\n } else if (\n // is the last old node the same as the first new node?\n nodeMatching(oldEndNode, newStartNode, replayer.mirror, rrnodeMirror)\n ) {\n try {\n oldTree.insertBefore(oldEndNode, oldStartNode);\n } catch (e2) {\n console.warn(e2);\n }\n oldEndNode = oldChildren[--oldEndIndex];\n newStartNode = newChildren[++newStartIndex];\n } else {\n if (!oldIdToIndex) {\n oldIdToIndex = {};\n for (let i2 = oldStartIndex; i2 <= oldEndIndex; i2++) {\n const oldChild2 = oldChildren[i2];\n if (oldChild2 && replayer.mirror.hasNode(oldChild2))\n oldIdToIndex[replayer.mirror.getId(oldChild2)] = i2;\n }\n }\n indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];\n const nodeToMove = oldChildren[indexInOld];\n if (indexInOld !== void 0 && nodeToMove && nodeMatching(nodeToMove, newStartNode, replayer.mirror, rrnodeMirror)) {\n try {\n oldTree.insertBefore(nodeToMove, oldStartNode);\n } catch (e2) {\n console.warn(e2);\n }\n oldChildren[indexInOld] = void 0;\n } else {\n const newNode = createOrGetNode(\n newStartNode,\n replayer.mirror,\n rrnodeMirror\n );\n if (oldTree.nodeName === \"#document\" && oldStartNode && /**\n * Special case 1: one document isn't allowed to have two doctype nodes at the same time, so we need to remove the old one first before inserting the new one.\n * How this case happens: A parent document in the old tree already has a doctype node with an id e.g. #1. A new full snapshot rebuilds the replayer with a new doctype node with another id #2. According to the algorithm, the new doctype node will be inserted before the old one, which is not allowed by the Document standard.\n */\n (newNode.nodeType === newNode.DOCUMENT_TYPE_NODE && oldStartNode.nodeType === oldStartNode.DOCUMENT_TYPE_NODE || /**\n * Special case 2: one document isn't allowed to have two HTMLElements at the same time, so we need to remove the old one first before inserting the new one.\n * How this case happens: A mounted iframe element has an automatically created HTML element. We should delete it before inserting a serialized one. Otherwise, an error 'Only one element on document allowed' will be thrown.\n */\n newNode.nodeType === newNode.ELEMENT_NODE && oldStartNode.nodeType === oldStartNode.ELEMENT_NODE)) {\n oldTree.removeChild(oldStartNode);\n replayer.mirror.removeNodeFromMap(oldStartNode);\n oldStartNode = oldChildren[++oldStartIndex];\n }\n try {\n oldTree.insertBefore(newNode, oldStartNode || null);\n } catch (e2) {\n console.warn(e2);\n }\n }\n newStartNode = newChildren[++newStartIndex];\n }\n }\n if (oldStartIndex > oldEndIndex) {\n const referenceRRNode = newChildren[newEndIndex + 1];\n let referenceNode = null;\n if (referenceRRNode)\n referenceNode = replayer.mirror.getNode(\n rrnodeMirror.getId(referenceRRNode)\n );\n for (; newStartIndex <= newEndIndex; ++newStartIndex) {\n const newNode = createOrGetNode(\n newChildren[newStartIndex],\n replayer.mirror,\n rrnodeMirror\n );\n try {\n oldTree.insertBefore(newNode, referenceNode);\n } catch (e2) {\n console.warn(e2);\n }\n }\n } else if (newStartIndex > newEndIndex) {\n for (; oldStartIndex <= oldEndIndex; oldStartIndex++) {\n const node = oldChildren[oldStartIndex];\n if (!node || node.parentNode !== oldTree)\n continue;\n try {\n oldTree.removeChild(node);\n replayer.mirror.removeNodeFromMap(node);\n } catch (e2) {\n console.warn(e2);\n }\n }\n }\n let oldChild = oldTree.firstChild;\n let newChild = newTree.firstChild;\n while (oldChild !== null && newChild !== null) {\n diff(oldChild, newChild, replayer, rrnodeMirror);\n oldChild = oldChild.nextSibling;\n newChild = newChild.nextSibling;\n }\n}\nfunction createOrGetNode(rrNode, domMirror, rrnodeMirror) {\n const nodeId = rrnodeMirror.getId(rrNode);\n const sn = rrnodeMirror.getMeta(rrNode);\n let node = null;\n if (nodeId > -1)\n node = domMirror.getNode(nodeId);\n if (node !== null && sameNodeType(node, rrNode))\n return node;\n switch (rrNode.RRNodeType) {\n case NodeType$1.Document:\n node = new Document();\n break;\n case NodeType$1.DocumentType:\n node = document.implementation.createDocumentType(\n rrNode.name,\n rrNode.publicId,\n rrNode.systemId\n );\n break;\n case NodeType$1.Element: {\n let tagName = rrNode.tagName.toLowerCase();\n tagName = SVGTagMap[tagName] || tagName;\n if (sn && \"isSVG\" in sn && (sn == null ? void 0 : sn.isSVG)) {\n node = document.createElementNS(NAMESPACES[\"svg\"], tagName);\n } else\n node = document.createElement(rrNode.tagName);\n break;\n }\n case NodeType$1.Text:\n node = document.createTextNode(rrNode.data);\n break;\n case NodeType$1.Comment:\n node = document.createComment(rrNode.data);\n break;\n case NodeType$1.CDATA:\n node = document.createCDATASection(rrNode.data);\n break;\n }\n if (sn)\n domMirror.add(node, { ...sn });\n try {\n createdNodeSet == null ? void 0 : createdNodeSet.add(node);\n } catch (e2) {\n }\n return node;\n}\nfunction sameNodeType(node1, node2) {\n if (node1.nodeType !== node2.nodeType)\n return false;\n return node1.nodeType !== node1.ELEMENT_NODE || node1.tagName.toUpperCase() === node2.tagName;\n}\nfunction nodeMatching(node1, node2, domMirror, rrdomMirror) {\n const node1Id = domMirror.getId(node1);\n const node2Id = rrdomMirror.getId(node2);\n if (node1Id === -1 || node1Id !== node2Id)\n return false;\n return sameNodeType(node1, node2);\n}\nclass RRDocument extends BaseRRDocument {\n constructor(mirror2) {\n super();\n __publicField2(this, \"UNSERIALIZED_STARTING_ID\", -2);\n __publicField2(this, \"_unserializedId\", this.UNSERIALIZED_STARTING_ID);\n __publicField2(this, \"mirror\", createMirror());\n __publicField2(this, \"scrollData\", null);\n if (mirror2) {\n this.mirror = mirror2;\n }\n }\n /**\n * Every time the id is used, it will minus 1 automatically to avoid collisions.\n */\n get unserializedId() {\n return this._unserializedId--;\n }\n createDocument(_namespace, _qualifiedName, _doctype) {\n return new RRDocument();\n }\n createDocumentType(qualifiedName, publicId, systemId) {\n const documentTypeNode = new RRDocumentType(\n qualifiedName,\n publicId,\n systemId\n );\n documentTypeNode.ownerDocument = this;\n return documentTypeNode;\n }\n createElement(tagName) {\n const upperTagName = tagName.toUpperCase();\n let element;\n switch (upperTagName) {\n case \"AUDIO\":\n case \"VIDEO\":\n element = new RRMediaElement(upperTagName);\n break;\n case \"IFRAME\":\n element = new RRIFrameElement(upperTagName, this.mirror);\n break;\n case \"CANVAS\":\n element = new RRCanvasElement(upperTagName);\n break;\n case \"STYLE\":\n element = new RRStyleElement(upperTagName);\n break;\n default:\n element = new RRElement(upperTagName);\n break;\n }\n element.ownerDocument = this;\n return element;\n }\n createComment(data) {\n const commentNode = new RRComment(data);\n commentNode.ownerDocument = this;\n return commentNode;\n }\n createCDATASection(data) {\n const sectionNode = new RRCDATASection(data);\n sectionNode.ownerDocument = this;\n return sectionNode;\n }\n createTextNode(data) {\n const textNode = new RRText(data);\n textNode.ownerDocument = this;\n return textNode;\n }\n destroyTree() {\n this.firstChild = null;\n this.lastChild = null;\n this.mirror.reset();\n }\n open() {\n super.open();\n this._unserializedId = this.UNSERIALIZED_STARTING_ID;\n }\n}\nconst RRDocumentType = BaseRRDocumentType;\nclass RRElement extends BaseRRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"inputData\", null);\n __publicField2(this, \"scrollData\", null);\n }\n}\nclass RRMediaElement extends BaseRRMediaElement {\n}\nclass RRCanvasElement extends RRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"rr_dataURL\", null);\n __publicField2(this, \"canvasMutations\", []);\n }\n /**\n * This is a dummy implementation to distinguish RRCanvasElement from real HTMLCanvasElement.\n */\n getContext() {\n return null;\n }\n}\nclass RRStyleElement extends RRElement {\n constructor() {\n super(...arguments);\n __publicField2(this, \"rules\", []);\n }\n}\nclass RRIFrameElement extends RRElement {\n constructor(upperTagName, mirror2) {\n super(upperTagName);\n __publicField2(this, \"contentDocument\", new RRDocument());\n this.contentDocument.mirror = mirror2;\n }\n}\nconst RRText = BaseRRText;\nconst RRComment = BaseRRComment;\nconst RRCDATASection = BaseRRCDATASection;\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return \"FORM\";\n }\n return element.tagName.toUpperCase();\n}\nfunction buildFromNode(node, rrdom, domMirror, parentRRNode) {\n let rrNode;\n switch (node.nodeType) {\n case NodeType.DOCUMENT_NODE:\n if (parentRRNode && parentRRNode.nodeName === \"IFRAME\")\n rrNode = parentRRNode.contentDocument;\n else {\n rrNode = rrdom;\n rrNode.compatMode = node.compatMode;\n }\n break;\n case NodeType.DOCUMENT_TYPE_NODE: {\n const documentType = node;\n rrNode = rrdom.createDocumentType(\n documentType.name,\n documentType.publicId,\n documentType.systemId\n );\n break;\n }\n case NodeType.ELEMENT_NODE: {\n const elementNode = node;\n const tagName = getValidTagName(elementNode);\n rrNode = rrdom.createElement(tagName);\n const rrElement = rrNode;\n for (const { name, value } of Array.from(elementNode.attributes)) {\n rrElement.attributes[name] = value;\n }\n elementNode.scrollLeft && (rrElement.scrollLeft = elementNode.scrollLeft);\n elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);\n break;\n }\n case NodeType.TEXT_NODE:\n rrNode = rrdom.createTextNode(node.textContent || \"\");\n break;\n case NodeType.CDATA_SECTION_NODE:\n rrNode = rrdom.createCDATASection(node.data);\n break;\n case NodeType.COMMENT_NODE:\n rrNode = rrdom.createComment(node.textContent || \"\");\n break;\n case NodeType.DOCUMENT_FRAGMENT_NODE:\n rrNode = parentRRNode.attachShadow({ mode: \"open\" });\n break;\n default:\n return null;\n }\n let sn = domMirror.getMeta(node);\n if (rrdom instanceof RRDocument) {\n if (!sn) {\n sn = getDefaultSN(rrNode, rrdom.unserializedId);\n domMirror.add(node, sn);\n }\n rrdom.mirror.add(rrNode, { ...sn });\n }\n return rrNode;\n}\nfunction buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument()) {\n function walk2(node, parentRRNode) {\n const rrNode = buildFromNode(node, rrdom, domMirror, parentRRNode);\n if (rrNode === null)\n return;\n if (\n // if the parentRRNode isn't a RRIFrameElement\n (parentRRNode == null ? void 0 : parentRRNode.nodeName) !== \"IFRAME\" && // if node isn't a shadow root\n node.nodeType !== NodeType.DOCUMENT_FRAGMENT_NODE\n ) {\n parentRRNode == null ? void 0 : parentRRNode.appendChild(rrNode);\n rrNode.parentNode = parentRRNode;\n rrNode.parentElement = parentRRNode;\n }\n if (node.nodeName === \"IFRAME\") {\n const iframeDoc = node.contentDocument;\n iframeDoc && walk2(iframeDoc, rrNode);\n } else if (node.nodeType === NodeType.DOCUMENT_NODE || node.nodeType === NodeType.ELEMENT_NODE || node.nodeType === NodeType.DOCUMENT_FRAGMENT_NODE) {\n if (node.nodeType === NodeType.ELEMENT_NODE && node.shadowRoot)\n walk2(node.shadowRoot, rrNode);\n node.childNodes.forEach((childNode) => walk2(childNode, rrNode));\n }\n }\n walk2(dom, null);\n return rrdom;\n}\nfunction createMirror() {\n return new Mirror22();\n}\nclass Mirror22 {\n constructor() {\n __publicField2(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n __publicField2(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n }\n getId(n2) {\n var _a2;\n if (!n2)\n return -1;\n const id = (_a2 = this.getMeta(n2)) == null ? void 0 : _a2.id;\n return id ?? -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n2) {\n return this.nodeMetaMap.get(n2) || null;\n }\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n2) {\n const id = this.getId(n2);\n this.idNodeMap.delete(id);\n if (n2.childNodes) {\n n2.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n2, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n2);\n this.nodeMetaMap.set(n2, meta);\n }\n replace(id, n2) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n2, meta);\n }\n this.idNodeMap.set(id, n2);\n }\n reset() {\n this.idNodeMap = /* @__PURE__ */ new Map();\n this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n }\n}\nfunction getDefaultSN(node, id) {\n switch (node.RRNodeType) {\n case NodeType$1.Document:\n return {\n id,\n type: node.RRNodeType,\n childNodes: []\n };\n case NodeType$1.DocumentType: {\n const doctype = node;\n return {\n id,\n type: node.RRNodeType,\n name: doctype.name,\n publicId: doctype.publicId,\n systemId: doctype.systemId\n };\n }\n case NodeType$1.Element:\n return {\n id,\n type: node.RRNodeType,\n tagName: node.tagName.toLowerCase(),\n // In rrweb data, all tagNames are lowercase.\n attributes: {},\n childNodes: []\n };\n case NodeType$1.Text:\n return {\n id,\n type: node.RRNodeType,\n textContent: node.textContent || \"\"\n };\n case NodeType$1.Comment:\n return {\n id,\n type: node.RRNodeType,\n textContent: node.textContent || \"\"\n };\n case NodeType$1.CDATA:\n return {\n id,\n type: node.RRNodeType,\n textContent: \"\"\n };\n }\n}\nfunction mitt$1(n2) {\n return { all: n2 = n2 || /* @__PURE__ */ new Map(), on: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 ? i2.push(e2) : n2.set(t2, [e2]);\n }, off: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 && (e2 ? i2.splice(i2.indexOf(e2) >>> 0, 1) : n2.set(t2, []));\n }, emit: function(t2, e2) {\n var i2 = n2.get(t2);\n i2 && i2.slice().map(function(n3) {\n n3(e2);\n }), (i2 = n2.get(\"*\")) && i2.slice().map(function(n3) {\n n3(t2, e2);\n });\n } };\n}\nconst mittProxy = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: mitt$1\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction polyfill(w = window, d = document) {\n if (\"scrollBehavior\" in d.documentElement.style && w.__forceSmoothScrollPolyfill__ !== true) {\n return;\n }\n const Element2 = w.HTMLElement || w.Element;\n const SCROLL_TIME = 468;\n const original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element2.prototype.scroll || scrollElement,\n scrollIntoView: Element2.prototype.scrollIntoView\n };\n const now = w.performance && w.performance.now ? w.performance.now.bind(w.performance) : Date.now;\n function isMicrosoftBrowser(userAgent) {\n const userAgentPatterns = [\"MSIE \", \"Trident/\", \"Edge/\"];\n return new RegExp(userAgentPatterns.join(\"|\")).test(userAgent);\n }\n const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n function shouldBailOut(firstArg) {\n if (firstArg === null || typeof firstArg !== \"object\" || firstArg.behavior === void 0 || firstArg.behavior === \"auto\" || firstArg.behavior === \"instant\") {\n return true;\n }\n if (typeof firstArg === \"object\" && firstArg.behavior === \"smooth\") {\n return false;\n }\n throw new TypeError(\n \"behavior member of ScrollOptions \" + firstArg.behavior + \" is not a valid value for enumeration ScrollBehavior.\"\n );\n }\n function hasScrollableSpace(el, axis) {\n if (axis === \"Y\") {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n if (axis === \"X\") {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n function canOverflow(el, axis) {\n const overflowValue = w.getComputedStyle(el, null)[\"overflow\" + axis];\n return overflowValue === \"auto\" || overflowValue === \"scroll\";\n }\n function isScrollable(el) {\n const isScrollableY = hasScrollableSpace(el, \"Y\") && canOverflow(el, \"Y\");\n const isScrollableX = hasScrollableSpace(el, \"X\") && canOverflow(el, \"X\");\n return isScrollableY || isScrollableX;\n }\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n return el;\n }\n function step(context) {\n const time = now();\n let value;\n let currentX;\n let currentY;\n let elapsed = (time - context.startTime) / SCROLL_TIME;\n elapsed = elapsed > 1 ? 1 : elapsed;\n value = ease(elapsed);\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n context.method.call(context.scrollable, currentX, currentY);\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n function smoothScroll(el, x, y) {\n let scrollable;\n let startX;\n let startY;\n let method;\n const startTime = now();\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n step({\n scrollable,\n method,\n startTime,\n startX,\n startY,\n x,\n y\n });\n }\n w.scroll = w.scrollTo = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : w.scrollY || w.pageYOffset\n );\n return;\n }\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== void 0 ? ~~arguments[0].left : w.scrollX || w.pageXOffset,\n arguments[0].top !== void 0 ? ~~arguments[0].top : w.scrollY || w.pageYOffset\n );\n };\n w.scrollBy = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : 0,\n arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : 0\n );\n return;\n }\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n Element2.prototype.scroll = Element2.prototype.scrollTo = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n if (typeof arguments[0] === \"number\" && arguments[1] === void 0) {\n throw new SyntaxError(\"Value could not be converted\");\n }\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== void 0 ? ~~arguments[0].left : typeof arguments[0] !== \"object\" ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== void 0 ? ~~arguments[0].top : arguments[1] !== void 0 ? ~~arguments[1] : this.scrollTop\n );\n return;\n }\n const left = arguments[0].left;\n const top = arguments[0].top;\n smoothScroll.call(\n this,\n this,\n typeof left === \"undefined\" ? this.scrollLeft : ~~left,\n typeof top === \"undefined\" ? this.scrollTop : ~~top\n );\n };\n Element2.prototype.scrollBy = function() {\n if (arguments[0] === void 0) {\n return;\n }\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== void 0 ? ~~arguments[0].left + this.scrollLeft : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== void 0 ? ~~arguments[0].top + this.scrollTop : ~~arguments[1] + this.scrollTop\n );\n return;\n }\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n Element2.prototype.scrollIntoView = function() {\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === void 0 ? true : arguments[0]\n );\n return;\n }\n const scrollableParent = findScrollableParent(this);\n const parentRects = scrollableParent.getBoundingClientRect();\n const clientRects = this.getBoundingClientRect();\n if (scrollableParent !== d.body) {\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n if (w.getComputedStyle(scrollableParent).position !== \"fixed\") {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: \"smooth\"\n });\n }\n } else {\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: \"smooth\"\n });\n }\n };\n}\nclass Timer {\n constructor(actions = [], config) {\n __publicField(this, \"timeOffset\", 0);\n __publicField(this, \"speed\");\n __publicField(this, \"actions\");\n __publicField(this, \"raf\", null);\n __publicField(this, \"lastTimestamp\");\n this.actions = actions;\n this.speed = config.speed;\n }\n /**\n * Add an action, possibly after the timer starts.\n */\n addAction(action) {\n const rafWasActive = this.raf === true;\n if (!this.actions.length || this.actions[this.actions.length - 1].delay <= action.delay) {\n this.actions.push(action);\n } else {\n const index = this.findActionIndex(action);\n this.actions.splice(index, 0, action);\n }\n if (rafWasActive) {\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n }\n }\n start() {\n this.timeOffset = 0;\n this.lastTimestamp = performance.now();\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n }\n rafCheck() {\n const time = performance.now();\n this.timeOffset += (time - this.lastTimestamp) * this.speed;\n this.lastTimestamp = time;\n while (this.actions.length) {\n const action = this.actions[0];\n if (this.timeOffset >= action.delay) {\n this.actions.shift();\n action.doAction();\n } else {\n break;\n }\n }\n if (this.actions.length > 0) {\n this.raf = requestAnimationFrame(this.rafCheck.bind(this));\n } else {\n this.raf = true;\n }\n }\n clear() {\n if (this.raf) {\n if (this.raf !== true) {\n cancelAnimationFrame(this.raf);\n }\n this.raf = null;\n }\n this.actions.length = 0;\n }\n setSpeed(speed) {\n this.speed = speed;\n }\n isActive() {\n return this.raf !== null;\n }\n findActionIndex(action) {\n let start = 0;\n let end = this.actions.length - 1;\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n if (this.actions[mid].delay < action.delay) {\n start = mid + 1;\n } else if (this.actions[mid].delay > action.delay) {\n end = mid - 1;\n } else {\n return mid + 1;\n }\n }\n return start;\n }\n}\nfunction addDelay(event, baselineTime) {\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions && event.data.positions.length) {\n const firstOffset = event.data.positions[0].timeOffset;\n const firstTimestamp = event.timestamp + firstOffset;\n event.delay = firstTimestamp - baselineTime;\n return firstTimestamp - baselineTime;\n }\n event.delay = event.timestamp - baselineTime;\n return event.delay;\n}\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t2, n2) {\n var e2 = \"function\" == typeof Symbol && t2[Symbol.iterator];\n if (!e2)\n return t2;\n var r2, o2, i2 = e2.call(t2), a2 = [];\n try {\n for (; (void 0 === n2 || n2-- > 0) && !(r2 = i2.next()).done; )\n a2.push(r2.value);\n } catch (t3) {\n o2 = { error: t3 };\n } finally {\n try {\n r2 && !r2.done && (e2 = i2.return) && e2.call(i2);\n } finally {\n if (o2)\n throw o2.error;\n }\n }\n return a2;\n}\nvar n;\n!function(t2) {\n t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nvar e = { type: \"xstate.init\" };\nfunction r(t2) {\n return void 0 === t2 ? [] : [].concat(t2);\n}\nfunction o(t2) {\n return { type: \"xstate.assign\", assignment: t2 };\n}\nfunction i(t2, n2) {\n return \"string\" == typeof (t2 = \"string\" == typeof t2 && n2 && n2[t2] ? n2[t2] : t2) ? { type: t2 } : \"function\" == typeof t2 ? { type: t2.name, exec: t2 } : t2;\n}\nfunction a(t2) {\n return function(n2) {\n return t2 === n2;\n };\n}\nfunction u(t2) {\n return \"string\" == typeof t2 ? { type: t2 } : t2;\n}\nfunction c(t2, n2) {\n return { value: t2, context: n2, actions: [], changed: false, matches: a(t2) };\n}\nfunction f(t2, n2, e2) {\n var r2 = n2, o2 = false;\n return [t2.filter(function(t3) {\n if (\"xstate.assign\" === t3.type) {\n o2 = true;\n var n3 = Object.assign({}, r2);\n return \"function\" == typeof t3.assignment ? n3 = t3.assignment(r2, e2) : Object.keys(t3.assignment).forEach(function(o3) {\n n3[o3] = \"function\" == typeof t3.assignment[o3] ? t3.assignment[o3](r2, e2) : t3.assignment[o3];\n }), r2 = n3, false;\n }\n return true;\n }), r2, o2];\n}\nfunction s(n2, o2) {\n void 0 === o2 && (o2 = {});\n var s2 = t(f(r(n2.states[n2.initial].entry).map(function(t2) {\n return i(t2, o2.actions);\n }), n2.context, e), 2), l2 = s2[0], v2 = s2[1], y = { config: n2, _options: o2, initialState: { value: n2.initial, actions: l2, context: v2, matches: a(n2.initial) }, transition: function(e2, o3) {\n var s3, l3, v3 = \"string\" == typeof e2 ? { value: e2, context: n2.context } : e2, p = v3.value, g = v3.context, d = u(o3), x = n2.states[p];\n if (x.on) {\n var m = r(x.on[d.type]);\n try {\n for (var h = function(t2) {\n var n3 = \"function\" == typeof Symbol && Symbol.iterator, e3 = n3 && t2[n3], r2 = 0;\n if (e3)\n return e3.call(t2);\n if (t2 && \"number\" == typeof t2.length)\n return { next: function() {\n return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };\n } };\n throw new TypeError(n3 ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n }(m), b = h.next(); !b.done; b = h.next()) {\n var S = b.value;\n if (void 0 === S)\n return c(p, g);\n var w = \"string\" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {\n return true;\n } : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];\n if (O(g, d)) {\n var q = t(f((_ ? r(R) : [].concat(x.exit, R, T.entry).filter(function(t2) {\n return t2;\n })).map(function(t2) {\n return i(t2, y._options.actions);\n }), g, d), 3), z = q[0], A = q[1], B = q[2], C = null != j ? j : p;\n return { value: C, context: A, actions: z, changed: j !== p || z.length > 0 || B, matches: a(C) };\n }\n }\n } catch (t2) {\n s3 = { error: t2 };\n } finally {\n try {\n b && !b.done && (l3 = h.return) && l3.call(h);\n } finally {\n if (s3)\n throw s3.error;\n }\n }\n }\n return c(p, g);\n } };\n return y;\n}\nvar l = function(t2, n2) {\n return t2.actions.forEach(function(e2) {\n var r2 = e2.exec;\n return r2 && r2(t2.context, n2);\n });\n};\nfunction v(t2) {\n var r2 = t2.initialState, o2 = n.NotStarted, i2 = /* @__PURE__ */ new Set(), c2 = { _machine: t2, send: function(e2) {\n o2 === n.Running && (r2 = t2.transition(r2, e2), l(r2, u(e2)), i2.forEach(function(t3) {\n return t3(r2);\n }));\n }, subscribe: function(t3) {\n return i2.add(t3), t3(r2), { unsubscribe: function() {\n return i2.delete(t3);\n } };\n }, start: function(i3) {\n if (i3) {\n var u2 = \"object\" == typeof i3 ? i3 : { context: t2.config.context, value: i3 };\n r2 = { value: u2.value, actions: [], context: u2.context, matches: a(u2.value) };\n }\n return o2 = n.Running, l(r2, e), c2;\n }, stop: function() {\n return o2 = n.Stopped, i2.clear(), c2;\n }, get state() {\n return r2;\n }, get status() {\n return o2;\n } };\n return c2;\n}\nfunction discardPriorSnapshots(events, baselineTime) {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n const event = events[idx];\n if (event.type === EventType.Meta) {\n if (event.timestamp <= baselineTime) {\n return events.slice(idx);\n }\n }\n }\n return events;\n}\nfunction createPlayerService(context, { getCastFn, applyEventsSynchronously, emitter }) {\n const playerMachine = s(\n {\n id: \"player\",\n context,\n initial: \"paused\",\n states: {\n playing: {\n on: {\n PAUSE: {\n target: \"paused\",\n actions: [\"pause\"]\n },\n CAST_EVENT: {\n target: \"playing\",\n actions: \"castEvent\"\n },\n END: {\n target: \"paused\",\n actions: [\"resetLastPlayedEvent\", \"pause\"]\n },\n ADD_EVENT: {\n target: \"playing\",\n actions: [\"addEvent\"]\n }\n }\n },\n paused: {\n on: {\n PLAY: {\n target: \"playing\",\n actions: [\"recordTimeOffset\", \"play\"]\n },\n CAST_EVENT: {\n target: \"paused\",\n actions: \"castEvent\"\n },\n TO_LIVE: {\n target: \"live\",\n actions: [\"startLive\"]\n },\n ADD_EVENT: {\n target: \"paused\",\n actions: [\"addEvent\"]\n }\n }\n },\n live: {\n on: {\n ADD_EVENT: {\n target: \"live\",\n actions: [\"addEvent\"]\n },\n CAST_EVENT: {\n target: \"live\",\n actions: [\"castEvent\"]\n }\n }\n }\n }\n },\n {\n actions: {\n castEvent: o({\n lastPlayedEvent: (ctx, event) => {\n if (event.type === \"CAST_EVENT\") {\n return event.payload.event;\n }\n return ctx.lastPlayedEvent;\n }\n }),\n recordTimeOffset: o((ctx, event) => {\n let timeOffset = ctx.timeOffset;\n if (\"payload\" in event && \"timeOffset\" in event.payload) {\n timeOffset = event.payload.timeOffset;\n }\n return {\n ...ctx,\n timeOffset,\n baselineTime: ctx.events[0].timestamp + timeOffset\n };\n }),\n play(ctx) {\n var _a2;\n const { timer, events, baselineTime, lastPlayedEvent } = ctx;\n timer.clear();\n for (const event of events) {\n addDelay(event, baselineTime);\n }\n const neededEvents = discardPriorSnapshots(events, baselineTime);\n let lastPlayedTimestamp = lastPlayedEvent == null ? void 0 : lastPlayedEvent.timestamp;\n if ((lastPlayedEvent == null ? void 0 : lastPlayedEvent.type) === EventType.IncrementalSnapshot && lastPlayedEvent.data.source === IncrementalSource.MouseMove) {\n lastPlayedTimestamp = lastPlayedEvent.timestamp + ((_a2 = lastPlayedEvent.data.positions[0]) == null ? void 0 : _a2.timeOffset);\n }\n if (baselineTime < (lastPlayedTimestamp || 0)) {\n emitter.emit(ReplayerEvents.PlayBack);\n }\n const syncEvents = new Array();\n for (const event of neededEvents) {\n if (lastPlayedTimestamp && lastPlayedTimestamp < baselineTime && (event.timestamp <= lastPlayedTimestamp || event === lastPlayedEvent)) {\n continue;\n }\n if (event.timestamp < baselineTime) {\n syncEvents.push(event);\n } else {\n const castFn = getCastFn(event, false);\n timer.addAction({\n doAction: () => {\n castFn();\n },\n delay: event.delay\n });\n }\n }\n applyEventsSynchronously(syncEvents);\n emitter.emit(ReplayerEvents.Flush);\n timer.start();\n },\n pause(ctx) {\n ctx.timer.clear();\n },\n resetLastPlayedEvent: o((ctx) => {\n return {\n ...ctx,\n lastPlayedEvent: null\n };\n }),\n startLive: o({\n baselineTime: (ctx, event) => {\n ctx.timer.start();\n if (event.type === \"TO_LIVE\" && event.payload.baselineTime) {\n return event.payload.baselineTime;\n }\n return Date.now();\n }\n }),\n addEvent: o((ctx, machineEvent) => {\n const { baselineTime, timer, events } = ctx;\n if (machineEvent.type === \"ADD_EVENT\") {\n const { event } = machineEvent.payload;\n addDelay(event, baselineTime);\n let end = events.length - 1;\n if (!events[end] || events[end].timestamp <= event.timestamp) {\n events.push(event);\n } else {\n let insertionIndex = -1;\n let start = 0;\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n if (events[mid].timestamp <= event.timestamp) {\n start = mid + 1;\n } else {\n end = mid - 1;\n }\n }\n if (insertionIndex === -1) {\n insertionIndex = start;\n }\n events.splice(insertionIndex, 0, event);\n }\n const isSync = event.timestamp < baselineTime;\n const castFn = getCastFn(event, isSync);\n if (isSync) {\n castFn();\n } else if (timer.isActive()) {\n timer.addAction({\n doAction: () => {\n castFn();\n },\n delay: event.delay\n });\n }\n }\n return { ...ctx, events };\n })\n }\n }\n );\n return v(playerMachine);\n}\nfunction createSpeedService(context) {\n const speedMachine = s(\n {\n id: \"speed\",\n context,\n initial: \"normal\",\n states: {\n normal: {\n on: {\n FAST_FORWARD: {\n target: \"skipping\",\n actions: [\"recordSpeed\", \"setSpeed\"]\n },\n SET_SPEED: {\n target: \"normal\",\n actions: [\"setSpeed\"]\n }\n }\n },\n skipping: {\n on: {\n BACK_TO_NORMAL: {\n target: \"normal\",\n actions: [\"restoreSpeed\"]\n },\n SET_SPEED: {\n target: \"normal\",\n actions: [\"setSpeed\"]\n }\n }\n }\n }\n },\n {\n actions: {\n setSpeed: (ctx, event) => {\n if (\"payload\" in event) {\n ctx.timer.setSpeed(event.payload.speed);\n }\n },\n recordSpeed: o({\n normalSpeed: (ctx) => ctx.timer.speed\n }),\n restoreSpeed: (ctx) => {\n ctx.timer.setSpeed(ctx.normalSpeed);\n }\n }\n }\n );\n return v(speedMachine);\n}\nconst rules = (blockClass) => [\n `.${blockClass} { background: currentColor }`,\n \"noscript { display: none !important; }\"\n];\nconst webGLVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor(ctx, ctor) {\n let contextMap = webGLVarMap.get(ctx);\n if (!contextMap) {\n contextMap = /* @__PURE__ */ new Map();\n webGLVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor);\n}\nfunction deserializeArg(imageMap, ctx, preload) {\n return async (arg) => {\n if (arg && typeof arg === \"object\" && \"rr_type\" in arg) {\n if (preload)\n preload.isUnchanged = false;\n if (arg.rr_type === \"ImageBitmap\" && \"args\" in arg) {\n const args = await deserializeArg(imageMap, ctx, preload)(arg.args);\n return await createImageBitmap.apply(null, args);\n } else if (\"index\" in arg) {\n if (preload || ctx === null)\n return arg;\n const { rr_type: name, index } = arg;\n return variableListFor(ctx, name)[index];\n } else if (\"args\" in arg) {\n const { rr_type: name, args } = arg;\n const ctor = window[name];\n return new ctor(\n ...await Promise.all(\n args.map(deserializeArg(imageMap, ctx, preload))\n )\n );\n } else if (\"base64\" in arg) {\n return decode(arg.base64);\n } else if (\"src\" in arg) {\n const image = imageMap.get(arg.src);\n if (image) {\n return image;\n } else {\n const image2 = new Image();\n image2.src = arg.src;\n imageMap.set(arg.src, image2);\n return image2;\n }\n } else if (\"data\" in arg && arg.rr_type === \"Blob\") {\n const blobContents = await Promise.all(\n arg.data.map(deserializeArg(imageMap, ctx, preload))\n );\n const blob2 = new Blob(blobContents, {\n type: arg.type\n });\n return blob2;\n }\n } else if (Array.isArray(arg)) {\n const result = await Promise.all(\n arg.map(deserializeArg(imageMap, ctx, preload))\n );\n return result;\n }\n return arg;\n };\n}\nfunction getContext(target, type) {\n try {\n if (type === CanvasContext.WebGL) {\n return target.getContext(\"webgl\") || target.getContext(\"experimental-webgl\");\n }\n return target.getContext(\"webgl2\");\n } catch (e2) {\n return null;\n }\n}\nconst WebGLVariableConstructorsNames = [\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArrayObject\"\n];\nfunction saveToWebGLVarMap(ctx, result) {\n if (!(result == null ? void 0 : result.constructor))\n return;\n const { name } = result.constructor;\n if (!WebGLVariableConstructorsNames.includes(name))\n return;\n const variables = variableListFor(ctx, name);\n if (!variables.includes(result))\n variables.push(result);\n}\nasync function webglMutation({\n mutation,\n target,\n type,\n imageMap,\n errorHandler: errorHandler2\n}) {\n try {\n const ctx = getContext(target, type);\n if (!ctx)\n return;\n if (mutation.setter) {\n ctx[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[mutation.property];\n const args = await Promise.all(\n mutation.args.map(deserializeArg(imageMap, ctx))\n );\n const result = original.apply(ctx, args);\n saveToWebGLVarMap(ctx, result);\n const debugMode = false;\n if (debugMode)\n ;\n } catch (error) {\n errorHandler2(mutation, error);\n }\n}\nasync function canvasMutation$1({\n event,\n mutations,\n target,\n imageMap,\n errorHandler: errorHandler2\n}) {\n const ctx = target.getContext(\"2d\");\n if (!ctx) {\n errorHandler2(mutations[0], new Error(\"Canvas context is null\"));\n return;\n }\n const mutationArgsPromises = mutations.map(\n async (mutation) => {\n return Promise.all(mutation.args.map(deserializeArg(imageMap, ctx)));\n }\n );\n const args = await Promise.all(mutationArgsPromises);\n args.forEach((args2, index) => {\n const mutation = mutations[index];\n try {\n if (mutation.setter) {\n ctx[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[mutation.property];\n if (mutation.property === \"drawImage\" && typeof mutation.args[0] === \"string\") {\n imageMap.get(event);\n original.apply(ctx, mutation.args);\n } else {\n original.apply(ctx, args2);\n }\n } catch (error) {\n errorHandler2(mutation, error);\n }\n return;\n });\n}\nasync function canvasMutation({\n event,\n mutation,\n target,\n imageMap,\n canvasEventMap,\n errorHandler: errorHandler2\n}) {\n try {\n const precomputedMutation = canvasEventMap.get(event) || mutation;\n const commands = \"commands\" in precomputedMutation ? precomputedMutation.commands : [precomputedMutation];\n if ([CanvasContext.WebGL, CanvasContext.WebGL2].includes(mutation.type)) {\n for (let i2 = 0; i2 < commands.length; i2++) {\n const command = commands[i2];\n await webglMutation({\n mutation: command,\n type: mutation.type,\n target,\n imageMap,\n errorHandler: errorHandler2\n });\n }\n return;\n }\n await canvasMutation$1({\n event,\n mutations: commands,\n target,\n imageMap,\n errorHandler: errorHandler2\n });\n } catch (error) {\n errorHandler2(mutation, error);\n }\n}\nclass MediaManager {\n constructor(options) {\n __publicField(this, \"mediaMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"warn\");\n __publicField(this, \"service\");\n __publicField(this, \"speedService\");\n __publicField(this, \"emitter\");\n __publicField(this, \"getCurrentTime\");\n __publicField(this, \"metadataCallbackMap\", /* @__PURE__ */ new Map());\n this.warn = options.warn;\n this.service = options.service;\n this.speedService = options.speedService;\n this.emitter = options.emitter;\n this.getCurrentTime = options.getCurrentTime;\n this.emitter.on(ReplayerEvents.Start, this.start.bind(this));\n this.emitter.on(ReplayerEvents.SkipStart, this.start.bind(this));\n this.emitter.on(ReplayerEvents.Pause, this.pause.bind(this));\n this.emitter.on(ReplayerEvents.Finish, this.pause.bind(this));\n this.speedService.subscribe(() => {\n this.syncAllMediaElements();\n });\n }\n syncAllMediaElements(options = { pause: false }) {\n this.mediaMap.forEach((_mediaState, target) => {\n this.syncTargetWithState(target);\n if (options.pause) {\n target.pause();\n }\n });\n }\n start() {\n this.syncAllMediaElements();\n }\n pause() {\n this.syncAllMediaElements({ pause: true });\n }\n seekTo({\n time,\n target,\n mediaState\n }) {\n if (mediaState.isPlaying) {\n const differenceBetweenCurrentTimeAndMediaMutationTimestamp = time - mediaState.lastInteractionTimeOffset;\n const mediaPlaybackOffset = differenceBetweenCurrentTimeAndMediaMutationTimestamp / 1e3 * mediaState.playbackRate;\n const duration = \"duration\" in target && target.duration;\n if (Number.isNaN(duration)) {\n this.waitForMetadata(target);\n return;\n }\n let seekToTime = mediaState.currentTimeAtLastInteraction + mediaPlaybackOffset;\n if (target.loop && // RRMediaElement doesn't have a duration property\n duration !== false) {\n seekToTime = seekToTime % duration;\n }\n target.currentTime = seekToTime;\n } else {\n target.pause();\n target.currentTime = mediaState.currentTimeAtLastInteraction;\n }\n }\n waitForMetadata(target) {\n if (this.metadataCallbackMap.has(target))\n return;\n if (!(\"addEventListener\" in target))\n return;\n const onLoadedMetadata = () => {\n this.metadataCallbackMap.delete(target);\n const mediaState = this.mediaMap.get(target);\n if (!mediaState)\n return;\n this.seekTo({\n time: this.getCurrentTime(),\n target,\n mediaState\n });\n };\n this.metadataCallbackMap.set(target, onLoadedMetadata);\n target.addEventListener(\"loadedmetadata\", onLoadedMetadata, {\n once: true\n });\n }\n getMediaStateFromMutation({\n target,\n timeOffset,\n mutation\n }) {\n const lastState = this.mediaMap.get(target);\n const { type, playbackRate, currentTime, muted, volume, loop } = mutation;\n const isPlaying = type === MediaInteractions.Play || type !== MediaInteractions.Pause && ((lastState == null ? void 0 : lastState.isPlaying) || target.getAttribute(\"autoplay\") !== null);\n const mediaState = {\n isPlaying,\n currentTimeAtLastInteraction: currentTime ?? (lastState == null ? void 0 : lastState.currentTimeAtLastInteraction) ?? 0,\n lastInteractionTimeOffset: timeOffset,\n playbackRate: playbackRate ?? (lastState == null ? void 0 : lastState.playbackRate) ?? 1,\n volume: volume ?? (lastState == null ? void 0 : lastState.volume) ?? 1,\n muted: muted ?? (lastState == null ? void 0 : lastState.muted) ?? target.getAttribute(\"muted\") === null,\n loop: loop ?? (lastState == null ? void 0 : lastState.loop) ?? target.getAttribute(\"loop\") === null\n };\n return mediaState;\n }\n syncTargetWithState(target) {\n const mediaState = this.mediaMap.get(target);\n if (!mediaState)\n return;\n const { muted, loop, volume, isPlaying } = mediaState;\n const playerIsPaused = this.service.state.matches(\"paused\");\n const playbackRate = mediaState.playbackRate * this.speedService.state.context.timer.speed;\n try {\n this.seekTo({\n time: this.getCurrentTime(),\n target,\n mediaState\n });\n if (target.volume !== volume) {\n target.volume = volume;\n }\n target.muted = muted;\n target.loop = loop;\n if (target.playbackRate !== playbackRate) {\n target.playbackRate = playbackRate;\n }\n if (isPlaying && !playerIsPaused) {\n void target.play();\n } else {\n target.pause();\n }\n } catch (error) {\n this.warn(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions\n `Failed to replay media interactions: ${error.message || error}`\n );\n }\n }\n addMediaElements(node, timeOffset, mirror2) {\n if (![\"AUDIO\", \"VIDEO\"].includes(node.nodeName))\n return;\n const target = node;\n const serializedNode = mirror2.getMeta(target);\n if (!serializedNode || !(\"attributes\" in serializedNode))\n return;\n const playerIsPaused = this.service.state.matches(\"paused\");\n const mediaAttributes = serializedNode.attributes;\n let isPlaying = false;\n if (mediaAttributes.rr_mediaState) {\n isPlaying = mediaAttributes.rr_mediaState === \"played\";\n } else {\n isPlaying = target.getAttribute(\"autoplay\") !== null;\n }\n if (isPlaying && playerIsPaused)\n target.pause();\n let playbackRate = 1;\n if (typeof mediaAttributes.rr_mediaPlaybackRate === \"number\") {\n playbackRate = mediaAttributes.rr_mediaPlaybackRate;\n }\n let muted = false;\n if (typeof mediaAttributes.rr_mediaMuted === \"boolean\") {\n muted = mediaAttributes.rr_mediaMuted;\n } else {\n muted = target.getAttribute(\"muted\") !== null;\n }\n let loop = false;\n if (typeof mediaAttributes.rr_mediaLoop === \"boolean\") {\n loop = mediaAttributes.rr_mediaLoop;\n } else {\n loop = target.getAttribute(\"loop\") !== null;\n }\n let volume = 1;\n if (typeof mediaAttributes.rr_mediaVolume === \"number\") {\n volume = mediaAttributes.rr_mediaVolume;\n }\n let currentTimeAtLastInteraction = 0;\n if (typeof mediaAttributes.rr_mediaCurrentTime === \"number\") {\n currentTimeAtLastInteraction = mediaAttributes.rr_mediaCurrentTime;\n }\n this.mediaMap.set(target, {\n isPlaying,\n currentTimeAtLastInteraction,\n lastInteractionTimeOffset: timeOffset,\n playbackRate,\n volume,\n muted,\n loop\n });\n this.syncTargetWithState(target);\n }\n mediaMutation({\n target,\n timeOffset,\n mutation\n }) {\n this.mediaMap.set(\n target,\n this.getMediaStateFromMutation({\n target,\n timeOffset,\n mutation\n })\n );\n this.syncTargetWithState(target);\n }\n isSupportedMediaElement(node) {\n return [\"AUDIO\", \"VIDEO\"].includes(node.nodeName);\n }\n reset() {\n this.mediaMap.clear();\n }\n}\nconst SKIP_TIME_INTERVAL = 5 * 1e3;\nconst mitt = mitt$1 || mittProxy;\nconst REPLAY_CONSOLE_PREFIX = \"[replayer]\";\nconst defaultMouseTailConfig = {\n duration: 500,\n lineCap: \"round\",\n lineWidth: 3,\n strokeStyle: \"red\"\n};\nfunction indicatesTouchDevice(e2) {\n return e2.type == EventType.IncrementalSnapshot && (e2.data.source == IncrementalSource.TouchMove || e2.data.source == IncrementalSource.MouseInteraction && e2.data.type == MouseInteractions.TouchStart);\n}\nclass Replayer {\n constructor(events, config) {\n __publicField(this, \"wrapper\");\n __publicField(this, \"iframe\");\n __publicField(this, \"service\");\n __publicField(this, \"speedService\");\n __publicField(this, \"config\");\n // In the fast-forward process, if the virtual-dom optimization is used, this flag value is true.\n __publicField(this, \"usingVirtualDom\", false);\n __publicField(this, \"virtualDom\", new RRDocument());\n __publicField(this, \"mouse\");\n __publicField(this, \"mouseTail\", null);\n __publicField(this, \"tailPositions\", []);\n __publicField(this, \"emitter\", mitt());\n __publicField(this, \"nextUserInteractionEvent\");\n __publicField(this, \"legacy_missingNodeRetryMap\", {});\n // The replayer uses the cache to speed up replay and scrubbing.\n __publicField(this, \"cache\", createCache());\n __publicField(this, \"imageMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"canvasEventMap\", /* @__PURE__ */ new Map());\n __publicField(this, \"mirror\", createMirror$2());\n // Used to track StyleSheetObjects adopted on multiple document hosts.\n __publicField(this, \"styleMirror\", new StyleSheetMirror());\n // Used to track video & audio elements, and keep them in sync with general playback.\n __publicField(this, \"mediaManager\");\n __publicField(this, \"firstFullSnapshot\", null);\n __publicField(this, \"newDocumentQueue\", []);\n __publicField(this, \"mousePos\", null);\n __publicField(this, \"touchActive\", null);\n __publicField(this, \"lastMouseDownEvent\", null);\n // Keep the rootNode of the last hovered element. So when hovering a new element, we can remove the last hovered element's :hover style.\n __publicField(this, \"lastHoveredRootNode\");\n // In the fast-forward mode, only the last selection data needs to be applied.\n __publicField(this, \"lastSelectionData\", null);\n // In the fast-forward mode using VirtualDom optimization, all stylesheetRule, and styleDeclaration events on constructed StyleSheets will be delayed to get applied until the flush stage.\n __publicField(this, \"constructedStyleMutations\", []);\n // Similar to the reason for constructedStyleMutations.\n __publicField(this, \"adoptedStyleSheets\", []);\n __publicField(this, \"handleResize\", (dimension) => {\n this.iframe.style.display = \"inherit\";\n for (const el of [this.mouseTail, this.iframe]) {\n if (!el) {\n continue;\n }\n el.setAttribute(\"width\", String(dimension.width));\n el.setAttribute(\"height\", String(dimension.height));\n }\n });\n __publicField(this, \"applyEventsSynchronously\", (events) => {\n for (const event of events) {\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n case EventType.Custom:\n continue;\n case EventType.FullSnapshot:\n case EventType.Meta:\n case EventType.Plugin:\n case EventType.IncrementalSnapshot:\n break;\n }\n const castFn = this.getCastFn(event, true);\n castFn();\n }\n });\n __publicField(this, \"getCastFn\", (event, isSync = false) => {\n let castFn;\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n break;\n case EventType.Custom:\n castFn = () => {\n this.emitter.emit(ReplayerEvents.CustomEvent, event);\n };\n break;\n case EventType.Meta:\n castFn = () => this.emitter.emit(ReplayerEvents.Resize, {\n width: event.data.width,\n height: event.data.height\n });\n break;\n case EventType.FullSnapshot:\n castFn = () => {\n var _a2;\n if (this.firstFullSnapshot) {\n if (this.firstFullSnapshot === event) {\n this.firstFullSnapshot = true;\n return;\n }\n } else {\n this.firstFullSnapshot = true;\n }\n this.mediaManager.reset();\n this.styleMirror.reset();\n this.rebuildFullSnapshot(event, isSync);\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(event.data.initialOffset);\n };\n break;\n case EventType.IncrementalSnapshot:\n castFn = () => {\n this.applyIncremental(event, isSync);\n if (isSync) {\n return;\n }\n if (event === this.nextUserInteractionEvent) {\n this.nextUserInteractionEvent = null;\n this.backToNormal();\n }\n if (this.config.skipInactive && !this.nextUserInteractionEvent) {\n for (const _event of this.service.state.context.events) {\n if (_event.timestamp <= event.timestamp) {\n continue;\n }\n if (this.isUserInteraction(_event)) {\n if (\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _event.delay - event.delay > this.config.inactivePeriodThreshold * this.speedService.state.context.timer.speed\n ) {\n this.nextUserInteractionEvent = _event;\n }\n break;\n }\n }\n if (this.nextUserInteractionEvent) {\n const skipTime = (\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.nextUserInteractionEvent.delay - event.delay\n );\n const payload = {\n speed: Math.min(\n Math.round(skipTime / SKIP_TIME_INTERVAL),\n this.config.maxSpeed\n )\n };\n this.speedService.send({ type: \"FAST_FORWARD\", payload });\n this.emitter.emit(ReplayerEvents.SkipStart, payload);\n }\n }\n };\n break;\n }\n const wrappedCastFn = () => {\n if (castFn) {\n castFn();\n }\n for (const plugin of this.config.plugins || []) {\n if (plugin.handler)\n plugin.handler(event, isSync, { replayer: this });\n }\n this.service.send({ type: \"CAST_EVENT\", payload: { event } });\n const last_index = this.service.state.context.events.length - 1;\n if (!this.config.liveMode && event === this.service.state.context.events[last_index]) {\n const finish = () => {\n if (last_index < this.service.state.context.events.length - 1) {\n return;\n }\n this.backToNormal();\n this.service.send(\"END\");\n this.emitter.emit(ReplayerEvents.Finish);\n };\n let finish_buffer = 50;\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions.length) {\n finish_buffer += Math.max(0, -event.data.positions[0].timeOffset);\n }\n setTimeout(finish, finish_buffer);\n }\n this.emitter.emit(ReplayerEvents.EventCast, event);\n };\n return wrappedCastFn;\n });\n if (!(config == null ? void 0 : config.liveMode) && events.length < 2) {\n throw new Error(\"Replayer need at least 2 events.\");\n }\n const defaultConfig = {\n speed: 1,\n maxSpeed: 360,\n root: document.body,\n loadTimeout: 0,\n skipInactive: false,\n inactivePeriodThreshold: 10 * 1e3,\n showWarning: true,\n showDebug: false,\n blockClass: \"rr-block\",\n liveMode: false,\n insertStyleRules: [],\n triggerFocus: true,\n UNSAFE_replayCanvas: false,\n pauseAnimation: true,\n mouseTail: defaultMouseTailConfig,\n useVirtualDom: true,\n // Virtual-dom optimization is enabled by default.\n logger: console\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.handleResize = this.handleResize.bind(this);\n this.getCastFn = this.getCastFn.bind(this);\n this.applyEventsSynchronously = this.applyEventsSynchronously.bind(this);\n this.emitter.on(ReplayerEvents.Resize, this.handleResize);\n this.setupDom();\n for (const plugin of this.config.plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({ nodeMirror: this.mirror });\n }\n this.emitter.on(ReplayerEvents.Flush, () => {\n if (this.usingVirtualDom) {\n const replayerHandler = {\n mirror: this.mirror,\n applyCanvas: (canvasEvent, canvasMutationData2, target) => {\n void canvasMutation({\n event: canvasEvent,\n mutation: canvasMutationData2,\n target,\n imageMap: this.imageMap,\n canvasEventMap: this.canvasEventMap,\n errorHandler: this.warnCanvasMutationFailed.bind(this)\n });\n },\n applyInput: this.applyInput.bind(this),\n applyScroll: this.applyScroll.bind(this),\n applyStyleSheetMutation: (data, styleSheet) => {\n if (data.source === IncrementalSource.StyleSheetRule)\n this.applyStyleSheetRule(data, styleSheet);\n else if (data.source === IncrementalSource.StyleDeclaration)\n this.applyStyleDeclaration(data, styleSheet);\n },\n afterAppend: (node, id) => {\n for (const plugin of this.config.plugins || []) {\n if (plugin.onBuild)\n plugin.onBuild(node, { id, replayer: this });\n }\n }\n };\n if (this.iframe.contentDocument)\n try {\n diff(\n this.iframe.contentDocument,\n this.virtualDom,\n replayerHandler,\n this.virtualDom.mirror\n );\n } catch (e2) {\n console.warn(e2);\n }\n this.virtualDom.destroyTree();\n this.usingVirtualDom = false;\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n for (const key in this.legacy_missingNodeRetryMap) {\n try {\n const value = this.legacy_missingNodeRetryMap[key];\n const realNode = createOrGetNode(\n value.node,\n this.mirror,\n this.virtualDom.mirror\n );\n diff(\n realNode,\n value.node,\n replayerHandler,\n this.virtualDom.mirror\n );\n value.node = realNode;\n } catch (error) {\n this.warn(error);\n }\n }\n }\n this.constructedStyleMutations.forEach((data) => {\n this.applyStyleSheetMutation(data);\n });\n this.constructedStyleMutations = [];\n this.adoptedStyleSheets.forEach((data) => {\n this.applyAdoptedStyleSheet(data);\n });\n this.adoptedStyleSheets = [];\n }\n if (this.mousePos) {\n this.moveAndHover(\n this.mousePos.x,\n this.mousePos.y,\n this.mousePos.id,\n true,\n this.mousePos.debugData\n );\n this.mousePos = null;\n }\n if (this.touchActive === true) {\n this.mouse.classList.add(\"touch-active\");\n } else if (this.touchActive === false) {\n this.mouse.classList.remove(\"touch-active\");\n }\n this.touchActive = null;\n if (this.lastMouseDownEvent) {\n const [target, event] = this.lastMouseDownEvent;\n target.dispatchEvent(event);\n }\n this.lastMouseDownEvent = null;\n if (this.lastSelectionData) {\n this.applySelection(this.lastSelectionData);\n this.lastSelectionData = null;\n }\n });\n this.emitter.on(ReplayerEvents.PlayBack, () => {\n this.firstFullSnapshot = null;\n this.mirror.reset();\n this.styleMirror.reset();\n this.mediaManager.reset();\n });\n const timer = new Timer([], {\n speed: this.config.speed\n });\n this.service = createPlayerService(\n {\n events: events.map((e2) => {\n if (config && config.unpackFn) {\n return config.unpackFn(e2);\n }\n return e2;\n }).sort((a1, a2) => a1.timestamp - a2.timestamp),\n timer,\n timeOffset: 0,\n baselineTime: 0,\n lastPlayedEvent: null\n },\n {\n getCastFn: this.getCastFn,\n applyEventsSynchronously: this.applyEventsSynchronously,\n emitter: this.emitter\n }\n );\n this.service.start();\n this.service.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n player: state\n });\n });\n this.speedService = createSpeedService({\n normalSpeed: -1,\n timer\n });\n this.speedService.start();\n this.speedService.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n speed: state\n });\n });\n this.mediaManager = new MediaManager({\n warn: this.warn.bind(this),\n service: this.service,\n speedService: this.speedService,\n emitter: this.emitter,\n getCurrentTime: this.getCurrentTime.bind(this)\n });\n const firstMeta = this.service.state.context.events.find(\n (e2) => e2.type === EventType.Meta\n );\n const firstFullsnapshot = this.service.state.context.events.find(\n (e2) => e2.type === EventType.FullSnapshot\n );\n if (firstMeta) {\n const { width, height } = firstMeta.data;\n setTimeout(() => {\n this.emitter.emit(ReplayerEvents.Resize, {\n width,\n height\n });\n }, 0);\n }\n if (firstFullsnapshot) {\n setTimeout(() => {\n var _a2;\n if (this.firstFullSnapshot) {\n return;\n }\n this.firstFullSnapshot = firstFullsnapshot;\n this.rebuildFullSnapshot(\n firstFullsnapshot\n );\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo(\n firstFullsnapshot.data.initialOffset\n );\n }, 1);\n }\n if (this.service.state.context.events.find(indicatesTouchDevice)) {\n this.mouse.classList.add(\"touch-device\");\n }\n }\n get timer() {\n return this.service.state.context.timer;\n }\n on(event, handler) {\n this.emitter.on(event, handler);\n return this;\n }\n off(event, handler) {\n this.emitter.off(event, handler);\n return this;\n }\n setConfig(config) {\n Object.keys(config).forEach((key) => {\n config[key];\n this.config[key] = config[key];\n });\n if (!this.config.skipInactive) {\n this.backToNormal();\n }\n if (typeof config.speed !== \"undefined\") {\n this.speedService.send({\n type: \"SET_SPEED\",\n payload: {\n speed: config.speed\n }\n });\n }\n if (typeof config.mouseTail !== \"undefined\") {\n if (config.mouseTail === false) {\n if (this.mouseTail) {\n this.mouseTail.style.display = \"none\";\n }\n } else {\n if (!this.mouseTail) {\n this.mouseTail = document.createElement(\"canvas\");\n this.mouseTail.width = Number.parseFloat(this.iframe.width);\n this.mouseTail.height = Number.parseFloat(this.iframe.height);\n this.mouseTail.classList.add(\"replayer-mouse-tail\");\n this.wrapper.insertBefore(this.mouseTail, this.iframe);\n }\n this.mouseTail.style.display = \"inherit\";\n }\n }\n }\n getMetaData() {\n const firstEvent = this.service.state.context.events[0];\n const lastEvent = this.service.state.context.events[this.service.state.context.events.length - 1];\n return {\n startTime: firstEvent.timestamp,\n endTime: lastEvent.timestamp,\n totalTime: lastEvent.timestamp - firstEvent.timestamp\n };\n }\n /**\n * Get the actual time offset the player is at now compared to the first event.\n */\n getCurrentTime() {\n return this.timer.timeOffset + this.getTimeOffset();\n }\n /**\n * Get the time offset the player is at now compared to the first event, but without regard for the timer.\n */\n getTimeOffset() {\n const { baselineTime, events } = this.service.state.context;\n return baselineTime - events[0].timestamp;\n }\n getMirror() {\n return this.mirror;\n }\n /**\n * This API was designed to be used as play at any time offset.\n * Since we minimized the data collected from recorder, we do not\n * have the ability of undo an event.\n * So the implementation of play at any time offset will always iterate\n * all of the events, cast event before the offset synchronously\n * and cast event after the offset asynchronously with timer.\n * @param timeOffset - number\n */\n play(timeOffset = 0) {\n var _a2, _b;\n if (this.service.state.matches(\"paused\")) {\n this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n } else {\n this.service.send({ type: \"PAUSE\" });\n this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n }\n (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.classList.remove(\"rrweb-paused\");\n this.emitter.emit(ReplayerEvents.Start);\n }\n pause(timeOffset) {\n var _a2, _b;\n if (timeOffset === void 0 && this.service.state.matches(\"playing\")) {\n this.service.send({ type: \"PAUSE\" });\n }\n if (typeof timeOffset === \"number\") {\n this.play(timeOffset);\n this.service.send({ type: \"PAUSE\" });\n }\n (_b = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.getElementsByTagName(\"html\")[0]) == null ? void 0 : _b.classList.add(\"rrweb-paused\");\n this.emitter.emit(ReplayerEvents.Pause);\n }\n resume(timeOffset = 0) {\n this.warn(\n `The 'resume' was deprecated in 1.0. Please use 'play' method which has the same interface.`\n );\n this.play(timeOffset);\n this.emitter.emit(ReplayerEvents.Resume);\n }\n /**\n * Totally destroy this replayer and please be careful that this operation is irreversible.\n * Memory occupation can be released by removing all references to this replayer.\n */\n destroy() {\n this.pause();\n this.mirror.reset();\n this.styleMirror.reset();\n this.mediaManager.reset();\n this.config.root.removeChild(this.wrapper);\n this.emitter.emit(ReplayerEvents.Destroy);\n }\n startLive(baselineTime) {\n this.service.send({ type: \"TO_LIVE\", payload: { baselineTime } });\n }\n addEvent(rawEvent) {\n const event = this.config.unpackFn ? this.config.unpackFn(rawEvent) : rawEvent;\n if (indicatesTouchDevice(event)) {\n this.mouse.classList.add(\"touch-device\");\n }\n void Promise.resolve().then(\n () => this.service.send({ type: \"ADD_EVENT\", payload: { event } })\n );\n }\n enableInteract() {\n this.iframe.setAttribute(\"scrolling\", \"auto\");\n this.iframe.style.pointerEvents = \"auto\";\n }\n disableInteract() {\n this.iframe.setAttribute(\"scrolling\", \"no\");\n this.iframe.style.pointerEvents = \"none\";\n }\n /**\n * Empties the replayer's cache and reclaims memory.\n * The replayer will use this cache to speed up the playback.\n */\n resetCache() {\n this.cache = createCache();\n }\n setupDom() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.classList.add(\"replayer-wrapper\");\n this.config.root.appendChild(this.wrapper);\n this.mouse = document.createElement(\"div\");\n this.mouse.classList.add(\"replayer-mouse\");\n this.wrapper.appendChild(this.mouse);\n if (this.config.mouseTail !== false) {\n this.mouseTail = document.createElement(\"canvas\");\n this.mouseTail.classList.add(\"replayer-mouse-tail\");\n this.mouseTail.style.display = \"inherit\";\n this.wrapper.appendChild(this.mouseTail);\n }\n this.iframe = document.createElement(\"iframe\");\n const attributes2 = [\"allow-same-origin\"];\n if (this.config.UNSAFE_replayCanvas) {\n attributes2.push(\"allow-scripts\");\n }\n this.iframe.style.display = \"none\";\n this.iframe.setAttribute(\"sandbox\", attributes2.join(\" \"));\n this.disableInteract();\n this.wrapper.appendChild(this.iframe);\n if (this.iframe.contentWindow && this.iframe.contentDocument) {\n polyfill(\n this.iframe.contentWindow,\n this.iframe.contentDocument\n );\n polyfill$1(this.iframe.contentWindow);\n }\n }\n rebuildFullSnapshot(event, isSync = false) {\n if (!this.iframe.contentDocument) {\n return this.warn(\"Looks like your replayer has been destroyed.\");\n }\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n this.warn(\n \"Found unresolved missing node map\",\n this.legacy_missingNodeRetryMap\n );\n }\n this.legacy_missingNodeRetryMap = {};\n const collected = [];\n const afterAppend = (builtNode, id) => {\n this.collectIframeAndAttachDocument(collected, builtNode);\n if (this.mediaManager.isSupportedMediaElement(builtNode)) {\n const { events } = this.service.state.context;\n this.mediaManager.addMediaElements(\n builtNode,\n event.timestamp - events[0].timestamp,\n this.mirror\n );\n }\n for (const plugin of this.config.plugins || []) {\n if (plugin.onBuild)\n plugin.onBuild(builtNode, {\n id,\n replayer: this\n });\n }\n };\n if (this.usingVirtualDom) {\n this.virtualDom.destroyTree();\n this.usingVirtualDom = false;\n }\n this.mirror.reset();\n rebuild(event.data.node, {\n doc: this.iframe.contentDocument,\n afterAppend,\n cache: this.cache,\n mirror: this.mirror\n });\n afterAppend(this.iframe.contentDocument, event.data.node.id);\n for (const { mutationInQueue, builtNode } of collected) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n const { documentElement, head } = this.iframe.contentDocument;\n this.insertStyleRules(documentElement, head);\n if (!this.service.state.matches(\"playing\")) {\n this.iframe.contentDocument.getElementsByTagName(\"html\")[0].classList.add(\"rrweb-paused\");\n }\n this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);\n if (!isSync) {\n this.waitForStylesheetLoad();\n }\n if (this.config.UNSAFE_replayCanvas) {\n void this.preloadAllImages();\n }\n }\n insertStyleRules(documentElement, head) {\n var _a2;\n const injectStylesRules = rules(\n this.config.blockClass\n ).concat(this.config.insertStyleRules);\n if (this.config.pauseAnimation) {\n injectStylesRules.push(\n \"html.rrweb-paused *, html.rrweb-paused *:before, html.rrweb-paused *:after { animation-play-state: paused !important; }\"\n );\n }\n if (this.usingVirtualDom) {\n const styleEl = this.virtualDom.createElement(\"style\");\n this.virtualDom.mirror.add(\n styleEl,\n getDefaultSN(styleEl, this.virtualDom.unserializedId)\n );\n documentElement.insertBefore(styleEl, head);\n styleEl.rules.push({\n source: IncrementalSource.StyleSheetRule,\n adds: injectStylesRules.map((cssText, index) => ({\n rule: cssText,\n index\n }))\n });\n } else {\n const styleEl = document.createElement(\"style\");\n documentElement.insertBefore(\n styleEl,\n head\n );\n for (let idx = 0; idx < injectStylesRules.length; idx++) {\n (_a2 = styleEl.sheet) == null ? void 0 : _a2.insertRule(injectStylesRules[idx], idx);\n }\n }\n }\n attachDocumentToIframe(mutation, iframeEl) {\n const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n const collected = [];\n const afterAppend = (builtNode, id) => {\n this.collectIframeAndAttachDocument(collected, builtNode);\n const sn = mirror2.getMeta(builtNode);\n if ((sn == null ? void 0 : sn.type) === NodeType$2.Element && (sn == null ? void 0 : sn.tagName.toUpperCase()) === \"HTML\") {\n const { documentElement, head } = iframeEl.contentDocument;\n this.insertStyleRules(\n documentElement,\n head\n );\n }\n if (this.usingVirtualDom)\n return;\n for (const plugin of this.config.plugins || []) {\n if (plugin.onBuild)\n plugin.onBuild(builtNode, {\n id,\n replayer: this\n });\n }\n };\n buildNodeWithSN(mutation.node, {\n doc: iframeEl.contentDocument,\n mirror: mirror2,\n hackCss: true,\n skipChild: false,\n afterAppend,\n cache: this.cache\n });\n afterAppend(iframeEl.contentDocument, mutation.node.id);\n for (const { mutationInQueue, builtNode } of collected) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n }\n collectIframeAndAttachDocument(collected, builtNode) {\n if (isSerializedIframe(builtNode, this.mirror)) {\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === this.mirror.getId(builtNode)\n );\n if (mutationInQueue) {\n collected.push({\n mutationInQueue,\n builtNode\n });\n }\n }\n }\n /**\n * pause when loading style sheet, resume when loaded all timeout exceed\n */\n waitForStylesheetLoad() {\n var _a2;\n const head = (_a2 = this.iframe.contentDocument) == null ? void 0 : _a2.head;\n if (head) {\n const unloadSheets = /* @__PURE__ */ new Set();\n let timer;\n let beforeLoadState = this.service.state;\n const stateHandler = () => {\n beforeLoadState = this.service.state;\n };\n this.emitter.on(ReplayerEvents.Start, stateHandler);\n this.emitter.on(ReplayerEvents.Pause, stateHandler);\n const unsubscribe = () => {\n this.emitter.off(ReplayerEvents.Start, stateHandler);\n this.emitter.off(ReplayerEvents.Pause, stateHandler);\n };\n head.querySelectorAll('link[rel=\"stylesheet\"]').forEach((css) => {\n if (!css.sheet) {\n unloadSheets.add(css);\n css.addEventListener(\"load\", () => {\n unloadSheets.delete(css);\n if (unloadSheets.size === 0 && timer !== -1) {\n if (beforeLoadState.matches(\"playing\")) {\n this.play(this.getCurrentTime());\n }\n this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\n if (timer) {\n clearTimeout(timer);\n }\n unsubscribe();\n }\n });\n }\n });\n if (unloadSheets.size > 0) {\n this.service.send({ type: \"PAUSE\" });\n this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\n timer = setTimeout(() => {\n if (beforeLoadState.matches(\"playing\")) {\n this.play(this.getCurrentTime());\n }\n timer = -1;\n unsubscribe();\n }, this.config.loadTimeout);\n }\n }\n }\n /**\n * pause when there are some canvas drawImage args need to be loaded\n */\n async preloadAllImages() {\n const promises = [];\n for (const event of this.service.state.context.events) {\n if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.CanvasMutation) {\n promises.push(\n this.deserializeAndPreloadCanvasEvents(event.data, event)\n );\n const commands = \"commands\" in event.data ? event.data.commands : [event.data];\n commands.forEach((c2) => {\n this.preloadImages(c2, event);\n });\n }\n }\n return Promise.all(promises);\n }\n preloadImages(data, event) {\n if (data.property === \"drawImage\" && typeof data.args[0] === \"string\" && !this.imageMap.has(event)) {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n const imgd = ctx == null ? void 0 : ctx.createImageData(canvas.width, canvas.height);\n ctx == null ? void 0 : ctx.putImageData(imgd, 0, 0);\n }\n }\n async deserializeAndPreloadCanvasEvents(data, event) {\n if (!this.canvasEventMap.has(event)) {\n const status = {\n isUnchanged: true\n };\n if (\"commands\" in data) {\n const commands = await Promise.all(\n data.commands.map(async (c2) => {\n const args = await Promise.all(\n c2.args.map(deserializeArg(this.imageMap, null, status))\n );\n return { ...c2, args };\n })\n );\n if (status.isUnchanged === false)\n this.canvasEventMap.set(event, { ...data, commands });\n } else {\n const args = await Promise.all(\n data.args.map(deserializeArg(this.imageMap, null, status))\n );\n if (status.isUnchanged === false)\n this.canvasEventMap.set(event, { ...data, args });\n }\n }\n }\n applyIncremental(e2, isSync) {\n var _a2, _b, _c;\n const { data: d } = e2;\n switch (d.source) {\n case IncrementalSource.Mutation: {\n try {\n this.applyMutation(d, isSync);\n } catch (error) {\n this.warn(`Exception in mutation ${error.message || error}`, d);\n }\n break;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n if (isSync) {\n const lastPosition = d.positions[d.positions.length - 1];\n this.mousePos = {\n x: lastPosition.x,\n y: lastPosition.y,\n id: lastPosition.id,\n debugData: d\n };\n } else {\n d.positions.forEach((p) => {\n const action = {\n doAction: () => {\n this.moveAndHover(p.x, p.y, p.id, isSync, d);\n },\n delay: p.timeOffset + e2.timestamp - this.service.state.context.baselineTime\n };\n this.timer.addAction(action);\n });\n this.timer.addAction({\n doAction() {\n },\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n delay: e2.delay - ((_a2 = d.positions[0]) == null ? void 0 : _a2.timeOffset)\n });\n }\n break;\n case IncrementalSource.MouseInteraction: {\n if (d.id === -1) {\n break;\n }\n const event = new Event(toLowerCase(MouseInteractions[d.type]));\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n this.emitter.emit(ReplayerEvents.MouseInteraction, {\n type: d.type,\n target\n });\n const { triggerFocus } = this.config;\n switch (d.type) {\n case MouseInteractions.Blur:\n if (\"blur\" in target) {\n target.blur();\n }\n break;\n case MouseInteractions.Focus:\n if (triggerFocus && target.focus) {\n target.focus({\n preventScroll: true\n });\n }\n break;\n case MouseInteractions.Click:\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n if (isSync) {\n if (d.type === MouseInteractions.TouchStart) {\n this.touchActive = true;\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.touchActive = false;\n }\n if (d.type === MouseInteractions.MouseDown) {\n this.lastMouseDownEvent = [target, event];\n } else if (d.type === MouseInteractions.MouseUp) {\n this.lastMouseDownEvent = null;\n }\n this.mousePos = {\n x: d.x || 0,\n y: d.y || 0,\n id: d.id,\n debugData: d\n };\n } else {\n if (d.type === MouseInteractions.TouchStart) {\n this.tailPositions.length = 0;\n }\n this.moveAndHover(d.x || 0, d.y || 0, d.id, isSync, d);\n if (d.type === MouseInteractions.Click) {\n this.mouse.classList.remove(\"active\");\n void this.mouse.offsetWidth;\n this.mouse.classList.add(\"active\");\n } else if (d.type === MouseInteractions.TouchStart) {\n void this.mouse.offsetWidth;\n this.mouse.classList.add(\"touch-active\");\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.mouse.classList.remove(\"touch-active\");\n } else {\n target.dispatchEvent(event);\n }\n }\n break;\n case MouseInteractions.TouchCancel:\n if (isSync) {\n this.touchActive = false;\n } else {\n this.mouse.classList.remove(\"touch-active\");\n }\n break;\n default:\n target.dispatchEvent(event);\n }\n break;\n }\n case IncrementalSource.Scroll: {\n if (d.id === -1) {\n break;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.scrollData = d;\n break;\n }\n this.applyScroll(d, isSync);\n break;\n }\n case IncrementalSource.ViewportResize:\n this.emitter.emit(ReplayerEvents.Resize, {\n width: d.width,\n height: d.height\n });\n break;\n case IncrementalSource.Input: {\n if (d.id === -1) {\n break;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.inputData = d;\n break;\n }\n this.applyInput(d);\n break;\n }\n case IncrementalSource.MediaInteraction: {\n const target = this.usingVirtualDom ? this.virtualDom.mirror.getNode(d.id) : this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n const mediaEl = target;\n const { events } = this.service.state.context;\n this.mediaManager.mediaMutation({\n target: mediaEl,\n timeOffset: e2.timestamp - events[0].timestamp,\n mutation: d\n });\n break;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n if (this.usingVirtualDom) {\n if (d.styleId)\n this.constructedStyleMutations.push(d);\n else if (d.id)\n (_b = this.virtualDom.mirror.getNode(d.id)) == null ? void 0 : _b.rules.push(d);\n } else\n this.applyStyleSheetMutation(d);\n break;\n }\n case IncrementalSource.CanvasMutation: {\n if (!this.config.UNSAFE_replayCanvas) {\n return;\n }\n if (this.usingVirtualDom) {\n const target = this.virtualDom.mirror.getNode(\n d.id\n );\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n target.canvasMutations.push({\n event: e2,\n mutation: d\n });\n } else {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n void canvasMutation({\n event: e2,\n mutation: d,\n target,\n imageMap: this.imageMap,\n canvasEventMap: this.canvasEventMap,\n errorHandler: this.warnCanvasMutationFailed.bind(this)\n });\n }\n break;\n }\n case IncrementalSource.Font: {\n try {\n const fontFace = new FontFace(\n d.family,\n d.buffer ? new Uint8Array(JSON.parse(d.fontSource)) : d.fontSource,\n d.descriptors\n );\n (_c = this.iframe.contentDocument) == null ? void 0 : _c.fonts.add(fontFace);\n } catch (error) {\n this.warn(error);\n }\n break;\n }\n case IncrementalSource.Selection: {\n if (isSync) {\n this.lastSelectionData = d;\n break;\n }\n this.applySelection(d);\n break;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n if (this.usingVirtualDom)\n this.adoptedStyleSheets.push(d);\n else\n this.applyAdoptedStyleSheet(d);\n break;\n }\n }\n }\n /**\n * Apply the mutation to the virtual dom or the real dom.\n * @param d - The mutation data.\n * @param isSync - Whether the mutation should be applied synchronously (while fast-forwarding).\n */\n applyMutation(d, isSync) {\n if (this.config.useVirtualDom && !this.usingVirtualDom && isSync) {\n this.usingVirtualDom = true;\n buildFromDom(this.iframe.contentDocument, this.mirror, this.virtualDom);\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n for (const key in this.legacy_missingNodeRetryMap) {\n try {\n const value = this.legacy_missingNodeRetryMap[key];\n const virtualNode = buildFromNode(\n value.node,\n this.virtualDom,\n this.mirror\n );\n if (virtualNode)\n value.node = virtualNode;\n } catch (error) {\n this.warn(error);\n }\n }\n }\n }\n const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n d.removes = d.removes.filter((mutation) => {\n if (!mirror2.getNode(mutation.id)) {\n this.warnNodeNotFound(d, mutation.id);\n return false;\n }\n return true;\n });\n d.removes.forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n return;\n }\n let parent = mirror2.getNode(\n mutation.parentId\n );\n if (!parent) {\n return this.warnNodeNotFound(d, mutation.parentId);\n }\n if (mutation.isShadow && hasShadowRoot(parent)) {\n parent = parent.shadowRoot;\n }\n mirror2.removeNodeFromMap(target);\n if (parent)\n try {\n parent.removeChild(target);\n if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && ((_a2 = parent.rules) == null ? void 0 : _a2.length) > 0)\n parent.rules = [];\n } catch (error) {\n if (error instanceof DOMException) {\n this.warn(\n \"parent could not remove child in mutation\",\n parent,\n target,\n d\n );\n } else {\n throw error;\n }\n }\n });\n const legacy_missingNodeMap = {\n ...this.legacy_missingNodeRetryMap\n };\n const queue = [];\n const nextNotInDOM = (mutation) => {\n let next = null;\n if (mutation.nextId) {\n next = mirror2.getNode(mutation.nextId);\n }\n if (mutation.nextId !== null && mutation.nextId !== void 0 && mutation.nextId !== -1 && !next) {\n return true;\n }\n return false;\n };\n const appendNode = (mutation) => {\n var _a2, _b;\n if (!this.iframe.contentDocument) {\n return this.warn(\"Looks like your replayer has been destroyed.\");\n }\n let parent = mirror2.getNode(\n mutation.parentId\n );\n if (!parent) {\n if (mutation.node.type === NodeType$2.Document) {\n return this.newDocumentQueue.push(mutation);\n }\n return queue.push(mutation);\n }\n if (mutation.node.isShadow) {\n if (!hasShadowRoot(parent)) {\n parent.attachShadow({ mode: \"open\" });\n parent = parent.shadowRoot;\n } else\n parent = parent.shadowRoot;\n }\n let previous = null;\n let next = null;\n if (mutation.previousId) {\n previous = mirror2.getNode(mutation.previousId);\n }\n if (mutation.nextId) {\n next = mirror2.getNode(mutation.nextId);\n }\n if (nextNotInDOM(mutation)) {\n return queue.push(mutation);\n }\n if (mutation.node.rootId && !mirror2.getNode(mutation.node.rootId)) {\n return;\n }\n const targetDoc = mutation.node.rootId ? mirror2.getNode(mutation.node.rootId) : this.usingVirtualDom ? this.virtualDom : this.iframe.contentDocument;\n if (isSerializedIframe(parent, mirror2)) {\n this.attachDocumentToIframe(\n mutation,\n parent\n );\n return;\n }\n const afterAppend = (node, id) => {\n if (this.usingVirtualDom)\n return;\n for (const plugin of this.config.plugins || []) {\n if (plugin.onBuild)\n plugin.onBuild(node, { id, replayer: this });\n }\n };\n const target = buildNodeWithSN(mutation.node, {\n doc: targetDoc,\n // can be Document or RRDocument\n mirror: mirror2,\n // can be this.mirror or virtualDom.mirror\n skipChild: true,\n hackCss: true,\n cache: this.cache,\n /**\n * caveat: `afterAppend` only gets called on child nodes of target\n * we have to call it again below when this target was added to the DOM\n */\n afterAppend\n });\n if (mutation.previousId === -1 || mutation.nextId === -1) {\n legacy_missingNodeMap[mutation.node.id] = {\n node: target,\n mutation\n };\n return;\n }\n const parentSn = mirror2.getMeta(parent);\n if (parentSn && parentSn.type === NodeType$2.Element && parentSn.tagName === \"textarea\" && mutation.node.type === NodeType$2.Text) {\n const childNodeArray = Array.isArray(parent.childNodes) ? parent.childNodes : Array.from(parent.childNodes);\n for (const c2 of childNodeArray) {\n if (c2.nodeType === parent.TEXT_NODE) {\n parent.removeChild(c2);\n }\n }\n } else if ((parentSn == null ? void 0 : parentSn.type) === NodeType$2.Document) {\n const parentDoc = parent;\n if (mutation.node.type === NodeType$2.DocumentType && ((_a2 = parentDoc.childNodes[0]) == null ? void 0 : _a2.nodeType) === Node.DOCUMENT_TYPE_NODE)\n parentDoc.removeChild(parentDoc.childNodes[0]);\n if (target.nodeName === \"HTML\" && parentDoc.documentElement)\n parentDoc.removeChild(\n parentDoc.documentElement\n );\n }\n if (previous && previous.nextSibling && previous.nextSibling.parentNode) {\n parent.insertBefore(\n target,\n previous.nextSibling\n );\n } else if (next && next.parentNode) {\n parent.contains(next) ? parent.insertBefore(target, next) : parent.insertBefore(target, null);\n } else {\n parent.appendChild(target);\n }\n afterAppend(target, mutation.node.id);\n if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && ((_b = parent.rules) == null ? void 0 : _b.length) > 0)\n parent.rules = [];\n if (isSerializedIframe(target, this.mirror)) {\n const targetId = this.mirror.getId(target);\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === targetId\n );\n if (mutationInQueue) {\n this.attachDocumentToIframe(\n mutationInQueue,\n target\n );\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue\n );\n }\n }\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(\n legacy_missingNodeMap,\n parent,\n target,\n mutation\n );\n }\n };\n d.adds.forEach((mutation) => {\n appendNode(mutation);\n });\n const startTime = Date.now();\n while (queue.length) {\n const resolveTrees = queueToResolveTrees(queue);\n queue.length = 0;\n if (Date.now() - startTime > 500) {\n this.warn(\n \"Timeout in the loop, please check the resolve tree data:\",\n resolveTrees\n );\n break;\n }\n for (const tree of resolveTrees) {\n const parent = mirror2.getNode(tree.value.parentId);\n if (!parent) {\n this.debug(\n \"Drop resolve tree since there is no parent for the root node.\",\n tree\n );\n } else {\n iterateResolveTree(tree, (mutation) => {\n appendNode(mutation);\n });\n }\n }\n }\n if (Object.keys(legacy_missingNodeMap).length) {\n Object.assign(this.legacy_missingNodeRetryMap, legacy_missingNodeMap);\n }\n uniqueTextMutations(d.texts).forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r2) => r2.id === mutation.id)) {\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n target.textContent = mutation.value;\n if (this.usingVirtualDom) {\n const parent = target.parentNode;\n if (((_a2 = parent == null ? void 0 : parent.rules) == null ? void 0 : _a2.length) > 0)\n parent.rules = [];\n }\n });\n d.attributes.forEach((mutation) => {\n var _a2;\n const target = mirror2.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r2) => r2.id === mutation.id)) {\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n for (const attributeName in mutation.attributes) {\n if (typeof attributeName === \"string\") {\n const value = mutation.attributes[attributeName];\n if (value === null) {\n target.removeAttribute(attributeName);\n } else if (typeof value === \"string\") {\n try {\n if (attributeName === \"_cssText\" && (target.nodeName === \"LINK\" || target.nodeName === \"STYLE\")) {\n try {\n const newSn = mirror2.getMeta(\n target\n );\n Object.assign(\n newSn.attributes,\n mutation.attributes\n );\n const newNode = buildNodeWithSN(newSn, {\n doc: target.ownerDocument,\n // can be Document or RRDocument\n mirror: mirror2,\n skipChild: true,\n hackCss: true,\n cache: this.cache\n });\n const siblingNode = target.nextSibling;\n const parentNode = target.parentNode;\n if (newNode && parentNode) {\n parentNode.removeChild(target);\n parentNode.insertBefore(\n newNode,\n siblingNode\n );\n mirror2.replace(mutation.id, newNode);\n break;\n }\n } catch (e2) {\n }\n }\n if (attributeName === \"value\" && target.nodeName === \"TEXTAREA\") {\n const textarea = target;\n textarea.childNodes.forEach(\n (c2) => textarea.removeChild(c2)\n );\n const tn = (_a2 = target.ownerDocument) == null ? void 0 : _a2.createTextNode(value);\n if (tn) {\n textarea.appendChild(tn);\n }\n } else {\n target.setAttribute(\n attributeName,\n value\n );\n }\n } catch (error) {\n this.warn(\n \"An error occurred may due to the checkout feature.\",\n error\n );\n }\n } else if (attributeName === \"style\") {\n const styleValues = value;\n const targetEl = target;\n for (const s2 in styleValues) {\n if (styleValues[s2] === false) {\n targetEl.style.removeProperty(s2);\n } else if (styleValues[s2] instanceof Array) {\n const svp = styleValues[s2];\n targetEl.style.setProperty(s2, svp[0], svp[1]);\n } else {\n const svs = styleValues[s2];\n targetEl.style.setProperty(s2, svs);\n }\n }\n }\n }\n }\n });\n }\n /**\n * Apply the scroll data on real elements.\n * If the replayer is in sync mode, smooth scroll behavior should be disabled.\n * @param d - the scroll data\n * @param isSync - whether the replayer is in sync mode(fast-forward)\n */\n applyScroll(d, isSync) {\n var _a2, _b;\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n const sn = this.mirror.getMeta(target);\n if (target === this.iframe.contentDocument) {\n (_a2 = this.iframe.contentWindow) == null ? void 0 : _a2.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } else if ((sn == null ? void 0 : sn.type) === NodeType$2.Document) {\n (_b = target.defaultView) == null ? void 0 : _b.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } else {\n try {\n target.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? \"auto\" : \"smooth\"\n });\n } catch (error) {\n }\n }\n }\n applyInput(d) {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n try {\n target.checked = d.isChecked;\n target.value = d.text;\n } catch (error) {\n }\n }\n applySelection(d) {\n try {\n const selectionSet = /* @__PURE__ */ new Set();\n const ranges = d.ranges.map(({ start, startOffset, end, endOffset }) => {\n const startContainer = this.mirror.getNode(start);\n const endContainer = this.mirror.getNode(end);\n if (!startContainer || !endContainer)\n return;\n const result = new Range();\n result.setStart(startContainer, startOffset);\n result.setEnd(endContainer, endOffset);\n const doc = startContainer.ownerDocument;\n const selection = doc == null ? void 0 : doc.getSelection();\n selection && selectionSet.add(selection);\n return {\n range: result,\n selection\n };\n });\n selectionSet.forEach((s2) => s2.removeAllRanges());\n ranges.forEach((r2) => {\n var _a2;\n return r2 && ((_a2 = r2.selection) == null ? void 0 : _a2.addRange(r2.range));\n });\n } catch (error) {\n }\n }\n applyStyleSheetMutation(data) {\n var _a2;\n let styleSheet = null;\n if (data.styleId)\n styleSheet = this.styleMirror.getStyle(data.styleId);\n else if (data.id)\n styleSheet = ((_a2 = this.mirror.getNode(data.id)) == null ? void 0 : _a2.sheet) || null;\n if (!styleSheet)\n return;\n if (data.source === IncrementalSource.StyleSheetRule)\n this.applyStyleSheetRule(data, styleSheet);\n else if (data.source === IncrementalSource.StyleDeclaration)\n this.applyStyleDeclaration(data, styleSheet);\n }\n applyStyleSheetRule(data, styleSheet) {\n var _a2, _b, _c, _d;\n (_a2 = data.adds) == null ? void 0 : _a2.forEach(({ rule, index: nestedIndex }) => {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index } = getPositionsAndIndex(nestedIndex);\n const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n nestedRule.insertRule(rule, index);\n } else {\n const index = nestedIndex === void 0 ? void 0 : Math.min(nestedIndex, styleSheet.cssRules.length);\n styleSheet == null ? void 0 : styleSheet.insertRule(rule, index);\n }\n } catch (e2) {\n }\n });\n (_b = data.removes) == null ? void 0 : _b.forEach(({ index: nestedIndex }) => {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index } = getPositionsAndIndex(nestedIndex);\n const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n nestedRule.deleteRule(index || 0);\n } else {\n styleSheet == null ? void 0 : styleSheet.deleteRule(nestedIndex);\n }\n } catch (e2) {\n }\n });\n if (data.replace)\n try {\n void ((_c = styleSheet.replace) == null ? void 0 : _c.call(styleSheet, data.replace));\n } catch (e2) {\n }\n if (data.replaceSync)\n try {\n (_d = styleSheet.replaceSync) == null ? void 0 : _d.call(styleSheet, data.replaceSync);\n } catch (e2) {\n }\n }\n applyStyleDeclaration(data, styleSheet) {\n if (data.set) {\n const rule = getNestedRule(\n styleSheet.rules,\n data.index\n );\n rule.style.setProperty(\n data.set.property,\n data.set.value,\n data.set.priority\n );\n }\n if (data.remove) {\n const rule = getNestedRule(\n styleSheet.rules,\n data.index\n );\n rule.style.removeProperty(data.remove.property);\n }\n }\n applyAdoptedStyleSheet(data) {\n var _a2;\n const targetHost = this.mirror.getNode(data.id);\n if (!targetHost)\n return;\n (_a2 = data.styles) == null ? void 0 : _a2.forEach((style) => {\n var _a3;\n let newStyleSheet = null;\n let hostWindow = null;\n if (hasShadowRoot(targetHost))\n hostWindow = ((_a3 = targetHost.ownerDocument) == null ? void 0 : _a3.defaultView) || null;\n else if (targetHost.nodeName === \"#document\")\n hostWindow = targetHost.defaultView;\n if (!hostWindow)\n return;\n try {\n newStyleSheet = new hostWindow.CSSStyleSheet();\n this.styleMirror.add(newStyleSheet, style.styleId);\n this.applyStyleSheetRule(\n {\n source: IncrementalSource.StyleSheetRule,\n adds: style.rules\n },\n newStyleSheet\n );\n } catch (e2) {\n }\n });\n const MAX_RETRY_TIME = 10;\n let count = 0;\n const adoptStyleSheets = (targetHost2, styleIds) => {\n const stylesToAdopt = styleIds.map((styleId) => this.styleMirror.getStyle(styleId)).filter((style) => style !== null);\n if (hasShadowRoot(targetHost2))\n targetHost2.shadowRoot.adoptedStyleSheets = stylesToAdopt;\n else if (targetHost2.nodeName === \"#document\")\n targetHost2.adoptedStyleSheets = stylesToAdopt;\n if (stylesToAdopt.length !== styleIds.length && count < MAX_RETRY_TIME) {\n setTimeout(\n () => adoptStyleSheets(targetHost2, styleIds),\n 0 + 100 * count\n );\n count++;\n }\n };\n adoptStyleSheets(targetHost, data.styleIds);\n }\n legacy_resolveMissingNode(map, parent, target, targetMutation) {\n const { previousId, nextId } = targetMutation;\n const previousInMap = previousId && map[previousId];\n const nextInMap = nextId && map[nextId];\n if (previousInMap) {\n const { node, mutation } = previousInMap;\n parent.insertBefore(node, target);\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node, mutation);\n }\n }\n if (nextInMap) {\n const { node, mutation } = nextInMap;\n parent.insertBefore(\n node,\n target.nextSibling\n );\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node, mutation);\n }\n }\n }\n moveAndHover(x, y, id, isSync, debugData) {\n const target = this.mirror.getNode(id);\n if (!target) {\n return this.debugNodeNotFound(debugData, id);\n }\n const base = getBaseDimension(target, this.iframe);\n const _x = x * base.absoluteScale + base.x;\n const _y = y * base.absoluteScale + base.y;\n this.mouse.style.left = `${_x}px`;\n this.mouse.style.top = `${_y}px`;\n if (!isSync) {\n this.drawMouseTail({ x: _x, y: _y });\n }\n this.hoverElements(target);\n }\n drawMouseTail(position) {\n if (!this.mouseTail) {\n return;\n }\n const { lineCap, lineWidth, strokeStyle, duration } = this.config.mouseTail === true ? defaultMouseTailConfig : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail);\n const draw = () => {\n if (!this.mouseTail) {\n return;\n }\n const ctx = this.mouseTail.getContext(\"2d\");\n if (!ctx || !this.tailPositions.length) {\n return;\n }\n ctx.clearRect(0, 0, this.mouseTail.width, this.mouseTail.height);\n ctx.beginPath();\n ctx.lineWidth = lineWidth;\n ctx.lineCap = lineCap;\n ctx.strokeStyle = strokeStyle;\n ctx.moveTo(this.tailPositions[0].x, this.tailPositions[0].y);\n this.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\n ctx.stroke();\n };\n this.tailPositions.push(position);\n draw();\n setTimeout(() => {\n this.tailPositions = this.tailPositions.filter((p) => p !== position);\n draw();\n }, duration / this.speedService.state.context.timer.speed);\n }\n hoverElements(el) {\n var _a2;\n (_a2 = this.lastHoveredRootNode || this.iframe.contentDocument) == null ? void 0 : _a2.querySelectorAll(\".\\\\:hover\").forEach((hoveredEl) => {\n hoveredEl.classList.remove(\":hover\");\n });\n this.lastHoveredRootNode = el.getRootNode();\n let currentEl = el;\n while (currentEl) {\n if (currentEl.classList) {\n currentEl.classList.add(\":hover\");\n }\n currentEl = currentEl.parentElement;\n }\n }\n isUserInteraction(event) {\n if (event.type !== EventType.IncrementalSnapshot) {\n return false;\n }\n return event.data.source > IncrementalSource.Mutation && event.data.source <= IncrementalSource.Input;\n }\n backToNormal() {\n this.nextUserInteractionEvent = null;\n if (this.speedService.state.matches(\"normal\")) {\n return;\n }\n this.speedService.send({ type: \"BACK_TO_NORMAL\" });\n this.emitter.emit(ReplayerEvents.SkipEnd, {\n speed: this.speedService.state.context.normalSpeed\n });\n }\n warnNodeNotFound(d, id) {\n this.warn(`Node with id '${id}' not found. `, d);\n }\n warnCanvasMutationFailed(d, error) {\n this.warn(`Has error on canvas update`, error, \"canvas mutation:\", d);\n }\n debugNodeNotFound(d, id) {\n this.debug(`Node with id '${id}' not found. `, d);\n }\n warn(...args) {\n if (!this.config.showWarning) {\n return;\n }\n this.config.logger.warn(REPLAY_CONSOLE_PREFIX, ...args);\n }\n debug(...args) {\n if (!this.config.showDebug) {\n return;\n }\n this.config.logger.log(REPLAY_CONSOLE_PREFIX, ...args);\n }\n}\nconst { addCustomEvent } = record;\nconst { freezePage } = record;\nexport {\n EventType,\n IncrementalSource,\n MouseInteractions,\n Replayer,\n ReplayerEvents,\n addCustomEvent,\n canvasMutation,\n freezePage,\n _mirror as mirror,\n record,\n utils\n};\n//# sourceMappingURL=rrweb.js.map\n","(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","import { Replayer } from \"rrweb\";\nimport type { eventWithTime } from \"@rrweb/types\";\n\ndeclare type Cache = {\n rootEl?: HTMLElement;\n events: eventWithTime[];\n lastPlayedEvent: eventWithTime | null;\n replayer?: Replayer;\n streaming?: boolean;\n};\n\nlet rrwebCache: Cache = {\n events: [],\n lastPlayedEvent: null,\n};\n\nexport const setRrwebCache = (newCache: Cache): void => {\n rrwebCache = { ...newCache };\n};\n\nexport const updateRrwebCache = (newCache: Partial): void => {\n rrwebCache = { ...rrwebCache, ...newCache };\n};\n\nexport const getRrwebCache = (): Cache => rrwebCache;\n","import { Replayer } from \"rrweb\";\nimport type { eventWithTime } from \"@rrweb/types\";\nimport { getRrwebCache } from \"./rrweb-cache\";\n\nexport async function waitTillReplayerAtTimeOffset({\n // rename to ±waitUntilReplayerAtTimestamp() at some point\n timeOffset,\n replayer,\n}: {\n timeOffset: number;\n replayer: Replayer;\n}): Promise {\n return new Promise((resolve) => {\n const loop = (): unknown => {\n let currentPlayerTime: number | undefined;\n try {\n currentPlayerTime = replayer.getCurrentTime();\n } catch (error) {\n // didn't have any events yet\n }\n\n if (!currentPlayerTime) return requestAnimationFrame(loop);\n if (currentPlayerTime >= timeOffset) return resolve(undefined);\n\n return requestAnimationFrame(loop);\n };\n loop();\n });\n}\n\nconst eventIsEqual = (eventA: eventWithTime, eventB: eventWithTime): boolean =>\n Boolean(\n eventA.timestamp === eventB.timestamp &&\n JSON.stringify({ ...eventA, delay: 0 }) === JSON.stringify({ ...eventB, delay: 0 }),\n );\n\nexport const waitTillReplayerAtOrPastEvent = async (targetEvent: eventWithTime): Promise => {\n const { replayer, lastPlayedEvent } = getRrwebCache();\n if (lastPlayedEvent && lastPlayedEvent.timestamp > targetEvent.timestamp) return undefined;\n if (lastPlayedEvent && eventIsEqual(lastPlayedEvent, targetEvent)) return undefined;\n if (!replayer) throw new Error(\"Replayer not initialized yet\");\n return new Promise((resolve) => {\n const loop = (): unknown => {\n const currentLastPlayedEvent = getRrwebCache().lastPlayedEvent;\n if (currentLastPlayedEvent && eventIsEqual(currentLastPlayedEvent, targetEvent))\n return resolve(undefined);\n\n return requestAnimationFrame(loop);\n };\n loop();\n });\n};\n\nexport const waitTillReplayerUpdated = async (events: eventWithTime[]): Promise => {\n const lastAddedEvent = events[events.length - 1];\n if (!lastAddedEvent) return undefined;\n\n return waitTillReplayerAtOrPastEvent(lastAddedEvent);\n};\n","/*\r\nBreaks a Javascript string into individual user-perceived \"characters\" \r\ncalled extended grapheme clusters by implementing the Unicode UAX-29 standard, version 10.0.0\r\n\r\nUsage:\r\nvar splitter = new GraphemeSplitter();\r\n//returns an array of strings, one string for each grapheme cluster\r\nvar graphemes = splitter.splitGraphemes(string); \r\n\r\n*/\r\nfunction GraphemeSplitter(){\r\n\tvar CR = 0,\r\n\t\tLF = 1,\r\n\t\tControl = 2,\r\n\t\tExtend = 3,\r\n\t\tRegional_Indicator = 4,\r\n\t\tSpacingMark = 5,\r\n\t\tL = 6,\r\n\t\tV = 7,\r\n\t\tT = 8,\r\n\t\tLV = 9,\r\n\t\tLVT = 10,\r\n\t\tOther = 11,\r\n\t\tPrepend = 12,\r\n\t\tE_Base = 13,\r\n\t\tE_Modifier = 14,\r\n\t\tZWJ = 15,\r\n\t\tGlue_After_Zwj = 16,\r\n\t\tE_Base_GAZ = 17;\r\n\t\t\r\n\t// BreakTypes\r\n\tvar NotBreak = 0,\r\n\t\tBreakStart = 1,\r\n\t\tBreak = 2,\r\n\t\tBreakLastRegional = 3,\r\n\t\tBreakPenultimateRegional = 4;\r\n\t\t\r\n\tfunction isSurrogate(str, pos) {\r\n\t\treturn 0xd800 <= str.charCodeAt(pos) && str.charCodeAt(pos) <= 0xdbff && \r\n\t\t\t\t0xdc00 <= str.charCodeAt(pos + 1) && str.charCodeAt(pos + 1) <= 0xdfff;\r\n\t}\r\n\t\t\r\n\t// Private function, gets a Unicode code point from a JavaScript UTF-16 string\r\n\t// handling surrogate pairs appropriately\r\n\tfunction codePointAt(str, idx){\r\n\t\tif(idx === undefined){\r\n\t\t\tidx = 0;\r\n\t\t}\r\n\t\tvar code = str.charCodeAt(idx);\r\n\r\n\t\t// if a high surrogate\r\n\t\tif (0xD800 <= code && code <= 0xDBFF && \r\n\t\t\tidx < str.length - 1){\r\n\t\t\tvar hi = code;\r\n\t\t\tvar low = str.charCodeAt(idx + 1);\r\n\t\t\tif (0xDC00 <= low && low <= 0xDFFF){\r\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\r\n\t\t\t}\r\n\t\t\treturn hi;\r\n\t\t}\r\n\t\t\r\n\t\t// if a low surrogate\r\n\t\tif (0xDC00 <= code && code <= 0xDFFF &&\r\n\t\t\tidx >= 1){\r\n\t\t\tvar hi = str.charCodeAt(idx - 1);\r\n\t\t\tvar low = code;\r\n\t\t\tif (0xD800 <= hi && hi <= 0xDBFF){\r\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\r\n\t\t\t}\r\n\t\t\treturn low;\r\n\t\t}\r\n\t\t\r\n\t\t//just return the char if an unmatched surrogate half or a \r\n\t\t//single-char codepoint\r\n\t\treturn code;\r\n\t}\r\n\t\r\n\t// Private function, returns whether a break is allowed between the \r\n\t// two given grapheme breaking classes\r\n\tfunction shouldBreak(start, mid, end){\r\n\t\tvar all = [start].concat(mid).concat([end]);\r\n\t\tvar previous = all[all.length - 2]\r\n\t\tvar next = end\r\n\t\t\r\n\t\t// Lookahead termintor for:\r\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\r\n\t\tvar eModifierIndex = all.lastIndexOf(E_Modifier)\r\n\t\tif(eModifierIndex > 1 &&\r\n\t\t\tall.slice(1, eModifierIndex).every(function(c){return c == Extend}) &&\r\n\t\t\t[Extend, E_Base, E_Base_GAZ].indexOf(start) == -1){\r\n\t\t\treturn Break\r\n\t\t}\r\n\r\n\t\t// Lookahead termintor for:\r\n\t\t// GB12. ^ (RI RI)* RI\t?\tRI\r\n\t\t// GB13. [^RI] (RI RI)* RI\t?\tRI\r\n\t\tvar rIIndex = all.lastIndexOf(Regional_Indicator)\r\n\t\tif(rIIndex > 0 &&\r\n\t\t\tall.slice(1, rIIndex).every(function(c){return c == Regional_Indicator}) &&\r\n\t\t\t[Prepend, Regional_Indicator].indexOf(previous) == -1) { \r\n\t\t\tif(all.filter(function(c){return c == Regional_Indicator}).length % 2 == 1) {\r\n\t\t\t\treturn BreakLastRegional\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn BreakPenultimateRegional\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// GB3. CR X LF\r\n\t\tif(previous == CR && next == LF){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB4. (Control|CR|LF) ÷\r\n\t\telse if(previous == Control || previous == CR || previous == LF){\r\n\t\t\tif(next == E_Modifier && mid.every(function(c){return c == Extend})){\r\n\t\t\t\treturn Break\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn BreakStart\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GB5. ÷ (Control|CR|LF)\r\n\t\telse if(next == Control || next == CR || next == LF){\r\n\t\t\treturn BreakStart;\r\n\t\t}\r\n\t\t// GB6. L X (L|V|LV|LVT)\r\n\t\telse if(previous == L && \r\n\t\t\t(next == L || next == V || next == LV || next == LVT)){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB7. (LV|V) X (V|T)\r\n\t\telse if((previous == LV || previous == V) && \r\n\t\t\t(next == V || next == T)){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB8. (LVT|T) X (T)\r\n\t\telse if((previous == LVT || previous == T) && \r\n\t\t\tnext == T){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9. X (Extend|ZWJ)\r\n\t\telse if (next == Extend || next == ZWJ){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9a. X SpacingMark\r\n\t\telse if(next == SpacingMark){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9b. Prepend X\r\n\t\telse if (previous == Prepend){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t\r\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\r\n\t\tvar previousNonExtendIndex = all.indexOf(Extend) != -1 ? all.lastIndexOf(Extend) - 1 : all.length - 2;\r\n\t\tif([E_Base, E_Base_GAZ].indexOf(all[previousNonExtendIndex]) != -1 &&\r\n\t\t\tall.slice(previousNonExtendIndex + 1, -1).every(function(c){return c == Extend}) &&\r\n\t\t\tnext == E_Modifier){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t\r\n\t\t// GB11. ZWJ ? (Glue_After_Zwj | EBG)\r\n\t\tif(previous == ZWJ && [Glue_After_Zwj, E_Base_GAZ].indexOf(next) != -1) {\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\r\n\t\t// GB12. ^ (RI RI)* RI ? RI\r\n\t\t// GB13. [^RI] (RI RI)* RI ? RI\r\n\t\tif(mid.indexOf(Regional_Indicator) != -1) { \r\n\t\t\treturn Break;\r\n\t\t}\r\n\t\tif(previous == Regional_Indicator && next == Regional_Indicator) {\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\r\n\t\t// GB999. Any ? Any\r\n\t\treturn BreakStart;\r\n\t}\r\n\t\r\n\t// Returns the next grapheme break in the string after the given index\r\n\tthis.nextBreak = function(string, index){\r\n\t\tif(index === undefined){\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\t\tif(index < 0){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif(index >= string.length - 1){\r\n\t\t\treturn string.length;\r\n\t\t}\r\n\t\tvar prev = getGraphemeBreakProperty(codePointAt(string, index));\r\n\t\tvar mid = []\r\n\t\tfor (var i = index + 1; i < string.length; i++) {\r\n\t\t\t// check for already processed low surrogates\r\n\t\t\tif(isSurrogate(string, i - 1)){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tvar next = getGraphemeBreakProperty(codePointAt(string, i));\r\n\t\t\tif(shouldBreak(prev, mid, next)){\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmid.push(next);\r\n\t\t}\r\n\t\treturn string.length;\r\n\t};\r\n\t\r\n\t// Breaks the given string into an array of grapheme cluster strings\r\n\tthis.splitGraphemes = function(str){\r\n\t\tvar res = [];\r\n\t\tvar index = 0;\r\n\t\tvar brk;\r\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\r\n\t\t\tres.push(str.slice(index, brk));\r\n\t\t\tindex = brk;\r\n\t\t}\r\n\t\tif(index < str.length){\r\n\t\t\tres.push(str.slice(index));\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\t// Returns the iterator of grapheme clusters there are in the given string\r\n\tthis.iterateGraphemes = function(str) {\r\n\t\tvar index = 0;\r\n\t\tvar res = {\r\n\t\t\tnext: (function() {\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar brk;\r\n\t\t\t\tif ((brk = this.nextBreak(str, index)) < str.length) {\r\n\t\t\t\t\tvalue = str.slice(index, brk);\r\n\t\t\t\t\tindex = brk;\r\n\t\t\t\t\treturn { value: value, done: false };\r\n\t\t\t\t}\r\n\t\t\t\tif (index < str.length) {\r\n\t\t\t\t\tvalue = str.slice(index);\r\n\t\t\t\t\tindex = str.length;\r\n\t\t\t\t\treturn { value: value, done: false };\r\n\t\t\t\t}\r\n\t\t\t\treturn { value: undefined, done: true };\r\n\t\t\t}).bind(this)\r\n\t\t};\r\n\t\t// ES2015 @@iterator method (iterable) for spread syntax and for...of statement\r\n\t\tif (typeof Symbol !== 'undefined' && Symbol.iterator) {\r\n\t\t\tres[Symbol.iterator] = function() {return res};\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\t// Returns the number of grapheme clusters there are in the given string\r\n\tthis.countGraphemes = function(str){\r\n\t\tvar count = 0;\r\n\t\tvar index = 0;\r\n\t\tvar brk;\r\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\r\n\t\t\tindex = brk;\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tif(index < str.length){\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\treturn count;\r\n\t};\r\n\t\r\n\t//given a Unicode code point, determines this symbol's grapheme break property\r\n\tfunction getGraphemeBreakProperty(code){\r\n\t\t\r\n\t\t//grapheme break property for Unicode 10.0.0, \r\n\t\t//taken from http://www.unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakProperty.txt\r\n\t\t//and adapted to JavaScript rules\r\n\t\t\r\n\t\tif(\t\t\r\n\t\t(0x0600 <= code && code <= 0x0605) || // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\r\n\t\t0x06DD == code || // Cf ARABIC END OF AYAH\r\n\t\t0x070F == code || // Cf SYRIAC ABBREVIATION MARK\r\n\t\t0x08E2 == code || // Cf ARABIC DISPUTED END OF AYAH\r\n\t\t0x0D4E == code || // Lo MALAYALAM LETTER DOT REPH\r\n\t\t0x110BD == code || // Cf KAITHI NUMBER SIGN\r\n\t\t(0x111C2 <= code && code <= 0x111C3) || // Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA\r\n\t\t0x11A3A == code || // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\r\n\t\t(0x11A86 <= code && code <= 0x11A89) || // Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA\r\n\t\t0x11D46 == code // Lo MASARAM GONDI REPHA\r\n\t\t){\r\n\t\t\treturn Prepend;\r\n\t\t}\r\n\t\tif(\r\n\t\t0x000D == code // Cc \r\n\t\t){\r\n\t\t\treturn CR;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x000A == code // Cc \r\n\t\t){\r\n\t\t\treturn LF;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x0000 <= code && code <= 0x0009) || // Cc [10] ..\r\n\t\t(0x000B <= code && code <= 0x000C) || // Cc [2] ..\r\n\t\t(0x000E <= code && code <= 0x001F) || // Cc [18] ..\r\n\t\t(0x007F <= code && code <= 0x009F) || // Cc [33] ..\r\n\t\t0x00AD == code || // Cf SOFT HYPHEN\r\n\t\t0x061C == code || // Cf ARABIC LETTER MARK\r\n\t\r\n\t\t0x180E == code || // Cf MONGOLIAN VOWEL SEPARATOR\r\n\t\t0x200B == code || // Cf ZERO WIDTH SPACE\r\n\t\t(0x200E <= code && code <= 0x200F) || // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\r\n\t\t0x2028 == code || // Zl LINE SEPARATOR\r\n\t\t0x2029 == code || // Zp PARAGRAPH SEPARATOR\r\n\t\t(0x202A <= code && code <= 0x202E) || // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\r\n\t\t(0x2060 <= code && code <= 0x2064) || // Cf [5] WORD JOINER..INVISIBLE PLUS\r\n\t\t0x2065 == code || // Cn \r\n\t\t(0x2066 <= code && code <= 0x206F) || // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\r\n\t\t(0xD800 <= code && code <= 0xDFFF) || // Cs [2048] ..\r\n\t\t0xFEFF == code || // Cf ZERO WIDTH NO-BREAK SPACE\r\n\t\t(0xFFF0 <= code && code <= 0xFFF8) || // Cn [9] ..\r\n\t\t(0xFFF9 <= code && code <= 0xFFFB) || // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\r\n\t\t(0x1BCA0 <= code && code <= 0x1BCA3) || // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\r\n\t\t(0x1D173 <= code && code <= 0x1D17A) || // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\r\n\t\t0xE0000 == code || // Cn \r\n\t\t0xE0001 == code || // Cf LANGUAGE TAG\r\n\t\t(0xE0002 <= code && code <= 0xE001F) || // Cn [30] ..\r\n\t\t(0xE0080 <= code && code <= 0xE00FF) || // Cn [128] ..\r\n\t\t(0xE01F0 <= code && code <= 0xE0FFF) // Cn [3600] ..\r\n\t\t){\r\n\t\t\treturn Control;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x0300 <= code && code <= 0x036F) || // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\r\n\t\t(0x0483 <= code && code <= 0x0487) || // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\r\n\t\t(0x0488 <= code && code <= 0x0489) || // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\r\n\t\t(0x0591 <= code && code <= 0x05BD) || // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\r\n\t\t0x05BF == code || // Mn HEBREW POINT RAFE\r\n\t\t(0x05C1 <= code && code <= 0x05C2) || // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\r\n\t\t(0x05C4 <= code && code <= 0x05C5) || // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\r\n\t\t0x05C7 == code || // Mn HEBREW POINT QAMATS QATAN\r\n\t\t(0x0610 <= code && code <= 0x061A) || // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\r\n\t\t(0x064B <= code && code <= 0x065F) || // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\r\n\t\t0x0670 == code || // Mn ARABIC LETTER SUPERSCRIPT ALEF\r\n\t\t(0x06D6 <= code && code <= 0x06DC) || // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\r\n\t\t(0x06DF <= code && code <= 0x06E4) || // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\r\n\t\t(0x06E7 <= code && code <= 0x06E8) || // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\r\n\t\t(0x06EA <= code && code <= 0x06ED) || // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\r\n\t\t0x0711 == code || // Mn SYRIAC LETTER SUPERSCRIPT ALAPH\r\n\t\t(0x0730 <= code && code <= 0x074A) || // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\r\n\t\t(0x07A6 <= code && code <= 0x07B0) || // Mn [11] THAANA ABAFILI..THAANA SUKUN\r\n\t\t(0x07EB <= code && code <= 0x07F3) || // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\r\n\t\t(0x0816 <= code && code <= 0x0819) || // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\r\n\t\t(0x081B <= code && code <= 0x0823) || // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\r\n\t\t(0x0825 <= code && code <= 0x0827) || // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\r\n\t\t(0x0829 <= code && code <= 0x082D) || // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\r\n\t\t(0x0859 <= code && code <= 0x085B) || // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\r\n\t\t(0x08D4 <= code && code <= 0x08E1) || // Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA\r\n\t\t(0x08E3 <= code && code <= 0x0902) || // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\r\n\t\t0x093A == code || // Mn DEVANAGARI VOWEL SIGN OE\r\n\t\t0x093C == code || // Mn DEVANAGARI SIGN NUKTA\r\n\t\t(0x0941 <= code && code <= 0x0948) || // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\r\n\t\t0x094D == code || // Mn DEVANAGARI SIGN VIRAMA\r\n\t\t(0x0951 <= code && code <= 0x0957) || // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\r\n\t\t(0x0962 <= code && code <= 0x0963) || // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\r\n\t\t0x0981 == code || // Mn BENGALI SIGN CANDRABINDU\r\n\t\t0x09BC == code || // Mn BENGALI SIGN NUKTA\r\n\t\t0x09BE == code || // Mc BENGALI VOWEL SIGN AA\r\n\t\t(0x09C1 <= code && code <= 0x09C4) || // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\r\n\t\t0x09CD == code || // Mn BENGALI SIGN VIRAMA\r\n\t\t0x09D7 == code || // Mc BENGALI AU LENGTH MARK\r\n\t\t(0x09E2 <= code && code <= 0x09E3) || // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\r\n\t\t(0x0A01 <= code && code <= 0x0A02) || // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\r\n\t\t0x0A3C == code || // Mn GURMUKHI SIGN NUKTA\r\n\t\t(0x0A41 <= code && code <= 0x0A42) || // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\r\n\t\t(0x0A47 <= code && code <= 0x0A48) || // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\r\n\t\t(0x0A4B <= code && code <= 0x0A4D) || // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\r\n\t\t0x0A51 == code || // Mn GURMUKHI SIGN UDAAT\r\n\t\t(0x0A70 <= code && code <= 0x0A71) || // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK\r\n\t\t0x0A75 == code || // Mn GURMUKHI SIGN YAKASH\r\n\t\t(0x0A81 <= code && code <= 0x0A82) || // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\r\n\t\t0x0ABC == code || // Mn GUJARATI SIGN NUKTA\r\n\t\t(0x0AC1 <= code && code <= 0x0AC5) || // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\r\n\t\t(0x0AC7 <= code && code <= 0x0AC8) || // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\r\n\t\t0x0ACD == code || // Mn GUJARATI SIGN VIRAMA\r\n\t\t(0x0AE2 <= code && code <= 0x0AE3) || // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\r\n\t\t(0x0AFA <= code && code <= 0x0AFF) || // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\r\n\t\t0x0B01 == code || // Mn ORIYA SIGN CANDRABINDU\r\n\t\t0x0B3C == code || // Mn ORIYA SIGN NUKTA\r\n\t\t0x0B3E == code || // Mc ORIYA VOWEL SIGN AA\r\n\t\t0x0B3F == code || // Mn ORIYA VOWEL SIGN I\r\n\t\t(0x0B41 <= code && code <= 0x0B44) || // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\r\n\t\t0x0B4D == code || // Mn ORIYA SIGN VIRAMA\r\n\t\t0x0B56 == code || // Mn ORIYA AI LENGTH MARK\r\n\t\t0x0B57 == code || // Mc ORIYA AU LENGTH MARK\r\n\t\t(0x0B62 <= code && code <= 0x0B63) || // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\r\n\t\t0x0B82 == code || // Mn TAMIL SIGN ANUSVARA\r\n\t\t0x0BBE == code || // Mc TAMIL VOWEL SIGN AA\r\n\t\t0x0BC0 == code || // Mn TAMIL VOWEL SIGN II\r\n\t\t0x0BCD == code || // Mn TAMIL SIGN VIRAMA\r\n\t\t0x0BD7 == code || // Mc TAMIL AU LENGTH MARK\r\n\t\t0x0C00 == code || // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE\r\n\t\t(0x0C3E <= code && code <= 0x0C40) || // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\r\n\t\t(0x0C46 <= code && code <= 0x0C48) || // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\r\n\t\t(0x0C4A <= code && code <= 0x0C4D) || // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\r\n\t\t(0x0C55 <= code && code <= 0x0C56) || // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\r\n\t\t(0x0C62 <= code && code <= 0x0C63) || // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\r\n\t\t0x0C81 == code || // Mn KANNADA SIGN CANDRABINDU\r\n\t\t0x0CBC == code || // Mn KANNADA SIGN NUKTA\r\n\t\t0x0CBF == code || // Mn KANNADA VOWEL SIGN I\r\n\t\t0x0CC2 == code || // Mc KANNADA VOWEL SIGN UU\r\n\t\t0x0CC6 == code || // Mn KANNADA VOWEL SIGN E\r\n\t\t(0x0CCC <= code && code <= 0x0CCD) || // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\r\n\t\t(0x0CD5 <= code && code <= 0x0CD6) || // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\r\n\t\t(0x0CE2 <= code && code <= 0x0CE3) || // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\r\n\t\t(0x0D00 <= code && code <= 0x0D01) || // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\r\n\t\t(0x0D3B <= code && code <= 0x0D3C) || // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\r\n\t\t0x0D3E == code || // Mc MALAYALAM VOWEL SIGN AA\r\n\t\t(0x0D41 <= code && code <= 0x0D44) || // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\r\n\t\t0x0D4D == code || // Mn MALAYALAM SIGN VIRAMA\r\n\t\t0x0D57 == code || // Mc MALAYALAM AU LENGTH MARK\r\n\t\t(0x0D62 <= code && code <= 0x0D63) || // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\r\n\t\t0x0DCA == code || // Mn SINHALA SIGN AL-LAKUNA\r\n\t\t0x0DCF == code || // Mc SINHALA VOWEL SIGN AELA-PILLA\r\n\t\t(0x0DD2 <= code && code <= 0x0DD4) || // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\r\n\t\t0x0DD6 == code || // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA\r\n\t\t0x0DDF == code || // Mc SINHALA VOWEL SIGN GAYANUKITTA\r\n\t\t0x0E31 == code || // Mn THAI CHARACTER MAI HAN-AKAT\r\n\t\t(0x0E34 <= code && code <= 0x0E3A) || // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\r\n\t\t(0x0E47 <= code && code <= 0x0E4E) || // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\r\n\t\t0x0EB1 == code || // Mn LAO VOWEL SIGN MAI KAN\r\n\t\t(0x0EB4 <= code && code <= 0x0EB9) || // Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU\r\n\t\t(0x0EBB <= code && code <= 0x0EBC) || // Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO\r\n\t\t(0x0EC8 <= code && code <= 0x0ECD) || // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA\r\n\t\t(0x0F18 <= code && code <= 0x0F19) || // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\r\n\t\t0x0F35 == code || // Mn TIBETAN MARK NGAS BZUNG NYI ZLA\r\n\t\t0x0F37 == code || // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS\r\n\t\t0x0F39 == code || // Mn TIBETAN MARK TSA -PHRU\r\n\t\t(0x0F71 <= code && code <= 0x0F7E) || // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\r\n\t\t(0x0F80 <= code && code <= 0x0F84) || // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\r\n\t\t(0x0F86 <= code && code <= 0x0F87) || // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\r\n\t\t(0x0F8D <= code && code <= 0x0F97) || // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\r\n\t\t(0x0F99 <= code && code <= 0x0FBC) || // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\r\n\t\t0x0FC6 == code || // Mn TIBETAN SYMBOL PADMA GDAN\r\n\t\t(0x102D <= code && code <= 0x1030) || // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\r\n\t\t(0x1032 <= code && code <= 0x1037) || // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\r\n\t\t(0x1039 <= code && code <= 0x103A) || // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\r\n\t\t(0x103D <= code && code <= 0x103E) || // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\r\n\t\t(0x1058 <= code && code <= 0x1059) || // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\r\n\t\t(0x105E <= code && code <= 0x1060) || // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\r\n\t\t(0x1071 <= code && code <= 0x1074) || // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\r\n\t\t0x1082 == code || // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA\r\n\t\t(0x1085 <= code && code <= 0x1086) || // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\r\n\t\t0x108D == code || // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\r\n\t\t0x109D == code || // Mn MYANMAR VOWEL SIGN AITON AI\r\n\t\t(0x135D <= code && code <= 0x135F) || // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\r\n\t\t(0x1712 <= code && code <= 0x1714) || // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\r\n\t\t(0x1732 <= code && code <= 0x1734) || // Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD\r\n\t\t(0x1752 <= code && code <= 0x1753) || // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\r\n\t\t(0x1772 <= code && code <= 0x1773) || // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\r\n\t\t(0x17B4 <= code && code <= 0x17B5) || // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\r\n\t\t(0x17B7 <= code && code <= 0x17BD) || // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\r\n\t\t0x17C6 == code || // Mn KHMER SIGN NIKAHIT\r\n\t\t(0x17C9 <= code && code <= 0x17D3) || // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\r\n\t\t0x17DD == code || // Mn KHMER SIGN ATTHACAN\r\n\t\t(0x180B <= code && code <= 0x180D) || // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\r\n\t\t(0x1885 <= code && code <= 0x1886) || // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\r\n\t\t0x18A9 == code || // Mn MONGOLIAN LETTER ALI GALI DAGALGA\r\n\t\t(0x1920 <= code && code <= 0x1922) || // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\r\n\t\t(0x1927 <= code && code <= 0x1928) || // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\r\n\t\t0x1932 == code || // Mn LIMBU SMALL LETTER ANUSVARA\r\n\t\t(0x1939 <= code && code <= 0x193B) || // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\r\n\t\t(0x1A17 <= code && code <= 0x1A18) || // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\r\n\t\t0x1A1B == code || // Mn BUGINESE VOWEL SIGN AE\r\n\t\t0x1A56 == code || // Mn TAI THAM CONSONANT SIGN MEDIAL LA\r\n\t\t(0x1A58 <= code && code <= 0x1A5E) || // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\r\n\t\t0x1A60 == code || // Mn TAI THAM SIGN SAKOT\r\n\t\t0x1A62 == code || // Mn TAI THAM VOWEL SIGN MAI SAT\r\n\t\t(0x1A65 <= code && code <= 0x1A6C) || // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\r\n\t\t(0x1A73 <= code && code <= 0x1A7C) || // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\r\n\t\t0x1A7F == code || // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT\r\n\t\t(0x1AB0 <= code && code <= 0x1ABD) || // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\r\n\t\t0x1ABE == code || // Me COMBINING PARENTHESES OVERLAY\r\n\t\t(0x1B00 <= code && code <= 0x1B03) || // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\r\n\t\t0x1B34 == code || // Mn BALINESE SIGN REREKAN\r\n\t\t(0x1B36 <= code && code <= 0x1B3A) || // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\r\n\t\t0x1B3C == code || // Mn BALINESE VOWEL SIGN LA LENGA\r\n\t\t0x1B42 == code || // Mn BALINESE VOWEL SIGN PEPET\r\n\t\t(0x1B6B <= code && code <= 0x1B73) || // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\r\n\t\t(0x1B80 <= code && code <= 0x1B81) || // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\r\n\t\t(0x1BA2 <= code && code <= 0x1BA5) || // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\r\n\t\t(0x1BA8 <= code && code <= 0x1BA9) || // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\r\n\t\t(0x1BAB <= code && code <= 0x1BAD) || // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\r\n\t\t0x1BE6 == code || // Mn BATAK SIGN TOMPI\r\n\t\t(0x1BE8 <= code && code <= 0x1BE9) || // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\r\n\t\t0x1BED == code || // Mn BATAK VOWEL SIGN KARO O\r\n\t\t(0x1BEF <= code && code <= 0x1BF1) || // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\r\n\t\t(0x1C2C <= code && code <= 0x1C33) || // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\r\n\t\t(0x1C36 <= code && code <= 0x1C37) || // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\r\n\t\t(0x1CD0 <= code && code <= 0x1CD2) || // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\r\n\t\t(0x1CD4 <= code && code <= 0x1CE0) || // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\r\n\t\t(0x1CE2 <= code && code <= 0x1CE8) || // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\r\n\t\t0x1CED == code || // Mn VEDIC SIGN TIRYAK\r\n\t\t0x1CF4 == code || // Mn VEDIC TONE CANDRA ABOVE\r\n\t\t(0x1CF8 <= code && code <= 0x1CF9) || // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\r\n\t\t(0x1DC0 <= code && code <= 0x1DF9) || // Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW\r\n\t\t(0x1DFB <= code && code <= 0x1DFF) || // Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\r\n\t\t0x200C == code || // Cf ZERO WIDTH NON-JOINER\r\n\t\t(0x20D0 <= code && code <= 0x20DC) || // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\r\n\t\t(0x20DD <= code && code <= 0x20E0) || // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\r\n\t\t0x20E1 == code || // Mn COMBINING LEFT RIGHT ARROW ABOVE\r\n\t\t(0x20E2 <= code && code <= 0x20E4) || // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\r\n\t\t(0x20E5 <= code && code <= 0x20F0) || // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\r\n\t\t(0x2CEF <= code && code <= 0x2CF1) || // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\r\n\t\t0x2D7F == code || // Mn TIFINAGH CONSONANT JOINER\r\n\t\t(0x2DE0 <= code && code <= 0x2DFF) || // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\r\n\t\t(0x302A <= code && code <= 0x302D) || // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\r\n\t\t(0x302E <= code && code <= 0x302F) || // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\r\n\t\t(0x3099 <= code && code <= 0x309A) || // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\r\n\t\t0xA66F == code || // Mn COMBINING CYRILLIC VZMET\r\n\t\t(0xA670 <= code && code <= 0xA672) || // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\r\n\t\t(0xA674 <= code && code <= 0xA67D) || // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\r\n\t\t(0xA69E <= code && code <= 0xA69F) || // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\r\n\t\t(0xA6F0 <= code && code <= 0xA6F1) || // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\r\n\t\t0xA802 == code || // Mn SYLOTI NAGRI SIGN DVISVARA\r\n\t\t0xA806 == code || // Mn SYLOTI NAGRI SIGN HASANTA\r\n\t\t0xA80B == code || // Mn SYLOTI NAGRI SIGN ANUSVARA\r\n\t\t(0xA825 <= code && code <= 0xA826) || // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\r\n\t\t(0xA8C4 <= code && code <= 0xA8C5) || // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\r\n\t\t(0xA8E0 <= code && code <= 0xA8F1) || // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\r\n\t\t(0xA926 <= code && code <= 0xA92D) || // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\r\n\t\t(0xA947 <= code && code <= 0xA951) || // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\r\n\t\t(0xA980 <= code && code <= 0xA982) || // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\r\n\t\t0xA9B3 == code || // Mn JAVANESE SIGN CECAK TELU\r\n\t\t(0xA9B6 <= code && code <= 0xA9B9) || // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\r\n\t\t0xA9BC == code || // Mn JAVANESE VOWEL SIGN PEPET\r\n\t\t0xA9E5 == code || // Mn MYANMAR SIGN SHAN SAW\r\n\t\t(0xAA29 <= code && code <= 0xAA2E) || // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\r\n\t\t(0xAA31 <= code && code <= 0xAA32) || // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\r\n\t\t(0xAA35 <= code && code <= 0xAA36) || // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\r\n\t\t0xAA43 == code || // Mn CHAM CONSONANT SIGN FINAL NG\r\n\t\t0xAA4C == code || // Mn CHAM CONSONANT SIGN FINAL M\r\n\t\t0xAA7C == code || // Mn MYANMAR SIGN TAI LAING TONE-2\r\n\t\t0xAAB0 == code || // Mn TAI VIET MAI KANG\r\n\t\t(0xAAB2 <= code && code <= 0xAAB4) || // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U\r\n\t\t(0xAAB7 <= code && code <= 0xAAB8) || // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\r\n\t\t(0xAABE <= code && code <= 0xAABF) || // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\r\n\t\t0xAAC1 == code || // Mn TAI VIET TONE MAI THO\r\n\t\t(0xAAEC <= code && code <= 0xAAED) || // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\r\n\t\t0xAAF6 == code || // Mn MEETEI MAYEK VIRAMA\r\n\t\t0xABE5 == code || // Mn MEETEI MAYEK VOWEL SIGN ANAP\r\n\t\t0xABE8 == code || // Mn MEETEI MAYEK VOWEL SIGN UNAP\r\n\t\t0xABED == code || // Mn MEETEI MAYEK APUN IYEK\r\n\t\t0xFB1E == code || // Mn HEBREW POINT JUDEO-SPANISH VARIKA\r\n\t\t(0xFE00 <= code && code <= 0xFE0F) || // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\r\n\t\t(0xFE20 <= code && code <= 0xFE2F) || // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\r\n\t\t(0xFF9E <= code && code <= 0xFF9F) || // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\r\n\t\t0x101FD == code || // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\r\n\t\t0x102E0 == code || // Mn COPTIC EPACT THOUSANDS MARK\r\n\t\t(0x10376 <= code && code <= 0x1037A) || // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\r\n\t\t(0x10A01 <= code && code <= 0x10A03) || // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\r\n\t\t(0x10A05 <= code && code <= 0x10A06) || // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\r\n\t\t(0x10A0C <= code && code <= 0x10A0F) || // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\r\n\t\t(0x10A38 <= code && code <= 0x10A3A) || // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\r\n\t\t0x10A3F == code || // Mn KHAROSHTHI VIRAMA\r\n\t\t(0x10AE5 <= code && code <= 0x10AE6) || // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\r\n\t\t0x11001 == code || // Mn BRAHMI SIGN ANUSVARA\r\n\t\t(0x11038 <= code && code <= 0x11046) || // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\r\n\t\t(0x1107F <= code && code <= 0x11081) || // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\r\n\t\t(0x110B3 <= code && code <= 0x110B6) || // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\r\n\t\t(0x110B9 <= code && code <= 0x110BA) || // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\r\n\t\t(0x11100 <= code && code <= 0x11102) || // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\r\n\t\t(0x11127 <= code && code <= 0x1112B) || // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\r\n\t\t(0x1112D <= code && code <= 0x11134) || // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\r\n\t\t0x11173 == code || // Mn MAHAJANI SIGN NUKTA\r\n\t\t(0x11180 <= code && code <= 0x11181) || // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\r\n\t\t(0x111B6 <= code && code <= 0x111BE) || // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\r\n\t\t(0x111CA <= code && code <= 0x111CC) || // Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK\r\n\t\t(0x1122F <= code && code <= 0x11231) || // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\r\n\t\t0x11234 == code || // Mn KHOJKI SIGN ANUSVARA\r\n\t\t(0x11236 <= code && code <= 0x11237) || // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\r\n\t\t0x1123E == code || // Mn KHOJKI SIGN SUKUN\r\n\t\t0x112DF == code || // Mn KHUDAWADI SIGN ANUSVARA\r\n\t\t(0x112E3 <= code && code <= 0x112EA) || // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\r\n\t\t(0x11300 <= code && code <= 0x11301) || // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\r\n\t\t0x1133C == code || // Mn GRANTHA SIGN NUKTA\r\n\t\t0x1133E == code || // Mc GRANTHA VOWEL SIGN AA\r\n\t\t0x11340 == code || // Mn GRANTHA VOWEL SIGN II\r\n\t\t0x11357 == code || // Mc GRANTHA AU LENGTH MARK\r\n\t\t(0x11366 <= code && code <= 0x1136C) || // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\r\n\t\t(0x11370 <= code && code <= 0x11374) || // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\r\n\t\t(0x11438 <= code && code <= 0x1143F) || // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\r\n\t\t(0x11442 <= code && code <= 0x11444) || // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\r\n\t\t0x11446 == code || // Mn NEWA SIGN NUKTA\r\n\t\t0x114B0 == code || // Mc TIRHUTA VOWEL SIGN AA\r\n\t\t(0x114B3 <= code && code <= 0x114B8) || // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\r\n\t\t0x114BA == code || // Mn TIRHUTA VOWEL SIGN SHORT E\r\n\t\t0x114BD == code || // Mc TIRHUTA VOWEL SIGN SHORT O\r\n\t\t(0x114BF <= code && code <= 0x114C0) || // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\r\n\t\t(0x114C2 <= code && code <= 0x114C3) || // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\r\n\t\t0x115AF == code || // Mc SIDDHAM VOWEL SIGN AA\r\n\t\t(0x115B2 <= code && code <= 0x115B5) || // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\r\n\t\t(0x115BC <= code && code <= 0x115BD) || // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\r\n\t\t(0x115BF <= code && code <= 0x115C0) || // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\r\n\t\t(0x115DC <= code && code <= 0x115DD) || // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\r\n\t\t(0x11633 <= code && code <= 0x1163A) || // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\r\n\t\t0x1163D == code || // Mn MODI SIGN ANUSVARA\r\n\t\t(0x1163F <= code && code <= 0x11640) || // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\r\n\t\t0x116AB == code || // Mn TAKRI SIGN ANUSVARA\r\n\t\t0x116AD == code || // Mn TAKRI VOWEL SIGN AA\r\n\t\t(0x116B0 <= code && code <= 0x116B5) || // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\r\n\t\t0x116B7 == code || // Mn TAKRI SIGN NUKTA\r\n\t\t(0x1171D <= code && code <= 0x1171F) || // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA\r\n\t\t(0x11722 <= code && code <= 0x11725) || // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\r\n\t\t(0x11727 <= code && code <= 0x1172B) || // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\r\n\t\t(0x11A01 <= code && code <= 0x11A06) || // Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O\r\n\t\t(0x11A09 <= code && code <= 0x11A0A) || // Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK\r\n\t\t(0x11A33 <= code && code <= 0x11A38) || // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\r\n\t\t(0x11A3B <= code && code <= 0x11A3E) || // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\r\n\t\t0x11A47 == code || // Mn ZANABAZAR SQUARE SUBJOINER\r\n\t\t(0x11A51 <= code && code <= 0x11A56) || // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\r\n\t\t(0x11A59 <= code && code <= 0x11A5B) || // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\r\n\t\t(0x11A8A <= code && code <= 0x11A96) || // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\r\n\t\t(0x11A98 <= code && code <= 0x11A99) || // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\r\n\t\t(0x11C30 <= code && code <= 0x11C36) || // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\r\n\t\t(0x11C38 <= code && code <= 0x11C3D) || // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\r\n\t\t0x11C3F == code || // Mn BHAIKSUKI SIGN VIRAMA\r\n\t\t(0x11C92 <= code && code <= 0x11CA7) || // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\r\n\t\t(0x11CAA <= code && code <= 0x11CB0) || // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\r\n\t\t(0x11CB2 <= code && code <= 0x11CB3) || // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\r\n\t\t(0x11CB5 <= code && code <= 0x11CB6) || // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\r\n\t\t(0x11D31 <= code && code <= 0x11D36) || // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\r\n\t\t0x11D3A == code || // Mn MASARAM GONDI VOWEL SIGN E\r\n\t\t(0x11D3C <= code && code <= 0x11D3D) || // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\r\n\t\t(0x11D3F <= code && code <= 0x11D45) || // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\r\n\t\t0x11D47 == code || // Mn MASARAM GONDI RA-KARA\r\n\t\t(0x16AF0 <= code && code <= 0x16AF4) || // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\r\n\t\t(0x16B30 <= code && code <= 0x16B36) || // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\r\n\t\t(0x16F8F <= code && code <= 0x16F92) || // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW\r\n\t\t(0x1BC9D <= code && code <= 0x1BC9E) || // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\r\n\t\t0x1D165 == code || // Mc MUSICAL SYMBOL COMBINING STEM\r\n\t\t(0x1D167 <= code && code <= 0x1D169) || // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\r\n\t\t(0x1D16E <= code && code <= 0x1D172) || // Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5\r\n\t\t(0x1D17B <= code && code <= 0x1D182) || // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\r\n\t\t(0x1D185 <= code && code <= 0x1D18B) || // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\r\n\t\t(0x1D1AA <= code && code <= 0x1D1AD) || // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\r\n\t\t(0x1D242 <= code && code <= 0x1D244) || // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\r\n\t\t(0x1DA00 <= code && code <= 0x1DA36) || // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\r\n\t\t(0x1DA3B <= code && code <= 0x1DA6C) || // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\r\n\t\t0x1DA75 == code || // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\r\n\t\t0x1DA84 == code || // Mn SIGNWRITING LOCATION HEAD NECK\r\n\t\t(0x1DA9B <= code && code <= 0x1DA9F) || // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\r\n\t\t(0x1DAA1 <= code && code <= 0x1DAAF) || // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\r\n\t\t(0x1E000 <= code && code <= 0x1E006) || // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\r\n\t\t(0x1E008 <= code && code <= 0x1E018) || // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\r\n\t\t(0x1E01B <= code && code <= 0x1E021) || // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\r\n\t\t(0x1E023 <= code && code <= 0x1E024) || // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\r\n\t\t(0x1E026 <= code && code <= 0x1E02A) || // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\r\n\t\t(0x1E8D0 <= code && code <= 0x1E8D6) || // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\r\n\t\t(0x1E944 <= code && code <= 0x1E94A) || // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\r\n\t\t(0xE0020 <= code && code <= 0xE007F) || // Cf [96] TAG SPACE..CANCEL TAG\r\n\t\t(0xE0100 <= code && code <= 0xE01EF) // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\r\n\t\t){\r\n\t\t\treturn Extend;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1F1E6 <= code && code <= 0x1F1FF) // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\r\n\t\t){\r\n\t\t\treturn Regional_Indicator;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x0903 == code || // Mc DEVANAGARI SIGN VISARGA\r\n\t\t0x093B == code || // Mc DEVANAGARI VOWEL SIGN OOE\r\n\t\t(0x093E <= code && code <= 0x0940) || // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\r\n\t\t(0x0949 <= code && code <= 0x094C) || // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\r\n\t\t(0x094E <= code && code <= 0x094F) || // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\r\n\t\t(0x0982 <= code && code <= 0x0983) || // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\r\n\t\t(0x09BF <= code && code <= 0x09C0) || // Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\r\n\t\t(0x09C7 <= code && code <= 0x09C8) || // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\r\n\t\t(0x09CB <= code && code <= 0x09CC) || // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\r\n\t\t0x0A03 == code || // Mc GURMUKHI SIGN VISARGA\r\n\t\t(0x0A3E <= code && code <= 0x0A40) || // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\r\n\t\t0x0A83 == code || // Mc GUJARATI SIGN VISARGA\r\n\t\t(0x0ABE <= code && code <= 0x0AC0) || // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\r\n\t\t0x0AC9 == code || // Mc GUJARATI VOWEL SIGN CANDRA O\r\n\t\t(0x0ACB <= code && code <= 0x0ACC) || // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\r\n\t\t(0x0B02 <= code && code <= 0x0B03) || // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\r\n\t\t0x0B40 == code || // Mc ORIYA VOWEL SIGN II\r\n\t\t(0x0B47 <= code && code <= 0x0B48) || // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\r\n\t\t(0x0B4B <= code && code <= 0x0B4C) || // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\r\n\t\t0x0BBF == code || // Mc TAMIL VOWEL SIGN I\r\n\t\t(0x0BC1 <= code && code <= 0x0BC2) || // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\r\n\t\t(0x0BC6 <= code && code <= 0x0BC8) || // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\r\n\t\t(0x0BCA <= code && code <= 0x0BCC) || // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\r\n\t\t(0x0C01 <= code && code <= 0x0C03) || // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\r\n\t\t(0x0C41 <= code && code <= 0x0C44) || // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\r\n\t\t(0x0C82 <= code && code <= 0x0C83) || // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\r\n\t\t0x0CBE == code || // Mc KANNADA VOWEL SIGN AA\r\n\t\t(0x0CC0 <= code && code <= 0x0CC1) || // Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U\r\n\t\t(0x0CC3 <= code && code <= 0x0CC4) || // Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\r\n\t\t(0x0CC7 <= code && code <= 0x0CC8) || // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\r\n\t\t(0x0CCA <= code && code <= 0x0CCB) || // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\r\n\t\t(0x0D02 <= code && code <= 0x0D03) || // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\r\n\t\t(0x0D3F <= code && code <= 0x0D40) || // Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\r\n\t\t(0x0D46 <= code && code <= 0x0D48) || // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\r\n\t\t(0x0D4A <= code && code <= 0x0D4C) || // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\r\n\t\t(0x0D82 <= code && code <= 0x0D83) || // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\r\n\t\t(0x0DD0 <= code && code <= 0x0DD1) || // Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\r\n\t\t(0x0DD8 <= code && code <= 0x0DDE) || // Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\r\n\t\t(0x0DF2 <= code && code <= 0x0DF3) || // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\r\n\t\t0x0E33 == code || // Lo THAI CHARACTER SARA AM\r\n\t\t0x0EB3 == code || // Lo LAO VOWEL SIGN AM\r\n\t\t(0x0F3E <= code && code <= 0x0F3F) || // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\r\n\t\t0x0F7F == code || // Mc TIBETAN SIGN RNAM BCAD\r\n\t\t0x1031 == code || // Mc MYANMAR VOWEL SIGN E\r\n\t\t(0x103B <= code && code <= 0x103C) || // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\r\n\t\t(0x1056 <= code && code <= 0x1057) || // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\r\n\t\t0x1084 == code || // Mc MYANMAR VOWEL SIGN SHAN E\r\n\t\t0x17B6 == code || // Mc KHMER VOWEL SIGN AA\r\n\t\t(0x17BE <= code && code <= 0x17C5) || // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\r\n\t\t(0x17C7 <= code && code <= 0x17C8) || // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\r\n\t\t(0x1923 <= code && code <= 0x1926) || // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\r\n\t\t(0x1929 <= code && code <= 0x192B) || // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\r\n\t\t(0x1930 <= code && code <= 0x1931) || // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\r\n\t\t(0x1933 <= code && code <= 0x1938) || // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\r\n\t\t(0x1A19 <= code && code <= 0x1A1A) || // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\r\n\t\t0x1A55 == code || // Mc TAI THAM CONSONANT SIGN MEDIAL RA\r\n\t\t0x1A57 == code || // Mc TAI THAM CONSONANT SIGN LA TANG LAI\r\n\t\t(0x1A6D <= code && code <= 0x1A72) || // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\r\n\t\t0x1B04 == code || // Mc BALINESE SIGN BISAH\r\n\t\t0x1B35 == code || // Mc BALINESE VOWEL SIGN TEDUNG\r\n\t\t0x1B3B == code || // Mc BALINESE VOWEL SIGN RA REPA TEDUNG\r\n\t\t(0x1B3D <= code && code <= 0x1B41) || // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\r\n\t\t(0x1B43 <= code && code <= 0x1B44) || // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\r\n\t\t0x1B82 == code || // Mc SUNDANESE SIGN PANGWISAD\r\n\t\t0x1BA1 == code || // Mc SUNDANESE CONSONANT SIGN PAMINGKAL\r\n\t\t(0x1BA6 <= code && code <= 0x1BA7) || // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\r\n\t\t0x1BAA == code || // Mc SUNDANESE SIGN PAMAAEH\r\n\t\t0x1BE7 == code || // Mc BATAK VOWEL SIGN E\r\n\t\t(0x1BEA <= code && code <= 0x1BEC) || // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\r\n\t\t0x1BEE == code || // Mc BATAK VOWEL SIGN U\r\n\t\t(0x1BF2 <= code && code <= 0x1BF3) || // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN\r\n\t\t(0x1C24 <= code && code <= 0x1C2B) || // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\r\n\t\t(0x1C34 <= code && code <= 0x1C35) || // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\r\n\t\t0x1CE1 == code || // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\r\n\t\t(0x1CF2 <= code && code <= 0x1CF3) || // Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA\r\n\t\t0x1CF7 == code || // Mc VEDIC SIGN ATIKRAMA\r\n\t\t(0xA823 <= code && code <= 0xA824) || // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\r\n\t\t0xA827 == code || // Mc SYLOTI NAGRI VOWEL SIGN OO\r\n\t\t(0xA880 <= code && code <= 0xA881) || // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\r\n\t\t(0xA8B4 <= code && code <= 0xA8C3) || // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\r\n\t\t(0xA952 <= code && code <= 0xA953) || // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\r\n\t\t0xA983 == code || // Mc JAVANESE SIGN WIGNYAN\r\n\t\t(0xA9B4 <= code && code <= 0xA9B5) || // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\r\n\t\t(0xA9BA <= code && code <= 0xA9BB) || // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\r\n\t\t(0xA9BD <= code && code <= 0xA9C0) || // Mc [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON\r\n\t\t(0xAA2F <= code && code <= 0xAA30) || // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\r\n\t\t(0xAA33 <= code && code <= 0xAA34) || // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\r\n\t\t0xAA4D == code || // Mc CHAM CONSONANT SIGN FINAL H\r\n\t\t0xAAEB == code || // Mc MEETEI MAYEK VOWEL SIGN II\r\n\t\t(0xAAEE <= code && code <= 0xAAEF) || // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\r\n\t\t0xAAF5 == code || // Mc MEETEI MAYEK VOWEL SIGN VISARGA\r\n\t\t(0xABE3 <= code && code <= 0xABE4) || // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\r\n\t\t(0xABE6 <= code && code <= 0xABE7) || // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\r\n\t\t(0xABE9 <= code && code <= 0xABEA) || // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\r\n\t\t0xABEC == code || // Mc MEETEI MAYEK LUM IYEK\r\n\t\t0x11000 == code || // Mc BRAHMI SIGN CANDRABINDU\r\n\t\t0x11002 == code || // Mc BRAHMI SIGN VISARGA\r\n\t\t0x11082 == code || // Mc KAITHI SIGN VISARGA\r\n\t\t(0x110B0 <= code && code <= 0x110B2) || // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\r\n\t\t(0x110B7 <= code && code <= 0x110B8) || // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\r\n\t\t0x1112C == code || // Mc CHAKMA VOWEL SIGN E\r\n\t\t0x11182 == code || // Mc SHARADA SIGN VISARGA\r\n\t\t(0x111B3 <= code && code <= 0x111B5) || // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\r\n\t\t(0x111BF <= code && code <= 0x111C0) || // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\r\n\t\t(0x1122C <= code && code <= 0x1122E) || // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\r\n\t\t(0x11232 <= code && code <= 0x11233) || // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\r\n\t\t0x11235 == code || // Mc KHOJKI SIGN VIRAMA\r\n\t\t(0x112E0 <= code && code <= 0x112E2) || // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\r\n\t\t(0x11302 <= code && code <= 0x11303) || // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\r\n\t\t0x1133F == code || // Mc GRANTHA VOWEL SIGN I\r\n\t\t(0x11341 <= code && code <= 0x11344) || // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\r\n\t\t(0x11347 <= code && code <= 0x11348) || // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\r\n\t\t(0x1134B <= code && code <= 0x1134D) || // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\r\n\t\t(0x11362 <= code && code <= 0x11363) || // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\r\n\t\t(0x11435 <= code && code <= 0x11437) || // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\r\n\t\t(0x11440 <= code && code <= 0x11441) || // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\r\n\t\t0x11445 == code || // Mc NEWA SIGN VISARGA\r\n\t\t(0x114B1 <= code && code <= 0x114B2) || // Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\r\n\t\t0x114B9 == code || // Mc TIRHUTA VOWEL SIGN E\r\n\t\t(0x114BB <= code && code <= 0x114BC) || // Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\r\n\t\t0x114BE == code || // Mc TIRHUTA VOWEL SIGN AU\r\n\t\t0x114C1 == code || // Mc TIRHUTA SIGN VISARGA\r\n\t\t(0x115B0 <= code && code <= 0x115B1) || // Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\r\n\t\t(0x115B8 <= code && code <= 0x115BB) || // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\r\n\t\t0x115BE == code || // Mc SIDDHAM SIGN VISARGA\r\n\t\t(0x11630 <= code && code <= 0x11632) || // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\r\n\t\t(0x1163B <= code && code <= 0x1163C) || // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\r\n\t\t0x1163E == code || // Mc MODI SIGN VISARGA\r\n\t\t0x116AC == code || // Mc TAKRI SIGN VISARGA\r\n\t\t(0x116AE <= code && code <= 0x116AF) || // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\r\n\t\t0x116B6 == code || // Mc TAKRI SIGN VIRAMA\r\n\t\t(0x11720 <= code && code <= 0x11721) || // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\r\n\t\t0x11726 == code || // Mc AHOM VOWEL SIGN E\r\n\t\t(0x11A07 <= code && code <= 0x11A08) || // Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU\r\n\t\t0x11A39 == code || // Mc ZANABAZAR SQUARE SIGN VISARGA\r\n\t\t(0x11A57 <= code && code <= 0x11A58) || // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\r\n\t\t0x11A97 == code || // Mc SOYOMBO SIGN VISARGA\r\n\t\t0x11C2F == code || // Mc BHAIKSUKI VOWEL SIGN AA\r\n\t\t0x11C3E == code || // Mc BHAIKSUKI SIGN VISARGA\r\n\t\t0x11CA9 == code || // Mc MARCHEN SUBJOINED LETTER YA\r\n\t\t0x11CB1 == code || // Mc MARCHEN VOWEL SIGN I\r\n\t\t0x11CB4 == code || // Mc MARCHEN VOWEL SIGN O\r\n\t\t(0x16F51 <= code && code <= 0x16F7E) || // Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG\r\n\t\t0x1D166 == code || // Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\r\n\t\t0x1D16D == code // Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT\r\n\t\t){\r\n\t\t\treturn SpacingMark;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1100 <= code && code <= 0x115F) || // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER\r\n\t\t(0xA960 <= code && code <= 0xA97C) // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\r\n\t\t){\r\n\t\t\treturn L;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1160 <= code && code <= 0x11A7) || // Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE\r\n\t\t(0xD7B0 <= code && code <= 0xD7C6) // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\r\n\t\t){\r\n\t\t\treturn V;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x11A8 <= code && code <= 0x11FF) || // Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\r\n\t\t(0xD7CB <= code && code <= 0xD7FB) // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\r\n\t\t){\r\n\t\t\treturn T;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0xAC00 == code || // Lo HANGUL SYLLABLE GA\r\n\t\t0xAC1C == code || // Lo HANGUL SYLLABLE GAE\r\n\t\t0xAC38 == code || // Lo HANGUL SYLLABLE GYA\r\n\t\t0xAC54 == code || // Lo HANGUL SYLLABLE GYAE\r\n\t\t0xAC70 == code || // Lo HANGUL SYLLABLE GEO\r\n\t\t0xAC8C == code || // Lo HANGUL SYLLABLE GE\r\n\t\t0xACA8 == code || // Lo HANGUL SYLLABLE GYEO\r\n\t\t0xACC4 == code || // Lo HANGUL SYLLABLE GYE\r\n\t\t0xACE0 == code || // Lo HANGUL SYLLABLE GO\r\n\t\t0xACFC == code || // Lo HANGUL SYLLABLE GWA\r\n\t\t0xAD18 == code || // Lo HANGUL SYLLABLE GWAE\r\n\t\t0xAD34 == code || // Lo HANGUL SYLLABLE GOE\r\n\t\t0xAD50 == code || // Lo HANGUL SYLLABLE GYO\r\n\t\t0xAD6C == code || // Lo HANGUL SYLLABLE GU\r\n\t\t0xAD88 == code || // Lo HANGUL SYLLABLE GWEO\r\n\t\t0xADA4 == code || // Lo HANGUL SYLLABLE GWE\r\n\t\t0xADC0 == code || // Lo HANGUL SYLLABLE GWI\r\n\t\t0xADDC == code || // Lo HANGUL SYLLABLE GYU\r\n\t\t0xADF8 == code || // Lo HANGUL SYLLABLE GEU\r\n\t\t0xAE14 == code || // Lo HANGUL SYLLABLE GYI\r\n\t\t0xAE30 == code || // Lo HANGUL SYLLABLE GI\r\n\t\t0xAE4C == code || // Lo HANGUL SYLLABLE GGA\r\n\t\t0xAE68 == code || // Lo HANGUL SYLLABLE GGAE\r\n\t\t0xAE84 == code || // Lo HANGUL SYLLABLE GGYA\r\n\t\t0xAEA0 == code || // Lo HANGUL SYLLABLE GGYAE\r\n\t\t0xAEBC == code || // Lo HANGUL SYLLABLE GGEO\r\n\t\t0xAED8 == code || // Lo HANGUL SYLLABLE GGE\r\n\t\t0xAEF4 == code || // Lo HANGUL SYLLABLE GGYEO\r\n\t\t0xAF10 == code || // Lo HANGUL SYLLABLE GGYE\r\n\t\t0xAF2C == code || // Lo HANGUL SYLLABLE GGO\r\n\t\t0xAF48 == code || // Lo HANGUL SYLLABLE GGWA\r\n\t\t0xAF64 == code || // Lo HANGUL SYLLABLE GGWAE\r\n\t\t0xAF80 == code || // Lo HANGUL SYLLABLE GGOE\r\n\t\t0xAF9C == code || // Lo HANGUL SYLLABLE GGYO\r\n\t\t0xAFB8 == code || // Lo HANGUL SYLLABLE GGU\r\n\t\t0xAFD4 == code || // Lo HANGUL SYLLABLE GGWEO\r\n\t\t0xAFF0 == code || // Lo HANGUL SYLLABLE GGWE\r\n\t\t0xB00C == code || // Lo HANGUL SYLLABLE GGWI\r\n\t\t0xB028 == code || // Lo HANGUL SYLLABLE GGYU\r\n\t\t0xB044 == code || // Lo HANGUL SYLLABLE GGEU\r\n\t\t0xB060 == code || // Lo HANGUL SYLLABLE GGYI\r\n\t\t0xB07C == code || // Lo HANGUL SYLLABLE GGI\r\n\t\t0xB098 == code || // Lo HANGUL SYLLABLE NA\r\n\t\t0xB0B4 == code || // Lo HANGUL SYLLABLE NAE\r\n\t\t0xB0D0 == code || // Lo HANGUL SYLLABLE NYA\r\n\t\t0xB0EC == code || // Lo HANGUL SYLLABLE NYAE\r\n\t\t0xB108 == code || // Lo HANGUL SYLLABLE NEO\r\n\t\t0xB124 == code || // Lo HANGUL SYLLABLE NE\r\n\t\t0xB140 == code || // Lo HANGUL SYLLABLE NYEO\r\n\t\t0xB15C == code || // Lo HANGUL SYLLABLE NYE\r\n\t\t0xB178 == code || // Lo HANGUL SYLLABLE NO\r\n\t\t0xB194 == code || // Lo HANGUL SYLLABLE NWA\r\n\t\t0xB1B0 == code || // Lo HANGUL SYLLABLE NWAE\r\n\t\t0xB1CC == code || // Lo HANGUL SYLLABLE NOE\r\n\t\t0xB1E8 == code || // Lo HANGUL SYLLABLE NYO\r\n\t\t0xB204 == code || // Lo HANGUL SYLLABLE NU\r\n\t\t0xB220 == code || // Lo HANGUL SYLLABLE NWEO\r\n\t\t0xB23C == code || // Lo HANGUL SYLLABLE NWE\r\n\t\t0xB258 == code || // Lo HANGUL SYLLABLE NWI\r\n\t\t0xB274 == code || // Lo HANGUL SYLLABLE NYU\r\n\t\t0xB290 == code || // Lo HANGUL SYLLABLE NEU\r\n\t\t0xB2AC == code || // Lo HANGUL SYLLABLE NYI\r\n\t\t0xB2C8 == code || // Lo HANGUL SYLLABLE NI\r\n\t\t0xB2E4 == code || // Lo HANGUL SYLLABLE DA\r\n\t\t0xB300 == code || // Lo HANGUL SYLLABLE DAE\r\n\t\t0xB31C == code || // Lo HANGUL SYLLABLE DYA\r\n\t\t0xB338 == code || // Lo HANGUL SYLLABLE DYAE\r\n\t\t0xB354 == code || // Lo HANGUL SYLLABLE DEO\r\n\t\t0xB370 == code || // Lo HANGUL SYLLABLE DE\r\n\t\t0xB38C == code || // Lo HANGUL SYLLABLE DYEO\r\n\t\t0xB3A8 == code || // Lo HANGUL SYLLABLE DYE\r\n\t\t0xB3C4 == code || // Lo HANGUL SYLLABLE DO\r\n\t\t0xB3E0 == code || // Lo HANGUL SYLLABLE DWA\r\n\t\t0xB3FC == code || // Lo HANGUL SYLLABLE DWAE\r\n\t\t0xB418 == code || // Lo HANGUL SYLLABLE DOE\r\n\t\t0xB434 == code || // Lo HANGUL SYLLABLE DYO\r\n\t\t0xB450 == code || // Lo HANGUL SYLLABLE DU\r\n\t\t0xB46C == code || // Lo HANGUL SYLLABLE DWEO\r\n\t\t0xB488 == code || // Lo HANGUL SYLLABLE DWE\r\n\t\t0xB4A4 == code || // Lo HANGUL SYLLABLE DWI\r\n\t\t0xB4C0 == code || // Lo HANGUL SYLLABLE DYU\r\n\t\t0xB4DC == code || // Lo HANGUL SYLLABLE DEU\r\n\t\t0xB4F8 == code || // Lo HANGUL SYLLABLE DYI\r\n\t\t0xB514 == code || // Lo HANGUL SYLLABLE DI\r\n\t\t0xB530 == code || // Lo HANGUL SYLLABLE DDA\r\n\t\t0xB54C == code || // Lo HANGUL SYLLABLE DDAE\r\n\t\t0xB568 == code || // Lo HANGUL SYLLABLE DDYA\r\n\t\t0xB584 == code || // Lo HANGUL SYLLABLE DDYAE\r\n\t\t0xB5A0 == code || // Lo HANGUL SYLLABLE DDEO\r\n\t\t0xB5BC == code || // Lo HANGUL SYLLABLE DDE\r\n\t\t0xB5D8 == code || // Lo HANGUL SYLLABLE DDYEO\r\n\t\t0xB5F4 == code || // Lo HANGUL SYLLABLE DDYE\r\n\t\t0xB610 == code || // Lo HANGUL SYLLABLE DDO\r\n\t\t0xB62C == code || // Lo HANGUL SYLLABLE DDWA\r\n\t\t0xB648 == code || // Lo HANGUL SYLLABLE DDWAE\r\n\t\t0xB664 == code || // Lo HANGUL SYLLABLE DDOE\r\n\t\t0xB680 == code || // Lo HANGUL SYLLABLE DDYO\r\n\t\t0xB69C == code || // Lo HANGUL SYLLABLE DDU\r\n\t\t0xB6B8 == code || // Lo HANGUL SYLLABLE DDWEO\r\n\t\t0xB6D4 == code || // Lo HANGUL SYLLABLE DDWE\r\n\t\t0xB6F0 == code || // Lo HANGUL SYLLABLE DDWI\r\n\t\t0xB70C == code || // Lo HANGUL SYLLABLE DDYU\r\n\t\t0xB728 == code || // Lo HANGUL SYLLABLE DDEU\r\n\t\t0xB744 == code || // Lo HANGUL SYLLABLE DDYI\r\n\t\t0xB760 == code || // Lo HANGUL SYLLABLE DDI\r\n\t\t0xB77C == code || // Lo HANGUL SYLLABLE RA\r\n\t\t0xB798 == code || // Lo HANGUL SYLLABLE RAE\r\n\t\t0xB7B4 == code || // Lo HANGUL SYLLABLE RYA\r\n\t\t0xB7D0 == code || // Lo HANGUL SYLLABLE RYAE\r\n\t\t0xB7EC == code || // Lo HANGUL SYLLABLE REO\r\n\t\t0xB808 == code || // Lo HANGUL SYLLABLE RE\r\n\t\t0xB824 == code || // Lo HANGUL SYLLABLE RYEO\r\n\t\t0xB840 == code || // Lo HANGUL SYLLABLE RYE\r\n\t\t0xB85C == code || // Lo HANGUL SYLLABLE RO\r\n\t\t0xB878 == code || // Lo HANGUL SYLLABLE RWA\r\n\t\t0xB894 == code || // Lo HANGUL SYLLABLE RWAE\r\n\t\t0xB8B0 == code || // Lo HANGUL SYLLABLE ROE\r\n\t\t0xB8CC == code || // Lo HANGUL SYLLABLE RYO\r\n\t\t0xB8E8 == code || // Lo HANGUL SYLLABLE RU\r\n\t\t0xB904 == code || // Lo HANGUL SYLLABLE RWEO\r\n\t\t0xB920 == code || // Lo HANGUL SYLLABLE RWE\r\n\t\t0xB93C == code || // Lo HANGUL SYLLABLE RWI\r\n\t\t0xB958 == code || // Lo HANGUL SYLLABLE RYU\r\n\t\t0xB974 == code || // Lo HANGUL SYLLABLE REU\r\n\t\t0xB990 == code || // Lo HANGUL SYLLABLE RYI\r\n\t\t0xB9AC == code || // Lo HANGUL SYLLABLE RI\r\n\t\t0xB9C8 == code || // Lo HANGUL SYLLABLE MA\r\n\t\t0xB9E4 == code || // Lo HANGUL SYLLABLE MAE\r\n\t\t0xBA00 == code || // Lo HANGUL SYLLABLE MYA\r\n\t\t0xBA1C == code || // Lo HANGUL SYLLABLE MYAE\r\n\t\t0xBA38 == code || // Lo HANGUL SYLLABLE MEO\r\n\t\t0xBA54 == code || // Lo HANGUL SYLLABLE ME\r\n\t\t0xBA70 == code || // Lo HANGUL SYLLABLE MYEO\r\n\t\t0xBA8C == code || // Lo HANGUL SYLLABLE MYE\r\n\t\t0xBAA8 == code || // Lo HANGUL SYLLABLE MO\r\n\t\t0xBAC4 == code || // Lo HANGUL SYLLABLE MWA\r\n\t\t0xBAE0 == code || // Lo HANGUL SYLLABLE MWAE\r\n\t\t0xBAFC == code || // Lo HANGUL SYLLABLE MOE\r\n\t\t0xBB18 == code || // Lo HANGUL SYLLABLE MYO\r\n\t\t0xBB34 == code || // Lo HANGUL SYLLABLE MU\r\n\t\t0xBB50 == code || // Lo HANGUL SYLLABLE MWEO\r\n\t\t0xBB6C == code || // Lo HANGUL SYLLABLE MWE\r\n\t\t0xBB88 == code || // Lo HANGUL SYLLABLE MWI\r\n\t\t0xBBA4 == code || // Lo HANGUL SYLLABLE MYU\r\n\t\t0xBBC0 == code || // Lo HANGUL SYLLABLE MEU\r\n\t\t0xBBDC == code || // Lo HANGUL SYLLABLE MYI\r\n\t\t0xBBF8 == code || // Lo HANGUL SYLLABLE MI\r\n\t\t0xBC14 == code || // Lo HANGUL SYLLABLE BA\r\n\t\t0xBC30 == code || // Lo HANGUL SYLLABLE BAE\r\n\t\t0xBC4C == code || // Lo HANGUL SYLLABLE BYA\r\n\t\t0xBC68 == code || // Lo HANGUL SYLLABLE BYAE\r\n\t\t0xBC84 == code || // Lo HANGUL SYLLABLE BEO\r\n\t\t0xBCA0 == code || // Lo HANGUL SYLLABLE BE\r\n\t\t0xBCBC == code || // Lo HANGUL SYLLABLE BYEO\r\n\t\t0xBCD8 == code || // Lo HANGUL SYLLABLE BYE\r\n\t\t0xBCF4 == code || // Lo HANGUL SYLLABLE BO\r\n\t\t0xBD10 == code || // Lo HANGUL SYLLABLE BWA\r\n\t\t0xBD2C == code || // Lo HANGUL SYLLABLE BWAE\r\n\t\t0xBD48 == code || // Lo HANGUL SYLLABLE BOE\r\n\t\t0xBD64 == code || // Lo HANGUL SYLLABLE BYO\r\n\t\t0xBD80 == code || // Lo HANGUL SYLLABLE BU\r\n\t\t0xBD9C == code || // Lo HANGUL SYLLABLE BWEO\r\n\t\t0xBDB8 == code || // Lo HANGUL SYLLABLE BWE\r\n\t\t0xBDD4 == code || // Lo HANGUL SYLLABLE BWI\r\n\t\t0xBDF0 == code || // Lo HANGUL SYLLABLE BYU\r\n\t\t0xBE0C == code || // Lo HANGUL SYLLABLE BEU\r\n\t\t0xBE28 == code || // Lo HANGUL SYLLABLE BYI\r\n\t\t0xBE44 == code || // Lo HANGUL SYLLABLE BI\r\n\t\t0xBE60 == code || // Lo HANGUL SYLLABLE BBA\r\n\t\t0xBE7C == code || // Lo HANGUL SYLLABLE BBAE\r\n\t\t0xBE98 == code || // Lo HANGUL SYLLABLE BBYA\r\n\t\t0xBEB4 == code || // Lo HANGUL SYLLABLE BBYAE\r\n\t\t0xBED0 == code || // Lo HANGUL SYLLABLE BBEO\r\n\t\t0xBEEC == code || // Lo HANGUL SYLLABLE BBE\r\n\t\t0xBF08 == code || // Lo HANGUL SYLLABLE BBYEO\r\n\t\t0xBF24 == code || // Lo HANGUL SYLLABLE BBYE\r\n\t\t0xBF40 == code || // Lo HANGUL SYLLABLE BBO\r\n\t\t0xBF5C == code || // Lo HANGUL SYLLABLE BBWA\r\n\t\t0xBF78 == code || // Lo HANGUL SYLLABLE BBWAE\r\n\t\t0xBF94 == code || // Lo HANGUL SYLLABLE BBOE\r\n\t\t0xBFB0 == code || // Lo HANGUL SYLLABLE BBYO\r\n\t\t0xBFCC == code || // Lo HANGUL SYLLABLE BBU\r\n\t\t0xBFE8 == code || // Lo HANGUL SYLLABLE BBWEO\r\n\t\t0xC004 == code || // Lo HANGUL SYLLABLE BBWE\r\n\t\t0xC020 == code || // Lo HANGUL SYLLABLE BBWI\r\n\t\t0xC03C == code || // Lo HANGUL SYLLABLE BBYU\r\n\t\t0xC058 == code || // Lo HANGUL SYLLABLE BBEU\r\n\t\t0xC074 == code || // Lo HANGUL SYLLABLE BBYI\r\n\t\t0xC090 == code || // Lo HANGUL SYLLABLE BBI\r\n\t\t0xC0AC == code || // Lo HANGUL SYLLABLE SA\r\n\t\t0xC0C8 == code || // Lo HANGUL SYLLABLE SAE\r\n\t\t0xC0E4 == code || // Lo HANGUL SYLLABLE SYA\r\n\t\t0xC100 == code || // Lo HANGUL SYLLABLE SYAE\r\n\t\t0xC11C == code || // Lo HANGUL SYLLABLE SEO\r\n\t\t0xC138 == code || // Lo HANGUL SYLLABLE SE\r\n\t\t0xC154 == code || // Lo HANGUL SYLLABLE SYEO\r\n\t\t0xC170 == code || // Lo HANGUL SYLLABLE SYE\r\n\t\t0xC18C == code || // Lo HANGUL SYLLABLE SO\r\n\t\t0xC1A8 == code || // Lo HANGUL SYLLABLE SWA\r\n\t\t0xC1C4 == code || // Lo HANGUL SYLLABLE SWAE\r\n\t\t0xC1E0 == code || // Lo HANGUL SYLLABLE SOE\r\n\t\t0xC1FC == code || // Lo HANGUL SYLLABLE SYO\r\n\t\t0xC218 == code || // Lo HANGUL SYLLABLE SU\r\n\t\t0xC234 == code || // Lo HANGUL SYLLABLE SWEO\r\n\t\t0xC250 == code || // Lo HANGUL SYLLABLE SWE\r\n\t\t0xC26C == code || // Lo HANGUL SYLLABLE SWI\r\n\t\t0xC288 == code || // Lo HANGUL SYLLABLE SYU\r\n\t\t0xC2A4 == code || // Lo HANGUL SYLLABLE SEU\r\n\t\t0xC2C0 == code || // Lo HANGUL SYLLABLE SYI\r\n\t\t0xC2DC == code || // Lo HANGUL SYLLABLE SI\r\n\t\t0xC2F8 == code || // Lo HANGUL SYLLABLE SSA\r\n\t\t0xC314 == code || // Lo HANGUL SYLLABLE SSAE\r\n\t\t0xC330 == code || // Lo HANGUL SYLLABLE SSYA\r\n\t\t0xC34C == code || // Lo HANGUL SYLLABLE SSYAE\r\n\t\t0xC368 == code || // Lo HANGUL SYLLABLE SSEO\r\n\t\t0xC384 == code || // Lo HANGUL SYLLABLE SSE\r\n\t\t0xC3A0 == code || // Lo HANGUL SYLLABLE SSYEO\r\n\t\t0xC3BC == code || // Lo HANGUL SYLLABLE SSYE\r\n\t\t0xC3D8 == code || // Lo HANGUL SYLLABLE SSO\r\n\t\t0xC3F4 == code || // Lo HANGUL SYLLABLE SSWA\r\n\t\t0xC410 == code || // Lo HANGUL SYLLABLE SSWAE\r\n\t\t0xC42C == code || // Lo HANGUL SYLLABLE SSOE\r\n\t\t0xC448 == code || // Lo HANGUL SYLLABLE SSYO\r\n\t\t0xC464 == code || // Lo HANGUL SYLLABLE SSU\r\n\t\t0xC480 == code || // Lo HANGUL SYLLABLE SSWEO\r\n\t\t0xC49C == code || // Lo HANGUL SYLLABLE SSWE\r\n\t\t0xC4B8 == code || // Lo HANGUL SYLLABLE SSWI\r\n\t\t0xC4D4 == code || // Lo HANGUL SYLLABLE SSYU\r\n\t\t0xC4F0 == code || // Lo HANGUL SYLLABLE SSEU\r\n\t\t0xC50C == code || // Lo HANGUL SYLLABLE SSYI\r\n\t\t0xC528 == code || // Lo HANGUL SYLLABLE SSI\r\n\t\t0xC544 == code || // Lo HANGUL SYLLABLE A\r\n\t\t0xC560 == code || // Lo HANGUL SYLLABLE AE\r\n\t\t0xC57C == code || // Lo HANGUL SYLLABLE YA\r\n\t\t0xC598 == code || // Lo HANGUL SYLLABLE YAE\r\n\t\t0xC5B4 == code || // Lo HANGUL SYLLABLE EO\r\n\t\t0xC5D0 == code || // Lo HANGUL SYLLABLE E\r\n\t\t0xC5EC == code || // Lo HANGUL SYLLABLE YEO\r\n\t\t0xC608 == code || // Lo HANGUL SYLLABLE YE\r\n\t\t0xC624 == code || // Lo HANGUL SYLLABLE O\r\n\t\t0xC640 == code || // Lo HANGUL SYLLABLE WA\r\n\t\t0xC65C == code || // Lo HANGUL SYLLABLE WAE\r\n\t\t0xC678 == code || // Lo HANGUL SYLLABLE OE\r\n\t\t0xC694 == code || // Lo HANGUL SYLLABLE YO\r\n\t\t0xC6B0 == code || // Lo HANGUL SYLLABLE U\r\n\t\t0xC6CC == code || // Lo HANGUL SYLLABLE WEO\r\n\t\t0xC6E8 == code || // Lo HANGUL SYLLABLE WE\r\n\t\t0xC704 == code || // Lo HANGUL SYLLABLE WI\r\n\t\t0xC720 == code || // Lo HANGUL SYLLABLE YU\r\n\t\t0xC73C == code || // Lo HANGUL SYLLABLE EU\r\n\t\t0xC758 == code || // Lo HANGUL SYLLABLE YI\r\n\t\t0xC774 == code || // Lo HANGUL SYLLABLE I\r\n\t\t0xC790 == code || // Lo HANGUL SYLLABLE JA\r\n\t\t0xC7AC == code || // Lo HANGUL SYLLABLE JAE\r\n\t\t0xC7C8 == code || // Lo HANGUL SYLLABLE JYA\r\n\t\t0xC7E4 == code || // Lo HANGUL SYLLABLE JYAE\r\n\t\t0xC800 == code || // Lo HANGUL SYLLABLE JEO\r\n\t\t0xC81C == code || // Lo HANGUL SYLLABLE JE\r\n\t\t0xC838 == code || // Lo HANGUL SYLLABLE JYEO\r\n\t\t0xC854 == code || // Lo HANGUL SYLLABLE JYE\r\n\t\t0xC870 == code || // Lo HANGUL SYLLABLE JO\r\n\t\t0xC88C == code || // Lo HANGUL SYLLABLE JWA\r\n\t\t0xC8A8 == code || // Lo HANGUL SYLLABLE JWAE\r\n\t\t0xC8C4 == code || // Lo HANGUL SYLLABLE JOE\r\n\t\t0xC8E0 == code || // Lo HANGUL SYLLABLE JYO\r\n\t\t0xC8FC == code || // Lo HANGUL SYLLABLE JU\r\n\t\t0xC918 == code || // Lo HANGUL SYLLABLE JWEO\r\n\t\t0xC934 == code || // Lo HANGUL SYLLABLE JWE\r\n\t\t0xC950 == code || // Lo HANGUL SYLLABLE JWI\r\n\t\t0xC96C == code || // Lo HANGUL SYLLABLE JYU\r\n\t\t0xC988 == code || // Lo HANGUL SYLLABLE JEU\r\n\t\t0xC9A4 == code || // Lo HANGUL SYLLABLE JYI\r\n\t\t0xC9C0 == code || // Lo HANGUL SYLLABLE JI\r\n\t\t0xC9DC == code || // Lo HANGUL SYLLABLE JJA\r\n\t\t0xC9F8 == code || // Lo HANGUL SYLLABLE JJAE\r\n\t\t0xCA14 == code || // Lo HANGUL SYLLABLE JJYA\r\n\t\t0xCA30 == code || // Lo HANGUL SYLLABLE JJYAE\r\n\t\t0xCA4C == code || // Lo HANGUL SYLLABLE JJEO\r\n\t\t0xCA68 == code || // Lo HANGUL SYLLABLE JJE\r\n\t\t0xCA84 == code || // Lo HANGUL SYLLABLE JJYEO\r\n\t\t0xCAA0 == code || // Lo HANGUL SYLLABLE JJYE\r\n\t\t0xCABC == code || // Lo HANGUL SYLLABLE JJO\r\n\t\t0xCAD8 == code || // Lo HANGUL SYLLABLE JJWA\r\n\t\t0xCAF4 == code || // Lo HANGUL SYLLABLE JJWAE\r\n\t\t0xCB10 == code || // Lo HANGUL SYLLABLE JJOE\r\n\t\t0xCB2C == code || // Lo HANGUL SYLLABLE JJYO\r\n\t\t0xCB48 == code || // Lo HANGUL SYLLABLE JJU\r\n\t\t0xCB64 == code || // Lo HANGUL SYLLABLE JJWEO\r\n\t\t0xCB80 == code || // Lo HANGUL SYLLABLE JJWE\r\n\t\t0xCB9C == code || // Lo HANGUL SYLLABLE JJWI\r\n\t\t0xCBB8 == code || // Lo HANGUL SYLLABLE JJYU\r\n\t\t0xCBD4 == code || // Lo HANGUL SYLLABLE JJEU\r\n\t\t0xCBF0 == code || // Lo HANGUL SYLLABLE JJYI\r\n\t\t0xCC0C == code || // Lo HANGUL SYLLABLE JJI\r\n\t\t0xCC28 == code || // Lo HANGUL SYLLABLE CA\r\n\t\t0xCC44 == code || // Lo HANGUL SYLLABLE CAE\r\n\t\t0xCC60 == code || // Lo HANGUL SYLLABLE CYA\r\n\t\t0xCC7C == code || // Lo HANGUL SYLLABLE CYAE\r\n\t\t0xCC98 == code || // Lo HANGUL SYLLABLE CEO\r\n\t\t0xCCB4 == code || // Lo HANGUL SYLLABLE CE\r\n\t\t0xCCD0 == code || // Lo HANGUL SYLLABLE CYEO\r\n\t\t0xCCEC == code || // Lo HANGUL SYLLABLE CYE\r\n\t\t0xCD08 == code || // Lo HANGUL SYLLABLE CO\r\n\t\t0xCD24 == code || // Lo HANGUL SYLLABLE CWA\r\n\t\t0xCD40 == code || // Lo HANGUL SYLLABLE CWAE\r\n\t\t0xCD5C == code || // Lo HANGUL SYLLABLE COE\r\n\t\t0xCD78 == code || // Lo HANGUL SYLLABLE CYO\r\n\t\t0xCD94 == code || // Lo HANGUL SYLLABLE CU\r\n\t\t0xCDB0 == code || // Lo HANGUL SYLLABLE CWEO\r\n\t\t0xCDCC == code || // Lo HANGUL SYLLABLE CWE\r\n\t\t0xCDE8 == code || // Lo HANGUL SYLLABLE CWI\r\n\t\t0xCE04 == code || // Lo HANGUL SYLLABLE CYU\r\n\t\t0xCE20 == code || // Lo HANGUL SYLLABLE CEU\r\n\t\t0xCE3C == code || // Lo HANGUL SYLLABLE CYI\r\n\t\t0xCE58 == code || // Lo HANGUL SYLLABLE CI\r\n\t\t0xCE74 == code || // Lo HANGUL SYLLABLE KA\r\n\t\t0xCE90 == code || // Lo HANGUL SYLLABLE KAE\r\n\t\t0xCEAC == code || // Lo HANGUL SYLLABLE KYA\r\n\t\t0xCEC8 == code || // Lo HANGUL SYLLABLE KYAE\r\n\t\t0xCEE4 == code || // Lo HANGUL SYLLABLE KEO\r\n\t\t0xCF00 == code || // Lo HANGUL SYLLABLE KE\r\n\t\t0xCF1C == code || // Lo HANGUL SYLLABLE KYEO\r\n\t\t0xCF38 == code || // Lo HANGUL SYLLABLE KYE\r\n\t\t0xCF54 == code || // Lo HANGUL SYLLABLE KO\r\n\t\t0xCF70 == code || // Lo HANGUL SYLLABLE KWA\r\n\t\t0xCF8C == code || // Lo HANGUL SYLLABLE KWAE\r\n\t\t0xCFA8 == code || // Lo HANGUL SYLLABLE KOE\r\n\t\t0xCFC4 == code || // Lo HANGUL SYLLABLE KYO\r\n\t\t0xCFE0 == code || // Lo HANGUL SYLLABLE KU\r\n\t\t0xCFFC == code || // Lo HANGUL SYLLABLE KWEO\r\n\t\t0xD018 == code || // Lo HANGUL SYLLABLE KWE\r\n\t\t0xD034 == code || // Lo HANGUL SYLLABLE KWI\r\n\t\t0xD050 == code || // Lo HANGUL SYLLABLE KYU\r\n\t\t0xD06C == code || // Lo HANGUL SYLLABLE KEU\r\n\t\t0xD088 == code || // Lo HANGUL SYLLABLE KYI\r\n\t\t0xD0A4 == code || // Lo HANGUL SYLLABLE KI\r\n\t\t0xD0C0 == code || // Lo HANGUL SYLLABLE TA\r\n\t\t0xD0DC == code || // Lo HANGUL SYLLABLE TAE\r\n\t\t0xD0F8 == code || // Lo HANGUL SYLLABLE TYA\r\n\t\t0xD114 == code || // Lo HANGUL SYLLABLE TYAE\r\n\t\t0xD130 == code || // Lo HANGUL SYLLABLE TEO\r\n\t\t0xD14C == code || // Lo HANGUL SYLLABLE TE\r\n\t\t0xD168 == code || // Lo HANGUL SYLLABLE TYEO\r\n\t\t0xD184 == code || // Lo HANGUL SYLLABLE TYE\r\n\t\t0xD1A0 == code || // Lo HANGUL SYLLABLE TO\r\n\t\t0xD1BC == code || // Lo HANGUL SYLLABLE TWA\r\n\t\t0xD1D8 == code || // Lo HANGUL SYLLABLE TWAE\r\n\t\t0xD1F4 == code || // Lo HANGUL SYLLABLE TOE\r\n\t\t0xD210 == code || // Lo HANGUL SYLLABLE TYO\r\n\t\t0xD22C == code || // Lo HANGUL SYLLABLE TU\r\n\t\t0xD248 == code || // Lo HANGUL SYLLABLE TWEO\r\n\t\t0xD264 == code || // Lo HANGUL SYLLABLE TWE\r\n\t\t0xD280 == code || // Lo HANGUL SYLLABLE TWI\r\n\t\t0xD29C == code || // Lo HANGUL SYLLABLE TYU\r\n\t\t0xD2B8 == code || // Lo HANGUL SYLLABLE TEU\r\n\t\t0xD2D4 == code || // Lo HANGUL SYLLABLE TYI\r\n\t\t0xD2F0 == code || // Lo HANGUL SYLLABLE TI\r\n\t\t0xD30C == code || // Lo HANGUL SYLLABLE PA\r\n\t\t0xD328 == code || // Lo HANGUL SYLLABLE PAE\r\n\t\t0xD344 == code || // Lo HANGUL SYLLABLE PYA\r\n\t\t0xD360 == code || // Lo HANGUL SYLLABLE PYAE\r\n\t\t0xD37C == code || // Lo HANGUL SYLLABLE PEO\r\n\t\t0xD398 == code || // Lo HANGUL SYLLABLE PE\r\n\t\t0xD3B4 == code || // Lo HANGUL SYLLABLE PYEO\r\n\t\t0xD3D0 == code || // Lo HANGUL SYLLABLE PYE\r\n\t\t0xD3EC == code || // Lo HANGUL SYLLABLE PO\r\n\t\t0xD408 == code || // Lo HANGUL SYLLABLE PWA\r\n\t\t0xD424 == code || // Lo HANGUL SYLLABLE PWAE\r\n\t\t0xD440 == code || // Lo HANGUL SYLLABLE POE\r\n\t\t0xD45C == code || // Lo HANGUL SYLLABLE PYO\r\n\t\t0xD478 == code || // Lo HANGUL SYLLABLE PU\r\n\t\t0xD494 == code || // Lo HANGUL SYLLABLE PWEO\r\n\t\t0xD4B0 == code || // Lo HANGUL SYLLABLE PWE\r\n\t\t0xD4CC == code || // Lo HANGUL SYLLABLE PWI\r\n\t\t0xD4E8 == code || // Lo HANGUL SYLLABLE PYU\r\n\t\t0xD504 == code || // Lo HANGUL SYLLABLE PEU\r\n\t\t0xD520 == code || // Lo HANGUL SYLLABLE PYI\r\n\t\t0xD53C == code || // Lo HANGUL SYLLABLE PI\r\n\t\t0xD558 == code || // Lo HANGUL SYLLABLE HA\r\n\t\t0xD574 == code || // Lo HANGUL SYLLABLE HAE\r\n\t\t0xD590 == code || // Lo HANGUL SYLLABLE HYA\r\n\t\t0xD5AC == code || // Lo HANGUL SYLLABLE HYAE\r\n\t\t0xD5C8 == code || // Lo HANGUL SYLLABLE HEO\r\n\t\t0xD5E4 == code || // Lo HANGUL SYLLABLE HE\r\n\t\t0xD600 == code || // Lo HANGUL SYLLABLE HYEO\r\n\t\t0xD61C == code || // Lo HANGUL SYLLABLE HYE\r\n\t\t0xD638 == code || // Lo HANGUL SYLLABLE HO\r\n\t\t0xD654 == code || // Lo HANGUL SYLLABLE HWA\r\n\t\t0xD670 == code || // Lo HANGUL SYLLABLE HWAE\r\n\t\t0xD68C == code || // Lo HANGUL SYLLABLE HOE\r\n\t\t0xD6A8 == code || // Lo HANGUL SYLLABLE HYO\r\n\t\t0xD6C4 == code || // Lo HANGUL SYLLABLE HU\r\n\t\t0xD6E0 == code || // Lo HANGUL SYLLABLE HWEO\r\n\t\t0xD6FC == code || // Lo HANGUL SYLLABLE HWE\r\n\t\t0xD718 == code || // Lo HANGUL SYLLABLE HWI\r\n\t\t0xD734 == code || // Lo HANGUL SYLLABLE HYU\r\n\t\t0xD750 == code || // Lo HANGUL SYLLABLE HEU\r\n\t\t0xD76C == code || // Lo HANGUL SYLLABLE HYI\r\n\t\t0xD788 == code // Lo HANGUL SYLLABLE HI\r\n\t\t){\r\n\t\t\treturn LV;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t(0xAC01 <= code && code <= 0xAC1B) || // Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH\r\n\t\t(0xAC1D <= code && code <= 0xAC37) || // Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH\r\n\t\t(0xAC39 <= code && code <= 0xAC53) || // Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH\r\n\t\t(0xAC55 <= code && code <= 0xAC6F) || // Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH\r\n\t\t(0xAC71 <= code && code <= 0xAC8B) || // Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH\r\n\t\t(0xAC8D <= code && code <= 0xACA7) || // Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH\r\n\t\t(0xACA9 <= code && code <= 0xACC3) || // Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH\r\n\t\t(0xACC5 <= code && code <= 0xACDF) || // Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH\r\n\t\t(0xACE1 <= code && code <= 0xACFB) || // Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH\r\n\t\t(0xACFD <= code && code <= 0xAD17) || // Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH\r\n\t\t(0xAD19 <= code && code <= 0xAD33) || // Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH\r\n\t\t(0xAD35 <= code && code <= 0xAD4F) || // Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH\r\n\t\t(0xAD51 <= code && code <= 0xAD6B) || // Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH\r\n\t\t(0xAD6D <= code && code <= 0xAD87) || // Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH\r\n\t\t(0xAD89 <= code && code <= 0xADA3) || // Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH\r\n\t\t(0xADA5 <= code && code <= 0xADBF) || // Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH\r\n\t\t(0xADC1 <= code && code <= 0xADDB) || // Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH\r\n\t\t(0xADDD <= code && code <= 0xADF7) || // Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH\r\n\t\t(0xADF9 <= code && code <= 0xAE13) || // Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH\r\n\t\t(0xAE15 <= code && code <= 0xAE2F) || // Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH\r\n\t\t(0xAE31 <= code && code <= 0xAE4B) || // Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH\r\n\t\t(0xAE4D <= code && code <= 0xAE67) || // Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH\r\n\t\t(0xAE69 <= code && code <= 0xAE83) || // Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH\r\n\t\t(0xAE85 <= code && code <= 0xAE9F) || // Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH\r\n\t\t(0xAEA1 <= code && code <= 0xAEBB) || // Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH\r\n\t\t(0xAEBD <= code && code <= 0xAED7) || // Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH\r\n\t\t(0xAED9 <= code && code <= 0xAEF3) || // Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH\r\n\t\t(0xAEF5 <= code && code <= 0xAF0F) || // Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH\r\n\t\t(0xAF11 <= code && code <= 0xAF2B) || // Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH\r\n\t\t(0xAF2D <= code && code <= 0xAF47) || // Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH\r\n\t\t(0xAF49 <= code && code <= 0xAF63) || // Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH\r\n\t\t(0xAF65 <= code && code <= 0xAF7F) || // Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH\r\n\t\t(0xAF81 <= code && code <= 0xAF9B) || // Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH\r\n\t\t(0xAF9D <= code && code <= 0xAFB7) || // Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH\r\n\t\t(0xAFB9 <= code && code <= 0xAFD3) || // Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH\r\n\t\t(0xAFD5 <= code && code <= 0xAFEF) || // Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH\r\n\t\t(0xAFF1 <= code && code <= 0xB00B) || // Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH\r\n\t\t(0xB00D <= code && code <= 0xB027) || // Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH\r\n\t\t(0xB029 <= code && code <= 0xB043) || // Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH\r\n\t\t(0xB045 <= code && code <= 0xB05F) || // Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH\r\n\t\t(0xB061 <= code && code <= 0xB07B) || // Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH\r\n\t\t(0xB07D <= code && code <= 0xB097) || // Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH\r\n\t\t(0xB099 <= code && code <= 0xB0B3) || // Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH\r\n\t\t(0xB0B5 <= code && code <= 0xB0CF) || // Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH\r\n\t\t(0xB0D1 <= code && code <= 0xB0EB) || // Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH\r\n\t\t(0xB0ED <= code && code <= 0xB107) || // Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH\r\n\t\t(0xB109 <= code && code <= 0xB123) || // Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH\r\n\t\t(0xB125 <= code && code <= 0xB13F) || // Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH\r\n\t\t(0xB141 <= code && code <= 0xB15B) || // Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH\r\n\t\t(0xB15D <= code && code <= 0xB177) || // Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH\r\n\t\t(0xB179 <= code && code <= 0xB193) || // Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH\r\n\t\t(0xB195 <= code && code <= 0xB1AF) || // Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH\r\n\t\t(0xB1B1 <= code && code <= 0xB1CB) || // Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH\r\n\t\t(0xB1CD <= code && code <= 0xB1E7) || // Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH\r\n\t\t(0xB1E9 <= code && code <= 0xB203) || // Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH\r\n\t\t(0xB205 <= code && code <= 0xB21F) || // Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH\r\n\t\t(0xB221 <= code && code <= 0xB23B) || // Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH\r\n\t\t(0xB23D <= code && code <= 0xB257) || // Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH\r\n\t\t(0xB259 <= code && code <= 0xB273) || // Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH\r\n\t\t(0xB275 <= code && code <= 0xB28F) || // Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH\r\n\t\t(0xB291 <= code && code <= 0xB2AB) || // Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH\r\n\t\t(0xB2AD <= code && code <= 0xB2C7) || // Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH\r\n\t\t(0xB2C9 <= code && code <= 0xB2E3) || // Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH\r\n\t\t(0xB2E5 <= code && code <= 0xB2FF) || // Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH\r\n\t\t(0xB301 <= code && code <= 0xB31B) || // Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH\r\n\t\t(0xB31D <= code && code <= 0xB337) || // Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH\r\n\t\t(0xB339 <= code && code <= 0xB353) || // Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH\r\n\t\t(0xB355 <= code && code <= 0xB36F) || // Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH\r\n\t\t(0xB371 <= code && code <= 0xB38B) || // Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH\r\n\t\t(0xB38D <= code && code <= 0xB3A7) || // Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH\r\n\t\t(0xB3A9 <= code && code <= 0xB3C3) || // Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH\r\n\t\t(0xB3C5 <= code && code <= 0xB3DF) || // Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH\r\n\t\t(0xB3E1 <= code && code <= 0xB3FB) || // Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH\r\n\t\t(0xB3FD <= code && code <= 0xB417) || // Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH\r\n\t\t(0xB419 <= code && code <= 0xB433) || // Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH\r\n\t\t(0xB435 <= code && code <= 0xB44F) || // Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH\r\n\t\t(0xB451 <= code && code <= 0xB46B) || // Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH\r\n\t\t(0xB46D <= code && code <= 0xB487) || // Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH\r\n\t\t(0xB489 <= code && code <= 0xB4A3) || // Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH\r\n\t\t(0xB4A5 <= code && code <= 0xB4BF) || // Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH\r\n\t\t(0xB4C1 <= code && code <= 0xB4DB) || // Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH\r\n\t\t(0xB4DD <= code && code <= 0xB4F7) || // Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH\r\n\t\t(0xB4F9 <= code && code <= 0xB513) || // Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH\r\n\t\t(0xB515 <= code && code <= 0xB52F) || // Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH\r\n\t\t(0xB531 <= code && code <= 0xB54B) || // Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH\r\n\t\t(0xB54D <= code && code <= 0xB567) || // Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH\r\n\t\t(0xB569 <= code && code <= 0xB583) || // Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH\r\n\t\t(0xB585 <= code && code <= 0xB59F) || // Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH\r\n\t\t(0xB5A1 <= code && code <= 0xB5BB) || // Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH\r\n\t\t(0xB5BD <= code && code <= 0xB5D7) || // Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH\r\n\t\t(0xB5D9 <= code && code <= 0xB5F3) || // Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH\r\n\t\t(0xB5F5 <= code && code <= 0xB60F) || // Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH\r\n\t\t(0xB611 <= code && code <= 0xB62B) || // Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH\r\n\t\t(0xB62D <= code && code <= 0xB647) || // Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH\r\n\t\t(0xB649 <= code && code <= 0xB663) || // Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH\r\n\t\t(0xB665 <= code && code <= 0xB67F) || // Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH\r\n\t\t(0xB681 <= code && code <= 0xB69B) || // Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH\r\n\t\t(0xB69D <= code && code <= 0xB6B7) || // Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH\r\n\t\t(0xB6B9 <= code && code <= 0xB6D3) || // Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH\r\n\t\t(0xB6D5 <= code && code <= 0xB6EF) || // Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH\r\n\t\t(0xB6F1 <= code && code <= 0xB70B) || // Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH\r\n\t\t(0xB70D <= code && code <= 0xB727) || // Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH\r\n\t\t(0xB729 <= code && code <= 0xB743) || // Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH\r\n\t\t(0xB745 <= code && code <= 0xB75F) || // Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH\r\n\t\t(0xB761 <= code && code <= 0xB77B) || // Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH\r\n\t\t(0xB77D <= code && code <= 0xB797) || // Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH\r\n\t\t(0xB799 <= code && code <= 0xB7B3) || // Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH\r\n\t\t(0xB7B5 <= code && code <= 0xB7CF) || // Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH\r\n\t\t(0xB7D1 <= code && code <= 0xB7EB) || // Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH\r\n\t\t(0xB7ED <= code && code <= 0xB807) || // Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH\r\n\t\t(0xB809 <= code && code <= 0xB823) || // Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH\r\n\t\t(0xB825 <= code && code <= 0xB83F) || // Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH\r\n\t\t(0xB841 <= code && code <= 0xB85B) || // Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH\r\n\t\t(0xB85D <= code && code <= 0xB877) || // Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH\r\n\t\t(0xB879 <= code && code <= 0xB893) || // Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH\r\n\t\t(0xB895 <= code && code <= 0xB8AF) || // Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH\r\n\t\t(0xB8B1 <= code && code <= 0xB8CB) || // Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH\r\n\t\t(0xB8CD <= code && code <= 0xB8E7) || // Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH\r\n\t\t(0xB8E9 <= code && code <= 0xB903) || // Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH\r\n\t\t(0xB905 <= code && code <= 0xB91F) || // Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH\r\n\t\t(0xB921 <= code && code <= 0xB93B) || // Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH\r\n\t\t(0xB93D <= code && code <= 0xB957) || // Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH\r\n\t\t(0xB959 <= code && code <= 0xB973) || // Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH\r\n\t\t(0xB975 <= code && code <= 0xB98F) || // Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH\r\n\t\t(0xB991 <= code && code <= 0xB9AB) || // Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH\r\n\t\t(0xB9AD <= code && code <= 0xB9C7) || // Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH\r\n\t\t(0xB9C9 <= code && code <= 0xB9E3) || // Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH\r\n\t\t(0xB9E5 <= code && code <= 0xB9FF) || // Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH\r\n\t\t(0xBA01 <= code && code <= 0xBA1B) || // Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH\r\n\t\t(0xBA1D <= code && code <= 0xBA37) || // Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH\r\n\t\t(0xBA39 <= code && code <= 0xBA53) || // Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH\r\n\t\t(0xBA55 <= code && code <= 0xBA6F) || // Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH\r\n\t\t(0xBA71 <= code && code <= 0xBA8B) || // Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH\r\n\t\t(0xBA8D <= code && code <= 0xBAA7) || // Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH\r\n\t\t(0xBAA9 <= code && code <= 0xBAC3) || // Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH\r\n\t\t(0xBAC5 <= code && code <= 0xBADF) || // Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH\r\n\t\t(0xBAE1 <= code && code <= 0xBAFB) || // Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH\r\n\t\t(0xBAFD <= code && code <= 0xBB17) || // Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH\r\n\t\t(0xBB19 <= code && code <= 0xBB33) || // Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH\r\n\t\t(0xBB35 <= code && code <= 0xBB4F) || // Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH\r\n\t\t(0xBB51 <= code && code <= 0xBB6B) || // Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH\r\n\t\t(0xBB6D <= code && code <= 0xBB87) || // Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH\r\n\t\t(0xBB89 <= code && code <= 0xBBA3) || // Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH\r\n\t\t(0xBBA5 <= code && code <= 0xBBBF) || // Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH\r\n\t\t(0xBBC1 <= code && code <= 0xBBDB) || // Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH\r\n\t\t(0xBBDD <= code && code <= 0xBBF7) || // Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH\r\n\t\t(0xBBF9 <= code && code <= 0xBC13) || // Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH\r\n\t\t(0xBC15 <= code && code <= 0xBC2F) || // Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH\r\n\t\t(0xBC31 <= code && code <= 0xBC4B) || // Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH\r\n\t\t(0xBC4D <= code && code <= 0xBC67) || // Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH\r\n\t\t(0xBC69 <= code && code <= 0xBC83) || // Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH\r\n\t\t(0xBC85 <= code && code <= 0xBC9F) || // Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH\r\n\t\t(0xBCA1 <= code && code <= 0xBCBB) || // Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH\r\n\t\t(0xBCBD <= code && code <= 0xBCD7) || // Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH\r\n\t\t(0xBCD9 <= code && code <= 0xBCF3) || // Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH\r\n\t\t(0xBCF5 <= code && code <= 0xBD0F) || // Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH\r\n\t\t(0xBD11 <= code && code <= 0xBD2B) || // Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH\r\n\t\t(0xBD2D <= code && code <= 0xBD47) || // Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH\r\n\t\t(0xBD49 <= code && code <= 0xBD63) || // Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH\r\n\t\t(0xBD65 <= code && code <= 0xBD7F) || // Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH\r\n\t\t(0xBD81 <= code && code <= 0xBD9B) || // Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH\r\n\t\t(0xBD9D <= code && code <= 0xBDB7) || // Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH\r\n\t\t(0xBDB9 <= code && code <= 0xBDD3) || // Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH\r\n\t\t(0xBDD5 <= code && code <= 0xBDEF) || // Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH\r\n\t\t(0xBDF1 <= code && code <= 0xBE0B) || // Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH\r\n\t\t(0xBE0D <= code && code <= 0xBE27) || // Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH\r\n\t\t(0xBE29 <= code && code <= 0xBE43) || // Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH\r\n\t\t(0xBE45 <= code && code <= 0xBE5F) || // Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH\r\n\t\t(0xBE61 <= code && code <= 0xBE7B) || // Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH\r\n\t\t(0xBE7D <= code && code <= 0xBE97) || // Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH\r\n\t\t(0xBE99 <= code && code <= 0xBEB3) || // Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH\r\n\t\t(0xBEB5 <= code && code <= 0xBECF) || // Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH\r\n\t\t(0xBED1 <= code && code <= 0xBEEB) || // Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH\r\n\t\t(0xBEED <= code && code <= 0xBF07) || // Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH\r\n\t\t(0xBF09 <= code && code <= 0xBF23) || // Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH\r\n\t\t(0xBF25 <= code && code <= 0xBF3F) || // Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH\r\n\t\t(0xBF41 <= code && code <= 0xBF5B) || // Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH\r\n\t\t(0xBF5D <= code && code <= 0xBF77) || // Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH\r\n\t\t(0xBF79 <= code && code <= 0xBF93) || // Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH\r\n\t\t(0xBF95 <= code && code <= 0xBFAF) || // Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH\r\n\t\t(0xBFB1 <= code && code <= 0xBFCB) || // Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH\r\n\t\t(0xBFCD <= code && code <= 0xBFE7) || // Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH\r\n\t\t(0xBFE9 <= code && code <= 0xC003) || // Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH\r\n\t\t(0xC005 <= code && code <= 0xC01F) || // Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH\r\n\t\t(0xC021 <= code && code <= 0xC03B) || // Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH\r\n\t\t(0xC03D <= code && code <= 0xC057) || // Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH\r\n\t\t(0xC059 <= code && code <= 0xC073) || // Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH\r\n\t\t(0xC075 <= code && code <= 0xC08F) || // Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH\r\n\t\t(0xC091 <= code && code <= 0xC0AB) || // Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH\r\n\t\t(0xC0AD <= code && code <= 0xC0C7) || // Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH\r\n\t\t(0xC0C9 <= code && code <= 0xC0E3) || // Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH\r\n\t\t(0xC0E5 <= code && code <= 0xC0FF) || // Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH\r\n\t\t(0xC101 <= code && code <= 0xC11B) || // Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH\r\n\t\t(0xC11D <= code && code <= 0xC137) || // Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH\r\n\t\t(0xC139 <= code && code <= 0xC153) || // Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH\r\n\t\t(0xC155 <= code && code <= 0xC16F) || // Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH\r\n\t\t(0xC171 <= code && code <= 0xC18B) || // Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH\r\n\t\t(0xC18D <= code && code <= 0xC1A7) || // Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH\r\n\t\t(0xC1A9 <= code && code <= 0xC1C3) || // Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH\r\n\t\t(0xC1C5 <= code && code <= 0xC1DF) || // Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH\r\n\t\t(0xC1E1 <= code && code <= 0xC1FB) || // Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH\r\n\t\t(0xC1FD <= code && code <= 0xC217) || // Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH\r\n\t\t(0xC219 <= code && code <= 0xC233) || // Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH\r\n\t\t(0xC235 <= code && code <= 0xC24F) || // Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH\r\n\t\t(0xC251 <= code && code <= 0xC26B) || // Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH\r\n\t\t(0xC26D <= code && code <= 0xC287) || // Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH\r\n\t\t(0xC289 <= code && code <= 0xC2A3) || // Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH\r\n\t\t(0xC2A5 <= code && code <= 0xC2BF) || // Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH\r\n\t\t(0xC2C1 <= code && code <= 0xC2DB) || // Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH\r\n\t\t(0xC2DD <= code && code <= 0xC2F7) || // Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH\r\n\t\t(0xC2F9 <= code && code <= 0xC313) || // Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH\r\n\t\t(0xC315 <= code && code <= 0xC32F) || // Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH\r\n\t\t(0xC331 <= code && code <= 0xC34B) || // Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH\r\n\t\t(0xC34D <= code && code <= 0xC367) || // Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH\r\n\t\t(0xC369 <= code && code <= 0xC383) || // Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH\r\n\t\t(0xC385 <= code && code <= 0xC39F) || // Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH\r\n\t\t(0xC3A1 <= code && code <= 0xC3BB) || // Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH\r\n\t\t(0xC3BD <= code && code <= 0xC3D7) || // Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH\r\n\t\t(0xC3D9 <= code && code <= 0xC3F3) || // Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH\r\n\t\t(0xC3F5 <= code && code <= 0xC40F) || // Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH\r\n\t\t(0xC411 <= code && code <= 0xC42B) || // Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH\r\n\t\t(0xC42D <= code && code <= 0xC447) || // Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH\r\n\t\t(0xC449 <= code && code <= 0xC463) || // Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH\r\n\t\t(0xC465 <= code && code <= 0xC47F) || // Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH\r\n\t\t(0xC481 <= code && code <= 0xC49B) || // Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH\r\n\t\t(0xC49D <= code && code <= 0xC4B7) || // Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH\r\n\t\t(0xC4B9 <= code && code <= 0xC4D3) || // Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH\r\n\t\t(0xC4D5 <= code && code <= 0xC4EF) || // Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH\r\n\t\t(0xC4F1 <= code && code <= 0xC50B) || // Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH\r\n\t\t(0xC50D <= code && code <= 0xC527) || // Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH\r\n\t\t(0xC529 <= code && code <= 0xC543) || // Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH\r\n\t\t(0xC545 <= code && code <= 0xC55F) || // Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH\r\n\t\t(0xC561 <= code && code <= 0xC57B) || // Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH\r\n\t\t(0xC57D <= code && code <= 0xC597) || // Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH\r\n\t\t(0xC599 <= code && code <= 0xC5B3) || // Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH\r\n\t\t(0xC5B5 <= code && code <= 0xC5CF) || // Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH\r\n\t\t(0xC5D1 <= code && code <= 0xC5EB) || // Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH\r\n\t\t(0xC5ED <= code && code <= 0xC607) || // Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH\r\n\t\t(0xC609 <= code && code <= 0xC623) || // Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH\r\n\t\t(0xC625 <= code && code <= 0xC63F) || // Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH\r\n\t\t(0xC641 <= code && code <= 0xC65B) || // Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH\r\n\t\t(0xC65D <= code && code <= 0xC677) || // Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH\r\n\t\t(0xC679 <= code && code <= 0xC693) || // Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH\r\n\t\t(0xC695 <= code && code <= 0xC6AF) || // Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH\r\n\t\t(0xC6B1 <= code && code <= 0xC6CB) || // Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH\r\n\t\t(0xC6CD <= code && code <= 0xC6E7) || // Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH\r\n\t\t(0xC6E9 <= code && code <= 0xC703) || // Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH\r\n\t\t(0xC705 <= code && code <= 0xC71F) || // Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH\r\n\t\t(0xC721 <= code && code <= 0xC73B) || // Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH\r\n\t\t(0xC73D <= code && code <= 0xC757) || // Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH\r\n\t\t(0xC759 <= code && code <= 0xC773) || // Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH\r\n\t\t(0xC775 <= code && code <= 0xC78F) || // Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH\r\n\t\t(0xC791 <= code && code <= 0xC7AB) || // Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH\r\n\t\t(0xC7AD <= code && code <= 0xC7C7) || // Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH\r\n\t\t(0xC7C9 <= code && code <= 0xC7E3) || // Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH\r\n\t\t(0xC7E5 <= code && code <= 0xC7FF) || // Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH\r\n\t\t(0xC801 <= code && code <= 0xC81B) || // Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH\r\n\t\t(0xC81D <= code && code <= 0xC837) || // Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH\r\n\t\t(0xC839 <= code && code <= 0xC853) || // Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH\r\n\t\t(0xC855 <= code && code <= 0xC86F) || // Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH\r\n\t\t(0xC871 <= code && code <= 0xC88B) || // Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH\r\n\t\t(0xC88D <= code && code <= 0xC8A7) || // Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH\r\n\t\t(0xC8A9 <= code && code <= 0xC8C3) || // Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH\r\n\t\t(0xC8C5 <= code && code <= 0xC8DF) || // Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH\r\n\t\t(0xC8E1 <= code && code <= 0xC8FB) || // Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH\r\n\t\t(0xC8FD <= code && code <= 0xC917) || // Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH\r\n\t\t(0xC919 <= code && code <= 0xC933) || // Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH\r\n\t\t(0xC935 <= code && code <= 0xC94F) || // Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH\r\n\t\t(0xC951 <= code && code <= 0xC96B) || // Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH\r\n\t\t(0xC96D <= code && code <= 0xC987) || // Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH\r\n\t\t(0xC989 <= code && code <= 0xC9A3) || // Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH\r\n\t\t(0xC9A5 <= code && code <= 0xC9BF) || // Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH\r\n\t\t(0xC9C1 <= code && code <= 0xC9DB) || // Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH\r\n\t\t(0xC9DD <= code && code <= 0xC9F7) || // Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH\r\n\t\t(0xC9F9 <= code && code <= 0xCA13) || // Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH\r\n\t\t(0xCA15 <= code && code <= 0xCA2F) || // Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH\r\n\t\t(0xCA31 <= code && code <= 0xCA4B) || // Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH\r\n\t\t(0xCA4D <= code && code <= 0xCA67) || // Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH\r\n\t\t(0xCA69 <= code && code <= 0xCA83) || // Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH\r\n\t\t(0xCA85 <= code && code <= 0xCA9F) || // Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH\r\n\t\t(0xCAA1 <= code && code <= 0xCABB) || // Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH\r\n\t\t(0xCABD <= code && code <= 0xCAD7) || // Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH\r\n\t\t(0xCAD9 <= code && code <= 0xCAF3) || // Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH\r\n\t\t(0xCAF5 <= code && code <= 0xCB0F) || // Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH\r\n\t\t(0xCB11 <= code && code <= 0xCB2B) || // Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH\r\n\t\t(0xCB2D <= code && code <= 0xCB47) || // Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH\r\n\t\t(0xCB49 <= code && code <= 0xCB63) || // Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH\r\n\t\t(0xCB65 <= code && code <= 0xCB7F) || // Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH\r\n\t\t(0xCB81 <= code && code <= 0xCB9B) || // Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH\r\n\t\t(0xCB9D <= code && code <= 0xCBB7) || // Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH\r\n\t\t(0xCBB9 <= code && code <= 0xCBD3) || // Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH\r\n\t\t(0xCBD5 <= code && code <= 0xCBEF) || // Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH\r\n\t\t(0xCBF1 <= code && code <= 0xCC0B) || // Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH\r\n\t\t(0xCC0D <= code && code <= 0xCC27) || // Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH\r\n\t\t(0xCC29 <= code && code <= 0xCC43) || // Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH\r\n\t\t(0xCC45 <= code && code <= 0xCC5F) || // Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH\r\n\t\t(0xCC61 <= code && code <= 0xCC7B) || // Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH\r\n\t\t(0xCC7D <= code && code <= 0xCC97) || // Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH\r\n\t\t(0xCC99 <= code && code <= 0xCCB3) || // Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH\r\n\t\t(0xCCB5 <= code && code <= 0xCCCF) || // Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH\r\n\t\t(0xCCD1 <= code && code <= 0xCCEB) || // Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH\r\n\t\t(0xCCED <= code && code <= 0xCD07) || // Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH\r\n\t\t(0xCD09 <= code && code <= 0xCD23) || // Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH\r\n\t\t(0xCD25 <= code && code <= 0xCD3F) || // Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH\r\n\t\t(0xCD41 <= code && code <= 0xCD5B) || // Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH\r\n\t\t(0xCD5D <= code && code <= 0xCD77) || // Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH\r\n\t\t(0xCD79 <= code && code <= 0xCD93) || // Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH\r\n\t\t(0xCD95 <= code && code <= 0xCDAF) || // Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH\r\n\t\t(0xCDB1 <= code && code <= 0xCDCB) || // Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH\r\n\t\t(0xCDCD <= code && code <= 0xCDE7) || // Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH\r\n\t\t(0xCDE9 <= code && code <= 0xCE03) || // Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH\r\n\t\t(0xCE05 <= code && code <= 0xCE1F) || // Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH\r\n\t\t(0xCE21 <= code && code <= 0xCE3B) || // Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH\r\n\t\t(0xCE3D <= code && code <= 0xCE57) || // Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH\r\n\t\t(0xCE59 <= code && code <= 0xCE73) || // Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH\r\n\t\t(0xCE75 <= code && code <= 0xCE8F) || // Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH\r\n\t\t(0xCE91 <= code && code <= 0xCEAB) || // Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH\r\n\t\t(0xCEAD <= code && code <= 0xCEC7) || // Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH\r\n\t\t(0xCEC9 <= code && code <= 0xCEE3) || // Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH\r\n\t\t(0xCEE5 <= code && code <= 0xCEFF) || // Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH\r\n\t\t(0xCF01 <= code && code <= 0xCF1B) || // Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH\r\n\t\t(0xCF1D <= code && code <= 0xCF37) || // Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH\r\n\t\t(0xCF39 <= code && code <= 0xCF53) || // Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH\r\n\t\t(0xCF55 <= code && code <= 0xCF6F) || // Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH\r\n\t\t(0xCF71 <= code && code <= 0xCF8B) || // Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH\r\n\t\t(0xCF8D <= code && code <= 0xCFA7) || // Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH\r\n\t\t(0xCFA9 <= code && code <= 0xCFC3) || // Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH\r\n\t\t(0xCFC5 <= code && code <= 0xCFDF) || // Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH\r\n\t\t(0xCFE1 <= code && code <= 0xCFFB) || // Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH\r\n\t\t(0xCFFD <= code && code <= 0xD017) || // Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH\r\n\t\t(0xD019 <= code && code <= 0xD033) || // Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH\r\n\t\t(0xD035 <= code && code <= 0xD04F) || // Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH\r\n\t\t(0xD051 <= code && code <= 0xD06B) || // Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH\r\n\t\t(0xD06D <= code && code <= 0xD087) || // Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH\r\n\t\t(0xD089 <= code && code <= 0xD0A3) || // Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH\r\n\t\t(0xD0A5 <= code && code <= 0xD0BF) || // Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH\r\n\t\t(0xD0C1 <= code && code <= 0xD0DB) || // Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH\r\n\t\t(0xD0DD <= code && code <= 0xD0F7) || // Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH\r\n\t\t(0xD0F9 <= code && code <= 0xD113) || // Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH\r\n\t\t(0xD115 <= code && code <= 0xD12F) || // Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH\r\n\t\t(0xD131 <= code && code <= 0xD14B) || // Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH\r\n\t\t(0xD14D <= code && code <= 0xD167) || // Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH\r\n\t\t(0xD169 <= code && code <= 0xD183) || // Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH\r\n\t\t(0xD185 <= code && code <= 0xD19F) || // Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH\r\n\t\t(0xD1A1 <= code && code <= 0xD1BB) || // Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH\r\n\t\t(0xD1BD <= code && code <= 0xD1D7) || // Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH\r\n\t\t(0xD1D9 <= code && code <= 0xD1F3) || // Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH\r\n\t\t(0xD1F5 <= code && code <= 0xD20F) || // Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH\r\n\t\t(0xD211 <= code && code <= 0xD22B) || // Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH\r\n\t\t(0xD22D <= code && code <= 0xD247) || // Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH\r\n\t\t(0xD249 <= code && code <= 0xD263) || // Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH\r\n\t\t(0xD265 <= code && code <= 0xD27F) || // Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH\r\n\t\t(0xD281 <= code && code <= 0xD29B) || // Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH\r\n\t\t(0xD29D <= code && code <= 0xD2B7) || // Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH\r\n\t\t(0xD2B9 <= code && code <= 0xD2D3) || // Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH\r\n\t\t(0xD2D5 <= code && code <= 0xD2EF) || // Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH\r\n\t\t(0xD2F1 <= code && code <= 0xD30B) || // Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH\r\n\t\t(0xD30D <= code && code <= 0xD327) || // Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH\r\n\t\t(0xD329 <= code && code <= 0xD343) || // Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH\r\n\t\t(0xD345 <= code && code <= 0xD35F) || // Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH\r\n\t\t(0xD361 <= code && code <= 0xD37B) || // Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH\r\n\t\t(0xD37D <= code && code <= 0xD397) || // Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH\r\n\t\t(0xD399 <= code && code <= 0xD3B3) || // Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH\r\n\t\t(0xD3B5 <= code && code <= 0xD3CF) || // Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH\r\n\t\t(0xD3D1 <= code && code <= 0xD3EB) || // Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH\r\n\t\t(0xD3ED <= code && code <= 0xD407) || // Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH\r\n\t\t(0xD409 <= code && code <= 0xD423) || // Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH\r\n\t\t(0xD425 <= code && code <= 0xD43F) || // Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH\r\n\t\t(0xD441 <= code && code <= 0xD45B) || // Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH\r\n\t\t(0xD45D <= code && code <= 0xD477) || // Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH\r\n\t\t(0xD479 <= code && code <= 0xD493) || // Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH\r\n\t\t(0xD495 <= code && code <= 0xD4AF) || // Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH\r\n\t\t(0xD4B1 <= code && code <= 0xD4CB) || // Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH\r\n\t\t(0xD4CD <= code && code <= 0xD4E7) || // Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH\r\n\t\t(0xD4E9 <= code && code <= 0xD503) || // Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH\r\n\t\t(0xD505 <= code && code <= 0xD51F) || // Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH\r\n\t\t(0xD521 <= code && code <= 0xD53B) || // Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH\r\n\t\t(0xD53D <= code && code <= 0xD557) || // Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH\r\n\t\t(0xD559 <= code && code <= 0xD573) || // Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH\r\n\t\t(0xD575 <= code && code <= 0xD58F) || // Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH\r\n\t\t(0xD591 <= code && code <= 0xD5AB) || // Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH\r\n\t\t(0xD5AD <= code && code <= 0xD5C7) || // Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH\r\n\t\t(0xD5C9 <= code && code <= 0xD5E3) || // Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH\r\n\t\t(0xD5E5 <= code && code <= 0xD5FF) || // Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH\r\n\t\t(0xD601 <= code && code <= 0xD61B) || // Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH\r\n\t\t(0xD61D <= code && code <= 0xD637) || // Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH\r\n\t\t(0xD639 <= code && code <= 0xD653) || // Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH\r\n\t\t(0xD655 <= code && code <= 0xD66F) || // Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH\r\n\t\t(0xD671 <= code && code <= 0xD68B) || // Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH\r\n\t\t(0xD68D <= code && code <= 0xD6A7) || // Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH\r\n\t\t(0xD6A9 <= code && code <= 0xD6C3) || // Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH\r\n\t\t(0xD6C5 <= code && code <= 0xD6DF) || // Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH\r\n\t\t(0xD6E1 <= code && code <= 0xD6FB) || // Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH\r\n\t\t(0xD6FD <= code && code <= 0xD717) || // Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH\r\n\t\t(0xD719 <= code && code <= 0xD733) || // Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH\r\n\t\t(0xD735 <= code && code <= 0xD74F) || // Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH\r\n\t\t(0xD751 <= code && code <= 0xD76B) || // Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH\r\n\t\t(0xD76D <= code && code <= 0xD787) || // Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH\r\n\t\t(0xD789 <= code && code <= 0xD7A3) // Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH\r\n\t\t){\r\n\t\t\treturn LVT;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x261D == code || // So WHITE UP POINTING INDEX\r\n\t\t0x26F9 == code || // So PERSON WITH BALL\r\n\t\t(0x270A <= code && code <= 0x270D) || // So [4] RAISED FIST..WRITING HAND\r\n\t\t0x1F385 == code || // So FATHER CHRISTMAS\r\n\t\t(0x1F3C2 <= code && code <= 0x1F3C4) || // So [3] SNOWBOARDER..SURFER\r\n\t\t0x1F3C7 == code || // So HORSE RACING\r\n\t\t(0x1F3CA <= code && code <= 0x1F3CC) || // So [3] SWIMMER..GOLFER\r\n\t\t(0x1F442 <= code && code <= 0x1F443) || // So [2] EAR..NOSE\r\n\t\t(0x1F446 <= code && code <= 0x1F450) || // So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN\r\n\t\t0x1F46E == code || // So POLICE OFFICER\r\n\t\t(0x1F470 <= code && code <= 0x1F478) || // So [9] BRIDE WITH VEIL..PRINCESS\r\n\t\t0x1F47C == code || // So BABY ANGEL\r\n\t\t(0x1F481 <= code && code <= 0x1F483) || // So [3] INFORMATION DESK PERSON..DANCER\r\n\t\t(0x1F485 <= code && code <= 0x1F487) || // So [3] NAIL POLISH..HAIRCUT\r\n\t\t0x1F4AA == code || // So FLEXED BICEPS\r\n\t\t(0x1F574 <= code && code <= 0x1F575) || // So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY\r\n\t\t0x1F57A == code || // So MAN DANCING\r\n\t\t0x1F590 == code || // So RAISED HAND WITH FINGERS SPLAYED\r\n\t\t(0x1F595 <= code && code <= 0x1F596) || // So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS\r\n\t\t(0x1F645 <= code && code <= 0x1F647) || // So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY\r\n\t\t(0x1F64B <= code && code <= 0x1F64F) || // So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS\r\n\t\t0x1F6A3 == code || // So ROWBOAT\r\n\t\t(0x1F6B4 <= code && code <= 0x1F6B6) || // So [3] BICYCLIST..PEDESTRIAN\r\n\t\t0x1F6C0 == code || // So BATH\r\n\t\t0x1F6CC == code || // So SLEEPING ACCOMMODATION\r\n\t\t(0x1F918 <= code && code <= 0x1F91C) || // So [5] SIGN OF THE HORNS..RIGHT-FACING FIST\r\n\t\t(0x1F91E <= code && code <= 0x1F91F) || // So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN\r\n\t\t0x1F926 == code || // So FACE PALM\r\n\t\t(0x1F930 <= code && code <= 0x1F939) || // So [10] PREGNANT WOMAN..JUGGLING\r\n\t\t(0x1F93D <= code && code <= 0x1F93E) || // So [2] WATER POLO..HANDBALL\r\n\t\t(0x1F9D1 <= code && code <= 0x1F9DD) // So [13] ADULT..ELF\r\n\t\t){\r\n\t\t\treturn E_Base;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t(0x1F3FB <= code && code <= 0x1F3FF) // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\r\n\t\t){\r\n\t\t\treturn E_Modifier;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t0x200D == code // Cf ZERO WIDTH JOINER\r\n\t\t){\r\n\t\t\treturn ZWJ;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t0x2640 == code || // So FEMALE SIGN\r\n\t\t0x2642 == code || // So MALE SIGN\r\n\t\t(0x2695 <= code && code <= 0x2696) || // So [2] STAFF OF AESCULAPIUS..SCALES\r\n\t\t0x2708 == code || // So AIRPLANE\r\n\t\t0x2764 == code || // So HEAVY BLACK HEART\r\n\t\t0x1F308 == code || // So RAINBOW\r\n\t\t0x1F33E == code || // So EAR OF RICE\r\n\t\t0x1F373 == code || // So COOKING\r\n\t\t0x1F393 == code || // So GRADUATION CAP\r\n\t\t0x1F3A4 == code || // So MICROPHONE\r\n\t\t0x1F3A8 == code || // So ARTIST PALETTE\r\n\t\t0x1F3EB == code || // So SCHOOL\r\n\t\t0x1F3ED == code || // So FACTORY\r\n\t\t0x1F48B == code || // So KISS MARK\r\n\t\t(0x1F4BB <= code && code <= 0x1F4BC) || // So [2] PERSONAL COMPUTER..BRIEFCASE\r\n\t\t0x1F527 == code || // So WRENCH\r\n\t\t0x1F52C == code || // So MICROSCOPE\r\n\t\t0x1F5E8 == code || // So LEFT SPEECH BUBBLE\r\n\t\t0x1F680 == code || // So ROCKET\r\n\t\t0x1F692 == code // So FIRE ENGINE\r\n\t\t){\r\n\t\t\treturn Glue_After_Zwj;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t(0x1F466 <= code && code <= 0x1F469) // So [4] BOY..WOMAN\r\n\t\t){\r\n\t\t\treturn E_Base_GAZ;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t//all unlisted characters have a grapheme break property of \"Other\"\r\n\t\treturn Other;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\nif (typeof module != 'undefined' && module.exports) {\r\n module.exports = GraphemeSplitter;\r\n}\r\n","import type { eventWithTime, incrementalSnapshotEvent, mouseInteractionData } from \"@rrweb/types\";\nimport { isKeypressEvent } from \"./comparisons\";\nimport type { ActionType } from \"./types\";\n\nexport const getElementId = (event: eventWithTime | undefined): number | false => {\n if (!event) return false;\n if (event.data && \"id\" in (event.data as mouseInteractionData)) {\n return ((event as incrementalSnapshotEvent).data as mouseInteractionData).id;\n }\n if (isKeypressEvent(event) && typeof event.data.payload.id === \"number\") {\n return event.data.payload.id;\n }\n return false;\n};\n\nexport const getLastAction = (actions: ActionType[]): ActionType | undefined =>\n actions\n .slice()\n .reverse()\n .find((a) => !!a.events);\n\nexport const lastEventFromAction = (action: ActionType): eventWithTime | undefined =>\n action.events[action.events.length - 1];\n","import { EventType, IncrementalSource, MouseInteractions } from \"rrweb\";\nimport GraphemeSplitter from \"grapheme-splitter\";\nimport type { eventWithTime, inputData, mouseInteractionData } from \"@rrweb/types\";\nimport { KeypressEventWithTime } from \"@models/SharedDesktopTypes\";\nimport type {\n ActionType,\n ClickActionType,\n InputActionType,\n inputEvent,\n KeypressActionType,\n mouseInteractionEvent,\n ScrollActionType,\n scrollEvent,\n} from \"./types\";\nimport { getElementId, lastEventFromAction } from \"./get\";\n\nexport const isKeypressEvent = (\n event: eventWithTime | undefined,\n): event is KeypressEventWithTime => {\n if (!event) return false;\n return event.type === EventType.Custom && event.data.tag === \"keypress\";\n};\n\nexport const isClearEvent = (event: eventWithTime | undefined): boolean => {\n if (!event) return false;\n return \"text\" in (event.data as inputData) && (event.data as inputData).text === \"\";\n};\n\nexport const hasClearEvent = (action: ActionType): boolean => {\n const lastEvent = action.events[action.events.length - 1];\n return isClearEvent(lastEvent);\n};\n\nexport const isInputAction = (action: ActionType): action is InputActionType =>\n action.name === \"Input\";\n\nexport const isClickAction = (action: ActionType): action is ClickActionType =>\n action.name === \"Click\";\n\nexport const isScrollAction = (action: ActionType): action is ScrollActionType =>\n action.name === \"Scroll\";\n\nexport function eventsHappenedWithin(\n ms: number,\n ...events: Array\n): boolean {\n if (events.length < 2) return false;\n const timestamps = events.filter(Boolean).map((e) => e.timestamp);\n const highestTimestamp = Math.max(...timestamps);\n const lowestTimestamp = Math.min(...timestamps);\n return highestTimestamp - lowestTimestamp < ms;\n}\n\nconst eventsHappenedWithin300ms = (event1: eventWithTime, event2: eventWithTime): boolean =>\n eventsHappenedWithin(300, event1, event2);\n\n// In testing the fastest double click speed I've been able to achieve was 140ms\n// Everything under 100ms is probably triggered by javascript hooks\nconst eventsHappenedWithin100ms = (event1: eventWithTime, event2: eventWithTime): boolean =>\n eventsHappenedWithin(100, event1, event2);\n\nconst isMouseInteractionEvent = (event: eventWithTime): event is mouseInteractionEvent => {\n if (event.type !== EventType.IncrementalSnapshot) return false;\n if (!event.data || !(\"source\" in event.data)) return false;\n return event.data.source === IncrementalSource.MouseInteraction;\n};\n\nexport const eventIsClick = (event: eventWithTime): boolean => {\n if (!isMouseInteractionEvent(event)) return false;\n const { type } = event.data;\n return (\n type === MouseInteractions.MouseDown ||\n type === MouseInteractions.MouseUp ||\n type === MouseInteractions.Click ||\n type === MouseInteractions.DblClick ||\n // || type === MouseInteractions.Focus // focus is too chatty\n type === MouseInteractions.TouchStart\n );\n};\n\nexport const eventIsClickTriggeredByJavaScript = (event: eventWithTime): boolean => {\n if (!isMouseInteractionEvent(event)) return false;\n const { type } = event.data;\n return (\n type === MouseInteractions.Click &&\n (event.data as mouseInteractionData).x === 0 &&\n (event.data as mouseInteractionData).y === 0\n );\n};\n\nexport const isDuplicateClickEvent = (event: eventWithTime, lastAction: ActionType): boolean => {\n if (!isMouseInteractionEvent(event)) return false;\n const { type } = event.data;\n const lastEvent = lastEventFromAction(lastAction);\n\n return (\n isClickAction(lastAction) &&\n lastEvent?.type === EventType.IncrementalSnapshot &&\n lastEvent?.data.source === IncrementalSource.MouseInteraction &&\n type === lastEvent.data.type &&\n eventsHappenedWithin100ms(event, lastEvent)\n );\n};\n\nexport const eventIsNewClickAction = (event: eventWithTime, lastAction: ActionType): boolean => {\n if (!isMouseInteractionEvent(event)) return false;\n const { type } = event.data;\n\n return (\n isClickAction(lastAction) &&\n !isDuplicateClickEvent(event, lastAction) &&\n (type === MouseInteractions.MouseDown || type === MouseInteractions.TouchStart)\n );\n};\n\nexport const eventIsScroll = (event: eventWithTime): event is scrollEvent => {\n if (event.type !== EventType.IncrementalSnapshot) return false;\n return event.data.source === IncrementalSource.Scroll;\n};\n\nexport const isCheckbox = (element: Element | false): boolean => {\n if (!element) return false;\n return element.tagName === \"INPUT\" && element.getAttribute(\"type\") === \"checkbox\";\n};\n\nexport const isRadio = (element: Element | false): boolean => {\n if (!element) return false;\n return element.tagName === \"INPUT\" && element.getAttribute(\"type\") === \"radio\";\n};\n\nconst isFormElement = (element: Element | false): boolean => {\n if (!element) return false;\n return [\"INPUT\", \"SELECT\", \"BUTTON\", \"TEXTAREA\"].includes(element.tagName);\n};\n\nconst isLabel = (element: Element | false): boolean => {\n if (!element) return false;\n return element.tagName === \"LABEL\";\n};\n\nconst isAncestor = (element: Element | false, potentialAncestor: Element): boolean => {\n if (!element || !element.parentElement) return false;\n if (element.parentElement === potentialAncestor) return true;\n return isAncestor(element.parentElement, potentialAncestor);\n};\n\nconst findAncestor = (element: Element | false, tagName: string): Element | false => {\n if (!element || !element.parentElement) return false;\n if (element.parentElement.tagName === tagName.toUpperCase()) return element.parentElement;\n return findAncestor(element.parentElement, tagName);\n};\n\nexport const eventIsInputClickTriggeredByLabel = (\n event: eventWithTime,\n lastAction: ActionType,\n element: Element,\n lastActionElement: Element | false,\n): boolean => {\n const lastActionEvent = lastAction.events[lastAction.events.length - 1];\n if (!lastActionEvent) return false;\n if (getElementId(event) === getElementId(lastActionEvent)) return false;\n\n let potentialLabel = lastActionElement;\n const potentialInput = element;\n\n if (!isLabel(potentialLabel)) potentialLabel = findAncestor(potentialLabel, \"label\");\n if (!potentialLabel) return false;\n\n if (!isLabel(potentialLabel)) return false;\n if (!isFormElement(potentialInput)) return false;\n if (!eventsHappenedWithin300ms(event, lastActionEvent)) return false;\n\n const forAndIdEqual = (potentialLabel as HTMLLabelElement).htmlFor === potentialInput.id;\n if ((potentialLabel as HTMLLabelElement).htmlFor && potentialInput.id && forAndIdEqual)\n return true;\n\n return isAncestor(potentialInput, potentialLabel);\n};\n\nexport const eventIsClickTriggeredByBubblingUp = (\n event: eventWithTime,\n lastAction: ActionType,\n element: Element,\n lastActionElement: Element | false,\n): boolean => {\n const lastActionEvent = lastAction.events[lastAction.events.length - 1];\n if (!lastActionEvent) return false;\n\n const potentialChild = lastActionElement;\n const potentialParent = element;\n\n if (!eventIsClick(lastActionEvent)) return false;\n if (!eventIsClick(event)) return false;\n if (!eventsHappenedWithin100ms(event, lastActionEvent)) return false;\n\n if (!potentialChild) return false;\n if (isAncestor(potentialChild, potentialParent)) return true;\n return isAncestor(potentialParent, potentialChild);\n};\n\nconst isInputEvent = (event: eventWithTime): event is inputEvent => {\n if (event.type !== EventType.IncrementalSnapshot) return false;\n if (event.data.source !== IncrementalSource.Input) return false;\n return true;\n};\n\nconst isKeypressAction = (action: ActionType): action is KeypressActionType =>\n action.name === \"Keypress\";\n\nexport const eventIsKeyPressInInput = (event: eventWithTime, lastAction: ActionType): boolean => {\n if (isKeypressEvent(event)) {\n const inputEvents = lastAction.events.filter((e) => isInputEvent(e)) as inputEvent[];\n const lastInputEvent = inputEvents[inputEvents.length - 1];\n if (!lastInputEvent) return false;\n return lastInputEvent.data.text.search(/\\n$/g) !== -1;\n }\n if (isKeypressAction(lastAction)) {\n if (!isInputEvent(event)) return false;\n return event.data.text === \"\";\n }\n return false;\n};\n\nconst splitter = new GraphemeSplitter();\n\nconst isInputEventWithTextLength = (event: eventWithTime, length: number): boolean => {\n if (isInputEvent(event)) {\n return splitter.countGraphemes(event.data.text) === length;\n }\n return false;\n};\n\nexport const isInputEventWithEmptyText = (event: eventWithTime): boolean =>\n isInputEventWithTextLength(event, 0);\n\nconst isInputEventWithFirstCharacter = (event: eventWithTime): boolean =>\n isInputEventWithTextLength(event, 1);\n\n// last action can have a keypress we hadn't detected as being significant _yet_,\n// but it could turn out it to be a wipe-triggering keypress\nexport const eventIsWipeTriggeredByLastKeypress = (\n event: eventWithTime,\n lastAction: ActionType | undefined,\n): boolean => {\n if (!lastAction) return false;\n const lastEvent = lastEventFromAction(lastAction);\n return (\n getElementId(event) === getElementId(lastEvent) &&\n isInputEventWithEmptyText(event) &&\n isKeypressEvent(lastEvent)\n );\n};\n\nexport const eventIsNewInputActionTriggeredByLastKeypress = (\n event: eventWithTime,\n lastAction: ActionType | undefined,\n): boolean => {\n if (!lastAction) return false;\n const lastEvent = lastEventFromAction(lastAction);\n return (\n getElementId(event) === getElementId(lastEvent) &&\n isInputEventWithFirstCharacter(event) &&\n isKeypressEvent(lastEvent)\n );\n};\n\n// maybe use this to define if hidden\n// https://github.com/jsdom/jsdom/issues/1048#issuecomment-401599392\nexport const isHidden = (element: Element | false): boolean => {\n if (!element) return false;\n\n return (element as HTMLElement).offsetHeight === 0;\n};\n\nexport const hasElementId = (event: eventWithTime): boolean => getElementId(event) !== false;\n\ndeclare type LegacyInputValue = inputData & {\n rrwebGenerated: boolean;\n};\n\nexport function isInputNotTriggeredByUser(event: eventWithTime): boolean {\n if (!isInputEvent(event)) return false;\n const { rrwebGenerated } = event.data as LegacyInputValue;\n const { userTriggered } = event.data;\n if (rrwebGenerated === true || userTriggered === false) return true;\n if (rrwebGenerated === undefined && userTriggered === undefined) return true;\n return false;\n}\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=types.js.map\n","import { EventType, IncrementalSource, eventWithTime } from \"@rrweb/types\";\nimport { scrollEvent } from \"./types\";\n\nconst scrollEventBuffer: scrollEvent[] = [];\nconst MINIMUM_SCROLL_TIME_FOR_ACTION = 800;\nconst SCROLL_DOWNTIME_BEFORE_WIPE = 2000;\n\nexport function wipeScrollEventBuffer(): void {\n scrollEventBuffer.length = 0;\n}\n\nexport function updateScrollEventBuffer(event: eventWithTime | scrollEvent): void {\n if (event.type === EventType.Meta) {\n wipeScrollEventBuffer();\n return;\n }\n if (\n event.type !== EventType.IncrementalSnapshot ||\n event.data.source !== IncrementalSource.Scroll\n )\n return;\n\n const lastEventFromBuffer = scrollEventBuffer[scrollEventBuffer.length - 1];\n if (\n lastEventFromBuffer &&\n lastEventFromBuffer.timestamp + SCROLL_DOWNTIME_BEFORE_WIPE < event.timestamp\n )\n wipeScrollEventBuffer();\n\n scrollEventBuffer.push(event as scrollEvent);\n}\n\nexport function getScrollEventBuffer(): scrollEvent[] {\n return scrollEventBuffer;\n}\n\nexport function isEnoughScrollEventsForAction(): boolean {\n if (scrollEventBuffer.length < 2) return false;\n const firstEvent = scrollEventBuffer[0];\n const lastEvent = scrollEventBuffer[scrollEventBuffer.length - 1];\n if (!firstEvent || !lastEvent) return false;\n\n const timeOffset = lastEvent.timestamp - firstEvent.timestamp;\n return timeOffset >= MINIMUM_SCROLL_TIME_FOR_ACTION;\n}\n","/* eslint no-param-reassign: [\"error\", {\n \"props\": true, \"ignorePropertyModificationsFor\": [\"actions\"] }] */\n\nimport { EventType, IncrementalSource, MouseInteractions, Replayer, ReplayerEvents } from \"rrweb\";\nimport type {\n eventWithTime,\n incrementalData,\n inputData,\n inputValue,\n mediaInteractionData,\n metaEvent,\n mouseInteractionData,\n scrollData,\n selectionData,\n} from \"@rrweb/types\";\nimport { hash as MD5hash } from \"spark-md5\";\nimport { KeypressEvent, KeypressEventWithTime } from \"@models/SharedDesktopTypes\";\nimport { waitTillReplayerUpdated } from \"./replayer\";\nimport { getRrwebCache, setRrwebCache, updateRrwebCache } from \"./rrweb-cache\";\nimport {\n eventIsWipeTriggeredByLastKeypress,\n eventIsClick,\n eventIsClickTriggeredByBubblingUp,\n eventIsClickTriggeredByJavaScript,\n eventIsInputClickTriggeredByLabel,\n eventIsKeyPressInInput,\n eventIsNewClickAction,\n eventIsNewInputActionTriggeredByLastKeypress,\n hasClearEvent,\n hasElementId,\n isCheckbox,\n isClickAction,\n isHidden,\n isInputAction,\n isInputEventWithEmptyText,\n isKeypressEvent,\n isRadio,\n isInputNotTriggeredByUser,\n eventIsScroll,\n eventsHappenedWithin,\n isScrollAction,\n} from \"./comparisons\";\nimport type {\n ActionType,\n BaseActionType,\n ClickActionType,\n InputActionType,\n KeypressActionType,\n ScrollActionType,\n} from \"./types\";\nimport { getElementId, getLastAction } from \"./get\";\nimport {\n getScrollEventBuffer,\n isEnoughScrollEventsForAction,\n updateScrollEventBuffer,\n wipeScrollEventBuffer,\n} from \"./scroll\";\n\nlet lastLocation: string | null = null;\n\nexport function clearLastLocation(): void {\n lastLocation = null;\n}\n\nconst updateEvents = async (events: eventWithTime[]): Promise => {\n if (getRrwebCache().events.length < events.length) {\n for (let i = getRrwebCache().events.length; i < events.length; i += 1) {\n const event = events[i];\n if (event) {\n (getRrwebCache().replayer as Replayer).addEvent(event);\n getRrwebCache().events.push(event);\n }\n }\n }\n await waitTillReplayerUpdated(events);\n};\n\nexport const clearEnvironment = (): void => {\n clearLastLocation();\n wipeScrollEventBuffer();\n};\n\nasync function setupReplayer(\n events: eventWithTime[],\n options?: { streaming: boolean },\n): Promise {\n clearEnvironment();\n\n const eventsForRRweb: eventWithTime[] = options?.streaming ? [] : [...events];\n const rootEl = document.createElement(\"div\");\n rootEl.className = \"record-once-event-parser-extractor-iframe rr-block\";\n document.body.appendChild(rootEl);\n const replayer = new Replayer(eventsForRRweb, {\n liveMode: Boolean(options?.streaming),\n root: rootEl,\n useVirtualDom: false,\n // hackCSS: false,\n });\n\n replayer.on(ReplayerEvents.EventCast, (event) => {\n updateRrwebCache({\n lastPlayedEvent: event as eventWithTime,\n });\n });\n\n const firstFullSnapshot = events.find((e) => e.type === EventType.FullSnapshot);\n // wait till firstFullsnapshot timeout\n if (!options?.streaming && firstFullSnapshot) {\n let resolver;\n await new Promise((resolve) => {\n resolver = (): unknown => setTimeout(resolve, 0);\n replayer?.on(ReplayerEvents.FullsnapshotRebuilded, resolver);\n });\n replayer.off(ReplayerEvents.FullsnapshotRebuilded, resolver);\n }\n\n setRrwebCache({\n rootEl,\n events: eventsForRRweb,\n replayer,\n lastPlayedEvent: null,\n streaming: options?.streaming,\n });\n if (options?.streaming) replayer.startLive();\n return replayer;\n}\n\nexport async function resetReplayer(): Promise {\n const { replayer } = getRrwebCache();\n if (!replayer) return;\n\n replayer.destroy();\n getRrwebCache().rootEl?.remove();\n\n setRrwebCache({\n rootEl: undefined,\n events: [],\n replayer: undefined,\n lastPlayedEvent: null,\n });\n}\n\nexport async function getReplayer(\n events: eventWithTime[],\n options?: { streaming: boolean },\n): Promise {\n let { replayer } = getRrwebCache();\n if (!replayer || (options && options.streaming !== getRrwebCache().streaming)) {\n if (replayer) resetReplayer(); // clean up old replayer\n replayer = await setupReplayer(events, options);\n }\n\n if (getRrwebCache().streaming) {\n await updateEvents(events);\n }\n\n return replayer;\n}\n\nexport async function attachReplayer(\n events: eventWithTime[],\n options = { streaming: false },\n): Promise {\n // trigger cache setup if cache hasn't been set yet\n if (!getRrwebCache().replayer || (options && options.streaming !== getRrwebCache().streaming))\n await getReplayer(events, options);\n\n if (getRrwebCache().rootEl && getRrwebCache().rootEl?.parentNode) {\n return;\n }\n\n document.body.appendChild(getRrwebCache().rootEl as HTMLElement);\n if (getRrwebCache().events.length < events.length) await getReplayer(events, options);\n}\n\nexport function detachReplayer(): void {\n getRrwebCache().rootEl?.remove();\n}\n\nconst getElement = (event: eventWithTime): false | Element => {\n const { replayer } = getRrwebCache();\n if (!replayer) return false;\n\n if (event.type !== EventType.IncrementalSnapshot && event.type !== EventType.Custom) {\n return false;\n }\n const elementId = getElementId(event);\n if (isKeypressEvent(event) && elementId) {\n return replayer.getMirror().getNode(elementId) as Node as Element;\n }\n\n if (\n elementId &&\n \"source\" in event.data &&\n (event.data.source === IncrementalSource.MouseInteraction ||\n event.data.source === IncrementalSource.Input)\n ) {\n return replayer.getMirror().getNode(elementId) as Node as Element;\n }\n\n return false;\n};\n\nexport async function getElementFromEvents(\n events: eventWithTime[],\n event: eventWithTime,\n): Promise {\n const replayer = await getReplayer(events);\n const meta = replayer.getMetaData();\n const timeOffset = event.timestamp - meta.startTime;\n if (!replayer.config.liveMode) replayer.pause(timeOffset);\n\n const element = getElement(event); // replayer.iframe.contentDocument.querySelector(event);\n // console.log(\"mirror\", mirror);\n // const element = replayer.iframe.contentDocument.querySelector(event);\n // const element = replayer.getElement(event);\n return element;\n}\n\n/* eslint-disable no-param-reassign */\nexport function updateAction(action: Type, event: eventWithTime): Type {\n // this never worked:\n // if (\"text\" in event.data && event.data.text && action.element.type === \"checkbox\") {\n // return action; // skip this one\n // }\n\n if (isInputAction(action)) {\n if (\n \"text\" in (event.data as inputData) &&\n typeof (event.data as inputData).text !== \"undefined\"\n ) {\n action.text = (event.data as inputData).text;\n }\n } else if (isClickAction(action)) {\n if (\"type\" in (event.data as mouseInteractionData)) {\n action.type = (event.data as mouseInteractionData).type;\n }\n } else if (isScrollAction(action)) {\n if (\"x\" in (event.data as scrollData)) {\n action.x = (event.data as scrollData).x;\n }\n if (\"y\" in (event.data as scrollData)) {\n action.y = (event.data as scrollData).y;\n }\n }\n\n // We might have to store all elementIds matched\n // if (!updatedAction.elementIds.includes(newData.elementId)) {\n // updatedAction.elementIds.push(newData.elementId);\n // }\n\n action.events = action.events || [];\n action.events.push(event);\n return action;\n}\n/* eslint-enable no-param-reassign */\n\nfunction removeKeypressEventFromAction(action: ActionType): eventWithTime | null {\n if (!isInputAction(action)) return null;\n if (!action.events || action.events.length === 0) return null;\n if (!isKeypressEvent(action.events[action.events.length - 1])) return null;\n\n const [lastEvent] = action.events.splice(action.events.length - 1, 1);\n return lastEvent || null;\n}\n\nfunction removeClearEventFromAction(action: ActionType): eventWithTime | null {\n if (!hasClearEvent(action)) return null;\n if (!isInputAction(action)) return null;\n\n // repossess the last event\n const [lastEvent] = action.events.splice(action.events.length - 1, 1);\n\n // reset text on action to whatever it was before the string was emptied\n let texts = action.events.map(\n (e) => \"text\" in (e.data as inputData) && (e.data as inputData).text,\n );\n texts = texts.filter((t) => t !== false);\n const lastText = texts.length > 0 ? texts[texts.length - 1] : false;\n if (lastText) {\n // eslint-disable-next-line no-param-reassign\n action.text = lastText;\n }\n return lastEvent || null;\n}\n\nconst sourceLabel = (event: eventWithTime): false | string => {\n if (!event.data || !(\"source\" in (event.data as incrementalData))) return false;\n return IncrementalSource[(event.data as incrementalData).source.toString()];\n};\n\nconst eventBelongsToExistingAction = async (\n event: eventWithTime,\n actions: ActionType[],\n allEvents: eventWithTime[],\n): Promise => {\n if (!actions.length) return false;\n if (!hasElementId(event)) return false;\n\n const lastAction = getLastAction(actions);\n if (!lastAction) return false;\n\n if (eventIsKeyPressInInput(event, lastAction)) return true;\n if (lastAction.name === \"Scroll\" && eventIsScroll(event)) {\n const lastEventFromLastAction = lastAction.events[lastAction.events.length - 1];\n return eventsHappenedWithin(2000, event, lastEventFromLastAction);\n }\n if (lastAction.name === \"Keypress\" && !isInputEventWithEmptyText(event)) return false;\n if (eventIsWipeTriggeredByLastKeypress(event, lastAction)) return false;\n if (eventIsNewInputActionTriggeredByLastKeypress(event, lastAction)) return false;\n\n const lastActionElement = lastAction.element;\n\n const element = await getElementFromEvents(allEvents, event);\n\n if (element) {\n if (eventIsInputClickTriggeredByLabel(event, lastAction, element, lastActionElement))\n return true;\n if (eventIsClickTriggeredByBubblingUp(event, lastAction, element, lastActionElement))\n return true;\n }\n\n return (\n lastAction?.elementId === (event.data as inputData | mouseInteractionData).id && // same element\n lastAction?.source === sourceLabel(event) && // same type of action\n !eventIsNewClickAction(event, lastAction)\n );\n};\n\nexport function getId(event: eventWithTime): string {\n if (event.data && \"id\" in (event.data as inputData | mouseInteractionData)) {\n return `${event.timestamp}-${(event.data as inputData | mouseInteractionData).id}`;\n }\n return `${event.timestamp}--${event.type}`;\n}\n\nexport function hash(string: string): string {\n return MD5hash(string);\n}\n\nfunction actionBaseValues({\n element,\n events,\n}: Pick): BaseActionType {\n const event = events[0];\n const elementId = getElementId(event) as number;\n\n if (!event) throw new Error(\"Event is required to create an action\");\n\n return {\n id: getId(event),\n elementId,\n element,\n elementVisible: !isHidden(element),\n source: sourceLabel(event),\n events,\n href: lastLocation,\n };\n}\n\nfunction createAction(\n {\n element,\n events,\n }: {\n element: false | Element;\n events: eventWithTime[];\n },\n actionAttributes: Omit,\n): ActionType {\n return {\n ...actionBaseValues({ element, events }),\n ...actionAttributes,\n } as T;\n}\n\nfunction createInputAction(event: eventWithTime, element: Element | false): InputActionType {\n const { text, isChecked } = event.data as inputValue;\n return createAction(\n {\n element,\n events: [event],\n },\n { name: \"Input\", text, isChecked },\n ) as InputActionType;\n}\n\nfunction createKeypressAction(\n keypressEvent: KeypressEvent,\n element: Element | false,\n events: eventWithTime[],\n): KeypressActionType {\n const { key, modifierKeys } = keypressEvent.data.payload;\n return createAction(\n {\n element,\n events,\n },\n { name: \"Keypress\", key, modifierKeys },\n ) as KeypressActionType;\n}\n\nasync function newAction(\n event: eventWithTime,\n actions: ActionType[],\n events: eventWithTime[],\n): Promise {\n const element = await getElementFromEvents(events, event);\n // isHidden sometimes yields false positives, we need to investigate more before we disable it\n // if (isHidden(element)) return false;\n\n let action: ActionType;\n const lastAction = getLastAction(actions);\n\n if (eventIsClick(event)) {\n if (eventIsClickTriggeredByJavaScript(event)) return false;\n const { type, x = -1, y = -1 } = event.data as mouseInteractionData;\n\n action = createAction(\n { element, events: [event] },\n { name: \"Click\", x, y, startX: x, startY: y, type },\n );\n } else if (isKeypressEvent(event)) {\n const repossessedEvents: eventWithTime[] = [];\n if (lastAction && hasClearEvent(lastAction)) {\n const lastEvent = removeClearEventFromAction(lastAction);\n if (lastEvent) repossessedEvents.push(lastEvent);\n }\n action = createKeypressAction(event, element, [...repossessedEvents, event]);\n } else if (\"text\" in (event.data as inputData) && (event.data as inputData).text !== undefined) {\n // skip checkboxes, they were not edited by the user\n if (isCheckbox(element) || isRadio(element)) return false;\n\n if (eventIsNewInputActionTriggeredByLastKeypress(event, lastAction)) {\n let keypressEvent;\n // eslint-disable-next-line no-cond-assign\n if ((keypressEvent = removeKeypressEventFromAction(lastAction!))) {\n const keypressAction = createKeypressAction(keypressEvent, element, [keypressEvent]);\n actions.push(keypressAction);\n }\n action = createInputAction(event, element);\n } else if (eventIsWipeTriggeredByLastKeypress(event, lastAction)) {\n const keypressEvent = removeKeypressEventFromAction(lastAction!) as KeypressEventWithTime;\n action = createKeypressAction(keypressEvent, element, [keypressEvent, event]);\n } else {\n action = createInputAction(event, element);\n }\n } else if (eventIsScroll(event)) {\n const { x, y } = event.data;\n const scrollEvents = getScrollEventBuffer();\n const firstEvent = scrollEvents[0];\n const { x: startX, y: startY } = firstEvent ? firstEvent.data : { x, y };\n action = createAction(\n { element, events: [...scrollEvents] },\n { name: \"Scroll\", x, y, startX, startY },\n );\n } else {\n return false;\n }\n actions.push(action);\n return true;\n}\n\ntype actionEventWithTime =\n | KeypressEventWithTime\n | {\n type: EventType.IncrementalSnapshot;\n data: mouseInteractionData | inputData | mediaInteractionData | selectionData | scrollData;\n timestamp: number;\n };\n\ntype actionOrMetaEventWithTime =\n | actionEventWithTime\n | {\n type: EventType.Meta;\n data: metaEvent[\"data\"];\n timestamp: number;\n };\n\nexport function eventCouldSupplyMetaData(\n event: eventWithTime,\n): event is metaEvent & { timestamp: number } {\n return event.type === EventType.Meta;\n}\n\nexport function eventCouldTriggerAction(event: eventWithTime): event is actionEventWithTime {\n if (event.type !== EventType.Custom && event.type !== EventType.IncrementalSnapshot) return false;\n if (event.type === EventType.Custom && event.data.tag !== \"keypress\") return false;\n if (\n event.type === EventType.IncrementalSnapshot &&\n ![\n IncrementalSource.MouseInteraction,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Selection,\n IncrementalSource.Drag,\n IncrementalSource.Scroll,\n ].includes(event.data.source)\n )\n return false;\n\n return true;\n}\n\n/**\n * Could be used to reduce replayer paints by only updating the replayer when\n * an event is triggered that could trigger an action or supply meta data.\n * @param event event to check\n * @returns boolean\n */\nexport function eventCouldTriggerActionOrSupplyMetaData(\n event: eventWithTime,\n): event is actionOrMetaEventWithTime {\n return eventCouldSupplyMetaData(event) || eventCouldTriggerAction(event);\n}\n\nasync function privateRegisterAction(\n event: eventWithTime,\n actions: ActionType[],\n events: eventWithTime[],\n): Promise {\n if (!eventCouldTriggerActionOrSupplyMetaData(event)) return false;\n\n updateScrollEventBuffer(event);\n\n const type = \"type\" in event.data ? event.data.type : null;\n const href = \"href\" in event.data ? event.data.href : null;\n const text = \"text\" in event.data ? event.data.text : null;\n const elementId = \"id\" in event.data ? event.data.id : null;\n const source = sourceLabel(event);\n\n if (href) lastLocation = href;\n\n if (isInputNotTriggeredByUser(event)) return false;\n if (!hasElementId(event)) return false;\n if (elementId === -1) return false;\n if (source === \"Scroll\" && !isEnoughScrollEventsForAction()) return false;\n if (source === \"StyleSheetRule\") return false;\n if (source === \"ViewportResize\") return false;\n if (type === MouseInteractions.Blur) return false;\n if (type === MouseInteractions.Focus) return false; // focus is too chatty\n if (typeof text === \"string\" && text.match(/^{\"rf\":{\"/)) return false; // Hack to ignore setting hidden form element\n\n // reset the scroll buffer if we're not dealing with a scroll action\n if (source !== \"Scroll\") wipeScrollEventBuffer();\n\n if (await eventBelongsToExistingAction(event, actions, events)) {\n const action = actions[actions.length - 1];\n if (action) {\n const updatedAction = updateAction(action, event);\n actions[actions.length - 1] = updatedAction;\n }\n } else {\n await newAction(event, actions, events);\n }\n return true;\n}\n\nexport async function registerAction(\n singleEvent: eventWithTime,\n actions: ActionType[],\n events: eventWithTime[],\n): Promise {\n await attachReplayer(events);\n await privateRegisterAction(singleEvent, actions, events);\n detachReplayer();\n}\n\n// similar to `registerAction` but doesn't detach the player & sets rrweb-replayer in live mode\nexport async function registerActionStreaming(\n targetEvent: eventWithTime,\n actions: ActionType[],\n events: eventWithTime[],\n): Promise {\n const targetEventIndex = events.indexOf(targetEvent);\n const eventsForReplayer = events.slice(0, targetEventIndex + 1);\n if (eventCouldTriggerActionOrSupplyMetaData(targetEvent)) {\n await attachReplayer(eventsForReplayer, { streaming: true }); // always triggers render\n await updateEvents(eventsForReplayer); // always triggers render\n await privateRegisterAction(targetEvent, actions, eventsForReplayer);\n }\n}\n\nexport async function registerActions(\n events: eventWithTime[],\n actions: ActionType[],\n): Promise {\n await attachReplayer(events);\n for (const singleEvent of events) {\n // eslint-disable-next-line no-await-in-loop\n await privateRegisterAction(singleEvent, actions, events);\n }\n detachReplayer();\n}\n\nexport default {\n getId,\n hash,\n registerAction,\n registerActions,\n registerActionStreaming,\n getElementFromEvents,\n updateAction,\n getReplayer,\n waitTillReplayerUpdated,\n attachReplayer,\n detachReplayer,\n getRrwebCache,\n};\n"],"names":["__defProp","__defNormalProp","obj","key","value","__publicField","_a","__defProp$1","__defNormalProp$1","__publicField$1","NodeType$2","NodeType2","isElement","n2","Mirror","_a2","id","childNode","node","meta","oldNode","createMirror$2","toLowerCase","str","isNodeMetaEqual","a2","b","commentre","parse","css","options","lineno","column","updatePosition","lines","i2","position","start","Position","whitespace","_Position","_Position2","errorsList","error","msg","err","stylesheet","rulesList","rules2","open","match","close","rules22","comments","atrule","rule","re","m","c2","comment","pos","selectorMatcher","selector","cleanedInput","m2","customSplit","s2","input","result","currentSegment","depthParentheses","depthBrackets","currentStringChar","char","hasStringEscape","declaration","propMatch","prop","trim","val","ret","declarations","decls","decl","keyframe","vals","atkeyframes","vendor","name","frame","frames","atsupports","supports","style","athost","atmedia","media","atcustommedia","atpage","sel","atdocument","doc","atfontface","atimport","_compileAtrule","atcharset","atnamespace","addParent","parent","isNode","childParent","k","v2","tagMap","getTagName","tagName","escapeRegExp","MEDIA_SELECTOR","MEDIA_SELECTOR_GLOBAL","HOVER_SELECTOR","HOVER_SELECTOR_GLOBAL","adaptCssForReplay","cssText","cache","cachedStyle","ast","selectors","medias","getSelectors","index","newSelector","mediaMatcher","createCache","buildNode","hackCss","specialAttributes","isTextarea","isRemoteOrDynamicCss","image","ctx","e2","buildNodeWithSN","mirror2","skipChild","afterAppend","nodeInMirror","childN","htmlElement","body","child","visit","onVisit","walk","handleScroll","el","rebuild","visitedNode","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","target","receiver","polyfill$1","win","args","queueToResolveTrees","queue","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","mutation","nextId","parentId","nextInTree","idx","parentInTree","iterateResolveTree","tree","cb","isSerializedIframe","getBaseDimension","rootIframe","_b","frameElement","frameDimension","frameBaseDimension","relativeScale","hasShadowRoot","getNestedRule","getPositionsAndIndex","nestedIndex","positions","uniqueTextMutations","mutations","idSet","uniqueMutations","StyleSheetMirror","newId","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","CanvasContext","CanvasContext2","MediaInteractions","MediaInteractions2","ReplayerEvents","ReplayerEvents2","chars","lookup","i$1","decode","base64","bufferLength","len","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","encodedJs","decodeBase64","x","cleanFrame","__defProp2","__defNormalProp2","__publicField2","__defProp22","__defNormalProp22","__publicField22","NodeType$1","Mirror$1","createMirror$1","parseCSSText","res","listDelimiter","propertyDelimiter","item","tmp","camelize","toCSSText","properties","normalizedName","hyphenate","camelizeRE","CUSTOM_PROPERTY_REGEX","_","hyphenateRE","BaseRRNode","_args","childNodes","childIterator","_newChild","_refChild","_node","BaseRRDocument","newChild","nodeType","appendChild","refChild","insertBefore","removeChild","content","publicId","doctype","_namespace","_qualifiedName","_doctype","qualifiedName","systemId","BaseRRDocumentType","element","BaseRRElement","_namespaceURI","data","text","BaseRRText","BaseRRComment","CDATASection","BaseRRCDATASection","textContent","ClassList","newClassName","hyphenateRE2","priority","attribute","_init","shadowRoot","_event","attributeString","BaseRRMediaElement","classText","onChange","classNames","className","classes","NodeType","NAMESPACES","SVGTagMap","createdNodeSet","diff","oldTree","newTree","replayer","rrnodeMirror","diffBeforeUpdatingChildren","diffChildren","diffAfterUpdatingChildren","sameNodeType","calibratedOldTree","createOrGetNode","nodeMatching","newMeta","oldElement","newRRElement","oldContentDocument","diffProps","scrollData","oldMediaElement","newMediaRRElement","rrCanvasElement","canvasMutation2","styleSheet","oldAttributes","newAttributes","newValue","sn","oldChildren","newChildren","oldStartIndex","oldEndIndex","newStartIndex","newEndIndex","oldStartNode","oldEndNode","newStartNode","newEndNode","oldIdToIndex","indexInOld","oldChild2","nodeToMove","newNode","referenceRRNode","referenceNode","oldChild","rrNode","domMirror","nodeId","node1","node2","rrdomMirror","node1Id","node2Id","RRDocument","createMirror","documentTypeNode","RRDocumentType","upperTagName","RRMediaElement","RRIFrameElement","RRCanvasElement","RRStyleElement","RRElement","commentNode","RRComment","sectionNode","RRCDATASection","textNode","RRText","getValidTagName","buildFromNode","rrdom","parentRRNode","documentType","elementNode","rrElement","getDefaultSN","buildFromDom","dom","walk2","iframeDoc","Mirror22","mitt$1","t2","n3","mittProxy","polyfill","w","d","Element2","SCROLL_TIME","original","scrollElement","now","isMicrosoftBrowser","userAgent","userAgentPatterns","ROUNDING_TOLERANCE","y","ease","shouldBailOut","firstArg","hasScrollableSpace","axis","canOverflow","overflowValue","isScrollable","isScrollableY","isScrollableX","findScrollableParent","step","context","time","currentX","currentY","elapsed","smoothScroll","scrollable","startX","startY","method","startTime","left","top","scrollableParent","parentRects","clientRects","Timer","actions","config","action","rafWasActive","speed","end","mid","addDelay","event","baselineTime","firstOffset","firstTimestamp","t","r2","o2","t3","n","e","r","o","i","a","u","c","f","o3","s","l2","s3","l3","v3","g","h","e3","S","j","E","R","N","O","T","q","z","A","B","C","l","v","i3","u2","discardPriorSnapshots","events","createPlayerService","getCastFn","applyEventsSynchronously","emitter","playerMachine","timeOffset","timer","lastPlayedEvent","neededEvents","lastPlayedTimestamp","syncEvents","castFn","machineEvent","insertionIndex","isSync","createSpeedService","speedMachine","rules","blockClass","webGLVarMap","variableListFor","ctor","contextMap","deserializeArg","imageMap","preload","arg","image2","blobContents","getContext","type","WebGLVariableConstructorsNames","saveToWebGLVarMap","variables","webglMutation","errorHandler2","debugMode","canvasMutation$1","mutationArgsPromises","args2","canvasMutation","canvasEventMap","precomputedMutation","commands","command","MediaManager","_mediaState","mediaState","mediaPlaybackOffset","duration","seekToTime","onLoadedMetadata","_c","_d","_e","lastState","playbackRate","currentTime","muted","volume","loop","isPlaying","playerIsPaused","serializedNode","mediaAttributes","currentTimeAtLastInteraction","SKIP_TIME_INTERVAL","mitt","REPLAY_CONSOLE_PREFIX","defaultMouseTailConfig","indicatesTouchDevice","Replayer","dimension","skipTime","payload","plugin","last_index","finish","finish_buffer","defaultConfig","replayerHandler","canvasEvent","canvasMutationData2","realNode","a1","state","firstMeta","firstFullsnapshot","width","height","handler","firstEvent","lastEvent","rawEvent","attributes2","collected","builtNode","mutationInQueue","documentElement","head","injectStylesRules","styleEl","iframeEl","unloadSheets","beforeLoadState","stateHandler","unsubscribe","promises","canvas","imgd","status","lastPosition","triggerFocus","mediaEl","fontFace","virtualNode","legacy_missingNodeMap","nextNotInDOM","next","appendNode","previous","targetDoc","parentSn","childNodeArray","parentDoc","targetId","resolveTrees","attributeName","newSn","siblingNode","parentNode","textarea","tn","styleValues","targetEl","svp","svs","selectionSet","ranges","startOffset","endOffset","startContainer","endContainer","selection","targetHost","_a3","newStyleSheet","hostWindow","MAX_RETRY_TIME","count","adoptStyleSheets","targetHost2","styleIds","stylesToAdopt","styleId","map","targetMutation","previousId","previousInMap","nextInMap","debugData","base","_x","_y","lineCap","lineWidth","strokeStyle","draw","hoveredEl","currentEl","factory","module","undefined","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","length","tail","lo","hi","md51_array","rhex","hex","clamp","from","to","begin","num","targetArray","sourceArray","toUtf8","utf8Str2ArrayBuffer","returnUInt8Array","buff","arr","arrayBuffer2Utf8Str","concatenateArrayBuffers","first","second","hexToBinaryString","SparkMD5","contents","raw","hash","rrwebCache","setRrwebCache","newCache","updateRrwebCache","getRrwebCache","waitTillReplayerAtTimeOffset","resolve","currentPlayerTime","eventIsEqual","eventA","eventB","waitTillReplayerAtOrPastEvent","targetEvent","currentLastPlayedEvent","waitTillReplayerUpdated","lastAddedEvent","GraphemeSplitter","CR","LF","Control","Extend","Regional_Indicator","SpacingMark","L","V","LV","LVT","Other","Prepend","E_Base","E_Modifier","ZWJ","Glue_After_Zwj","E_Base_GAZ","NotBreak","BreakStart","Break","BreakLastRegional","BreakPenultimateRegional","isSurrogate","codePointAt","code","low","shouldBreak","all","eModifierIndex","rIIndex","previousNonExtendIndex","string","prev","getGraphemeBreakProperty","brk","getElementId","isKeypressEvent","getLastAction","lastEventFromAction","isClearEvent","hasClearEvent","isInputAction","isClickAction","isScrollAction","eventsHappenedWithin","ms","timestamps","highestTimestamp","lowestTimestamp","eventsHappenedWithin300ms","event1","event2","eventsHappenedWithin100ms","isMouseInteractionEvent","eventIsClick","eventIsClickTriggeredByJavaScript","isDuplicateClickEvent","lastAction","eventIsNewClickAction","eventIsScroll","isCheckbox","isRadio","isFormElement","isLabel","isAncestor","potentialAncestor","findAncestor","eventIsInputClickTriggeredByLabel","lastActionElement","lastActionEvent","potentialLabel","potentialInput","forAndIdEqual","eventIsClickTriggeredByBubblingUp","potentialChild","potentialParent","isInputEvent","isKeypressAction","eventIsKeyPressInInput","inputEvents","lastInputEvent","splitter","isInputEventWithTextLength","isInputEventWithEmptyText","isInputEventWithFirstCharacter","eventIsWipeTriggeredByLastKeypress","eventIsNewInputActionTriggeredByLastKeypress","isHidden","hasElementId","isInputNotTriggeredByUser","rrwebGenerated","userTriggered","scrollEventBuffer","MINIMUM_SCROLL_TIME_FOR_ACTION","SCROLL_DOWNTIME_BEFORE_WIPE","wipeScrollEventBuffer","updateScrollEventBuffer","lastEventFromBuffer","getScrollEventBuffer","isEnoughScrollEventsForAction","lastLocation","clearLastLocation","updateEvents","clearEnvironment","setupReplayer","eventsForRRweb","rootEl","firstFullSnapshot","resolver","resetReplayer","getReplayer","attachReplayer","detachReplayer","getElement","elementId","getElementFromEvents","updateAction","removeKeypressEventFromAction","removeClearEventFromAction","texts","lastText","sourceLabel","eventBelongsToExistingAction","allEvents","lastEventFromLastAction","getId","MD5hash","actionBaseValues","createAction","actionAttributes","createInputAction","isChecked","createKeypressAction","keypressEvent","modifierKeys","newAction","repossessedEvents","keypressAction","scrollEvents","eventCouldSupplyMetaData","eventCouldTriggerAction","eventCouldTriggerActionOrSupplyMetaData","privateRegisterAction","href","source","updatedAction","registerAction","singleEvent","registerActionStreaming","targetEventIndex","eventsForReplayer","registerActions"],"mappings":"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A,GAAV,MACC,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MACjBA,GAAV,MACUA,GAAV,MACC,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,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ACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,MACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,MACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,OACUA,GAAV,MAEQhB,EAIP,OAAUgB,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1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"}