@pacem/pacem-foundation 2.0.0-abel → 2.0.0-babbage

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../esm/number-extensions.js", "../esm/dates.js", "../esm/null-checker.js", "../esm/array-extensions.js", "../esm/deepmerger.js", "../esm/arrays.js", "../esm/blobs.js", "../esm/browser.js", "../esm/colors.js", "../esm/geom.js", "../esm/matrix2d.js", "../esm/rect.js", "../esm/history-svc.js", "../esm/imaging.js", "../esm/keygenerator.js", "../esm/numbers.js", "../esm/strings.js", "../esm/index-compile.js", "../esm/index-compile-markdown.js", "../esm/compile/parser.js", "../esm/compile/syntax/types.js", "../esm/compile/syntax/registry.js", "../esm/compile/syntax/scanner.js", "../esm/compile/syntax/highlight.js", "../esm/compile/markdown/parser.js", "../esm/compile/syntax/vocabularies/javascript.js", "../esm/compile/syntax/vocabularies/pacem-binding.js", "../esm/compile/syntax/vocabularies/markup.js", "../esm/compile/syntax/vocabularies/csharp.js", "../esm/compile/syntax/vocabularies/c.js", "../esm/compile/syntax/vocabularies/json.js", "../esm/compile/syntax/builtins.js"],
4
- "sourcesContent": ["Number.prototype.isCloseTo = function (other, precision = 14) {\n const delta = Number(`1e-${precision}`);\n return this > (other - delta) && this < (other + delta);\n //return this.toFixed(precision) === other.toFixed(precision); \n};\nNumber.prototype.roundoff = function (precision = 14) {\n return parseFloat(this.toFixed(precision));\n};\nNumber.prototype.clamp = function (min, max) {\n let value = this;\n if (min != null && !isNaN(min)) {\n value = Math.max(value, min);\n }\n if (max != null && !isNaN(max)) {\n value = Math.min(value, max);\n }\n return value;\n};\nNumber.prototype.toBase62 = function () {\n var alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n var temp = this;\n var sb = '';\n while (temp != 0) {\n var mod = temp % 62;\n sb = alphabet.charAt(mod) + sb;\n temp = Math.floor(temp / 62);\n }\n return sb;\n};\nNumber.prototype.toBase36 = function () {\n return this.toString(36);\n};\nexport {};\n", "//namespace Pacem {\nconst JSON_DATE_PATTERN = /^\\/Date\\([\\d]+\\)\\/$/i;\n/** Date parsing and arithmetic utilities. */\nexport class Dates {\n /**\n * Parses a value into a `Date`. Accepts ISO/parseable date strings, ASP.NET-style\n * `/Date(ticks)/` JSON date strings, numeric timestamps, or a `Date` instance (returned as-is).\n * @param input Value to parse.\n * @returns The resulting `Date`.\n */\n static parse(input) {\n let d;\n if (typeof input === 'string') {\n if (JSON_DATE_PATTERN.test(input))\n d = parseInt(input.substring(6));\n else\n d = Date.parse(input);\n return new Date(d);\n }\n else if (typeof input === 'number') {\n return new Date(input);\n }\n else\n return input;\n }\n /**\n * Gets whether the given year is a leap year.\n * @param year Year to check.\n */\n static isLeapYear(year) {\n return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n }\n /**\n * Gets the number of days in a given month of a given year.\n * @param year Year (used to account for leap Februaries).\n * @param month Zero-based month index (0 = January, ..., 11 = December).\n * @returns Number of days in the month.\n */\n static daysInMonth(year, month) {\n return [31, (Dates.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n }\n /**\n * Gets whether a date is an `Invalid Date` or not.\n * @param date\n */\n static isDate(date) {\n return date instanceof Date && !isNaN(date.valueOf());\n }\n /**\n * Returns the date-only equaivalent of a provided datetime.\n * @param datetime\n */\n static dateOnly(datetime) {\n return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate());\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of months to `input`,\n * clamping the day-of-month to the target month's length (e.g. Jan 31 + 1 month => Feb 28/29).\n * @param input Starting date.\n * @param value Number of months to add.\n * @returns The resulting date.\n */\n static addMonths(input, value) {\n let n = input.getDate(), i = new Date(input), month = i.getMonth() + value, years = 0;\n while (month < 0) {\n month += 12;\n years--;\n }\n i.setDate(1);\n i.setMonth(month % 12);\n i.setFullYear(i.getFullYear() + years + Math.floor(month / 12));\n i.setDate(Math.min(n, Dates.daysInMonth(i.getFullYear(), i.getMonth())));\n return i;\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of days to `input`.\n * @param input Starting date.\n * @param value Number of days to add.\n * @returns The resulting date.\n */\n static addDays(input, value) {\n return new Date(input.valueOf() + value * 86400000);\n }\n /**\n * Computes the number of days (possibly fractional) between two dates.\n * @param start Start date.\n * @param end End date.\n * @returns Number of days between `start` and `end` (negative if `end` precedes `start`).\n */\n static daysBetween(start, end) {\n return (end.valueOf() - start.valueOf()) / 86400000;\n }\n}\n//}\n", "/// <reference path=\"dates.ts\" />\nimport { Dates } from \"./dates\";\n// namespace Pacem {\n/** Null/empty value-checking utilities. */\nexport class NullChecker {\n /**\n * Returns whether the given value is `null` or `undefined`.\n * @param o Value to check.\n */\n static isNull(o) {\n return o === null || o === void 0;\n }\n /**\n * Returns whether the given value is \"empty\": an empty array, an empty string, or a\n * plain object with no own enumerable keys (dates, regexes and file-system handles are never\n * considered empty).\n * @param o Value to check.\n */\n static isEmpty(o) {\n try {\n return (Array.isArray(o) && o.length === 0)\n || (typeof o === 'string' && o === '')\n || (typeof o === 'object' && Object.keys(o).length === 0 && !Dates.isDate(o) && !(o instanceof RegExp) && !(o instanceof FileSystemDirectoryHandle) && !(o instanceof FileSystemFileHandle));\n }\n catch (e) {\n // Object.keys(null) would throw...\n return false;\n }\n }\n /**\n * Returns whether the given value is `null`, `undefined`, or \"empty\" (see {@link NullChecker.isEmpty}).\n * @param o Value to check.\n */\n static isNullOrEmpty(o) {\n return NullChecker.isNull(o) || NullChecker.isEmpty(o);\n }\n}\n//}\n", "import { NullChecker } from \"./null-checker\";\nArray.prototype.distinct = function () {\n return Array.from(new Set(this));\n};\nArray.prototype.union = function (other) {\n const thisEmpty = NullChecker.isNullOrEmpty(this), thatEmpty = NullChecker.isNullOrEmpty(other);\n if (thisEmpty && thatEmpty) {\n return [];\n }\n if (thatEmpty) {\n return this.slice();\n }\n if (thisEmpty) {\n return other.slice();\n }\n return this.concat(other).distinct();\n};\nArray.prototype.moveWithin = function (from, to) {\n const OUT_OF_RANGE = 'Index must be greater or equal than 0 and less or equal than the length of the array.';\n var arr = this;\n if (from < 0 || from > arr.length)\n throw new Error(OUT_OF_RANGE);\n if (to < 0 || to > arr.length)\n throw new Error(OUT_OF_RANGE);\n arr.splice(to, 0, /* avoid to trigger a double change on a single command */ Array.prototype.splice.apply(arr, [from, 1])[0]);\n};\nArray.prototype.equalsContent = function (other) {\n if (other == null || this.length !== other.length) {\n return false;\n }\n for (let j = 0; j < this.length; j++) {\n if (this[j] !== other[j]) {\n return false;\n }\n }\n return true;\n};\nArray.prototype.cloneFrom = function (other) {\n if (other == null) {\n throw 'Cannot clone array from null object.';\n }\n const length = other.length;\n var changes = this.length !== other.length;\n for (let j = 0; j < length; j++) {\n const item = other[j];\n if (this.length > j) {\n if (this[j] !== item) {\n this[j] = item;\n changes = true;\n }\n }\n else {\n Array.prototype.push.apply(this, [item]);\n changes = true;\n }\n }\n if (changes) {\n // trigger change just in case\n this.splice(length);\n }\n};\n", "function isPlainObject(value) {\n return (value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n (value.constructor === Object || value.constructor === undefined));\n}\nfunction deepMerge(target, source) {\n const output = target;\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = output[key];\n if (isPlainObject(sourceValue)) {\n // never adopt the source's object by reference: bundlers emit frozen\n // namespace objects (`export * as X`), so a later merge into the same\n // slot would throw (\"object is not extensible\"). Always merge into a\n // fresh, extensible object instead.\n output[key] = deepMerge(isPlainObject(targetValue) ? targetValue : {}, sourceValue);\n }\n else if (Array.isArray(sourceValue)) {\n output[key] = sourceValue.slice();\n }\n else {\n output[key] = sourceValue;\n }\n }\n return output;\n}\n/** Deep-merging utility for plain objects. */\nexport class DeepMerger {\n constructor() {\n }\n /**\n * Recursively merges `source` into `target`, in place: plain-object properties are merged\n * recursively (into a fresh object, never adopted by reference), arrays are shallow-copied,\n * and any other value overwrites the target's.\n * @param source Object whose properties are merged into `target`.\n * @param target Object to merge into (defaults to, and lazily creates, the global `Pacem` namespace object).\n * @returns The mutated `target`, typed as the union of both inputs.\n */\n static merge(source, target) {\n target ??= (globalThis['Pacem'] ??= {});\n return deepMerge(target, source);\n }\n}\n", "//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/** Array manipulation utilities. */\nexport class Arrays {\n static range(min, max, items = 2) {\n let x = min;\n if (NullChecker.isNull(max)) {\n max = items = min;\n min = 1;\n }\n const step = (max - min) / (items - 1);\n const output = [];\n if (step > 0) {\n //while (x <= max) {\n while (output.length < items) {\n output.push(x.roundoff());\n x += step;\n }\n }\n return output;\n }\n /**\n * Splits an array into chunks of a given size.\n * @param source Array to split.\n * @param size Maximum size of each chunk (must be a positive integer).\n * @returns Array of chunks; an empty array if `source` is null or empty.\n */\n static chunkify(source, size) {\n if (NullChecker.isNullOrEmpty(source)) {\n return [];\n }\n if (size <= 0 || size % 1 !== 0) {\n throw new Error('Provide a positive integer number.');\n }\n const length = Math.ceil(source.length / size);\n return Array.from({ length }, (_, index) => {\n const start = index * size, end = start + size;\n return source.slice(start, end);\n });\n }\n}\n//}\n", "//namespace Pacem {\n/** Conversion utilities between `Blob`, base64/data URLs and plain text. */\nexport class Blobs {\n /**\n * Reads a `Blob` and resolves it as a base64-encoded data URL.\n * @param blob Blob to read.\n * @returns A promise resolving with the data URL string.\n */\n static blobToDataURL(blob) {\n return new Promise((resolve, _) => {\n const a = new FileReader();\n a.onload = (e) => { resolve(e.target.result); };\n a.readAsDataURL(blob);\n });\n }\n static _b64ToUint8Array(bstr) {\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return u8arr;\n }\n /**\n * Converts a base64-encoded string into a `Blob`.\n * @param bstr Base64-encoded string (without the `data:...;base64,` prefix).\n * @param options Blob options (e.g. MIME `type`).\n * @returns The resulting `Blob`.\n */\n static base64ToBlob(bstr, options) {\n const u8arr = Blobs._b64ToUint8Array(atob(bstr));\n return new Blob([u8arr], options);\n }\n /**\n * Converts a data URL (`data:<mime>;base64,<data>`) into a `Blob`, inferring the MIME type when present.\n * @param dataurl Data URL to convert.\n * @returns The resulting `Blob`.\n */\n static dataURLToBlob(dataurl) {\n const coma = dataurl.indexOf(',');\n if (coma === -1) {\n return Blobs.base64ToBlob(dataurl);\n }\n else {\n const bstr = dataurl.substring(coma + 1), data = dataurl.substring(0, coma);\n const mime = data.match(/:(.*?);/)[1];\n return Blobs.base64ToBlob(bstr, { type: mime });\n }\n }\n /**\n * Reads a `Blob` and decodes it as text.\n * @param blob Blob to read.\n * @param encoding Text encoding to use for decoding (defaults to the platform's default, typically UTF-8).\n * @returns A promise resolving with the decoded text.\n */\n static async blobToText(blob, encoding) {\n const buffer = await blob.arrayBuffer();\n const decoder = new TextDecoder(encoding, { fatal: false });\n return decoder.decode(buffer);\n }\n static textToBlob(content, type = 'text/plain', charset = 'utf-8', bom, lossyChar = 0x3F) {\n let charsetLower = charset.toLowerCase();\n const fullType = () => `${type};charset=${charsetLower}`;\n switch (charsetLower) {\n // -------------------------\n // UTF-8 (native, safe)\n // -------------------------\n case 'utf-8': {\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n const parts = bom\n ? [new Uint8Array([0xEF, 0xBB, 0xBF]), bytes]\n : [bytes];\n return new Blob(parts, { type: fullType() });\n }\n // -------------------------\n // UTF-16 (explicit LE/BE)\n // -------------------------\n case 'utf-16':\n // Treat as UTF-16LE with BOM (common convention)\n charsetLower = 'utf-16le';\n bom ??= true;\n case 'utf-16le':\n case 'utf-16be': {\n const littleEndian = charsetLower !== 'utf-16be';\n const offset = bom ? 1 : 0;\n const buffer = new ArrayBuffer((content.length + offset) * 2);\n const view = new DataView(buffer);\n if (bom) {\n view.setUint16(0, 0xFEFF, littleEndian);\n }\n for (let i = 0; i < content.length; i++) {\n view.setUint16((i + offset) * 2, content.charCodeAt(i), littleEndian);\n }\n return new Blob([buffer], {\n type: fullType()\n });\n }\n // -------------------------\n // Latin-1 (ISO-8859-1)\n // -------------------------\n case 'ascii':\n case 'iso-8859-1':\n case 'latin1': {\n const boundary = charsetLower === 'ascii' ? 0x7F : 0xFF;\n const buffer = new Uint8Array(content.length);\n const lossy = lossyChar > 0;\n for (let i = 0; i < content.length; i++) {\n const code = content.charCodeAt(i);\n if (code > boundary) {\n if (lossy) {\n buffer[i] = lossyChar; // ? char\n }\n else {\n throw new Error(`Character \"${content[i]}\" cannot be encoded in ${charset}.`);\n }\n }\n else {\n buffer[i] = code;\n }\n }\n return new Blob([buffer], { type: fullType() });\n }\n // -------------------------\n // Explicitly unsupported\n // -------------------------\n default:\n throw new Error(`Encoding \"${charset}\" is not supported safely in the browser. ` +\n `Use UTF-8 or any supported encoding.`);\n }\n }\n}\n//}\n", "//namespace Pacem.Browsers {\n// Function to extract browser version using regex\nconst browserVersion = (userAgent, regex) => {\n const match = userAgent.match(regex);\n return match ? match[2] : null;\n};\n// https://stackoverflow.com/77095874\n/**\n * Detects the browser name and version from a user-agent string.\n * @param userAgent User-agent string to parse (defaults to `navigator.userAgent`).\n * @returns An object with the detected browser `name` (e.g. `Chrome`, `Firefox`, `Safari`, `Edge`, `IE`, `unknown`, ...) and its `version`.\n */\nexport function detect(userAgent = navigator.userAgent) {\n let browser = 'unknown';\n let version = null;\n // Detect browser name\n if (/ucbrowser/i.test(userAgent)) {\n browser = 'UCBrowser';\n }\n else if (/edg/i.test(userAgent)) {\n browser = 'Edge';\n }\n else if (/googlebot/i.test(userAgent)) {\n browser = 'GoogleBot';\n }\n else if (/chromium/i.test(userAgent)) {\n browser = 'Chromium';\n }\n else if (/firefox|fxios/i.test(userAgent) && !/seamonkey/i.test(userAgent)) {\n browser = 'Firefox';\n }\n else if (/; msie|trident/i.test(userAgent) && !/ucbrowser/i.test(userAgent)) {\n browser = 'IE';\n }\n else if (/chrome|crios/i.test(userAgent) && !/opr|opera|chromium|edg|ucbrowser|googlebot/i.test(userAgent)) {\n browser = 'Chrome';\n }\n else if (/safari/i.test(userAgent) && !/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i.test(userAgent)) {\n browser = 'Safari';\n }\n else if (/opr|opera/i.test(userAgent)) {\n browser = 'Opera';\n }\n // Detect browser version\n switch (browser) {\n case 'UCBrowser':\n version = browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i);\n break;\n case 'Edge':\n version = browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i);\n break;\n case 'GoogleBot':\n version = browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i);\n break;\n case 'Chromium':\n version = browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i);\n break;\n case 'Firefox':\n version = browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i);\n break;\n case 'Chrome':\n version = browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i);\n break;\n case 'Safari':\n version = browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i);\n break;\n case 'Opera':\n version = browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i);\n break;\n case 'IE': {\n const tridentVersion = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using Trident version\n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n version = tridentVersion ? `${parseFloat(tridentVersion) + 4.0}` : '7.0';\n break;\n }\n default:\n version = '0.0.0.0';\n break;\n }\n return { name: browser, version };\n}\n//}\n", "//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\nconst HSL_PATTERN = /^hsl\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*\\)$/;\nconst HSLA_PATTERN = /^hsla\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)\\)$/;\nconst RGB_PATTERN = /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nconst RGBA_PATTERN = /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\)$/;\nconst HEX_PATTERN = /^#[a-f0-9]{6}$/;\nconst HEX_SHORT_PATTERN = /^#[a-f0-9]{3}$/;\n;\n;\n;\nfunction isRgb(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'r' in clr && 'g' in clr && 'b' in clr // && 'a' in clr\n && typeof clr.r === 'number' && typeof clr.b === 'number' && typeof clr.g === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.r >= 0 && clr.r <= 1\n && clr.g >= 0 && clr.g <= 1\n && clr.b >= 0 && clr.b <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction isHsl(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'h' in clr && 's' in clr && 'l' in clr // && 'a' in clr\n && typeof clr.h === 'number' && typeof clr.s === 'number' && typeof clr.l === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.h >= 0 && clr.h <= 360\n && clr.s >= 0 && clr.s <= 1\n && clr.l >= 0 && clr.l <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction luminance(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const l = .5 * (Math.max(r, g, b) + Math.min(r, g, b));\n return l.clamp(0, 1);\n}\nconst cieUtils = {\n adjustRgbChannel: (v) => {\n // sRGB => sR'G'B'\n return v <= .03928 ? (v / 12.92) : Math.pow((v + .055) / 1.055, 2.4);\n },\n adjustRgbChannelInv: (v) => {\n // sR'G'B' => sRGB\n return v <= .00304 ? (v * 12.92) : 1.055 * (Math.pow(v, 1 / 2.4) - .055);\n },\n adjustRgb: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannel(rgb.r), g: cieUtils.adjustRgbChannel(rgb.g), b: cieUtils.adjustRgbChannel(rgb.b), a: rgb.a };\n return rgbOut;\n },\n adjustRgbInv: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannelInv(rgb.r), g: cieUtils.adjustRgbChannelInv(rgb.g), b: cieUtils.adjustRgbChannelInv(rgb.b), a: rgb.a };\n return rgbOut;\n },\n X: (adjustedRgb) => {\n return .4125 * adjustedRgb.r + .3576 * adjustedRgb.g + .1804 * adjustedRgb.b;\n },\n Y: (adjustedRgb) => {\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n return .2126 * adjustedRgb.r + .7152 * adjustedRgb.g + .0722 * adjustedRgb.b;\n },\n Z: (adjustedRgb) => {\n return .0193 * adjustedRgb.r + .1191 * adjustedRgb.g + .9503 * adjustedRgb.b;\n },\n relativeLuminance: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n return cieUtils.Y(adjRgb);\n },\n rgbToCieXYZ: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n const xyz = { x: cieUtils.X(adjRgb), y: cieUtils.Y(adjRgb), z: cieUtils.Z(adjRgb), a: rgb.a };\n return xyz;\n },\n cieXYZToRgb: (xyz) => {\n const r = 3.2410 * xyz.x - 1.5374 * xyz.y - .4986 * xyz.z, g = -.9692 * xyz.x + 1.8760 * xyz.y + .0416 * xyz.z, b = .0556 * xyz.x - .2040 * xyz.y + 1.0570 * xyz.z;\n return cieUtils.adjustRgbInv({ r, g, b, a: xyz.a });\n },\n /**\n * Returns the contrast ratio between two colors.\n * @param rgb1 Color 1\n * @param rgb2 Color 2\n * @returns A numeric value between 1 and 21.\n */\n contrastRatio: (rgb1, rgb2) => {\n // https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n const l1 = cieUtils.relativeLuminance(rgb1) + .05, l2 = cieUtils.relativeLuminance(rgb2) + .05;\n return l1 > l2 ?\n l1 / l2\n :\n l2 / l1;\n }\n};\nfunction saturation(rgb, l) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const s = (l === 0 || l === 1) ? 0 : (max - min) / (1 - Math.abs(2 * l - 1));\n return s.clamp(0, 1);\n}\n/**\n * Preucil 'hexagon' algorithm.\n * @param rgb\n */\nfunction hueHexagon(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const deg = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI;\n return (deg + 360) % 360;\n}\n/**\n * Preucil 'circle' algorithm.\n * @param rgb\n */\nfunction hueCircle(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n if (max !== min) {\n if (max === r) {\n hue = (60 * ((g - b) / (max - min)) + 360) % 360;\n }\n else if (max === g) {\n hue = (60 * ((b - r) / (max - min)) + 120) % 360;\n }\n else {\n hue = (60 * ((r - g) / (max - min)) + 240) % 360;\n }\n }\n return hue.clamp(0, 360);\n}\nfunction hexify(v) {\n return v.toString(16).padStart(2, '0');\n //return Pacem.Strings.leftPad(v.toString(16), 2, '0');\n}\n/** Color parsing, conversion (RGB/HSL/CIE XYZ) and manipulation utilities. */\nexport class Colors {\n /** Minimum WCAG contrast ratio recommended for large-scale text/graphical objects. */\n static { this.WCAG_MINIMUM_CONTRAST = 3.0; }\n /** Minimum WCAG (AA) contrast ratio recommended for normal-sized text. */\n static { this.WCAG_NORMAL_TEXT_CONTRAST = 4.5; }\n /** Minimum WCAG (AAA) contrast ratio recommended for enhanced accessibility. */\n static { this.WCAG_SAFE_CONTRAST = 7.0; }\n static _clampRGB(rgb) {\n const clmp = (n) => Math.min(1.0, Math.max(0, n));\n if (rgb[3] == null) {\n rgb[3] = 1.0;\n }\n return { r: clmp(rgb[0]), g: clmp(rgb[1]), b: clmp(rgb[2]), a: Math.min(1, Math.max(0, rgb[3])) };\n }\n static _normalize(rgb) {\n return [rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, rgb[3]];\n }\n /**\n * Parses a CSS color string (`rgb()`, `rgba()`, `#rrggbb`, `#rgb`, `hsl()` or `hsla()`) into an {@link Rgba} value.\n * @param clr CSS color string.\n * @returns The parsed color, or `undefined` if the string does not match any supported format.\n */\n static parse(clr) {\n clr = (clr || '').toLowerCase();\n /* rgb(255,255,255) */\n if (RGB_PATTERN.test(clr)) {\n let rgbArr = RGB_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), 1]));\n }\n /* rgba(255,255,255,.5) */\n if (RGBA_PATTERN.test(clr)) {\n let rgbArr = RGBA_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), parseFloat(rgbArr[4])]));\n }\n /* #ffffff */\n if (HEX_PATTERN.test(clr)) {\n let hex = HEX_PATTERN.exec(clr)[0];\n return this._clampRGB(this._normalize([parseInt('0x' + hex.substr(1, 2)), parseInt('0x' + hex.substr(3, 2)), parseInt('0x' + hex.substr(5, 2)), 1]));\n }\n /* #fff */\n if (HEX_SHORT_PATTERN.test(clr)) {\n let hex = HEX_SHORT_PATTERN.exec(clr)[0];\n let r = hex.substr(1, 1), g = hex.substr(2, 1), b = hex.substr(3, 1);\n return this._clampRGB(this._normalize([parseInt('0x' + r + r), parseInt('0x' + g + g), parseInt('0x' + b + b), 1]));\n }\n /* hsl(0,60%,100%) */\n if (HSL_PATTERN.test(clr)) {\n let hslArr = HSL_PATTERN.exec(clr);\n const hsl = { h: parseFloat(hslArr[1]), s: parseFloat(hslArr[2]) * .01, l: parseFloat(hslArr[3]) * .01 };\n return this.rgb(hsl);\n }\n /* hsla(0,40%,50%,.5) */\n if (HSLA_PATTERN.test(clr)) {\n let hslaArr = HSLA_PATTERN.exec(clr);\n const hsla = { h: parseFloat(hslaArr[1]), s: parseFloat(hslaArr[2]) * .01, l: parseFloat(hslaArr[3]) * .01, a: parseFloat(hslaArr[4]) };\n return this.rgb(hsla);\n }\n }\n /**\n * Converts an {@link Rgba} color into its {@link Hsla} equivalent.\n * @param rgb Color to convert.\n * @returns The converted color.\n */\n static hsl(rgb) {\n const l = luminance(rgb), s = saturation(rgb, l), h = hueCircle(rgb);\n return { h, s, l, a: rgb.a };\n }\n static cieXYZ(clr) {\n if (isHsl(clr)) {\n clr = this.rgb(clr);\n }\n return cieUtils.rgbToCieXYZ(clr);\n }\n static rgb(clr) {\n if (isHsl(clr)) {\n // hsl\n const h = clr.h, s = clr.s, l = clr.l, h6 = h / 60.0;\n const C = (1 - Math.abs(2 * l - 1)) * s;\n const X = C * (1 - Math.abs(h6 % 2 - 1));\n const m = l - C / 2;\n const compose = (r, g, b) => this._clampRGB([r + m, g + m, b + m, clr.a]);\n if (h6 <= 1) {\n return compose(C, X, 0);\n }\n else if (h6 <= 2) {\n return compose(X, C, 0);\n }\n else if (h6 <= 3) {\n return compose(0, C, X);\n }\n else if (h6 <= 4) {\n return compose(0, X, C);\n }\n else if (h6 <= 5) {\n return compose(X, 0, C);\n }\n else if (h6 <= 6) {\n return compose(C, 0, X);\n }\n }\n else {\n // cie XYZ\n const rgb = cieUtils.cieXYZToRgb(clr);\n return this._clampRGB([rgb.r, rgb.g, rgb.b, rgb.a]);\n }\n }\n static stringify(clr, arg1 = 1) {\n if (isHsl(clr)) {\n arg1 ??= 1;\n clr.a ??= 1;\n const precision = typeof arg1 === 'number' ? arg1 : 1;\n return `hsla(${clr.h.roundoff(precision)},${(clr.s * 100).roundoff(precision)}%,${(clr.l * 100).roundoff(precision)}%,${clr.a.roundoff()})`;\n }\n else if (isRgb(clr)) {\n arg1 ??= true;\n clr.a ??= 1;\n const hex = typeof arg1 === 'boolean' ? arg1 : !!arg1, r = Math.round(clr.r * 255), g = Math.round(clr.g * 255), b = Math.round(clr.b * 255), a = clr.a.roundoff();\n if (a === 1) {\n if (hex) {\n return ('#' + hexify(r) + hexify(g) + hexify(b)).toUpperCase();\n }\n return `rgb(${r},${g},${b})`;\n }\n return `rgba(${r},${g},${b},${a})`;\n }\n return undefined;\n }\n /**\n * Contrast ratio betwen two colors (useful for accessibility assessments). Output range: 1 (no-contrast) to 21 (maximum contrast)\n */\n static contrastRatio(clr1, clr2) {\n if (isHsl(clr1)) {\n clr1 = this.rgb(clr1);\n }\n if (isHsl(clr2)) {\n clr2 = this.rgb(clr2);\n }\n return cieUtils.contrastRatio(clr1, clr2);\n }\n /**\n * Returns the relative luminance as of WCAG specs.\n */\n static luminance(clr) {\n if (isHsl(clr)) {\n clr = Colors.rgb(clr);\n }\n return cieUtils.relativeLuminance(clr);\n }\n static lighten(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const l = Math.min(1, Math.max(0, clr.l + amount));\n return Object.assign({}, clr, { l });\n }\n if (isRgb(clr)) {\n const hsl = this.lighten(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static darken(clr, amount = 0.1) {\n return this.lighten(clr, -amount);\n }\n static saturate(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const s = Math.min(1, Math.max(0, clr.s + amount));\n return Object.assign({}, clr, { s });\n }\n if (isRgb(clr)) {\n const hsl = this.saturate(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static desaturate(clr, amount = 0.1) {\n return this.saturate(clr, -amount);\n }\n static interpolate(clr1, clr2, weight1, weight2) {\n weight1 ??= .5;\n weight2 ??= weight1;\n const weight = (weight1 + weight2).roundoff();\n const ratio1 = (weight1 / weight).roundoff(), ratio2 = (weight2 / weight).roundoff();\n const rgb = isRgb(clr1), hsl = isHsl(clr1);\n const toCieXYZ = (c) => {\n if (isRgb(c) || isHsl(c)) {\n return Colors.cieXYZ(c);\n }\n return c;\n };\n clr1 = toCieXYZ(clr1);\n clr2 = toCieXYZ(clr2);\n const clr = {\n x: (clr1.x * ratio1 + clr2.x * ratio2).roundoff(),\n y: (clr1.y * ratio1 + clr2.y * ratio2).roundoff(),\n z: (clr1.z * ratio1 + clr2.z * ratio2).roundoff(),\n a: (clr1.a * ratio1 + clr2.a * ratio2).roundoff(),\n };\n if (rgb) {\n return Colors.rgb(clr);\n }\n if (hsl) {\n return Colors.hsl(Colors.rgb(clr));\n }\n return clr;\n }\n}\n//}\n", "import { NullChecker } from \"./null-checker\";\n// 1.7763568394002505e-15 -20.4551920341394 40 40\nconst FLOAT_PATTERN = /[-+]?([\\d]+(\\.[\\d]+(e-[\\d]+)?)?|[\\d]*(\\.[\\d]+(e-[\\d]+)?))/g;\n/**\n * Extracts all the floating point numbers found in a string (e.g. `\"10px 20px\"` => `[10, 20]`).\n * @param input String to parse.\n * @returns Array of the numbers found, in order of appearance.\n */\nexport function parseAsNumericalArray(input) {\n const arr = [];\n let reg = input.match(FLOAT_PATTERN);\n if (reg && reg.length > 0) {\n reg.forEach(i => arr.push(parseFloat(i)));\n }\n return arr;\n}\n/** Angle-related utilities. */\nexport class Angle {\n /**\n * Type-guards a value as a valid {@link Angle} object.\n * @param obj Value to check.\n */\n static isAngle(obj) {\n return typeof obj === 'object'\n && 'vertex' in obj && Point.isPoint(obj['vertex'])\n && 'start' in obj && Point.isPoint(obj['start'])\n && 'end' in obj && Point.isPoint(obj['end']);\n }\n /**\n * Returns the angle span in radians.\n * Clockwise angles are positive, counterclockwise angles are negative.\n */\n static value(angle) {\n if (NullChecker.isNullOrEmpty(angle) || !Angle.isAngle(angle)) {\n return Number.NaN;\n }\n const { vertex, start, end } = angle;\n return Angle.angleBetween(vertex, start, end);\n }\n /**\n * Returns the angle (in radians) given the angle vertex and two points belonging to the rays that combine to build the angle sides.\n * Clockwise angles are positive, counterclockwise angles are negative.\n * @param vertex Angle vertex\n * @param start Point belonging to the start side\n * @param end Point belonging to the end side\n * @returns Angle span in radians [-pi, pi]\n */\n static angleBetween(vertex, start, end) {\n const v1 = { x: start.x - vertex.x, y: start.y - vertex.y }, v2 = { x: end.x - vertex.x, y: end.y - vertex.y };\n const dot = v1.x * v2.x + v1.y * v2.y;\n const cross = v1.x * v2.y - v1.y * v2.x;\n // clockwise positive, ccw negative\n return -Math.atan2(cross, dot);\n }\n}\n;\n/** Size-related utilities. */\nexport class Size {\n /**\n * Parses a string containing exactly two numbers into a {@link Size}.\n * @param sz String to parse (e.g. `\"100 50\"`).\n * @returns The parsed size.\n * @throws If `sz` does not contain exactly two numbers.\n */\n static parse(sz) {\n let arr = parseAsNumericalArray(sz);\n if (arr && arr.length === 2) {\n return { width: arr[0], height: arr[1] };\n }\n throw new Error(`Cannot parse \"${sz}\" as a valid Size.`);\n }\n /**\n * Type-guards a value as a valid {@link Size} object.\n * @param obj Value to check.\n */\n static isSize(obj) {\n return typeof obj === 'object'\n && 'width' in obj && typeof obj['width'] === 'number'\n && 'height' in obj && typeof obj['height'] === 'number';\n }\n}\n/** Point-related utilities. */\nexport class Point {\n /**\n * Parses a string containing exactly two numbers into a {@link Point}.\n * @param pt String to parse (e.g. `\"10 20\"`).\n * @returns The parsed point.\n * @throws If `pt` does not contain exactly two numbers.\n */\n static parse(pt) {\n let arr = parseAsNumericalArray(pt);\n if (arr && arr.length === 2) {\n return { x: arr[0], y: arr[1] };\n }\n throw new Error(`Cannot parse \"${pt}\" as a valid Point.`);\n }\n /**\n * Type-guards a value as a valid {@link Point} object.\n * @param obj Value to check.\n */\n static isPoint(obj) {\n return typeof obj === 'object'\n && 'x' in obj && typeof obj['x'] === 'number'\n && 'y' in obj && typeof obj['y'] === 'number';\n }\n /**\n * Computes the distance between two points.\n * @param p1 Point 1\n * @param p2 Point 2\n */\n static distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n }\n /**\n * Subtracts a point p from another and returns the resulting vector.\n * @param p Point to subtract\n * @param from Point to be subtracted from\n */\n static subtract(p, from) {\n return { x: from.x - p.x, y: from.y - p.y };\n }\n /**\n * Adds a set of points together and returns the resulting vector.\n * @param points Points to add\n */\n static add(...points) {\n var point = { x: 0, y: 0 };\n for (var p of points) {\n point.x += p.x;\n point.y += p.y;\n }\n return point;\n }\n /**\n * Memberwise multiplication.\n * @param p Original Point object\n * @param f Factor\n * @returns New Point object.\n */\n static multiply(p, f) {\n return { x: p.x * f, y: p.y * f };\n }\n}\n//}\n", "/// <reference path=\"geom.ts\" />\n;\n/** 2D affine matrix ([a b; c d] linear part, [e f] translation) manipulation utilities. */\nexport class Matrix2D {\n /**\n * Returns whether the given matrix is the identity matrix.\n * @param m Matrix to check.\n */\n static isIdentity(m) {\n return m.a === 1 && m.d === 1 && m.b === 0 && m.f === 0 && m.c === 0 && m.e === 0;\n }\n /** Gets a fresh identity matrix. @readonly */\n static get identity() {\n return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n }\n /**\n * Returns a shallow copy of the given matrix.\n * @param m Matrix to copy.\n */\n static copy(m) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n static scale(m, sx, sy = sx) {\n return { a: m.a * sx, b: m.b, c: m.c, d: m.d * sy, e: m.e, f: m.f };\n }\n /**\n * Returns a copy of `m` translated by the given vector.\n * @param m Matrix to translate.\n * @param t Translation vector.\n */\n static translate(m, t) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + t.x, f: m.f + t.y };\n }\n /**\n * Returns a copy of `m` rotated (about the origin) by the given angle.\n * @param m Matrix to rotate.\n * @param rad Rotation angle, in radians.\n */\n static rotate(m, rad) {\n const cos = Math.cos(rad), sin = Math.sin(rad);\n return Matrix2D.multiply(m, { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 });\n }\n static multiply(m1, m2) {\n if (\"x\" in m1 && \"y\" in m1) {\n if (typeof m2 === 'number') {\n return { x: m1.x * m2, y: m1.y * m2 };\n }\n else {\n return { x: m1.x * m2.a + m1.y * m2.c + m2.e, y: m1.x * m2.b + m1.y * m2.d + m2.f };\n }\n }\n if (typeof m2 === 'number') {\n return {\n a: m1.a * m2, b: m1.b * m2, c: m1.c * m2, d: m1.d * m2, e: m1.e * m2, f: m1.f * m2\n };\n }\n return {\n a: m1.a * m2.a + m1.b * m2.c,\n b: m1.a * m2.b + m1.b * m2.d,\n c: m1.c * m2.a + m1.d * m2.c,\n d: m1.c * m2.b + m1.d * m2.d,\n e: m1.e * m2.a + m1.f * m2.c + m2.e,\n f: m1.e * m2.b + m1.f * m2.d + m2.f\n };\n }\n /**\n * Computes the determinant of the matrix's linear part.\n * @param m Matrix to compute the determinant of.\n */\n static det(m) {\n return m.a * m.d - m.c * m.b;\n }\n /**\n * Computes the inverse of the given matrix.\n * @param m Matrix to invert.\n * @returns The inverse matrix, or `null` if `m` is singular (determinant is zero).\n */\n static invert(m) {\n const det = this.det(m);\n if (det === 0) {\n // NaM(2D) ? \n return null;\n }\n const invdet = 1 / det;\n /*\n * 1. swap a, d\n * 2. swap c, b and change signs\n * 3. e := -e*d + f*c\n * 4. f := e*b - f*a\n * 5. divide everything by [det]\n */\n return this.multiply({\n a: m.d,\n b: -m.b,\n c: -m.c,\n d: m.a,\n e: -m.e * m.d + m.c * m.f,\n f: m.e * m.b - m.a * m.f\n }, invdet);\n }\n /**\n * Decomposes a matrix into its scale, rotation and translation components.\n * @param m Matrix to decompose.\n * @param transformOrigin Origin about which the rotation/scale are considered to be applied (defaults to `{x:0, y:0}`).\n * @returns The decomposed `scaleX`, `scaleY`, `rotation` (radians) and `translation`.\n */\n static toComponents(m, transformOrigin = { x: 0, y: 0 }) {\n const scaleX = Math.sqrt(m.a * m.a + m.c * m.c);\n const scaleY = Math.sqrt(m.b * m.b + m.d * m.d);\n const cos = scaleX != 0 ? m.a / scaleX : 0;\n const sin = scaleX != 0 ? m.c / scaleX : 0;\n const rotation = Math.atan2(sin, cos);\n const { x: px, y: py } = transformOrigin;\n const translation = {\n x: m.e - px * (scaleX * cos - 1) + py * scaleX * sin,\n y: m.f - py * (scaleY * cos - 1) - px * scaleY * sin,\n };\n return {\n scaleX, scaleY, rotation,\n translation\n };\n }\n /**\n * Returns the matrix that transforms the triangle defined by the points p0, p1, p2 into the triangle defined by the points q0, q1, q2.\n * @param param0 Triangle defined by the points p0, p1, p2 (before transformation).\n * @param param1 Triangle defined by the points q0, q1, q2 (after transformation).\n * @returns Transformation matrix.\n */\n static fromTransform([p0, p1, p2], [q0, q1, q2]) {\n const det = p0.x * (p1.y - p2.y) -\n p0.y * (p1.x - p2.x) +\n (p1.x * p2.y - p2.x * p1.y);\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Points are collinear; matrix is singular and cannot be solved.\");\n }\n const idet = 1 / det;\n // Matrix inversion of the 3x3 augmented source points\n // then multiplied by the destination points to get rows 1 and 2\n return {\n a: idet * (q0.x * (p1.y - p2.y) + q1.x * (p2.y - p0.y) + q2.x * (p0.y - p1.y)),\n b: idet * (q0.y * (p1.y - p2.y) + q1.y * (p2.y - p0.y) + q2.y * (p0.y - p1.y)),\n c: idet * (q0.x * (p2.x - p1.x) + q1.x * (p0.x - p2.x) + q2.x * (p1.x - p0.x)),\n d: idet * (q0.y * (p2.x - p1.x) + q1.y * (p0.x - p2.x) + q2.y * (p1.x - p0.x)),\n e: idet * (q0.x * (p1.x * p2.y - p2.x * p1.y) +\n q1.x * (p2.x * p0.y - p0.x * p2.y) +\n q2.x * (p0.x * p1.y - p1.x * p0.y)),\n f: idet * (q0.y * (p1.x * p2.y - p2.x * p1.y) +\n q1.y * (p2.x * p0.y - p0.x * p2.y) +\n q2.y * (p0.x * p1.y - p1.x * p0.y))\n };\n }\n /**\n * Returns whether two matrices are equal to each other, within a certain precision (number of decimal digits).\n * @param m1\n * @param m2\n * @param precision\n * @returns\n */\n static areClose(m1, m2, precision = 12) {\n return m1.a.isCloseTo(m2.a, precision)\n && m1.b.isCloseTo(m2.b, precision)\n && m1.c.isCloseTo(m2.c, precision)\n && m1.d.isCloseTo(m2.d, precision)\n && m1.e.isCloseTo(m2.e, precision)\n && m1.f.isCloseTo(m2.f, precision);\n }\n}\n// }\n", "import { Matrix2D } from './matrix2d';\nimport { parseAsNumericalArray, Point, Size } from \"./geom\";\n/** Rectangle-related utilities (parsing, transform computation, intersection, bounding box). */\nexport class Rect {\n /**\n * Parses a string containing exactly four numbers into a {@link Rect}.\n * @param rect String to parse (e.g. `\"0 0 100 50\"`, in `x y width height` order).\n * @returns The parsed rect.\n * @throws If `rect` does not contain exactly four numbers.\n */\n static parse(rect) {\n let arr = parseAsNumericalArray(rect);\n if (arr && arr.length === 4) {\n return { x: arr[0], y: arr[1], width: arr[2], height: arr[3] };\n }\n throw new Error(`Cannot parse \"${rect}\" as a valid Rect.`);\n }\n /**\n * Type-guards a value as a valid {@link Rect} object.\n * @param obj Value to check.\n */\n static isRect(obj) {\n return Point.isPoint(obj) && Size.isSize(obj);\n }\n static _stretch(from, to) {\n return { a: to.width / from.width, b: 0, c: 0, d: to.height / from.height, e: to.x - from.x, f: to.y - from.y };\n }\n static _contain(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio >= toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _cover(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio < toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _align(from, to, align, valign) {\n let x = 0, y = 0;\n switch (align) {\n case 'left':\n x = to.x - from.x;\n break;\n case 'right':\n x = (to.x + to.width - from.width) - from.x;\n break;\n default:\n x = (to.x + to.width * .5 - from.width * .5) - from.x;\n break;\n }\n switch (valign) {\n case 'top':\n y = to.y - from.y;\n break;\n case 'bottom':\n y = (to.y + to.height - from.height) - from.y;\n break;\n default:\n y = (to.y + to.height * .5 - from.height * .5) - from.y;\n break;\n }\n return { x, y };\n }\n /**\n * Computes the 2D matrix that transforms one rect into another.\n * @param a Rect from\n * @param b Rect to\n * @param mode Transformation mode\n * @param align Horizontal alignment\n * @param valign Vertical alignment\n */\n static findTransform(a, b, mode = 'stretch', align = 'center', valign = 'middle') {\n switch (mode) {\n case 'contain':\n return this._contain(a, b, align, valign);\n case 'cover':\n return this._cover(a, b, align, valign);\n default:\n return this._stretch(a, b);\n }\n }\n /**\n * Computes the intersection rect among a set of provided rects.\n * @param rects Rects to intersect\n */\n static intersect(...rects) {\n const empty = { x: 0, y: 0, height: 0, width: 0 }, arr = Array.from(rects || []);\n if (arr.length <= 0) {\n return empty;\n }\n var rect = arr[0];\n for (var i = 1; i < arr.length; i++) {\n const r = arr[i];\n const x = Math.max(r.x, rect.x), y = Math.max(r.y, rect.y), xw = Math.min(r.x + r.width, rect.x + rect.width), xh = Math.min(r.y + r.height, rect.y + rect.height), w = xw - x, h = xh - y;\n if (w < 0 || h <= 0) {\n // no intersection\n return empty;\n }\n rect = { x: x, y: y, width: w, height: h };\n }\n return rect;\n }\n static expand(rect, ...args) {\n const arr = Array.from(args || []);\n let x0 = rect.x, y0 = rect.y, x1 = x0, y1 = y0;\n if (Rect.isRect(rect)) {\n x1 += rect.width;\n y1 += rect.height;\n }\n for (let p of arr) {\n x0 = Math.min(p.x, x0);\n y0 = Math.min(p.y, y0);\n x1 = Math.max(p.x, x1);\n y1 = Math.max(p.y, y1);\n }\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n }\n}\n//}\n", "// namespace Pacem {\n/** Grants undo/redo functionalities for given state. */\nexport class HistoryService {\n /**\n * @param state Initial state.\n * @param maxlength Maximum number of stored states (undo queue + redo stack); unbounded when omitted.\n */\n constructor(state, maxlength) {\n this.#current = state;\n this.#maxlength = maxlength;\n }\n // it's a queue\n #backwards = [];\n // it's a stack\n #forwards = [];\n // max number of items (queue + stack)\n #maxlength;\n #current;\n /**\n * Gets the current state.\n */\n get current() {\n return this.#current;\n }\n /** Gets whether there is a previous state to revert to. @readonly */\n get canUndo() {\n return this.#backwards.length > 0;\n }\n /** Gets whether there is a subsequent state to reapply. @readonly */\n get canRedo() {\n return this.#forwards.length > 0;\n }\n /** Sets the maximum number of stored states, queue + stack.\n */\n set maxlength(v) {\n this.#maxlength = v;\n }\n /** Reverts to the previous state, if any (see {@link canUndo}), moving the current state onto the redo stack. */\n undo() {\n if (this.canUndo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n fore.unshift(current);\n this.#current = back.pop();\n }\n }\n /** Reapplies the next state, if any (see {@link canRedo}), moving the current state onto the undo queue. */\n redo() {\n if (this.canRedo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n back.push(current);\n this.#current = fore.shift();\n }\n }\n /**\n * Pushes a new current state, clearing the redo stack and enqueuing the previous current state for undo.\n * Trims the undo queue to `maxlength`, if set.\n * @param state New current state.\n */\n push(state) {\n this.#forwards.splice(0);\n this.#backwards.push(this.#current);\n this.#current = state;\n const max = this.#maxlength, queue = this.#backwards;\n if (max > 0 && queue.length > max) {\n queue.splice(0, queue.length - max);\n }\n }\n /** Clears both the undo queue and the redo stack, leaving the current state untouched. */\n reset() {\n this.#forwards.splice(0);\n this.#backwards.splice(0);\n }\n}\n// }\n", "// namespace Pacem {\nimport { Rect } from \"./rect\";\nconst DefaultImagingResizeOptions = {\n mode: 'stretch',\n align: 'center',\n valign: 'middle',\n quality: 1,\n type: 'image/jpeg'\n};\n/** Image loading and resizing utilities, based on `OffscreenCanvas`. */\nexport class Imaging {\n /**\n * Fetches an image from a URL as a `Blob`.\n * @param url URL of the image to load.\n * @returns A promise resolving with the loaded `Blob`, or `null` if the fetch response was not OK.\n */\n static async loadImage(url) {\n const response = await fetch(url);\n if (!response.ok) {\n return null;\n }\n const blob = await response.blob();\n return blob;\n }\n static async resizeImage(img, width, height, options) {\n if (width <= 0 || height <= 0 || isNaN(width) || isNaN(height)) {\n throw new Error('Invalid target size');\n }\n if (typeof img === 'string') {\n img = await Imaging.loadImage(img);\n }\n const el = await self.createImageBitmap(img);\n const origWidth = el.width, origHeight = el.height;\n const cnv = new OffscreenCanvas(origWidth, origHeight);\n const ctx = cnv.getContext('2d');\n ctx.imageSmoothingEnabled =\n ctx['mozImageSmoothingEnabled'] =\n ctx['oImageSmoothingEnabled'] =\n ctx['webkitImageSmoothingEnabled'] =\n true;\n const { quality, type, mode, align, valign, background } = Object.assign({}, DefaultImagingResizeOptions, options ?? {});\n const from = { width: origWidth, height: origHeight, x: 0, y: 0 }, to = { x: 0, y: 0, width, height };\n const transformMatrix = Rect.findTransform(from, to, mode, align, valign);\n cnv.width = width;\n cnv.height = height;\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, cnv.width, cnv.height);\n }\n ctx.setTransform(transformMatrix);\n ctx.drawImage(el, 0, 0);\n const retval = await cnv.convertToBlob({ quality, type });\n return retval;\n }\n}\n// }\n", "// namespace Pacem {\n/** Unique key/id generation utilities. */\nexport class Keys {\n static #seed;\n /**\n * Generates a process-wide monotonically increasing numeric id, seeded from the current timestamp.\n * @returns A new unique numeric id.\n */\n static uniqueId() {\n let seed = Keys.#seed || Date.now();\n return Keys.#seed = ++seed;\n }\n /**\n * Generates a process-wide unique id, base-62 encoded.\n * @returns A new unique string code.\n */\n static uniqueCode() {\n const newid = Keys.uniqueId();\n return newid.toBase62();\n }\n /**\n * Generates a random base-62 string of at least the given length.\n * @param length Minimum length of the generated string.\n * @returns A random string.\n */\n static randomString(length) {\n let retval = '';\n do {\n retval += (Math.random() * 62).toBase62();\n } while (retval.length < length);\n return retval;\n }\n}\n// }\n", "// namespace Pacem {\n/** Numeric utilities. */\nexport class Numbers {\n /**\n * Rounds a number to the nearest multiple of `step`.\n * @param x Value to round.\n * @param step Rounding step/increment (defaults to 1).\n * @returns The rounded value.\n */\n static round(x, step = 1.0) {\n return Math.round(x / step) * step;\n }\n /**\n * Computes the logarithm of `x` in an arbitrary `base`.\n * @param x Value to compute the logarithm of.\n * @param base Logarithm base.\n */\n static log(x, base) {\n return Math.log10(x) / Math.log10(base);\n }\n /**\n * Converts a number (or numeric string) from one base to another.\n * @param v Value to convert, expressed in base `from`.\n * @param from Source base (2-36).\n * @param to Target base (2-36).\n * @returns The value re-expressed in base `to`, as a string; `\"NaN\"` if `v` is not a valid number in base `from`.\n */\n static rebase(v, from, to) {\n const vStr = v.toString();\n const firstPass = parseInt(vStr, from);\n if (!vStr.endsWith(firstPass.toString(from))) {\n return Number.NaN.toString();\n }\n return parseInt(v.toString(), from).toString(to);\n }\n}\n//}\n", "// namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/**\n * Computes the Longest Common Subsequence (LCS) table for two arrays of strings.\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @returns The DP table for LCS lengths.\n */\nfunction lcs(aTokens, bTokens) {\n const m = aTokens.length;\n const n = bTokens.length;\n // Initialize DP table with zeros\n const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n // Fill DP table\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (aTokens[i - 1] === bTokens[j - 1]) {\n // Tokens match, increment LCS length\n dp[i][j] = dp[i - 1][j - 1] + 1;\n }\n else {\n // Tokens don't match, take max length from previous states\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n return dp;\n}\n/**\n * Internal diff implementation using backtracking on the LCS DP table.\n * Works on token arrays (characters, words, lines).\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @param dp The precomputed LCS DP table.\n * @param joiner The string to use when joining tokens of the same type (e.g., \"\" for chars, \"\\n\" for lines).\n * For word diffing, joiner is effectively \"\" because whitespace is part of the tokens.\n * @returns An array of DiffTokens representing the differences.\n */\nfunction diffInternal(aTokens, bTokens, dp, joiner = '') {\n const m = aTokens.length;\n const n = bTokens.length;\n const result = [];\n let i = m, j = n;\n let currentToken = null;\n const finalizeToken = () => {\n if (currentToken) {\n result.push(currentToken);\n currentToken = null;\n }\n };\n // Backtrack through the DP table\n while (i > 0 || j > 0) { // Continue until both sequences are fully processed\n var currentType = null;\n let currentValue = null;\n if (i > 0 && j > 0 && aTokens[i - 1] === bTokens[j - 1]) {\n // Common token\n currentType = '=';\n currentValue = aTokens[i - 1];\n i--;\n j--;\n }\n else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Token added in b\n currentType = '+';\n currentValue = bTokens[j - 1];\n j--;\n }\n else if (i > 0 && (j === 0 || dp[i - 1][j] > dp[i][j - 1])) {\n // Token removed from a\n currentType = '-';\n currentValue = aTokens[i - 1];\n i--;\n }\n if (currentType && currentValue !== null) {\n if (currentToken && currentToken.type === currentType) {\n // Prepend the value to the existing token\n currentToken.value = currentValue + (currentToken.value ? joiner : '') + currentToken.value;\n }\n else {\n // Finalize the previous token (if different type) and start a new one\n finalizeToken();\n currentToken = { type: currentType, value: currentValue };\n }\n }\n else {\n // Should not happen in standard LCS backtracking, but finalize just in case\n finalizeToken();\n }\n }\n finalizeToken(); // Add the last accumulated token\n return result.reverse(); // Reverse to get the correct order\n}\n/**\n* Performs character-level diffing.\n* @param a The first string.\n* @param b The second string.\n* @returns An array of DiffTokens.\n*/\nfunction diffChars(a, b) {\n const aTokens = a.split(''); // Split into characters\n const bTokens = b.split(''); // Split into characters\n const dp = lcs(aTokens, bTokens);\n // No joiner needed as characters are concatenated directly\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs word-level diffing, preserving whitespace and line breaks.\n * It tokenizes based on sequences of non-whitespace (\\S+) or whitespace (\\s+).\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens.\n */\nfunction diffWords(a, b) {\n // Tokenize into words (\\S+) and whitespace/newlines (\\s+)\n // This preserves the original spacing and line breaks.\n const wordRegex = /(\\S+|\\s+)/g;\n const aTokens = a.match(wordRegex) || [];\n const bTokens = b.match(wordRegex) || [];\n const dp = lcs(aTokens, bTokens);\n // No joiner needed; whitespace tokens handle spacing.\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs line-level diffing.\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens where each token's value can contain multiple lines.\n */\nfunction diffLines(a, b) {\n // Split by newline characters, keeping the EOL character concept separate\n // The result of split does not contain the separators themselves.\n const lineRegex = /\\r?\\n/;\n const aTokens = a.split(lineRegex);\n const bTokens = b.split(lineRegex);\n // Handle potential empty string added by split if text ends with a newline\n // (This behavior is often desired, representing an empty line after the last newline)\n // Example: \"a\\nb\\n\".split(/\\n/) -> [\"a\", \"b\", \"\"]\n const dp = lcs(aTokens, bTokens);\n // Join consecutive lines of the same type with newline characters\n return diffInternal(aTokens, bTokens, dp, '\\n');\n}\n//#endregion\n/** String manipulation utilities. */\nexport class Strings {\n /** @deprecated Use String.prototype.padStart() instead. */\n static leftPad(v, targetLength, padChar) {\n let retval = v.toString();\n return retval.padStart(targetLength, padChar);\n //while (retval.length < targetLength)\n // retval = padChar + retval;\n //return retval;\n }\n /**\n * Formats a template string, replacing `{0}`, `{1}`, ... placeholders with the corresponding arguments.\n * Doubled braces (`{{`/`}}`) escape a placeholder.\n * @param template Template string containing `{n}` placeholders.\n * @param args Values to substitute into the placeholders, by index.\n * @returns The formatted string.\n * @throws If the template references an argument index that was not supplied.\n */\n static format(template, ...args) {\n const array = Array.from(args);\n let retval = template;\n for (let j = 0; j < array.length; j++) {\n const regex = new RegExp('(^|[^\\\\{])\\\\{' + j + '\\\\}($|[^\\\\}])', 'g');\n retval = retval.replaceAll(regex, (match, ...args0) => {\n return match.replace('{' + j + '}', array[j]);\n });\n }\n const check = /(^|[^\\{}])\\{(\\d+)\\}($|[^\\}])/.exec(retval);\n if (!NullChecker.isNullOrEmpty(check)) {\n throw new Error(`Missing argument at index ${check[2]}.`);\n }\n return retval;\n }\n /**\n * Computes a diff between two strings, using the Longest Common Subsequence algorithm.\n * @param a First (original) string.\n * @param b Second (modified) string.\n * @param mode Diffing granularity: `'char'` (default), `'word'` or `'line'`.\n * @returns Array of {@link DiffToken}s describing unchanged, removed and added chunks.\n */\n static diff(a, b, mode = 'char') {\n switch (mode) {\n case 'line':\n return diffLines(a, b);\n case 'word':\n return diffWords(a, b);\n default:\n return diffChars(a, b);\n }\n }\n /**\n * Computes the cryptographic hash of a string using the SubtleCrypto API.\n * @param input String to hash.\n * @param algo Hash algorithm to use (defaults to `SHA-256`).\n * @returns A promise resolving with the hash, hex-encoded.\n */\n static async hash(input, algo = 'SHA-256') {\n const hashBuffer = await crypto.subtle.digest(algo, new TextEncoder().encode(input));\n return Array.from(new Uint8Array(hashBuffer))\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n// }\n", "import * as Markdown from './index-compile-markdown';\nexport { Markdown };\nexport * from './compile/parser';\nexport * from './compile/syntax/types';\nexport * from './compile/syntax/registry';\nexport * from './compile/syntax/scanner';\nexport * from './compile/syntax/highlight';\nexport * from './compile/syntax/builtins';\n", "export * from './compile/markdown/parser';\n", "//namespace Pacem.Compile {\nclass LexerClass {\n tokenize(input, grammar) {\n const tokens = [];\n while (input) {\n const start = input.length;\n for (let rule of grammar) {\n const newTokens = rule.exec(input, /* arguments that ease recursion when needed */ this), length = newTokens?.length;\n if (length > 0) {\n Array.prototype.push.apply(tokens, newTokens);\n const last = newTokens[length - 1];\n input = input.substr((last.index || 0) + last.raw.length);\n break;\n }\n }\n if (input.length >= start) {\n // break infinite loop\n throw new Error(`Cannot parse\\n\"${input}\"\\n using the provided grammar.`);\n }\n }\n return tokens;\n }\n}\n/** Generic tokenize-then-render text parser: lexes input against a grammar, then renders the resulting token tree. */\nexport class Parser {\n /**\n * @param _lexer Lexer implementation to use (defaults to a built-in greedy, rule-ordered lexer).\n */\n constructor(_lexer = new LexerClass()) {\n this._lexer = _lexer;\n }\n /**\n * Tokenizes `input` against `grammar` and renders the resulting token tree.\n * @param input String to parse.\n * @param grammar Ordered list of rules describing the grammar.\n * @param renderer Renderer used to turn the token tree into the output string.\n * @returns The rendered output.\n */\n parse(input, grammar, renderer) {\n const tokens = this._lexer.tokenize(input, grammar);\n return renderer.render(tokens);\n }\n}\n//}\n", "/** Token types shared by the built-in vocabularies (vocabularies may add their own). */\nexport var SyntaxTokenType;\n(function (SyntaxTokenType) {\n SyntaxTokenType[\"Text\"] = \"text\";\n SyntaxTokenType[\"Space\"] = \"space\";\n SyntaxTokenType[\"Newline\"] = \"newline\";\n SyntaxTokenType[\"Comment\"] = \"comment\";\n SyntaxTokenType[\"DocComment\"] = \"doc-comment\";\n SyntaxTokenType[\"Keyword\"] = \"keyword\";\n SyntaxTokenType[\"Identifier\"] = \"identifier\";\n SyntaxTokenType[\"String\"] = \"string\";\n SyntaxTokenType[\"Regex\"] = \"regex\";\n SyntaxTokenType[\"Number\"] = \"number\";\n SyntaxTokenType[\"Bracket\"] = \"bracket\";\n SyntaxTokenType[\"Punctuation\"] = \"punctuation\";\n SyntaxTokenType[\"Operator\"] = \"operator\";\n SyntaxTokenType[\"Preprocessor\"] = \"preprocessor\";\n SyntaxTokenType[\"Tag\"] = \"tag\";\n SyntaxTokenType[\"TagName\"] = \"tagname\";\n SyntaxTokenType[\"Attribute\"] = \"attribute\";\n SyntaxTokenType[\"Entity\"] = \"entity\";\n})(SyntaxTokenType || (SyntaxTokenType = {}));\n", "//namespace Pacem.Compile {\nconst registry = new Map();\nfunction normalize(name) {\n return (name ?? '').trim().toLowerCase();\n}\n/**\n * Registry of the {@link Syntax} vocabularies known to the {@link Scanner}, by (case-insensitive) name and aliases.\n * The built-in vocabularies (see {@link SyntaxName}) are registered upfront; more can be\n * registered at runtime, e.g. after fetching them as JSON.\n */\nexport class Syntaxes {\n /**\n * Registers (or replaces) a syntax under its name and aliases.\n * @param syntax The vocabulary to register.\n */\n static register(syntax) {\n if (syntax == null) {\n return;\n }\n const names = [syntax.name].concat(syntax.aliases ?? []);\n for (let name of names) {\n const key = normalize(name);\n registry.set(key, syntax);\n }\n }\n /**\n * Gets a registered syntax by name or alias.\n * @param nameOrAlias Case-insensitive name or alias (e.g. `'ts'`).\n * @returns The syntax, or `null` when unknown.\n */\n static get(nameOrAlias) {\n const key = normalize(nameOrAlias);\n return registry.get(key) ?? null;\n }\n /** Names (and aliases) of every registered syntax. */\n static names() {\n const keys = registry.keys();\n return Array.from(keys);\n }\n}\n", "import { SyntaxTokenType } from './types';\nimport { Syntaxes } from './registry';\n//namespace Pacem.Compile {\nconst DEFAULT_START = 'root';\nconst DEFAULT_KEYWORD_SOURCES = [SyntaxTokenType.Identifier];\nconst DEFAULT_INSIGNIFICANT = [SyntaxTokenType.Space, SyntaxTokenType.Newline, SyntaxTokenType.Comment, SyntaxTokenType.DocComment];\n/** Consecutive zero-length transitions tolerated before a rule gets skipped (guards against push/pop loops). */\nconst MAX_EMPTY_TRANSITIONS = 64;\n/** Base-syntax chain length tolerated before giving up (guards against `extends` cycles). */\nconst MAX_EXTENDS_DEPTH = 16;\nfunction isCombined(item) {\n return item.combined != null;\n}\nconst compiledCache = new WeakMap();\nfunction isIncludeRule(rule) {\n return 'include' in rule;\n}\nfunction toSet(values) {\n if (values == null || values.length === 0) {\n return null;\n }\n return new Set(values);\n}\nfunction uniqueFlags(flags) {\n const chars = flags.split('');\n const unique = new Set(chars);\n const array = Array.from(unique);\n return array.join('');\n}\nfunction mergeStates(own, base) {\n const merged = {};\n for (let name in base) {\n merged[name] = base[name].slice();\n }\n for (let name in own) {\n const baseRules = merged[name] ?? [];\n merged[name] = own[name].concat(baseRules);\n }\n return merged;\n}\nfunction mergeKeywords(own, base) {\n const merged = {};\n for (let type in base) {\n merged[type] = base[type].slice();\n }\n for (let type in own) {\n const baseWords = merged[type] ?? [];\n merged[type] = baseWords.concat(own[type]);\n }\n return merged;\n}\n/** Resolves the `extends` chain of `syntax` (own rules first, then the base ones). */\nfunction mergeSyntax(syntax, depth = 0) {\n const lexical = syntax.lexical ?? { states: {} };\n const own = {\n start: lexical.start,\n states: lexical.states ?? {},\n keywords: lexical.keywords ?? {},\n keywordSources: lexical.keywordSources,\n keywordExceptAfter: lexical.keywordExceptAfter,\n insignificant: lexical.insignificant\n };\n const baseSyntax = syntax.extends ? Syntaxes.get(syntax.extends) : null;\n if (baseSyntax == null || baseSyntax === syntax || depth >= MAX_EXTENDS_DEPTH) {\n return own;\n }\n const base = mergeSyntax(baseSyntax, depth + 1);\n return {\n start: own.start ?? base.start,\n states: mergeStates(own.states, base.states),\n keywords: mergeKeywords(own.keywords, base.keywords),\n keywordSources: own.keywordSources ?? base.keywordSources,\n keywordExceptAfter: own.keywordExceptAfter ?? base.keywordExceptAfter,\n insignificant: own.insignificant ?? base.insignificant\n };\n}\n/** Flattens `include` rules of a state (recursively, ignoring cycles). */\nfunction expandRules(states, stateName, visiting) {\n const rules = states[stateName] ?? [];\n if (visiting.has(stateName)) {\n return [];\n }\n visiting.add(stateName);\n const expanded = [];\n for (let rule of rules) {\n if (!isIncludeRule(rule)) {\n expanded.push(rule);\n continue;\n }\n const included = expandRules(states, rule.include, visiting);\n Array.prototype.push.apply(expanded, included);\n }\n visiting.delete(stateName);\n return expanded;\n}\nfunction compileCondition(condition) {\n if (condition == null) {\n return null;\n }\n return {\n previousTypes: toSet(condition.previousTypes),\n previousNotTypes: toSet(condition.previousNotTypes),\n previousTexts: toSet(condition.previousTexts),\n previousNotTexts: toSet(condition.previousNotTexts)\n };\n}\nfunction compileRule(rule) {\n const groupTypes = Array.isArray(rule.type) ? rule.type : null;\n const type = Array.isArray(rule.type) ? rule.type[0] : rule.type;\n // sticky and indices flags are the engine's business\n const userFlags = (rule.flags ?? '').replace(/[yd]/g, '');\n const ownFlags = uniqueFlags(userFlags);\n // the `d` flag yields the capture group offsets, needed to split a match into per-group tokens\n const flags = ownFlags + 'y' + (groupTypes ? 'd' : '');\n const regex = new RegExp(rule.match, flags);\n const until = rule.until ? new RegExp(rule.until, 'y') : null;\n const pop = rule.pop === true ? 1 : (typeof rule.pop === 'number' ? rule.pop : 0);\n const when = compileCondition(rule.when);\n return {\n regex, type, groupTypes, when, pop, until,\n source: rule.match,\n flags: ownFlags,\n next: rule.next ?? null,\n push: rule.push ?? null,\n embed: rule.embed ?? null,\n hasTransition: pop > 0 || !!rule.next || !!rule.push || !!rule.embed\n };\n}\nfunction compileKeywords(keywords) {\n const map = new Map();\n for (let type in keywords) {\n for (let word of keywords[type]) {\n map.set(word, type);\n }\n }\n return map;\n}\n/** Backreferences and named groups would break once renumbered/duplicated inside an alternation. */\nconst UNMERGEABLE_SOURCE = /\\\\[1-9]|\\\\k<|\\(\\?<(?![=!])/;\nfunction countGroups(source, flags) {\n const probe = new RegExp(source + '|', flags);\n const match = probe.exec('');\n return match.length - 1;\n}\nfunction canMatchEmpty(source, flags) {\n const probe = new RegExp('^(?:' + source + ')$', flags);\n return probe.test('');\n}\n/** Whether a rule can be merged into a {@link CombinedSegment}. */\nfunction isMergeable(rule) {\n if (rule.when != null || UNMERGEABLE_SOURCE.test(rule.source)) {\n return false;\n }\n return !canMatchEmpty(rule.source, rule.flags);\n}\nfunction combine(rules) {\n if (rules.length === 1) {\n return { rule: rules[0], combined: null };\n }\n const groupIndices = [];\n let groupIndex = 1;\n for (let rule of rules) {\n groupIndices.push(groupIndex);\n const ownGroups = countGroups(rule.source, rule.flags);\n groupIndex += 1 + ownGroups;\n }\n const alternatives = rules.map(r => '(' + r.source + ')');\n const source = alternatives.join('|');\n const combined = new RegExp(source, rules[0].flags + 'y');\n return { rule: null, combined, rules, groupIndices };\n}\n/** Groups consecutive mergeable rules (sharing the same flags) into combined segments, keeping their order. */\nfunction segment(rules) {\n const segments = [];\n let pending = [];\n const flush = () => {\n if (pending.length > 0) {\n const combinedSegment = combine(pending);\n segments.push(combinedSegment);\n }\n pending = [];\n };\n for (let rule of rules) {\n if (!isMergeable(rule)) {\n flush();\n segments.push({ rule, combined: null });\n continue;\n }\n if (pending.length > 0 && pending[0].flags !== rule.flags) {\n flush();\n }\n pending.push(rule);\n }\n flush();\n return segments;\n}\nfunction compileSyntax(syntax) {\n const cached = compiledCache.get(syntax);\n if (cached != null) {\n return cached;\n }\n const merged = mergeSyntax(syntax);\n const states = new Map();\n for (let name in merged.states) {\n const visiting = new Set();\n const rules = expandRules(merged.states, name, visiting);\n const compiledRules = rules.map(compileRule);\n const segments = segment(compiledRules);\n states.set(name, segments);\n }\n const compiled = {\n name: syntax.name,\n start: merged.start ?? DEFAULT_START,\n states,\n keywords: compileKeywords(merged.keywords),\n keywordSources: new Set(merged.keywordSources ?? DEFAULT_KEYWORD_SOURCES),\n keywordExceptAfter: new Set(merged.keywordExceptAfter ?? []),\n insignificant: new Set(merged.insignificant ?? DEFAULT_INSIGNIFICANT)\n };\n compiledCache.set(syntax, compiled);\n return compiled;\n}\nfunction compileByName(name) {\n const syntax = Syntaxes.get(name);\n if (syntax == null) {\n return null;\n }\n return compileSyntax(syntax);\n}\nfunction meets(condition, previous) {\n const type = previous?.type ?? null, text = previous?.raw ?? null;\n if (condition.previousTypes != null && !condition.previousTypes.has(type)) {\n return false;\n }\n if (condition.previousNotTypes != null && condition.previousNotTypes.has(type)) {\n return false;\n }\n if (condition.previousTexts != null && !condition.previousTexts.has(text)) {\n return false;\n }\n return condition.previousNotTexts == null || !condition.previousNotTexts.has(text);\n}\n/** A single tokenization pass: holds the cursor, the state stack and the produced tokens. */\nclass ScanRun {\n constructor(_source, root) {\n this._source = _source;\n this._tokens = [];\n /** Current scanning position. */\n this._position = 0;\n /** End of the already emitted tokens (characters between it and `_position` are pending unrecognized text). */\n this._emitted = 0;\n this._line = 1;\n this._column = 1;\n this._previous = null;\n this._emptyTransitions = 0;\n this._stack = [{ syntax: root, state: root.start, until: null }];\n }\n run() {\n const length = this._source.length;\n while (this._position < length) {\n this._step();\n }\n this._flushText();\n return this._tokens;\n }\n get _top() {\n const stack = this._stack;\n return stack[stack.length - 1];\n }\n _step() {\n const frame = this._top;\n if (this._popOnUntil(frame)) {\n return;\n }\n const found = this._findRule(frame);\n if (found == null) {\n // unrecognized character: accumulates into a `text` token\n this._position++;\n return;\n }\n this._flushText();\n this._emitMatch(found, frame.syntax);\n this._transition(found.rule, frame.syntax);\n const length = found.match[0].length;\n this._position += length;\n if (length > 0) {\n this._emptyTransitions = 0;\n }\n }\n /** Pops an embedded syntax as soon as its `until` pattern matches (without consuming input). */\n _popOnUntil(frame) {\n const until = frame.until;\n if (until == null || this._stack.length <= 1) {\n return false;\n }\n until.lastIndex = this._position;\n if (!until.test(this._source)) {\n return false;\n }\n this._flushText();\n this._stack.pop();\n return true;\n }\n _findRule(frame) {\n const segments = frame.syntax.states.get(frame.state) ?? [];\n for (let item of segments) {\n const found = isCombined(item) ? this._tryCombined(item) : this._trySingle(item.rule);\n if (found != null) {\n return found;\n }\n }\n return null;\n }\n _trySingle(rule) {\n const match = this._tryRule(rule);\n if (match == null) {\n return null;\n }\n return { rule, match };\n }\n /** Finds which merged rule matched (the first defined wrapping group), then re-runs it alone for its own groups. */\n _tryCombined(item) {\n const combined = item.combined;\n combined.lastIndex = this._position;\n const match = combined.exec(this._source);\n if (match == null) {\n return null;\n }\n const indices = item.groupIndices;\n for (let k = 0; k < indices.length; k++) {\n if (match[indices[k]] === undefined) {\n continue;\n }\n const rule = item.rules[k];\n return this._trySingle(rule);\n }\n return null;\n }\n _tryRule(rule) {\n if (rule.when != null && !meets(rule.when, this._previous)) {\n return null;\n }\n const regex = rule.regex;\n regex.lastIndex = this._position;\n const match = regex.exec(this._source);\n if (match == null) {\n return null;\n }\n if (match[0].length > 0) {\n return match;\n }\n // zero-length matches are only meaningful as (bounded) state transitions\n if (!rule.hasTransition || this._emptyTransitions >= MAX_EMPTY_TRANSITIONS) {\n return null;\n }\n this._emptyTransitions++;\n return match;\n }\n _emitMatch({ rule, match }, syntax) {\n const raw = match[0];\n if (rule.groupTypes == null) {\n this._append(rule.type, raw, syntax);\n return;\n }\n this._emitGroups(rule, match, syntax);\n }\n /** Splits a match into one token per (top-level) capture group; uncovered characters become `text` tokens. */\n _emitGroups(rule, match, syntax) {\n const indices = match.indices;\n const start = match.index, end = start + match[0].length, types = rule.groupTypes;\n let cursor = start;\n for (let i = 1; i < match.length; i++) {\n const range = indices[i];\n if (range == null || range[0] < cursor || range[1] === range[0]) {\n continue;\n }\n if (range[0] > cursor) {\n const gap = this._source.slice(cursor, range[0]);\n this._append(SyntaxTokenType.Text, gap, syntax);\n }\n const groupText = this._source.slice(range[0], range[1]);\n const groupType = types[i - 1] ?? types[types.length - 1];\n this._append(groupType, groupText, syntax);\n cursor = range[1];\n }\n if (cursor < end) {\n const rest = this._source.slice(cursor, end);\n this._append(SyntaxTokenType.Text, rest, syntax);\n }\n }\n _transition(rule, syntax) {\n const stack = this._stack;\n for (let i = 0; i < rule.pop && stack.length > 1; i++) {\n stack.pop();\n }\n if (rule.next != null) {\n this._top.state = rule.next;\n }\n if (rule.push != null) {\n stack.push({ syntax, state: rule.push, until: null });\n }\n if (rule.embed == null) {\n return;\n }\n const embedded = compileByName(rule.embed);\n if (embedded == null) {\n return;\n }\n stack.push({ syntax: embedded, state: embedded.start, until: rule.until });\n }\n /** Emits the pending unrecognized characters (if any) as a single `text` token. */\n _flushText() {\n if (this._emitted >= this._position) {\n return;\n }\n const text = this._source.slice(this._emitted, this._position);\n const syntax = this._top.syntax;\n this._append(SyntaxTokenType.Text, text, syntax);\n }\n _resolveType(type, raw, syntax) {\n if (!syntax.keywordSources.has(type)) {\n return type;\n }\n const previousText = this._previous?.raw;\n if (syntax.keywordExceptAfter.has(previousText)) {\n return type;\n }\n return syntax.keywords.get(raw) ?? type;\n }\n _append(type, raw, syntax) {\n const resolvedType = this._resolveType(type, raw, syntax);\n const token = {\n type: resolvedType, raw, text: raw,\n index: this._emitted,\n line: this._line,\n column: this._column,\n depth: this._stack.length - 1,\n syntax: syntax.name\n };\n this._tokens.push(token);\n this._advance(raw);\n if (!syntax.insignificant.has(resolvedType)) {\n this._previous = token;\n }\n }\n /** Moves the emitted offset and the line/column counters past `raw`. */\n _advance(raw) {\n this._emitted += raw.length;\n const lastNewline = raw.lastIndexOf('\\n');\n if (lastNewline < 0) {\n this._column += raw.length;\n return;\n }\n for (let i = 0; i <= lastNewline; i++) {\n if (raw.charCodeAt(i) === 10) {\n this._line++;\n }\n }\n this._column = raw.length - lastNewline;\n }\n}\n// #endregion\n/** Used for unknown syntaxes: no rules, the whole source becomes a single `text` token. */\nconst PLAIN_TEXT_SYNTAX = { name: SyntaxTokenType.Text, lexical: { states: {} } };\n/**\n * Language-agnostic lexical engine: tokenizes a source text according to a {@link Syntax} vocabulary.\n * - lossless: concatenating the tokens' `raw` reproduces the source exactly;\n * - linear: a single cursor and sticky regular expressions (compiled once per syntax);\n * - error tolerant: unrecognized characters become `text` tokens, it never throws.\n */\nexport class Scanner {\n /**\n * Tokenizes `source`.\n * @param source Source text.\n * @param syntax A {@link Syntax} or the name/alias of a registered one (see {@link Syntaxes}); an unknown one yields a single `text` token.\n * @returns The lossless, positioned token stream.\n */\n tokenize(source, syntax) {\n const text = source ?? '';\n const resolved = typeof syntax === 'string' ? Syntaxes.get(syntax) : syntax;\n const compiled = compileSyntax(resolved ?? PLAIN_TEXT_SYNTAX);\n const run = new ScanRun(text, compiled);\n return run.run();\n }\n}\n", "//namespace Pacem.Compile {\n/** Default token type \u2192 CSS class mapping, matching the `code-*` classes styled by the theme (see `ui/markdown.css`). */\nexport const DefaultHighlightClasses = Object.freeze({\n 'keyword': 'code-keyword',\n 'preprocessor': 'code-keyword',\n 'string': 'code-string',\n 'regex': 'code-string',\n 'number': 'code-number',\n 'comment': 'code-comment',\n 'doc-comment': 'code-comment',\n 'tag': 'code-tag',\n 'tagname': 'code-tagname',\n 'attribute': 'code-attribute',\n});\nconst HTML_ESCAPES = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\nfunction htmlEncode(text) {\n return text.replace(/[&<>\"]/g, c => HTML_ESCAPES[c]);\n}\n/**\n * Renders a token stream (typically produced by the {@link Scanner}) as HTML: every token's `raw` text is HTML-encoded and,\n * when its type has a mapped class, wrapped in a `<span class=\"\u2026\">`.\n */\nexport class HighlightRenderer {\n /**\n * @param _classes Token type \u2192 CSS class mapping (defaults to {@link DefaultHighlightClasses}).\n */\n constructor(_classes = DefaultHighlightClasses) {\n this._classes = _classes;\n }\n render(tree) {\n let html = '';\n for (let token of tree ?? []) {\n html += this._renderToken(token);\n }\n return html;\n }\n _renderToken(token) {\n const encoded = htmlEncode(token.raw ?? '');\n const cssClass = this._classes[token.type];\n if (cssClass == null) {\n return encoded;\n }\n return `<span class=\"${cssClass}\">${encoded}</span>`;\n }\n}\n", "//namespace Pacem.Compile.Markdown {\nimport { NullChecker } from \"../../null-checker\";\nimport * as Compile from \"../parser\";\nimport { Scanner } from '../syntax/scanner';\nimport { Syntaxes } from '../syntax/registry';\nimport { HighlightRenderer } from '../syntax/highlight';\n// #region HELPERS\nfunction htmlEncode(input) {\n return (input ?? '').replace(/</g, '&lt;');\n}\nfunction extractReference(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\n/** Splits a link/image destination into its url and optional title: `url \"title\"`, `url 'title'` or `url (title)`. */\nfunction splitUrlAndTitle(destination) {\n if (NullChecker.isNullOrEmpty(destination)) {\n return { url: destination };\n }\n const trimmed = destination.trim();\n const arr = /^(\\S*)\\s+(?:\"([^\"]*)\"|'([^']*)'|\\(([^)]*)\\))\\s*$/.exec(trimmed);\n if (arr == null) {\n return { url: trimmed };\n }\n const title = arr[2] ?? arr[3] ?? arr[4];\n return { url: arr[1], title };\n}\nfunction attributeEncode(input) {\n return (input ?? '').replace(/&(?!(?:#\\d+|#x[\\da-fA-F]+|\\w+);)/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n}\n/** Splits a table row into its (trimmed) cells: outer pipes are optional, `\\|` is a literal pipe. */\nfunction splitTableCells(row) {\n let line = row.trim();\n if (line.startsWith('|')) {\n line = line.slice(1);\n }\n if (line.endsWith('|') && !line.endsWith('\\\\|')) {\n line = line.slice(0, -1);\n }\n const cells = line.split(/(?<!\\\\)\\|/);\n return cells.map(c => c.trim().replace(/\\\\\\|/g, '|'));\n}\nfunction tableAlignment(delimiter) {\n const left = delimiter.startsWith(':'), right = delimiter.endsWith(':');\n if (left && right) {\n return 'center';\n }\n if (right) {\n return 'right';\n }\n return left ? 'left' : null;\n}\nfunction indentationOf(line) {\n const arr = /^ */.exec(line);\n return arr[0].length;\n}\n/**\n * Splits a list block into its items, by indentation: a marker indented less than the current item's content\n * starts a sibling item; anything else (nested lists included) is item content, dedented by the content offset.\n */\nfunction splitListItems(raw) {\n const lines = raw.replace(/\\t/g, ' ').split(/\\r?\\n/);\n const items = [];\n for (let line of lines) {\n const current = items[items.length - 1];\n const marker = LISTMARKER.exec(line);\n if (marker != null && (current == null || marker[1].length < current.indent)) {\n const contentIndent = marker[0].length;\n const firstLine = line.slice(contentIndent);\n items.push({ indent: contentIndent, lines: [firstLine] });\n continue;\n }\n if (current == null) {\n continue;\n }\n const dedent = Math.min(current.indent, indentationOf(line));\n const content = line.slice(dedent);\n current.lines.push(content);\n }\n return items.map(i => i.lines.join('\\n').replace(/\\s+$/, ''));\n}\n/**\n * Code meant for a syntax highlighter: `MarkdownService` escapes every `<` of its input (no html allowed), hence\n * `&lt;` is turned back into `<` (the highlighter encodes everything it renders anyway).\n */\nfunction decodeCode(code) {\n return (code ?? '').replace(/&lt;/g, '<');\n}\n/** Highlights fenced code blocks of the registered languages (see {@link Syntaxes}). */\nconst scanner = new Scanner();\n/** Fenced code in this vocabulary also gets the `code-markup` class. */\nconst MARKUP_SYNTAX = 'markup';\nfunction regexMatchIndex(arr) {\n return arr?.index || void 0;\n}\nfunction extractUrl(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction normalizeReference(input) {\n return input?.replace(/[^\\w]+/g, ' ').trim().replace(/ +/g, '-').toLowerCase();\n}\nfunction match(input, pattern, fn) {\n const arr = pattern.exec(input);\n if (arr && arr.length) {\n return fn(arr);\n }\n return null;\n}\n// #endregion\nconst COMMENT = /(<!--)([\\s\\S]*?)(-->|$)/;\nconst HR = /^ {0,3}(={3,}|(?:_[ \\t]*){3,}|(?:-[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(\\r?\\n|$)/;\nconst HEADING = /^ {0,3}(#{1,6})\\s+([^\\n]+)(\\r?\\n|$)+/;\nconst HEADING1 = /^ {0,3}([^\\n]+)(\\r?\\n=+(\\r?\\n|$))+/;\nconst HEADING2 = /^ {0,3}([^\\n]+)(\\r?\\n-+(\\r?\\n|$))+/;\nconst CODEBLOCK = /^ {4,}.+(\\r?\\n {4,}.+)*(\\r?\\n|$)+/;\nconst FENCES = /^ {0,3}``` *([^\\n]*)\\r?\\n(([\\s\\S](?!\\r?\\n {0,3}```))*.(\\r?\\n)+) {0,3}```(\\r?\\n|$)+/;\nconst BLOCKQUOTE = /^ {0,3}> *([^\\n]+)(\\r?\\n {0,3}> *([^\\n]*))*(\\r?\\n|$)+/;\n// (`*` bullets need a following space, not to be mistaken for emphasis; nested lists of the other kind are indented)\nconst ULIST = /^( {0,3}([-+]|\\*(?=[ \\t])).*(\\r?\\n|$))((?!(?: ?\\d+[.\\)]|\\r?\\n\\S)).*(\\r?\\n|$))*/;\nconst OLIST = /^( {0,3}(\\d+[.\\)]).*(\\r?\\n|$))((?!(?: {0,2}(?:[-+]|\\*[ \\t])|\\r?\\n\\S)).*(\\r?\\n|$))*/;\n/** A list item marker, with its indentation and the spaces following it. */\nconst LISTMARKER = /^( *)([-+*]|\\d+[.\\)])([ \\t]+|$)/;\n/** GFM task list item: `[ ]` or `[x]` at the beginning of the item. */\nconst TASK = /^\\[([ xX])\\][ \\t]+/;\n// (whitespace-only lines are blank lines: they never start nor continue a paragraph)\nconst PARAGRAPH = /^(?! {4,})(?=[ \\t]*\\S)(.+(\\n(?![ \\t]*(?:\\n|$))(?! {0,3}```)(?! {0,3}([-+]|\\*[ \\t]|\\d+[.\\)]))(?! {0,3}#{1,6}[ \\t])(?! {4,})(?! {0,3}>).+)*)/;\nconst REF = /^ {0,3}(!?)\\[([^\\]]+)\\]: +(\\S+)(?: +['\"\\(](.+)['\"\\)])?(\\r?\\n|$)+/;\n// (an escaped `\\[` never opens a link)\nconst IMAGE_OR_LINK = /(?<!\\\\)!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?(\\[[^\\[\\]]*\\]|\\([^\\(\\)]*\\))?/;\nconst EMPHASIZED_LINK = /(\\*\\*?|__?)(\\[[^\\]]*]\\([^\\)]+\\))\\1/;\nconst CODE = /(?:(?<!\\\\)`)(.+?)(?:(?<!\\\\)`)/;\n// (underscores never emphasize inside words: `snake_case_word`)\nconst EMPHASIZE = /(\\*\\*?)((?!\\1\\s?)(?:(?!\\1)[\\S\\s])*[^\\s])\\1|(?<![A-Za-z0-9])(__?)((?!\\3\\s?)(?:(?!\\3)[\\S\\s])*[^\\s])\\3(?![A-Za-z0-9])/;\n// (underscores are emphasis markers only: `snake_case_word` must not strike anything through)\nconst STRIKE = /(~~?)(?!\\1\\s?)([^\\s][\\s\\S]*?(?!\\1)[^\\s])\\1/;\nconst QUOTE = /(:\")(?!\":\\s?)([^\\s][\\s\\S]*?(?!\":)[^\\s])\":/;\nconst SPACE = /^\\s+/;\n/** Blank lines between blocks (it keeps the indentation of the next line, which matters to indented code blocks). */\nconst BLOCK_SPACE = /^(?:[ \\t]*\\r?\\n)+|^\\s+/;\nconst LINEBREAK = /(?: {2,}|\\\\)\\r?\\n/;\nconst TEXT = /^[^\\r\\n]+/;\n/** Backslash escapes of ASCII punctuation (CommonMark); `\\&lt;` is an escaped `<` already escaped by `MarkdownService`. */\nconst ESCAPE = /\\\\(&lt;|[!\"#$%&'()*+,\\-./:;<=>?@\\[\\\\\\]^_`{|}~])/;\n/** Escaped characters that must stay text once rendered as html. */\nconst ESCAPED_HTML = { '<': '&lt;', '&lt;': '&lt;', '&': '&amp;' };\n/** `<https://\u2026>`, `<mailto:\u2026>` and `<user@domain>` (the `<` may come escaped, e.g. by `MarkdownService`). */\nconst AUTOLINK = /(?:<|&lt;)((?:https?|ftp|mailto):[^\\s<>]+|[\\w.+-]+@[\\w-]+(?:\\.[\\w-]+)+)>/;\n/** GFM bare URLs (`https://\u2026`, `www.\u2026`), trailing punctuation excluded. */\nconst BARE_URL = /(?<![\\w\\/\\\\(\\[<\"'=;&@])(?:https?:\\/\\/|www\\.)[^\\s<>]*[^\\s<>.,:;\"'!?)\\]*_~]/;\n/** GFM footnote reference `[^id]`. */\nconst FOOTNOTE_REF = /\\[\\^([^\\]\\s]+)\\]/;\n/** GFM footnote definition `[^id]: text` (continuation lines indented). */\nconst FOOTNOTE_DEF = /^ {0,3}\\[\\^([^\\]\\s]+)\\]: *([^\\r\\n]*(?:\\r?\\n {2,}[^\\r\\n]+)*)(\\r?\\n|$)+/;\n/** GFM table: header row, delimiter row, then body rows (up to a blank line). */\nconst TABLE = /^ {0,3}(\\|?[^\\r\\n]*\\|[^\\r\\n]*)\\r?\\n {0,3}(\\|? *:?-+:? *(?:\\| *:?-+:? *)*\\|?) *(?:\\r?\\n|$)((?:(?! {0,3}(?:\\r?\\n|$))[^\\r\\n]*\\|[^\\r\\n]*(?:\\r?\\n|$))*)/;\nvar MARKDOWN_TYPES;\n(function (MARKDOWN_TYPES) {\n MARKDOWN_TYPES[\"Html\"] = \"html\";\n MARKDOWN_TYPES[\"Text\"] = \"text\";\n MARKDOWN_TYPES[\"Paragraph\"] = \"paragraph\";\n MARKDOWN_TYPES[\"BlockQuote\"] = \"blockquote\";\n MARKDOWN_TYPES[\"Space\"] = \"space\";\n MARKDOWN_TYPES[\"Heading\"] = \"heading\";\n MARKDOWN_TYPES[\"Bold\"] = \"bold\";\n MARKDOWN_TYPES[\"Italic\"] = \"italic\";\n MARKDOWN_TYPES[\"CodeBlock\"] = \"codeblock\";\n MARKDOWN_TYPES[\"Code\"] = \"code\";\n MARKDOWN_TYPES[\"Image\"] = \"img\";\n MARKDOWN_TYPES[\"ImageLike\"] = \"imglike\";\n MARKDOWN_TYPES[\"Link\"] = \"link\";\n MARKDOWN_TYPES[\"LinkLike\"] = \"linklike\";\n MARKDOWN_TYPES[\"LineBreak\"] = \"br\";\n MARKDOWN_TYPES[\"StrikeThrough\"] = \"strike\";\n MARKDOWN_TYPES[\"Quote\"] = \"quote\";\n MARKDOWN_TYPES[\"HorizontalRule\"] = \"hr\";\n MARKDOWN_TYPES[\"OrderedList\"] = \"ol\";\n MARKDOWN_TYPES[\"UnorderedList\"] = \"ul\";\n MARKDOWN_TYPES[\"ListItem\"] = \"listitem\";\n MARKDOWN_TYPES[\"Reference\"] = \"ref\";\n MARKDOWN_TYPES[\"Table\"] = \"table\";\n MARKDOWN_TYPES[\"TableRow\"] = \"tr\";\n MARKDOWN_TYPES[\"TableCell\"] = \"td\";\n MARKDOWN_TYPES[\"FootnoteReference\"] = \"fnref\";\n MARKDOWN_TYPES[\"FootnoteDefinition\"] = \"fndef\";\n})(MARKDOWN_TYPES || (MARKDOWN_TYPES = {}));\nvar MARKDOWN_RULES;\n(function (MARKDOWN_RULES) {\n MARKDOWN_RULES[MARKDOWN_RULES[\"Comment\"] = 0] = \"Comment\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Reference\"] = 1] = \"Reference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"HorizontalRule\"] = 2] = \"HorizontalRule\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading\"] = 3] = \"Heading\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading1\"] = 4] = \"Heading1\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading2\"] = 5] = \"Heading2\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"CodeBlock\"] = 6] = \"CodeBlock\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Fences\"] = 7] = \"Fences\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BlockQuote\"] = 8] = \"BlockQuote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"OrderedList\"] = 9] = \"OrderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"UnorderedList\"] = 10] = \"UnorderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Paragraph\"] = 11] = \"Paragraph\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"EmphasizedLink\"] = 12] = \"EmphasizedLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"ImageOrLink\"] = 13] = \"ImageOrLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Emphasize\"] = 14] = \"Emphasize\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"StrikeThrough\"] = 15] = \"StrikeThrough\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Quote\"] = 16] = \"Quote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Code\"] = 17] = \"Code\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"LineBreak\"] = 18] = \"LineBreak\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"FootnoteDefinition\"] = 19] = \"FootnoteDefinition\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Table\"] = 20] = \"Table\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Escape\"] = 21] = \"Escape\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"AutoLink\"] = 22] = \"AutoLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"FootnoteReference\"] = 23] = \"FootnoteReference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BareUrl\"] = 24] = \"BareUrl\";\n // lowest priority\n MARKDOWN_RULES[MARKDOWN_RULES[\"Text\"] = 254] = \"Text\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Space\"] = 255] = \"Space\";\n})(MARKDOWN_RULES || (MARKDOWN_RULES = {}));\n/**\n * Builds the full Markdown grammar (block + inline rules, comment/reference handling first),\n * optionally merging in caller-supplied {@link ExtraRule}s.\n * @param extra Additional block/inline/code rules to plug into the built-in grammar.\n * @returns Ordered list of {@link Compile.Rule}s ready to be fed to a {@link Compile.Lexer}.\n */\nfunction getGrammar(extra = []) {\n const inert = {\n // comment\n [MARKDOWN_RULES.Comment]: {\n exec: (input, lexer) => match(input, COMMENT, arr => {\n const index = regexMatchIndex(arr);\n const output = [{\n type: MARKDOWN_TYPES.Html, index, raw: arr[0], text: arr[2]\n }];\n if (index > 0) {\n // (the top-level rules: reference and footnote definitions may precede a comment)\n const left = input.substr(0, index), tokens = lexer.tokenize(left, topRules);\n Array.prototype.unshift.apply(output, tokens);\n }\n return output;\n })\n },\n // reference\n [MARKDOWN_RULES.Reference]: {\n exec: (input) => match(input, REF, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], text = raw, image = arr[1] === '!', id = arr[2], url = arr[3], title = arr[4];\n return [{\n type: MARKDOWN_TYPES.Reference, index, raw, text, id, image, url, title\n }];\n })\n },\n // footnote definition (rendered at the end of the document, see HtmlRenderer)\n [MARKDOWN_RULES.FootnoteDefinition]: {\n exec: (input, lexer) => match(input, FOOTNOTE_DEF, arr => {\n const raw = arr[0], id = normalizeReference(arr[1]), text = arr[2].replace(/\\r?\\n {2,}/g, ' ');\n return [{\n type: MARKDOWN_TYPES.FootnoteDefinition, index: regexMatchIndex(arr), raw, text, id,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n };\n const blockExtra = [], inlineExtra = [], codeExtra = {};\n for (let r of extra) {\n let rule, type = 'inline';\n if ('type' in r) {\n type = r.type;\n rule = r.rule;\n }\n else {\n rule = r;\n }\n switch (type) {\n case 'block':\n blockExtra.push(rule);\n break;\n case 'code':\n if ('lang' in r) {\n const key = r.lang.toLowerCase();\n (codeExtra[key] = codeExtra[key] || []).push(rule);\n }\n break;\n default:\n const inlineRule = {\n exec: (input, lexer) => {\n const output = rule.exec(input, lexer);\n inPlaceInlineExec(input, output, lexer);\n return output;\n }\n };\n inlineExtra.push(inlineRule);\n break;\n }\n }\n // #region INLINE\n const inlinelowpriority = {\n // text\n [MARKDOWN_RULES.Text]: {\n exec: (input) => match(input, TEXT, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const inline = {\n // link/image\n [MARKDOWN_RULES.ImageOrLink]: {\n exec: (input, lexer) => inlineMatch(input, IMAGE_OR_LINK, lexer, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], image = raw.charAt(0) === '!', text = arr[1], destination = extractUrl(arr[2]), reference = extractReference(arr[2]) ?? text, ref = normalizeReference(reference);\n // `(url \"title\")`\n const { url, title } = splitUrlAndTitle(destination);\n const tokens = lexer.tokenize(text, inlineRules);\n if (image) {\n return [{\n index, type: url ? MARKDOWN_TYPES.Image : MARKDOWN_TYPES.ImageLike,\n raw, text, src: url, title, ref, tokens\n }];\n }\n return [{\n index, type: url ? MARKDOWN_TYPES.Link : MARKDOWN_TYPES.LinkLike,\n raw, text, href: url, title, ref, tokens\n }];\n })\n },\n // backslash escapes: the escaped character is plain text\n [MARKDOWN_RULES.Escape]: {\n exec: (input, lexer) => inlineMatch(input, ESCAPE, lexer, arr => {\n const text = ESCAPED_HTML[arr[1]] ?? arr[1];\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // <https://\u2026>, <user@domain>\n [MARKDOWN_RULES.AutoLink]: {\n exec: (input, lexer) => inlineMatch(input, AUTOLINK, lexer, arr => {\n const text = arr[1];\n const isEmail = !/^[a-z]+:/i.test(text);\n const href = isEmail ? 'mailto:' + text : text;\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text, href, type: MARKDOWN_TYPES.Link,\n tokens: [{ type: MARKDOWN_TYPES.Text, raw: text, text }]\n }];\n })\n },\n // bare https://\u2026 or www.\u2026 urls\n [MARKDOWN_RULES.BareUrl]: {\n exec: (input, lexer) => inlineMatch(input, BARE_URL, lexer, arr => {\n const text = arr[0];\n const href = /^www\\./i.test(text) ? 'http://' + text : text;\n return [{\n index: regexMatchIndex(arr), raw: text, text, href, type: MARKDOWN_TYPES.Link,\n tokens: [{ type: MARKDOWN_TYPES.Text, raw: text, text }]\n }];\n })\n },\n // [^footnote]\n [MARKDOWN_RULES.FootnoteReference]: {\n exec: (input, lexer) => inlineMatch(input, FOOTNOTE_REF, lexer, arr => {\n const id = normalizeReference(arr[1]);\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text: arr[1], id, type: MARKDOWN_TYPES.FootnoteReference\n }];\n })\n },\n // code\n [MARKDOWN_RULES.Code]: {\n exec: (input, lexer) => inlineMatch(input, CODE, lexer, arr => {\n const text = htmlEncode(arr[1]);\n return [{\n type: MARKDOWN_TYPES.Code, raw: arr[0], text, index: regexMatchIndex(arr)\n }];\n })\n },\n // italic/bold link\n [MARKDOWN_RULES.EmphasizedLink]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZED_LINK, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // italic/bold\n [MARKDOWN_RULES.Emphasize]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZE, lexer, arr => {\n // `*` (groups 1-2) or word-bounded `_` (groups 3-4) markers\n const marker = arr[1] ?? arr[3], text = arr[2] ?? arr[4];\n if (NullChecker.isNullOrEmpty(text)) {\n return null;\n }\n const type = marker.length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic;\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // strike\n [MARKDOWN_RULES.StrikeThrough]: {\n exec: (input, lexer) => inlineMatch(input, STRIKE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.StrikeThrough, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // quote\n [MARKDOWN_RULES.Quote]: {\n exec: (input, lexer) => inlineMatch(input, QUOTE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.Quote, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // line break\n [MARKDOWN_RULES.LineBreak]: {\n exec: (input, lexer) => inlineMatch(input, LINEBREAK, lexer, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.LineBreak\n }];\n })\n },\n };\n const inPlaceInlineExec = (input, output, lexer) => {\n const index = output?.length > 0 && output[0].index;\n if (index > 0) {\n const left = input.substr(0, index);\n const tokens = lexer.tokenize(left, inlineRules) || [];\n Array.prototype.unshift.apply(output, tokens);\n }\n };\n const inlineMatch = (input, pattern, lexer, fn) => {\n const output = match(input, pattern, arr => {\n if (pattern != CODE) {\n // prioritize code\n const codeCheck = CODE.exec(input);\n if (codeCheck\n && codeCheck.length\n && codeCheck.index < arr.index\n // && (codeCheck.index + codeCheck[0].length) > arr.index\n ) {\n return null;\n }\n }\n return fn(arr);\n });\n inPlaceInlineExec(input, output, lexer);\n return output;\n };\n // explicit priorities: footnote references before `[links]`, escapes before emphasis, bare urls last\n const inlineRules = [\n inline[MARKDOWN_RULES.FootnoteReference],\n inline[MARKDOWN_RULES.EmphasizedLink],\n inline[MARKDOWN_RULES.ImageOrLink],\n inline[MARKDOWN_RULES.Escape],\n inline[MARKDOWN_RULES.AutoLink],\n inline[MARKDOWN_RULES.Emphasize],\n inline[MARKDOWN_RULES.StrikeThrough],\n inline[MARKDOWN_RULES.Quote],\n inline[MARKDOWN_RULES.Code],\n inline[MARKDOWN_RULES.LineBreak],\n inline[MARKDOWN_RULES.BareUrl],\n ];\n Array.prototype.push.apply(inlineRules, inlineExtra);\n inlineRules.push(inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n // #region CODE\n const getLangGrammar = (lang) => {\n const retval = [inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]];\n const key = lang?.toLowerCase() || '';\n if (key && key in codeExtra) {\n Array.prototype.unshift.apply(retval, codeExtra[key]);\n }\n return retval;\n };\n // #endregion\n // #region BLOCK\n const lowpriority = {\n // paragraph\n [MARKDOWN_RULES.Paragraph]: {\n exec: (input, lexer) => match(input, PARAGRAPH, arr => {\n // leading whitespace of paragraph lines is not content (CommonMark)\n const raw = arr[0], text = raw.replace(/^[ \\t]+/gm, '');\n // whitespace-only lines are blank lines, not (empty) paragraphs\n if (text.trim().length === 0) {\n return null;\n }\n return [{\n type: MARKDOWN_TYPES.Paragraph, raw, text,\n // recursion (inline rules only)\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // blank lines (the indentation of the following line is kept: it matters to indented code blocks)\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, BLOCK_SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const tokenizeListItem = (text, lexer) => {\n const needsBlocks = /^ {0,3}(`{3,}|$|>|[-+*]\\s|\\d+[.\\)]|#{1,6}\\s|\\|)/m.test(text);\n if (!needsBlocks) {\n return lexer.tokenize(text, inlineRules);\n }\n const tokens = lexer.tokenize(text, blockRules);\n // tight items (no blank lines) keep their first paragraph unwrapped, e.g. `<li>a<ul>\u2026</ul></li>`\n const first = tokens[0];\n const tight = !/\\n[ \\t]*\\n/.test(text);\n if (!tight || first?.type !== MARKDOWN_TYPES.Paragraph) {\n return tokens;\n }\n const inner = first.tokens ?? [];\n const rest = tokens.slice(1);\n return inner.concat(rest);\n };\n const tokenizeListItems = (raw, lexer) => {\n const items = splitListItems(raw);\n const nonEmpty = items.filter(i => !NullChecker.isNullOrEmpty(i));\n return nonEmpty.map(item => {\n // GFM task list item: `[ ]`/`[x]`\n const task = TASK.exec(item);\n const text = task ? item.slice(task[0].length) : item;\n const tokens = tokenizeListItem(text, lexer);\n if (task == null) {\n return { type: MARKDOWN_TYPES.ListItem, raw: item, text, tokens };\n }\n const checked = task[1] !== ' ';\n return { type: MARKDOWN_TYPES.ListItem, raw: item, text, tokens, task: true, checked };\n });\n };\n const tokenizeTableRow = (cells, align, header, lexer) => {\n const tokens = align.map((cellAlign, i) => {\n // missing cells are empty, exceeding ones are ignored (GFM)\n const text = cells[i] ?? '';\n const cellTokens = lexer.tokenize(text, inlineRules);\n return { type: MARKDOWN_TYPES.TableCell, raw: text, text, header, align: cellAlign, tokens: cellTokens };\n });\n const raw = cells.join(' | ');\n const row = { type: MARKDOWN_TYPES.TableRow, raw, text: raw, header, tokens };\n return row;\n };\n const block = {\n // hr\n [MARKDOWN_RULES.HorizontalRule]: {\n exec: (input, lexer) => match(input, HR, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.HorizontalRule, raw, text\n }];\n })\n },\n // headings\n [MARKDOWN_RULES.Heading]: {\n exec: (input, lexer) => match(input, HEADING, arr => {\n // optional closing sequence: `## Title ##`\n const text = arr[2].replace(/[ \\t]+#+[ \\t]*$/, '');\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: arr[1].length, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading1]: {\n exec: (input, lexer) => match(input, HEADING1, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 1, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading2]: {\n exec: (input, lexer) => match(input, HEADING2, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 2, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.CodeBlock]: {\n exec: (input, lexer) => match(input, CODEBLOCK, arr => {\n // indented code: 4 spaces of indentation are not part of the code\n const raw = arr[0], code = raw.replace(/^ {4}/gm, '').replace(/\\s+$/, ''), text = htmlEncode(code);\n // whitespace-only indented lines are blank lines, not code\n if (code.length === 0) {\n return null;\n }\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw, text,\n tokens: lexer.tokenize(text, getLangGrammar(''))\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.Fences]: {\n exec: (input, lexer) => match(input, FENCES, arr => {\n // the info string may carry more than the language (e.g. ```js title)\n const info = (arr[1] ?? '').trim(), words = info.split(/\\s+/), lang = words[0].toLowerCase();\n // custom `code` rules (see ExtraRule) win over the registered vocabularies\n const syntax = lang in codeExtra ? null : Syntaxes.get(lang);\n if (syntax == null) {\n const text = htmlEncode(arr[2]);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text, lang,\n tokens: lexer.tokenize(text, getLangGrammar(lang))\n }];\n }\n // highlighted by the language-agnostic Scanner (see HtmlRenderer)\n const code = decodeCode(arr[2]);\n const tokens = scanner.tokenize(code, syntax);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text: code, lang, syntax: syntax.name, highlighted: true, tokens\n }];\n })\n },\n // blockquote\n [MARKDOWN_RULES.BlockQuote]: {\n exec: (input, lexer) => match(input, BLOCKQUOTE, arr => {\n const raw = arr[0], text = raw.replace(/^ {0,3}> ?/gm, '');\n return [{\n type: MARKDOWN_TYPES.BlockQuote, raw, text,\n // recursion: any block (nested quotes, lists, code\u2026)\n tokens: lexer.tokenize(text, blockRules)\n }];\n })\n },\n // lists\n [MARKDOWN_RULES.OrderedList]: {\n exec: (input, lexer) => match(input, OLIST, arr => {\n const raw = arr[0], startMatch = /\\d+/.exec(raw), start = parseInt(startMatch[0]), tokens = tokenizeListItems(raw, lexer);\n return [{\n type: MARKDOWN_TYPES.OrderedList, start, raw, text: raw, tokens\n }];\n })\n },\n [MARKDOWN_RULES.UnorderedList]: {\n exec: (input, lexer) => match(input, ULIST, arr => {\n const raw = arr[0], tokens = tokenizeListItems(raw, lexer);\n return [{\n type: MARKDOWN_TYPES.UnorderedList, raw, text: raw, tokens\n }];\n })\n },\n // GFM tables\n [MARKDOWN_RULES.Table]: {\n exec: (input, lexer) => match(input, TABLE, arr => {\n const headers = splitTableCells(arr[1]), delimiters = splitTableCells(arr[2]);\n // the delimiter row must match the header row\n if (headers.length !== delimiters.length) {\n return null;\n }\n const align = delimiters.map(tableAlignment);\n const bodyLines = arr[3].split(/\\r?\\n/).filter(l => l.trim().length > 0);\n const headerRow = tokenizeTableRow(headers, align, true, lexer);\n const bodyRows = bodyLines.map(line => {\n const cells = splitTableCells(line);\n return tokenizeTableRow(cells, align, false, lexer);\n });\n const rows = [headerRow].concat(bodyRows);\n return [{\n type: MARKDOWN_TYPES.Table, raw: arr[0], text: arr[0], align, tokens: rows\n }];\n })\n }\n };\n const blockRules = Object.values(block);\n Array.prototype.push.apply(blockRules, blockExtra);\n blockRules.push(lowpriority[MARKDOWN_RULES.Paragraph], lowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n const topRules = [\n // comment first\n inert[MARKDOWN_RULES.Comment],\n // (before references: `[^id]: \u2026` would match them too)\n inert[MARKDOWN_RULES.FootnoteDefinition],\n inert[MARKDOWN_RULES.Reference]\n ].concat(\n // block rules contain recursive inline rules (at least)\n blockRules);\n return topRules;\n}\n// #region HTML RENDERER HELPER\n// meant to help in unnecessary spaces replacement.\nconst CARRIAGE_RETURN_PLACEHOLDER = '\\0';\nconst TRIM_INSIDE = /[ \\r\\n]*\\0+[ \\r\\n]*/g;\nfunction trim(input) {\n return input?.replace(TRIM_INSIDE, '\\n').trim();\n}\nfunction titleAttribute(title) {\n if (NullChecker.isNullOrEmpty(title)) {\n return '';\n }\n const encoded = attributeEncode(title);\n return ` title=\"${encoded}\"`;\n}\nfunction alignAttribute(align) {\n if (align == null) {\n return '';\n }\n return ` style=\"text-align: ${align}\"`;\n}\n/** Renders a Markdown token tree, as produced by the grammar returned by {@link getGrammar}, into HTML markup. */\nclass HtmlRenderer {\n constructor(_extraItemRender = (token, __) => token?.text || '') {\n this._extraItemRender = _extraItemRender;\n /** Link/image reference definitions of the whole document (they may be referenced from any depth). */\n this.#references = [];\n /** Footnote definitions by id, and the order of their first reference (their numbering). */\n this.#footnotes = new Map();\n this.#footnoteOrder = [];\n this.#highlighter = new HighlightRenderer();\n this._renderContent = (token) => {\n const children = token.tokens;\n if (NullChecker.isNullOrEmpty(children)) {\n return token.text;\n }\n return this._render(children);\n };\n }\n /** Link/image reference definitions of the whole document (they may be referenced from any depth). */\n #references;\n /** Footnote definitions by id, and the order of their first reference (their numbering). */\n #footnotes;\n #footnoteOrder;\n #highlighter;\n /** Collects the reference and footnote definitions of the whole tree. */\n _collectDefinitions(tree) {\n for (let token of tree ?? []) {\n if (token?.type === MARKDOWN_TYPES.Reference) {\n this.#references.push(token);\n }\n if (token?.type === MARKDOWN_TYPES.FootnoteDefinition && !this.#footnotes.has(token['id'])) {\n this.#footnotes.set(token['id'], token);\n }\n this._collectDefinitions(token?.tokens);\n }\n }\n _findReference(ref, image) {\n if (NullChecker.isNullOrEmpty(ref)) {\n return undefined;\n }\n const key = ref.toLowerCase();\n return this.#references.find(t => (t.image === true) === image && t.id?.toLowerCase() === key);\n }\n _renderCodeBlock(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const lang = token['lang'];\n if (token['highlighted'] !== true) {\n const classAttribute = lang ? (' class=\"' + lang + '\"') : '';\n const content = this._renderContent(token);\n return `<pre>${R}<code${classAttribute}>${content}</code>${R}</pre>${R}`;\n }\n // `code-highlighted` (and `code-markup`) let the theme style any registered language\n const classes = [lang, 'code-highlighted'];\n if (token['syntax'] === MARKUP_SYNTAX) {\n classes.push('code-markup');\n }\n const classList = attributeEncode(classes.join(' '));\n const highlighted = this.#highlighter.render(token.tokens);\n return `<pre>${R}<code class=\"${classList}\">${highlighted}</code>${R}</pre>${R}`;\n }\n _renderImage(token) {\n let src = token.src, title = token.title;\n if (!src) {\n const reference = this._findReference(token.ref, true);\n src = reference?.url;\n title = reference?.title;\n }\n if (!src) {\n const content = this._renderContent(token);\n return `![${content}]`;\n }\n const titleAttr = titleAttribute(title);\n return `<img src=\"${src}\" alt=\"${token.text}\"${titleAttr} />`;\n }\n _renderLink(token) {\n let href = token.href, title = token.title;\n if (!href) {\n const reference = this._findReference(token.ref, false);\n href = reference?.url;\n title = reference?.title;\n }\n const content = this._renderContent(token);\n if (!href) {\n return `[${content}]`;\n }\n const titleAttr = titleAttribute(title);\n return `<a href=\"${href}\"${titleAttr}>${content}</a>`;\n }\n _renderListItem(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const content = this._renderContent(token);\n if (token['task'] !== true) {\n return `\\t<li>${content}</li>${R}`;\n }\n const checked = token['checked'] === true ? ' checked' : '';\n return `\\t<li class=\"task-list-item\"><input type=\"checkbox\" disabled${checked} /> ${content}</li>${R}`;\n }\n _renderTableRow(row) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n let cells = '';\n for (let cell of row.tokens ?? []) {\n const tag = cell['header'] === true ? 'th' : 'td';\n const align = alignAttribute(cell['align']);\n const content = this._renderContent(cell);\n cells += `<${tag}${align}>${content}</${tag}>`;\n }\n return `<tr>${cells}</tr>${R}`;\n }\n _renderTable(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const rows = token.tokens ?? [];\n const headerRows = rows.filter(r => r['header'] === true);\n const bodyRows = rows.filter(r => r['header'] !== true);\n const head = headerRows.map(r => this._renderTableRow(r)).join('');\n let html = `<table>${R}<thead>${R}${head}</thead>${R}`;\n if (bodyRows.length > 0) {\n const body = bodyRows.map(r => this._renderTableRow(r)).join('');\n html += `<tbody>${R}${body}</tbody>${R}`;\n }\n return html + `</table>${R}`;\n }\n _renderFootnoteReference(token) {\n const id = token['id'];\n if (!this.#footnotes.has(id)) {\n return `[^${token.text}]`;\n }\n const order = this.#footnoteOrder;\n const isFirst = !order.includes(id);\n if (isFirst) {\n order.push(id);\n }\n const number = order.indexOf(id) + 1;\n const anchorId = isFirst ? ` id=\"fnref-${id}\"` : '';\n return `<sup class=\"footnote-ref\"><a href=\"#fn-${id}\"${anchorId}>${number}</a></sup>`;\n }\n /** Renders the referenced footnotes, in order of first reference (definitions may reference further footnotes). */\n _renderFootnotes() {\n const order = this.#footnoteOrder;\n if (order.length === 0) {\n return '';\n }\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n let items = '';\n for (let i = 0; i < order.length; i++) {\n const id = order[i];\n const definition = this.#footnotes.get(id);\n const content = this._renderContent(definition);\n items += `<li id=\"fn-${id}\">${content} <a href=\"#fnref-${id}\" class=\"footnote-backref\">&#8617;</a></li>${R}`;\n }\n return `<section class=\"footnotes\">${R}<ol>${R}${items}</ol>${R}</section>${R}`;\n }\n _rendeItem(token, allTokens) {\n const r = this._renderContent, R = CARRIAGE_RETURN_PLACEHOLDER;\n switch (token?.type) {\n case MARKDOWN_TYPES.Reference:\n case MARKDOWN_TYPES.FootnoteDefinition:\n return '';\n case MARKDOWN_TYPES.Html:\n return token.raw;\n case MARKDOWN_TYPES.BlockQuote:\n return `<blockquote>\\n${r(token)}</blockquote>${R}`;\n case MARKDOWN_TYPES.Bold:\n return `<b>${r(token)}</b>`;\n case MARKDOWN_TYPES.CodeBlock:\n return this._renderCodeBlock(token);\n case MARKDOWN_TYPES.Code:\n return `<code>${r(token)}</code>`;\n case MARKDOWN_TYPES.HorizontalRule:\n return `<hr />${R}`;\n case MARKDOWN_TYPES.Heading:\n const hlevel = token['level'], hid = token['ref'];\n return `<h${hlevel} id=\"${hid}\">${r(token)}</h${hlevel}>${R}`;\n case MARKDOWN_TYPES.Image:\n case MARKDOWN_TYPES.ImageLike:\n return this._renderImage(token);\n case MARKDOWN_TYPES.Italic:\n return `<i>${r(token)}</i>`;\n case MARKDOWN_TYPES.StrikeThrough:\n return `<s>${r(token)}</s>`;\n case MARKDOWN_TYPES.Quote:\n return `<q>${r(token)}</q>`;\n case MARKDOWN_TYPES.LineBreak:\n return '<br />' + R;\n case MARKDOWN_TYPES.OrderedList:\n return `<ol start=\"${token['start']}\">\\n${r(token)}</ol>${R}`;\n case MARKDOWN_TYPES.UnorderedList:\n return `<ul>\\n${r(token)}</ul>${R}`;\n case MARKDOWN_TYPES.ListItem:\n return this._renderListItem(token);\n case MARKDOWN_TYPES.Link:\n case MARKDOWN_TYPES.LinkLike:\n return this._renderLink(token);\n case MARKDOWN_TYPES.Table:\n return this._renderTable(token);\n case MARKDOWN_TYPES.FootnoteReference:\n return this._renderFootnoteReference(token);\n case MARKDOWN_TYPES.Paragraph:\n return `<p>${r(token)}</p>${R}`;\n case MARKDOWN_TYPES.Text:\n case MARKDOWN_TYPES.Space:\n return token.text;\n }\n return this._extraItemRender(token, allTokens);\n }\n _render(tree) {\n let acc = '';\n for (let token of tree || []) {\n acc += this._rendeItem(token, tree);\n }\n return acc;\n }\n render(tree) {\n this.#references = [];\n this.#footnotes.clear();\n this.#footnoteOrder = [];\n this._collectDefinitions(tree);\n const body = this._render(tree);\n const footnotes = this._renderFootnotes();\n return trim(body + footnotes);\n }\n}\n/** Renders a Markdown token tree as a JSON array of tokens, mainly useful for debugging/inspection. */\nclass TokenRenderer {\n _render(token) {\n return NullChecker.isNullOrEmpty(token) ? '' : JSON.stringify(token);\n }\n render(tree) {\n return '[' + tree.filter(i => !NullChecker.isNullOrEmpty(i)).map(this._render).join(',') + ']';\n }\n}\nfunction isRenderer(obj) {\n return obj && typeof obj === 'object' && typeof obj.render === 'function';\n}\n/** Markdown parser: tokenizes Markdown source and renders it to HTML (or another format via a custom {@link Compile.Renderer}). */\nexport class Parser extends Compile.Parser {\n /**\n * Parses Markdown `input` and renders it to an HTML string.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @param extraItemRenderer Fallback renderer invoked for token types not natively handled (e.g. tokens produced by `extraGrammar`); defaults to returning the token's `text`.\n * @returns The rendered HTML string.\n */\n toHtml(input, extraGrammar, extraItemRenderer) {\n const renderer = new HtmlRenderer(extraItemRenderer);\n if (NullChecker.isNullOrEmpty(extraGrammar)) {\n return this.parse(input, renderer);\n }\n return this.parse(input, getGrammar(extraGrammar), renderer);\n }\n /**\n * Parses Markdown `input` and returns its token tree as a plain (JSON-serializable) array, useful for inspection/debugging.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @returns The parsed token tree.\n */\n tokenize(input, extraGrammar) {\n const json = this.parse(input, getGrammar(extraGrammar), new TokenRenderer());\n return JSON.parse(json);\n }\n parse(input, grammarOrRenderer = getGrammar(), renderer = new HtmlRenderer()) {\n // line endings are normalized: the grammar expects `\\n` (`.` doesn't match `\\r`: CRLF paragraphs would split by line)\n const normalized = (input ?? '').replace(/\\r\\n?/g, '\\n');\n if (isRenderer(grammarOrRenderer)) {\n const grammar = getGrammar();\n return super.parse(normalized, grammar, grammarOrRenderer);\n }\n return super.parse(normalized, grammarOrRenderer, renderer);\n }\n}\n//}\n", "//namespace Pacem.Compile {\n/** After these, a `/` starts a division (not a regular expression literal). */\nconst DIVISION_AFTER_TYPES = ['identifier', 'number', 'string', 'regex'];\nconst DIVISION_AFTER_TEXTS = [')', ']', '}', 'this', 'super', 'null', 'undefined', 'true', 'false', '++', '--'];\nconst JAVASCRIPT_KEYWORDS = [\n // JavaScript\n 'async', 'await', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do',\n 'else', 'enum', 'export', 'extends', 'false', 'finally', 'for', 'from', 'function', 'get', 'if', 'import', 'in',\n 'instanceof', 'let', 'new', 'null', 'of', 'return', 'set', 'static', 'super', 'switch', 'this', 'throw', 'true',\n 'try', 'typeof', 'undefined', 'var', 'void', 'while', 'with', 'yield',\n // TypeScript\n 'abstract', 'accessor', 'any', 'as', 'asserts', 'bigint', 'boolean', 'declare', 'implements', 'infer',\n 'interface', 'is', 'keyof', 'module', 'namespace', 'never', 'number', 'object', 'override', 'package', 'private',\n 'protected', 'public', 'readonly', 'satisfies', 'string', 'symbol', 'type', 'unique', 'unknown'\n];\n/** Rules shared by every \"code\" state (top level, template expressions, nested braces). */\nconst CODE_RULES = [\n { match: String.raw `/\\*\\*(?!/)[\\s\\S]*?(?:\\*/|$)`, type: 'doc-comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `\\r\\n|[\\r\\n\u2028\u2029]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\u00A0\uFEFF]+`, type: 'space' },\n { match: '`', type: 'string', push: 'template' },\n { match: String.raw `\"(?:\\\\[\\s\\S]|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `'(?:\\\\[\\s\\S]|[^'\\\\\\r\\n])*'?`, type: 'string' },\n {\n // regular expression literal (only where a division can't be)\n match: String.raw `/(?![*/])(?:\\\\.|\\[(?:\\\\.|[^\\]\\\\\\r\\n])*\\]|[^/\\\\\\[\\r\\n])+/[a-z]*`, type: 'regex',\n when: { previousNotTypes: DIVISION_AFTER_TYPES, previousNotTexts: DIVISION_AFTER_TEXTS }\n },\n { match: String.raw `0[xX][\\da-fA-F_]+n?|0[bB][01_]+n?|0[oO][0-7_]+n?|(?:\\d[\\d_]*\\.?[\\d_]*|\\.\\d[\\d_]*)(?:[eE][+-]?\\d[\\d_]*)?n?`, type: 'number' },\n { match: String.raw `#?[A-Za-z_$\u00A0-\uFFFF][\\w$\u00A0-\uFFFF]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `\\?\\.(?!\\d)|\\.\\.\\.|[;,.]`, type: 'punctuation' },\n { match: String.raw `>>>=|<<=|>>=|>>>|\\*\\*=|&&=|\\|\\|=|\\?\\?=|===|!==|=>|\\*\\*|\\+\\+|--|<<|>>|&&|\\|\\||\\?\\?|[-+*/%&|^<>!=]=?|[~?:@]`, type: 'operator' },\n];\n/**\n * JavaScript vocabulary, TypeScript superset: comments (JSDoc as `doc-comment`), strings, template literals with nested\n * `${\u2026}` expressions, regular expression literals (told from divisions by the previous significant token), numbers\n * (hex/binary/octal/BigInt/separators), identifiers (`#private` included), keywords (JS + TS, not after `.`/`?.`),\n * brackets, punctuation and operators.\n */\nexport const JavaScriptSyntax = {\n name: 'javascript',\n aliases: ['js', 'mjs', 'cjs', 'jsx', 'typescript', 'ts', 'tsx', 'script', 'ecmascript'],\n lexical: {\n start: 'root',\n states: {\n root: CODE_RULES,\n template: [\n { match: '`', type: 'string', pop: true },\n { match: String.raw `\\$\\{`, type: 'punctuation', push: 'templateExpression' },\n { match: String.raw `(?:\\\\[\\s\\S]|\\$(?!\\{)|[^\\\\` + '`' + String.raw `$])+`, type: 'string' },\n ],\n templateExpression: [\n { match: String.raw `\\}`, type: 'punctuation', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n braces: [\n { match: String.raw `\\}`, type: 'bracket', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n },\n keywords: { keyword: JAVASCRIPT_KEYWORDS },\n keywordExceptAfter: ['.', '?.'],\n }\n};\n", "//namespace Pacem.Compile {\n/** Member accesses (`obj.#x`, `obj?.x`) are never Pacem binding tokens. */\nconst NOT_AFTER_MEMBER_ACCESS = { previousNotTexts: ['.', '?.'] };\n/**\n * Pacem binding-expression vocabulary (the content of `{{ \u2026 }}` attributes): JavaScript plus the special tokens\n * resolved by core's `Expression`:\n * - `binding-host`: `:host` (followed by `.`);\n * - `binding-host-property`: `::name`;\n * - `binding-item`: `^item`, `^^item`, \u2026 (repeater item, n levels up);\n * - `binding-index`: `^index`, `^^index`, \u2026;\n * - `binding-element`: `#id` (element reference);\n * - `binding-this`: `$this` / `this` (the bound element).\n */\nexport const PacemBindingSyntax = {\n name: 'pacem-binding',\n aliases: ['pacem', 'binding'],\n extends: 'javascript',\n lexical: {\n states: {\n root: [\n { match: String.raw `:host(?=\\.)`, type: 'binding-host', when: NOT_AFTER_MEMBER_ACCESS },\n { match: String.raw `::[A-Za-z_$][\\w$]*`, type: 'binding-host-property' },\n { match: String.raw `\\^+item(?![\\w$])`, type: 'binding-item' },\n { match: String.raw `\\^+index(?![\\w$])`, type: 'binding-index' },\n { match: String.raw `#[A-Za-z_][\\w]*`, type: 'binding-element', when: NOT_AFTER_MEMBER_ACCESS },\n { match: String.raw `\\$?this(?![\\w$])`, type: 'binding-this', when: NOT_AFTER_MEMBER_ACCESS },\n ]\n }\n }\n};\n", "//namespace Pacem.Compile {\nconst NEWLINE_RULE = { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' };\n/** Attribute list of an opening tag. */\nconst ATTRIBUTE_RULES = [\n NEWLINE_RULE,\n { match: String.raw `[ \\t\\f]+`, type: 'space' },\n { match: '\"', type: 'string', push: 'doubleQuoted' },\n { match: \"'\", type: 'string', push: 'singleQuoted' },\n { match: String.raw `[^\\s=/>\"']+`, type: 'attribute' },\n { match: '=', type: 'operator' },\n { match: '/', type: 'punctuation' },\n];\n/** A Pacem binding (`{{ \u2026 }}`) inside an attribute value: embeds the `pacem-binding` vocabulary up to `}}`. */\nconst BINDING_RULES = [\n { match: String.raw `\\{\\{`, type: 'punctuation', embed: 'pacem-binding', until: String.raw `\\}\\}` },\n { match: String.raw `\\}\\}`, type: 'punctuation' },\n];\n/**\n * Markup (HTML/XML) vocabulary: comments, doctypes/CDATA, tags (`tag`/`tagname`), attributes, quoted values (Pacem\n * `{{ \u2026 }}` bindings tokenized with `pacem-binding`), entities, text, and `<script>` bodies tokenized with `javascript`.\n */\nexport const MarkupSyntax = {\n name: 'markup',\n aliases: ['html', 'htm', 'xml', 'xhtml', 'svg'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `<!--[\\s\\S]*?(?:-->|$)`, type: 'comment' },\n { match: String.raw `<![^>]*>?`, type: 'tag' },\n { match: String.raw `(<\\/)([\\w:.-]+)(\\s*>?)`, type: ['tag', 'tagname', 'tag'] },\n { match: String.raw `(<)(script)(?![\\w:.-])`, flags: 'i', type: ['tag', 'tagname'], push: 'scriptTag' },\n { match: String.raw `(<)([\\w:.-]+)`, type: ['tag', 'tagname'], push: 'tag' },\n { match: String.raw `&(?:#\\d+|#[xX][\\da-fA-F]+|\\w+);`, type: 'entity' },\n NEWLINE_RULE,\n { match: String.raw `[^<&\\r\\n]+`, type: 'text' },\n ],\n tag: [\n { match: String.raw `/?>`, type: 'tag', pop: true },\n { include: 'attributes' },\n ],\n scriptTag: [\n { match: '/>', type: 'tag', pop: true },\n // the script body is tokenized as JavaScript, up to the closing tag\n { match: '>', type: 'tag', pop: true, embed: 'javascript', until: String.raw `<\\/script` },\n { include: 'attributes' },\n ],\n attributes: ATTRIBUTE_RULES,\n doubleQuoted: [\n { match: '\"', type: 'string', pop: true },\n ...BINDING_RULES,\n { match: String.raw `(?:[^\"{}]|\\{(?!\\{)|\\}(?!\\}))+`, type: 'string' },\n ],\n singleQuoted: [\n { match: \"'\", type: 'string', pop: true },\n ...BINDING_RULES,\n { match: String.raw `(?:[^'{}]|\\{(?!\\{)|\\}(?!\\}))+`, type: 'string' },\n ],\n },\n insignificant: ['space', 'newline', 'comment', 'text']\n }\n};\n", "//namespace Pacem.Compile {\nconst CSHARP_KEYWORDS = [\n 'abstract', 'add', 'alias', 'and', 'args', 'as', 'ascending', 'async', 'await', 'base', 'bool', 'break', 'by',\n 'byte', 'case', 'catch', 'char', 'checked', 'class', 'const', 'continue', 'decimal', 'default', 'delegate',\n 'descending', 'do', 'double', 'dynamic', 'else', 'enum', 'equals', 'event', 'explicit', 'extern', 'false', 'file',\n 'finally', 'fixed', 'float', 'for', 'foreach', 'from', 'get', 'global', 'goto', 'group', 'if', 'implicit', 'in',\n 'init', 'int', 'interface', 'internal', 'into', 'is', 'join', 'let', 'lock', 'long', 'managed', 'nameof',\n 'namespace', 'new', 'nint', 'not', 'notnull', 'nuint', 'null', 'object', 'on', 'operator', 'or', 'orderby', 'out',\n 'override', 'params', 'partial', 'private', 'protected', 'public', 'readonly', 'record', 'ref', 'remove',\n 'required', 'return', 'sbyte', 'scoped', 'sealed', 'select', 'set', 'short', 'sizeof', 'stackalloc', 'static',\n 'string', 'struct', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'uint', 'ulong', 'unchecked', 'unmanaged',\n 'unsafe', 'ushort', 'using', 'value', 'var', 'virtual', 'void', 'volatile', 'when', 'where', 'while', 'with',\n 'yield'\n];\n/** Rules shared by every \"code\" state (top level, interpolations, nested braces). */\nconst CODE_RULES = [\n { match: String.raw `///[^\\r\\n]*`, type: 'doc-comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n // preprocessor directives, at the beginning of a line\n { match: String.raw `(?<=^[ \\t]*|[\\r\\n][ \\t]*)#[ \\t]*[a-z]+[^\\r\\n]*`, type: 'preprocessor' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\\u00A0\\uFEFF]+`, type: 'space' },\n // raw string literals (\"\"\"\u2026\"\"\", optionally interpolated)\n { match: String.raw `\\$*(\"{3,})[\\s\\S]*?\\1`, type: 'string' },\n { match: String.raw `\\$@\"|@\\$\"`, type: 'string', push: 'interpolatedVerbatim' },\n { match: String.raw `\\$\"`, type: 'string', push: 'interpolated' },\n { match: String.raw `@\"(?:[^\"]|\"\")*\"?`, type: 'string' },\n { match: String.raw `\"(?:\\\\.|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `0[xX][\\da-fA-F_]+[uUlL]*|0[bB][01_]+[uUlL]*|(?:\\d[\\d_]*\\.?[\\d_]*|\\.\\d[\\d_]*)(?:[eE][+-]?\\d+)?[fFdDmMuUlL]*`, type: 'number' },\n { match: String.raw `@?[A-Za-z_\\u00A0-\\uFFFF][\\w\\u00A0-\\uFFFF]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `\\?\\.|::|[;,.]`, type: 'punctuation' },\n { match: String.raw `\\?\\?=|<<=|>>>=|>>=|>>>|=>|==|!=|<=|>=|&&|\\|\\||\\?\\?|\\+\\+|--|->|<<|[-+*/%&|^<>!=]=?|[~?:]`, type: 'operator' },\n];\n/**\n * C# vocabulary: XML doc comments (`doc-comment`), comments, preprocessor directives, strings (regular, verbatim, raw,\n * interpolated with nested `{\u2026}` expressions), chars, numbers (with suffixes), identifiers (`@verbatim` included),\n * keywords (contextual ones included, not after `.`/`?.`), brackets, punctuation and operators.\n */\nexport const CSharpSyntax = {\n name: 'csharp',\n aliases: ['cs', 'c#', 'c-sharp', 'dotnet'],\n lexical: {\n start: 'root',\n states: {\n root: CODE_RULES,\n interpolated: [\n { match: '\"', type: 'string', pop: true },\n { match: String.raw `\\{\\{|\\}\\}`, type: 'string' },\n { match: String.raw `\\{`, type: 'punctuation', push: 'interpolation' },\n { match: String.raw `(?:\\\\.|[^\"\\\\{}\\r\\n])+`, type: 'string' },\n ],\n interpolatedVerbatim: [\n { match: '\"\"', type: 'string' },\n { match: '\"', type: 'string', pop: true },\n { match: String.raw `\\{\\{|\\}\\}`, type: 'string' },\n { match: String.raw `\\{`, type: 'punctuation', push: 'interpolation' },\n { match: String.raw `[^\"{}]+`, type: 'string' },\n ],\n interpolation: [\n { match: String.raw `\\}`, type: 'punctuation', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n braces: [\n { match: String.raw `\\}`, type: 'bracket', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n },\n keywords: { keyword: CSHARP_KEYWORDS },\n keywordExceptAfter: ['.', '?.'],\n }\n};\n", "//namespace Pacem.Compile {\nconst C_KEYWORDS = [\n // C\n 'auto', 'break', 'case', 'char', 'const', 'continue', 'default', 'do', 'double', 'else', 'enum', 'extern', 'float',\n 'for', 'goto', 'if', 'inline', 'int', 'long', 'register', 'restrict', 'return', 'short', 'signed', 'sizeof',\n 'static', 'struct', 'switch', 'typedef', 'union', 'unsigned', 'void', 'volatile', 'while', 'bool', 'true', 'false',\n 'NULL', '_Bool', '_Complex', '_Imaginary', '_Alignas', '_Alignof', '_Atomic', '_Generic', '_Noreturn',\n '_Static_assert', '_Thread_local',\n // C++\n 'alignas', 'alignof', 'and', 'and_eq', 'asm', 'bitand', 'bitor', 'catch', 'char8_t', 'char16_t', 'char32_t',\n 'class', 'co_await', 'co_return', 'co_yield', 'compl', 'concept', 'consteval', 'constexpr', 'constinit',\n 'const_cast', 'decltype', 'delete', 'dynamic_cast', 'explicit', 'export', 'final', 'friend', 'mutable',\n 'namespace', 'new', 'noexcept', 'not', 'not_eq', 'nullptr', 'operator', 'or', 'or_eq', 'override', 'private',\n 'protected', 'public', 'reinterpret_cast', 'requires', 'static_assert', 'static_cast', 'template', 'this',\n 'thread_local', 'throw', 'try', 'typeid', 'typename', 'using', 'virtual', 'wchar_t', 'xor', 'xor_eq'\n];\n/**\n * C/C++ vocabulary: comments (`/** \u2026 *\\/` and `///` as `doc-comment`), preprocessor directives (with their `<header>`),\n * strings (raw `R\"x(\u2026)x\"` and prefixed ones included), chars, numbers (with suffixes/separators), identifiers, keywords\n * (C and C++), brackets, punctuation and operators.\n */\nexport const CSyntax = {\n name: 'c',\n aliases: ['cpp', 'c++', 'cc', 'cxx', 'h', 'hpp', 'hxx', 'objc'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `/\\*\\*(?!/)[\\s\\S]*?(?:\\*/|$)|///[^\\r\\n]*`, type: 'doc-comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n // preprocessor directives, at the beginning of a line (line continuations included)\n { match: String.raw `(?<=^[ \\t]*|[\\r\\n][ \\t]*)#[ \\t]*\\w+(?:\\\\\\r?\\n|[^\\r\\n])*`, type: 'preprocessor' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v]+`, type: 'space' },\n { match: String.raw `(?:u8|u|U|L)?R\"([^()\\\\\\s]{0,16})\\([\\s\\S]*?\\)\\1\"`, type: 'string' },\n { match: String.raw `(?:u8|u|U|L)?\"(?:\\\\[\\s\\S]|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `(?:u8|u|U|L)?'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `0[xX][\\da-fA-F']+[uUlL]*|0[bB][01']+[uUlL]*|(?:\\d[\\d']*\\.?[\\d']*|\\.\\d[\\d']*)(?:[eEpP][+-]?\\d+)?[fFlLuU]*`, type: 'number' },\n { match: String.raw `[A-Za-z_][\\w]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `::|\\.\\.\\.|->\\*?|\\.\\*?|[;,]`, type: 'punctuation' },\n { match: String.raw `<=>|<<=|>>=|<<|>>|\\+\\+|--|&&|\\|\\||[-+*/%&|^<>!=]=?|[~?:#]`, type: 'operator' },\n ],\n },\n keywords: { keyword: C_KEYWORDS },\n keywordExceptAfter: ['.', '->', '::'],\n }\n};\n", "//namespace Pacem.Compile {\n/**\n * JSON vocabulary (JSONC and JSON5-ish tolerant: comments, single quotes and trailing commas are recognized):\n * object keys are `attribute`s, values `string`/`number`/`keyword` (`true`, `false`, `null`).\n */\nexport const JsonSyntax = {\n name: 'json',\n aliases: ['jsonc', 'json5', 'webmanifest'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\u00A0\uFEFF]+`, type: 'space' },\n // keys: strings followed by a colon\n { match: String.raw `(?:\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*')(?=\\s*:)`, type: 'attribute' },\n { match: String.raw `\"(?:\\\\.|[^\"\\\\\\r\\n])*\"?|'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `-?(?:0[xX][\\da-fA-F]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)|-?Infinity|NaN`, type: 'number' },\n { match: String.raw `[A-Za-z_$][\\w$]*`, type: 'identifier' },\n { match: String.raw `[\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `[:,]`, type: 'punctuation' },\n ],\n },\n keywords: { keyword: ['true', 'false', 'null'] },\n }\n};\n", "import { Syntaxes } from './registry';\nimport { JavaScriptSyntax } from './vocabularies/javascript';\nimport { PacemBindingSyntax } from './vocabularies/pacem-binding';\nimport { MarkupSyntax } from './vocabularies/markup';\nimport { CSharpSyntax } from './vocabularies/csharp';\nimport { CSyntax } from './vocabularies/c';\nimport { JsonSyntax } from './vocabularies/json';\n//namespace Pacem.Compile {\n/** The built-in vocabularies, one per {@link SyntaxName} (enforced by the type). */\nconst BUILTIN_SYNTAXES = {\n 'javascript': JavaScriptSyntax,\n 'pacem-binding': PacemBindingSyntax,\n 'markup': MarkupSyntax,\n 'csharp': CSharpSyntax,\n 'c': CSyntax,\n 'json': JsonSyntax\n};\n// available as soon as the compile module loads\nfor (let name in BUILTIN_SYNTAXES) {\n const syntax = BUILTIN_SYNTAXES[name];\n Syntaxes.register(syntax);\n}\nexport { JavaScriptSyntax, PacemBindingSyntax, MarkupSyntax, CSharpSyntax, CSyntax, JsonSyntax };\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["Number.prototype.isCloseTo = function (other, precision = 14) {\n const delta = Number(`1e-${precision}`);\n return this > (other - delta) && this < (other + delta);\n //return this.toFixed(precision) === other.toFixed(precision); \n};\nNumber.prototype.roundoff = function (precision = 14) {\n return parseFloat(this.toFixed(precision));\n};\nNumber.prototype.clamp = function (min, max) {\n let value = this;\n if (min != null && !isNaN(min)) {\n value = Math.max(value, min);\n }\n if (max != null && !isNaN(max)) {\n value = Math.min(value, max);\n }\n return value;\n};\nNumber.prototype.toBase62 = function () {\n var alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n var temp = this;\n var sb = '';\n while (temp != 0) {\n var mod = temp % 62;\n sb = alphabet.charAt(mod) + sb;\n temp = Math.floor(temp / 62);\n }\n return sb;\n};\nNumber.prototype.toBase36 = function () {\n return this.toString(36);\n};\nexport {};\n", "//namespace Pacem {\nconst JSON_DATE_PATTERN = /^\\/Date\\([\\d]+\\)\\/$/i;\n/** Date parsing and arithmetic utilities. */\nexport class Dates {\n /**\n * Parses a value into a `Date`. Accepts ISO/parseable date strings, ASP.NET-style\n * `/Date(ticks)/` JSON date strings, numeric timestamps, or a `Date` instance (returned as-is).\n * @param input Value to parse.\n * @returns The resulting `Date`.\n */\n static parse(input) {\n let d;\n if (typeof input === 'string') {\n if (JSON_DATE_PATTERN.test(input))\n d = parseInt(input.substring(6));\n else\n d = Date.parse(input);\n return new Date(d);\n }\n else if (typeof input === 'number') {\n return new Date(input);\n }\n else\n return input;\n }\n /**\n * Gets whether the given year is a leap year.\n * @param year Year to check.\n */\n static isLeapYear(year) {\n return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n }\n /**\n * Gets the number of days in a given month of a given year.\n * @param year Year (used to account for leap Februaries).\n * @param month Zero-based month index (0 = January, ..., 11 = December).\n * @returns Number of days in the month.\n */\n static daysInMonth(year, month) {\n return [31, (Dates.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n }\n /**\n * Gets whether a date is an `Invalid Date` or not.\n * @param date\n */\n static isDate(date) {\n return date instanceof Date && !isNaN(date.valueOf());\n }\n /**\n * Returns the date-only equaivalent of a provided datetime.\n * @param datetime\n */\n static dateOnly(datetime) {\n return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate());\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of months to `input`,\n * clamping the day-of-month to the target month's length (e.g. Jan 31 + 1 month => Feb 28/29).\n * @param input Starting date.\n * @param value Number of months to add.\n * @returns The resulting date.\n */\n static addMonths(input, value) {\n let n = input.getDate(), i = new Date(input), month = i.getMonth() + value, years = 0;\n while (month < 0) {\n month += 12;\n years--;\n }\n i.setDate(1);\n i.setMonth(month % 12);\n i.setFullYear(i.getFullYear() + years + Math.floor(month / 12));\n i.setDate(Math.min(n, Dates.daysInMonth(i.getFullYear(), i.getMonth())));\n return i;\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of days to `input`.\n * @param input Starting date.\n * @param value Number of days to add.\n * @returns The resulting date.\n */\n static addDays(input, value) {\n return new Date(input.valueOf() + value * 86400000);\n }\n /**\n * Computes the number of days (possibly fractional) between two dates.\n * @param start Start date.\n * @param end End date.\n * @returns Number of days between `start` and `end` (negative if `end` precedes `start`).\n */\n static daysBetween(start, end) {\n return (end.valueOf() - start.valueOf()) / 86400000;\n }\n}\n//}\n", "/// <reference path=\"dates.ts\" />\nimport { Dates } from \"./dates\";\n// namespace Pacem {\n/** Null/empty value-checking utilities. */\nexport class NullChecker {\n /**\n * Returns whether the given value is `null` or `undefined`.\n * @param o Value to check.\n */\n static isNull(o) {\n return o === null || o === void 0;\n }\n /**\n * Returns whether the given value is \"empty\": an empty array, an empty string, or a\n * plain object with no own enumerable keys (dates, regexes and file-system handles are never\n * considered empty).\n * @param o Value to check.\n */\n static isEmpty(o) {\n try {\n return (Array.isArray(o) && o.length === 0)\n || (typeof o === 'string' && o === '')\n || (typeof o === 'object' && Object.keys(o).length === 0 && !Dates.isDate(o) && !(o instanceof RegExp) && !(o instanceof FileSystemDirectoryHandle) && !(o instanceof FileSystemFileHandle));\n }\n catch (e) {\n // Object.keys(null) would throw...\n return false;\n }\n }\n /**\n * Returns whether the given value is `null`, `undefined`, or \"empty\" (see {@link NullChecker.isEmpty}).\n * @param o Value to check.\n */\n static isNullOrEmpty(o) {\n return NullChecker.isNull(o) || NullChecker.isEmpty(o);\n }\n}\n//}\n", "import { NullChecker } from \"./null-checker\";\nArray.prototype.distinct = function () {\n return Array.from(new Set(this));\n};\nArray.prototype.union = function (other) {\n const thisEmpty = NullChecker.isNullOrEmpty(this), thatEmpty = NullChecker.isNullOrEmpty(other);\n if (thisEmpty && thatEmpty) {\n return [];\n }\n if (thatEmpty) {\n return this.slice();\n }\n if (thisEmpty) {\n return other.slice();\n }\n return this.concat(other).distinct();\n};\nArray.prototype.moveWithin = function (from, to) {\n const OUT_OF_RANGE = 'Index must be greater or equal than 0 and less or equal than the length of the array.';\n var arr = this;\n if (from < 0 || from > arr.length)\n throw new Error(OUT_OF_RANGE);\n if (to < 0 || to > arr.length)\n throw new Error(OUT_OF_RANGE);\n arr.splice(to, 0, /* avoid to trigger a double change on a single command */ Array.prototype.splice.apply(arr, [from, 1])[0]);\n};\nArray.prototype.equalsContent = function (other) {\n if (other == null || this.length !== other.length) {\n return false;\n }\n for (let j = 0; j < this.length; j++) {\n if (this[j] !== other[j]) {\n return false;\n }\n }\n return true;\n};\nArray.prototype.cloneFrom = function (other) {\n if (other == null) {\n throw 'Cannot clone array from null object.';\n }\n const length = other.length;\n var changes = this.length !== other.length;\n for (let j = 0; j < length; j++) {\n const item = other[j];\n if (this.length > j) {\n if (this[j] !== item) {\n this[j] = item;\n changes = true;\n }\n }\n else {\n Array.prototype.push.apply(this, [item]);\n changes = true;\n }\n }\n if (changes) {\n // trigger change just in case\n this.splice(length);\n }\n};\n", "function isPlainObject(value) {\n return (value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n (value.constructor === Object || value.constructor === undefined));\n}\nfunction deepMerge(target, source) {\n const output = target;\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = output[key];\n if (isPlainObject(sourceValue)) {\n // never adopt the source's object by reference: bundlers emit frozen\n // namespace objects (`export * as X`), so a later merge into the same\n // slot would throw (\"object is not extensible\"). Always merge into a\n // fresh, extensible object instead.\n output[key] = deepMerge(isPlainObject(targetValue) ? targetValue : {}, sourceValue);\n }\n else if (Array.isArray(sourceValue)) {\n output[key] = sourceValue.slice();\n }\n else {\n output[key] = sourceValue;\n }\n }\n return output;\n}\n/** Deep-merging utility for plain objects. */\nexport class DeepMerger {\n constructor() {\n }\n /**\n * Recursively merges `source` into `target`, in place: plain-object properties are merged\n * recursively (into a fresh object, never adopted by reference), arrays are shallow-copied,\n * and any other value overwrites the target's.\n * @param source Object whose properties are merged into `target`.\n * @param target Object to merge into (defaults to, and lazily creates, the global `Pacem` namespace object).\n * @returns The mutated `target`, typed as the union of both inputs.\n */\n static merge(source, target) {\n target ??= (globalThis['Pacem'] ??= {});\n return deepMerge(target, source);\n }\n}\n", "//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/** Array manipulation utilities. */\nexport class Arrays {\n static range(min, max, items = 2) {\n let x = min;\n if (NullChecker.isNull(max)) {\n max = items = min;\n min = 1;\n }\n const step = (max - min) / (items - 1);\n const output = [];\n if (step > 0) {\n //while (x <= max) {\n while (output.length < items) {\n output.push(x.roundoff());\n x += step;\n }\n }\n return output;\n }\n /**\n * Splits an array into chunks of a given size.\n * @param source Array to split.\n * @param size Maximum size of each chunk (must be a positive integer).\n * @returns Array of chunks; an empty array if `source` is null or empty.\n */\n static chunkify(source, size) {\n if (NullChecker.isNullOrEmpty(source)) {\n return [];\n }\n if (size <= 0 || size % 1 !== 0) {\n throw new Error('Provide a positive integer number.');\n }\n const length = Math.ceil(source.length / size);\n return Array.from({ length }, (_, index) => {\n const start = index * size, end = start + size;\n return source.slice(start, end);\n });\n }\n}\n//}\n", "//namespace Pacem {\n/** Conversion utilities between `Blob`, base64/data URLs and plain text. */\nexport class Blobs {\n /**\n * Reads a `Blob` and resolves it as a base64-encoded data URL.\n * @param blob Blob to read.\n * @returns A promise resolving with the data URL string.\n */\n static blobToDataURL(blob) {\n return new Promise((resolve, _) => {\n const a = new FileReader();\n a.onload = (e) => { resolve(e.target.result); };\n a.readAsDataURL(blob);\n });\n }\n static _b64ToUint8Array(bstr) {\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return u8arr;\n }\n /**\n * Converts a base64-encoded string into a `Blob`.\n * @param bstr Base64-encoded string (without the `data:...;base64,` prefix).\n * @param options Blob options (e.g. MIME `type`).\n * @returns The resulting `Blob`.\n */\n static base64ToBlob(bstr, options) {\n const u8arr = Blobs._b64ToUint8Array(atob(bstr));\n return new Blob([u8arr], options);\n }\n /**\n * Converts a data URL (`data:<mime>;base64,<data>`) into a `Blob`, inferring the MIME type when present.\n * @param dataurl Data URL to convert.\n * @returns The resulting `Blob`.\n */\n static dataURLToBlob(dataurl) {\n const coma = dataurl.indexOf(',');\n if (coma === -1) {\n return Blobs.base64ToBlob(dataurl);\n }\n else {\n const bstr = dataurl.substring(coma + 1), data = dataurl.substring(0, coma);\n const mime = data.match(/:(.*?);/)[1];\n return Blobs.base64ToBlob(bstr, { type: mime });\n }\n }\n /**\n * Reads a `Blob` and decodes it as text.\n * @param blob Blob to read.\n * @param encoding Text encoding to use for decoding (defaults to the platform's default, typically UTF-8).\n * @returns A promise resolving with the decoded text.\n */\n static async blobToText(blob, encoding) {\n const buffer = await blob.arrayBuffer();\n const decoder = new TextDecoder(encoding, { fatal: false });\n return decoder.decode(buffer);\n }\n static textToBlob(content, type = 'text/plain', charset = 'utf-8', bom, lossyChar = 0x3F) {\n let charsetLower = charset.toLowerCase();\n const fullType = () => `${type};charset=${charsetLower}`;\n switch (charsetLower) {\n // -------------------------\n // UTF-8 (native, safe)\n // -------------------------\n case 'utf-8': {\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n const parts = bom\n ? [new Uint8Array([0xEF, 0xBB, 0xBF]), bytes]\n : [bytes];\n return new Blob(parts, { type: fullType() });\n }\n // -------------------------\n // UTF-16 (explicit LE/BE)\n // -------------------------\n case 'utf-16':\n // Treat as UTF-16LE with BOM (common convention)\n charsetLower = 'utf-16le';\n bom ??= true;\n case 'utf-16le':\n case 'utf-16be': {\n const littleEndian = charsetLower !== 'utf-16be';\n const offset = bom ? 1 : 0;\n const buffer = new ArrayBuffer((content.length + offset) * 2);\n const view = new DataView(buffer);\n if (bom) {\n view.setUint16(0, 0xFEFF, littleEndian);\n }\n for (let i = 0; i < content.length; i++) {\n view.setUint16((i + offset) * 2, content.charCodeAt(i), littleEndian);\n }\n return new Blob([buffer], {\n type: fullType()\n });\n }\n // -------------------------\n // Latin-1 (ISO-8859-1)\n // -------------------------\n case 'ascii':\n case 'iso-8859-1':\n case 'latin1': {\n const boundary = charsetLower === 'ascii' ? 0x7F : 0xFF;\n const buffer = new Uint8Array(content.length);\n const lossy = lossyChar > 0;\n for (let i = 0; i < content.length; i++) {\n const code = content.charCodeAt(i);\n if (code > boundary) {\n if (lossy) {\n buffer[i] = lossyChar; // ? char\n }\n else {\n throw new Error(`Character \"${content[i]}\" cannot be encoded in ${charset}.`);\n }\n }\n else {\n buffer[i] = code;\n }\n }\n return new Blob([buffer], { type: fullType() });\n }\n // -------------------------\n // Explicitly unsupported\n // -------------------------\n default:\n throw new Error(`Encoding \"${charset}\" is not supported safely in the browser. ` +\n `Use UTF-8 or any supported encoding.`);\n }\n }\n}\n//}\n", "//namespace Pacem.Browsers {\n// Function to extract browser version using regex\nconst browserVersion = (userAgent, regex) => {\n const match = userAgent.match(regex);\n return match ? match[2] : null;\n};\n// https://stackoverflow.com/77095874\n/**\n * Detects the browser name and version from a user-agent string.\n * @param userAgent User-agent string to parse (defaults to `navigator.userAgent`).\n * @returns An object with the detected browser `name` (e.g. `Chrome`, `Firefox`, `Safari`, `Edge`, `IE`, `unknown`, ...) and its `version`.\n */\nexport function detect(userAgent = navigator.userAgent) {\n let browser = 'unknown';\n let version = null;\n // Detect browser name\n if (/ucbrowser/i.test(userAgent)) {\n browser = 'UCBrowser';\n }\n else if (/edg/i.test(userAgent)) {\n browser = 'Edge';\n }\n else if (/googlebot/i.test(userAgent)) {\n browser = 'GoogleBot';\n }\n else if (/chromium/i.test(userAgent)) {\n browser = 'Chromium';\n }\n else if (/firefox|fxios/i.test(userAgent) && !/seamonkey/i.test(userAgent)) {\n browser = 'Firefox';\n }\n else if (/; msie|trident/i.test(userAgent) && !/ucbrowser/i.test(userAgent)) {\n browser = 'IE';\n }\n else if (/chrome|crios/i.test(userAgent) && !/opr|opera|chromium|edg|ucbrowser|googlebot/i.test(userAgent)) {\n browser = 'Chrome';\n }\n else if (/safari/i.test(userAgent) && !/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i.test(userAgent)) {\n browser = 'Safari';\n }\n else if (/opr|opera/i.test(userAgent)) {\n browser = 'Opera';\n }\n // Detect browser version\n switch (browser) {\n case 'UCBrowser':\n version = browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i);\n break;\n case 'Edge':\n version = browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i);\n break;\n case 'GoogleBot':\n version = browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i);\n break;\n case 'Chromium':\n version = browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i);\n break;\n case 'Firefox':\n version = browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i);\n break;\n case 'Chrome':\n version = browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i);\n break;\n case 'Safari':\n version = browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i);\n break;\n case 'Opera':\n version = browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i);\n break;\n case 'IE': {\n const tridentVersion = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using Trident version\n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n version = tridentVersion ? `${parseFloat(tridentVersion) + 4.0}` : '7.0';\n break;\n }\n default:\n version = '0.0.0.0';\n break;\n }\n return { name: browser, version };\n}\n//}\n", "//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\nconst HSL_PATTERN = /^hsl\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*\\)$/;\nconst HSLA_PATTERN = /^hsla\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)\\)$/;\nconst RGB_PATTERN = /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nconst RGBA_PATTERN = /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\)$/;\nconst HEX_PATTERN = /^#[a-f0-9]{6}$/;\nconst HEX_SHORT_PATTERN = /^#[a-f0-9]{3}$/;\n;\n;\n;\nfunction isRgb(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'r' in clr && 'g' in clr && 'b' in clr // && 'a' in clr\n && typeof clr.r === 'number' && typeof clr.b === 'number' && typeof clr.g === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.r >= 0 && clr.r <= 1\n && clr.g >= 0 && clr.g <= 1\n && clr.b >= 0 && clr.b <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction isHsl(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'h' in clr && 's' in clr && 'l' in clr // && 'a' in clr\n && typeof clr.h === 'number' && typeof clr.s === 'number' && typeof clr.l === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.h >= 0 && clr.h <= 360\n && clr.s >= 0 && clr.s <= 1\n && clr.l >= 0 && clr.l <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction luminance(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const l = .5 * (Math.max(r, g, b) + Math.min(r, g, b));\n return l.clamp(0, 1);\n}\nconst cieUtils = {\n adjustRgbChannel: (v) => {\n // sRGB => sR'G'B'\n return v <= .03928 ? (v / 12.92) : Math.pow((v + .055) / 1.055, 2.4);\n },\n adjustRgbChannelInv: (v) => {\n // sR'G'B' => sRGB\n return v <= .00304 ? (v * 12.92) : 1.055 * (Math.pow(v, 1 / 2.4) - .055);\n },\n adjustRgb: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannel(rgb.r), g: cieUtils.adjustRgbChannel(rgb.g), b: cieUtils.adjustRgbChannel(rgb.b), a: rgb.a };\n return rgbOut;\n },\n adjustRgbInv: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannelInv(rgb.r), g: cieUtils.adjustRgbChannelInv(rgb.g), b: cieUtils.adjustRgbChannelInv(rgb.b), a: rgb.a };\n return rgbOut;\n },\n X: (adjustedRgb) => {\n return .4125 * adjustedRgb.r + .3576 * adjustedRgb.g + .1804 * adjustedRgb.b;\n },\n Y: (adjustedRgb) => {\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n return .2126 * adjustedRgb.r + .7152 * adjustedRgb.g + .0722 * adjustedRgb.b;\n },\n Z: (adjustedRgb) => {\n return .0193 * adjustedRgb.r + .1191 * adjustedRgb.g + .9503 * adjustedRgb.b;\n },\n relativeLuminance: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n return cieUtils.Y(adjRgb);\n },\n rgbToCieXYZ: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n const xyz = { x: cieUtils.X(adjRgb), y: cieUtils.Y(adjRgb), z: cieUtils.Z(adjRgb), a: rgb.a };\n return xyz;\n },\n cieXYZToRgb: (xyz) => {\n const r = 3.2410 * xyz.x - 1.5374 * xyz.y - .4986 * xyz.z, g = -.9692 * xyz.x + 1.8760 * xyz.y + .0416 * xyz.z, b = .0556 * xyz.x - .2040 * xyz.y + 1.0570 * xyz.z;\n return cieUtils.adjustRgbInv({ r, g, b, a: xyz.a });\n },\n /**\n * Returns the contrast ratio between two colors.\n * @param rgb1 Color 1\n * @param rgb2 Color 2\n * @returns A numeric value between 1 and 21.\n */\n contrastRatio: (rgb1, rgb2) => {\n // https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n const l1 = cieUtils.relativeLuminance(rgb1) + .05, l2 = cieUtils.relativeLuminance(rgb2) + .05;\n return l1 > l2 ?\n l1 / l2\n :\n l2 / l1;\n }\n};\nfunction saturation(rgb, l) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const s = (l === 0 || l === 1) ? 0 : (max - min) / (1 - Math.abs(2 * l - 1));\n return s.clamp(0, 1);\n}\n/**\n * Preucil 'hexagon' algorithm.\n * @param rgb\n */\nfunction hueHexagon(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const deg = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI;\n return (deg + 360) % 360;\n}\n/**\n * Preucil 'circle' algorithm.\n * @param rgb\n */\nfunction hueCircle(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n if (max !== min) {\n if (max === r) {\n hue = (60 * ((g - b) / (max - min)) + 360) % 360;\n }\n else if (max === g) {\n hue = (60 * ((b - r) / (max - min)) + 120) % 360;\n }\n else {\n hue = (60 * ((r - g) / (max - min)) + 240) % 360;\n }\n }\n return hue.clamp(0, 360);\n}\nfunction hexify(v) {\n return v.toString(16).padStart(2, '0');\n //return Pacem.Strings.leftPad(v.toString(16), 2, '0');\n}\n/** Color parsing, conversion (RGB/HSL/CIE XYZ) and manipulation utilities. */\nexport class Colors {\n /** Minimum WCAG contrast ratio recommended for large-scale text/graphical objects. */\n static { this.WCAG_MINIMUM_CONTRAST = 3.0; }\n /** Minimum WCAG (AA) contrast ratio recommended for normal-sized text. */\n static { this.WCAG_NORMAL_TEXT_CONTRAST = 4.5; }\n /** Minimum WCAG (AAA) contrast ratio recommended for enhanced accessibility. */\n static { this.WCAG_SAFE_CONTRAST = 7.0; }\n static _clampRGB(rgb) {\n const clmp = (n) => Math.min(1.0, Math.max(0, n));\n if (rgb[3] == null) {\n rgb[3] = 1.0;\n }\n return { r: clmp(rgb[0]), g: clmp(rgb[1]), b: clmp(rgb[2]), a: Math.min(1, Math.max(0, rgb[3])) };\n }\n static _normalize(rgb) {\n return [rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, rgb[3]];\n }\n /**\n * Parses a CSS color string (`rgb()`, `rgba()`, `#rrggbb`, `#rgb`, `hsl()` or `hsla()`) into an {@link Rgba} value.\n * @param clr CSS color string.\n * @returns The parsed color, or `undefined` if the string does not match any supported format.\n */\n static parse(clr) {\n clr = (clr || '').toLowerCase();\n /* rgb(255,255,255) */\n if (RGB_PATTERN.test(clr)) {\n let rgbArr = RGB_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), 1]));\n }\n /* rgba(255,255,255,.5) */\n if (RGBA_PATTERN.test(clr)) {\n let rgbArr = RGBA_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), parseFloat(rgbArr[4])]));\n }\n /* #ffffff */\n if (HEX_PATTERN.test(clr)) {\n let hex = HEX_PATTERN.exec(clr)[0];\n return this._clampRGB(this._normalize([parseInt('0x' + hex.substr(1, 2)), parseInt('0x' + hex.substr(3, 2)), parseInt('0x' + hex.substr(5, 2)), 1]));\n }\n /* #fff */\n if (HEX_SHORT_PATTERN.test(clr)) {\n let hex = HEX_SHORT_PATTERN.exec(clr)[0];\n let r = hex.substr(1, 1), g = hex.substr(2, 1), b = hex.substr(3, 1);\n return this._clampRGB(this._normalize([parseInt('0x' + r + r), parseInt('0x' + g + g), parseInt('0x' + b + b), 1]));\n }\n /* hsl(0,60%,100%) */\n if (HSL_PATTERN.test(clr)) {\n let hslArr = HSL_PATTERN.exec(clr);\n const hsl = { h: parseFloat(hslArr[1]), s: parseFloat(hslArr[2]) * .01, l: parseFloat(hslArr[3]) * .01 };\n return this.rgb(hsl);\n }\n /* hsla(0,40%,50%,.5) */\n if (HSLA_PATTERN.test(clr)) {\n let hslaArr = HSLA_PATTERN.exec(clr);\n const hsla = { h: parseFloat(hslaArr[1]), s: parseFloat(hslaArr[2]) * .01, l: parseFloat(hslaArr[3]) * .01, a: parseFloat(hslaArr[4]) };\n return this.rgb(hsla);\n }\n }\n /**\n * Converts an {@link Rgba} color into its {@link Hsla} equivalent.\n * @param rgb Color to convert.\n * @returns The converted color.\n */\n static hsl(rgb) {\n const l = luminance(rgb), s = saturation(rgb, l), h = hueCircle(rgb);\n return { h, s, l, a: rgb.a };\n }\n static cieXYZ(clr) {\n if (isHsl(clr)) {\n clr = this.rgb(clr);\n }\n return cieUtils.rgbToCieXYZ(clr);\n }\n static rgb(clr) {\n if (isHsl(clr)) {\n // hsl\n const h = clr.h, s = clr.s, l = clr.l, h6 = h / 60.0;\n const C = (1 - Math.abs(2 * l - 1)) * s;\n const X = C * (1 - Math.abs(h6 % 2 - 1));\n const m = l - C / 2;\n const compose = (r, g, b) => this._clampRGB([r + m, g + m, b + m, clr.a]);\n if (h6 <= 1) {\n return compose(C, X, 0);\n }\n else if (h6 <= 2) {\n return compose(X, C, 0);\n }\n else if (h6 <= 3) {\n return compose(0, C, X);\n }\n else if (h6 <= 4) {\n return compose(0, X, C);\n }\n else if (h6 <= 5) {\n return compose(X, 0, C);\n }\n else if (h6 <= 6) {\n return compose(C, 0, X);\n }\n }\n else {\n // cie XYZ\n const rgb = cieUtils.cieXYZToRgb(clr);\n return this._clampRGB([rgb.r, rgb.g, rgb.b, rgb.a]);\n }\n }\n static stringify(clr, arg1 = 1) {\n if (isHsl(clr)) {\n arg1 ??= 1;\n clr.a ??= 1;\n const precision = typeof arg1 === 'number' ? arg1 : 1;\n return `hsla(${clr.h.roundoff(precision)},${(clr.s * 100).roundoff(precision)}%,${(clr.l * 100).roundoff(precision)}%,${clr.a.roundoff()})`;\n }\n else if (isRgb(clr)) {\n arg1 ??= true;\n clr.a ??= 1;\n const hex = typeof arg1 === 'boolean' ? arg1 : !!arg1, r = Math.round(clr.r * 255), g = Math.round(clr.g * 255), b = Math.round(clr.b * 255), a = clr.a.roundoff();\n if (a === 1) {\n if (hex) {\n return ('#' + hexify(r) + hexify(g) + hexify(b)).toUpperCase();\n }\n return `rgb(${r},${g},${b})`;\n }\n return `rgba(${r},${g},${b},${a})`;\n }\n return undefined;\n }\n /**\n * Contrast ratio betwen two colors (useful for accessibility assessments). Output range: 1 (no-contrast) to 21 (maximum contrast)\n */\n static contrastRatio(clr1, clr2) {\n if (isHsl(clr1)) {\n clr1 = this.rgb(clr1);\n }\n if (isHsl(clr2)) {\n clr2 = this.rgb(clr2);\n }\n return cieUtils.contrastRatio(clr1, clr2);\n }\n /**\n * Returns the relative luminance as of WCAG specs.\n */\n static luminance(clr) {\n if (isHsl(clr)) {\n clr = Colors.rgb(clr);\n }\n return cieUtils.relativeLuminance(clr);\n }\n static lighten(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const l = Math.min(1, Math.max(0, clr.l + amount));\n return Object.assign({}, clr, { l });\n }\n if (isRgb(clr)) {\n const hsl = this.lighten(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static darken(clr, amount = 0.1) {\n return this.lighten(clr, -amount);\n }\n static saturate(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const s = Math.min(1, Math.max(0, clr.s + amount));\n return Object.assign({}, clr, { s });\n }\n if (isRgb(clr)) {\n const hsl = this.saturate(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static desaturate(clr, amount = 0.1) {\n return this.saturate(clr, -amount);\n }\n static interpolate(clr1, clr2, weight1, weight2) {\n weight1 ??= .5;\n weight2 ??= weight1;\n const weight = (weight1 + weight2).roundoff();\n const ratio1 = (weight1 / weight).roundoff(), ratio2 = (weight2 / weight).roundoff();\n const rgb = isRgb(clr1), hsl = isHsl(clr1);\n const toCieXYZ = (c) => {\n if (isRgb(c) || isHsl(c)) {\n return Colors.cieXYZ(c);\n }\n return c;\n };\n clr1 = toCieXYZ(clr1);\n clr2 = toCieXYZ(clr2);\n const clr = {\n x: (clr1.x * ratio1 + clr2.x * ratio2).roundoff(),\n y: (clr1.y * ratio1 + clr2.y * ratio2).roundoff(),\n z: (clr1.z * ratio1 + clr2.z * ratio2).roundoff(),\n a: (clr1.a * ratio1 + clr2.a * ratio2).roundoff(),\n };\n if (rgb) {\n return Colors.rgb(clr);\n }\n if (hsl) {\n return Colors.hsl(Colors.rgb(clr));\n }\n return clr;\n }\n}\n//}\n", "import { NullChecker } from \"./null-checker\";\n// 1.7763568394002505e-15 -20.4551920341394 40 40\nconst FLOAT_PATTERN = /[-+]?([\\d]+(\\.[\\d]+(e-[\\d]+)?)?|[\\d]*(\\.[\\d]+(e-[\\d]+)?))/g;\n/**\n * Extracts all the floating point numbers found in a string (e.g. `\"10px 20px\"` => `[10, 20]`).\n * @param input String to parse.\n * @returns Array of the numbers found, in order of appearance.\n */\nexport function parseAsNumericalArray(input) {\n const arr = [];\n let reg = input.match(FLOAT_PATTERN);\n if (reg && reg.length > 0) {\n reg.forEach(i => arr.push(parseFloat(i)));\n }\n return arr;\n}\n/** Angle-related utilities. */\nexport class Angle {\n /**\n * Type-guards a value as a valid {@link Angle} object.\n * @param obj Value to check.\n */\n static isAngle(obj) {\n return typeof obj === 'object'\n && 'vertex' in obj && Point.isPoint(obj['vertex'])\n && 'start' in obj && Point.isPoint(obj['start'])\n && 'end' in obj && Point.isPoint(obj['end']);\n }\n /**\n * Returns the angle span in radians.\n * Clockwise angles are positive, counterclockwise angles are negative.\n */\n static value(angle) {\n if (NullChecker.isNullOrEmpty(angle) || !Angle.isAngle(angle)) {\n return Number.NaN;\n }\n const { vertex, start, end } = angle;\n return Angle.angleBetween(vertex, start, end);\n }\n /**\n * Returns the angle (in radians) given the angle vertex and two points belonging to the rays that combine to build the angle sides.\n * Clockwise angles are positive, counterclockwise angles are negative.\n * @param vertex Angle vertex\n * @param start Point belonging to the start side\n * @param end Point belonging to the end side\n * @returns Angle span in radians [-pi, pi]\n */\n static angleBetween(vertex, start, end) {\n const v1 = { x: start.x - vertex.x, y: start.y - vertex.y }, v2 = { x: end.x - vertex.x, y: end.y - vertex.y };\n const dot = v1.x * v2.x + v1.y * v2.y;\n const cross = v1.x * v2.y - v1.y * v2.x;\n // clockwise positive, ccw negative\n return -Math.atan2(cross, dot);\n }\n}\n;\n/** Size-related utilities. */\nexport class Size {\n /**\n * Parses a string containing exactly two numbers into a {@link Size}.\n * @param sz String to parse (e.g. `\"100 50\"`).\n * @returns The parsed size.\n * @throws If `sz` does not contain exactly two numbers.\n */\n static parse(sz) {\n let arr = parseAsNumericalArray(sz);\n if (arr && arr.length === 2) {\n return { width: arr[0], height: arr[1] };\n }\n throw new Error(`Cannot parse \"${sz}\" as a valid Size.`);\n }\n /**\n * Type-guards a value as a valid {@link Size} object.\n * @param obj Value to check.\n */\n static isSize(obj) {\n return typeof obj === 'object'\n && 'width' in obj && typeof obj['width'] === 'number'\n && 'height' in obj && typeof obj['height'] === 'number';\n }\n}\n/** Point-related utilities. */\nexport class Point {\n /**\n * Parses a string containing exactly two numbers into a {@link Point}.\n * @param pt String to parse (e.g. `\"10 20\"`).\n * @returns The parsed point.\n * @throws If `pt` does not contain exactly two numbers.\n */\n static parse(pt) {\n let arr = parseAsNumericalArray(pt);\n if (arr && arr.length === 2) {\n return { x: arr[0], y: arr[1] };\n }\n throw new Error(`Cannot parse \"${pt}\" as a valid Point.`);\n }\n /**\n * Type-guards a value as a valid {@link Point} object.\n * @param obj Value to check.\n */\n static isPoint(obj) {\n return typeof obj === 'object'\n && 'x' in obj && typeof obj['x'] === 'number'\n && 'y' in obj && typeof obj['y'] === 'number';\n }\n /**\n * Computes the distance between two points.\n * @param p1 Point 1\n * @param p2 Point 2\n */\n static distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n }\n /**\n * Subtracts a point p from another and returns the resulting vector.\n * @param p Point to subtract\n * @param from Point to be subtracted from\n */\n static subtract(p, from) {\n return { x: from.x - p.x, y: from.y - p.y };\n }\n /**\n * Adds a set of points together and returns the resulting vector.\n * @param points Points to add\n */\n static add(...points) {\n var point = { x: 0, y: 0 };\n for (var p of points) {\n point.x += p.x;\n point.y += p.y;\n }\n return point;\n }\n /**\n * Memberwise multiplication.\n * @param p Original Point object\n * @param f Factor\n * @returns New Point object.\n */\n static multiply(p, f) {\n return { x: p.x * f, y: p.y * f };\n }\n}\n//}\n", "/// <reference path=\"geom.ts\" />\n;\n/** 2D affine matrix ([a b; c d] linear part, [e f] translation) manipulation utilities. */\nexport class Matrix2D {\n /**\n * Returns whether the given matrix is the identity matrix.\n * @param m Matrix to check.\n */\n static isIdentity(m) {\n return m.a === 1 && m.d === 1 && m.b === 0 && m.f === 0 && m.c === 0 && m.e === 0;\n }\n /** Gets a fresh identity matrix. @readonly */\n static get identity() {\n return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n }\n /**\n * Returns a shallow copy of the given matrix.\n * @param m Matrix to copy.\n */\n static copy(m) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n static scale(m, sx, sy = sx) {\n return { a: m.a * sx, b: m.b, c: m.c, d: m.d * sy, e: m.e, f: m.f };\n }\n /**\n * Returns a copy of `m` translated by the given vector.\n * @param m Matrix to translate.\n * @param t Translation vector.\n */\n static translate(m, t) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + t.x, f: m.f + t.y };\n }\n /**\n * Returns a copy of `m` rotated (about the origin) by the given angle.\n * @param m Matrix to rotate.\n * @param rad Rotation angle, in radians.\n */\n static rotate(m, rad) {\n const cos = Math.cos(rad), sin = Math.sin(rad);\n return Matrix2D.multiply(m, { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 });\n }\n static multiply(m1, m2) {\n if (\"x\" in m1 && \"y\" in m1) {\n if (typeof m2 === 'number') {\n return { x: m1.x * m2, y: m1.y * m2 };\n }\n else {\n return { x: m1.x * m2.a + m1.y * m2.c + m2.e, y: m1.x * m2.b + m1.y * m2.d + m2.f };\n }\n }\n if (typeof m2 === 'number') {\n return {\n a: m1.a * m2, b: m1.b * m2, c: m1.c * m2, d: m1.d * m2, e: m1.e * m2, f: m1.f * m2\n };\n }\n return {\n a: m1.a * m2.a + m1.b * m2.c,\n b: m1.a * m2.b + m1.b * m2.d,\n c: m1.c * m2.a + m1.d * m2.c,\n d: m1.c * m2.b + m1.d * m2.d,\n e: m1.e * m2.a + m1.f * m2.c + m2.e,\n f: m1.e * m2.b + m1.f * m2.d + m2.f\n };\n }\n /**\n * Computes the determinant of the matrix's linear part.\n * @param m Matrix to compute the determinant of.\n */\n static det(m) {\n return m.a * m.d - m.c * m.b;\n }\n /**\n * Computes the inverse of the given matrix.\n * @param m Matrix to invert.\n * @returns The inverse matrix, or `null` if `m` is singular (determinant is zero).\n */\n static invert(m) {\n const det = this.det(m);\n if (det === 0) {\n // NaM(2D) ? \n return null;\n }\n const invdet = 1 / det;\n /*\n * 1. swap a, d\n * 2. swap c, b and change signs\n * 3. e := -e*d + f*c\n * 4. f := e*b - f*a\n * 5. divide everything by [det]\n */\n return this.multiply({\n a: m.d,\n b: -m.b,\n c: -m.c,\n d: m.a,\n e: -m.e * m.d + m.c * m.f,\n f: m.e * m.b - m.a * m.f\n }, invdet);\n }\n /**\n * Decomposes a matrix into its scale, rotation and translation components.\n * @param m Matrix to decompose.\n * @param transformOrigin Origin about which the rotation/scale are considered to be applied (defaults to `{x:0, y:0}`).\n * @returns The decomposed `scaleX`, `scaleY`, `rotation` (radians) and `translation`.\n */\n static toComponents(m, transformOrigin = { x: 0, y: 0 }) {\n const scaleX = Math.sqrt(m.a * m.a + m.c * m.c);\n const scaleY = Math.sqrt(m.b * m.b + m.d * m.d);\n const cos = scaleX != 0 ? m.a / scaleX : 0;\n const sin = scaleX != 0 ? m.c / scaleX : 0;\n const rotation = Math.atan2(sin, cos);\n const { x: px, y: py } = transformOrigin;\n const translation = {\n x: m.e - px * (scaleX * cos - 1) + py * scaleX * sin,\n y: m.f - py * (scaleY * cos - 1) - px * scaleY * sin,\n };\n return {\n scaleX, scaleY, rotation,\n translation\n };\n }\n /**\n * Returns the matrix that transforms the triangle defined by the points p0, p1, p2 into the triangle defined by the points q0, q1, q2.\n * @param param0 Triangle defined by the points p0, p1, p2 (before transformation).\n * @param param1 Triangle defined by the points q0, q1, q2 (after transformation).\n * @returns Transformation matrix.\n */\n static fromTransform([p0, p1, p2], [q0, q1, q2]) {\n const det = p0.x * (p1.y - p2.y) -\n p0.y * (p1.x - p2.x) +\n (p1.x * p2.y - p2.x * p1.y);\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Points are collinear; matrix is singular and cannot be solved.\");\n }\n const idet = 1 / det;\n // Matrix inversion of the 3x3 augmented source points\n // then multiplied by the destination points to get rows 1 and 2\n return {\n a: idet * (q0.x * (p1.y - p2.y) + q1.x * (p2.y - p0.y) + q2.x * (p0.y - p1.y)),\n b: idet * (q0.y * (p1.y - p2.y) + q1.y * (p2.y - p0.y) + q2.y * (p0.y - p1.y)),\n c: idet * (q0.x * (p2.x - p1.x) + q1.x * (p0.x - p2.x) + q2.x * (p1.x - p0.x)),\n d: idet * (q0.y * (p2.x - p1.x) + q1.y * (p0.x - p2.x) + q2.y * (p1.x - p0.x)),\n e: idet * (q0.x * (p1.x * p2.y - p2.x * p1.y) +\n q1.x * (p2.x * p0.y - p0.x * p2.y) +\n q2.x * (p0.x * p1.y - p1.x * p0.y)),\n f: idet * (q0.y * (p1.x * p2.y - p2.x * p1.y) +\n q1.y * (p2.x * p0.y - p0.x * p2.y) +\n q2.y * (p0.x * p1.y - p1.x * p0.y))\n };\n }\n /**\n * Returns whether two matrices are equal to each other, within a certain precision (number of decimal digits).\n * @param m1\n * @param m2\n * @param precision\n * @returns\n */\n static areClose(m1, m2, precision = 12) {\n return m1.a.isCloseTo(m2.a, precision)\n && m1.b.isCloseTo(m2.b, precision)\n && m1.c.isCloseTo(m2.c, precision)\n && m1.d.isCloseTo(m2.d, precision)\n && m1.e.isCloseTo(m2.e, precision)\n && m1.f.isCloseTo(m2.f, precision);\n }\n}\n// }\n", "import { Matrix2D } from './matrix2d';\nimport { parseAsNumericalArray, Point, Size } from \"./geom\";\n/** Rectangle-related utilities (parsing, transform computation, intersection, bounding box). */\nexport class Rect {\n /**\n * Parses a string containing exactly four numbers into a {@link Rect}.\n * @param rect String to parse (e.g. `\"0 0 100 50\"`, in `x y width height` order).\n * @returns The parsed rect.\n * @throws If `rect` does not contain exactly four numbers.\n */\n static parse(rect) {\n let arr = parseAsNumericalArray(rect);\n if (arr && arr.length === 4) {\n return { x: arr[0], y: arr[1], width: arr[2], height: arr[3] };\n }\n throw new Error(`Cannot parse \"${rect}\" as a valid Rect.`);\n }\n /**\n * Type-guards a value as a valid {@link Rect} object.\n * @param obj Value to check.\n */\n static isRect(obj) {\n return Point.isPoint(obj) && Size.isSize(obj);\n }\n static _stretch(from, to) {\n return { a: to.width / from.width, b: 0, c: 0, d: to.height / from.height, e: to.x - from.x, f: to.y - from.y };\n }\n static _contain(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio >= toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _cover(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio < toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _align(from, to, align, valign) {\n let x = 0, y = 0;\n switch (align) {\n case 'left':\n x = to.x - from.x;\n break;\n case 'right':\n x = (to.x + to.width - from.width) - from.x;\n break;\n default:\n x = (to.x + to.width * .5 - from.width * .5) - from.x;\n break;\n }\n switch (valign) {\n case 'top':\n y = to.y - from.y;\n break;\n case 'bottom':\n y = (to.y + to.height - from.height) - from.y;\n break;\n default:\n y = (to.y + to.height * .5 - from.height * .5) - from.y;\n break;\n }\n return { x, y };\n }\n /**\n * Computes the 2D matrix that transforms one rect into another.\n * @param a Rect from\n * @param b Rect to\n * @param mode Transformation mode\n * @param align Horizontal alignment\n * @param valign Vertical alignment\n */\n static findTransform(a, b, mode = 'stretch', align = 'center', valign = 'middle') {\n switch (mode) {\n case 'contain':\n return this._contain(a, b, align, valign);\n case 'cover':\n return this._cover(a, b, align, valign);\n default:\n return this._stretch(a, b);\n }\n }\n /**\n * Computes the intersection rect among a set of provided rects.\n * @param rects Rects to intersect\n */\n static intersect(...rects) {\n const empty = { x: 0, y: 0, height: 0, width: 0 }, arr = Array.from(rects || []);\n if (arr.length <= 0) {\n return empty;\n }\n var rect = arr[0];\n for (var i = 1; i < arr.length; i++) {\n const r = arr[i];\n const x = Math.max(r.x, rect.x), y = Math.max(r.y, rect.y), xw = Math.min(r.x + r.width, rect.x + rect.width), xh = Math.min(r.y + r.height, rect.y + rect.height), w = xw - x, h = xh - y;\n if (w < 0 || h <= 0) {\n // no intersection\n return empty;\n }\n rect = { x: x, y: y, width: w, height: h };\n }\n return rect;\n }\n static expand(rect, ...args) {\n const arr = Array.from(args || []);\n let x0 = rect.x, y0 = rect.y, x1 = x0, y1 = y0;\n if (Rect.isRect(rect)) {\n x1 += rect.width;\n y1 += rect.height;\n }\n for (let p of arr) {\n x0 = Math.min(p.x, x0);\n y0 = Math.min(p.y, y0);\n x1 = Math.max(p.x, x1);\n y1 = Math.max(p.y, y1);\n }\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n }\n}\n//}\n", "// namespace Pacem {\n/** Grants undo/redo functionalities for given state. */\nexport class HistoryService {\n /**\n * @param state Initial state.\n * @param maxlength Maximum number of stored states (undo queue + redo stack); unbounded when omitted.\n */\n constructor(state, maxlength) {\n this.#current = state;\n this.#maxlength = maxlength;\n }\n // it's a queue\n #backwards = [];\n // it's a stack\n #forwards = [];\n // max number of items (queue + stack)\n #maxlength;\n #current;\n /**\n * Gets the current state.\n */\n get current() {\n return this.#current;\n }\n /** Gets whether there is a previous state to revert to. @readonly */\n get canUndo() {\n return this.#backwards.length > 0;\n }\n /** Gets whether there is a subsequent state to reapply. @readonly */\n get canRedo() {\n return this.#forwards.length > 0;\n }\n /** Sets the maximum number of stored states, queue + stack.\n */\n set maxlength(v) {\n this.#maxlength = v;\n }\n /** Reverts to the previous state, if any (see {@link canUndo}), moving the current state onto the redo stack. */\n undo() {\n if (this.canUndo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n fore.unshift(current);\n this.#current = back.pop();\n }\n }\n /** Reapplies the next state, if any (see {@link canRedo}), moving the current state onto the undo queue. */\n redo() {\n if (this.canRedo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n back.push(current);\n this.#current = fore.shift();\n }\n }\n /**\n * Pushes a new current state, clearing the redo stack and enqueuing the previous current state for undo.\n * Trims the undo queue to `maxlength`, if set.\n * @param state New current state.\n */\n push(state) {\n this.#forwards.splice(0);\n this.#backwards.push(this.#current);\n this.#current = state;\n const max = this.#maxlength, queue = this.#backwards;\n if (max > 0 && queue.length > max) {\n queue.splice(0, queue.length - max);\n }\n }\n /** Clears both the undo queue and the redo stack, leaving the current state untouched. */\n reset() {\n this.#forwards.splice(0);\n this.#backwards.splice(0);\n }\n}\n// }\n", "// namespace Pacem {\nimport { Rect } from \"./rect\";\nconst DefaultImagingResizeOptions = {\n mode: 'stretch',\n align: 'center',\n valign: 'middle',\n quality: 1,\n type: 'image/jpeg'\n};\n/** Image loading and resizing utilities, based on `OffscreenCanvas`. */\nexport class Imaging {\n /**\n * Fetches an image from a URL as a `Blob`.\n * @param url URL of the image to load.\n * @returns A promise resolving with the loaded `Blob`, or `null` if the fetch response was not OK.\n */\n static async loadImage(url) {\n const response = await fetch(url);\n if (!response.ok) {\n return null;\n }\n const blob = await response.blob();\n return blob;\n }\n static async resizeImage(img, width, height, options) {\n if (width <= 0 || height <= 0 || isNaN(width) || isNaN(height)) {\n throw new Error('Invalid target size');\n }\n const el = await Imaging._toDrawable(img);\n const origWidth = el.width || width, origHeight = el.height || height;\n const cnv = new OffscreenCanvas(origWidth, origHeight);\n const ctx = cnv.getContext('2d');\n ctx.imageSmoothingEnabled =\n ctx['mozImageSmoothingEnabled'] =\n ctx['oImageSmoothingEnabled'] =\n ctx['webkitImageSmoothingEnabled'] =\n true;\n const { quality, type, mode, align, valign, background } = Object.assign({}, DefaultImagingResizeOptions, options ?? {});\n const from = { width: origWidth, height: origHeight, x: 0, y: 0 }, to = { x: 0, y: 0, width, height };\n const transformMatrix = Rect.findTransform(from, to, mode, align, valign);\n cnv.width = width;\n cnv.height = height;\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, cnv.width, cnv.height);\n }\n ctx.setTransform(transformMatrix);\n ctx.drawImage(el, 0, 0);\n const retval = await cnv.convertToBlob({ quality, type });\n return retval;\n }\n /** Turns a URL or a `Blob` into a drawable source, while passing an already drawable source through untouched. */\n static async _toDrawable(img) {\n if (typeof img === 'string') {\n img = await Imaging.loadImage(img);\n }\n if (!(img instanceof Blob)) {\n return img;\n }\n return await self.createImageBitmap(img);\n }\n}\n// }\n", "// namespace Pacem {\n/** Unique key/id generation utilities. */\nexport class Keys {\n static #seed;\n /**\n * Generates a process-wide monotonically increasing numeric id, seeded from the current timestamp.\n * @returns A new unique numeric id.\n */\n static uniqueId() {\n let seed = Keys.#seed || Date.now();\n return Keys.#seed = ++seed;\n }\n /**\n * Generates a process-wide unique id, base-62 encoded.\n * @returns A new unique string code.\n */\n static uniqueCode() {\n const newid = Keys.uniqueId();\n return newid.toBase62();\n }\n /**\n * Generates a random base-62 string of at least the given length.\n * @param length Minimum length of the generated string.\n * @returns A random string.\n */\n static randomString(length) {\n let retval = '';\n do {\n retval += (Math.random() * 62).toBase62();\n } while (retval.length < length);\n return retval;\n }\n}\n// }\n", "// namespace Pacem {\n/** Numeric utilities. */\nexport class Numbers {\n /**\n * Rounds a number to the nearest multiple of `step`.\n * @param x Value to round.\n * @param step Rounding step/increment (defaults to 1).\n * @returns The rounded value.\n */\n static round(x, step = 1.0) {\n return Math.round(x / step) * step;\n }\n /**\n * Computes the logarithm of `x` in an arbitrary `base`.\n * @param x Value to compute the logarithm of.\n * @param base Logarithm base.\n */\n static log(x, base) {\n return Math.log10(x) / Math.log10(base);\n }\n /**\n * Converts a number (or numeric string) from one base to another.\n * @param v Value to convert, expressed in base `from`.\n * @param from Source base (2-36).\n * @param to Target base (2-36).\n * @returns The value re-expressed in base `to`, as a string; `\"NaN\"` if `v` is not a valid number in base `from`.\n */\n static rebase(v, from, to) {\n const vStr = v.toString();\n const firstPass = parseInt(vStr, from);\n if (!vStr.endsWith(firstPass.toString(from))) {\n return Number.NaN.toString();\n }\n return parseInt(v.toString(), from).toString(to);\n }\n}\n//}\n", "// namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/**\n * Computes the Longest Common Subsequence (LCS) table for two arrays of strings.\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @returns The DP table for LCS lengths.\n */\nfunction lcs(aTokens, bTokens) {\n const m = aTokens.length;\n const n = bTokens.length;\n // Initialize DP table with zeros\n const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n // Fill DP table\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (aTokens[i - 1] === bTokens[j - 1]) {\n // Tokens match, increment LCS length\n dp[i][j] = dp[i - 1][j - 1] + 1;\n }\n else {\n // Tokens don't match, take max length from previous states\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n return dp;\n}\n/**\n * Internal diff implementation using backtracking on the LCS DP table.\n * Works on token arrays (characters, words, lines).\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @param dp The precomputed LCS DP table.\n * @param joiner The string to use when joining tokens of the same type (e.g., \"\" for chars, \"\\n\" for lines).\n * For word diffing, joiner is effectively \"\" because whitespace is part of the tokens.\n * @returns An array of DiffTokens representing the differences.\n */\nfunction diffInternal(aTokens, bTokens, dp, joiner = '') {\n const m = aTokens.length;\n const n = bTokens.length;\n const result = [];\n let i = m, j = n;\n let currentToken = null;\n const finalizeToken = () => {\n if (currentToken) {\n result.push(currentToken);\n currentToken = null;\n }\n };\n // Backtrack through the DP table\n while (i > 0 || j > 0) { // Continue until both sequences are fully processed\n var currentType = null;\n let currentValue = null;\n if (i > 0 && j > 0 && aTokens[i - 1] === bTokens[j - 1]) {\n // Common token\n currentType = '=';\n currentValue = aTokens[i - 1];\n i--;\n j--;\n }\n else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Token added in b\n currentType = '+';\n currentValue = bTokens[j - 1];\n j--;\n }\n else if (i > 0 && (j === 0 || dp[i - 1][j] > dp[i][j - 1])) {\n // Token removed from a\n currentType = '-';\n currentValue = aTokens[i - 1];\n i--;\n }\n if (currentType && currentValue !== null) {\n if (currentToken && currentToken.type === currentType) {\n // Prepend the value to the existing token\n currentToken.value = currentValue + (currentToken.value ? joiner : '') + currentToken.value;\n }\n else {\n // Finalize the previous token (if different type) and start a new one\n finalizeToken();\n currentToken = { type: currentType, value: currentValue };\n }\n }\n else {\n // Should not happen in standard LCS backtracking, but finalize just in case\n finalizeToken();\n }\n }\n finalizeToken(); // Add the last accumulated token\n return result.reverse(); // Reverse to get the correct order\n}\n/**\n* Performs character-level diffing.\n* @param a The first string.\n* @param b The second string.\n* @returns An array of DiffTokens.\n*/\nfunction diffChars(a, b) {\n const aTokens = a.split(''); // Split into characters\n const bTokens = b.split(''); // Split into characters\n const dp = lcs(aTokens, bTokens);\n // No joiner needed as characters are concatenated directly\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs word-level diffing, preserving whitespace and line breaks.\n * It tokenizes based on sequences of non-whitespace (\\S+) or whitespace (\\s+).\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens.\n */\nfunction diffWords(a, b) {\n // Tokenize into words (\\S+) and whitespace/newlines (\\s+)\n // This preserves the original spacing and line breaks.\n const wordRegex = /(\\S+|\\s+)/g;\n const aTokens = a.match(wordRegex) || [];\n const bTokens = b.match(wordRegex) || [];\n const dp = lcs(aTokens, bTokens);\n // No joiner needed; whitespace tokens handle spacing.\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs line-level diffing.\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens where each token's value can contain multiple lines.\n */\nfunction diffLines(a, b) {\n // Split by newline characters, keeping the EOL character concept separate\n // The result of split does not contain the separators themselves.\n const lineRegex = /\\r?\\n/;\n const aTokens = a.split(lineRegex);\n const bTokens = b.split(lineRegex);\n // Handle potential empty string added by split if text ends with a newline\n // (This behavior is often desired, representing an empty line after the last newline)\n // Example: \"a\\nb\\n\".split(/\\n/) -> [\"a\", \"b\", \"\"]\n const dp = lcs(aTokens, bTokens);\n // Join consecutive lines of the same type with newline characters\n return diffInternal(aTokens, bTokens, dp, '\\n');\n}\n//#endregion\n/** String manipulation utilities. */\nexport class Strings {\n /** @deprecated Use String.prototype.padStart() instead. */\n static leftPad(v, targetLength, padChar) {\n let retval = v.toString();\n return retval.padStart(targetLength, padChar);\n //while (retval.length < targetLength)\n // retval = padChar + retval;\n //return retval;\n }\n /**\n * Formats a template string, replacing `{0}`, `{1}`, ... placeholders with the corresponding arguments.\n * Doubled braces (`{{`/`}}`) escape a placeholder.\n * @param template Template string containing `{n}` placeholders.\n * @param args Values to substitute into the placeholders, by index.\n * @returns The formatted string.\n * @throws If the template references an argument index that was not supplied.\n */\n static format(template, ...args) {\n const array = Array.from(args);\n let retval = template;\n for (let j = 0; j < array.length; j++) {\n const regex = new RegExp('(^|[^\\\\{])\\\\{' + j + '\\\\}($|[^\\\\}])', 'g');\n retval = retval.replaceAll(regex, (match, ...args0) => {\n return match.replace('{' + j + '}', array[j]);\n });\n }\n const check = /(^|[^\\{}])\\{(\\d+)\\}($|[^\\}])/.exec(retval);\n if (!NullChecker.isNullOrEmpty(check)) {\n throw new Error(`Missing argument at index ${check[2]}.`);\n }\n return retval;\n }\n /**\n * Computes a diff between two strings, using the Longest Common Subsequence algorithm.\n * @param a First (original) string.\n * @param b Second (modified) string.\n * @param mode Diffing granularity: `'char'` (default), `'word'` or `'line'`.\n * @returns Array of {@link DiffToken}s describing unchanged, removed and added chunks.\n */\n static diff(a, b, mode = 'char') {\n switch (mode) {\n case 'line':\n return diffLines(a, b);\n case 'word':\n return diffWords(a, b);\n default:\n return diffChars(a, b);\n }\n }\n /**\n * Computes the cryptographic hash of a string using the SubtleCrypto API.\n * @param input String to hash.\n * @param algo Hash algorithm to use (defaults to `SHA-256`).\n * @returns A promise resolving with the hash, hex-encoded.\n */\n static async hash(input, algo = 'SHA-256') {\n const hashBuffer = await crypto.subtle.digest(algo, new TextEncoder().encode(input));\n return Array.from(new Uint8Array(hashBuffer))\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n// }\n", "import * as Markdown from './index-compile-markdown';\nexport { Markdown };\nexport * from './compile/parser';\nexport * from './compile/syntax/types';\nexport * from './compile/syntax/registry';\nexport * from './compile/syntax/scanner';\nexport * from './compile/syntax/highlight';\nexport * from './compile/syntax/builtins';\n", "export * from './compile/markdown/parser';\n", "//namespace Pacem.Compile {\nclass LexerClass {\n tokenize(input, grammar) {\n const tokens = [];\n while (input) {\n const start = input.length;\n for (let rule of grammar) {\n const newTokens = rule.exec(input, /* arguments that ease recursion when needed */ this), length = newTokens?.length;\n if (length > 0) {\n Array.prototype.push.apply(tokens, newTokens);\n const last = newTokens[length - 1];\n input = input.substr((last.index || 0) + last.raw.length);\n break;\n }\n }\n if (input.length >= start) {\n // break infinite loop\n throw new Error(`Cannot parse\\n\"${input}\"\\n using the provided grammar.`);\n }\n }\n return tokens;\n }\n}\n/** Generic tokenize-then-render text parser: lexes input against a grammar, then renders the resulting token tree. */\nexport class Parser {\n /**\n * @param _lexer Lexer implementation to use (defaults to a built-in greedy, rule-ordered lexer).\n */\n constructor(_lexer = new LexerClass()) {\n this._lexer = _lexer;\n }\n /**\n * Tokenizes `input` against `grammar` and renders the resulting token tree.\n * @param input String to parse.\n * @param grammar Ordered list of rules describing the grammar.\n * @param renderer Renderer used to turn the token tree into the output string.\n * @returns The rendered output.\n */\n parse(input, grammar, renderer) {\n const tokens = this._lexer.tokenize(input, grammar);\n return renderer.render(tokens);\n }\n}\n//}\n", "/** Token types shared by the built-in vocabularies (vocabularies may add their own). */\nexport var SyntaxTokenType;\n(function (SyntaxTokenType) {\n SyntaxTokenType[\"Text\"] = \"text\";\n SyntaxTokenType[\"Space\"] = \"space\";\n SyntaxTokenType[\"Newline\"] = \"newline\";\n SyntaxTokenType[\"Comment\"] = \"comment\";\n SyntaxTokenType[\"DocComment\"] = \"doc-comment\";\n SyntaxTokenType[\"Keyword\"] = \"keyword\";\n SyntaxTokenType[\"Identifier\"] = \"identifier\";\n SyntaxTokenType[\"String\"] = \"string\";\n SyntaxTokenType[\"Regex\"] = \"regex\";\n SyntaxTokenType[\"Number\"] = \"number\";\n SyntaxTokenType[\"Bracket\"] = \"bracket\";\n SyntaxTokenType[\"Punctuation\"] = \"punctuation\";\n SyntaxTokenType[\"Operator\"] = \"operator\";\n SyntaxTokenType[\"Preprocessor\"] = \"preprocessor\";\n SyntaxTokenType[\"Tag\"] = \"tag\";\n SyntaxTokenType[\"TagName\"] = \"tagname\";\n SyntaxTokenType[\"Attribute\"] = \"attribute\";\n SyntaxTokenType[\"Entity\"] = \"entity\";\n})(SyntaxTokenType || (SyntaxTokenType = {}));\n", "//namespace Pacem.Compile {\nconst registry = new Map();\nfunction normalize(name) {\n return (name ?? '').trim().toLowerCase();\n}\n/**\n * Registry of the {@link Syntax} vocabularies known to the {@link Scanner}, by (case-insensitive) name and aliases.\n * The built-in vocabularies (see {@link SyntaxName}) are registered upfront; more can be\n * registered at runtime, e.g. after fetching them as JSON.\n */\nexport class Syntaxes {\n /**\n * Registers (or replaces) a syntax under its name and aliases.\n * @param syntax The vocabulary to register.\n */\n static register(syntax) {\n if (syntax == null) {\n return;\n }\n const names = [syntax.name].concat(syntax.aliases ?? []);\n for (let name of names) {\n const key = normalize(name);\n registry.set(key, syntax);\n }\n }\n /**\n * Gets a registered syntax by name or alias.\n * @param nameOrAlias Case-insensitive name or alias (e.g. `'ts'`).\n * @returns The syntax, or `null` when unknown.\n */\n static get(nameOrAlias) {\n const key = normalize(nameOrAlias);\n return registry.get(key) ?? null;\n }\n /** Names (and aliases) of every registered syntax. */\n static names() {\n const keys = registry.keys();\n return Array.from(keys);\n }\n}\n", "import { SyntaxTokenType } from './types';\nimport { Syntaxes } from './registry';\n//namespace Pacem.Compile {\nconst DEFAULT_START = 'root';\nconst DEFAULT_KEYWORD_SOURCES = [SyntaxTokenType.Identifier];\nconst DEFAULT_INSIGNIFICANT = [SyntaxTokenType.Space, SyntaxTokenType.Newline, SyntaxTokenType.Comment, SyntaxTokenType.DocComment];\n/** Consecutive zero-length transitions tolerated before a rule gets skipped (guards against push/pop loops). */\nconst MAX_EMPTY_TRANSITIONS = 64;\n/** Base-syntax chain length tolerated before giving up (guards against `extends` cycles). */\nconst MAX_EXTENDS_DEPTH = 16;\nfunction isCombined(item) {\n return item.combined != null;\n}\nconst compiledCache = new WeakMap();\nfunction isIncludeRule(rule) {\n return 'include' in rule;\n}\nfunction toSet(values) {\n if (values == null || values.length === 0) {\n return null;\n }\n return new Set(values);\n}\nfunction uniqueFlags(flags) {\n const chars = flags.split('');\n const unique = new Set(chars);\n const array = Array.from(unique);\n return array.join('');\n}\nfunction mergeStates(own, base) {\n const merged = {};\n for (let name in base) {\n merged[name] = base[name].slice();\n }\n for (let name in own) {\n const baseRules = merged[name] ?? [];\n merged[name] = own[name].concat(baseRules);\n }\n return merged;\n}\nfunction mergeKeywords(own, base) {\n const merged = {};\n for (let type in base) {\n merged[type] = base[type].slice();\n }\n for (let type in own) {\n const baseWords = merged[type] ?? [];\n merged[type] = baseWords.concat(own[type]);\n }\n return merged;\n}\n/** Resolves the `extends` chain of `syntax` (own rules first, then the base ones). */\nfunction mergeSyntax(syntax, depth = 0) {\n const lexical = syntax.lexical ?? { states: {} };\n const own = {\n start: lexical.start,\n states: lexical.states ?? {},\n keywords: lexical.keywords ?? {},\n keywordSources: lexical.keywordSources,\n keywordExceptAfter: lexical.keywordExceptAfter,\n insignificant: lexical.insignificant\n };\n const baseSyntax = syntax.extends ? Syntaxes.get(syntax.extends) : null;\n if (baseSyntax == null || baseSyntax === syntax || depth >= MAX_EXTENDS_DEPTH) {\n return own;\n }\n const base = mergeSyntax(baseSyntax, depth + 1);\n return {\n start: own.start ?? base.start,\n states: mergeStates(own.states, base.states),\n keywords: mergeKeywords(own.keywords, base.keywords),\n keywordSources: own.keywordSources ?? base.keywordSources,\n keywordExceptAfter: own.keywordExceptAfter ?? base.keywordExceptAfter,\n insignificant: own.insignificant ?? base.insignificant\n };\n}\n/** Flattens `include` rules of a state (recursively, ignoring cycles). */\nfunction expandRules(states, stateName, visiting) {\n const rules = states[stateName] ?? [];\n if (visiting.has(stateName)) {\n return [];\n }\n visiting.add(stateName);\n const expanded = [];\n for (let rule of rules) {\n if (!isIncludeRule(rule)) {\n expanded.push(rule);\n continue;\n }\n const included = expandRules(states, rule.include, visiting);\n Array.prototype.push.apply(expanded, included);\n }\n visiting.delete(stateName);\n return expanded;\n}\nfunction compileCondition(condition) {\n if (condition == null) {\n return null;\n }\n return {\n previousTypes: toSet(condition.previousTypes),\n previousNotTypes: toSet(condition.previousNotTypes),\n previousTexts: toSet(condition.previousTexts),\n previousNotTexts: toSet(condition.previousNotTexts)\n };\n}\nfunction compileRule(rule) {\n const groupTypes = Array.isArray(rule.type) ? rule.type : null;\n const type = Array.isArray(rule.type) ? rule.type[0] : rule.type;\n // sticky and indices flags are the engine's business\n const userFlags = (rule.flags ?? '').replace(/[yd]/g, '');\n const ownFlags = uniqueFlags(userFlags);\n // the `d` flag yields the capture group offsets, needed to split a match into per-group tokens\n const flags = ownFlags + 'y' + (groupTypes ? 'd' : '');\n const regex = new RegExp(rule.match, flags);\n const until = rule.until ? new RegExp(rule.until, 'y') : null;\n const pop = rule.pop === true ? 1 : (typeof rule.pop === 'number' ? rule.pop : 0);\n const when = compileCondition(rule.when);\n return {\n regex, type, groupTypes, when, pop, until,\n source: rule.match,\n flags: ownFlags,\n next: rule.next ?? null,\n push: rule.push ?? null,\n embed: rule.embed ?? null,\n hasTransition: pop > 0 || !!rule.next || !!rule.push || !!rule.embed\n };\n}\nfunction compileKeywords(keywords) {\n const map = new Map();\n for (let type in keywords) {\n for (let word of keywords[type]) {\n map.set(word, type);\n }\n }\n return map;\n}\n/** Backreferences and named groups would break once renumbered/duplicated inside an alternation. */\nconst UNMERGEABLE_SOURCE = /\\\\[1-9]|\\\\k<|\\(\\?<(?![=!])/;\nfunction countGroups(source, flags) {\n const probe = new RegExp(source + '|', flags);\n const match = probe.exec('');\n return match.length - 1;\n}\nfunction canMatchEmpty(source, flags) {\n const probe = new RegExp('^(?:' + source + ')$', flags);\n return probe.test('');\n}\n/** Whether a rule can be merged into a {@link CombinedSegment}. */\nfunction isMergeable(rule) {\n if (rule.when != null || UNMERGEABLE_SOURCE.test(rule.source)) {\n return false;\n }\n return !canMatchEmpty(rule.source, rule.flags);\n}\nfunction combine(rules) {\n if (rules.length === 1) {\n return { rule: rules[0], combined: null };\n }\n const groupIndices = [];\n let groupIndex = 1;\n for (let rule of rules) {\n groupIndices.push(groupIndex);\n const ownGroups = countGroups(rule.source, rule.flags);\n groupIndex += 1 + ownGroups;\n }\n const alternatives = rules.map(r => '(' + r.source + ')');\n const source = alternatives.join('|');\n const combined = new RegExp(source, rules[0].flags + 'y');\n return { rule: null, combined, rules, groupIndices };\n}\n/** Groups consecutive mergeable rules (sharing the same flags) into combined segments, keeping their order. */\nfunction segment(rules) {\n const segments = [];\n let pending = [];\n const flush = () => {\n if (pending.length > 0) {\n const combinedSegment = combine(pending);\n segments.push(combinedSegment);\n }\n pending = [];\n };\n for (let rule of rules) {\n if (!isMergeable(rule)) {\n flush();\n segments.push({ rule, combined: null });\n continue;\n }\n if (pending.length > 0 && pending[0].flags !== rule.flags) {\n flush();\n }\n pending.push(rule);\n }\n flush();\n return segments;\n}\nfunction compileSyntax(syntax) {\n const cached = compiledCache.get(syntax);\n if (cached != null) {\n return cached;\n }\n const merged = mergeSyntax(syntax);\n const states = new Map();\n for (let name in merged.states) {\n const visiting = new Set();\n const rules = expandRules(merged.states, name, visiting);\n const compiledRules = rules.map(compileRule);\n const segments = segment(compiledRules);\n states.set(name, segments);\n }\n const compiled = {\n name: syntax.name,\n start: merged.start ?? DEFAULT_START,\n states,\n keywords: compileKeywords(merged.keywords),\n keywordSources: new Set(merged.keywordSources ?? DEFAULT_KEYWORD_SOURCES),\n keywordExceptAfter: new Set(merged.keywordExceptAfter ?? []),\n insignificant: new Set(merged.insignificant ?? DEFAULT_INSIGNIFICANT)\n };\n compiledCache.set(syntax, compiled);\n return compiled;\n}\nfunction compileByName(name) {\n const syntax = Syntaxes.get(name);\n if (syntax == null) {\n return null;\n }\n return compileSyntax(syntax);\n}\nfunction meets(condition, previous) {\n const type = previous?.type ?? null, text = previous?.raw ?? null;\n if (condition.previousTypes != null && !condition.previousTypes.has(type)) {\n return false;\n }\n if (condition.previousNotTypes != null && condition.previousNotTypes.has(type)) {\n return false;\n }\n if (condition.previousTexts != null && !condition.previousTexts.has(text)) {\n return false;\n }\n return condition.previousNotTexts == null || !condition.previousNotTexts.has(text);\n}\n/** A single tokenization pass: holds the cursor, the state stack and the produced tokens. */\nclass ScanRun {\n constructor(_source, root) {\n this._source = _source;\n this._tokens = [];\n /** Current scanning position. */\n this._position = 0;\n /** End of the already emitted tokens (characters between it and `_position` are pending unrecognized text). */\n this._emitted = 0;\n this._line = 1;\n this._column = 1;\n this._previous = null;\n this._emptyTransitions = 0;\n this._stack = [{ syntax: root, state: root.start, until: null }];\n }\n run() {\n const length = this._source.length;\n while (this._position < length) {\n this._step();\n }\n this._flushText();\n return this._tokens;\n }\n get _top() {\n const stack = this._stack;\n return stack[stack.length - 1];\n }\n _step() {\n const frame = this._top;\n if (this._popOnUntil(frame)) {\n return;\n }\n const found = this._findRule(frame);\n if (found == null) {\n // unrecognized character: accumulates into a `text` token\n this._position++;\n return;\n }\n this._flushText();\n this._emitMatch(found, frame.syntax);\n this._transition(found.rule, frame.syntax);\n const length = found.match[0].length;\n this._position += length;\n if (length > 0) {\n this._emptyTransitions = 0;\n }\n }\n /** Pops an embedded syntax as soon as its `until` pattern matches (without consuming input). */\n _popOnUntil(frame) {\n const until = frame.until;\n if (until == null || this._stack.length <= 1) {\n return false;\n }\n until.lastIndex = this._position;\n if (!until.test(this._source)) {\n return false;\n }\n this._flushText();\n this._stack.pop();\n return true;\n }\n _findRule(frame) {\n const segments = frame.syntax.states.get(frame.state) ?? [];\n for (let item of segments) {\n const found = isCombined(item) ? this._tryCombined(item) : this._trySingle(item.rule);\n if (found != null) {\n return found;\n }\n }\n return null;\n }\n _trySingle(rule) {\n const match = this._tryRule(rule);\n if (match == null) {\n return null;\n }\n return { rule, match };\n }\n /** Finds which merged rule matched (the first defined wrapping group), then re-runs it alone for its own groups. */\n _tryCombined(item) {\n const combined = item.combined;\n combined.lastIndex = this._position;\n const match = combined.exec(this._source);\n if (match == null) {\n return null;\n }\n const indices = item.groupIndices;\n for (let k = 0; k < indices.length; k++) {\n if (match[indices[k]] === undefined) {\n continue;\n }\n const rule = item.rules[k];\n return this._trySingle(rule);\n }\n return null;\n }\n _tryRule(rule) {\n if (rule.when != null && !meets(rule.when, this._previous)) {\n return null;\n }\n const regex = rule.regex;\n regex.lastIndex = this._position;\n const match = regex.exec(this._source);\n if (match == null) {\n return null;\n }\n if (match[0].length > 0) {\n return match;\n }\n // zero-length matches are only meaningful as (bounded) state transitions\n if (!rule.hasTransition || this._emptyTransitions >= MAX_EMPTY_TRANSITIONS) {\n return null;\n }\n this._emptyTransitions++;\n return match;\n }\n _emitMatch({ rule, match }, syntax) {\n const raw = match[0];\n if (rule.groupTypes == null) {\n this._append(rule.type, raw, syntax);\n return;\n }\n this._emitGroups(rule, match, syntax);\n }\n /** Splits a match into one token per (top-level) capture group; uncovered characters become `text` tokens. */\n _emitGroups(rule, match, syntax) {\n const indices = match.indices;\n const start = match.index, end = start + match[0].length, types = rule.groupTypes;\n let cursor = start;\n for (let i = 1; i < match.length; i++) {\n const range = indices[i];\n if (range == null || range[0] < cursor || range[1] === range[0]) {\n continue;\n }\n if (range[0] > cursor) {\n const gap = this._source.slice(cursor, range[0]);\n this._append(SyntaxTokenType.Text, gap, syntax);\n }\n const groupText = this._source.slice(range[0], range[1]);\n const groupType = types[i - 1] ?? types[types.length - 1];\n this._append(groupType, groupText, syntax);\n cursor = range[1];\n }\n if (cursor < end) {\n const rest = this._source.slice(cursor, end);\n this._append(SyntaxTokenType.Text, rest, syntax);\n }\n }\n _transition(rule, syntax) {\n const stack = this._stack;\n for (let i = 0; i < rule.pop && stack.length > 1; i++) {\n stack.pop();\n }\n if (rule.next != null) {\n this._top.state = rule.next;\n }\n if (rule.push != null) {\n stack.push({ syntax, state: rule.push, until: null });\n }\n if (rule.embed == null) {\n return;\n }\n const embedded = compileByName(rule.embed);\n if (embedded == null) {\n return;\n }\n stack.push({ syntax: embedded, state: embedded.start, until: rule.until });\n }\n /** Emits the pending unrecognized characters (if any) as a single `text` token. */\n _flushText() {\n if (this._emitted >= this._position) {\n return;\n }\n const text = this._source.slice(this._emitted, this._position);\n const syntax = this._top.syntax;\n this._append(SyntaxTokenType.Text, text, syntax);\n }\n _resolveType(type, raw, syntax) {\n if (!syntax.keywordSources.has(type)) {\n return type;\n }\n const previousText = this._previous?.raw;\n if (syntax.keywordExceptAfter.has(previousText)) {\n return type;\n }\n return syntax.keywords.get(raw) ?? type;\n }\n _append(type, raw, syntax) {\n const resolvedType = this._resolveType(type, raw, syntax);\n const token = {\n type: resolvedType, raw, text: raw,\n index: this._emitted,\n line: this._line,\n column: this._column,\n depth: this._stack.length - 1,\n syntax: syntax.name\n };\n this._tokens.push(token);\n this._advance(raw);\n if (!syntax.insignificant.has(resolvedType)) {\n this._previous = token;\n }\n }\n /** Moves the emitted offset and the line/column counters past `raw`. */\n _advance(raw) {\n this._emitted += raw.length;\n const lastNewline = raw.lastIndexOf('\\n');\n if (lastNewline < 0) {\n this._column += raw.length;\n return;\n }\n for (let i = 0; i <= lastNewline; i++) {\n if (raw.charCodeAt(i) === 10) {\n this._line++;\n }\n }\n this._column = raw.length - lastNewline;\n }\n}\n// #endregion\n/** Used for unknown syntaxes: no rules, the whole source becomes a single `text` token. */\nconst PLAIN_TEXT_SYNTAX = { name: SyntaxTokenType.Text, lexical: { states: {} } };\n/**\n * Language-agnostic lexical engine: tokenizes a source text according to a {@link Syntax} vocabulary.\n * - lossless: concatenating the tokens' `raw` reproduces the source exactly;\n * - linear: a single cursor and sticky regular expressions (compiled once per syntax);\n * - error tolerant: unrecognized characters become `text` tokens, it never throws.\n */\nexport class Scanner {\n /**\n * Tokenizes `source`.\n * @param source Source text.\n * @param syntax A {@link Syntax} or the name/alias of a registered one (see {@link Syntaxes}); an unknown one yields a single `text` token.\n * @returns The lossless, positioned token stream.\n */\n tokenize(source, syntax) {\n const text = source ?? '';\n const resolved = typeof syntax === 'string' ? Syntaxes.get(syntax) : syntax;\n const compiled = compileSyntax(resolved ?? PLAIN_TEXT_SYNTAX);\n const run = new ScanRun(text, compiled);\n return run.run();\n }\n}\n", "//namespace Pacem.Compile {\n/** Default token type \u2192 CSS class mapping, matching the `code-*` classes styled by the theme (see `ui/markdown.css`). */\nexport const DefaultHighlightClasses = Object.freeze({\n 'keyword': 'code-keyword',\n 'preprocessor': 'code-keyword',\n 'string': 'code-string',\n 'regex': 'code-string',\n 'number': 'code-number',\n 'comment': 'code-comment',\n 'doc-comment': 'code-comment',\n 'tag': 'code-tag',\n 'tagname': 'code-tagname',\n 'attribute': 'code-attribute',\n});\nconst HTML_ESCAPES = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\nfunction htmlEncode(text) {\n return text.replace(/[&<>\"]/g, c => HTML_ESCAPES[c]);\n}\n/**\n * Renders a token stream (typically produced by the {@link Scanner}) as HTML: every token's `raw` text is HTML-encoded and,\n * when its type has a mapped class, wrapped in a `<span class=\"\u2026\">`.\n */\nexport class HighlightRenderer {\n /**\n * @param _classes Token type \u2192 CSS class mapping (defaults to {@link DefaultHighlightClasses}).\n */\n constructor(_classes = DefaultHighlightClasses) {\n this._classes = _classes;\n }\n render(tree) {\n let html = '';\n for (let token of tree ?? []) {\n html += this._renderToken(token);\n }\n return html;\n }\n _renderToken(token) {\n const encoded = htmlEncode(token.raw ?? '');\n const cssClass = this._classes[token.type];\n if (cssClass == null) {\n return encoded;\n }\n return `<span class=\"${cssClass}\">${encoded}</span>`;\n }\n}\n", "//namespace Pacem.Compile.Markdown {\nimport { NullChecker } from \"../../null-checker\";\nimport * as Compile from \"../parser\";\nimport { Scanner } from '../syntax/scanner';\nimport { Syntaxes } from '../syntax/registry';\nimport { HighlightRenderer } from '../syntax/highlight';\n// #region HELPERS\nfunction htmlEncode(input) {\n return (input ?? '').replace(/</g, '&lt;');\n}\nfunction extractReference(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\n/** Splits a link/image destination into its url and optional title: `url \"title\"`, `url 'title'` or `url (title)`. */\nfunction splitUrlAndTitle(destination) {\n if (NullChecker.isNullOrEmpty(destination)) {\n return { url: destination };\n }\n const trimmed = destination.trim();\n const arr = /^(\\S*)\\s+(?:\"([^\"]*)\"|'([^']*)'|\\(([^)]*)\\))\\s*$/.exec(trimmed);\n if (arr == null) {\n return { url: trimmed };\n }\n const title = arr[2] ?? arr[3] ?? arr[4];\n return { url: arr[1], title };\n}\nfunction attributeEncode(input) {\n return (input ?? '').replace(/&(?!(?:#\\d+|#x[\\da-fA-F]+|\\w+);)/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n}\n/** Splits a table row into its (trimmed) cells: outer pipes are optional, `\\|` is a literal pipe. */\nfunction splitTableCells(row) {\n let line = row.trim();\n if (line.startsWith('|')) {\n line = line.slice(1);\n }\n if (line.endsWith('|') && !line.endsWith('\\\\|')) {\n line = line.slice(0, -1);\n }\n const cells = line.split(/(?<!\\\\)\\|/);\n return cells.map(c => c.trim().replace(/\\\\\\|/g, '|'));\n}\nfunction tableAlignment(delimiter) {\n const left = delimiter.startsWith(':'), right = delimiter.endsWith(':');\n if (left && right) {\n return 'center';\n }\n if (right) {\n return 'right';\n }\n return left ? 'left' : null;\n}\nfunction indentationOf(line) {\n const arr = /^ */.exec(line);\n return arr[0].length;\n}\n/**\n * Splits a list block into its items, by indentation: a marker indented less than the current item's content\n * starts a sibling item; anything else (nested lists included) is item content, dedented by the content offset.\n */\nfunction splitListItems(raw) {\n const lines = raw.replace(/\\t/g, ' ').split(/\\r?\\n/);\n const items = [];\n for (let line of lines) {\n const current = items[items.length - 1];\n const marker = LISTMARKER.exec(line);\n if (marker != null && (current == null || marker[1].length < current.indent)) {\n const contentIndent = marker[0].length;\n const firstLine = line.slice(contentIndent);\n items.push({ indent: contentIndent, lines: [firstLine] });\n continue;\n }\n if (current == null) {\n continue;\n }\n const dedent = Math.min(current.indent, indentationOf(line));\n const content = line.slice(dedent);\n current.lines.push(content);\n }\n return items.map(i => i.lines.join('\\n').replace(/\\s+$/, ''));\n}\n/**\n * Code meant for a syntax highlighter: `MarkdownService` escapes every `<` of its input (no html allowed), hence\n * `&lt;` is turned back into `<` (the highlighter encodes everything it renders anyway).\n */\nfunction decodeCode(code) {\n return (code ?? '').replace(/&lt;/g, '<');\n}\n/** Highlights fenced code blocks of the registered languages (see {@link Syntaxes}). */\nconst scanner = new Scanner();\n/** Fenced code in this vocabulary also gets the `code-markup` class. */\nconst MARKUP_SYNTAX = 'markup';\nfunction regexMatchIndex(arr) {\n return arr?.index || void 0;\n}\nfunction extractUrl(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction normalizeReference(input) {\n return input?.replace(/[^\\w]+/g, ' ').trim().replace(/ +/g, '-').toLowerCase();\n}\nfunction match(input, pattern, fn) {\n const arr = pattern.exec(input);\n if (arr && arr.length) {\n return fn(arr);\n }\n return null;\n}\n// #endregion\nconst COMMENT = /(<!--)([\\s\\S]*?)(-->|$)/;\nconst HR = /^ {0,3}(={3,}|(?:_[ \\t]*){3,}|(?:-[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(\\r?\\n|$)/;\nconst HEADING = /^ {0,3}(#{1,6})\\s+([^\\n]+)(\\r?\\n|$)+/;\nconst HEADING1 = /^ {0,3}([^\\n]+)(\\r?\\n=+(\\r?\\n|$))+/;\nconst HEADING2 = /^ {0,3}([^\\n]+)(\\r?\\n-+(\\r?\\n|$))+/;\nconst CODEBLOCK = /^ {4,}.+(\\r?\\n {4,}.+)*(\\r?\\n|$)+/;\nconst FENCES = /^ {0,3}``` *([^\\n]*)\\r?\\n(([\\s\\S](?!\\r?\\n {0,3}```))*.(\\r?\\n)+) {0,3}```(\\r?\\n|$)+/;\nconst BLOCKQUOTE = /^ {0,3}> *([^\\n]+)(\\r?\\n {0,3}> *([^\\n]*))*(\\r?\\n|$)+/;\n// (`*` bullets need a following space, not to be mistaken for emphasis; nested lists of the other kind are indented)\nconst ULIST = /^( {0,3}([-+]|\\*(?=[ \\t])).*(\\r?\\n|$))((?!(?: ?\\d+[.\\)]|\\r?\\n\\S)).*(\\r?\\n|$))*/;\nconst OLIST = /^( {0,3}(\\d+[.\\)]).*(\\r?\\n|$))((?!(?: {0,2}(?:[-+]|\\*[ \\t])|\\r?\\n\\S)).*(\\r?\\n|$))*/;\n/** A list item marker, with its indentation and the spaces following it. */\nconst LISTMARKER = /^( *)([-+*]|\\d+[.\\)])([ \\t]+|$)/;\n/** GFM task list item: `[ ]` or `[x]` at the beginning of the item. */\nconst TASK = /^\\[([ xX])\\][ \\t]+/;\n// (whitespace-only lines are blank lines: they never start nor continue a paragraph)\nconst PARAGRAPH = /^(?! {4,})(?=[ \\t]*\\S)(.+(\\n(?![ \\t]*(?:\\n|$))(?! {0,3}```)(?! {0,3}([-+]|\\*[ \\t]|\\d+[.\\)]))(?! {0,3}#{1,6}[ \\t])(?! {4,})(?! {0,3}>).+)*)/;\nconst REF = /^ {0,3}(!?)\\[([^\\]]+)\\]: +(\\S+)(?: +['\"\\(](.+)['\"\\)])?(\\r?\\n|$)+/;\n// (an escaped `\\[` never opens a link)\nconst IMAGE_OR_LINK = /(?<!\\\\)!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?(\\[[^\\[\\]]*\\]|\\([^\\(\\)]*\\))?/;\nconst EMPHASIZED_LINK = /(\\*\\*?|__?)(\\[[^\\]]*]\\([^\\)]+\\))\\1/;\nconst CODE = /(?:(?<!\\\\)`)(.+?)(?:(?<!\\\\)`)/;\n// (underscores never emphasize inside words: `snake_case_word`)\nconst EMPHASIZE = /(\\*\\*?)((?!\\1\\s?)(?:(?!\\1)[\\S\\s])*[^\\s])\\1|(?<![A-Za-z0-9])(__?)((?!\\3\\s?)(?:(?!\\3)[\\S\\s])*[^\\s])\\3(?![A-Za-z0-9])/;\n// (underscores are emphasis markers only: `snake_case_word` must not strike anything through)\nconst STRIKE = /(~~?)(?!\\1\\s?)([^\\s][\\s\\S]*?(?!\\1)[^\\s])\\1/;\nconst QUOTE = /(:\")(?!\":\\s?)([^\\s][\\s\\S]*?(?!\":)[^\\s])\":/;\nconst SPACE = /^\\s+/;\n/** Blank lines between blocks (it keeps the indentation of the next line, which matters to indented code blocks). */\nconst BLOCK_SPACE = /^(?:[ \\t]*\\r?\\n)+|^\\s+/;\nconst LINEBREAK = /(?: {2,}|\\\\)\\r?\\n/;\nconst TEXT = /^[^\\r\\n]+/;\n/** Backslash escapes of ASCII punctuation (CommonMark); `\\&lt;` is an escaped `<` already escaped by `MarkdownService`. */\nconst ESCAPE = /\\\\(&lt;|[!\"#$%&'()*+,\\-./:;<=>?@\\[\\\\\\]^_`{|}~])/;\n/** Escaped characters that must stay text once rendered as html. */\nconst ESCAPED_HTML = { '<': '&lt;', '&lt;': '&lt;', '&': '&amp;' };\n/** `<https://\u2026>`, `<mailto:\u2026>` and `<user@domain>` (the `<` may come escaped, e.g. by `MarkdownService`). */\nconst AUTOLINK = /(?:<|&lt;)((?:https?|ftp|mailto):[^\\s<>]+|[\\w.+-]+@[\\w-]+(?:\\.[\\w-]+)+)>/;\n/** GFM bare URLs (`https://\u2026`, `www.\u2026`), trailing punctuation excluded. */\nconst BARE_URL = /(?<![\\w\\/\\\\(\\[<\"'=;&@])(?:https?:\\/\\/|www\\.)[^\\s<>]*[^\\s<>.,:;\"'!?)\\]*_~]/;\n/** GFM footnote reference `[^id]`. */\nconst FOOTNOTE_REF = /\\[\\^([^\\]\\s]+)\\]/;\n/** GFM footnote definition `[^id]: text` (continuation lines indented). */\nconst FOOTNOTE_DEF = /^ {0,3}\\[\\^([^\\]\\s]+)\\]: *([^\\r\\n]*(?:\\r?\\n {2,}[^\\r\\n]+)*)(\\r?\\n|$)+/;\n/** GFM table: header row, delimiter row, then body rows (up to a blank line). */\nconst TABLE = /^ {0,3}(\\|?[^\\r\\n]*\\|[^\\r\\n]*)\\r?\\n {0,3}(\\|? *:?-+:? *(?:\\| *:?-+:? *)*\\|?) *(?:\\r?\\n|$)((?:(?! {0,3}(?:\\r?\\n|$))[^\\r\\n]*\\|[^\\r\\n]*(?:\\r?\\n|$))*)/;\nvar MARKDOWN_TYPES;\n(function (MARKDOWN_TYPES) {\n MARKDOWN_TYPES[\"Html\"] = \"html\";\n MARKDOWN_TYPES[\"Text\"] = \"text\";\n MARKDOWN_TYPES[\"Paragraph\"] = \"paragraph\";\n MARKDOWN_TYPES[\"BlockQuote\"] = \"blockquote\";\n MARKDOWN_TYPES[\"Space\"] = \"space\";\n MARKDOWN_TYPES[\"Heading\"] = \"heading\";\n MARKDOWN_TYPES[\"Bold\"] = \"bold\";\n MARKDOWN_TYPES[\"Italic\"] = \"italic\";\n MARKDOWN_TYPES[\"CodeBlock\"] = \"codeblock\";\n MARKDOWN_TYPES[\"Code\"] = \"code\";\n MARKDOWN_TYPES[\"Image\"] = \"img\";\n MARKDOWN_TYPES[\"ImageLike\"] = \"imglike\";\n MARKDOWN_TYPES[\"Link\"] = \"link\";\n MARKDOWN_TYPES[\"LinkLike\"] = \"linklike\";\n MARKDOWN_TYPES[\"LineBreak\"] = \"br\";\n MARKDOWN_TYPES[\"StrikeThrough\"] = \"strike\";\n MARKDOWN_TYPES[\"Quote\"] = \"quote\";\n MARKDOWN_TYPES[\"HorizontalRule\"] = \"hr\";\n MARKDOWN_TYPES[\"OrderedList\"] = \"ol\";\n MARKDOWN_TYPES[\"UnorderedList\"] = \"ul\";\n MARKDOWN_TYPES[\"ListItem\"] = \"listitem\";\n MARKDOWN_TYPES[\"Reference\"] = \"ref\";\n MARKDOWN_TYPES[\"Table\"] = \"table\";\n MARKDOWN_TYPES[\"TableRow\"] = \"tr\";\n MARKDOWN_TYPES[\"TableCell\"] = \"td\";\n MARKDOWN_TYPES[\"FootnoteReference\"] = \"fnref\";\n MARKDOWN_TYPES[\"FootnoteDefinition\"] = \"fndef\";\n})(MARKDOWN_TYPES || (MARKDOWN_TYPES = {}));\nvar MARKDOWN_RULES;\n(function (MARKDOWN_RULES) {\n MARKDOWN_RULES[MARKDOWN_RULES[\"Comment\"] = 0] = \"Comment\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Reference\"] = 1] = \"Reference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"HorizontalRule\"] = 2] = \"HorizontalRule\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading\"] = 3] = \"Heading\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading1\"] = 4] = \"Heading1\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading2\"] = 5] = \"Heading2\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"CodeBlock\"] = 6] = \"CodeBlock\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Fences\"] = 7] = \"Fences\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BlockQuote\"] = 8] = \"BlockQuote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"OrderedList\"] = 9] = \"OrderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"UnorderedList\"] = 10] = \"UnorderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Paragraph\"] = 11] = \"Paragraph\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"EmphasizedLink\"] = 12] = \"EmphasizedLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"ImageOrLink\"] = 13] = \"ImageOrLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Emphasize\"] = 14] = \"Emphasize\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"StrikeThrough\"] = 15] = \"StrikeThrough\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Quote\"] = 16] = \"Quote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Code\"] = 17] = \"Code\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"LineBreak\"] = 18] = \"LineBreak\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"FootnoteDefinition\"] = 19] = \"FootnoteDefinition\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Table\"] = 20] = \"Table\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Escape\"] = 21] = \"Escape\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"AutoLink\"] = 22] = \"AutoLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"FootnoteReference\"] = 23] = \"FootnoteReference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BareUrl\"] = 24] = \"BareUrl\";\n // lowest priority\n MARKDOWN_RULES[MARKDOWN_RULES[\"Text\"] = 254] = \"Text\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Space\"] = 255] = \"Space\";\n})(MARKDOWN_RULES || (MARKDOWN_RULES = {}));\n/**\n * Builds the full Markdown grammar (block + inline rules, comment/reference handling first),\n * optionally merging in caller-supplied {@link ExtraRule}s.\n * @param extra Additional block/inline/code rules to plug into the built-in grammar.\n * @returns Ordered list of {@link Compile.Rule}s ready to be fed to a {@link Compile.Lexer}.\n */\nfunction getGrammar(extra = []) {\n const inert = {\n // comment\n [MARKDOWN_RULES.Comment]: {\n exec: (input, lexer) => match(input, COMMENT, arr => {\n const index = regexMatchIndex(arr);\n const output = [{\n type: MARKDOWN_TYPES.Html, index, raw: arr[0], text: arr[2]\n }];\n if (index > 0) {\n // (the top-level rules: reference and footnote definitions may precede a comment)\n const left = input.substr(0, index), tokens = lexer.tokenize(left, topRules);\n Array.prototype.unshift.apply(output, tokens);\n }\n return output;\n })\n },\n // reference\n [MARKDOWN_RULES.Reference]: {\n exec: (input) => match(input, REF, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], text = raw, image = arr[1] === '!', id = arr[2], url = arr[3], title = arr[4];\n return [{\n type: MARKDOWN_TYPES.Reference, index, raw, text, id, image, url, title\n }];\n })\n },\n // footnote definition (rendered at the end of the document, see HtmlRenderer)\n [MARKDOWN_RULES.FootnoteDefinition]: {\n exec: (input, lexer) => match(input, FOOTNOTE_DEF, arr => {\n const raw = arr[0], id = normalizeReference(arr[1]), text = arr[2].replace(/\\r?\\n {2,}/g, ' ');\n return [{\n type: MARKDOWN_TYPES.FootnoteDefinition, index: regexMatchIndex(arr), raw, text, id,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n };\n const blockExtra = [], inlineExtra = [], codeExtra = {};\n for (let r of extra) {\n let rule, type = 'inline';\n if ('type' in r) {\n type = r.type;\n rule = r.rule;\n }\n else {\n rule = r;\n }\n switch (type) {\n case 'block':\n blockExtra.push(rule);\n break;\n case 'code':\n if ('lang' in r) {\n const key = r.lang.toLowerCase();\n (codeExtra[key] = codeExtra[key] || []).push(rule);\n }\n break;\n default:\n const inlineRule = {\n exec: (input, lexer) => {\n const output = rule.exec(input, lexer);\n inPlaceInlineExec(input, output, lexer);\n return output;\n }\n };\n inlineExtra.push(inlineRule);\n break;\n }\n }\n // #region INLINE\n const inlinelowpriority = {\n // text\n [MARKDOWN_RULES.Text]: {\n exec: (input) => match(input, TEXT, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const inline = {\n // link/image\n [MARKDOWN_RULES.ImageOrLink]: {\n exec: (input, lexer) => inlineMatch(input, IMAGE_OR_LINK, lexer, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], image = raw.charAt(0) === '!', text = arr[1], destination = extractUrl(arr[2]), reference = extractReference(arr[2]) ?? text, ref = normalizeReference(reference);\n // `(url \"title\")`\n const { url, title } = splitUrlAndTitle(destination);\n const tokens = lexer.tokenize(text, inlineRules);\n if (image) {\n return [{\n index, type: url ? MARKDOWN_TYPES.Image : MARKDOWN_TYPES.ImageLike,\n raw, text, src: url, title, ref, tokens\n }];\n }\n return [{\n index, type: url ? MARKDOWN_TYPES.Link : MARKDOWN_TYPES.LinkLike,\n raw, text, href: url, title, ref, tokens\n }];\n })\n },\n // backslash escapes: the escaped character is plain text\n [MARKDOWN_RULES.Escape]: {\n exec: (input, lexer) => inlineMatch(input, ESCAPE, lexer, arr => {\n const text = ESCAPED_HTML[arr[1]] ?? arr[1];\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // <https://\u2026>, <user@domain>\n [MARKDOWN_RULES.AutoLink]: {\n exec: (input, lexer) => inlineMatch(input, AUTOLINK, lexer, arr => {\n const text = arr[1];\n const isEmail = !/^[a-z]+:/i.test(text);\n const href = isEmail ? 'mailto:' + text : text;\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text, href, type: MARKDOWN_TYPES.Link,\n tokens: [{ type: MARKDOWN_TYPES.Text, raw: text, text }]\n }];\n })\n },\n // bare https://\u2026 or www.\u2026 urls\n [MARKDOWN_RULES.BareUrl]: {\n exec: (input, lexer) => inlineMatch(input, BARE_URL, lexer, arr => {\n const text = arr[0];\n const href = /^www\\./i.test(text) ? 'http://' + text : text;\n return [{\n index: regexMatchIndex(arr), raw: text, text, href, type: MARKDOWN_TYPES.Link,\n tokens: [{ type: MARKDOWN_TYPES.Text, raw: text, text }]\n }];\n })\n },\n // [^footnote]\n [MARKDOWN_RULES.FootnoteReference]: {\n exec: (input, lexer) => inlineMatch(input, FOOTNOTE_REF, lexer, arr => {\n const id = normalizeReference(arr[1]);\n return [{\n index: regexMatchIndex(arr), raw: arr[0], text: arr[1], id, type: MARKDOWN_TYPES.FootnoteReference\n }];\n })\n },\n // code\n [MARKDOWN_RULES.Code]: {\n exec: (input, lexer) => inlineMatch(input, CODE, lexer, arr => {\n const text = htmlEncode(arr[1]);\n return [{\n type: MARKDOWN_TYPES.Code, raw: arr[0], text, index: regexMatchIndex(arr)\n }];\n })\n },\n // italic/bold link\n [MARKDOWN_RULES.EmphasizedLink]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZED_LINK, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // italic/bold\n [MARKDOWN_RULES.Emphasize]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZE, lexer, arr => {\n // `*` (groups 1-2) or word-bounded `_` (groups 3-4) markers\n const marker = arr[1] ?? arr[3], text = arr[2] ?? arr[4];\n if (NullChecker.isNullOrEmpty(text)) {\n return null;\n }\n const type = marker.length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic;\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // strike\n [MARKDOWN_RULES.StrikeThrough]: {\n exec: (input, lexer) => inlineMatch(input, STRIKE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.StrikeThrough, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // quote\n [MARKDOWN_RULES.Quote]: {\n exec: (input, lexer) => inlineMatch(input, QUOTE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.Quote, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // line break\n [MARKDOWN_RULES.LineBreak]: {\n exec: (input, lexer) => inlineMatch(input, LINEBREAK, lexer, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.LineBreak\n }];\n })\n },\n };\n const inPlaceInlineExec = (input, output, lexer) => {\n const index = output?.length > 0 && output[0].index;\n if (index > 0) {\n const left = input.substr(0, index);\n const tokens = lexer.tokenize(left, inlineRules) || [];\n Array.prototype.unshift.apply(output, tokens);\n }\n };\n const inlineMatch = (input, pattern, lexer, fn) => {\n const output = match(input, pattern, arr => {\n if (pattern != CODE) {\n // prioritize code\n const codeCheck = CODE.exec(input);\n if (codeCheck\n && codeCheck.length\n && codeCheck.index < arr.index\n // && (codeCheck.index + codeCheck[0].length) > arr.index\n ) {\n return null;\n }\n }\n return fn(arr);\n });\n inPlaceInlineExec(input, output, lexer);\n return output;\n };\n // explicit priorities: footnote references before `[links]`, escapes before emphasis, bare urls last\n const inlineRules = [\n inline[MARKDOWN_RULES.FootnoteReference],\n inline[MARKDOWN_RULES.EmphasizedLink],\n inline[MARKDOWN_RULES.ImageOrLink],\n inline[MARKDOWN_RULES.Escape],\n inline[MARKDOWN_RULES.AutoLink],\n inline[MARKDOWN_RULES.Emphasize],\n inline[MARKDOWN_RULES.StrikeThrough],\n inline[MARKDOWN_RULES.Quote],\n inline[MARKDOWN_RULES.Code],\n inline[MARKDOWN_RULES.LineBreak],\n inline[MARKDOWN_RULES.BareUrl],\n ];\n Array.prototype.push.apply(inlineRules, inlineExtra);\n inlineRules.push(inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n // #region CODE\n const getLangGrammar = (lang) => {\n const retval = [inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]];\n const key = lang?.toLowerCase() || '';\n if (key && key in codeExtra) {\n Array.prototype.unshift.apply(retval, codeExtra[key]);\n }\n return retval;\n };\n // #endregion\n // #region BLOCK\n const lowpriority = {\n // paragraph\n [MARKDOWN_RULES.Paragraph]: {\n exec: (input, lexer) => match(input, PARAGRAPH, arr => {\n // leading whitespace of paragraph lines is not content (CommonMark)\n const raw = arr[0], text = raw.replace(/^[ \\t]+/gm, '');\n // whitespace-only lines are blank lines, not (empty) paragraphs\n if (text.trim().length === 0) {\n return null;\n }\n return [{\n type: MARKDOWN_TYPES.Paragraph, raw, text,\n // recursion (inline rules only)\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // blank lines (the indentation of the following line is kept: it matters to indented code blocks)\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, BLOCK_SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const tokenizeListItem = (text, lexer) => {\n const needsBlocks = /^ {0,3}(`{3,}|$|>|[-+*]\\s|\\d+[.\\)]|#{1,6}\\s|\\|)/m.test(text);\n if (!needsBlocks) {\n return lexer.tokenize(text, inlineRules);\n }\n const tokens = lexer.tokenize(text, blockRules);\n // tight items (no blank lines) keep their first paragraph unwrapped, e.g. `<li>a<ul>\u2026</ul></li>`\n const first = tokens[0];\n const tight = !/\\n[ \\t]*\\n/.test(text);\n if (!tight || first?.type !== MARKDOWN_TYPES.Paragraph) {\n return tokens;\n }\n const inner = first.tokens ?? [];\n const rest = tokens.slice(1);\n return inner.concat(rest);\n };\n const tokenizeListItems = (raw, lexer) => {\n const items = splitListItems(raw);\n const nonEmpty = items.filter(i => !NullChecker.isNullOrEmpty(i));\n return nonEmpty.map(item => {\n // GFM task list item: `[ ]`/`[x]`\n const task = TASK.exec(item);\n const text = task ? item.slice(task[0].length) : item;\n const tokens = tokenizeListItem(text, lexer);\n if (task == null) {\n return { type: MARKDOWN_TYPES.ListItem, raw: item, text, tokens };\n }\n const checked = task[1] !== ' ';\n return { type: MARKDOWN_TYPES.ListItem, raw: item, text, tokens, task: true, checked };\n });\n };\n const tokenizeTableRow = (cells, align, header, lexer) => {\n const tokens = align.map((cellAlign, i) => {\n // missing cells are empty, exceeding ones are ignored (GFM)\n const text = cells[i] ?? '';\n const cellTokens = lexer.tokenize(text, inlineRules);\n return { type: MARKDOWN_TYPES.TableCell, raw: text, text, header, align: cellAlign, tokens: cellTokens };\n });\n const raw = cells.join(' | ');\n const row = { type: MARKDOWN_TYPES.TableRow, raw, text: raw, header, tokens };\n return row;\n };\n const block = {\n // hr\n [MARKDOWN_RULES.HorizontalRule]: {\n exec: (input, lexer) => match(input, HR, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.HorizontalRule, raw, text\n }];\n })\n },\n // headings\n [MARKDOWN_RULES.Heading]: {\n exec: (input, lexer) => match(input, HEADING, arr => {\n // optional closing sequence: `## Title ##`\n const text = arr[2].replace(/[ \\t]+#+[ \\t]*$/, '');\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: arr[1].length, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading1]: {\n exec: (input, lexer) => match(input, HEADING1, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 1, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading2]: {\n exec: (input, lexer) => match(input, HEADING2, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 2, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.CodeBlock]: {\n exec: (input, lexer) => match(input, CODEBLOCK, arr => {\n // indented code: 4 spaces of indentation are not part of the code\n const raw = arr[0], code = raw.replace(/^ {4}/gm, '').replace(/\\s+$/, ''), text = htmlEncode(code);\n // whitespace-only indented lines are blank lines, not code\n if (code.length === 0) {\n return null;\n }\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw, text,\n tokens: lexer.tokenize(text, getLangGrammar(''))\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.Fences]: {\n exec: (input, lexer) => match(input, FENCES, arr => {\n // the info string may carry more than the language (e.g. ```js title)\n const info = (arr[1] ?? '').trim(), words = info.split(/\\s+/), lang = words[0].toLowerCase();\n // custom `code` rules (see ExtraRule) win over the registered vocabularies\n const syntax = lang in codeExtra ? null : Syntaxes.get(lang);\n if (syntax == null) {\n const text = htmlEncode(arr[2]);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text, lang,\n tokens: lexer.tokenize(text, getLangGrammar(lang))\n }];\n }\n // highlighted by the language-agnostic Scanner (see HtmlRenderer)\n const code = decodeCode(arr[2]);\n const tokens = scanner.tokenize(code, syntax);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text: code, lang, syntax: syntax.name, highlighted: true, tokens\n }];\n })\n },\n // blockquote\n [MARKDOWN_RULES.BlockQuote]: {\n exec: (input, lexer) => match(input, BLOCKQUOTE, arr => {\n const raw = arr[0], text = raw.replace(/^ {0,3}> ?/gm, '');\n return [{\n type: MARKDOWN_TYPES.BlockQuote, raw, text,\n // recursion: any block (nested quotes, lists, code\u2026)\n tokens: lexer.tokenize(text, blockRules)\n }];\n })\n },\n // lists\n [MARKDOWN_RULES.OrderedList]: {\n exec: (input, lexer) => match(input, OLIST, arr => {\n const raw = arr[0], startMatch = /\\d+/.exec(raw), start = parseInt(startMatch[0]), tokens = tokenizeListItems(raw, lexer);\n return [{\n type: MARKDOWN_TYPES.OrderedList, start, raw, text: raw, tokens\n }];\n })\n },\n [MARKDOWN_RULES.UnorderedList]: {\n exec: (input, lexer) => match(input, ULIST, arr => {\n const raw = arr[0], tokens = tokenizeListItems(raw, lexer);\n return [{\n type: MARKDOWN_TYPES.UnorderedList, raw, text: raw, tokens\n }];\n })\n },\n // GFM tables\n [MARKDOWN_RULES.Table]: {\n exec: (input, lexer) => match(input, TABLE, arr => {\n const headers = splitTableCells(arr[1]), delimiters = splitTableCells(arr[2]);\n // the delimiter row must match the header row\n if (headers.length !== delimiters.length) {\n return null;\n }\n const align = delimiters.map(tableAlignment);\n const bodyLines = arr[3].split(/\\r?\\n/).filter(l => l.trim().length > 0);\n const headerRow = tokenizeTableRow(headers, align, true, lexer);\n const bodyRows = bodyLines.map(line => {\n const cells = splitTableCells(line);\n return tokenizeTableRow(cells, align, false, lexer);\n });\n const rows = [headerRow].concat(bodyRows);\n return [{\n type: MARKDOWN_TYPES.Table, raw: arr[0], text: arr[0], align, tokens: rows\n }];\n })\n }\n };\n const blockRules = Object.values(block);\n Array.prototype.push.apply(blockRules, blockExtra);\n blockRules.push(lowpriority[MARKDOWN_RULES.Paragraph], lowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n const topRules = [\n // comment first\n inert[MARKDOWN_RULES.Comment],\n // (before references: `[^id]: \u2026` would match them too)\n inert[MARKDOWN_RULES.FootnoteDefinition],\n inert[MARKDOWN_RULES.Reference]\n ].concat(\n // block rules contain recursive inline rules (at least)\n blockRules);\n return topRules;\n}\n// #region HTML RENDERER HELPER\n// meant to help in unnecessary spaces replacement.\nconst CARRIAGE_RETURN_PLACEHOLDER = '\\0';\nconst TRIM_INSIDE = /[ \\r\\n]*\\0+[ \\r\\n]*/g;\nfunction trim(input) {\n return input?.replace(TRIM_INSIDE, '\\n').trim();\n}\nfunction titleAttribute(title) {\n if (NullChecker.isNullOrEmpty(title)) {\n return '';\n }\n const encoded = attributeEncode(title);\n return ` title=\"${encoded}\"`;\n}\nfunction alignAttribute(align) {\n if (align == null) {\n return '';\n }\n return ` style=\"text-align: ${align}\"`;\n}\n/** Renders a Markdown token tree, as produced by the grammar returned by {@link getGrammar}, into HTML markup. */\nclass HtmlRenderer {\n constructor(_extraItemRender = (token, __) => token?.text || '') {\n this._extraItemRender = _extraItemRender;\n /** Link/image reference definitions of the whole document (they may be referenced from any depth). */\n this.#references = [];\n /** Footnote definitions by id, and the order of their first reference (their numbering). */\n this.#footnotes = new Map();\n this.#footnoteOrder = [];\n this.#highlighter = new HighlightRenderer();\n this._renderContent = (token) => {\n const children = token.tokens;\n if (NullChecker.isNullOrEmpty(children)) {\n return token.text;\n }\n return this._render(children);\n };\n }\n /** Link/image reference definitions of the whole document (they may be referenced from any depth). */\n #references;\n /** Footnote definitions by id, and the order of their first reference (their numbering). */\n #footnotes;\n #footnoteOrder;\n #highlighter;\n /** Collects the reference and footnote definitions of the whole tree. */\n _collectDefinitions(tree) {\n for (let token of tree ?? []) {\n if (token?.type === MARKDOWN_TYPES.Reference) {\n this.#references.push(token);\n }\n if (token?.type === MARKDOWN_TYPES.FootnoteDefinition && !this.#footnotes.has(token['id'])) {\n this.#footnotes.set(token['id'], token);\n }\n this._collectDefinitions(token?.tokens);\n }\n }\n _findReference(ref, image) {\n if (NullChecker.isNullOrEmpty(ref)) {\n return undefined;\n }\n const key = ref.toLowerCase();\n return this.#references.find(t => (t.image === true) === image && t.id?.toLowerCase() === key);\n }\n _renderCodeBlock(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const lang = token['lang'];\n if (token['highlighted'] !== true) {\n const classAttribute = lang ? (' class=\"' + lang + '\"') : '';\n const content = this._renderContent(token);\n return `<pre>${R}<code${classAttribute}>${content}</code>${R}</pre>${R}`;\n }\n // `code-highlighted` (and `code-markup`) let the theme style any registered language\n const classes = [lang, 'code-highlighted'];\n if (token['syntax'] === MARKUP_SYNTAX) {\n classes.push('code-markup');\n }\n const classList = attributeEncode(classes.join(' '));\n const highlighted = this.#highlighter.render(token.tokens);\n return `<pre>${R}<code class=\"${classList}\">${highlighted}</code>${R}</pre>${R}`;\n }\n _renderImage(token) {\n let src = token.src, title = token.title;\n if (!src) {\n const reference = this._findReference(token.ref, true);\n src = reference?.url;\n title = reference?.title;\n }\n if (!src) {\n const content = this._renderContent(token);\n return `![${content}]`;\n }\n const titleAttr = titleAttribute(title);\n return `<img src=\"${src}\" alt=\"${token.text}\"${titleAttr} />`;\n }\n _renderLink(token) {\n let href = token.href, title = token.title;\n if (!href) {\n const reference = this._findReference(token.ref, false);\n href = reference?.url;\n title = reference?.title;\n }\n const content = this._renderContent(token);\n if (!href) {\n return `[${content}]`;\n }\n const titleAttr = titleAttribute(title);\n return `<a href=\"${href}\"${titleAttr}>${content}</a>`;\n }\n _renderListItem(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const content = this._renderContent(token);\n if (token['task'] !== true) {\n return `\\t<li>${content}</li>${R}`;\n }\n const checked = token['checked'] === true ? ' checked' : '';\n return `\\t<li class=\"task-list-item\"><input type=\"checkbox\" disabled${checked} /> ${content}</li>${R}`;\n }\n _renderTableRow(row) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n let cells = '';\n for (let cell of row.tokens ?? []) {\n const tag = cell['header'] === true ? 'th' : 'td';\n const align = alignAttribute(cell['align']);\n const content = this._renderContent(cell);\n cells += `<${tag}${align}>${content}</${tag}>`;\n }\n return `<tr>${cells}</tr>${R}`;\n }\n _renderTable(token) {\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n const rows = token.tokens ?? [];\n const headerRows = rows.filter(r => r['header'] === true);\n const bodyRows = rows.filter(r => r['header'] !== true);\n const head = headerRows.map(r => this._renderTableRow(r)).join('');\n let html = `<table>${R}<thead>${R}${head}</thead>${R}`;\n if (bodyRows.length > 0) {\n const body = bodyRows.map(r => this._renderTableRow(r)).join('');\n html += `<tbody>${R}${body}</tbody>${R}`;\n }\n return html + `</table>${R}`;\n }\n _renderFootnoteReference(token) {\n const id = token['id'];\n if (!this.#footnotes.has(id)) {\n return `[^${token.text}]`;\n }\n const order = this.#footnoteOrder;\n const isFirst = !order.includes(id);\n if (isFirst) {\n order.push(id);\n }\n const number = order.indexOf(id) + 1;\n const anchorId = isFirst ? ` id=\"fnref-${id}\"` : '';\n return `<sup class=\"footnote-ref\"><a href=\"#fn-${id}\"${anchorId}>${number}</a></sup>`;\n }\n /** Renders the referenced footnotes, in order of first reference (definitions may reference further footnotes). */\n _renderFootnotes() {\n const order = this.#footnoteOrder;\n if (order.length === 0) {\n return '';\n }\n const R = CARRIAGE_RETURN_PLACEHOLDER;\n let items = '';\n for (let i = 0; i < order.length; i++) {\n const id = order[i];\n const definition = this.#footnotes.get(id);\n const content = this._renderContent(definition);\n items += `<li id=\"fn-${id}\">${content} <a href=\"#fnref-${id}\" class=\"footnote-backref\">&#8617;</a></li>${R}`;\n }\n return `<section class=\"footnotes\">${R}<ol>${R}${items}</ol>${R}</section>${R}`;\n }\n _rendeItem(token, allTokens) {\n const r = this._renderContent, R = CARRIAGE_RETURN_PLACEHOLDER;\n switch (token?.type) {\n case MARKDOWN_TYPES.Reference:\n case MARKDOWN_TYPES.FootnoteDefinition:\n return '';\n case MARKDOWN_TYPES.Html:\n return token.raw;\n case MARKDOWN_TYPES.BlockQuote:\n return `<blockquote>\\n${r(token)}</blockquote>${R}`;\n case MARKDOWN_TYPES.Bold:\n return `<b>${r(token)}</b>`;\n case MARKDOWN_TYPES.CodeBlock:\n return this._renderCodeBlock(token);\n case MARKDOWN_TYPES.Code:\n return `<code>${r(token)}</code>`;\n case MARKDOWN_TYPES.HorizontalRule:\n return `<hr />${R}`;\n case MARKDOWN_TYPES.Heading:\n const hlevel = token['level'], hid = token['ref'];\n return `<h${hlevel} id=\"${hid}\">${r(token)}</h${hlevel}>${R}`;\n case MARKDOWN_TYPES.Image:\n case MARKDOWN_TYPES.ImageLike:\n return this._renderImage(token);\n case MARKDOWN_TYPES.Italic:\n return `<i>${r(token)}</i>`;\n case MARKDOWN_TYPES.StrikeThrough:\n return `<s>${r(token)}</s>`;\n case MARKDOWN_TYPES.Quote:\n return `<q>${r(token)}</q>`;\n case MARKDOWN_TYPES.LineBreak:\n return '<br />' + R;\n case MARKDOWN_TYPES.OrderedList:\n return `<ol start=\"${token['start']}\">\\n${r(token)}</ol>${R}`;\n case MARKDOWN_TYPES.UnorderedList:\n return `<ul>\\n${r(token)}</ul>${R}`;\n case MARKDOWN_TYPES.ListItem:\n return this._renderListItem(token);\n case MARKDOWN_TYPES.Link:\n case MARKDOWN_TYPES.LinkLike:\n return this._renderLink(token);\n case MARKDOWN_TYPES.Table:\n return this._renderTable(token);\n case MARKDOWN_TYPES.FootnoteReference:\n return this._renderFootnoteReference(token);\n case MARKDOWN_TYPES.Paragraph:\n return `<p>${r(token)}</p>${R}`;\n case MARKDOWN_TYPES.Text:\n case MARKDOWN_TYPES.Space:\n return token.text;\n }\n return this._extraItemRender(token, allTokens);\n }\n _render(tree) {\n let acc = '';\n for (let token of tree || []) {\n acc += this._rendeItem(token, tree);\n }\n return acc;\n }\n render(tree) {\n this.#references = [];\n this.#footnotes.clear();\n this.#footnoteOrder = [];\n this._collectDefinitions(tree);\n const body = this._render(tree);\n const footnotes = this._renderFootnotes();\n return trim(body + footnotes);\n }\n}\n/** Renders a Markdown token tree as a JSON array of tokens, mainly useful for debugging/inspection. */\nclass TokenRenderer {\n _render(token) {\n return NullChecker.isNullOrEmpty(token) ? '' : JSON.stringify(token);\n }\n render(tree) {\n return '[' + tree.filter(i => !NullChecker.isNullOrEmpty(i)).map(this._render).join(',') + ']';\n }\n}\nfunction isRenderer(obj) {\n return obj && typeof obj === 'object' && typeof obj.render === 'function';\n}\n/** Markdown parser: tokenizes Markdown source and renders it to HTML (or another format via a custom {@link Compile.Renderer}). */\nexport class Parser extends Compile.Parser {\n /**\n * Parses Markdown `input` and renders it to an HTML string.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @param extraItemRenderer Fallback renderer invoked for token types not natively handled (e.g. tokens produced by `extraGrammar`); defaults to returning the token's `text`.\n * @returns The rendered HTML string.\n */\n toHtml(input, extraGrammar, extraItemRenderer) {\n const renderer = new HtmlRenderer(extraItemRenderer);\n if (NullChecker.isNullOrEmpty(extraGrammar)) {\n return this.parse(input, renderer);\n }\n return this.parse(input, getGrammar(extraGrammar), renderer);\n }\n /**\n * Parses Markdown `input` and returns its token tree as a plain (JSON-serializable) array, useful for inspection/debugging.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @returns The parsed token tree.\n */\n tokenize(input, extraGrammar) {\n const json = this.parse(input, getGrammar(extraGrammar), new TokenRenderer());\n return JSON.parse(json);\n }\n parse(input, grammarOrRenderer = getGrammar(), renderer = new HtmlRenderer()) {\n // line endings are normalized: the grammar expects `\\n` (`.` doesn't match `\\r`: CRLF paragraphs would split by line)\n const normalized = (input ?? '').replace(/\\r\\n?/g, '\\n');\n if (isRenderer(grammarOrRenderer)) {\n const grammar = getGrammar();\n return super.parse(normalized, grammar, grammarOrRenderer);\n }\n return super.parse(normalized, grammarOrRenderer, renderer);\n }\n}\n//}\n", "//namespace Pacem.Compile {\n/** After these, a `/` starts a division (not a regular expression literal). */\nconst DIVISION_AFTER_TYPES = ['identifier', 'number', 'string', 'regex'];\nconst DIVISION_AFTER_TEXTS = [')', ']', '}', 'this', 'super', 'null', 'undefined', 'true', 'false', '++', '--'];\nconst JAVASCRIPT_KEYWORDS = [\n // JavaScript\n 'async', 'await', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do',\n 'else', 'enum', 'export', 'extends', 'false', 'finally', 'for', 'from', 'function', 'get', 'if', 'import', 'in',\n 'instanceof', 'let', 'new', 'null', 'of', 'return', 'set', 'static', 'super', 'switch', 'this', 'throw', 'true',\n 'try', 'typeof', 'undefined', 'var', 'void', 'while', 'with', 'yield',\n // TypeScript\n 'abstract', 'accessor', 'any', 'as', 'asserts', 'bigint', 'boolean', 'declare', 'implements', 'infer',\n 'interface', 'is', 'keyof', 'module', 'namespace', 'never', 'number', 'object', 'override', 'package', 'private',\n 'protected', 'public', 'readonly', 'satisfies', 'string', 'symbol', 'type', 'unique', 'unknown'\n];\n/** Rules shared by every \"code\" state (top level, template expressions, nested braces). */\nconst CODE_RULES = [\n { match: String.raw `/\\*\\*(?!/)[\\s\\S]*?(?:\\*/|$)`, type: 'doc-comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `\\r\\n|[\\r\\n\u2028\u2029]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\u00A0\uFEFF]+`, type: 'space' },\n { match: '`', type: 'string', push: 'template' },\n { match: String.raw `\"(?:\\\\[\\s\\S]|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `'(?:\\\\[\\s\\S]|[^'\\\\\\r\\n])*'?`, type: 'string' },\n {\n // regular expression literal (only where a division can't be)\n match: String.raw `/(?![*/])(?:\\\\.|\\[(?:\\\\.|[^\\]\\\\\\r\\n])*\\]|[^/\\\\\\[\\r\\n])+/[a-z]*`, type: 'regex',\n when: { previousNotTypes: DIVISION_AFTER_TYPES, previousNotTexts: DIVISION_AFTER_TEXTS }\n },\n { match: String.raw `0[xX][\\da-fA-F_]+n?|0[bB][01_]+n?|0[oO][0-7_]+n?|(?:\\d[\\d_]*\\.?[\\d_]*|\\.\\d[\\d_]*)(?:[eE][+-]?\\d[\\d_]*)?n?`, type: 'number' },\n { match: String.raw `#?[A-Za-z_$\u00A0-\uFFFF][\\w$\u00A0-\uFFFF]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `\\?\\.(?!\\d)|\\.\\.\\.|[;,.]`, type: 'punctuation' },\n { match: String.raw `>>>=|<<=|>>=|>>>|\\*\\*=|&&=|\\|\\|=|\\?\\?=|===|!==|=>|\\*\\*|\\+\\+|--|<<|>>|&&|\\|\\||\\?\\?|[-+*/%&|^<>!=]=?|[~?:@]`, type: 'operator' },\n];\n/**\n * JavaScript vocabulary, TypeScript superset: comments (JSDoc as `doc-comment`), strings, template literals with nested\n * `${\u2026}` expressions, regular expression literals (told from divisions by the previous significant token), numbers\n * (hex/binary/octal/BigInt/separators), identifiers (`#private` included), keywords (JS + TS, not after `.`/`?.`),\n * brackets, punctuation and operators.\n */\nexport const JavaScriptSyntax = {\n name: 'javascript',\n aliases: ['js', 'mjs', 'cjs', 'jsx', 'typescript', 'ts', 'tsx', 'script', 'ecmascript'],\n lexical: {\n start: 'root',\n states: {\n root: CODE_RULES,\n template: [\n { match: '`', type: 'string', pop: true },\n { match: String.raw `\\$\\{`, type: 'punctuation', push: 'templateExpression' },\n { match: String.raw `(?:\\\\[\\s\\S]|\\$(?!\\{)|[^\\\\` + '`' + String.raw `$])+`, type: 'string' },\n ],\n templateExpression: [\n { match: String.raw `\\}`, type: 'punctuation', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n braces: [\n { match: String.raw `\\}`, type: 'bracket', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n },\n keywords: { keyword: JAVASCRIPT_KEYWORDS },\n keywordExceptAfter: ['.', '?.'],\n }\n};\n", "//namespace Pacem.Compile {\n/** Member accesses (`obj.#x`, `obj?.x`) are never Pacem binding tokens. */\nconst NOT_AFTER_MEMBER_ACCESS = { previousNotTexts: ['.', '?.'] };\n/**\n * Pacem binding-expression vocabulary (the content of `{{ \u2026 }}` attributes): JavaScript plus the special tokens\n * resolved by core's `Expression`:\n * - `binding-host`: `:host` (followed by `.`);\n * - `binding-host-property`: `::name`;\n * - `binding-item`: `^item`, `^^item`, \u2026 (repeater item, n levels up);\n * - `binding-index`: `^index`, `^^index`, \u2026;\n * - `binding-element`: `#id` (element reference);\n * - `binding-this`: `$this` / `this` (the bound element).\n */\nexport const PacemBindingSyntax = {\n name: 'pacem-binding',\n aliases: ['pacem', 'binding'],\n extends: 'javascript',\n lexical: {\n states: {\n root: [\n { match: String.raw `:host(?=\\.)`, type: 'binding-host', when: NOT_AFTER_MEMBER_ACCESS },\n { match: String.raw `::[A-Za-z_$][\\w$]*`, type: 'binding-host-property' },\n { match: String.raw `\\^+item(?![\\w$])`, type: 'binding-item' },\n { match: String.raw `\\^+index(?![\\w$])`, type: 'binding-index' },\n { match: String.raw `#[A-Za-z_][\\w]*`, type: 'binding-element', when: NOT_AFTER_MEMBER_ACCESS },\n { match: String.raw `\\$?this(?![\\w$])`, type: 'binding-this', when: NOT_AFTER_MEMBER_ACCESS },\n ]\n }\n }\n};\n", "//namespace Pacem.Compile {\nconst NEWLINE_RULE = { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' };\n/** Attribute list of an opening tag. */\nconst ATTRIBUTE_RULES = [\n NEWLINE_RULE,\n { match: String.raw `[ \\t\\f]+`, type: 'space' },\n { match: '\"', type: 'string', push: 'doubleQuoted' },\n { match: \"'\", type: 'string', push: 'singleQuoted' },\n { match: String.raw `[^\\s=/>\"']+`, type: 'attribute' },\n { match: '=', type: 'operator' },\n { match: '/', type: 'punctuation' },\n];\n/** A Pacem binding (`{{ \u2026 }}`) inside an attribute value: embeds the `pacem-binding` vocabulary up to `}}`. */\nconst BINDING_RULES = [\n { match: String.raw `\\{\\{`, type: 'punctuation', embed: 'pacem-binding', until: String.raw `\\}\\}` },\n { match: String.raw `\\}\\}`, type: 'punctuation' },\n];\n/**\n * Markup (HTML/XML) vocabulary: comments, doctypes/CDATA, tags (`tag`/`tagname`), attributes, quoted values (Pacem\n * `{{ \u2026 }}` bindings tokenized with `pacem-binding`), entities, text, and `<script>` bodies tokenized with `javascript`.\n */\nexport const MarkupSyntax = {\n name: 'markup',\n aliases: ['html', 'htm', 'xml', 'xhtml', 'svg'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `<!--[\\s\\S]*?(?:-->|$)`, type: 'comment' },\n { match: String.raw `<![^>]*>?`, type: 'tag' },\n { match: String.raw `(<\\/)([\\w:.-]+)(\\s*>?)`, type: ['tag', 'tagname', 'tag'] },\n { match: String.raw `(<)(script)(?![\\w:.-])`, flags: 'i', type: ['tag', 'tagname'], push: 'scriptTag' },\n { match: String.raw `(<)([\\w:.-]+)`, type: ['tag', 'tagname'], push: 'tag' },\n { match: String.raw `&(?:#\\d+|#[xX][\\da-fA-F]+|\\w+);`, type: 'entity' },\n NEWLINE_RULE,\n { match: String.raw `[^<&\\r\\n]+`, type: 'text' },\n ],\n tag: [\n { match: String.raw `/?>`, type: 'tag', pop: true },\n { include: 'attributes' },\n ],\n scriptTag: [\n { match: '/>', type: 'tag', pop: true },\n // the script body is tokenized as JavaScript, up to the closing tag\n { match: '>', type: 'tag', pop: true, embed: 'javascript', until: String.raw `<\\/script` },\n { include: 'attributes' },\n ],\n attributes: ATTRIBUTE_RULES,\n doubleQuoted: [\n { match: '\"', type: 'string', pop: true },\n ...BINDING_RULES,\n { match: String.raw `(?:[^\"{}]|\\{(?!\\{)|\\}(?!\\}))+`, type: 'string' },\n ],\n singleQuoted: [\n { match: \"'\", type: 'string', pop: true },\n ...BINDING_RULES,\n { match: String.raw `(?:[^'{}]|\\{(?!\\{)|\\}(?!\\}))+`, type: 'string' },\n ],\n },\n insignificant: ['space', 'newline', 'comment', 'text']\n }\n};\n", "//namespace Pacem.Compile {\nconst CSHARP_KEYWORDS = [\n 'abstract', 'add', 'alias', 'and', 'args', 'as', 'ascending', 'async', 'await', 'base', 'bool', 'break', 'by',\n 'byte', 'case', 'catch', 'char', 'checked', 'class', 'const', 'continue', 'decimal', 'default', 'delegate',\n 'descending', 'do', 'double', 'dynamic', 'else', 'enum', 'equals', 'event', 'explicit', 'extern', 'false', 'file',\n 'finally', 'fixed', 'float', 'for', 'foreach', 'from', 'get', 'global', 'goto', 'group', 'if', 'implicit', 'in',\n 'init', 'int', 'interface', 'internal', 'into', 'is', 'join', 'let', 'lock', 'long', 'managed', 'nameof',\n 'namespace', 'new', 'nint', 'not', 'notnull', 'nuint', 'null', 'object', 'on', 'operator', 'or', 'orderby', 'out',\n 'override', 'params', 'partial', 'private', 'protected', 'public', 'readonly', 'record', 'ref', 'remove',\n 'required', 'return', 'sbyte', 'scoped', 'sealed', 'select', 'set', 'short', 'sizeof', 'stackalloc', 'static',\n 'string', 'struct', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'uint', 'ulong', 'unchecked', 'unmanaged',\n 'unsafe', 'ushort', 'using', 'value', 'var', 'virtual', 'void', 'volatile', 'when', 'where', 'while', 'with',\n 'yield'\n];\n/** Rules shared by every \"code\" state (top level, interpolations, nested braces). */\nconst CODE_RULES = [\n { match: String.raw `///[^\\r\\n]*`, type: 'doc-comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n // preprocessor directives, at the beginning of a line\n { match: String.raw `(?<=^[ \\t]*|[\\r\\n][ \\t]*)#[ \\t]*[a-z]+[^\\r\\n]*`, type: 'preprocessor' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\\u00A0\\uFEFF]+`, type: 'space' },\n // raw string literals (\"\"\"\u2026\"\"\", optionally interpolated)\n { match: String.raw `\\$*(\"{3,})[\\s\\S]*?\\1`, type: 'string' },\n { match: String.raw `\\$@\"|@\\$\"`, type: 'string', push: 'interpolatedVerbatim' },\n { match: String.raw `\\$\"`, type: 'string', push: 'interpolated' },\n { match: String.raw `@\"(?:[^\"]|\"\")*\"?`, type: 'string' },\n { match: String.raw `\"(?:\\\\.|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `0[xX][\\da-fA-F_]+[uUlL]*|0[bB][01_]+[uUlL]*|(?:\\d[\\d_]*\\.?[\\d_]*|\\.\\d[\\d_]*)(?:[eE][+-]?\\d+)?[fFdDmMuUlL]*`, type: 'number' },\n { match: String.raw `@?[A-Za-z_\\u00A0-\\uFFFF][\\w\\u00A0-\\uFFFF]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `\\?\\.|::|[;,.]`, type: 'punctuation' },\n { match: String.raw `\\?\\?=|<<=|>>>=|>>=|>>>|=>|==|!=|<=|>=|&&|\\|\\||\\?\\?|\\+\\+|--|->|<<|[-+*/%&|^<>!=]=?|[~?:]`, type: 'operator' },\n];\n/**\n * C# vocabulary: XML doc comments (`doc-comment`), comments, preprocessor directives, strings (regular, verbatim, raw,\n * interpolated with nested `{\u2026}` expressions), chars, numbers (with suffixes), identifiers (`@verbatim` included),\n * keywords (contextual ones included, not after `.`/`?.`), brackets, punctuation and operators.\n */\nexport const CSharpSyntax = {\n name: 'csharp',\n aliases: ['cs', 'c#', 'c-sharp', 'dotnet'],\n lexical: {\n start: 'root',\n states: {\n root: CODE_RULES,\n interpolated: [\n { match: '\"', type: 'string', pop: true },\n { match: String.raw `\\{\\{|\\}\\}`, type: 'string' },\n { match: String.raw `\\{`, type: 'punctuation', push: 'interpolation' },\n { match: String.raw `(?:\\\\.|[^\"\\\\{}\\r\\n])+`, type: 'string' },\n ],\n interpolatedVerbatim: [\n { match: '\"\"', type: 'string' },\n { match: '\"', type: 'string', pop: true },\n { match: String.raw `\\{\\{|\\}\\}`, type: 'string' },\n { match: String.raw `\\{`, type: 'punctuation', push: 'interpolation' },\n { match: String.raw `[^\"{}]+`, type: 'string' },\n ],\n interpolation: [\n { match: String.raw `\\}`, type: 'punctuation', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n braces: [\n { match: String.raw `\\}`, type: 'bracket', pop: true },\n { match: String.raw `\\{`, type: 'bracket', push: 'braces' },\n { include: 'root' },\n ],\n },\n keywords: { keyword: CSHARP_KEYWORDS },\n keywordExceptAfter: ['.', '?.'],\n }\n};\n", "//namespace Pacem.Compile {\nconst C_KEYWORDS = [\n // C\n 'auto', 'break', 'case', 'char', 'const', 'continue', 'default', 'do', 'double', 'else', 'enum', 'extern', 'float',\n 'for', 'goto', 'if', 'inline', 'int', 'long', 'register', 'restrict', 'return', 'short', 'signed', 'sizeof',\n 'static', 'struct', 'switch', 'typedef', 'union', 'unsigned', 'void', 'volatile', 'while', 'bool', 'true', 'false',\n 'NULL', '_Bool', '_Complex', '_Imaginary', '_Alignas', '_Alignof', '_Atomic', '_Generic', '_Noreturn',\n '_Static_assert', '_Thread_local',\n // C++\n 'alignas', 'alignof', 'and', 'and_eq', 'asm', 'bitand', 'bitor', 'catch', 'char8_t', 'char16_t', 'char32_t',\n 'class', 'co_await', 'co_return', 'co_yield', 'compl', 'concept', 'consteval', 'constexpr', 'constinit',\n 'const_cast', 'decltype', 'delete', 'dynamic_cast', 'explicit', 'export', 'final', 'friend', 'mutable',\n 'namespace', 'new', 'noexcept', 'not', 'not_eq', 'nullptr', 'operator', 'or', 'or_eq', 'override', 'private',\n 'protected', 'public', 'reinterpret_cast', 'requires', 'static_assert', 'static_cast', 'template', 'this',\n 'thread_local', 'throw', 'try', 'typeid', 'typename', 'using', 'virtual', 'wchar_t', 'xor', 'xor_eq'\n];\n/**\n * C/C++ vocabulary: comments (`/** \u2026 *\\/` and `///` as `doc-comment`), preprocessor directives (with their `<header>`),\n * strings (raw `R\"x(\u2026)x\"` and prefixed ones included), chars, numbers (with suffixes/separators), identifiers, keywords\n * (C and C++), brackets, punctuation and operators.\n */\nexport const CSyntax = {\n name: 'c',\n aliases: ['cpp', 'c++', 'cc', 'cxx', 'h', 'hpp', 'hxx', 'objc'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `/\\*\\*(?!/)[\\s\\S]*?(?:\\*/|$)|///[^\\r\\n]*`, type: 'doc-comment' },\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n // preprocessor directives, at the beginning of a line (line continuations included)\n { match: String.raw `(?<=^[ \\t]*|[\\r\\n][ \\t]*)#[ \\t]*\\w+(?:\\\\\\r?\\n|[^\\r\\n])*`, type: 'preprocessor' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v]+`, type: 'space' },\n { match: String.raw `(?:u8|u|U|L)?R\"([^()\\\\\\s]{0,16})\\([\\s\\S]*?\\)\\1\"`, type: 'string' },\n { match: String.raw `(?:u8|u|U|L)?\"(?:\\\\[\\s\\S]|[^\"\\\\\\r\\n])*\"?`, type: 'string' },\n { match: String.raw `(?:u8|u|U|L)?'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `0[xX][\\da-fA-F']+[uUlL]*|0[bB][01']+[uUlL]*|(?:\\d[\\d']*\\.?[\\d']*|\\.\\d[\\d']*)(?:[eEpP][+-]?\\d+)?[fFlLuU]*`, type: 'number' },\n { match: String.raw `[A-Za-z_][\\w]*`, type: 'identifier' },\n { match: String.raw `[()\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `::|\\.\\.\\.|->\\*?|\\.\\*?|[;,]`, type: 'punctuation' },\n { match: String.raw `<=>|<<=|>>=|<<|>>|\\+\\+|--|&&|\\|\\||[-+*/%&|^<>!=]=?|[~?:#]`, type: 'operator' },\n ],\n },\n keywords: { keyword: C_KEYWORDS },\n keywordExceptAfter: ['.', '->', '::'],\n }\n};\n", "//namespace Pacem.Compile {\n/**\n * JSON vocabulary (JSONC and JSON5-ish tolerant: comments, single quotes and trailing commas are recognized):\n * object keys are `attribute`s, values `string`/`number`/`keyword` (`true`, `false`, `null`).\n */\nexport const JsonSyntax = {\n name: 'json',\n aliases: ['jsonc', 'json5', 'webmanifest'],\n lexical: {\n start: 'root',\n states: {\n root: [\n { match: String.raw `/\\*[\\s\\S]*?(?:\\*/|$)`, type: 'comment' },\n { match: String.raw `//[^\\r\\n]*`, type: 'comment' },\n { match: String.raw `\\r\\n|[\\r\\n]`, type: 'newline' },\n { match: String.raw `[ \\t\\f\\v\u00A0\uFEFF]+`, type: 'space' },\n // keys: strings followed by a colon\n { match: String.raw `(?:\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*')(?=\\s*:)`, type: 'attribute' },\n { match: String.raw `\"(?:\\\\.|[^\"\\\\\\r\\n])*\"?|'(?:\\\\.|[^'\\\\\\r\\n])*'?`, type: 'string' },\n { match: String.raw `-?(?:0[xX][\\da-fA-F]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?)|-?Infinity|NaN`, type: 'number' },\n { match: String.raw `[A-Za-z_$][\\w$]*`, type: 'identifier' },\n { match: String.raw `[\\[\\]{}]`, type: 'bracket' },\n { match: String.raw `[:,]`, type: 'punctuation' },\n ],\n },\n keywords: { keyword: ['true', 'false', 'null'] },\n }\n};\n", "import { Syntaxes } from './registry';\nimport { JavaScriptSyntax } from './vocabularies/javascript';\nimport { PacemBindingSyntax } from './vocabularies/pacem-binding';\nimport { MarkupSyntax } from './vocabularies/markup';\nimport { CSharpSyntax } from './vocabularies/csharp';\nimport { CSyntax } from './vocabularies/c';\nimport { JsonSyntax } from './vocabularies/json';\n//namespace Pacem.Compile {\n/** The built-in vocabularies, one per {@link SyntaxName} (enforced by the type). */\nconst BUILTIN_SYNTAXES = {\n 'javascript': JavaScriptSyntax,\n 'pacem-binding': PacemBindingSyntax,\n 'markup': MarkupSyntax,\n 'csharp': CSharpSyntax,\n 'c': CSyntax,\n 'json': JsonSyntax\n};\n// available as soon as the compile module loads\nfor (let name in BUILTIN_SYNTAXES) {\n const syntax = BUILTIN_SYNTAXES[name];\n Syntaxes.register(syntax);\n}\nexport { JavaScriptSyntax, PacemBindingSyntax, MarkupSyntax, CSharpSyntax, CSyntax, JsonSyntax };\n"],
5
+ "mappings": ";;;;;;;AAAA,OAAO,UAAU,YAAY,SAAU,OAAO,YAAY,IAAI;AAC1D,QAAM,QAAQ,OAAO,MAAM,SAAS,EAAE;AACtC,SAAO,OAAQ,QAAQ,SAAU,OAAQ,QAAQ;AAErD;AACA,OAAO,UAAU,WAAW,SAAU,YAAY,IAAI;AAClD,SAAO,WAAW,KAAK,QAAQ,SAAS,CAAC;AAC7C;AACA,OAAO,UAAU,QAAQ,SAAU,KAAK,KAAK;AACzC,MAAI,QAAQ;AACZ,MAAI,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC5B,YAAQ,KAAK,IAAI,OAAO,GAAG;AAAA,EAC/B;AACA,MAAI,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG;AAC5B,YAAQ,KAAK,IAAI,OAAO,GAAG;AAAA,EAC/B;AACA,SAAO;AACX;AACA,OAAO,UAAU,WAAW,WAAY;AACpC,MAAI,WAAW;AACf,MAAI,OAAO;AACX,MAAI,KAAK;AACT,SAAO,QAAQ,GAAG;AACd,QAAI,MAAM,OAAO;AACjB,SAAK,SAAS,OAAO,GAAG,IAAI;AAC5B,WAAO,KAAK,MAAM,OAAO,EAAE;AAAA,EAC/B;AACA,SAAO;AACX;AACA,OAAO,UAAU,WAAW,WAAY;AACpC,SAAO,KAAK,SAAS,EAAE;AAC3B;;;AC9BA,IAAM,oBAAoB;AAEnB,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOf,OAAO,MAAM,OAAO;AAChB,QAAI;AACJ,QAAI,OAAO,UAAU,UAAU;AAC3B,UAAI,kBAAkB,KAAK,KAAK;AAC5B,YAAI,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA;AAE/B,YAAI,KAAK,MAAM,KAAK;AACxB,aAAO,IAAI,KAAK,CAAC;AAAA,IACrB,WACS,OAAO,UAAU,UAAU;AAChC,aAAO,IAAI,KAAK,KAAK;AAAA,IACzB;AAEI,aAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,MAAM;AACpB,WAAU,OAAO,MAAM,KAAO,OAAO,QAAQ,KAAQ,OAAO,QAAQ;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY,MAAM,OAAO;AAC5B,WAAO,CAAC,IAAK,OAAM,WAAW,IAAI,IAAI,KAAK,IAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO,MAAM;AAChB,WAAO,gBAAgB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,UAAU;AACtB,WAAO,IAAI,KAAK,SAAS,YAAY,GAAG,SAAS,SAAS,GAAG,SAAS,QAAQ,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAU,OAAO,OAAO;AAC3B,QAAI,IAAI,MAAM,QAAQ,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,QAAQ,EAAE,SAAS,IAAI,OAAO,QAAQ;AACpF,WAAO,QAAQ,GAAG;AACd,eAAS;AACT;AAAA,IACJ;AACA,MAAE,QAAQ,CAAC;AACX,MAAE,SAAS,QAAQ,EAAE;AACrB,MAAE,YAAY,EAAE,YAAY,IAAI,QAAQ,KAAK,MAAM,QAAQ,EAAE,CAAC;AAC9D,MAAE,QAAQ,KAAK,IAAI,GAAG,OAAM,YAAY,EAAE,YAAY,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACvE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,OAAO,OAAO;AACzB,WAAO,IAAI,KAAK,MAAM,QAAQ,IAAI,QAAQ,KAAQ;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAY,OAAO,KAAK;AAC3B,YAAQ,IAAI,QAAQ,IAAI,MAAM,QAAQ,KAAK;AAAA,EAC/C;AACJ;;;ACxFO,IAAM,cAAN,MAAM,aAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB,OAAO,OAAO,GAAG;AACb,WAAO,MAAM,QAAQ,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAQ,GAAG;AACd,QAAI;AACA,aAAQ,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,KACjC,OAAO,MAAM,YAAY,MAAM,MAC/B,OAAO,MAAM,YAAY,OAAO,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,aAAa,WAAW,EAAE,aAAa,8BAA8B,EAAE,aAAa;AAAA,IAC9K,SACO,GAAG;AAEN,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,GAAG;AACpB,WAAO,aAAY,OAAO,CAAC,KAAK,aAAY,QAAQ,CAAC;AAAA,EACzD;AACJ;;;ACnCA,MAAM,UAAU,WAAW,WAAY;AACnC,SAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;AACnC;AACA,MAAM,UAAU,QAAQ,SAAU,OAAO;AACrC,QAAM,YAAY,YAAY,cAAc,IAAI,GAAG,YAAY,YAAY,cAAc,KAAK;AAC9F,MAAI,aAAa,WAAW;AACxB,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,WAAW;AACX,WAAO,KAAK,MAAM;AAAA,EACtB;AACA,MAAI,WAAW;AACX,WAAO,MAAM,MAAM;AAAA,EACvB;AACA,SAAO,KAAK,OAAO,KAAK,EAAE,SAAS;AACvC;AACA,MAAM,UAAU,aAAa,SAAU,MAAM,IAAI;AAC7C,QAAM,eAAe;AACrB,MAAI,MAAM;AACV,MAAI,OAAO,KAAK,OAAO,IAAI;AACvB,UAAM,IAAI,MAAM,YAAY;AAChC,MAAI,KAAK,KAAK,KAAK,IAAI;AACnB,UAAM,IAAI,MAAM,YAAY;AAChC,MAAI;AAAA,IAAO;AAAA,IAAI;AAAA;AAAA,IAA8D,MAAM,UAAU,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,EAAC;AAChI;AACA,MAAM,UAAU,gBAAgB,SAAU,OAAO;AAC7C,MAAI,SAAS,QAAQ,KAAK,WAAW,MAAM,QAAQ;AAC/C,WAAO;AAAA,EACX;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,QAAI,KAAK,CAAC,MAAM,MAAM,CAAC,GAAG;AACtB,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AACA,MAAM,UAAU,YAAY,SAAU,OAAO;AACzC,MAAI,SAAS,MAAM;AACf,UAAM;AAAA,EACV;AACA,QAAM,SAAS,MAAM;AACrB,MAAI,UAAU,KAAK,WAAW,MAAM;AACpC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,KAAK,SAAS,GAAG;AACjB,UAAI,KAAK,CAAC,MAAM,MAAM;AAClB,aAAK,CAAC,IAAI;AACV,kBAAU;AAAA,MACd;AAAA,IACJ,OACK;AACD,YAAM,UAAU,KAAK,MAAM,MAAM,CAAC,IAAI,CAAC;AACvC,gBAAU;AAAA,IACd;AAAA,EACJ;AACA,MAAI,SAAS;AAET,SAAK,OAAO,MAAM;AAAA,EACtB;AACJ;;;AC5DA,SAAS,cAAc,OAAO;AAC1B,SAAQ,SAAS,QACb,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,KAAK,MACnB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB;AAC/D;AACA,SAAS,UAAU,QAAQ,QAAQ;AAC/B,QAAM,SAAS;AACf,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACnC,UAAM,cAAc,OAAO,GAAG;AAC9B,UAAM,cAAc,OAAO,GAAG;AAC9B,QAAI,cAAc,WAAW,GAAG;AAK5B,aAAO,GAAG,IAAI,UAAU,cAAc,WAAW,IAAI,cAAc,CAAC,GAAG,WAAW;AAAA,IACtF,WACS,MAAM,QAAQ,WAAW,GAAG;AACjC,aAAO,GAAG,IAAI,YAAY,MAAM;AAAA,IACpC,OACK;AACD,aAAO,GAAG,IAAI;AAAA,IAClB;AAAA,EACJ;AACA,SAAO;AACX;AAEO,IAAM,aAAN,MAAiB;AAAA,EACpB,cAAc;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,MAAM,QAAQ,QAAQ;AACzB,eAAY,WAAW,OAAO,MAAM,CAAC;AACrC,WAAO,UAAU,QAAQ,MAAM;AAAA,EACnC;AACJ;;;ACxCO,IAAM,SAAN,MAAa;AAAA,EAChB,OAAO,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC9B,QAAI,IAAI;AACR,QAAI,YAAY,OAAO,GAAG,GAAG;AACzB,YAAM,QAAQ;AACd,YAAM;AAAA,IACV;AACA,UAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,UAAM,SAAS,CAAC;AAChB,QAAI,OAAO,GAAG;AAEV,aAAO,OAAO,SAAS,OAAO;AAC1B,eAAO,KAAK,EAAE,SAAS,CAAC;AACxB,aAAK;AAAA,MACT;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,QAAQ,MAAM;AAC1B,QAAI,YAAY,cAAc,MAAM,GAAG;AACnC,aAAO,CAAC;AAAA,IACZ;AACA,QAAI,QAAQ,KAAK,OAAO,MAAM,GAAG;AAC7B,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACxD;AACA,UAAM,SAAS,KAAK,KAAK,OAAO,SAAS,IAAI;AAC7C,WAAO,MAAM,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,UAAU;AACxC,YAAM,QAAQ,QAAQ,MAAM,MAAM,QAAQ;AAC1C,aAAO,OAAO,MAAM,OAAO,GAAG;AAAA,IAClC,CAAC;AAAA,EACL;AACJ;;;ACtCO,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,OAAO,cAAc,MAAM;AACvB,WAAO,IAAI,QAAQ,CAAC,SAAS,MAAM;AAC/B,YAAM,IAAI,IAAI,WAAW;AACzB,QAAE,SAAS,CAAC,MAAM;AAAE,gBAAQ,EAAE,OAAO,MAAM;AAAA,MAAG;AAC9C,QAAE,cAAc,IAAI;AAAA,IACxB,CAAC;AAAA,EACL;AAAA,EACA,OAAO,iBAAiB,MAAM;AAC1B,QAAI,IAAI,KAAK;AACb,UAAM,QAAQ,IAAI,WAAW,CAAC;AAC9B,WAAO,KAAK;AACR,YAAM,CAAC,IAAI,KAAK,WAAW,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,MAAM,SAAS;AAC/B,UAAM,QAAQ,OAAM,iBAAiB,KAAK,IAAI,CAAC;AAC/C,WAAO,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,cAAc,SAAS;AAC1B,UAAM,OAAO,QAAQ,QAAQ,GAAG;AAChC,QAAI,SAAS,IAAI;AACb,aAAO,OAAM,aAAa,OAAO;AAAA,IACrC,OACK;AACD,YAAM,OAAO,QAAQ,UAAU,OAAO,CAAC,GAAG,OAAO,QAAQ,UAAU,GAAG,IAAI;AAC1E,YAAM,OAAO,KAAK,MAAM,SAAS,EAAE,CAAC;AACpC,aAAO,OAAM,aAAa,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,IAClD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,WAAW,MAAM,UAAU;AACpC,UAAM,SAAS,MAAM,KAAK,YAAY;AACtC,UAAM,UAAU,IAAI,YAAY,UAAU,EAAE,OAAO,MAAM,CAAC;AAC1D,WAAO,QAAQ,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,OAAO,WAAW,SAAS,OAAO,cAAc,UAAU,SAAS,KAAK,YAAY,IAAM;AACtF,QAAI,eAAe,QAAQ,YAAY;AACvC,UAAM,WAAW,MAAM,GAAG,IAAI,YAAY,YAAY;AACtD,YAAQ,cAAc;AAAA;AAAA;AAAA;AAAA,MAIlB,KAAK,SAAS;AACV,cAAM,UAAU,IAAI,YAAY;AAChC,cAAM,QAAQ,QAAQ,OAAO,OAAO;AACpC,cAAM,QAAQ,MACR,CAAC,IAAI,WAAW,CAAC,KAAM,KAAM,GAAI,CAAC,GAAG,KAAK,IAC1C,CAAC,KAAK;AACZ,eAAO,IAAI,KAAK,OAAO,EAAE,MAAM,SAAS,EAAE,CAAC;AAAA,MAC/C;AAAA;AAAA;AAAA;AAAA,MAIA,KAAK;AAED,uBAAe;AACf,gBAAQ;AAAA,MACZ,KAAK;AAAA,MACL,KAAK,YAAY;AACb,cAAM,eAAe,iBAAiB;AACtC,cAAM,SAAS,MAAM,IAAI;AACzB,cAAM,SAAS,IAAI,aAAa,QAAQ,SAAS,UAAU,CAAC;AAC5D,cAAM,OAAO,IAAI,SAAS,MAAM;AAChC,YAAI,KAAK;AACL,eAAK,UAAU,GAAG,OAAQ,YAAY;AAAA,QAC1C;AACA,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,eAAK,WAAW,IAAI,UAAU,GAAG,QAAQ,WAAW,CAAC,GAAG,YAAY;AAAA,QACxE;AACA,eAAO,IAAI,KAAK,CAAC,MAAM,GAAG;AAAA,UACtB,MAAM,SAAS;AAAA,QACnB,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA,MAIA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,UAAU;AACX,cAAM,WAAW,iBAAiB,UAAU,MAAO;AACnD,cAAM,SAAS,IAAI,WAAW,QAAQ,MAAM;AAC5C,cAAM,QAAQ,YAAY;AAC1B,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,gBAAM,OAAO,QAAQ,WAAW,CAAC;AACjC,cAAI,OAAO,UAAU;AACjB,gBAAI,OAAO;AACP,qBAAO,CAAC,IAAI;AAAA,YAChB,OACK;AACD,oBAAM,IAAI,MAAM,cAAc,QAAQ,CAAC,CAAC,0BAA0B,OAAO,GAAG;AAAA,YAChF;AAAA,UACJ,OACK;AACD,mBAAO,CAAC,IAAI;AAAA,UAChB;AAAA,QACJ;AACA,eAAO,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,SAAS,EAAE,CAAC;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA,MAIA;AACI,cAAM,IAAI,MAAM,aAAa,OAAO,gFACM;AAAA,IAClD;AAAA,EACJ;AACJ;;;ACjIA,IAAM,iBAAiB,CAAC,WAAW,UAAU;AACzC,QAAMA,SAAQ,UAAU,MAAM,KAAK;AACnC,SAAOA,SAAQA,OAAM,CAAC,IAAI;AAC9B;AAOO,SAAS,OAAO,YAAY,UAAU,WAAW;AACpD,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,MAAI,aAAa,KAAK,SAAS,GAAG;AAC9B,cAAU;AAAA,EACd,WACS,OAAO,KAAK,SAAS,GAAG;AAC7B,cAAU;AAAA,EACd,WACS,aAAa,KAAK,SAAS,GAAG;AACnC,cAAU;AAAA,EACd,WACS,YAAY,KAAK,SAAS,GAAG;AAClC,cAAU;AAAA,EACd,WACS,iBAAiB,KAAK,SAAS,KAAK,CAAC,aAAa,KAAK,SAAS,GAAG;AACxE,cAAU;AAAA,EACd,WACS,kBAAkB,KAAK,SAAS,KAAK,CAAC,aAAa,KAAK,SAAS,GAAG;AACzE,cAAU;AAAA,EACd,WACS,gBAAgB,KAAK,SAAS,KAAK,CAAC,8CAA8C,KAAK,SAAS,GAAG;AACxG,cAAU;AAAA,EACd,WACS,UAAU,KAAK,SAAS,KAAK,CAAC,+DAA+D,KAAK,SAAS,GAAG;AACnH,cAAU;AAAA,EACd,WACS,aAAa,KAAK,SAAS,GAAG;AACnC,cAAU;AAAA,EACd;AAEA,UAAQ,SAAS;AAAA,IACb,KAAK;AACD,gBAAU,eAAe,WAAW,yBAAyB;AAC7D;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,oCAAoC;AACxE;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,yBAAyB;AAC7D;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,wBAAwB;AAC5D;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,6BAA6B;AACjE;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,4BAA4B;AAChE;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,sBAAsB;AAC1D;AAAA,IACJ,KAAK;AACD,gBAAU,eAAe,WAAW,yBAAyB;AAC7D;AAAA,IACJ,KAAK,MAAM;AACP,YAAM,iBAAiB,eAAe,WAAW,uBAAuB;AAGxE,gBAAU,iBAAiB,GAAG,WAAW,cAAc,IAAI,CAAG,KAAK;AACnE;AAAA,IACJ;AAAA,IACA;AACI,gBAAU;AACV;AAAA,EACR;AACA,SAAO,EAAE,MAAM,SAAS,QAAQ;AACpC;;;AC/EA,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,oBAAoB;AAI1B,SAAS,MAAM,KAAK;AAChB,QAAM,OAAO,CAAC,YAAY,cAAc,GAAG,KAAK,OAAO,QAAQ,YAAY,OAAO,OAAO,OAAO,OAAO,OAAO,OACvG,OAAO,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM;AAElF,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,MAAM;AACV,SAAO,IAAI,KAAK,KAAK,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK,IAAI,KAAK;AAClC;AACA,SAAS,MAAM,KAAK;AAChB,QAAM,OAAO,CAAC,YAAY,cAAc,GAAG,KAAK,OAAO,QAAQ,YAAY,OAAO,OAAO,OAAO,OAAO,OAAO,OACvG,OAAO,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM;AAElF,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,MAAM;AACV,SAAO,IAAI,KAAK,KAAK,IAAI,KAAK,OACvB,IAAI,KAAK,KAAK,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK,IAAI,KAAK;AAClC;AACA,SAAS,UAAU,KAAK;AACpB,QAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI;AACpC,QAAM,IAAI,OAAM,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AACpD,SAAO,EAAE,MAAM,GAAG,CAAC;AACvB;AACA,IAAM,WAAW;AAAA,EACb,kBAAkB,CAAC,MAAM;AAErB,WAAO,KAAK,UAAU,IAAI,QAAS,KAAK,KAAK,IAAI,SAAQ,OAAO,GAAG;AAAA,EACvE;AAAA,EACA,qBAAqB,CAAC,MAAM;AAExB,WAAO,KAAK,SAAU,IAAI,QAAS,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;AAAA,EACvE;AAAA,EACA,WAAW,CAAC,QAAQ;AAChB,UAAM,SAAS,EAAE,GAAG,SAAS,iBAAiB,IAAI,CAAC,GAAG,GAAG,SAAS,iBAAiB,IAAI,CAAC,GAAG,GAAG,SAAS,iBAAiB,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE;AACzI,WAAO;AAAA,EACX;AAAA,EACA,cAAc,CAAC,QAAQ;AACnB,UAAM,SAAS,EAAE,GAAG,SAAS,oBAAoB,IAAI,CAAC,GAAG,GAAG,SAAS,oBAAoB,IAAI,CAAC,GAAG,GAAG,SAAS,oBAAoB,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE;AAClJ,WAAO;AAAA,EACX;AAAA,EACA,GAAG,CAAC,gBAAgB;AAChB,WAAO,SAAQ,YAAY,IAAI,SAAQ,YAAY,IAAI,SAAQ,YAAY;AAAA,EAC/E;AAAA,EACA,GAAG,CAAC,gBAAgB;AAEhB,WAAO,SAAQ,YAAY,IAAI,SAAQ,YAAY,IAAI,SAAQ,YAAY;AAAA,EAC/E;AAAA,EACA,GAAG,CAAC,gBAAgB;AAChB,WAAO,SAAQ,YAAY,IAAI,SAAQ,YAAY,IAAI,SAAQ,YAAY;AAAA,EAC/E;AAAA,EACA,mBAAmB,CAAC,QAAQ;AACxB,UAAM,SAAS,SAAS,UAAU,GAAG;AACrC,WAAO,SAAS,EAAE,MAAM;AAAA,EAC5B;AAAA,EACA,aAAa,CAAC,QAAQ;AAClB,UAAM,SAAS,SAAS,UAAU,GAAG;AACrC,UAAM,MAAM,EAAE,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,IAAI,EAAE;AAC5F,WAAO;AAAA,EACX;AAAA,EACA,aAAa,CAAC,QAAQ;AAClB,UAAM,IAAI,QAAS,IAAI,IAAI,SAAS,IAAI,IAAI,SAAQ,IAAI,GAAG,IAAI,UAAS,IAAI,IAAI,QAAS,IAAI,IAAI,SAAQ,IAAI,GAAG,IAAI,SAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAS,IAAI;AACjK,WAAO,SAAS,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,CAAC,MAAM,SAAS;AAE3B,UAAM,KAAK,SAAS,kBAAkB,IAAI,IAAI,MAAK,KAAK,SAAS,kBAAkB,IAAI,IAAI;AAC3F,WAAO,KAAK,KACR,KAAK,KAED,KAAK;AAAA,EACjB;AACJ;AACA,SAAS,WAAW,KAAK,GAAG;AACxB,QAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI;AACpC,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,QAAM,IAAK,MAAM,KAAK,MAAM,IAAK,KAAK,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC;AAC1E,SAAO,EAAE,MAAM,GAAG,CAAC;AACvB;AAcA,SAAS,UAAU,KAAK;AACpB,QAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI;AACpC,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,MAAI,MAAM;AACV,MAAI,QAAQ,KAAK;AACb,QAAI,QAAQ,GAAG;AACX,aAAO,OAAO,IAAI,MAAM,MAAM,QAAQ,OAAO;AAAA,IACjD,WACS,QAAQ,GAAG;AAChB,aAAO,OAAO,IAAI,MAAM,MAAM,QAAQ,OAAO;AAAA,IACjD,OACK;AACD,aAAO,OAAO,IAAI,MAAM,MAAM,QAAQ,OAAO;AAAA,IACjD;AAAA,EACJ;AACA,SAAO,IAAI,MAAM,GAAG,GAAG;AAC3B;AACA,SAAS,OAAO,GAAG;AACf,SAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAEzC;AAEO,IAAM,SAAN,MAAM,QAAO;AAAA,EAEhB,OAAO;AAAE,SAAK,wBAAwB;AAAA,EAAK;AAAA,EAE3C,OAAO;AAAE,SAAK,4BAA4B;AAAA,EAAK;AAAA,EAE/C,OAAO;AAAE,SAAK,qBAAqB;AAAA,EAAK;AAAA,EACxC,OAAO,UAAU,KAAK;AAClB,UAAM,OAAO,CAAC,MAAM,KAAK,IAAI,GAAK,KAAK,IAAI,GAAG,CAAC,CAAC;AAChD,QAAI,IAAI,CAAC,KAAK,MAAM;AAChB,UAAI,CAAC,IAAI;AAAA,IACb;AACA,WAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;AAAA,EACpG;AAAA,EACA,OAAO,WAAW,KAAK;AACnB,WAAO,CAAC,IAAI,CAAC,IAAI,KAAO,IAAI,CAAC,IAAI,KAAO,IAAI,CAAC,IAAI,KAAO,IAAI,CAAC,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAM,KAAK;AACd,WAAO,OAAO,IAAI,YAAY;AAE9B,QAAI,YAAY,KAAK,GAAG,GAAG;AACvB,UAAI,SAAS,YAAY,KAAK,GAAG;AACjC,aAAO,KAAK,UAAU,KAAK,WAAW,CAAC,SAAS,OAAO,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IAC7G;AAEA,QAAI,aAAa,KAAK,GAAG,GAAG;AACxB,UAAI,SAAS,aAAa,KAAK,GAAG;AAClC,aAAO,KAAK,UAAU,KAAK,WAAW,CAAC,SAAS,OAAO,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IACjI;AAEA,QAAI,YAAY,KAAK,GAAG,GAAG;AACvB,UAAI,MAAM,YAAY,KAAK,GAAG,EAAE,CAAC;AACjC,aAAO,KAAK,UAAU,KAAK,WAAW,CAAC,SAAS,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACvJ;AAEA,QAAI,kBAAkB,KAAK,GAAG,GAAG;AAC7B,UAAI,MAAM,kBAAkB,KAAK,GAAG,EAAE,CAAC;AACvC,UAAI,IAAI,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;AACnE,aAAO,KAAK,UAAU,KAAK,WAAW,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACtH;AAEA,QAAI,YAAY,KAAK,GAAG,GAAG;AACvB,UAAI,SAAS,YAAY,KAAK,GAAG;AACjC,YAAM,MAAM,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC,GAAG,GAAG,WAAW,OAAO,CAAC,CAAC,IAAI,MAAK,GAAG,WAAW,OAAO,CAAC,CAAC,IAAI,KAAI;AACvG,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB;AAEA,QAAI,aAAa,KAAK,GAAG,GAAG;AACxB,UAAI,UAAU,aAAa,KAAK,GAAG;AACnC,YAAM,OAAO,EAAE,GAAG,WAAW,QAAQ,CAAC,CAAC,GAAG,GAAG,WAAW,QAAQ,CAAC,CAAC,IAAI,MAAK,GAAG,WAAW,QAAQ,CAAC,CAAC,IAAI,MAAK,GAAG,WAAW,QAAQ,CAAC,CAAC,EAAE;AACtI,aAAO,KAAK,IAAI,IAAI;AAAA,IACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,IAAI,KAAK;AACZ,UAAM,IAAI,UAAU,GAAG,GAAG,IAAI,WAAW,KAAK,CAAC,GAAG,IAAI,UAAU,GAAG;AACnE,WAAO,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,EAC/B;AAAA,EACA,OAAO,OAAO,KAAK;AACf,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,KAAK,IAAI,GAAG;AAAA,IACtB;AACA,WAAO,SAAS,YAAY,GAAG;AAAA,EACnC;AAAA,EACA,OAAO,IAAI,KAAK;AACZ,QAAI,MAAM,GAAG,GAAG;AAEZ,YAAM,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI;AAChD,YAAM,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK;AACtC,YAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AACtC,YAAM,IAAI,IAAI,IAAI;AAClB,YAAM,UAAU,CAAC,GAAG,GAAG,MAAM,KAAK,UAAU,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACxE,UAAI,MAAM,GAAG;AACT,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B,WACS,MAAM,GAAG;AACd,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B,WACS,MAAM,GAAG;AACd,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B,WACS,MAAM,GAAG;AACd,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B,WACS,MAAM,GAAG;AACd,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B,WACS,MAAM,GAAG;AACd,eAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,MAC1B;AAAA,IACJ,OACK;AAED,YAAM,MAAM,SAAS,YAAY,GAAG;AACpC,aAAO,KAAK,UAAU,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,IACtD;AAAA,EACJ;AAAA,EACA,OAAO,UAAU,KAAK,OAAO,GAAG;AAC5B,QAAI,MAAM,GAAG,GAAG;AACZ,eAAS;AACT,UAAI,MAAM;AACV,YAAM,YAAY,OAAO,SAAS,WAAW,OAAO;AACpD,aAAO,QAAQ,IAAI,EAAE,SAAS,SAAS,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,SAAS,CAAC,KAAK,IAAI,EAAE,SAAS,CAAC;AAAA,IAC5I,WACS,MAAM,GAAG,GAAG;AACjB,eAAS;AACT,UAAI,MAAM;AACV,YAAM,MAAM,OAAO,SAAS,YAAY,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,SAAS;AACjK,UAAI,MAAM,GAAG;AACT,YAAI,KAAK;AACL,kBAAQ,MAAM,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,YAAY;AAAA,QACjE;AACA,eAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,MAC7B;AACA,aAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,IACnC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,cAAc,MAAM,MAAM;AAC7B,QAAI,MAAM,IAAI,GAAG;AACb,aAAO,KAAK,IAAI,IAAI;AAAA,IACxB;AACA,QAAI,MAAM,IAAI,GAAG;AACb,aAAO,KAAK,IAAI,IAAI;AAAA,IACxB;AACA,WAAO,SAAS,cAAc,MAAM,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,UAAU,KAAK;AAClB,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,QAAO,IAAI,GAAG;AAAA,IACxB;AACA,WAAO,SAAS,kBAAkB,GAAG;AAAA,EACzC;AAAA,EACA,OAAO,QAAQ,KAAK,SAAS,KAAK;AAC9B,eAAW;AACX,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC;AACjD,aAAO,OAAO,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC;AAAA,IACvC;AACA,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,MAAM,KAAK,QAAQ,KAAK,IAAI,GAAG,GAAG,MAAM;AAC9C,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,KAAK,SAAS,KAAK;AAC7B,WAAO,KAAK,QAAQ,KAAK,CAAC,MAAM;AAAA,EACpC;AAAA,EACA,OAAO,SAAS,KAAK,SAAS,KAAK;AAC/B,eAAW;AACX,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC;AACjD,aAAO,OAAO,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC;AAAA,IACvC;AACA,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,MAAM,KAAK,SAAS,KAAK,IAAI,GAAG,GAAG,MAAM;AAC/C,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,WAAW,KAAK,SAAS,KAAK;AACjC,WAAO,KAAK,SAAS,KAAK,CAAC,MAAM;AAAA,EACrC;AAAA,EACA,OAAO,YAAY,MAAM,MAAM,SAAS,SAAS;AAC7C,gBAAY;AACZ,gBAAY;AACZ,UAAM,UAAU,UAAU,SAAS,SAAS;AAC5C,UAAM,UAAU,UAAU,QAAQ,SAAS,GAAG,UAAU,UAAU,QAAQ,SAAS;AACnF,UAAM,MAAM,MAAM,IAAI,GAAG,MAAM,MAAM,IAAI;AACzC,UAAM,WAAW,CAAC,MAAM;AACpB,UAAI,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACtB,eAAO,QAAO,OAAO,CAAC;AAAA,MAC1B;AACA,aAAO;AAAA,IACX;AACA,WAAO,SAAS,IAAI;AACpB,WAAO,SAAS,IAAI;AACpB,UAAM,MAAM;AAAA,MACR,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,SAAS;AAAA,MAChD,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,SAAS;AAAA,MAChD,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,SAAS;AAAA,MAChD,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,SAAS;AAAA,IACpD;AACA,QAAI,KAAK;AACL,aAAO,QAAO,IAAI,GAAG;AAAA,IACzB;AACA,QAAI,KAAK;AACL,aAAO,QAAO,IAAI,QAAO,IAAI,GAAG,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AACJ;;;ACxVA,IAAM,gBAAgB;AAMf,SAAS,sBAAsB,OAAO;AACzC,QAAM,MAAM,CAAC;AACb,MAAI,MAAM,MAAM,MAAM,aAAa;AACnC,MAAI,OAAO,IAAI,SAAS,GAAG;AACvB,QAAI,QAAQ,OAAK,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC;AAAA,EAC5C;AACA,SAAO;AACX;AAEO,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,OAAO,QAAQ,KAAK;AAChB,WAAO,OAAO,QAAQ,YACf,YAAY,OAAO,MAAM,QAAQ,IAAI,QAAQ,CAAC,KAC9C,WAAW,OAAO,MAAM,QAAQ,IAAI,OAAO,CAAC,KAC5C,SAAS,OAAO,MAAM,QAAQ,IAAI,KAAK,CAAC;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,OAAO;AAChB,QAAI,YAAY,cAAc,KAAK,KAAK,CAAC,OAAM,QAAQ,KAAK,GAAG;AAC3D,aAAO,OAAO;AAAA,IAClB;AACA,UAAM,EAAE,QAAQ,OAAO,IAAI,IAAI;AAC/B,WAAO,OAAM,aAAa,QAAQ,OAAO,GAAG;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,aAAa,QAAQ,OAAO,KAAK;AACpC,UAAM,KAAK,EAAE,GAAG,MAAM,IAAI,OAAO,GAAG,GAAG,MAAM,IAAI,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE;AAC7G,UAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AACpC,UAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAEtC,WAAO,CAAC,KAAK,MAAM,OAAO,GAAG;AAAA,EACjC;AACJ;AAGO,IAAM,OAAN,MAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,OAAO,MAAM,IAAI;AACb,QAAI,MAAM,sBAAsB,EAAE;AAClC,QAAI,OAAO,IAAI,WAAW,GAAG;AACzB,aAAO,EAAE,OAAO,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE;AAAA,IAC3C;AACA,UAAM,IAAI,MAAM,iBAAiB,EAAE,oBAAoB;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO,KAAK;AACf,WAAO,OAAO,QAAQ,YACf,WAAW,OAAO,OAAO,IAAI,OAAO,MAAM,YAC1C,YAAY,OAAO,OAAO,IAAI,QAAQ,MAAM;AAAA,EACvD;AACJ;AAEO,IAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOf,OAAO,MAAM,IAAI;AACb,QAAI,MAAM,sBAAsB,EAAE;AAClC,QAAI,OAAO,IAAI,WAAW,GAAG;AACzB,aAAO,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE;AAAA,IAClC;AACA,UAAM,IAAI,MAAM,iBAAiB,EAAE,qBAAqB;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,KAAK;AAChB,WAAO,OAAO,QAAQ,YACf,OAAO,OAAO,OAAO,IAAI,GAAG,MAAM,YAClC,OAAO,OAAO,OAAO,IAAI,GAAG,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,IAAI,IAAI;AACpB,WAAO,KAAK,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,GAAG,MAAM;AACrB,WAAO,EAAE,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,EAAE,EAAE;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO,QAAQ;AAClB,QAAI,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE;AACzB,aAAS,KAAK,QAAQ;AAClB,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AAAA,IACjB;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,GAAG,GAAG;AAClB,WAAO,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE;AAAA,EACpC;AACJ;;;AC3IO,IAAM,WAAN,MAAM,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,OAAO,WAAW,GAAG;AACjB,WAAO,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM;AAAA,EACpF;AAAA;AAAA,EAEA,WAAW,WAAW;AAClB,WAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAK,GAAG;AACX,WAAO,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE;AAAA,EAC5D;AAAA,EACA,OAAO,MAAM,GAAG,IAAI,KAAK,IAAI;AACzB,WAAO,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,UAAU,GAAG,GAAG;AACnB,WAAO,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,GAAG,KAAK;AAClB,UAAM,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,IAAI,GAAG;AAC7C,WAAO,UAAS,SAAS,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,EAC/E;AAAA,EACA,OAAO,SAAS,IAAI,IAAI;AACpB,QAAI,OAAO,MAAM,OAAO,IAAI;AACxB,UAAI,OAAO,OAAO,UAAU;AACxB,eAAO,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG;AAAA,MACxC,OACK;AACD,eAAO,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;AAAA,MACtF;AAAA,IACJ;AACA,QAAI,OAAO,OAAO,UAAU;AACxB,aAAO;AAAA,QACH,GAAG,GAAG,IAAI;AAAA,QAAI,GAAG,GAAG,IAAI;AAAA,QAAI,GAAG,GAAG,IAAI;AAAA,QAAI,GAAG,GAAG,IAAI;AAAA,QAAI,GAAG,GAAG,IAAI;AAAA,QAAI,GAAG,GAAG,IAAI;AAAA,MACpF;AAAA,IACJ;AACA,WAAO;AAAA,MACH,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MAC3B,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MAC3B,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MAC3B,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MAC3B,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MAClC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,GAAG;AACV,WAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO,GAAG;AACb,UAAM,MAAM,KAAK,IAAI,CAAC;AACtB,QAAI,QAAQ,GAAG;AAEX,aAAO;AAAA,IACX;AACA,UAAM,SAAS,IAAI;AAQnB,WAAO,KAAK,SAAS;AAAA,MACjB,GAAG,EAAE;AAAA,MACL,GAAG,CAAC,EAAE;AAAA,MACN,GAAG,CAAC,EAAE;AAAA,MACN,GAAG,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,MACxB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IAC3B,GAAG,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,GAAG,kBAAkB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG;AACrD,UAAM,SAAS,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9C,UAAM,SAAS,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9C,UAAM,MAAM,UAAU,IAAI,EAAE,IAAI,SAAS;AACzC,UAAM,MAAM,UAAU,IAAI,EAAE,IAAI,SAAS;AACzC,UAAM,WAAW,KAAK,MAAM,KAAK,GAAG;AACpC,UAAM,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI;AACzB,UAAM,cAAc;AAAA,MAChB,GAAG,EAAE,IAAI,MAAM,SAAS,MAAM,KAAK,KAAK,SAAS;AAAA,MACjD,GAAG,EAAE,IAAI,MAAM,SAAS,MAAM,KAAK,KAAK,SAAS;AAAA,IACrD;AACA,WAAO;AAAA,MACH;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG;AAC7C,UAAM,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAC1B,GAAG,KAAK,GAAG,IAAI,GAAG,MACjB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAC7B,QAAI,KAAK,IAAI,GAAG,IAAI,OAAO;AACvB,YAAM,IAAI,MAAM,gEAAgE;AAAA,IACpF;AACA,UAAM,OAAO,IAAI;AAGjB,WAAO;AAAA,MACH,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG;AAAA,MAC3E,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG;AAAA,MAC3E,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG;AAAA,MAC3E,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG;AAAA,MAC3E,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KACvC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAChC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,MACpC,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KACvC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAChC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AAAA,IACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,SAAS,IAAI,IAAI,YAAY,IAAI;AACpC,WAAO,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS,KAC9B,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS,KAC9B,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS,KAC9B,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS,KAC9B,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS,KAC9B,GAAG,EAAE,UAAU,GAAG,GAAG,SAAS;AAAA,EACzC;AACJ;;;ACnKO,IAAM,OAAN,MAAM,MAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,OAAO,MAAM,MAAM;AACf,QAAI,MAAM,sBAAsB,IAAI;AACpC,QAAI,OAAO,IAAI,WAAW,GAAG;AACzB,aAAO,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE;AAAA,IACjE;AACA,UAAM,IAAI,MAAM,iBAAiB,IAAI,oBAAoB;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO,KAAK;AACf,WAAO,MAAM,QAAQ,GAAG,KAAK,KAAK,OAAO,GAAG;AAAA,EAChD;AAAA,EACA,OAAO,SAAS,MAAM,IAAI;AACtB,WAAO,EAAE,GAAG,GAAG,QAAQ,KAAK,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,KAAK,QAAQ,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,EAClH;AAAA,EACA,OAAO,SAAS,MAAM,IAAI,OAAO,QAAQ;AACrC,QAAI,QAAQ;AACZ,UAAM,YAAY,KAAK,QAAQ,KAAK,QAAQ,UAAU,GAAG,QAAQ,GAAG;AACpE,QAAI,aAAa,SAAS;AAEtB,cAAQ,GAAG,QAAQ,KAAK;AAAA,IAC5B,OACK;AAED,cAAQ,GAAG,SAAS,KAAK;AAAA,IAC7B;AACA,UAAM,IAAI,KAAK,QAAQ,OAAO,IAAI,KAAK,SAAS;AAChD,UAAM,cAAc,KAAK,OAAO,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,EAAE,GAAG,IAAI,OAAO,MAAM;AAChG,WAAO,SAAS,UAAU,EAAE,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,GAAG,WAAW;AAAA,EACzF;AAAA,EACA,OAAO,OAAO,MAAM,IAAI,OAAO,QAAQ;AACnC,QAAI,QAAQ;AACZ,UAAM,YAAY,KAAK,QAAQ,KAAK,QAAQ,UAAU,GAAG,QAAQ,GAAG;AACpE,QAAI,YAAY,SAAS;AAErB,cAAQ,GAAG,QAAQ,KAAK;AAAA,IAC5B,OACK;AAED,cAAQ,GAAG,SAAS,KAAK;AAAA,IAC7B;AACA,UAAM,IAAI,KAAK,QAAQ,OAAO,IAAI,KAAK,SAAS;AAChD,UAAM,cAAc,KAAK,OAAO,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,EAAE,GAAG,IAAI,OAAO,MAAM;AAChG,WAAO,SAAS,UAAU,EAAE,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,GAAG,WAAW;AAAA,EACzF;AAAA,EACA,OAAO,OAAO,MAAM,IAAI,OAAO,QAAQ;AACnC,QAAI,IAAI,GAAG,IAAI;AACf,YAAQ,OAAO;AAAA,MACX,KAAK;AACD,YAAI,GAAG,IAAI,KAAK;AAChB;AAAA,MACJ,KAAK;AACD,YAAK,GAAG,IAAI,GAAG,QAAQ,KAAK,QAAS,KAAK;AAC1C;AAAA,MACJ;AACI,YAAK,GAAG,IAAI,GAAG,QAAQ,MAAK,KAAK,QAAQ,MAAM,KAAK;AACpD;AAAA,IACR;AACA,YAAQ,QAAQ;AAAA,MACZ,KAAK;AACD,YAAI,GAAG,IAAI,KAAK;AAChB;AAAA,MACJ,KAAK;AACD,YAAK,GAAG,IAAI,GAAG,SAAS,KAAK,SAAU,KAAK;AAC5C;AAAA,MACJ;AACI,YAAK,GAAG,IAAI,GAAG,SAAS,MAAK,KAAK,SAAS,MAAM,KAAK;AACtD;AAAA,IACR;AACA,WAAO,EAAE,GAAG,EAAE;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,cAAc,GAAG,GAAG,OAAO,WAAW,QAAQ,UAAU,SAAS,UAAU;AAC9E,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO,KAAK,SAAS,GAAG,GAAG,OAAO,MAAM;AAAA,MAC5C,KAAK;AACD,eAAO,KAAK,OAAO,GAAG,GAAG,OAAO,MAAM;AAAA,MAC1C;AACI,eAAO,KAAK,SAAS,GAAG,CAAC;AAAA,IACjC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,OAAO;AACvB,UAAM,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM,KAAK,SAAS,CAAC,CAAC;AAC/E,QAAI,IAAI,UAAU,GAAG;AACjB,aAAO;AAAA,IACX;AACA,QAAI,OAAO,IAAI,CAAC;AAChB,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACzL,UAAI,IAAI,KAAK,KAAK,GAAG;AAEjB,eAAO;AAAA,MACX;AACA,aAAO,EAAE,GAAM,GAAM,OAAO,GAAG,QAAQ,EAAE;AAAA,IAC7C;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,SAAS,MAAM;AACzB,UAAM,MAAM,MAAM,KAAK,QAAQ,CAAC,CAAC;AACjC,QAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK;AAC5C,QAAI,MAAK,OAAO,IAAI,GAAG;AACnB,YAAM,KAAK;AACX,YAAM,KAAK;AAAA,IACf;AACA,aAAS,KAAK,KAAK;AACf,WAAK,KAAK,IAAI,EAAE,GAAG,EAAE;AACrB,WAAK,KAAK,IAAI,EAAE,GAAG,EAAE;AACrB,WAAK,KAAK,IAAI,EAAE,GAAG,EAAE;AACrB,WAAK,KAAK,IAAI,EAAE,GAAG,EAAE;AAAA,IACzB;AACA,WAAO,EAAE,GAAG,IAAI,GAAG,IAAI,OAAO,KAAK,IAAI,QAAQ,KAAK,GAAG;AAAA,EAC3D;AACJ;;;ACvIO,IAAM,iBAAN,MAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,YAAY,OAAO,WAAW;AAC1B,SAAK,WAAW;AAChB,SAAK,aAAa;AAAA,EACtB;AAAA;AAAA,EAEA,aAAa,CAAC;AAAA;AAAA,EAEd,YAAY,CAAC;AAAA;AAAA,EAEb;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,WAAW,SAAS;AAAA,EACpC;AAAA;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA;AAAA;AAAA,EAGA,IAAI,UAAU,GAAG;AACb,SAAK,aAAa;AAAA,EACtB;AAAA;AAAA,EAEA,OAAO;AACH,QAAI,KAAK,SAAS;AACd,YAAM,OAAO,KAAK,YAAY,OAAO,KAAK,WAAW,UAAU,KAAK;AACpE,WAAK,QAAQ,OAAO;AACpB,WAAK,WAAW,KAAK,IAAI;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA,EAEA,OAAO;AACH,QAAI,KAAK,SAAS;AACd,YAAM,OAAO,KAAK,YAAY,OAAO,KAAK,WAAW,UAAU,KAAK;AACpE,WAAK,KAAK,OAAO;AACjB,WAAK,WAAW,KAAK,MAAM;AAAA,IAC/B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,OAAO;AACR,SAAK,UAAU,OAAO,CAAC;AACvB,SAAK,WAAW,KAAK,KAAK,QAAQ;AAClC,SAAK,WAAW;AAChB,UAAM,MAAM,KAAK,YAAY,QAAQ,KAAK;AAC1C,QAAI,MAAM,KAAK,MAAM,SAAS,KAAK;AAC/B,YAAM,OAAO,GAAG,MAAM,SAAS,GAAG;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA,EAEA,QAAQ;AACJ,SAAK,UAAU,OAAO,CAAC;AACvB,SAAK,WAAW,OAAO,CAAC;AAAA,EAC5B;AACJ;;;ACtEA,IAAM,8BAA8B;AAAA,EAChC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACV;AAEO,IAAM,UAAN,MAAM,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,aAAa,UAAU,KAAK;AACxB,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAI,CAAC,SAAS,IAAI;AACd,aAAO;AAAA,IACX;AACA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACX;AAAA,EACA,aAAa,YAAY,KAAK,OAAO,QAAQ,SAAS;AAClD,QAAI,SAAS,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,MAAM,MAAM,GAAG;AAC5D,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,KAAK,MAAM,SAAQ,YAAY,GAAG;AACxC,UAAM,YAAY,GAAG,SAAS,OAAO,aAAa,GAAG,UAAU;AAC/D,UAAM,MAAM,IAAI,gBAAgB,WAAW,UAAU;AACrD,UAAM,MAAM,IAAI,WAAW,IAAI;AAC/B,QAAI,wBACA,IAAI,0BAA0B,IAC1B,IAAI,wBAAwB,IACxB,IAAI,6BAA6B,IAC7B;AAChB,UAAM,EAAE,SAAS,MAAM,MAAM,OAAO,QAAQ,WAAW,IAAI,OAAO,OAAO,CAAC,GAAG,6BAA6B,WAAW,CAAC,CAAC;AACvH,UAAM,OAAO,EAAE,OAAO,WAAW,QAAQ,YAAY,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,OAAO;AACpG,UAAM,kBAAkB,KAAK,cAAc,MAAM,IAAI,MAAM,OAAO,MAAM;AACxE,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,QAAI,YAAY;AACZ,UAAI,YAAY;AAChB,UAAI,SAAS,GAAG,GAAG,IAAI,OAAO,IAAI,MAAM;AAAA,IAC5C;AACA,QAAI,aAAa,eAAe;AAChC,QAAI,UAAU,IAAI,GAAG,CAAC;AACtB,UAAM,SAAS,MAAM,IAAI,cAAc,EAAE,SAAS,KAAK,CAAC;AACxD,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,aAAa,YAAY,KAAK;AAC1B,QAAI,OAAO,QAAQ,UAAU;AACzB,YAAM,MAAM,SAAQ,UAAU,GAAG;AAAA,IACrC;AACA,QAAI,EAAE,eAAe,OAAO;AACxB,aAAO;AAAA,IACX;AACA,WAAO,MAAM,KAAK,kBAAkB,GAAG;AAAA,EAC3C;AACJ;;;AC3DO,IAAM,OAAN,MAAM,MAAK;AAAA,EACd,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKP,OAAO,WAAW;AACd,QAAI,OAAO,MAAK,SAAS,KAAK,IAAI;AAClC,WAAO,MAAK,QAAQ,EAAE;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa;AAChB,UAAM,QAAQ,MAAK,SAAS;AAC5B,WAAO,MAAM,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,QAAQ;AACxB,QAAI,SAAS;AACb,OAAG;AACC,iBAAW,KAAK,OAAO,IAAI,IAAI,SAAS;AAAA,IAC5C,SAAS,OAAO,SAAS;AACzB,WAAO;AAAA,EACX;AACJ;;;AC9BO,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,OAAO,MAAM,GAAG,OAAO,GAAK;AACxB,WAAO,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,IAAI,GAAG,MAAM;AAChB,WAAO,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAO,GAAG,MAAM,IAAI;AACvB,UAAM,OAAO,EAAE,SAAS;AACxB,UAAM,YAAY,SAAS,MAAM,IAAI;AACrC,QAAI,CAAC,KAAK,SAAS,UAAU,SAAS,IAAI,CAAC,GAAG;AAC1C,aAAO,OAAO,IAAI,SAAS;AAAA,IAC/B;AACA,WAAO,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,EAAE;AAAA,EACnD;AACJ;;;AC3BA,SAAS,IAAI,SAAS,SAAS;AAC3B,QAAM,IAAI,QAAQ;AAClB,QAAM,IAAI,QAAQ;AAElB,QAAM,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,GAAG,MAAM,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnE,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AACzB,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AACzB,UAAI,QAAQ,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC,GAAG;AAEnC,WAAG,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;AAAA,MAClC,OACK;AAED,WAAG,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAWA,SAAS,aAAa,SAAS,SAAS,IAAI,SAAS,IAAI;AACrD,QAAM,IAAI,QAAQ;AAClB,QAAM,IAAI,QAAQ;AAClB,QAAM,SAAS,CAAC;AAChB,MAAI,IAAI,GAAG,IAAI;AACf,MAAI,eAAe;AACnB,QAAM,gBAAgB,MAAM;AACxB,QAAI,cAAc;AACd,aAAO,KAAK,YAAY;AACxB,qBAAe;AAAA,IACnB;AAAA,EACJ;AAEA,SAAO,IAAI,KAAK,IAAI,GAAG;AACnB,QAAI,cAAc;AAClB,QAAI,eAAe;AACnB,QAAI,IAAI,KAAK,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC,GAAG;AAErD,oBAAc;AACd,qBAAe,QAAQ,IAAI,CAAC;AAC5B;AACA;AAAA,IACJ,WACS,IAAI,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI;AAEzD,oBAAc;AACd,qBAAe,QAAQ,IAAI,CAAC;AAC5B;AAAA,IACJ,WACS,IAAI,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI;AAExD,oBAAc;AACd,qBAAe,QAAQ,IAAI,CAAC;AAC5B;AAAA,IACJ;AACA,QAAI,eAAe,iBAAiB,MAAM;AACtC,UAAI,gBAAgB,aAAa,SAAS,aAAa;AAEnD,qBAAa,QAAQ,gBAAgB,aAAa,QAAQ,SAAS,MAAM,aAAa;AAAA,MAC1F,OACK;AAED,sBAAc;AACd,uBAAe,EAAE,MAAM,aAAa,OAAO,aAAa;AAAA,MAC5D;AAAA,IACJ,OACK;AAED,oBAAc;AAAA,IAClB;AAAA,EACJ;AACA,gBAAc;AACd,SAAO,OAAO,QAAQ;AAC1B;AAOA,SAAS,UAAU,GAAG,GAAG;AACrB,QAAM,UAAU,EAAE,MAAM,EAAE;AAC1B,QAAM,UAAU,EAAE,MAAM,EAAE;AAC1B,QAAM,KAAK,IAAI,SAAS,OAAO;AAE/B,SAAO,aAAa,SAAS,SAAS,IAAI,EAAE;AAChD;AAQA,SAAS,UAAU,GAAG,GAAG;AAGrB,QAAM,YAAY;AAClB,QAAM,UAAU,EAAE,MAAM,SAAS,KAAK,CAAC;AACvC,QAAM,UAAU,EAAE,MAAM,SAAS,KAAK,CAAC;AACvC,QAAM,KAAK,IAAI,SAAS,OAAO;AAE/B,SAAO,aAAa,SAAS,SAAS,IAAI,EAAE;AAChD;AAOA,SAAS,UAAU,GAAG,GAAG;AAGrB,QAAM,YAAY;AAClB,QAAM,UAAU,EAAE,MAAM,SAAS;AACjC,QAAM,UAAU,EAAE,MAAM,SAAS;AAIjC,QAAM,KAAK,IAAI,SAAS,OAAO;AAE/B,SAAO,aAAa,SAAS,SAAS,IAAI,IAAI;AAClD;AAGO,IAAM,UAAN,MAAc;AAAA;AAAA,EAEjB,OAAO,QAAQ,GAAG,cAAc,SAAS;AACrC,QAAI,SAAS,EAAE,SAAS;AACxB,WAAO,OAAO,SAAS,cAAc,OAAO;AAAA,EAIhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAO,aAAa,MAAM;AAC7B,UAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,QAAQ,IAAI,OAAO,kBAAkB,IAAI,iBAAiB,GAAG;AACnE,eAAS,OAAO,WAAW,OAAO,CAACC,WAAU,UAAU;AACnD,eAAOA,OAAM,QAAQ,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAAA,MAChD,CAAC;AAAA,IACL;AACA,UAAM,QAAQ,+BAA+B,KAAK,MAAM;AACxD,QAAI,CAAC,YAAY,cAAc,KAAK,GAAG;AACnC,YAAM,IAAI,MAAM,6BAA6B,MAAM,CAAC,CAAC,GAAG;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAK,GAAG,GAAG,OAAO,QAAQ;AAC7B,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO,UAAU,GAAG,CAAC;AAAA,MACzB,KAAK;AACD,eAAO,UAAU,GAAG,CAAC;AAAA,MACzB;AACI,eAAO,UAAU,GAAG,CAAC;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,KAAK,OAAO,OAAO,WAAW;AACvC,UAAM,aAAa,MAAM,OAAO,OAAO,OAAO,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC;AACnF,WAAO,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC,EACvC,IAAI,UAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC9C,KAAK,EAAE;AAAA,EAChB;AACJ;;;AC5MA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA,gBAAAC;AAAA;;;ACCA,IAAM,aAAN,MAAiB;AAAA,EACb,SAAS,OAAO,SAAS;AACrB,UAAM,SAAS,CAAC;AAChB,WAAO,OAAO;AACV,YAAM,QAAQ,MAAM;AACpB,eAAS,QAAQ,SAAS;AACtB,cAAM,YAAY,KAAK;AAAA,UAAK;AAAA;AAAA,UAAuD;AAAA,QAAI,GAAG,SAAS,WAAW;AAC9G,YAAI,SAAS,GAAG;AACZ,gBAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAC5C,gBAAM,OAAO,UAAU,SAAS,CAAC;AACjC,kBAAQ,MAAM,QAAQ,KAAK,SAAS,KAAK,KAAK,IAAI,MAAM;AACxD;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,MAAM,UAAU,OAAO;AAEvB,cAAM,IAAI,MAAM;AAAA,GAAkB,KAAK;AAAA,6BAAiC;AAAA,MAC5E;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAEO,IAAM,SAAN,MAAa;AAAA;AAAA;AAAA;AAAA,EAIhB,YAAY,SAAS,IAAI,WAAW,GAAG;AACnC,SAAK,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,SAAS,UAAU;AAC5B,UAAM,SAAS,KAAK,OAAO,SAAS,OAAO,OAAO;AAClD,WAAO,SAAS,OAAO,MAAM;AAAA,EACjC;AACJ;;;ACzCO,IAAI;AAAA,CACV,SAAUC,kBAAiB;AACxB,EAAAA,iBAAgB,MAAM,IAAI;AAC1B,EAAAA,iBAAgB,OAAO,IAAI;AAC3B,EAAAA,iBAAgB,SAAS,IAAI;AAC7B,EAAAA,iBAAgB,SAAS,IAAI;AAC7B,EAAAA,iBAAgB,YAAY,IAAI;AAChC,EAAAA,iBAAgB,SAAS,IAAI;AAC7B,EAAAA,iBAAgB,YAAY,IAAI;AAChC,EAAAA,iBAAgB,QAAQ,IAAI;AAC5B,EAAAA,iBAAgB,OAAO,IAAI;AAC3B,EAAAA,iBAAgB,QAAQ,IAAI;AAC5B,EAAAA,iBAAgB,SAAS,IAAI;AAC7B,EAAAA,iBAAgB,aAAa,IAAI;AACjC,EAAAA,iBAAgB,UAAU,IAAI;AAC9B,EAAAA,iBAAgB,cAAc,IAAI;AAClC,EAAAA,iBAAgB,KAAK,IAAI;AACzB,EAAAA,iBAAgB,SAAS,IAAI;AAC7B,EAAAA,iBAAgB,WAAW,IAAI;AAC/B,EAAAA,iBAAgB,QAAQ,IAAI;AAChC,GAAG,oBAAoB,kBAAkB,CAAC,EAAE;;;ACpB5C,IAAM,WAAW,oBAAI,IAAI;AACzB,SAAS,UAAU,MAAM;AACrB,UAAQ,QAAQ,IAAI,KAAK,EAAE,YAAY;AAC3C;AAMO,IAAM,WAAN,MAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,OAAO,SAAS,QAAQ;AACpB,QAAI,UAAU,MAAM;AAChB;AAAA,IACJ;AACA,UAAM,QAAQ,CAAC,OAAO,IAAI,EAAE,OAAO,OAAO,WAAW,CAAC,CAAC;AACvD,aAAS,QAAQ,OAAO;AACpB,YAAM,MAAM,UAAU,IAAI;AAC1B,eAAS,IAAI,KAAK,MAAM;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,IAAI,aAAa;AACpB,UAAM,MAAM,UAAU,WAAW;AACjC,WAAO,SAAS,IAAI,GAAG,KAAK;AAAA,EAChC;AAAA;AAAA,EAEA,OAAO,QAAQ;AACX,UAAM,OAAO,SAAS,KAAK;AAC3B,WAAO,MAAM,KAAK,IAAI;AAAA,EAC1B;AACJ;;;ACpCA,IAAM,gBAAgB;AACtB,IAAM,0BAA0B,CAAC,gBAAgB,UAAU;AAC3D,IAAM,wBAAwB,CAAC,gBAAgB,OAAO,gBAAgB,SAAS,gBAAgB,SAAS,gBAAgB,UAAU;AAElI,IAAM,wBAAwB;AAE9B,IAAM,oBAAoB;AAC1B,SAAS,WAAW,MAAM;AACtB,SAAO,KAAK,YAAY;AAC5B;AACA,IAAM,gBAAgB,oBAAI,QAAQ;AAClC,SAAS,cAAc,MAAM;AACzB,SAAO,aAAa;AACxB;AACA,SAAS,MAAM,QAAQ;AACnB,MAAI,UAAU,QAAQ,OAAO,WAAW,GAAG;AACvC,WAAO;AAAA,EACX;AACA,SAAO,IAAI,IAAI,MAAM;AACzB;AACA,SAAS,YAAY,OAAO;AACxB,QAAM,QAAQ,MAAM,MAAM,EAAE;AAC5B,QAAM,SAAS,IAAI,IAAI,KAAK;AAC5B,QAAM,QAAQ,MAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,KAAK,EAAE;AACxB;AACA,SAAS,YAAY,KAAK,MAAM;AAC5B,QAAM,SAAS,CAAC;AAChB,WAAS,QAAQ,MAAM;AACnB,WAAO,IAAI,IAAI,KAAK,IAAI,EAAE,MAAM;AAAA,EACpC;AACA,WAAS,QAAQ,KAAK;AAClB,UAAM,YAAY,OAAO,IAAI,KAAK,CAAC;AACnC,WAAO,IAAI,IAAI,IAAI,IAAI,EAAE,OAAO,SAAS;AAAA,EAC7C;AACA,SAAO;AACX;AACA,SAAS,cAAc,KAAK,MAAM;AAC9B,QAAM,SAAS,CAAC;AAChB,WAAS,QAAQ,MAAM;AACnB,WAAO,IAAI,IAAI,KAAK,IAAI,EAAE,MAAM;AAAA,EACpC;AACA,WAAS,QAAQ,KAAK;AAClB,UAAM,YAAY,OAAO,IAAI,KAAK,CAAC;AACnC,WAAO,IAAI,IAAI,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,EAC7C;AACA,SAAO;AACX;AAEA,SAAS,YAAY,QAAQ,QAAQ,GAAG;AACpC,QAAM,UAAU,OAAO,WAAW,EAAE,QAAQ,CAAC,EAAE;AAC/C,QAAM,MAAM;AAAA,IACR,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ,UAAU,CAAC;AAAA,IAC3B,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,gBAAgB,QAAQ;AAAA,IACxB,oBAAoB,QAAQ;AAAA,IAC5B,eAAe,QAAQ;AAAA,EAC3B;AACA,QAAM,aAAa,OAAO,UAAU,SAAS,IAAI,OAAO,OAAO,IAAI;AACnE,MAAI,cAAc,QAAQ,eAAe,UAAU,SAAS,mBAAmB;AAC3E,WAAO;AAAA,EACX;AACA,QAAM,OAAO,YAAY,YAAY,QAAQ,CAAC;AAC9C,SAAO;AAAA,IACH,OAAO,IAAI,SAAS,KAAK;AAAA,IACzB,QAAQ,YAAY,IAAI,QAAQ,KAAK,MAAM;AAAA,IAC3C,UAAU,cAAc,IAAI,UAAU,KAAK,QAAQ;AAAA,IACnD,gBAAgB,IAAI,kBAAkB,KAAK;AAAA,IAC3C,oBAAoB,IAAI,sBAAsB,KAAK;AAAA,IACnD,eAAe,IAAI,iBAAiB,KAAK;AAAA,EAC7C;AACJ;AAEA,SAAS,YAAY,QAAQ,WAAW,UAAU;AAC9C,QAAM,QAAQ,OAAO,SAAS,KAAK,CAAC;AACpC,MAAI,SAAS,IAAI,SAAS,GAAG;AACzB,WAAO,CAAC;AAAA,EACZ;AACA,WAAS,IAAI,SAAS;AACtB,QAAM,WAAW,CAAC;AAClB,WAAS,QAAQ,OAAO;AACpB,QAAI,CAAC,cAAc,IAAI,GAAG;AACtB,eAAS,KAAK,IAAI;AAClB;AAAA,IACJ;AACA,UAAM,WAAW,YAAY,QAAQ,KAAK,SAAS,QAAQ;AAC3D,UAAM,UAAU,KAAK,MAAM,UAAU,QAAQ;AAAA,EACjD;AACA,WAAS,OAAO,SAAS;AACzB,SAAO;AACX;AACA,SAAS,iBAAiB,WAAW;AACjC,MAAI,aAAa,MAAM;AACnB,WAAO;AAAA,EACX;AACA,SAAO;AAAA,IACH,eAAe,MAAM,UAAU,aAAa;AAAA,IAC5C,kBAAkB,MAAM,UAAU,gBAAgB;AAAA,IAClD,eAAe,MAAM,UAAU,aAAa;AAAA,IAC5C,kBAAkB,MAAM,UAAU,gBAAgB;AAAA,EACtD;AACJ;AACA,SAAS,YAAY,MAAM;AACvB,QAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,OAAO;AAC1D,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK;AAE5D,QAAM,aAAa,KAAK,SAAS,IAAI,QAAQ,SAAS,EAAE;AACxD,QAAM,WAAW,YAAY,SAAS;AAEtC,QAAM,QAAQ,WAAW,OAAO,aAAa,MAAM;AACnD,QAAM,QAAQ,IAAI,OAAO,KAAK,OAAO,KAAK;AAC1C,QAAM,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,OAAO,GAAG,IAAI;AACzD,QAAM,MAAM,KAAK,QAAQ,OAAO,IAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;AAC/E,QAAM,OAAO,iBAAiB,KAAK,IAAI;AACvC,SAAO;AAAA,IACH;AAAA,IAAO;AAAA,IAAM;AAAA,IAAY;AAAA,IAAM;AAAA,IAAK;AAAA,IACpC,QAAQ,KAAK;AAAA,IACb,OAAO;AAAA,IACP,MAAM,KAAK,QAAQ;AAAA,IACnB,MAAM,KAAK,QAAQ;AAAA,IACnB,OAAO,KAAK,SAAS;AAAA,IACrB,eAAe,MAAM,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK;AAAA,EACnE;AACJ;AACA,SAAS,gBAAgB,UAAU;AAC/B,QAAM,MAAM,oBAAI,IAAI;AACpB,WAAS,QAAQ,UAAU;AACvB,aAAS,QAAQ,SAAS,IAAI,GAAG;AAC7B,UAAI,IAAI,MAAM,IAAI;AAAA,IACtB;AAAA,EACJ;AACA,SAAO;AACX;AAEA,IAAM,qBAAqB;AAC3B,SAAS,YAAY,QAAQ,OAAO;AAChC,QAAM,QAAQ,IAAI,OAAO,SAAS,KAAK,KAAK;AAC5C,QAAMC,SAAQ,MAAM,KAAK,EAAE;AAC3B,SAAOA,OAAM,SAAS;AAC1B;AACA,SAAS,cAAc,QAAQ,OAAO;AAClC,QAAM,QAAQ,IAAI,OAAO,SAAS,SAAS,MAAM,KAAK;AACtD,SAAO,MAAM,KAAK,EAAE;AACxB;AAEA,SAAS,YAAY,MAAM;AACvB,MAAI,KAAK,QAAQ,QAAQ,mBAAmB,KAAK,KAAK,MAAM,GAAG;AAC3D,WAAO;AAAA,EACX;AACA,SAAO,CAAC,cAAc,KAAK,QAAQ,KAAK,KAAK;AACjD;AACA,SAAS,QAAQ,OAAO;AACpB,MAAI,MAAM,WAAW,GAAG;AACpB,WAAO,EAAE,MAAM,MAAM,CAAC,GAAG,UAAU,KAAK;AAAA,EAC5C;AACA,QAAM,eAAe,CAAC;AACtB,MAAI,aAAa;AACjB,WAAS,QAAQ,OAAO;AACpB,iBAAa,KAAK,UAAU;AAC5B,UAAM,YAAY,YAAY,KAAK,QAAQ,KAAK,KAAK;AACrD,kBAAc,IAAI;AAAA,EACtB;AACA,QAAM,eAAe,MAAM,IAAI,OAAK,MAAM,EAAE,SAAS,GAAG;AACxD,QAAM,SAAS,aAAa,KAAK,GAAG;AACpC,QAAM,WAAW,IAAI,OAAO,QAAQ,MAAM,CAAC,EAAE,QAAQ,GAAG;AACxD,SAAO,EAAE,MAAM,MAAM,UAAU,OAAO,aAAa;AACvD;AAEA,SAAS,QAAQ,OAAO;AACpB,QAAM,WAAW,CAAC;AAClB,MAAI,UAAU,CAAC;AACf,QAAM,QAAQ,MAAM;AAChB,QAAI,QAAQ,SAAS,GAAG;AACpB,YAAM,kBAAkB,QAAQ,OAAO;AACvC,eAAS,KAAK,eAAe;AAAA,IACjC;AACA,cAAU,CAAC;AAAA,EACf;AACA,WAAS,QAAQ,OAAO;AACpB,QAAI,CAAC,YAAY,IAAI,GAAG;AACpB,YAAM;AACN,eAAS,KAAK,EAAE,MAAM,UAAU,KAAK,CAAC;AACtC;AAAA,IACJ;AACA,QAAI,QAAQ,SAAS,KAAK,QAAQ,CAAC,EAAE,UAAU,KAAK,OAAO;AACvD,YAAM;AAAA,IACV;AACA,YAAQ,KAAK,IAAI;AAAA,EACrB;AACA,QAAM;AACN,SAAO;AACX;AACA,SAAS,cAAc,QAAQ;AAC3B,QAAM,SAAS,cAAc,IAAI,MAAM;AACvC,MAAI,UAAU,MAAM;AAChB,WAAO;AAAA,EACX;AACA,QAAM,SAAS,YAAY,MAAM;AACjC,QAAM,SAAS,oBAAI,IAAI;AACvB,WAAS,QAAQ,OAAO,QAAQ;AAC5B,UAAM,WAAW,oBAAI,IAAI;AACzB,UAAM,QAAQ,YAAY,OAAO,QAAQ,MAAM,QAAQ;AACvD,UAAM,gBAAgB,MAAM,IAAI,WAAW;AAC3C,UAAM,WAAW,QAAQ,aAAa;AACtC,WAAO,IAAI,MAAM,QAAQ;AAAA,EAC7B;AACA,QAAM,WAAW;AAAA,IACb,MAAM,OAAO;AAAA,IACb,OAAO,OAAO,SAAS;AAAA,IACvB;AAAA,IACA,UAAU,gBAAgB,OAAO,QAAQ;AAAA,IACzC,gBAAgB,IAAI,IAAI,OAAO,kBAAkB,uBAAuB;AAAA,IACxE,oBAAoB,IAAI,IAAI,OAAO,sBAAsB,CAAC,CAAC;AAAA,IAC3D,eAAe,IAAI,IAAI,OAAO,iBAAiB,qBAAqB;AAAA,EACxE;AACA,gBAAc,IAAI,QAAQ,QAAQ;AAClC,SAAO;AACX;AACA,SAAS,cAAc,MAAM;AACzB,QAAM,SAAS,SAAS,IAAI,IAAI;AAChC,MAAI,UAAU,MAAM;AAChB,WAAO;AAAA,EACX;AACA,SAAO,cAAc,MAAM;AAC/B;AACA,SAAS,MAAM,WAAW,UAAU;AAChC,QAAM,OAAO,UAAU,QAAQ,MAAM,OAAO,UAAU,OAAO;AAC7D,MAAI,UAAU,iBAAiB,QAAQ,CAAC,UAAU,cAAc,IAAI,IAAI,GAAG;AACvE,WAAO;AAAA,EACX;AACA,MAAI,UAAU,oBAAoB,QAAQ,UAAU,iBAAiB,IAAI,IAAI,GAAG;AAC5E,WAAO;AAAA,EACX;AACA,MAAI,UAAU,iBAAiB,QAAQ,CAAC,UAAU,cAAc,IAAI,IAAI,GAAG;AACvE,WAAO;AAAA,EACX;AACA,SAAO,UAAU,oBAAoB,QAAQ,CAAC,UAAU,iBAAiB,IAAI,IAAI;AACrF;AAEA,IAAM,UAAN,MAAc;AAAA,EACV,YAAY,SAAS,MAAM;AACvB,SAAK,UAAU;AACf,SAAK,UAAU,CAAC;AAEhB,SAAK,YAAY;AAEjB,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,oBAAoB;AACzB,SAAK,SAAS,CAAC,EAAE,QAAQ,MAAM,OAAO,KAAK,OAAO,OAAO,KAAK,CAAC;AAAA,EACnE;AAAA,EACA,MAAM;AACF,UAAM,SAAS,KAAK,QAAQ;AAC5B,WAAO,KAAK,YAAY,QAAQ;AAC5B,WAAK,MAAM;AAAA,IACf;AACA,SAAK,WAAW;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,UAAM,QAAQ,KAAK;AACnB,WAAO,MAAM,MAAM,SAAS,CAAC;AAAA,EACjC;AAAA,EACA,QAAQ;AACJ,UAAM,QAAQ,KAAK;AACnB,QAAI,KAAK,YAAY,KAAK,GAAG;AACzB;AAAA,IACJ;AACA,UAAM,QAAQ,KAAK,UAAU,KAAK;AAClC,QAAI,SAAS,MAAM;AAEf,WAAK;AACL;AAAA,IACJ;AACA,SAAK,WAAW;AAChB,SAAK,WAAW,OAAO,MAAM,MAAM;AACnC,SAAK,YAAY,MAAM,MAAM,MAAM,MAAM;AACzC,UAAM,SAAS,MAAM,MAAM,CAAC,EAAE;AAC9B,SAAK,aAAa;AAClB,QAAI,SAAS,GAAG;AACZ,WAAK,oBAAoB;AAAA,IAC7B;AAAA,EACJ;AAAA;AAAA,EAEA,YAAY,OAAO;AACf,UAAM,QAAQ,MAAM;AACpB,QAAI,SAAS,QAAQ,KAAK,OAAO,UAAU,GAAG;AAC1C,aAAO;AAAA,IACX;AACA,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,MAAM,KAAK,KAAK,OAAO,GAAG;AAC3B,aAAO;AAAA,IACX;AACA,SAAK,WAAW;AAChB,SAAK,OAAO,IAAI;AAChB,WAAO;AAAA,EACX;AAAA,EACA,UAAU,OAAO;AACb,UAAM,WAAW,MAAM,OAAO,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC;AAC1D,aAAS,QAAQ,UAAU;AACvB,YAAM,QAAQ,WAAW,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,WAAW,KAAK,IAAI;AACpF,UAAI,SAAS,MAAM;AACf,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,WAAW,MAAM;AACb,UAAMA,SAAQ,KAAK,SAAS,IAAI;AAChC,QAAIA,UAAS,MAAM;AACf,aAAO;AAAA,IACX;AACA,WAAO,EAAE,MAAM,OAAAA,OAAM;AAAA,EACzB;AAAA;AAAA,EAEA,aAAa,MAAM;AACf,UAAM,WAAW,KAAK;AACtB,aAAS,YAAY,KAAK;AAC1B,UAAMA,SAAQ,SAAS,KAAK,KAAK,OAAO;AACxC,QAAIA,UAAS,MAAM;AACf,aAAO;AAAA,IACX;AACA,UAAM,UAAU,KAAK;AACrB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,UAAIA,OAAM,QAAQ,CAAC,CAAC,MAAM,QAAW;AACjC;AAAA,MACJ;AACA,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,aAAO,KAAK,WAAW,IAAI;AAAA,IAC/B;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,MAAM;AACX,QAAI,KAAK,QAAQ,QAAQ,CAAC,MAAM,KAAK,MAAM,KAAK,SAAS,GAAG;AACxD,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,KAAK;AACnB,UAAM,YAAY,KAAK;AACvB,UAAMA,SAAQ,MAAM,KAAK,KAAK,OAAO;AACrC,QAAIA,UAAS,MAAM;AACf,aAAO;AAAA,IACX;AACA,QAAIA,OAAM,CAAC,EAAE,SAAS,GAAG;AACrB,aAAOA;AAAA,IACX;AAEA,QAAI,CAAC,KAAK,iBAAiB,KAAK,qBAAqB,uBAAuB;AACxE,aAAO;AAAA,IACX;AACA,SAAK;AACL,WAAOA;AAAA,EACX;AAAA,EACA,WAAW,EAAE,MAAM,OAAAA,OAAM,GAAG,QAAQ;AAChC,UAAM,MAAMA,OAAM,CAAC;AACnB,QAAI,KAAK,cAAc,MAAM;AACzB,WAAK,QAAQ,KAAK,MAAM,KAAK,MAAM;AACnC;AAAA,IACJ;AACA,SAAK,YAAY,MAAMA,QAAO,MAAM;AAAA,EACxC;AAAA;AAAA,EAEA,YAAY,MAAMA,QAAO,QAAQ;AAC7B,UAAM,UAAUA,OAAM;AACtB,UAAM,QAAQA,OAAM,OAAO,MAAM,QAAQA,OAAM,CAAC,EAAE,QAAQ,QAAQ,KAAK;AACvE,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,YAAM,QAAQ,QAAQ,CAAC;AACvB,UAAI,SAAS,QAAQ,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG;AAC7D;AAAA,MACJ;AACA,UAAI,MAAM,CAAC,IAAI,QAAQ;AACnB,cAAM,MAAM,KAAK,QAAQ,MAAM,QAAQ,MAAM,CAAC,CAAC;AAC/C,aAAK,QAAQ,gBAAgB,MAAM,KAAK,MAAM;AAAA,MAClD;AACA,YAAM,YAAY,KAAK,QAAQ,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AACvD,YAAM,YAAY,MAAM,IAAI,CAAC,KAAK,MAAM,MAAM,SAAS,CAAC;AACxD,WAAK,QAAQ,WAAW,WAAW,MAAM;AACzC,eAAS,MAAM,CAAC;AAAA,IACpB;AACA,QAAI,SAAS,KAAK;AACd,YAAM,OAAO,KAAK,QAAQ,MAAM,QAAQ,GAAG;AAC3C,WAAK,QAAQ,gBAAgB,MAAM,MAAM,MAAM;AAAA,IACnD;AAAA,EACJ;AAAA,EACA,YAAY,MAAM,QAAQ;AACtB,UAAM,QAAQ,KAAK;AACnB,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,MAAM,SAAS,GAAG,KAAK;AACnD,YAAM,IAAI;AAAA,IACd;AACA,QAAI,KAAK,QAAQ,MAAM;AACnB,WAAK,KAAK,QAAQ,KAAK;AAAA,IAC3B;AACA,QAAI,KAAK,QAAQ,MAAM;AACnB,YAAM,KAAK,EAAE,QAAQ,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,IACxD;AACA,QAAI,KAAK,SAAS,MAAM;AACpB;AAAA,IACJ;AACA,UAAM,WAAW,cAAc,KAAK,KAAK;AACzC,QAAI,YAAY,MAAM;AAClB;AAAA,IACJ;AACA,UAAM,KAAK,EAAE,QAAQ,UAAU,OAAO,SAAS,OAAO,OAAO,KAAK,MAAM,CAAC;AAAA,EAC7E;AAAA;AAAA,EAEA,aAAa;AACT,QAAI,KAAK,YAAY,KAAK,WAAW;AACjC;AAAA,IACJ;AACA,UAAM,OAAO,KAAK,QAAQ,MAAM,KAAK,UAAU,KAAK,SAAS;AAC7D,UAAM,SAAS,KAAK,KAAK;AACzB,SAAK,QAAQ,gBAAgB,MAAM,MAAM,MAAM;AAAA,EACnD;AAAA,EACA,aAAa,MAAM,KAAK,QAAQ;AAC5B,QAAI,CAAC,OAAO,eAAe,IAAI,IAAI,GAAG;AAClC,aAAO;AAAA,IACX;AACA,UAAM,eAAe,KAAK,WAAW;AACrC,QAAI,OAAO,mBAAmB,IAAI,YAAY,GAAG;AAC7C,aAAO;AAAA,IACX;AACA,WAAO,OAAO,SAAS,IAAI,GAAG,KAAK;AAAA,EACvC;AAAA,EACA,QAAQ,MAAM,KAAK,QAAQ;AACvB,UAAM,eAAe,KAAK,aAAa,MAAM,KAAK,MAAM;AACxD,UAAM,QAAQ;AAAA,MACV,MAAM;AAAA,MAAc;AAAA,MAAK,MAAM;AAAA,MAC/B,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK,OAAO,SAAS;AAAA,MAC5B,QAAQ,OAAO;AAAA,IACnB;AACA,SAAK,QAAQ,KAAK,KAAK;AACvB,SAAK,SAAS,GAAG;AACjB,QAAI,CAAC,OAAO,cAAc,IAAI,YAAY,GAAG;AACzC,WAAK,YAAY;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA,EAEA,SAAS,KAAK;AACV,SAAK,YAAY,IAAI;AACrB,UAAM,cAAc,IAAI,YAAY,IAAI;AACxC,QAAI,cAAc,GAAG;AACjB,WAAK,WAAW,IAAI;AACpB;AAAA,IACJ;AACA,aAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACnC,UAAI,IAAI,WAAW,CAAC,MAAM,IAAI;AAC1B,aAAK;AAAA,MACT;AAAA,IACJ;AACA,SAAK,UAAU,IAAI,SAAS;AAAA,EAChC;AACJ;AAGA,IAAM,oBAAoB,EAAE,MAAM,gBAAgB,MAAM,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;AAOzE,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,SAAS,QAAQ,QAAQ;AACrB,UAAM,OAAO,UAAU;AACvB,UAAM,WAAW,OAAO,WAAW,WAAW,SAAS,IAAI,MAAM,IAAI;AACrE,UAAM,WAAW,cAAc,YAAY,iBAAiB;AAC5D,UAAM,MAAM,IAAI,QAAQ,MAAM,QAAQ;AACtC,WAAO,IAAI,IAAI;AAAA,EACnB;AACJ;;;ACleO,IAAM,0BAA0B,OAAO,OAAO;AAAA,EACjD,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AAAA,EACP,WAAW;AAAA,EACX,aAAa;AACjB,CAAC;AACD,IAAM,eAAe,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS;AAC7E,SAAS,WAAW,MAAM;AACtB,SAAO,KAAK,QAAQ,WAAW,OAAK,aAAa,CAAC,CAAC;AACvD;AAKO,IAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA,EAI3B,YAAY,WAAW,yBAAyB;AAC5C,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,MAAM;AACT,QAAI,OAAO;AACX,aAAS,SAAS,QAAQ,CAAC,GAAG;AAC1B,cAAQ,KAAK,aAAa,KAAK;AAAA,IACnC;AACA,WAAO;AAAA,EACX;AAAA,EACA,aAAa,OAAO;AAChB,UAAM,UAAU,WAAW,MAAM,OAAO,EAAE;AAC1C,UAAM,WAAW,KAAK,SAAS,MAAM,IAAI;AACzC,QAAI,YAAY,MAAM;AAClB,aAAO;AAAA,IACX;AACA,WAAO,gBAAgB,QAAQ,KAAK,OAAO;AAAA,EAC/C;AACJ;;;ACrCA,SAASC,YAAW,OAAO;AACvB,UAAQ,SAAS,IAAI,QAAQ,MAAM,MAAM;AAC7C;AACA,SAAS,iBAAiB,OAAO;AAC7B,MAAI,YAAY,cAAc,KAAK,GAAG;AAClC,WAAO;AAAA,EACX;AACA,MAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG;AACxC,WAAO;AAAA,EACX;AACA,MAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG;AACxC,YAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC;AAAA,EAC5C;AACA,SAAO;AACX;AAEA,SAAS,iBAAiB,aAAa;AACnC,MAAI,YAAY,cAAc,WAAW,GAAG;AACxC,WAAO,EAAE,KAAK,YAAY;AAAA,EAC9B;AACA,QAAM,UAAU,YAAY,KAAK;AACjC,QAAM,MAAM,mDAAmD,KAAK,OAAO;AAC3E,MAAI,OAAO,MAAM;AACb,WAAO,EAAE,KAAK,QAAQ;AAAA,EAC1B;AACA,QAAM,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;AACvC,SAAO,EAAE,KAAK,IAAI,CAAC,GAAG,MAAM;AAChC;AACA,SAAS,gBAAgB,OAAO;AAC5B,UAAQ,SAAS,IAAI,QAAQ,qCAAqC,OAAO,EAAE,QAAQ,MAAM,QAAQ,EAAE,QAAQ,MAAM,MAAM;AAC3H;AAEA,SAAS,gBAAgB,KAAK;AAC1B,MAAI,OAAO,IAAI,KAAK;AACpB,MAAI,KAAK,WAAW,GAAG,GAAG;AACtB,WAAO,KAAK,MAAM,CAAC;AAAA,EACvB;AACA,MAAI,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,SAAS,KAAK,GAAG;AAC7C,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EAC3B;AACA,QAAM,QAAQ,KAAK,MAAM,WAAW;AACpC,SAAO,MAAM,IAAI,OAAK,EAAE,KAAK,EAAE,QAAQ,SAAS,GAAG,CAAC;AACxD;AACA,SAAS,eAAe,WAAW;AAC/B,QAAM,OAAO,UAAU,WAAW,GAAG,GAAG,QAAQ,UAAU,SAAS,GAAG;AACtE,MAAI,QAAQ,OAAO;AACf,WAAO;AAAA,EACX;AACA,MAAI,OAAO;AACP,WAAO;AAAA,EACX;AACA,SAAO,OAAO,SAAS;AAC3B;AACA,SAAS,cAAc,MAAM;AACzB,QAAM,MAAM,MAAM,KAAK,IAAI;AAC3B,SAAO,IAAI,CAAC,EAAE;AAClB;AAKA,SAAS,eAAe,KAAK;AACzB,QAAM,QAAQ,IAAI,QAAQ,OAAO,MAAM,EAAE,MAAM,OAAO;AACtD,QAAM,QAAQ,CAAC;AACf,WAAS,QAAQ,OAAO;AACpB,UAAM,UAAU,MAAM,MAAM,SAAS,CAAC;AACtC,UAAM,SAAS,WAAW,KAAK,IAAI;AACnC,QAAI,UAAU,SAAS,WAAW,QAAQ,OAAO,CAAC,EAAE,SAAS,QAAQ,SAAS;AAC1E,YAAM,gBAAgB,OAAO,CAAC,EAAE;AAChC,YAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,YAAM,KAAK,EAAE,QAAQ,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC;AACxD;AAAA,IACJ;AACA,QAAI,WAAW,MAAM;AACjB;AAAA,IACJ;AACA,UAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,cAAc,IAAI,CAAC;AAC3D,UAAM,UAAU,KAAK,MAAM,MAAM;AACjC,YAAQ,MAAM,KAAK,OAAO;AAAA,EAC9B;AACA,SAAO,MAAM,IAAI,OAAK,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAChE;AAKA,SAAS,WAAW,MAAM;AACtB,UAAQ,QAAQ,IAAI,QAAQ,SAAS,GAAG;AAC5C;AAEA,IAAM,UAAU,IAAI,QAAQ;AAE5B,IAAM,gBAAgB;AACtB,SAAS,gBAAgB,KAAK;AAC1B,SAAO,KAAK,SAAS;AACzB;AACA,SAAS,WAAW,OAAO;AACvB,MAAI,YAAY,cAAc,KAAK,GAAG;AAClC,WAAO;AAAA,EACX;AACA,MAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG;AACxC,WAAO;AAAA,EACX;AACA,MAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG;AACxC,YAAQ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC;AAAA,EAC5C;AACA,SAAO;AACX;AACA,SAAS,mBAAmB,OAAO;AAC/B,SAAO,OAAO,QAAQ,WAAW,GAAG,EAAE,KAAK,EAAE,QAAQ,OAAO,GAAG,EAAE,YAAY;AACjF;AACA,SAAS,MAAM,OAAO,SAAS,IAAI;AAC/B,QAAM,MAAM,QAAQ,KAAK,KAAK;AAC9B,MAAI,OAAO,IAAI,QAAQ;AACnB,WAAO,GAAG,GAAG;AAAA,EACjB;AACA,SAAO;AACX;AAEA,IAAM,UAAU;AAChB,IAAM,KAAK;AACX,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,SAAS;AACf,IAAM,aAAa;AAEnB,IAAM,QAAQ;AACd,IAAM,QAAQ;AAEd,IAAM,aAAa;AAEnB,IAAM,OAAO;AAEb,IAAM,YAAY;AAClB,IAAM,MAAM;AAEZ,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACxB,IAAM,OAAO;AAEb,IAAM,YAAY;AAElB,IAAM,SAAS;AACf,IAAM,QAAQ;AACd,IAAM,QAAQ;AAEd,IAAM,cAAc;AACpB,IAAM,YAAY;AAClB,IAAM,OAAO;AAEb,IAAM,SAAS;AAEf,IAAM,eAAe,EAAE,KAAK,QAAQ,QAAQ,QAAQ,KAAK,QAAQ;AAEjE,IAAM,WAAW;AAEjB,IAAM,WAAW;AAEjB,IAAM,eAAe;AAErB,IAAM,eAAe;AAErB,IAAM,QAAQ;AACd,IAAI;AAAA,CACH,SAAUC,iBAAgB;AACvB,EAAAA,gBAAe,MAAM,IAAI;AACzB,EAAAA,gBAAe,MAAM,IAAI;AACzB,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,YAAY,IAAI;AAC/B,EAAAA,gBAAe,OAAO,IAAI;AAC1B,EAAAA,gBAAe,SAAS,IAAI;AAC5B,EAAAA,gBAAe,MAAM,IAAI;AACzB,EAAAA,gBAAe,QAAQ,IAAI;AAC3B,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,MAAM,IAAI;AACzB,EAAAA,gBAAe,OAAO,IAAI;AAC1B,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,MAAM,IAAI;AACzB,EAAAA,gBAAe,UAAU,IAAI;AAC7B,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,eAAe,IAAI;AAClC,EAAAA,gBAAe,OAAO,IAAI;AAC1B,EAAAA,gBAAe,gBAAgB,IAAI;AACnC,EAAAA,gBAAe,aAAa,IAAI;AAChC,EAAAA,gBAAe,eAAe,IAAI;AAClC,EAAAA,gBAAe,UAAU,IAAI;AAC7B,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,OAAO,IAAI;AAC1B,EAAAA,gBAAe,UAAU,IAAI;AAC7B,EAAAA,gBAAe,WAAW,IAAI;AAC9B,EAAAA,gBAAe,mBAAmB,IAAI;AACtC,EAAAA,gBAAe,oBAAoB,IAAI;AAC3C,GAAG,mBAAmB,iBAAiB,CAAC,EAAE;AAC1C,IAAI;AAAA,CACH,SAAUC,iBAAgB;AACvB,EAAAA,gBAAeA,gBAAe,SAAS,IAAI,CAAC,IAAI;AAChD,EAAAA,gBAAeA,gBAAe,WAAW,IAAI,CAAC,IAAI;AAClD,EAAAA,gBAAeA,gBAAe,gBAAgB,IAAI,CAAC,IAAI;AACvD,EAAAA,gBAAeA,gBAAe,SAAS,IAAI,CAAC,IAAI;AAChD,EAAAA,gBAAeA,gBAAe,UAAU,IAAI,CAAC,IAAI;AACjD,EAAAA,gBAAeA,gBAAe,UAAU,IAAI,CAAC,IAAI;AACjD,EAAAA,gBAAeA,gBAAe,WAAW,IAAI,CAAC,IAAI;AAClD,EAAAA,gBAAeA,gBAAe,QAAQ,IAAI,CAAC,IAAI;AAC/C,EAAAA,gBAAeA,gBAAe,YAAY,IAAI,CAAC,IAAI;AACnD,EAAAA,gBAAeA,gBAAe,aAAa,IAAI,CAAC,IAAI;AACpD,EAAAA,gBAAeA,gBAAe,eAAe,IAAI,EAAE,IAAI;AACvD,EAAAA,gBAAeA,gBAAe,WAAW,IAAI,EAAE,IAAI;AACnD,EAAAA,gBAAeA,gBAAe,gBAAgB,IAAI,EAAE,IAAI;AACxD,EAAAA,gBAAeA,gBAAe,aAAa,IAAI,EAAE,IAAI;AACrD,EAAAA,gBAAeA,gBAAe,WAAW,IAAI,EAAE,IAAI;AACnD,EAAAA,gBAAeA,gBAAe,eAAe,IAAI,EAAE,IAAI;AACvD,EAAAA,gBAAeA,gBAAe,OAAO,IAAI,EAAE,IAAI;AAC/C,EAAAA,gBAAeA,gBAAe,MAAM,IAAI,EAAE,IAAI;AAC9C,EAAAA,gBAAeA,gBAAe,WAAW,IAAI,EAAE,IAAI;AACnD,EAAAA,gBAAeA,gBAAe,oBAAoB,IAAI,EAAE,IAAI;AAC5D,EAAAA,gBAAeA,gBAAe,OAAO,IAAI,EAAE,IAAI;AAC/C,EAAAA,gBAAeA,gBAAe,QAAQ,IAAI,EAAE,IAAI;AAChD,EAAAA,gBAAeA,gBAAe,UAAU,IAAI,EAAE,IAAI;AAClD,EAAAA,gBAAeA,gBAAe,mBAAmB,IAAI,EAAE,IAAI;AAC3D,EAAAA,gBAAeA,gBAAe,SAAS,IAAI,EAAE,IAAI;AAEjD,EAAAA,gBAAeA,gBAAe,MAAM,IAAI,GAAG,IAAI;AAC/C,EAAAA,gBAAeA,gBAAe,OAAO,IAAI,GAAG,IAAI;AACpD,GAAG,mBAAmB,iBAAiB,CAAC,EAAE;AAO1C,SAAS,WAAW,QAAQ,CAAC,GAAG;AAC5B,QAAM,QAAQ;AAAA;AAAA,IAEV,CAAC,eAAe,OAAO,GAAG;AAAA,MACtB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,SAAS,SAAO;AACjD,cAAM,QAAQ,gBAAgB,GAAG;AACjC,cAAM,SAAS,CAAC;AAAA,UACR,MAAM,eAAe;AAAA,UAAM;AAAA,UAAO,KAAK,IAAI,CAAC;AAAA,UAAG,MAAM,IAAI,CAAC;AAAA,QAC9D,CAAC;AACL,YAAI,QAAQ,GAAG;AAEX,gBAAM,OAAO,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,MAAM,SAAS,MAAM,QAAQ;AAC3E,gBAAM,UAAU,QAAQ,MAAM,QAAQ,MAAM;AAAA,QAChD;AACA,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,SAAS,GAAG;AAAA,MACxB,MAAM,CAAC,UAAU,MAAM,OAAO,KAAK,SAAO;AACtC,cAAM,QAAQ,gBAAgB,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;AAC9H,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAW;AAAA,UAAO;AAAA,UAAK;AAAA,UAAM;AAAA,UAAI;AAAA,UAAO;AAAA,UAAK;AAAA,QACtE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,kBAAkB,GAAG;AAAA,MACjC,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,cAAc,SAAO;AACtD,cAAM,MAAM,IAAI,CAAC,GAAG,KAAK,mBAAmB,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,QAAQ,eAAe,GAAG;AAC7F,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAoB,OAAO,gBAAgB,GAAG;AAAA,UAAG;AAAA,UAAK;AAAA,UAAM;AAAA,UACjF,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QAC5C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,aAAa,CAAC,GAAG,cAAc,CAAC,GAAG,YAAY,CAAC;AACtD,WAAS,KAAK,OAAO;AACjB,QAAI,MAAM,OAAO;AACjB,QAAI,UAAU,GAAG;AACb,aAAO,EAAE;AACT,aAAO,EAAE;AAAA,IACb,OACK;AACD,aAAO;AAAA,IACX;AACA,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,mBAAW,KAAK,IAAI;AACpB;AAAA,MACJ,KAAK;AACD,YAAI,UAAU,GAAG;AACb,gBAAM,MAAM,EAAE,KAAK,YAAY;AAC/B,WAAC,UAAU,GAAG,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI;AAAA,QACrD;AACA;AAAA,MACJ;AACI,cAAM,aAAa;AAAA,UACf,MAAM,CAAC,OAAO,UAAU;AACpB,kBAAM,SAAS,KAAK,KAAK,OAAO,KAAK;AACrC,8BAAkB,OAAO,QAAQ,KAAK;AACtC,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,oBAAY,KAAK,UAAU;AAC3B;AAAA,IACR;AAAA,EACJ;AAEA,QAAM,oBAAoB;AAAA;AAAA,IAEtB,CAAC,eAAe,IAAI,GAAG;AAAA,MACnB,MAAM,CAAC,UAAU,MAAM,OAAO,MAAM,SAAO;AACvC,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO;AAC3B,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG;AAAA,UAAK;AAAA,UAAM,MAAM,eAAe;AAAA,QACjE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,KAAK,GAAG;AAAA,MACpB,MAAM,CAAC,UAAU,MAAM,OAAO,OAAO,SAAO;AACxC,cAAM,MAAM,IAAI,CAAC;AACjB,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAO;AAAA,UAAK,MAAM;AAAA,QAC3C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,SAAS;AAAA;AAAA,IAEX,CAAC,eAAe,WAAW,GAAG;AAAA,MAC1B,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,eAAe,OAAO,SAAO;AACpE,cAAM,QAAQ,gBAAgB,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,GAAG,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM,mBAAmB,SAAS;AAElN,cAAM,EAAE,KAAK,MAAM,IAAI,iBAAiB,WAAW;AACnD,cAAM,SAAS,MAAM,SAAS,MAAM,WAAW;AAC/C,YAAI,OAAO;AACP,iBAAO,CAAC;AAAA,YACA;AAAA,YAAO,MAAM,MAAM,eAAe,QAAQ,eAAe;AAAA,YACzD;AAAA,YAAK;AAAA,YAAM,KAAK;AAAA,YAAK;AAAA,YAAO;AAAA,YAAK;AAAA,UACrC,CAAC;AAAA,QACT;AACA,eAAO,CAAC;AAAA,UACA;AAAA,UAAO,MAAM,MAAM,eAAe,OAAO,eAAe;AAAA,UACxD;AAAA,UAAK;AAAA,UAAM,MAAM;AAAA,UAAK;AAAA,UAAO;AAAA,UAAK;AAAA,QACtC,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,MAAM,GAAG;AAAA,MACrB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,QAAQ,OAAO,SAAO;AAC7D,cAAM,OAAO,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;AAC1C,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,MAAM,eAAe;AAAA,QACzE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,QAAQ,GAAG;AAAA,MACvB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,UAAU,OAAO,SAAO;AAC/D,cAAM,OAAO,IAAI,CAAC;AAClB,cAAM,UAAU,CAAC,YAAY,KAAK,IAAI;AACtC,cAAM,OAAO,UAAU,YAAY,OAAO;AAC1C,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM;AAAA,UAAM,MAAM,eAAe;AAAA,UAC3E,QAAQ,CAAC,EAAE,MAAM,eAAe,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,QAC3D,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,OAAO,GAAG;AAAA,MACtB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,UAAU,OAAO,SAAO;AAC/D,cAAM,OAAO,IAAI,CAAC;AAClB,cAAM,OAAO,UAAU,KAAK,IAAI,IAAI,YAAY,OAAO;AACvD,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG,KAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM,MAAM,eAAe;AAAA,UACzE,QAAQ,CAAC,EAAE,MAAM,eAAe,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,QAC3D,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,iBAAiB,GAAG;AAAA,MAChC,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,cAAc,OAAO,SAAO;AACnE,cAAM,KAAK,mBAAmB,IAAI,CAAC,CAAC;AACpC,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG,KAAK,IAAI,CAAC;AAAA,UAAG,MAAM,IAAI,CAAC;AAAA,UAAG;AAAA,UAAI,MAAM,eAAe;AAAA,QACrF,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,IAAI,GAAG;AAAA,MACnB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,MAAM,OAAO,SAAO;AAC3D,cAAM,OAAOF,YAAW,IAAI,CAAC,CAAC;AAC9B,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAM,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,OAAO,gBAAgB,GAAG;AAAA,QAC5E,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,cAAc,GAAG;AAAA,MAC7B,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,iBAAiB,OAAO,SAAO;AACtE,YAAI,IAAI,SAAS,KAAK,YAAY,cAAc,IAAI,CAAC,CAAC,GAAG;AACrD,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,IAAI,CAAC,EAAE,SAAS,IAAI,eAAe,OAAO,eAAe,QAAQ,OAAO,IAAI,CAAC;AAC1F,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAC1B;AAAA,UAAM,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QACrE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,SAAS,GAAG;AAAA,MACxB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,WAAW,OAAO,SAAO;AAEhE,cAAM,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC;AACvD,YAAI,YAAY,cAAc,IAAI,GAAG;AACjC,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,OAAO,SAAS,IAAI,eAAe,OAAO,eAAe;AACtE,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAC1B;AAAA,UAAM,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QACrE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,aAAa,GAAG;AAAA,MAC5B,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,QAAQ,OAAO,SAAO;AAC7D,YAAI,IAAI,SAAS,KAAK,YAAY,cAAc,IAAI,CAAC,CAAC,GAAG;AACrD,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,eAAe,eAAe,OAAO,IAAI,CAAC;AACvD,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAC1B;AAAA,UAAM,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QACrE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,KAAK,GAAG;AAAA,MACpB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,OAAO,OAAO,SAAO;AAC5D,YAAI,IAAI,SAAS,KAAK,YAAY,cAAc,IAAI,CAAC,CAAC,GAAG;AACrD,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,eAAe,OAAO,OAAO,IAAI,CAAC;AAC/C,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAC1B;AAAA,UAAM,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QACrE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,SAAS,GAAG;AAAA,MACxB,MAAM,CAAC,OAAO,UAAU,YAAY,OAAO,WAAW,OAAO,SAAO;AAChE,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO;AAC3B,eAAO,CAAC;AAAA,UACA,OAAO,gBAAgB,GAAG;AAAA,UAAG;AAAA,UAAK;AAAA,UAAM,MAAM,eAAe;AAAA,QACjE,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,oBAAoB,CAAC,OAAO,QAAQ,UAAU;AAChD,UAAM,QAAQ,QAAQ,SAAS,KAAK,OAAO,CAAC,EAAE;AAC9C,QAAI,QAAQ,GAAG;AACX,YAAM,OAAO,MAAM,OAAO,GAAG,KAAK;AAClC,YAAM,SAAS,MAAM,SAAS,MAAM,WAAW,KAAK,CAAC;AACrD,YAAM,UAAU,QAAQ,MAAM,QAAQ,MAAM;AAAA,IAChD;AAAA,EACJ;AACA,QAAM,cAAc,CAAC,OAAO,SAAS,OAAO,OAAO;AAC/C,UAAM,SAAS,MAAM,OAAO,SAAS,SAAO;AACxC,UAAI,WAAW,MAAM;AAEjB,cAAM,YAAY,KAAK,KAAK,KAAK;AACjC,YAAI,aACG,UAAU,UACV,UAAU,QAAQ,IAAI,OAE3B;AACE,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO,GAAG,GAAG;AAAA,IACjB,CAAC;AACD,sBAAkB,OAAO,QAAQ,KAAK;AACtC,WAAO;AAAA,EACX;AAEA,QAAM,cAAc;AAAA,IAChB,OAAO,eAAe,iBAAiB;AAAA,IACvC,OAAO,eAAe,cAAc;AAAA,IACpC,OAAO,eAAe,WAAW;AAAA,IACjC,OAAO,eAAe,MAAM;AAAA,IAC5B,OAAO,eAAe,QAAQ;AAAA,IAC9B,OAAO,eAAe,SAAS;AAAA,IAC/B,OAAO,eAAe,aAAa;AAAA,IACnC,OAAO,eAAe,KAAK;AAAA,IAC3B,OAAO,eAAe,IAAI;AAAA,IAC1B,OAAO,eAAe,SAAS;AAAA,IAC/B,OAAO,eAAe,OAAO;AAAA,EACjC;AACA,QAAM,UAAU,KAAK,MAAM,aAAa,WAAW;AACnD,cAAY,KAAK,kBAAkB,eAAe,IAAI,GAAG,kBAAkB,eAAe,KAAK,CAAC;AAGhG,QAAM,iBAAiB,CAAC,SAAS;AAC7B,UAAM,SAAS,CAAC,kBAAkB,eAAe,IAAI,GAAG,kBAAkB,eAAe,KAAK,CAAC;AAC/F,UAAM,MAAM,MAAM,YAAY,KAAK;AACnC,QAAI,OAAO,OAAO,WAAW;AACzB,YAAM,UAAU,QAAQ,MAAM,QAAQ,UAAU,GAAG,CAAC;AAAA,IACxD;AACA,WAAO;AAAA,EACX;AAGA,QAAM,cAAc;AAAA;AAAA,IAEhB,CAAC,eAAe,SAAS,GAAG;AAAA,MACxB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,WAAW,SAAO;AAEnD,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO,IAAI,QAAQ,aAAa,EAAE;AAEtD,YAAI,KAAK,KAAK,EAAE,WAAW,GAAG;AAC1B,iBAAO;AAAA,QACX;AACA,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAW;AAAA,UAAK;AAAA;AAAA,UAErC,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QAC5C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,KAAK,GAAG;AAAA,MACpB,MAAM,CAAC,UAAU,MAAM,OAAO,aAAa,SAAO;AAC9C,cAAM,MAAM,IAAI,CAAC;AACjB,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAO;AAAA,UAAK,MAAM;AAAA,QAC3C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,mBAAmB,CAAC,MAAM,UAAU;AACtC,UAAM,cAAc,mDAAmD,KAAK,IAAI;AAChF,QAAI,CAAC,aAAa;AACd,aAAO,MAAM,SAAS,MAAM,WAAW;AAAA,IAC3C;AACA,UAAM,SAAS,MAAM,SAAS,MAAM,UAAU;AAE9C,UAAM,QAAQ,OAAO,CAAC;AACtB,UAAM,QAAQ,CAAC,aAAa,KAAK,IAAI;AACrC,QAAI,CAAC,SAAS,OAAO,SAAS,eAAe,WAAW;AACpD,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,MAAM,UAAU,CAAC;AAC/B,UAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,WAAO,MAAM,OAAO,IAAI;AAAA,EAC5B;AACA,QAAM,oBAAoB,CAAC,KAAK,UAAU;AACtC,UAAM,QAAQ,eAAe,GAAG;AAChC,UAAM,WAAW,MAAM,OAAO,OAAK,CAAC,YAAY,cAAc,CAAC,CAAC;AAChE,WAAO,SAAS,IAAI,UAAQ;AAExB,YAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,YAAM,OAAO,OAAO,KAAK,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI;AACjD,YAAM,SAAS,iBAAiB,MAAM,KAAK;AAC3C,UAAI,QAAQ,MAAM;AACd,eAAO,EAAE,MAAM,eAAe,UAAU,KAAK,MAAM,MAAM,OAAO;AAAA,MACpE;AACA,YAAM,UAAU,KAAK,CAAC,MAAM;AAC5B,aAAO,EAAE,MAAM,eAAe,UAAU,KAAK,MAAM,MAAM,QAAQ,MAAM,MAAM,QAAQ;AAAA,IACzF,CAAC;AAAA,EACL;AACA,QAAM,mBAAmB,CAAC,OAAO,OAAO,QAAQ,UAAU;AACtD,UAAM,SAAS,MAAM,IAAI,CAAC,WAAW,MAAM;AAEvC,YAAM,OAAO,MAAM,CAAC,KAAK;AACzB,YAAM,aAAa,MAAM,SAAS,MAAM,WAAW;AACnD,aAAO,EAAE,MAAM,eAAe,WAAW,KAAK,MAAM,MAAM,QAAQ,OAAO,WAAW,QAAQ,WAAW;AAAA,IAC3G,CAAC;AACD,UAAM,MAAM,MAAM,KAAK,KAAK;AAC5B,UAAM,MAAM,EAAE,MAAM,eAAe,UAAU,KAAK,MAAM,KAAK,QAAQ,OAAO;AAC5E,WAAO;AAAA,EACX;AACA,QAAM,QAAQ;AAAA;AAAA,IAEV,CAAC,eAAe,cAAc,GAAG;AAAA,MAC7B,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,IAAI,SAAO;AAC5C,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO;AAC3B,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAgB;AAAA,UAAK;AAAA,QAC9C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,OAAO,GAAG;AAAA,MACtB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,SAAS,SAAO;AAEjD,cAAM,OAAO,IAAI,CAAC,EAAE,QAAQ,mBAAmB,EAAE;AACjD,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAS,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,OAAO,IAAI,CAAC,EAAE;AAAA,UAAQ,KAAK,mBAAmB,IAAI;AAAA,UACnG,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QAC5C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,IACA,CAAC,eAAe,QAAQ,GAAG;AAAA,MACvB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,UAAU,SAAO;AAClD,cAAM,OAAO,IAAI,CAAC;AAClB,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAS,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,OAAO;AAAA,UAAG,KAAK,mBAAmB,IAAI;AAAA,UACvF,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QAC5C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,IACA,CAAC,eAAe,QAAQ,GAAG;AAAA,MACvB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,UAAU,SAAO;AAClD,cAAM,OAAO,IAAI,CAAC;AAClB,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAS,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,UAAM,OAAO;AAAA,UAAG,KAAK,mBAAmB,IAAI;AAAA,UACvF,QAAQ,MAAM,SAAS,MAAM,WAAW;AAAA,QAC5C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,SAAS,GAAG;AAAA,MACxB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,WAAW,SAAO;AAEnD,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO,IAAI,QAAQ,WAAW,EAAE,EAAE,QAAQ,QAAQ,EAAE,GAAG,OAAOA,YAAW,IAAI;AAEjG,YAAI,KAAK,WAAW,GAAG;AACnB,iBAAO;AAAA,QACX;AACA,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAW;AAAA,UAAK;AAAA,UACrC,QAAQ,MAAM,SAAS,MAAM,eAAe,EAAE,CAAC;AAAA,QACnD,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,MAAM,GAAG;AAAA,MACrB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,QAAQ,SAAO;AAEhD,cAAM,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,QAAQ,KAAK,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,EAAE,YAAY;AAE3F,cAAM,SAAS,QAAQ,YAAY,OAAO,SAAS,IAAI,IAAI;AAC3D,YAAI,UAAU,MAAM;AAChB,gBAAM,OAAOA,YAAW,IAAI,CAAC,CAAC;AAC9B,iBAAO,CAAC;AAAA,YACA,MAAM,eAAe;AAAA,YAAW,KAAK,IAAI,CAAC;AAAA,YAAG;AAAA,YAAM;AAAA,YACnD,QAAQ,MAAM,SAAS,MAAM,eAAe,IAAI,CAAC;AAAA,UACrD,CAAC;AAAA,QACT;AAEA,cAAM,OAAO,WAAW,IAAI,CAAC,CAAC;AAC9B,cAAM,SAAS,QAAQ,SAAS,MAAM,MAAM;AAC5C,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAW,KAAK,IAAI,CAAC;AAAA,UAAG,MAAM;AAAA,UAAM;AAAA,UAAM,QAAQ,OAAO;AAAA,UAAM,aAAa;AAAA,UAAM;AAAA,QAC3G,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,UAAU,GAAG;AAAA,MACzB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,YAAY,SAAO;AACpD,cAAM,MAAM,IAAI,CAAC,GAAG,OAAO,IAAI,QAAQ,gBAAgB,EAAE;AACzD,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAY;AAAA,UAAK;AAAA;AAAA,UAEtC,QAAQ,MAAM,SAAS,MAAM,UAAU;AAAA,QAC3C,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,WAAW,GAAG;AAAA,MAC1B,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,OAAO,SAAO;AAC/C,cAAM,MAAM,IAAI,CAAC,GAAG,aAAa,MAAM,KAAK,GAAG,GAAG,QAAQ,SAAS,WAAW,CAAC,CAAC,GAAG,SAAS,kBAAkB,KAAK,KAAK;AACxH,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAa;AAAA,UAAO;AAAA,UAAK,MAAM;AAAA,UAAK;AAAA,QAC7D,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,IACA,CAAC,eAAe,aAAa,GAAG;AAAA,MAC5B,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,OAAO,SAAO;AAC/C,cAAM,MAAM,IAAI,CAAC,GAAG,SAAS,kBAAkB,KAAK,KAAK;AACzD,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAe;AAAA,UAAK,MAAM;AAAA,UAAK;AAAA,QACxD,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA;AAAA,IAEA,CAAC,eAAe,KAAK,GAAG;AAAA,MACpB,MAAM,CAAC,OAAO,UAAU,MAAM,OAAO,OAAO,SAAO;AAC/C,cAAM,UAAU,gBAAgB,IAAI,CAAC,CAAC,GAAG,aAAa,gBAAgB,IAAI,CAAC,CAAC;AAE5E,YAAI,QAAQ,WAAW,WAAW,QAAQ;AACtC,iBAAO;AAAA,QACX;AACA,cAAM,QAAQ,WAAW,IAAI,cAAc;AAC3C,cAAM,YAAY,IAAI,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,OAAK,EAAE,KAAK,EAAE,SAAS,CAAC;AACvE,cAAM,YAAY,iBAAiB,SAAS,OAAO,MAAM,KAAK;AAC9D,cAAM,WAAW,UAAU,IAAI,UAAQ;AACnC,gBAAM,QAAQ,gBAAgB,IAAI;AAClC,iBAAO,iBAAiB,OAAO,OAAO,OAAO,KAAK;AAAA,QACtD,CAAC;AACD,cAAM,OAAO,CAAC,SAAS,EAAE,OAAO,QAAQ;AACxC,eAAO,CAAC;AAAA,UACA,MAAM,eAAe;AAAA,UAAO,KAAK,IAAI,CAAC;AAAA,UAAG,MAAM,IAAI,CAAC;AAAA,UAAG;AAAA,UAAO,QAAQ;AAAA,QAC1E,CAAC;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,aAAa,OAAO,OAAO,KAAK;AACtC,QAAM,UAAU,KAAK,MAAM,YAAY,UAAU;AACjD,aAAW,KAAK,YAAY,eAAe,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC;AAExF,QAAM,WAAW;AAAA;AAAA,IAEb,MAAM,eAAe,OAAO;AAAA;AAAA,IAE5B,MAAM,eAAe,kBAAkB;AAAA,IACvC,MAAM,eAAe,SAAS;AAAA,EAClC,EAAE;AAAA;AAAA,IAEF;AAAA,EAAU;AACV,SAAO;AACX;AAGA,IAAM,8BAA8B;AACpC,IAAM,cAAc;AACpB,SAAS,KAAK,OAAO;AACjB,SAAO,OAAO,QAAQ,aAAa,IAAI,EAAE,KAAK;AAClD;AACA,SAAS,eAAe,OAAO;AAC3B,MAAI,YAAY,cAAc,KAAK,GAAG;AAClC,WAAO;AAAA,EACX;AACA,QAAM,UAAU,gBAAgB,KAAK;AACrC,SAAO,WAAW,OAAO;AAC7B;AACA,SAAS,eAAe,OAAO;AAC3B,MAAI,SAAS,MAAM;AACf,WAAO;AAAA,EACX;AACA,SAAO,uBAAuB,KAAK;AACvC;AAEA,IAAM,eAAN,MAAmB;AAAA,EACf,YAAY,mBAAmB,CAAC,OAAO,OAAO,OAAO,QAAQ,IAAI;AAC7D,SAAK,mBAAmB;AAExB,SAAK,cAAc,CAAC;AAEpB,SAAK,aAAa,oBAAI,IAAI;AAC1B,SAAK,iBAAiB,CAAC;AACvB,SAAK,eAAe,IAAI,kBAAkB;AAC1C,SAAK,iBAAiB,CAAC,UAAU;AAC7B,YAAM,WAAW,MAAM;AACvB,UAAI,YAAY,cAAc,QAAQ,GAAG;AACrC,eAAO,MAAM;AAAA,MACjB;AACA,aAAO,KAAK,QAAQ,QAAQ;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA,oBAAoB,MAAM;AACtB,aAAS,SAAS,QAAQ,CAAC,GAAG;AAC1B,UAAI,OAAO,SAAS,eAAe,WAAW;AAC1C,aAAK,YAAY,KAAK,KAAK;AAAA,MAC/B;AACA,UAAI,OAAO,SAAS,eAAe,sBAAsB,CAAC,KAAK,WAAW,IAAI,MAAM,IAAI,CAAC,GAAG;AACxF,aAAK,WAAW,IAAI,MAAM,IAAI,GAAG,KAAK;AAAA,MAC1C;AACA,WAAK,oBAAoB,OAAO,MAAM;AAAA,IAC1C;AAAA,EACJ;AAAA,EACA,eAAe,KAAK,OAAO;AACvB,QAAI,YAAY,cAAc,GAAG,GAAG;AAChC,aAAO;AAAA,IACX;AACA,UAAM,MAAM,IAAI,YAAY;AAC5B,WAAO,KAAK,YAAY,KAAK,OAAM,EAAE,UAAU,SAAU,SAAS,EAAE,IAAI,YAAY,MAAM,GAAG;AAAA,EACjG;AAAA,EACA,iBAAiB,OAAO;AACpB,UAAM,IAAI;AACV,UAAM,OAAO,MAAM,MAAM;AACzB,QAAI,MAAM,aAAa,MAAM,MAAM;AAC/B,YAAM,iBAAiB,OAAQ,aAAa,OAAO,MAAO;AAC1D,YAAM,UAAU,KAAK,eAAe,KAAK;AACzC,aAAO,QAAQ,CAAC,QAAQ,cAAc,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC;AAAA,IAC1E;AAEA,UAAM,UAAU,CAAC,MAAM,kBAAkB;AACzC,QAAI,MAAM,QAAQ,MAAM,eAAe;AACnC,cAAQ,KAAK,aAAa;AAAA,IAC9B;AACA,UAAM,YAAY,gBAAgB,QAAQ,KAAK,GAAG,CAAC;AACnD,UAAM,cAAc,KAAK,aAAa,OAAO,MAAM,MAAM;AACzD,WAAO,QAAQ,CAAC,gBAAgB,SAAS,KAAK,WAAW,UAAU,CAAC,SAAS,CAAC;AAAA,EAClF;AAAA,EACA,aAAa,OAAO;AAChB,QAAI,MAAM,MAAM,KAAK,QAAQ,MAAM;AACnC,QAAI,CAAC,KAAK;AACN,YAAM,YAAY,KAAK,eAAe,MAAM,KAAK,IAAI;AACrD,YAAM,WAAW;AACjB,cAAQ,WAAW;AAAA,IACvB;AACA,QAAI,CAAC,KAAK;AACN,YAAM,UAAU,KAAK,eAAe,KAAK;AACzC,aAAO,KAAK,OAAO;AAAA,IACvB;AACA,UAAM,YAAY,eAAe,KAAK;AACtC,WAAO,aAAa,GAAG,UAAU,MAAM,IAAI,IAAI,SAAS;AAAA,EAC5D;AAAA,EACA,YAAY,OAAO;AACf,QAAI,OAAO,MAAM,MAAM,QAAQ,MAAM;AACrC,QAAI,CAAC,MAAM;AACP,YAAM,YAAY,KAAK,eAAe,MAAM,KAAK,KAAK;AACtD,aAAO,WAAW;AAClB,cAAQ,WAAW;AAAA,IACvB;AACA,UAAM,UAAU,KAAK,eAAe,KAAK;AACzC,QAAI,CAAC,MAAM;AACP,aAAO,IAAI,OAAO;AAAA,IACtB;AACA,UAAM,YAAY,eAAe,KAAK;AACtC,WAAO,YAAY,IAAI,IAAI,SAAS,IAAI,OAAO;AAAA,EACnD;AAAA,EACA,gBAAgB,OAAO;AACnB,UAAM,IAAI;AACV,UAAM,UAAU,KAAK,eAAe,KAAK;AACzC,QAAI,MAAM,MAAM,MAAM,MAAM;AACxB,aAAO,QAAS,OAAO,QAAQ,CAAC;AAAA,IACpC;AACA,UAAM,UAAU,MAAM,SAAS,MAAM,OAAO,aAAa;AACzD,WAAO,8DAA+D,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA,EACxG;AAAA,EACA,gBAAgB,KAAK;AACjB,UAAM,IAAI;AACV,QAAI,QAAQ;AACZ,aAAS,QAAQ,IAAI,UAAU,CAAC,GAAG;AAC/B,YAAM,MAAM,KAAK,QAAQ,MAAM,OAAO,OAAO;AAC7C,YAAM,QAAQ,eAAe,KAAK,OAAO,CAAC;AAC1C,YAAM,UAAU,KAAK,eAAe,IAAI;AACxC,eAAS,IAAI,GAAG,GAAG,KAAK,IAAI,OAAO,KAAK,GAAG;AAAA,IAC/C;AACA,WAAO,OAAO,KAAK,QAAQ,CAAC;AAAA,EAChC;AAAA,EACA,aAAa,OAAO;AAChB,UAAM,IAAI;AACV,UAAM,OAAO,MAAM,UAAU,CAAC;AAC9B,UAAM,aAAa,KAAK,OAAO,OAAK,EAAE,QAAQ,MAAM,IAAI;AACxD,UAAM,WAAW,KAAK,OAAO,OAAK,EAAE,QAAQ,MAAM,IAAI;AACtD,UAAM,OAAO,WAAW,IAAI,OAAK,KAAK,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE;AACjE,QAAI,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC;AACpD,QAAI,SAAS,SAAS,GAAG;AACrB,YAAM,OAAO,SAAS,IAAI,OAAK,KAAK,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE;AAC/D,cAAQ,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC;AAAA,IAC1C;AACA,WAAO,OAAO,WAAW,CAAC;AAAA,EAC9B;AAAA,EACA,yBAAyB,OAAO;AAC5B,UAAM,KAAK,MAAM,IAAI;AACrB,QAAI,CAAC,KAAK,WAAW,IAAI,EAAE,GAAG;AAC1B,aAAO,KAAK,MAAM,IAAI;AAAA,IAC1B;AACA,UAAM,QAAQ,KAAK;AACnB,UAAM,UAAU,CAAC,MAAM,SAAS,EAAE;AAClC,QAAI,SAAS;AACT,YAAM,KAAK,EAAE;AAAA,IACjB;AACA,UAAM,SAAS,MAAM,QAAQ,EAAE,IAAI;AACnC,UAAM,WAAW,UAAU,cAAc,EAAE,MAAM;AACjD,WAAO,0CAA0C,EAAE,IAAI,QAAQ,IAAI,MAAM;AAAA,EAC7E;AAAA;AAAA,EAEA,mBAAmB;AACf,UAAM,QAAQ,KAAK;AACnB,QAAI,MAAM,WAAW,GAAG;AACpB,aAAO;AAAA,IACX;AACA,UAAM,IAAI;AACV,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,aAAa,KAAK,WAAW,IAAI,EAAE;AACzC,YAAM,UAAU,KAAK,eAAe,UAAU;AAC9C,eAAS,cAAc,EAAE,KAAK,OAAO,oBAAoB,EAAE,8CAA8C,CAAC;AAAA,IAC9G;AACA,WAAO,8BAA8B,CAAC,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,aAAa,CAAC;AAAA,EACjF;AAAA,EACA,WAAW,OAAO,WAAW;AACzB,UAAM,IAAI,KAAK,gBAAgB,IAAI;AACnC,YAAQ,OAAO,MAAM;AAAA,MACjB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAChB,eAAO;AAAA,MACX,KAAK,eAAe;AAChB,eAAO,MAAM;AAAA,MACjB,KAAK,eAAe;AAChB,eAAO;AAAA,EAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC;AAAA,MACrD,KAAK,eAAe;AAChB,eAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACzB,KAAK,eAAe;AAChB,eAAO,KAAK,iBAAiB,KAAK;AAAA,MACtC,KAAK,eAAe;AAChB,eAAO,SAAS,EAAE,KAAK,CAAC;AAAA,MAC5B,KAAK,eAAe;AAChB,eAAO,SAAS,CAAC;AAAA,MACrB,KAAK,eAAe;AAChB,cAAM,SAAS,MAAM,OAAO,GAAG,MAAM,MAAM,KAAK;AAChD,eAAO,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC;AAAA,MAC/D,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAChB,eAAO,KAAK,aAAa,KAAK;AAAA,MAClC,KAAK,eAAe;AAChB,eAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACzB,KAAK,eAAe;AAChB,eAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACzB,KAAK,eAAe;AAChB,eAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACzB,KAAK,eAAe;AAChB,eAAO,WAAW;AAAA,MACtB,KAAK,eAAe;AAChB,eAAO,cAAc,MAAM,OAAO,CAAC;AAAA,EAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;AAAA,MAC/D,KAAK,eAAe;AAChB,eAAO;AAAA,EAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;AAAA,MACrC,KAAK,eAAe;AAChB,eAAO,KAAK,gBAAgB,KAAK;AAAA,MACrC,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAChB,eAAO,KAAK,YAAY,KAAK;AAAA,MACjC,KAAK,eAAe;AAChB,eAAO,KAAK,aAAa,KAAK;AAAA,MAClC,KAAK,eAAe;AAChB,eAAO,KAAK,yBAAyB,KAAK;AAAA,MAC9C,KAAK,eAAe;AAChB,eAAO,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;AAAA,MACjC,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAChB,eAAO,MAAM;AAAA,IACrB;AACA,WAAO,KAAK,iBAAiB,OAAO,SAAS;AAAA,EACjD;AAAA,EACA,QAAQ,MAAM;AACV,QAAI,MAAM;AACV,aAAS,SAAS,QAAQ,CAAC,GAAG;AAC1B,aAAO,KAAK,WAAW,OAAO,IAAI;AAAA,IACtC;AACA,WAAO;AAAA,EACX;AAAA,EACA,OAAO,MAAM;AACT,SAAK,cAAc,CAAC;AACpB,SAAK,WAAW,MAAM;AACtB,SAAK,iBAAiB,CAAC;AACvB,SAAK,oBAAoB,IAAI;AAC7B,UAAM,OAAO,KAAK,QAAQ,IAAI;AAC9B,UAAM,YAAY,KAAK,iBAAiB;AACxC,WAAO,KAAK,OAAO,SAAS;AAAA,EAChC;AACJ;AAEA,IAAM,gBAAN,MAAoB;AAAA,EAChB,QAAQ,OAAO;AACX,WAAO,YAAY,cAAc,KAAK,IAAI,KAAK,KAAK,UAAU,KAAK;AAAA,EACvE;AAAA,EACA,OAAO,MAAM;AACT,WAAO,MAAM,KAAK,OAAO,OAAK,CAAC,YAAY,cAAc,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,EAAE,KAAK,GAAG,IAAI;AAAA,EAC/F;AACJ;AACA,SAAS,WAAW,KAAK;AACrB,SAAO,OAAO,OAAO,QAAQ,YAAY,OAAO,IAAI,WAAW;AACnE;AAEO,IAAMG,UAAN,cAA6B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvC,OAAO,OAAO,cAAc,mBAAmB;AAC3C,UAAM,WAAW,IAAI,aAAa,iBAAiB;AACnD,QAAI,YAAY,cAAc,YAAY,GAAG;AACzC,aAAO,KAAK,MAAM,OAAO,QAAQ;AAAA,IACrC;AACA,WAAO,KAAK,MAAM,OAAO,WAAW,YAAY,GAAG,QAAQ;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAO,cAAc;AAC1B,UAAM,OAAO,KAAK,MAAM,OAAO,WAAW,YAAY,GAAG,IAAI,cAAc,CAAC;AAC5E,WAAO,KAAK,MAAM,IAAI;AAAA,EAC1B;AAAA,EACA,MAAM,OAAO,oBAAoB,WAAW,GAAG,WAAW,IAAI,aAAa,GAAG;AAE1E,UAAM,cAAc,SAAS,IAAI,QAAQ,UAAU,IAAI;AACvD,QAAI,WAAW,iBAAiB,GAAG;AAC/B,YAAM,UAAU,WAAW;AAC3B,aAAO,MAAM,MAAM,YAAY,SAAS,iBAAiB;AAAA,IAC7D;AACA,WAAO,MAAM,MAAM,YAAY,mBAAmB,QAAQ;AAAA,EAC9D;AACJ;;;ACr/BA,IAAM,uBAAuB,CAAC,cAAc,UAAU,UAAU,OAAO;AACvE,IAAM,uBAAuB,CAAC,KAAK,KAAK,KAAK,QAAQ,SAAS,QAAQ,aAAa,QAAQ,SAAS,MAAM,IAAI;AAC9G,IAAM,sBAAsB;AAAA;AAAA,EAExB;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA,EAAY;AAAA,EAAW;AAAA,EAAU;AAAA,EAC3G;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAA,EAAW;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAO;AAAA,EAAM;AAAA,EAAU;AAAA,EAC3G;AAAA,EAAc;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EACzG;AAAA,EAAO;AAAA,EAAU;AAAA,EAAa;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA;AAAA,EAE9D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAO;AAAA,EAAM;AAAA,EAAW;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAAA,EAAc;AAAA,EAC9F;AAAA,EAAa;AAAA,EAAM;AAAA,EAAS;AAAA,EAAU;AAAA,EAAa;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAY;AAAA,EAAW;AAAA,EACvG;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAU;AAC1F;AAEA,IAAM,aAAa;AAAA,EACf,EAAE,OAAO,OAAO,kCAAmC,MAAM,cAAc;AAAA,EACvE,EAAE,OAAO,OAAO,2BAA4B,MAAM,UAAU;AAAA,EAC5D,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,EAClD,EAAE,OAAO,OAAO;AAAA;AAAA,IAEhB,MAAM,UAAU;AAAA,EAChB,EAAE,OAAO,OAAO,mBAAoB,MAAM,QAAQ;AAAA,EAClD,EAAE,OAAO,KAAK,MAAM,UAAU,MAAM,WAAW;AAAA,EAC/C,EAAE,OAAO,OAAO,kCAAmC,MAAM,SAAS;AAAA,EAClE,EAAE,OAAO,OAAO,kCAAmC,MAAM,SAAS;AAAA,EAClE;AAAA;AAAA,IAEI,OAAO,OAAO;AAAA,IAAsE,MAAM;AAAA,IAC1F,MAAM,EAAE,kBAAkB,sBAAsB,kBAAkB,qBAAqB;AAAA,EAC3F;AAAA,EACA,EAAE,OAAO,OAAO,gHAAiH,MAAM,SAAS;AAAA,EAChJ,EAAE,OAAO,OAAO,+BAAgC,MAAM,aAAa;AAAA,EACnE,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,EAClD,EAAE,OAAO,OAAO,8BAA+B,MAAM,cAAc;AAAA,EACnE,EAAE,OAAO,OAAO,gHAAiH,MAAM,WAAW;AACtJ;AAOO,IAAM,mBAAmB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,OAAO,OAAO,OAAO,cAAc,MAAM,OAAO,UAAU,YAAY;AAAA,EACtF,SAAS;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,QACN,EAAE,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK;AAAA,QACxC,EAAE,OAAO,OAAO,WAAY,MAAM,eAAe,MAAM,qBAAqB;AAAA,QAC5E,EAAE,OAAO,OAAO,iCAAkC,MAAM,OAAO,WAAY,MAAM,SAAS;AAAA,MAC9F;AAAA,MACA,oBAAoB;AAAA,QAChB,EAAE,OAAO,OAAO,SAAU,MAAM,eAAe,KAAK,KAAK;AAAA,QACzD,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,MAAM,SAAS;AAAA,QAC1D,EAAE,SAAS,OAAO;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,QACJ,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,KAAK,KAAK;AAAA,QACrD,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,MAAM,SAAS;AAAA,QAC1D,EAAE,SAAS,OAAO;AAAA,MACtB;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,SAAS,oBAAoB;AAAA,IACzC,oBAAoB,CAAC,KAAK,IAAI;AAAA,EAClC;AACJ;;;ACpEA,IAAM,0BAA0B,EAAE,kBAAkB,CAAC,KAAK,IAAI,EAAE;AAWzD,IAAM,qBAAqB;AAAA,EAC9B,MAAM;AAAA,EACN,SAAS,CAAC,SAAS,SAAS;AAAA,EAC5B,SAAS;AAAA,EACT,SAAS;AAAA,IACL,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,EAAE,OAAO,OAAO,kBAAmB,MAAM,gBAAgB,MAAM,wBAAwB;AAAA,QACvF,EAAE,OAAO,OAAO,yBAA0B,MAAM,wBAAwB;AAAA,QACxE,EAAE,OAAO,OAAO,uBAAwB,MAAM,eAAe;AAAA,QAC7D,EAAE,OAAO,OAAO,wBAAyB,MAAM,gBAAgB;AAAA,QAC/D,EAAE,OAAO,OAAO,sBAAuB,MAAM,mBAAmB,MAAM,wBAAwB;AAAA,QAC9F,EAAE,OAAO,OAAO,uBAAwB,MAAM,gBAAgB,MAAM,wBAAwB;AAAA,MAChG;AAAA,IACJ;AAAA,EACJ;AACJ;;;AC5BA,IAAM,eAAe,EAAE,OAAO,OAAO,kBAAmB,MAAM,UAAU;AAExE,IAAM,kBAAkB;AAAA,EACpB;AAAA,EACA,EAAE,OAAO,OAAO,eAAgB,MAAM,QAAQ;AAAA,EAC9C,EAAE,OAAO,KAAK,MAAM,UAAU,MAAM,eAAe;AAAA,EACnD,EAAE,OAAO,KAAK,MAAM,UAAU,MAAM,eAAe;AAAA,EACnD,EAAE,OAAO,OAAO,kBAAmB,MAAM,YAAY;AAAA,EACrD,EAAE,OAAO,KAAK,MAAM,WAAW;AAAA,EAC/B,EAAE,OAAO,KAAK,MAAM,cAAc;AACtC;AAEA,IAAM,gBAAgB;AAAA,EAClB,EAAE,OAAO,OAAO,WAAY,MAAM,eAAe,OAAO,iBAAiB,OAAO,OAAO,UAAW;AAAA,EAClG,EAAE,OAAO,OAAO,WAAY,MAAM,cAAc;AACpD;AAKO,IAAM,eAAe;AAAA,EACxB,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,OAAO,OAAO,SAAS,KAAK;AAAA,EAC9C,SAAS;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,EAAE,OAAO,OAAO,4BAA6B,MAAM,UAAU;AAAA,QAC7D,EAAE,OAAO,OAAO,gBAAiB,MAAM,MAAM;AAAA,QAC7C,EAAE,OAAO,OAAO,6BAA8B,MAAM,CAAC,OAAO,WAAW,KAAK,EAAE;AAAA,QAC9E,EAAE,OAAO,OAAO,6BAA8B,OAAO,KAAK,MAAM,CAAC,OAAO,SAAS,GAAG,MAAM,YAAY;AAAA,QACtG,EAAE,OAAO,OAAO,oBAAqB,MAAM,CAAC,OAAO,SAAS,GAAG,MAAM,MAAM;AAAA,QAC3E,EAAE,OAAO,OAAO,sCAAuC,MAAM,SAAS;AAAA,QACtE;AAAA,QACA,EAAE,OAAO,OAAO,iBAAkB,MAAM,OAAO;AAAA,MACnD;AAAA,MACA,KAAK;AAAA,QACD,EAAE,OAAO,OAAO,UAAW,MAAM,OAAO,KAAK,KAAK;AAAA,QAClD,EAAE,SAAS,aAAa;AAAA,MAC5B;AAAA,MACA,WAAW;AAAA,QACP,EAAE,OAAO,MAAM,MAAM,OAAO,KAAK,KAAK;AAAA;AAAA,QAEtC,EAAE,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,OAAO,cAAc,OAAO,OAAO,eAAgB;AAAA,QACzF,EAAE,SAAS,aAAa;AAAA,MAC5B;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,QACV,EAAE,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK;AAAA,QACxC,GAAG;AAAA,QACH,EAAE,OAAO,OAAO,oCAAqC,MAAM,SAAS;AAAA,MACxE;AAAA,MACA,cAAc;AAAA,QACV,EAAE,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK;AAAA,QACxC,GAAG;AAAA,QACH,EAAE,OAAO,OAAO,oCAAqC,MAAM,SAAS;AAAA,MACxE;AAAA,IACJ;AAAA,IACA,eAAe,CAAC,SAAS,WAAW,WAAW,MAAM;AAAA,EACzD;AACJ;;;AC5DA,IAAM,kBAAkB;AAAA,EACpB;AAAA,EAAY;AAAA,EAAO;AAAA,EAAS;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAa;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EACzG;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA,EAAW;AAAA,EAAW;AAAA,EAChG;AAAA,EAAc;AAAA,EAAM;AAAA,EAAU;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;AAAA,EAAS;AAAA,EAC3G;AAAA,EAAW;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAM;AAAA,EAAY;AAAA,EAC3G;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAa;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAW;AAAA,EAChG;AAAA,EAAa;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAW;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAM;AAAA,EAAY;AAAA,EAAM;AAAA,EAAW;AAAA,EAC5G;AAAA,EAAY;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AAAA,EAAU;AAAA,EAAO;AAAA,EAChG;AAAA,EAAY;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAO;AAAA,EAAS;AAAA,EAAU;AAAA,EAAc;AAAA,EACrG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EACtG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EACtG;AACJ;AAEA,IAAMC,cAAa;AAAA,EACf,EAAE,OAAO,OAAO,kBAAmB,MAAM,cAAc;AAAA,EACvD,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,EAClD,EAAE,OAAO,OAAO,2BAA4B,MAAM,UAAU;AAAA;AAAA,EAE5D,EAAE,OAAO,OAAO,qDAAsD,MAAM,eAAe;AAAA,EAC3F,EAAE,OAAO,OAAO,kBAAmB,MAAM,UAAU;AAAA,EACnD,EAAE,OAAO,OAAO,6BAA8B,MAAM,QAAQ;AAAA;AAAA,EAE5D,EAAE,OAAO,OAAO,2BAA4B,MAAM,SAAS;AAAA,EAC3D,EAAE,OAAO,OAAO,gBAAiB,MAAM,UAAU,MAAM,uBAAuB;AAAA,EAC9E,EAAE,OAAO,OAAO,UAAW,MAAM,UAAU,MAAM,eAAe;AAAA,EAChE,EAAE,OAAO,OAAO,uBAAwB,MAAM,SAAS;AAAA,EACvD,EAAE,OAAO,OAAO,6BAA8B,MAAM,SAAS;AAAA,EAC7D,EAAE,OAAO,OAAO,6BAA8B,MAAM,SAAS;AAAA,EAC7D,EAAE,OAAO,OAAO,iHAAkH,MAAM,SAAS;AAAA,EACjJ,EAAE,OAAO,OAAO,iDAAkD,MAAM,aAAa;AAAA,EACrF,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,EAClD,EAAE,OAAO,OAAO,oBAAqB,MAAM,cAAc;AAAA,EACzD,EAAE,OAAO,OAAO,8FAA+F,MAAM,WAAW;AACpI;AAMO,IAAM,eAAe;AAAA,EACxB,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,MAAM,WAAW,QAAQ;AAAA,EACzC,SAAS;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACJ,MAAMA;AAAA,MACN,cAAc;AAAA,QACV,EAAE,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK;AAAA,QACxC,EAAE,OAAO,OAAO,gBAAiB,MAAM,SAAS;AAAA,QAChD,EAAE,OAAO,OAAO,SAAU,MAAM,eAAe,MAAM,gBAAgB;AAAA,QACrE,EAAE,OAAO,OAAO,4BAA6B,MAAM,SAAS;AAAA,MAChE;AAAA,MACA,sBAAsB;AAAA,QAClB,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,QAC9B,EAAE,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK;AAAA,QACxC,EAAE,OAAO,OAAO,gBAAiB,MAAM,SAAS;AAAA,QAChD,EAAE,OAAO,OAAO,SAAU,MAAM,eAAe,MAAM,gBAAgB;AAAA,QACrE,EAAE,OAAO,OAAO,cAAe,MAAM,SAAS;AAAA,MAClD;AAAA,MACA,eAAe;AAAA,QACX,EAAE,OAAO,OAAO,SAAU,MAAM,eAAe,KAAK,KAAK;AAAA,QACzD,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,MAAM,SAAS;AAAA,QAC1D,EAAE,SAAS,OAAO;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,QACJ,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,KAAK,KAAK;AAAA,QACrD,EAAE,OAAO,OAAO,SAAU,MAAM,WAAW,MAAM,SAAS;AAAA,QAC1D,EAAE,SAAS,OAAO;AAAA,MACtB;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,SAAS,gBAAgB;AAAA,IACrC,oBAAoB,CAAC,KAAK,IAAI;AAAA,EAClC;AACJ;;;AC1EA,IAAM,aAAa;AAAA;AAAA,EAEf;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAY;AAAA,EAAW;AAAA,EAAM;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAU;AAAA,EAC3G;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAU;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAY;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EACnG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAC3G;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAY;AAAA,EAAc;AAAA,EAAY;AAAA,EAAY;AAAA,EAAW;AAAA,EAAY;AAAA,EAC1F;AAAA,EAAkB;AAAA;AAAA,EAElB;AAAA,EAAW;AAAA,EAAW;AAAA,EAAO;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA,EAAW;AAAA,EAAY;AAAA,EACjG;AAAA,EAAS;AAAA,EAAY;AAAA,EAAa;AAAA,EAAY;AAAA,EAAS;AAAA,EAAW;AAAA,EAAa;AAAA,EAAa;AAAA,EAC5F;AAAA,EAAc;AAAA,EAAY;AAAA,EAAU;AAAA,EAAgB;AAAA,EAAY;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAC7F;AAAA,EAAa;AAAA,EAAO;AAAA,EAAY;AAAA,EAAO;AAAA,EAAU;AAAA,EAAW;AAAA,EAAY;AAAA,EAAM;AAAA,EAAS;AAAA,EAAY;AAAA,EACnG;AAAA,EAAa;AAAA,EAAU;AAAA,EAAoB;AAAA,EAAY;AAAA,EAAiB;AAAA,EAAe;AAAA,EAAY;AAAA,EACnG;AAAA,EAAgB;AAAA,EAAS;AAAA,EAAO;AAAA,EAAU;AAAA,EAAY;AAAA,EAAS;AAAA,EAAW;AAAA,EAAW;AAAA,EAAO;AAChG;AAMO,IAAM,UAAU;AAAA,EACnB,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,OAAO,MAAM;AAAA,EAC9D,SAAS;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,EAAE,OAAO,OAAO,8CAA+C,MAAM,cAAc;AAAA,QACnF,EAAE,OAAO,OAAO,2BAA4B,MAAM,UAAU;AAAA,QAC5D,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA;AAAA,QAElD,EAAE,OAAO,OAAO,8DAA+D,MAAM,eAAe;AAAA,QACpG,EAAE,OAAO,OAAO,kBAAmB,MAAM,UAAU;AAAA,QACnD,EAAE,OAAO,OAAO,iBAAkB,MAAM,QAAQ;AAAA,QAChD,EAAE,OAAO,OAAO,sDAAuD,MAAM,SAAS;AAAA,QACtF,EAAE,OAAO,OAAO,+CAAgD,MAAM,SAAS;AAAA,QAC/E,EAAE,OAAO,OAAO,0CAA2C,MAAM,SAAS;AAAA,QAC1E,EAAE,OAAO,OAAO,+GAAgH,MAAM,SAAS;AAAA,QAC/I,EAAE,OAAO,OAAO,qBAAsB,MAAM,aAAa;AAAA,QACzD,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,QAClD,EAAE,OAAO,OAAO,iCAAkC,MAAM,cAAc;AAAA,QACtE,EAAE,OAAO,OAAO,gEAAiE,MAAM,WAAW;AAAA,MACtG;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,SAAS,WAAW;AAAA,IAChC,oBAAoB,CAAC,KAAK,MAAM,IAAI;AAAA,EACxC;AACJ;;;AC3CO,IAAM,aAAa;AAAA,EACtB,MAAM;AAAA,EACN,SAAS,CAAC,SAAS,SAAS,aAAa;AAAA,EACzC,SAAS;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACJ,MAAM;AAAA,QACF,EAAE,OAAO,OAAO,2BAA4B,MAAM,UAAU;AAAA,QAC5D,EAAE,OAAO,OAAO,iBAAkB,MAAM,UAAU;AAAA,QAClD,EAAE,OAAO,OAAO,kBAAmB,MAAM,UAAU;AAAA,QACnD,EAAE,OAAO,OAAO,mBAAoB,MAAM,QAAQ;AAAA;AAAA,QAElD,EAAE,OAAO,OAAO,8DAA+D,MAAM,YAAY;AAAA,QACjG,EAAE,OAAO,OAAO,oDAAqD,MAAM,SAAS;AAAA,QACpF,EAAE,OAAO,OAAO,iFAAkF,MAAM,SAAS;AAAA,QACjH,EAAE,OAAO,OAAO,uBAAwB,MAAM,aAAa;AAAA,QAC3D,EAAE,OAAO,OAAO,eAAgB,MAAM,UAAU;AAAA,QAChD,EAAE,OAAO,OAAO,WAAY,MAAM,cAAc;AAAA,MACpD;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,SAAS,CAAC,QAAQ,SAAS,MAAM,EAAE;AAAA,EACnD;AACJ;;;AClBA,IAAM,mBAAmB;AAAA,EACrB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AACZ;AAEA,SAAS,QAAQ,kBAAkB;AAC/B,QAAM,SAAS,iBAAiB,IAAI;AACpC,WAAS,SAAS,MAAM;AAC5B;",
6
6
  "names": ["match", "match", "Parser", "SyntaxTokenType", "match", "htmlEncode", "MARKDOWN_TYPES", "MARKDOWN_RULES", "Parser", "CODE_RULES"]
7
7
  }