From f21bdbdb0c6ad5ee1434069beaf07f19f0aebb86 Mon Sep 17 00:00:00 2001 From: evilchili Date: Wed, 24 Dec 2025 15:15:12 -0800 Subject: [PATCH] checkpoint: working markdown<=>html converter --- src/ttfrog/app.py | 5 +- src/ttfrog/bootstrap.py | 241 +- src/ttfrog/schema.py | 55 +- src/ttfrog/themes/default/page.html | 22 +- .../default/static/editor/commonmark.js | 10207 ---------------- .../themes/default/static/editor/editor.js | 343 - .../default/static/editor/grung-editor.js | 103 + .../themes/default/static/editor/grung.js | 422 + ...n-gfm.js => joplin-turndown-plugin-gfm.js} | 103 +- .../default/static/editor/marked.umd.min.js | 60 + .../default/static/editor/purify.min.js | 3 + src/ttfrog/themes/default/static/site.css | 146 + src/ttfrog/themes/default/static/site.js | 112 + .../viewer/toastui-editor-viewer.min.css | 6 - .../viewer/toastui-editor-viewer.min.js | 24 - .../themes/default/static/viewer/viewer.css | 9 - .../themes/default/static/viewer/viewer.js | 6 - src/ttfrog/web.py | 4 + test/test_db.py | 7 +- test/test_editor.py | 39 + 20 files changed, 1274 insertions(+), 10643 deletions(-) delete mode 100644 src/ttfrog/themes/default/static/editor/commonmark.js delete mode 100644 src/ttfrog/themes/default/static/editor/editor.js create mode 100644 src/ttfrog/themes/default/static/editor/grung-editor.js create mode 100644 src/ttfrog/themes/default/static/editor/grung.js rename src/ttfrog/themes/default/static/editor/{turndown-plugin-gfm.js => joplin-turndown-plugin-gfm.js} (52%) create mode 100644 src/ttfrog/themes/default/static/editor/marked.umd.min.js create mode 100644 src/ttfrog/themes/default/static/editor/purify.min.js create mode 100644 src/ttfrog/themes/default/static/site.js delete mode 100644 src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.css delete mode 100644 src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.js delete mode 100644 src/ttfrog/themes/default/static/viewer/viewer.css delete mode 100644 src/ttfrog/themes/default/static/viewer/viewer.js create mode 100644 test/test_editor.py diff --git a/src/ttfrog/app.py b/src/ttfrog/app.py index c5543ef..b176b9b 100644 --- a/src/ttfrog/app.py +++ b/src/ttfrog/app.py @@ -96,7 +96,7 @@ API_URI=/_/v1/ if db: self.db = db elif self.config.IN_MEMORY_DB: - self.db = GrungDB.with_schema(schema, path=None, storage=MemoryStorage) + self.db = GrungDB.with_schema(schema, path=self.path.database, storage=MemoryStorage) else: self.db = GrungDB.with_schema( schema, path=self.path.database, sort_keys=True, indent=4, separators=(",", ": ") @@ -165,6 +165,7 @@ API_URI=/_/v1/ else: search_uri = uri + self.log.debug(f"Looking for page with uri {search_uri}") page = table.get(where("uri") == search_uri, recurse=False) if not page: # load the parent to check for write permissions @@ -182,7 +183,7 @@ API_URI=/_/v1/ raise UnauthorizedError(f"User {user.doc_id} does not have permission to create under {parent_uri}.") obj = getattr(schema, table.name) - page = obj(name=page_name, body=obj.default.format(name=page_name), parent=parent) + page = obj(name=page_name, body=obj.default.format(name=page_name), parent=parent, uri=search_uri) # validate the page name before we try to create anything page._metadata.fields["name"].validate(page, db=self.db) diff --git a/src/ttfrog/bootstrap.py b/src/ttfrog/bootstrap.py index 03a4fd3..335930e 100644 --- a/src/ttfrog/bootstrap.py +++ b/src/ttfrog/bootstrap.py @@ -1,41 +1,240 @@ from ttfrog import app, schema TEMPLATE = """ -# Heading 1 +# Wiki Syntax +{{toc box depth="3"}} -## Heading 2 +## Basic Formatting -### Heading 3 -#### Heading 4 +The wiki uses [GitHub-flavored Markdown](https://github.github.com/gfm/). -##### Heading 5 +{{style equal-widths striped -###### Heading 6 +| Type | To Get | +|------|--------| +| `*emphasis*` | *emphasis* | +| `**bold**` | **bold** | +| `[link label](/link/address)` | [link label](/link/address) | +| `` `inline` `` | `inline` | +| `***` |
| +| `# Heading 1` | {{{

Heading 1

}}} | +| `## Heading 2` | {{{

Heading 2

}}} | +| `### Heading 3` | {{{

Heading 3

}}} | +| `#### Heading 4` | {{{

Heading 4

}}} | +| `##### Heading 5` | {{{
Heading 5
}}} | +| `###### Heading 6` | {{{
Heading 6
}}} | +| {{{ -*** +
+* unordered
+* list
+* items
+
-Normal text. -**Bold text.** -*Italic Text.* -[A link](/). +}}} | {{{ -1. a -2. numbered -3. list. + -> a block quote +}}} | +| {{{ -| A | Table | Section | -| --- | ----- | ------- | -| foo | bar | baz | +
+1. ordered
+1. list
+1. items
+
+ +}}} | {{{
  1. ordered
  2. list
  3. items
}}} | +| {{{ + +
+> blockquote
+
+ +}}} |
blockquote
| +| {{{ +
+```
+preformatted
+code
+block
+```
+
+}}} | {{{
preformatted code
block
}}} | +| {{{ + +
+\\{\\{\\{
+
+multi-line content,
+whitespace preserved,
+\\*\\*markup\\*\\* and \\HTML\\ included.
+
+\\}\\}\\}
+
+ +}}} | {{{

multi-line content,
whitespace preserved,
markup and HTML included.

}}} | + +}} + +## Macros + +Macros extend authoring options with computed values evaluated at display time. +There are two types: *inline*, which can be used in the middle of a line of +markdown, and *block*, which enclose a series of lines. + +### Inline Macros + +The basic format of an inline macro is: + +`{{NAME [KEYWORD ..] [PARAM="VALUE" ..]}}` + +* `NAME` is the name of the macro. It is always lower case. +* `KEYWORD` is a bare word +* `PARAM` is a parameter name +* `VALUE` is the value of the associated parameter + +No macro requires keywords or parameters, but some support them; they are documented below. + +### Block Macros + +The format of a block macro uses the same format for name, keywords and parameters. The closing +braces must appear on their own line, and both the opening and closing lines must be +surrounded by blank lines. This ensures the block macro is not interpreted as markdown. + +``` +Before the macro.. + +{{NAME [KEYWORD ..] [PARAM="VALUE" ..] + +..inside the macro.. + +}} + +..after the macro. +``` + +### Supported Macros + +This section documents all supported macros. + +WIP (move to its own page) + +{{style striped equal-widths + +| Type | To Get | Description | +|------|--------|-------------| +|{{{
{{user}}
}}} | {{user}} | A hyperlink to the current user's wiki page. | +|{{{
{{style [STYLE ..]
pretty markup goes here!

}}
}}}| pretty markup goes here! | Styled markup. See Block Styling and Positioning, below. | +|{{{
{{toc [STYLE ..] depth="N"}}
}}} | {{toc depth="1"}} | A table of contents. The default depth is 3, and styles may be assigned as with the `style` macro. | +|{{{
{{widget NAME}}
}}} | *varies* | Insert specified widget; see [Wiki Syntax: Widgets](/Widgets). | + + +### Block Styling and Positioning + +Several styles are supported by the editor, which may be freely combined. These include: + +* **box**: block element with background and border +* **full-width**: Expand block to fill all horizontal space +* **right**: right-aligned floating block (maximum 30% of full width) +* **left**: left-aligned floating block (maximum 30% of full width) +* **center**: centered block +* **inline**: contained within the current text line + +#### Examples + +{{style striped equal-widths + +| Type | To Get | +|------|--------| +| {{{
{{style box

😶 box, full-width

}}

normal text
}}} | {{{
😶 box, full-width
normal text }}} | +| {{{
{{style right

😶 right-aligned, inline

}}

normal text
}}} | {{{
😶 right-aligned, inline
normal text }}} | +| {{{
{{style box right

😶 box right-aligned, inline

}}

normal text
}}} | {{{
😶 box right-aligned, inline
normal text }}} | +| {{{
{{style box center

😶 box center-aligned, block

}}

normal text
}}} | {{{
😶 box center-aligned, block
normal text }}} | +| {{{
{{style box left

😶 box left-aligned, inline

}}

normal text
}}} | {{{
😶 box left-aligned, inline
normal text }}} | + +}} + +### Tables + +Basic tables follow the Github-Flavoured Markdown. By default, table cells may not contain newlines, but you can add multi-line content to your tables using {{{ {{{ and }}} }}}: + +{{style equal-widths striped + +| Type | To Get | +|------|--------| +| {{{ + +
+\\| head 1 \\| head 2 \\|
+\\| ------ \\| ------ \\|
+\\| cell 1 \\| cell 2 \\|
+
+ +}}} | {{{
head 1head 2
cell 1cell 2
}}} | +| {{{ + +
+\\| head 1 \\| head 2 \\|
+\\| ------ \\| ------ \\|
+\\| \\{\\{\\{
+
+multi-line
+content
+
+}}} \\| cell 3 \\|
+
+ +}}} | {{{
head 1head 2

multi-line
content

cell 3
}}} | + +}} + + +#### Table Styling + +{{style box right outer + +**Striped, Equal-Widths Example:** + +{{style striped equal-widths inner1 + +| A | B| +|---|--| +| This table has | and | +| equal | alternating | +| widths! | backgrounds! | + +}} + + +**Layout Example:** + +{{style layout inner2 + +| A | B| +|---|--| +| row 1, col 1 | row 1, col 2| +| row 2, col 1 | row 2, col 2| + +}} + +}} + + +By wrapping a table in a `style` macro, you can use the following block-level styles on the tables themselves: + +* `striped`: Apply zebra-striping to table rows +* `equal-widths`: Enforce equal widths of all table columns +* `layout`: Hide the table headers, borders, and background colors. This is useful in cases + where you would like to control layout of elements using tables. """ def bootstrap(): """ - Bootstrap the database entries by populating the first Page, the Admin user and the Admins group. + Bootstrap the database entries by poplating the first Page, the Admin user and the Admins group. """ app.check_state() @@ -45,10 +244,12 @@ def bootstrap(): # create the top-level pages root = app.db.save(schema.Page(name=app.config.VIEW_URI, body="This is the home page", uri="")) + root.add_member(schema.Page(name="Wiki", body=TEMPLATE)) + users = root.add_member(schema.Page(name="User", body="# Users\nusers go here.")) groups = root.add_member(schema.Page(name="Group", body="# Groups\ngroups go here.")) npcs = root.add_member(schema.Page(name="NPC", body="# NPCS!")) - wiki = root.add_member(schema.Page(name="Wiki", body=TEMPLATE)) + widgets = root.add_member(schema.Page(name="Widget", body="Widgets go here.")) # create the NPCs npcs.add_member(schema.NPC(name="Sabetha", body="")) diff --git a/src/ttfrog/schema.py b/src/ttfrog/schema.py index 62ebe26..bef8732 100644 --- a/src/ttfrog/schema.py +++ b/src/ttfrog/schema.py @@ -20,7 +20,7 @@ from grung.objects import ( TextFilePointer, Timestamp, ) -from grung.validators import PatternValidator, LengthValidator +from grung.validators import LengthValidator, PatternValidator from tinydb import where from ttfrog.exceptions import MalformedRequestError @@ -303,3 +303,56 @@ class NPC(Page): """ ) + + +class Widget(Page): + """ + Wiki UX widgets + """ + + default = dedent( + """ +# {name} + +Insert the current user's name. + +## Example + +*** + +Hello, + +*** + +## Template + +```html + +``` + +## CSS +```css +.widget-user {{ + display: inline- block; + border: 1px solid green; + border-radius: 5px; + padding: 2px; +}} +``` + +## Processor +```javascript +function(tag, template, css) {{ + // Return the HTML that should be inserted into the template div. + return document.querySelector("nav li.user a:first-child").outerHTML; +}}; +``` + """ + ) + + @classmethod + def fields(cls): + inherited = [field for field in super().fields() if field.name not in ("members", "uid")] + return inherited + [ + String("name", primary_key=True), + ] diff --git a/src/ttfrog/themes/default/page.html b/src/ttfrog/themes/default/page.html index 073ae20..0945637 100644 --- a/src/ttfrog/themes/default/page.html +++ b/src/ttfrog/themes/default/page.html @@ -1,20 +1,26 @@ {% extends "base.html" %} {% block styles %} - {% endblock %} {% block content %} -
-{{ page.body }} -
+
{{ page.body }}
{% endblock %} {% block scripts %} - - - - + + + + + {% if user.can_write(page) %} + + + + {% endif %} + {% endblock %} diff --git a/src/ttfrog/themes/default/static/editor/commonmark.js b/src/ttfrog/themes/default/static/editor/commonmark.js deleted file mode 100644 index 80f409c..0000000 --- a/src/ttfrog/themes/default/static/editor/commonmark.js +++ /dev/null @@ -1,10207 +0,0 @@ -/* commonmark 0.31.2 https://github.com/commonmark/commonmark.js @license BSD3 */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.commonmark = {})); -}(this, (function (exports) { 'use strict'; - - function isContainer(node) { - switch (node._type) { - case "document": - case "block_quote": - case "list": - case "item": - case "paragraph": - case "heading": - case "emph": - case "strong": - case "link": - case "image": - case "custom_inline": - case "custom_block": - return true; - default: - return false; - } - } - - var resumeAt = function(node, entering) { - this.current = node; - this.entering = entering === true; - }; - - var next = function() { - var cur = this.current; - var entering = this.entering; - - if (cur === null) { - return null; - } - - var container = isContainer(cur); - - if (entering && container) { - if (cur._firstChild) { - this.current = cur._firstChild; - this.entering = true; - } else { - // stay on node but exit - this.entering = false; - } - } else if (cur === this.root) { - this.current = null; - } else if (cur._next === null) { - this.current = cur._parent; - this.entering = false; - } else { - this.current = cur._next; - this.entering = true; - } - - return { entering: entering, node: cur }; - }; - - var NodeWalker = function(root) { - return { - current: root, - root: root, - entering: true, - next: next, - resumeAt: resumeAt - }; - }; - - var Node = function(nodeType, sourcepos) { - this._type = nodeType; - this._parent = null; - this._firstChild = null; - this._lastChild = null; - this._prev = null; - this._next = null; - this._sourcepos = sourcepos; - this._open = true; - this._string_content = null; - this._literal = null; - this._listData = {}; - this._info = null; - this._destination = null; - this._title = null; - this._isFenced = false; - this._fenceChar = null; - this._fenceLength = 0; - this._fenceOffset = null; - this._level = null; - this._onEnter = null; - this._onExit = null; - }; - - var proto = Node.prototype; - - Object.defineProperty(proto, "isContainer", { - get: function() { - return isContainer(this); - } - }); - - Object.defineProperty(proto, "type", { - get: function() { - return this._type; - } - }); - - Object.defineProperty(proto, "firstChild", { - get: function() { - return this._firstChild; - } - }); - - Object.defineProperty(proto, "lastChild", { - get: function() { - return this._lastChild; - } - }); - - Object.defineProperty(proto, "next", { - get: function() { - return this._next; - } - }); - - Object.defineProperty(proto, "prev", { - get: function() { - return this._prev; - } - }); - - Object.defineProperty(proto, "parent", { - get: function() { - return this._parent; - } - }); - - Object.defineProperty(proto, "sourcepos", { - get: function() { - return this._sourcepos; - } - }); - - Object.defineProperty(proto, "literal", { - get: function() { - return this._literal; - }, - set: function(s) { - this._literal = s; - } - }); - - Object.defineProperty(proto, "destination", { - get: function() { - return this._destination; - }, - set: function(s) { - this._destination = s; - } - }); - - Object.defineProperty(proto, "title", { - get: function() { - return this._title; - }, - set: function(s) { - this._title = s; - } - }); - - Object.defineProperty(proto, "info", { - get: function() { - return this._info; - }, - set: function(s) { - this._info = s; - } - }); - - Object.defineProperty(proto, "level", { - get: function() { - return this._level; - }, - set: function(s) { - this._level = s; - } - }); - - Object.defineProperty(proto, "listType", { - get: function() { - return this._listData.type; - }, - set: function(t) { - this._listData.type = t; - } - }); - - Object.defineProperty(proto, "listTight", { - get: function() { - return this._listData.tight; - }, - set: function(t) { - this._listData.tight = t; - } - }); - - Object.defineProperty(proto, "listStart", { - get: function() { - return this._listData.start; - }, - set: function(n) { - this._listData.start = n; - } - }); - - Object.defineProperty(proto, "listDelimiter", { - get: function() { - return this._listData.delimiter; - }, - set: function(delim) { - this._listData.delimiter = delim; - } - }); - - Object.defineProperty(proto, "onEnter", { - get: function() { - return this._onEnter; - }, - set: function(s) { - this._onEnter = s; - } - }); - - Object.defineProperty(proto, "onExit", { - get: function() { - return this._onExit; - }, - set: function(s) { - this._onExit = s; - } - }); - - Node.prototype.appendChild = function(child) { - child.unlink(); - child._parent = this; - if (this._lastChild) { - this._lastChild._next = child; - child._prev = this._lastChild; - this._lastChild = child; - } else { - this._firstChild = child; - this._lastChild = child; - } - }; - - Node.prototype.prependChild = function(child) { - child.unlink(); - child._parent = this; - if (this._firstChild) { - this._firstChild._prev = child; - child._next = this._firstChild; - this._firstChild = child; - } else { - this._firstChild = child; - this._lastChild = child; - } - }; - - Node.prototype.unlink = function() { - if (this._prev) { - this._prev._next = this._next; - } else if (this._parent) { - this._parent._firstChild = this._next; - } - if (this._next) { - this._next._prev = this._prev; - } else if (this._parent) { - this._parent._lastChild = this._prev; - } - this._parent = null; - this._next = null; - this._prev = null; - }; - - Node.prototype.insertAfter = function(sibling) { - sibling.unlink(); - sibling._next = this._next; - if (sibling._next) { - sibling._next._prev = sibling; - } - sibling._prev = this; - this._next = sibling; - sibling._parent = this._parent; - if (!sibling._next) { - sibling._parent._lastChild = sibling; - } - }; - - Node.prototype.insertBefore = function(sibling) { - sibling.unlink(); - sibling._prev = this._prev; - if (sibling._prev) { - sibling._prev._next = sibling; - } - sibling._next = this; - this._prev = sibling; - sibling._parent = this._parent; - if (!sibling._prev) { - sibling._parent._firstChild = sibling; - } - }; - - Node.prototype.walker = function() { - var walker = new NodeWalker(this); - return walker; - }; - - /* Example of use of walker: - - var walker = w.walker(); - var event; - - while (event = walker.next()) { - console.log(event.entering, event.node.type); - } - - */ - - var encodeCache = {}; - - - // Create a lookup array where anything but characters in `chars` string - // and alphanumeric chars is percent-encoded. - // - function getEncodeCache(exclude) { - var i, ch, cache = encodeCache[exclude]; - if (cache) { return cache; } - - cache = encodeCache[exclude] = []; - - for (i = 0; i < 128; i++) { - ch = String.fromCharCode(i); - - if (/^[0-9a-z]$/i.test(ch)) { - // always allow unencoded alphanumeric characters - cache.push(ch); - } else { - cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); - } - } - - for (i = 0; i < exclude.length; i++) { - cache[exclude.charCodeAt(i)] = exclude[i]; - } - - return cache; - } - - - // Encode unsafe characters with percent-encoding, skipping already - // encoded sequences. - // - // - string - string to encode - // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) - // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) - // - function encode(string, exclude, keepEscaped) { - var i, l, code, nextCode, cache, - result = ''; - - if (typeof exclude !== 'string') { - // encode(string, keepEscaped) - keepEscaped = exclude; - exclude = encode.defaultChars; - } - - if (typeof keepEscaped === 'undefined') { - keepEscaped = true; - } - - cache = getEncodeCache(exclude); - - for (i = 0, l = string.length; i < l; i++) { - code = string.charCodeAt(i); - - if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { - if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { - result += string.slice(i, i + 3); - i += 2; - continue; - } - } - - if (code < 128) { - result += cache[code]; - continue; - } - - if (code >= 0xD800 && code <= 0xDFFF) { - if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { - nextCode = string.charCodeAt(i + 1); - if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { - result += encodeURIComponent(string[i] + string[i + 1]); - i++; - continue; - } - } - result += '%EF%BF%BD'; - continue; - } - - result += encodeURIComponent(string[i]); - } - - return result; - } - - encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; - encode.componentChars = "-_.!~*'()"; - - - var encode_1 = encode; - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function unwrapExports (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; - } - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - function getCjsExportFromNamespace (n) { - return n && n['default'] || n; - } - - var decodeDataHtml = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - // Generated using scripts/write-decode-map.ts - // prettier-ignore - exports.default = new Uint16Array([14866, 60, 237, 340, 721, 1312, 1562, 1654, 1838, 1957, 2183, 2239, 2301, 2958, 3037, 3893, 4123, 4298, 4330, 4801, 5191, 5395, 5752, 5903, 5943, 5972, 6050, 0, 0, 0, 0, 0, 0, 6135, 6565, 7422, 8183, 8738, 9242, 9503, 9938, 10189, 10573, 10637, 10715, 11950, 12246, 13539, 13950, 14445, 14533, 15364, 16514, 16980, 17390, 17763, 17849, 18036, 18125, 4096, 69, 77, 97, 98, 99, 102, 103, 108, 109, 110, 111, 112, 114, 115, 116, 117, 92, 100, 106, 115, 122, 137, 142, 151, 157, 163, 167, 182, 196, 204, 220, 229, 108, 105, 103, 33024, 198, 59, 32768, 198, 80, 33024, 38, 59, 32768, 38, 99, 117, 116, 101, 33024, 193, 59, 32768, 193, 114, 101, 118, 101, 59, 32768, 258, 512, 105, 121, 127, 134, 114, 99, 33024, 194, 59, 32768, 194, 59, 32768, 1040, 114, 59, 32896, 55349, 56580, 114, 97, 118, 101, 33024, 192, 59, 32768, 192, 112, 104, 97, 59, 32768, 913, 97, 99, 114, 59, 32768, 256, 100, 59, 32768, 10835, 512, 103, 112, 172, 177, 111, 110, 59, 32768, 260, 102, 59, 32896, 55349, 56632, 112, 108, 121, 70, 117, 110, 99, 116, 105, 111, 110, 59, 32768, 8289, 105, 110, 103, 33024, 197, 59, 32768, 197, 512, 99, 115, 209, 214, 114, 59, 32896, 55349, 56476, 105, 103, 110, 59, 32768, 8788, 105, 108, 100, 101, 33024, 195, 59, 32768, 195, 109, 108, 33024, 196, 59, 32768, 196, 2048, 97, 99, 101, 102, 111, 114, 115, 117, 253, 278, 282, 310, 315, 321, 327, 332, 512, 99, 114, 258, 267, 107, 115, 108, 97, 115, 104, 59, 32768, 8726, 583, 271, 274, 59, 32768, 10983, 101, 100, 59, 32768, 8966, 121, 59, 32768, 1041, 768, 99, 114, 116, 289, 296, 306, 97, 117, 115, 101, 59, 32768, 8757, 110, 111, 117, 108, 108, 105, 115, 59, 32768, 8492, 97, 59, 32768, 914, 114, 59, 32896, 55349, 56581, 112, 102, 59, 32896, 55349, 56633, 101, 118, 101, 59, 32768, 728, 99, 114, 59, 32768, 8492, 109, 112, 101, 113, 59, 32768, 8782, 3584, 72, 79, 97, 99, 100, 101, 102, 104, 105, 108, 111, 114, 115, 117, 368, 373, 380, 426, 461, 466, 487, 491, 495, 533, 593, 695, 701, 707, 99, 121, 59, 32768, 1063, 80, 89, 33024, 169, 59, 32768, 169, 768, 99, 112, 121, 387, 393, 419, 117, 116, 101, 59, 32768, 262, 512, 59, 105, 398, 400, 32768, 8914, 116, 97, 108, 68, 105, 102, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 59, 32768, 8517, 108, 101, 121, 115, 59, 32768, 8493, 1024, 97, 101, 105, 111, 435, 441, 449, 454, 114, 111, 110, 59, 32768, 268, 100, 105, 108, 33024, 199, 59, 32768, 199, 114, 99, 59, 32768, 264, 110, 105, 110, 116, 59, 32768, 8752, 111, 116, 59, 32768, 266, 512, 100, 110, 471, 478, 105, 108, 108, 97, 59, 32768, 184, 116, 101, 114, 68, 111, 116, 59, 32768, 183, 114, 59, 32768, 8493, 105, 59, 32768, 935, 114, 99, 108, 101, 1024, 68, 77, 80, 84, 508, 513, 520, 526, 111, 116, 59, 32768, 8857, 105, 110, 117, 115, 59, 32768, 8854, 108, 117, 115, 59, 32768, 8853, 105, 109, 101, 115, 59, 32768, 8855, 111, 512, 99, 115, 539, 562, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8754, 101, 67, 117, 114, 108, 121, 512, 68, 81, 573, 586, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 59, 32768, 8221, 117, 111, 116, 101, 59, 32768, 8217, 1024, 108, 110, 112, 117, 602, 614, 648, 664, 111, 110, 512, 59, 101, 609, 611, 32768, 8759, 59, 32768, 10868, 768, 103, 105, 116, 621, 629, 634, 114, 117, 101, 110, 116, 59, 32768, 8801, 110, 116, 59, 32768, 8751, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8750, 512, 102, 114, 653, 656, 59, 32768, 8450, 111, 100, 117, 99, 116, 59, 32768, 8720, 110, 116, 101, 114, 67, 108, 111, 99, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8755, 111, 115, 115, 59, 32768, 10799, 99, 114, 59, 32896, 55349, 56478, 112, 512, 59, 67, 713, 715, 32768, 8915, 97, 112, 59, 32768, 8781, 2816, 68, 74, 83, 90, 97, 99, 101, 102, 105, 111, 115, 743, 758, 763, 768, 773, 795, 809, 821, 826, 910, 1295, 512, 59, 111, 748, 750, 32768, 8517, 116, 114, 97, 104, 100, 59, 32768, 10513, 99, 121, 59, 32768, 1026, 99, 121, 59, 32768, 1029, 99, 121, 59, 32768, 1039, 768, 103, 114, 115, 780, 786, 790, 103, 101, 114, 59, 32768, 8225, 114, 59, 32768, 8609, 104, 118, 59, 32768, 10980, 512, 97, 121, 800, 806, 114, 111, 110, 59, 32768, 270, 59, 32768, 1044, 108, 512, 59, 116, 815, 817, 32768, 8711, 97, 59, 32768, 916, 114, 59, 32896, 55349, 56583, 512, 97, 102, 831, 897, 512, 99, 109, 836, 891, 114, 105, 116, 105, 99, 97, 108, 1024, 65, 68, 71, 84, 852, 859, 877, 884, 99, 117, 116, 101, 59, 32768, 180, 111, 581, 864, 867, 59, 32768, 729, 98, 108, 101, 65, 99, 117, 116, 101, 59, 32768, 733, 114, 97, 118, 101, 59, 32768, 96, 105, 108, 100, 101, 59, 32768, 732, 111, 110, 100, 59, 32768, 8900, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 59, 32768, 8518, 2113, 920, 0, 0, 0, 925, 946, 0, 1139, 102, 59, 32896, 55349, 56635, 768, 59, 68, 69, 931, 933, 938, 32768, 168, 111, 116, 59, 32768, 8412, 113, 117, 97, 108, 59, 32768, 8784, 98, 108, 101, 1536, 67, 68, 76, 82, 85, 86, 961, 978, 996, 1080, 1101, 1125, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103, 114, 97, 108, 59, 32768, 8751, 111, 1093, 985, 0, 0, 988, 59, 32768, 168, 110, 65, 114, 114, 111, 119, 59, 32768, 8659, 512, 101, 111, 1001, 1034, 102, 116, 768, 65, 82, 84, 1010, 1017, 1029, 114, 114, 111, 119, 59, 32768, 8656, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8660, 101, 101, 59, 32768, 10980, 110, 103, 512, 76, 82, 1041, 1068, 101, 102, 116, 512, 65, 82, 1049, 1056, 114, 114, 111, 119, 59, 32768, 10232, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10234, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10233, 105, 103, 104, 116, 512, 65, 84, 1089, 1096, 114, 114, 111, 119, 59, 32768, 8658, 101, 101, 59, 32768, 8872, 112, 1042, 1108, 0, 0, 1115, 114, 114, 111, 119, 59, 32768, 8657, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8661, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8741, 110, 1536, 65, 66, 76, 82, 84, 97, 1152, 1179, 1186, 1236, 1272, 1288, 114, 114, 111, 119, 768, 59, 66, 85, 1163, 1165, 1170, 32768, 8595, 97, 114, 59, 32768, 10515, 112, 65, 114, 114, 111, 119, 59, 32768, 8693, 114, 101, 118, 101, 59, 32768, 785, 101, 102, 116, 1315, 1196, 0, 1209, 0, 1220, 105, 103, 104, 116, 86, 101, 99, 116, 111, 114, 59, 32768, 10576, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10590, 101, 99, 116, 111, 114, 512, 59, 66, 1229, 1231, 32768, 8637, 97, 114, 59, 32768, 10582, 105, 103, 104, 116, 805, 1245, 0, 1256, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10591, 101, 99, 116, 111, 114, 512, 59, 66, 1265, 1267, 32768, 8641, 97, 114, 59, 32768, 10583, 101, 101, 512, 59, 65, 1279, 1281, 32768, 8868, 114, 114, 111, 119, 59, 32768, 8615, 114, 114, 111, 119, 59, 32768, 8659, 512, 99, 116, 1300, 1305, 114, 59, 32896, 55349, 56479, 114, 111, 107, 59, 32768, 272, 4096, 78, 84, 97, 99, 100, 102, 103, 108, 109, 111, 112, 113, 115, 116, 117, 120, 1344, 1348, 1354, 1363, 1386, 1391, 1396, 1405, 1413, 1460, 1475, 1483, 1514, 1527, 1531, 1538, 71, 59, 32768, 330, 72, 33024, 208, 59, 32768, 208, 99, 117, 116, 101, 33024, 201, 59, 32768, 201, 768, 97, 105, 121, 1370, 1376, 1383, 114, 111, 110, 59, 32768, 282, 114, 99, 33024, 202, 59, 32768, 202, 59, 32768, 1069, 111, 116, 59, 32768, 278, 114, 59, 32896, 55349, 56584, 114, 97, 118, 101, 33024, 200, 59, 32768, 200, 101, 109, 101, 110, 116, 59, 32768, 8712, 512, 97, 112, 1418, 1423, 99, 114, 59, 32768, 274, 116, 121, 1060, 1431, 0, 0, 1444, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9723, 101, 114, 121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9643, 512, 103, 112, 1465, 1470, 111, 110, 59, 32768, 280, 102, 59, 32896, 55349, 56636, 115, 105, 108, 111, 110, 59, 32768, 917, 117, 512, 97, 105, 1489, 1504, 108, 512, 59, 84, 1495, 1497, 32768, 10869, 105, 108, 100, 101, 59, 32768, 8770, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 8652, 512, 99, 105, 1519, 1523, 114, 59, 32768, 8496, 109, 59, 32768, 10867, 97, 59, 32768, 919, 109, 108, 33024, 203, 59, 32768, 203, 512, 105, 112, 1543, 1549, 115, 116, 115, 59, 32768, 8707, 111, 110, 101, 110, 116, 105, 97, 108, 69, 59, 32768, 8519, 1280, 99, 102, 105, 111, 115, 1572, 1576, 1581, 1620, 1648, 121, 59, 32768, 1060, 114, 59, 32896, 55349, 56585, 108, 108, 101, 100, 1060, 1591, 0, 0, 1604, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9724, 101, 114, 121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 59, 32768, 9642, 1601, 1628, 0, 1633, 0, 0, 1639, 102, 59, 32896, 55349, 56637, 65, 108, 108, 59, 32768, 8704, 114, 105, 101, 114, 116, 114, 102, 59, 32768, 8497, 99, 114, 59, 32768, 8497, 3072, 74, 84, 97, 98, 99, 100, 102, 103, 111, 114, 115, 116, 1678, 1683, 1688, 1701, 1708, 1729, 1734, 1739, 1742, 1748, 1828, 1834, 99, 121, 59, 32768, 1027, 33024, 62, 59, 32768, 62, 109, 109, 97, 512, 59, 100, 1696, 1698, 32768, 915, 59, 32768, 988, 114, 101, 118, 101, 59, 32768, 286, 768, 101, 105, 121, 1715, 1721, 1726, 100, 105, 108, 59, 32768, 290, 114, 99, 59, 32768, 284, 59, 32768, 1043, 111, 116, 59, 32768, 288, 114, 59, 32896, 55349, 56586, 59, 32768, 8921, 112, 102, 59, 32896, 55349, 56638, 101, 97, 116, 101, 114, 1536, 69, 70, 71, 76, 83, 84, 1766, 1783, 1794, 1803, 1809, 1821, 113, 117, 97, 108, 512, 59, 76, 1775, 1777, 32768, 8805, 101, 115, 115, 59, 32768, 8923, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8807, 114, 101, 97, 116, 101, 114, 59, 32768, 10914, 101, 115, 115, 59, 32768, 8823, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 10878, 105, 108, 100, 101, 59, 32768, 8819, 99, 114, 59, 32896, 55349, 56482, 59, 32768, 8811, 2048, 65, 97, 99, 102, 105, 111, 115, 117, 1854, 1861, 1874, 1880, 1884, 1897, 1919, 1934, 82, 68, 99, 121, 59, 32768, 1066, 512, 99, 116, 1866, 1871, 101, 107, 59, 32768, 711, 59, 32768, 94, 105, 114, 99, 59, 32768, 292, 114, 59, 32768, 8460, 108, 98, 101, 114, 116, 83, 112, 97, 99, 101, 59, 32768, 8459, 833, 1902, 0, 1906, 102, 59, 32768, 8461, 105, 122, 111, 110, 116, 97, 108, 76, 105, 110, 101, 59, 32768, 9472, 512, 99, 116, 1924, 1928, 114, 59, 32768, 8459, 114, 111, 107, 59, 32768, 294, 109, 112, 533, 1940, 1950, 111, 119, 110, 72, 117, 109, 112, 59, 32768, 8782, 113, 117, 97, 108, 59, 32768, 8783, 3584, 69, 74, 79, 97, 99, 100, 102, 103, 109, 110, 111, 115, 116, 117, 1985, 1990, 1996, 2001, 2010, 2025, 2030, 2034, 2043, 2077, 2134, 2155, 2160, 2167, 99, 121, 59, 32768, 1045, 108, 105, 103, 59, 32768, 306, 99, 121, 59, 32768, 1025, 99, 117, 116, 101, 33024, 205, 59, 32768, 205, 512, 105, 121, 2015, 2022, 114, 99, 33024, 206, 59, 32768, 206, 59, 32768, 1048, 111, 116, 59, 32768, 304, 114, 59, 32768, 8465, 114, 97, 118, 101, 33024, 204, 59, 32768, 204, 768, 59, 97, 112, 2050, 2052, 2070, 32768, 8465, 512, 99, 103, 2057, 2061, 114, 59, 32768, 298, 105, 110, 97, 114, 121, 73, 59, 32768, 8520, 108, 105, 101, 115, 59, 32768, 8658, 837, 2082, 0, 2110, 512, 59, 101, 2086, 2088, 32768, 8748, 512, 103, 114, 2093, 2099, 114, 97, 108, 59, 32768, 8747, 115, 101, 99, 116, 105, 111, 110, 59, 32768, 8898, 105, 115, 105, 98, 108, 101, 512, 67, 84, 2120, 2127, 111, 109, 109, 97, 59, 32768, 8291, 105, 109, 101, 115, 59, 32768, 8290, 768, 103, 112, 116, 2141, 2146, 2151, 111, 110, 59, 32768, 302, 102, 59, 32896, 55349, 56640, 97, 59, 32768, 921, 99, 114, 59, 32768, 8464, 105, 108, 100, 101, 59, 32768, 296, 828, 2172, 0, 2177, 99, 121, 59, 32768, 1030, 108, 33024, 207, 59, 32768, 207, 1280, 99, 102, 111, 115, 117, 2193, 2206, 2211, 2217, 2232, 512, 105, 121, 2198, 2203, 114, 99, 59, 32768, 308, 59, 32768, 1049, 114, 59, 32896, 55349, 56589, 112, 102, 59, 32896, 55349, 56641, 820, 2222, 0, 2227, 114, 59, 32896, 55349, 56485, 114, 99, 121, 59, 32768, 1032, 107, 99, 121, 59, 32768, 1028, 1792, 72, 74, 97, 99, 102, 111, 115, 2253, 2258, 2263, 2269, 2283, 2288, 2294, 99, 121, 59, 32768, 1061, 99, 121, 59, 32768, 1036, 112, 112, 97, 59, 32768, 922, 512, 101, 121, 2274, 2280, 100, 105, 108, 59, 32768, 310, 59, 32768, 1050, 114, 59, 32896, 55349, 56590, 112, 102, 59, 32896, 55349, 56642, 99, 114, 59, 32896, 55349, 56486, 2816, 74, 84, 97, 99, 101, 102, 108, 109, 111, 115, 116, 2323, 2328, 2333, 2374, 2396, 2775, 2780, 2797, 2804, 2934, 2954, 99, 121, 59, 32768, 1033, 33024, 60, 59, 32768, 60, 1280, 99, 109, 110, 112, 114, 2344, 2350, 2356, 2360, 2370, 117, 116, 101, 59, 32768, 313, 98, 100, 97, 59, 32768, 923, 103, 59, 32768, 10218, 108, 97, 99, 101, 116, 114, 102, 59, 32768, 8466, 114, 59, 32768, 8606, 768, 97, 101, 121, 2381, 2387, 2393, 114, 111, 110, 59, 32768, 317, 100, 105, 108, 59, 32768, 315, 59, 32768, 1051, 512, 102, 115, 2401, 2702, 116, 2560, 65, 67, 68, 70, 82, 84, 85, 86, 97, 114, 2423, 2470, 2479, 2530, 2537, 2561, 2618, 2666, 2683, 2690, 512, 110, 114, 2428, 2441, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10216, 114, 111, 119, 768, 59, 66, 82, 2451, 2453, 2458, 32768, 8592, 97, 114, 59, 32768, 8676, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8646, 101, 105, 108, 105, 110, 103, 59, 32768, 8968, 111, 838, 2485, 0, 2498, 98, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10214, 110, 805, 2503, 0, 2514, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10593, 101, 99, 116, 111, 114, 512, 59, 66, 2523, 2525, 32768, 8643, 97, 114, 59, 32768, 10585, 108, 111, 111, 114, 59, 32768, 8970, 105, 103, 104, 116, 512, 65, 86, 2546, 2553, 114, 114, 111, 119, 59, 32768, 8596, 101, 99, 116, 111, 114, 59, 32768, 10574, 512, 101, 114, 2566, 2591, 101, 768, 59, 65, 86, 2574, 2576, 2583, 32768, 8867, 114, 114, 111, 119, 59, 32768, 8612, 101, 99, 116, 111, 114, 59, 32768, 10586, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 2604, 2606, 2611, 32768, 8882, 97, 114, 59, 32768, 10703, 113, 117, 97, 108, 59, 32768, 8884, 112, 768, 68, 84, 86, 2626, 2638, 2649, 111, 119, 110, 86, 101, 99, 116, 111, 114, 59, 32768, 10577, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10592, 101, 99, 116, 111, 114, 512, 59, 66, 2659, 2661, 32768, 8639, 97, 114, 59, 32768, 10584, 101, 99, 116, 111, 114, 512, 59, 66, 2676, 2678, 32768, 8636, 97, 114, 59, 32768, 10578, 114, 114, 111, 119, 59, 32768, 8656, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8660, 115, 1536, 69, 70, 71, 76, 83, 84, 2716, 2730, 2741, 2750, 2756, 2768, 113, 117, 97, 108, 71, 114, 101, 97, 116, 101, 114, 59, 32768, 8922, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8806, 114, 101, 97, 116, 101, 114, 59, 32768, 8822, 101, 115, 115, 59, 32768, 10913, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 10877, 105, 108, 100, 101, 59, 32768, 8818, 114, 59, 32896, 55349, 56591, 512, 59, 101, 2785, 2787, 32768, 8920, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8666, 105, 100, 111, 116, 59, 32768, 319, 768, 110, 112, 119, 2811, 2899, 2904, 103, 1024, 76, 82, 108, 114, 2821, 2848, 2860, 2887, 101, 102, 116, 512, 65, 82, 2829, 2836, 114, 114, 111, 119, 59, 32768, 10229, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10231, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 10230, 101, 102, 116, 512, 97, 114, 2868, 2875, 114, 114, 111, 119, 59, 32768, 10232, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10234, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10233, 102, 59, 32896, 55349, 56643, 101, 114, 512, 76, 82, 2911, 2922, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8601, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8600, 768, 99, 104, 116, 2941, 2945, 2948, 114, 59, 32768, 8466, 59, 32768, 8624, 114, 111, 107, 59, 32768, 321, 59, 32768, 8810, 2048, 97, 99, 101, 102, 105, 111, 115, 117, 2974, 2978, 2982, 3007, 3012, 3022, 3028, 3033, 112, 59, 32768, 10501, 121, 59, 32768, 1052, 512, 100, 108, 2987, 2998, 105, 117, 109, 83, 112, 97, 99, 101, 59, 32768, 8287, 108, 105, 110, 116, 114, 102, 59, 32768, 8499, 114, 59, 32896, 55349, 56592, 110, 117, 115, 80, 108, 117, 115, 59, 32768, 8723, 112, 102, 59, 32896, 55349, 56644, 99, 114, 59, 32768, 8499, 59, 32768, 924, 2304, 74, 97, 99, 101, 102, 111, 115, 116, 117, 3055, 3060, 3067, 3089, 3201, 3206, 3874, 3880, 3889, 99, 121, 59, 32768, 1034, 99, 117, 116, 101, 59, 32768, 323, 768, 97, 101, 121, 3074, 3080, 3086, 114, 111, 110, 59, 32768, 327, 100, 105, 108, 59, 32768, 325, 59, 32768, 1053, 768, 103, 115, 119, 3096, 3160, 3194, 97, 116, 105, 118, 101, 768, 77, 84, 86, 3108, 3121, 3145, 101, 100, 105, 117, 109, 83, 112, 97, 99, 101, 59, 32768, 8203, 104, 105, 512, 99, 110, 3128, 3137, 107, 83, 112, 97, 99, 101, 59, 32768, 8203, 83, 112, 97, 99, 101, 59, 32768, 8203, 101, 114, 121, 84, 104, 105, 110, 83, 112, 97, 99, 101, 59, 32768, 8203, 116, 101, 100, 512, 71, 76, 3168, 3184, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 59, 32768, 8811, 101, 115, 115, 76, 101, 115, 115, 59, 32768, 8810, 76, 105, 110, 101, 59, 32768, 10, 114, 59, 32896, 55349, 56593, 1024, 66, 110, 112, 116, 3215, 3222, 3238, 3242, 114, 101, 97, 107, 59, 32768, 8288, 66, 114, 101, 97, 107, 105, 110, 103, 83, 112, 97, 99, 101, 59, 32768, 160, 102, 59, 32768, 8469, 3328, 59, 67, 68, 69, 71, 72, 76, 78, 80, 82, 83, 84, 86, 3269, 3271, 3293, 3312, 3352, 3430, 3455, 3551, 3589, 3625, 3678, 3821, 3861, 32768, 10988, 512, 111, 117, 3276, 3286, 110, 103, 114, 117, 101, 110, 116, 59, 32768, 8802, 112, 67, 97, 112, 59, 32768, 8813, 111, 117, 98, 108, 101, 86, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8742, 768, 108, 113, 120, 3319, 3327, 3345, 101, 109, 101, 110, 116, 59, 32768, 8713, 117, 97, 108, 512, 59, 84, 3335, 3337, 32768, 8800, 105, 108, 100, 101, 59, 32896, 8770, 824, 105, 115, 116, 115, 59, 32768, 8708, 114, 101, 97, 116, 101, 114, 1792, 59, 69, 70, 71, 76, 83, 84, 3373, 3375, 3382, 3394, 3404, 3410, 3423, 32768, 8815, 113, 117, 97, 108, 59, 32768, 8817, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32896, 8807, 824, 114, 101, 97, 116, 101, 114, 59, 32896, 8811, 824, 101, 115, 115, 59, 32768, 8825, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32896, 10878, 824, 105, 108, 100, 101, 59, 32768, 8821, 117, 109, 112, 533, 3437, 3448, 111, 119, 110, 72, 117, 109, 112, 59, 32896, 8782, 824, 113, 117, 97, 108, 59, 32896, 8783, 824, 101, 512, 102, 115, 3461, 3492, 116, 84, 114, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 3477, 3479, 3485, 32768, 8938, 97, 114, 59, 32896, 10703, 824, 113, 117, 97, 108, 59, 32768, 8940, 115, 1536, 59, 69, 71, 76, 83, 84, 3506, 3508, 3515, 3524, 3531, 3544, 32768, 8814, 113, 117, 97, 108, 59, 32768, 8816, 114, 101, 97, 116, 101, 114, 59, 32768, 8824, 101, 115, 115, 59, 32896, 8810, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32896, 10877, 824, 105, 108, 100, 101, 59, 32768, 8820, 101, 115, 116, 101, 100, 512, 71, 76, 3561, 3578, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 59, 32896, 10914, 824, 101, 115, 115, 76, 101, 115, 115, 59, 32896, 10913, 824, 114, 101, 99, 101, 100, 101, 115, 768, 59, 69, 83, 3603, 3605, 3613, 32768, 8832, 113, 117, 97, 108, 59, 32896, 10927, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8928, 512, 101, 105, 3630, 3645, 118, 101, 114, 115, 101, 69, 108, 101, 109, 101, 110, 116, 59, 32768, 8716, 103, 104, 116, 84, 114, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 3663, 3665, 3671, 32768, 8939, 97, 114, 59, 32896, 10704, 824, 113, 117, 97, 108, 59, 32768, 8941, 512, 113, 117, 3683, 3732, 117, 97, 114, 101, 83, 117, 512, 98, 112, 3694, 3712, 115, 101, 116, 512, 59, 69, 3702, 3705, 32896, 8847, 824, 113, 117, 97, 108, 59, 32768, 8930, 101, 114, 115, 101, 116, 512, 59, 69, 3722, 3725, 32896, 8848, 824, 113, 117, 97, 108, 59, 32768, 8931, 768, 98, 99, 112, 3739, 3757, 3801, 115, 101, 116, 512, 59, 69, 3747, 3750, 32896, 8834, 8402, 113, 117, 97, 108, 59, 32768, 8840, 99, 101, 101, 100, 115, 1024, 59, 69, 83, 84, 3771, 3773, 3781, 3793, 32768, 8833, 113, 117, 97, 108, 59, 32896, 10928, 824, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8929, 105, 108, 100, 101, 59, 32896, 8831, 824, 101, 114, 115, 101, 116, 512, 59, 69, 3811, 3814, 32896, 8835, 8402, 113, 117, 97, 108, 59, 32768, 8841, 105, 108, 100, 101, 1024, 59, 69, 70, 84, 3834, 3836, 3843, 3854, 32768, 8769, 113, 117, 97, 108, 59, 32768, 8772, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8775, 105, 108, 100, 101, 59, 32768, 8777, 101, 114, 116, 105, 99, 97, 108, 66, 97, 114, 59, 32768, 8740, 99, 114, 59, 32896, 55349, 56489, 105, 108, 100, 101, 33024, 209, 59, 32768, 209, 59, 32768, 925, 3584, 69, 97, 99, 100, 102, 103, 109, 111, 112, 114, 115, 116, 117, 118, 3921, 3927, 3936, 3951, 3958, 3963, 3972, 3996, 4002, 4034, 4037, 4055, 4071, 4078, 108, 105, 103, 59, 32768, 338, 99, 117, 116, 101, 33024, 211, 59, 32768, 211, 512, 105, 121, 3941, 3948, 114, 99, 33024, 212, 59, 32768, 212, 59, 32768, 1054, 98, 108, 97, 99, 59, 32768, 336, 114, 59, 32896, 55349, 56594, 114, 97, 118, 101, 33024, 210, 59, 32768, 210, 768, 97, 101, 105, 3979, 3984, 3989, 99, 114, 59, 32768, 332, 103, 97, 59, 32768, 937, 99, 114, 111, 110, 59, 32768, 927, 112, 102, 59, 32896, 55349, 56646, 101, 110, 67, 117, 114, 108, 121, 512, 68, 81, 4014, 4027, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 59, 32768, 8220, 117, 111, 116, 101, 59, 32768, 8216, 59, 32768, 10836, 512, 99, 108, 4042, 4047, 114, 59, 32896, 55349, 56490, 97, 115, 104, 33024, 216, 59, 32768, 216, 105, 573, 4060, 4067, 100, 101, 33024, 213, 59, 32768, 213, 101, 115, 59, 32768, 10807, 109, 108, 33024, 214, 59, 32768, 214, 101, 114, 512, 66, 80, 4085, 4109, 512, 97, 114, 4090, 4094, 114, 59, 32768, 8254, 97, 99, 512, 101, 107, 4101, 4104, 59, 32768, 9182, 101, 116, 59, 32768, 9140, 97, 114, 101, 110, 116, 104, 101, 115, 105, 115, 59, 32768, 9180, 2304, 97, 99, 102, 104, 105, 108, 111, 114, 115, 4141, 4150, 4154, 4159, 4163, 4166, 4176, 4198, 4284, 114, 116, 105, 97, 108, 68, 59, 32768, 8706, 121, 59, 32768, 1055, 114, 59, 32896, 55349, 56595, 105, 59, 32768, 934, 59, 32768, 928, 117, 115, 77, 105, 110, 117, 115, 59, 32768, 177, 512, 105, 112, 4181, 4194, 110, 99, 97, 114, 101, 112, 108, 97, 110, 101, 59, 32768, 8460, 102, 59, 32768, 8473, 1024, 59, 101, 105, 111, 4207, 4209, 4251, 4256, 32768, 10939, 99, 101, 100, 101, 115, 1024, 59, 69, 83, 84, 4223, 4225, 4232, 4244, 32768, 8826, 113, 117, 97, 108, 59, 32768, 10927, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8828, 105, 108, 100, 101, 59, 32768, 8830, 109, 101, 59, 32768, 8243, 512, 100, 112, 4261, 4267, 117, 99, 116, 59, 32768, 8719, 111, 114, 116, 105, 111, 110, 512, 59, 97, 4278, 4280, 32768, 8759, 108, 59, 32768, 8733, 512, 99, 105, 4289, 4294, 114, 59, 32896, 55349, 56491, 59, 32768, 936, 1024, 85, 102, 111, 115, 4306, 4313, 4318, 4323, 79, 84, 33024, 34, 59, 32768, 34, 114, 59, 32896, 55349, 56596, 112, 102, 59, 32768, 8474, 99, 114, 59, 32896, 55349, 56492, 3072, 66, 69, 97, 99, 101, 102, 104, 105, 111, 114, 115, 117, 4354, 4360, 4366, 4395, 4417, 4473, 4477, 4481, 4743, 4764, 4776, 4788, 97, 114, 114, 59, 32768, 10512, 71, 33024, 174, 59, 32768, 174, 768, 99, 110, 114, 4373, 4379, 4383, 117, 116, 101, 59, 32768, 340, 103, 59, 32768, 10219, 114, 512, 59, 116, 4389, 4391, 32768, 8608, 108, 59, 32768, 10518, 768, 97, 101, 121, 4402, 4408, 4414, 114, 111, 110, 59, 32768, 344, 100, 105, 108, 59, 32768, 342, 59, 32768, 1056, 512, 59, 118, 4422, 4424, 32768, 8476, 101, 114, 115, 101, 512, 69, 85, 4433, 4458, 512, 108, 113, 4438, 4446, 101, 109, 101, 110, 116, 59, 32768, 8715, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 8651, 112, 69, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 10607, 114, 59, 32768, 8476, 111, 59, 32768, 929, 103, 104, 116, 2048, 65, 67, 68, 70, 84, 85, 86, 97, 4501, 4547, 4556, 4607, 4614, 4671, 4719, 4736, 512, 110, 114, 4506, 4519, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10217, 114, 111, 119, 768, 59, 66, 76, 4529, 4531, 4536, 32768, 8594, 97, 114, 59, 32768, 8677, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8644, 101, 105, 108, 105, 110, 103, 59, 32768, 8969, 111, 838, 4562, 0, 4575, 98, 108, 101, 66, 114, 97, 99, 107, 101, 116, 59, 32768, 10215, 110, 805, 4580, 0, 4591, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10589, 101, 99, 116, 111, 114, 512, 59, 66, 4600, 4602, 32768, 8642, 97, 114, 59, 32768, 10581, 108, 111, 111, 114, 59, 32768, 8971, 512, 101, 114, 4619, 4644, 101, 768, 59, 65, 86, 4627, 4629, 4636, 32768, 8866, 114, 114, 111, 119, 59, 32768, 8614, 101, 99, 116, 111, 114, 59, 32768, 10587, 105, 97, 110, 103, 108, 101, 768, 59, 66, 69, 4657, 4659, 4664, 32768, 8883, 97, 114, 59, 32768, 10704, 113, 117, 97, 108, 59, 32768, 8885, 112, 768, 68, 84, 86, 4679, 4691, 4702, 111, 119, 110, 86, 101, 99, 116, 111, 114, 59, 32768, 10575, 101, 101, 86, 101, 99, 116, 111, 114, 59, 32768, 10588, 101, 99, 116, 111, 114, 512, 59, 66, 4712, 4714, 32768, 8638, 97, 114, 59, 32768, 10580, 101, 99, 116, 111, 114, 512, 59, 66, 4729, 4731, 32768, 8640, 97, 114, 59, 32768, 10579, 114, 114, 111, 119, 59, 32768, 8658, 512, 112, 117, 4748, 4752, 102, 59, 32768, 8477, 110, 100, 73, 109, 112, 108, 105, 101, 115, 59, 32768, 10608, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8667, 512, 99, 104, 4781, 4785, 114, 59, 32768, 8475, 59, 32768, 8625, 108, 101, 68, 101, 108, 97, 121, 101, 100, 59, 32768, 10740, 3328, 72, 79, 97, 99, 102, 104, 105, 109, 111, 113, 115, 116, 117, 4827, 4842, 4849, 4856, 4889, 4894, 4949, 4955, 4967, 4973, 5059, 5065, 5070, 512, 67, 99, 4832, 4838, 72, 99, 121, 59, 32768, 1065, 121, 59, 32768, 1064, 70, 84, 99, 121, 59, 32768, 1068, 99, 117, 116, 101, 59, 32768, 346, 1280, 59, 97, 101, 105, 121, 4867, 4869, 4875, 4881, 4886, 32768, 10940, 114, 111, 110, 59, 32768, 352, 100, 105, 108, 59, 32768, 350, 114, 99, 59, 32768, 348, 59, 32768, 1057, 114, 59, 32896, 55349, 56598, 111, 114, 116, 1024, 68, 76, 82, 85, 4906, 4917, 4928, 4940, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8595, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8592, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8594, 112, 65, 114, 114, 111, 119, 59, 32768, 8593, 103, 109, 97, 59, 32768, 931, 97, 108, 108, 67, 105, 114, 99, 108, 101, 59, 32768, 8728, 112, 102, 59, 32896, 55349, 56650, 1091, 4979, 0, 0, 4983, 116, 59, 32768, 8730, 97, 114, 101, 1024, 59, 73, 83, 85, 4994, 4996, 5010, 5052, 32768, 9633, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110, 59, 32768, 8851, 117, 512, 98, 112, 5016, 5033, 115, 101, 116, 512, 59, 69, 5024, 5026, 32768, 8847, 113, 117, 97, 108, 59, 32768, 8849, 101, 114, 115, 101, 116, 512, 59, 69, 5043, 5045, 32768, 8848, 113, 117, 97, 108, 59, 32768, 8850, 110, 105, 111, 110, 59, 32768, 8852, 99, 114, 59, 32896, 55349, 56494, 97, 114, 59, 32768, 8902, 1024, 98, 99, 109, 112, 5079, 5102, 5155, 5158, 512, 59, 115, 5084, 5086, 32768, 8912, 101, 116, 512, 59, 69, 5093, 5095, 32768, 8912, 113, 117, 97, 108, 59, 32768, 8838, 512, 99, 104, 5107, 5148, 101, 101, 100, 115, 1024, 59, 69, 83, 84, 5120, 5122, 5129, 5141, 32768, 8827, 113, 117, 97, 108, 59, 32768, 10928, 108, 97, 110, 116, 69, 113, 117, 97, 108, 59, 32768, 8829, 105, 108, 100, 101, 59, 32768, 8831, 84, 104, 97, 116, 59, 32768, 8715, 59, 32768, 8721, 768, 59, 101, 115, 5165, 5167, 5185, 32768, 8913, 114, 115, 101, 116, 512, 59, 69, 5176, 5178, 32768, 8835, 113, 117, 97, 108, 59, 32768, 8839, 101, 116, 59, 32768, 8913, 2816, 72, 82, 83, 97, 99, 102, 104, 105, 111, 114, 115, 5213, 5221, 5227, 5241, 5252, 5274, 5279, 5323, 5362, 5368, 5378, 79, 82, 78, 33024, 222, 59, 32768, 222, 65, 68, 69, 59, 32768, 8482, 512, 72, 99, 5232, 5237, 99, 121, 59, 32768, 1035, 121, 59, 32768, 1062, 512, 98, 117, 5246, 5249, 59, 32768, 9, 59, 32768, 932, 768, 97, 101, 121, 5259, 5265, 5271, 114, 111, 110, 59, 32768, 356, 100, 105, 108, 59, 32768, 354, 59, 32768, 1058, 114, 59, 32896, 55349, 56599, 512, 101, 105, 5284, 5300, 835, 5289, 0, 5297, 101, 102, 111, 114, 101, 59, 32768, 8756, 97, 59, 32768, 920, 512, 99, 110, 5305, 5315, 107, 83, 112, 97, 99, 101, 59, 32896, 8287, 8202, 83, 112, 97, 99, 101, 59, 32768, 8201, 108, 100, 101, 1024, 59, 69, 70, 84, 5335, 5337, 5344, 5355, 32768, 8764, 113, 117, 97, 108, 59, 32768, 8771, 117, 108, 108, 69, 113, 117, 97, 108, 59, 32768, 8773, 105, 108, 100, 101, 59, 32768, 8776, 112, 102, 59, 32896, 55349, 56651, 105, 112, 108, 101, 68, 111, 116, 59, 32768, 8411, 512, 99, 116, 5383, 5388, 114, 59, 32896, 55349, 56495, 114, 111, 107, 59, 32768, 358, 5426, 5417, 5444, 5458, 5473, 0, 5480, 5485, 0, 0, 0, 0, 0, 5494, 5500, 5564, 5579, 0, 5726, 5732, 5738, 5745, 512, 99, 114, 5421, 5429, 117, 116, 101, 33024, 218, 59, 32768, 218, 114, 512, 59, 111, 5435, 5437, 32768, 8607, 99, 105, 114, 59, 32768, 10569, 114, 820, 5449, 0, 5453, 121, 59, 32768, 1038, 118, 101, 59, 32768, 364, 512, 105, 121, 5462, 5469, 114, 99, 33024, 219, 59, 32768, 219, 59, 32768, 1059, 98, 108, 97, 99, 59, 32768, 368, 114, 59, 32896, 55349, 56600, 114, 97, 118, 101, 33024, 217, 59, 32768, 217, 97, 99, 114, 59, 32768, 362, 512, 100, 105, 5504, 5548, 101, 114, 512, 66, 80, 5511, 5535, 512, 97, 114, 5516, 5520, 114, 59, 32768, 95, 97, 99, 512, 101, 107, 5527, 5530, 59, 32768, 9183, 101, 116, 59, 32768, 9141, 97, 114, 101, 110, 116, 104, 101, 115, 105, 115, 59, 32768, 9181, 111, 110, 512, 59, 80, 5555, 5557, 32768, 8899, 108, 117, 115, 59, 32768, 8846, 512, 103, 112, 5568, 5573, 111, 110, 59, 32768, 370, 102, 59, 32896, 55349, 56652, 2048, 65, 68, 69, 84, 97, 100, 112, 115, 5595, 5624, 5635, 5648, 5664, 5671, 5682, 5712, 114, 114, 111, 119, 768, 59, 66, 68, 5606, 5608, 5613, 32768, 8593, 97, 114, 59, 32768, 10514, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8645, 111, 119, 110, 65, 114, 114, 111, 119, 59, 32768, 8597, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109, 59, 32768, 10606, 101, 101, 512, 59, 65, 5655, 5657, 32768, 8869, 114, 114, 111, 119, 59, 32768, 8613, 114, 114, 111, 119, 59, 32768, 8657, 111, 119, 110, 97, 114, 114, 111, 119, 59, 32768, 8661, 101, 114, 512, 76, 82, 5689, 5700, 101, 102, 116, 65, 114, 114, 111, 119, 59, 32768, 8598, 105, 103, 104, 116, 65, 114, 114, 111, 119, 59, 32768, 8599, 105, 512, 59, 108, 5718, 5720, 32768, 978, 111, 110, 59, 32768, 933, 105, 110, 103, 59, 32768, 366, 99, 114, 59, 32896, 55349, 56496, 105, 108, 100, 101, 59, 32768, 360, 109, 108, 33024, 220, 59, 32768, 220, 2304, 68, 98, 99, 100, 101, 102, 111, 115, 118, 5770, 5776, 5781, 5785, 5798, 5878, 5883, 5889, 5895, 97, 115, 104, 59, 32768, 8875, 97, 114, 59, 32768, 10987, 121, 59, 32768, 1042, 97, 115, 104, 512, 59, 108, 5793, 5795, 32768, 8873, 59, 32768, 10982, 512, 101, 114, 5803, 5806, 59, 32768, 8897, 768, 98, 116, 121, 5813, 5818, 5866, 97, 114, 59, 32768, 8214, 512, 59, 105, 5823, 5825, 32768, 8214, 99, 97, 108, 1024, 66, 76, 83, 84, 5837, 5842, 5848, 5859, 97, 114, 59, 32768, 8739, 105, 110, 101, 59, 32768, 124, 101, 112, 97, 114, 97, 116, 111, 114, 59, 32768, 10072, 105, 108, 100, 101, 59, 32768, 8768, 84, 104, 105, 110, 83, 112, 97, 99, 101, 59, 32768, 8202, 114, 59, 32896, 55349, 56601, 112, 102, 59, 32896, 55349, 56653, 99, 114, 59, 32896, 55349, 56497, 100, 97, 115, 104, 59, 32768, 8874, 1280, 99, 101, 102, 111, 115, 5913, 5919, 5925, 5930, 5936, 105, 114, 99, 59, 32768, 372, 100, 103, 101, 59, 32768, 8896, 114, 59, 32896, 55349, 56602, 112, 102, 59, 32896, 55349, 56654, 99, 114, 59, 32896, 55349, 56498, 1024, 102, 105, 111, 115, 5951, 5956, 5959, 5965, 114, 59, 32896, 55349, 56603, 59, 32768, 926, 112, 102, 59, 32896, 55349, 56655, 99, 114, 59, 32896, 55349, 56499, 2304, 65, 73, 85, 97, 99, 102, 111, 115, 117, 5990, 5995, 6000, 6005, 6014, 6027, 6032, 6038, 6044, 99, 121, 59, 32768, 1071, 99, 121, 59, 32768, 1031, 99, 121, 59, 32768, 1070, 99, 117, 116, 101, 33024, 221, 59, 32768, 221, 512, 105, 121, 6019, 6024, 114, 99, 59, 32768, 374, 59, 32768, 1067, 114, 59, 32896, 55349, 56604, 112, 102, 59, 32896, 55349, 56656, 99, 114, 59, 32896, 55349, 56500, 109, 108, 59, 32768, 376, 2048, 72, 97, 99, 100, 101, 102, 111, 115, 6066, 6071, 6078, 6092, 6097, 6119, 6123, 6128, 99, 121, 59, 32768, 1046, 99, 117, 116, 101, 59, 32768, 377, 512, 97, 121, 6083, 6089, 114, 111, 110, 59, 32768, 381, 59, 32768, 1047, 111, 116, 59, 32768, 379, 835, 6102, 0, 6116, 111, 87, 105, 100, 116, 104, 83, 112, 97, 99, 101, 59, 32768, 8203, 97, 59, 32768, 918, 114, 59, 32768, 8488, 112, 102, 59, 32768, 8484, 99, 114, 59, 32896, 55349, 56501, 5938, 6159, 6168, 6175, 0, 6214, 6222, 6233, 0, 0, 0, 0, 6242, 6267, 6290, 6429, 6444, 0, 6495, 6503, 6531, 6540, 0, 6547, 99, 117, 116, 101, 33024, 225, 59, 32768, 225, 114, 101, 118, 101, 59, 32768, 259, 1536, 59, 69, 100, 105, 117, 121, 6187, 6189, 6193, 6196, 6203, 6210, 32768, 8766, 59, 32896, 8766, 819, 59, 32768, 8767, 114, 99, 33024, 226, 59, 32768, 226, 116, 101, 33024, 180, 59, 32768, 180, 59, 32768, 1072, 108, 105, 103, 33024, 230, 59, 32768, 230, 512, 59, 114, 6226, 6228, 32768, 8289, 59, 32896, 55349, 56606, 114, 97, 118, 101, 33024, 224, 59, 32768, 224, 512, 101, 112, 6246, 6261, 512, 102, 112, 6251, 6257, 115, 121, 109, 59, 32768, 8501, 104, 59, 32768, 8501, 104, 97, 59, 32768, 945, 512, 97, 112, 6271, 6284, 512, 99, 108, 6276, 6280, 114, 59, 32768, 257, 103, 59, 32768, 10815, 33024, 38, 59, 32768, 38, 1077, 6295, 0, 0, 6326, 1280, 59, 97, 100, 115, 118, 6305, 6307, 6312, 6315, 6322, 32768, 8743, 110, 100, 59, 32768, 10837, 59, 32768, 10844, 108, 111, 112, 101, 59, 32768, 10840, 59, 32768, 10842, 1792, 59, 101, 108, 109, 114, 115, 122, 6340, 6342, 6345, 6349, 6391, 6410, 6422, 32768, 8736, 59, 32768, 10660, 101, 59, 32768, 8736, 115, 100, 512, 59, 97, 6356, 6358, 32768, 8737, 2098, 6368, 6371, 6374, 6377, 6380, 6383, 6386, 6389, 59, 32768, 10664, 59, 32768, 10665, 59, 32768, 10666, 59, 32768, 10667, 59, 32768, 10668, 59, 32768, 10669, 59, 32768, 10670, 59, 32768, 10671, 116, 512, 59, 118, 6397, 6399, 32768, 8735, 98, 512, 59, 100, 6405, 6407, 32768, 8894, 59, 32768, 10653, 512, 112, 116, 6415, 6419, 104, 59, 32768, 8738, 59, 32768, 197, 97, 114, 114, 59, 32768, 9084, 512, 103, 112, 6433, 6438, 111, 110, 59, 32768, 261, 102, 59, 32896, 55349, 56658, 1792, 59, 69, 97, 101, 105, 111, 112, 6458, 6460, 6463, 6469, 6472, 6476, 6480, 32768, 8776, 59, 32768, 10864, 99, 105, 114, 59, 32768, 10863, 59, 32768, 8778, 100, 59, 32768, 8779, 115, 59, 32768, 39, 114, 111, 120, 512, 59, 101, 6488, 6490, 32768, 8776, 113, 59, 32768, 8778, 105, 110, 103, 33024, 229, 59, 32768, 229, 768, 99, 116, 121, 6509, 6514, 6517, 114, 59, 32896, 55349, 56502, 59, 32768, 42, 109, 112, 512, 59, 101, 6524, 6526, 32768, 8776, 113, 59, 32768, 8781, 105, 108, 100, 101, 33024, 227, 59, 32768, 227, 109, 108, 33024, 228, 59, 32768, 228, 512, 99, 105, 6551, 6559, 111, 110, 105, 110, 116, 59, 32768, 8755, 110, 116, 59, 32768, 10769, 4096, 78, 97, 98, 99, 100, 101, 102, 105, 107, 108, 110, 111, 112, 114, 115, 117, 6597, 6602, 6673, 6688, 6701, 6707, 6768, 6773, 6891, 6898, 6999, 7023, 7309, 7316, 7334, 7383, 111, 116, 59, 32768, 10989, 512, 99, 114, 6607, 6652, 107, 1024, 99, 101, 112, 115, 6617, 6623, 6632, 6639, 111, 110, 103, 59, 32768, 8780, 112, 115, 105, 108, 111, 110, 59, 32768, 1014, 114, 105, 109, 101, 59, 32768, 8245, 105, 109, 512, 59, 101, 6646, 6648, 32768, 8765, 113, 59, 32768, 8909, 583, 6656, 6661, 101, 101, 59, 32768, 8893, 101, 100, 512, 59, 103, 6667, 6669, 32768, 8965, 101, 59, 32768, 8965, 114, 107, 512, 59, 116, 6680, 6682, 32768, 9141, 98, 114, 107, 59, 32768, 9142, 512, 111, 121, 6693, 6698, 110, 103, 59, 32768, 8780, 59, 32768, 1073, 113, 117, 111, 59, 32768, 8222, 1280, 99, 109, 112, 114, 116, 6718, 6731, 6738, 6743, 6749, 97, 117, 115, 512, 59, 101, 6726, 6728, 32768, 8757, 59, 32768, 8757, 112, 116, 121, 118, 59, 32768, 10672, 115, 105, 59, 32768, 1014, 110, 111, 117, 59, 32768, 8492, 768, 97, 104, 119, 6756, 6759, 6762, 59, 32768, 946, 59, 32768, 8502, 101, 101, 110, 59, 32768, 8812, 114, 59, 32896, 55349, 56607, 103, 1792, 99, 111, 115, 116, 117, 118, 119, 6789, 6809, 6834, 6850, 6872, 6879, 6884, 768, 97, 105, 117, 6796, 6800, 6805, 112, 59, 32768, 8898, 114, 99, 59, 32768, 9711, 112, 59, 32768, 8899, 768, 100, 112, 116, 6816, 6821, 6827, 111, 116, 59, 32768, 10752, 108, 117, 115, 59, 32768, 10753, 105, 109, 101, 115, 59, 32768, 10754, 1090, 6840, 0, 0, 6846, 99, 117, 112, 59, 32768, 10758, 97, 114, 59, 32768, 9733, 114, 105, 97, 110, 103, 108, 101, 512, 100, 117, 6862, 6868, 111, 119, 110, 59, 32768, 9661, 112, 59, 32768, 9651, 112, 108, 117, 115, 59, 32768, 10756, 101, 101, 59, 32768, 8897, 101, 100, 103, 101, 59, 32768, 8896, 97, 114, 111, 119, 59, 32768, 10509, 768, 97, 107, 111, 6905, 6976, 6994, 512, 99, 110, 6910, 6972, 107, 768, 108, 115, 116, 6918, 6927, 6935, 111, 122, 101, 110, 103, 101, 59, 32768, 10731, 113, 117, 97, 114, 101, 59, 32768, 9642, 114, 105, 97, 110, 103, 108, 101, 1024, 59, 100, 108, 114, 6951, 6953, 6959, 6965, 32768, 9652, 111, 119, 110, 59, 32768, 9662, 101, 102, 116, 59, 32768, 9666, 105, 103, 104, 116, 59, 32768, 9656, 107, 59, 32768, 9251, 770, 6981, 0, 6991, 771, 6985, 0, 6988, 59, 32768, 9618, 59, 32768, 9617, 52, 59, 32768, 9619, 99, 107, 59, 32768, 9608, 512, 101, 111, 7004, 7019, 512, 59, 113, 7009, 7012, 32896, 61, 8421, 117, 105, 118, 59, 32896, 8801, 8421, 116, 59, 32768, 8976, 1024, 112, 116, 119, 120, 7032, 7037, 7049, 7055, 102, 59, 32896, 55349, 56659, 512, 59, 116, 7042, 7044, 32768, 8869, 111, 109, 59, 32768, 8869, 116, 105, 101, 59, 32768, 8904, 3072, 68, 72, 85, 86, 98, 100, 104, 109, 112, 116, 117, 118, 7080, 7101, 7126, 7147, 7182, 7187, 7208, 7233, 7240, 7246, 7253, 7274, 1024, 76, 82, 108, 114, 7089, 7092, 7095, 7098, 59, 32768, 9559, 59, 32768, 9556, 59, 32768, 9558, 59, 32768, 9555, 1280, 59, 68, 85, 100, 117, 7112, 7114, 7117, 7120, 7123, 32768, 9552, 59, 32768, 9574, 59, 32768, 9577, 59, 32768, 9572, 59, 32768, 9575, 1024, 76, 82, 108, 114, 7135, 7138, 7141, 7144, 59, 32768, 9565, 59, 32768, 9562, 59, 32768, 9564, 59, 32768, 9561, 1792, 59, 72, 76, 82, 104, 108, 114, 7162, 7164, 7167, 7170, 7173, 7176, 7179, 32768, 9553, 59, 32768, 9580, 59, 32768, 9571, 59, 32768, 9568, 59, 32768, 9579, 59, 32768, 9570, 59, 32768, 9567, 111, 120, 59, 32768, 10697, 1024, 76, 82, 108, 114, 7196, 7199, 7202, 7205, 59, 32768, 9557, 59, 32768, 9554, 59, 32768, 9488, 59, 32768, 9484, 1280, 59, 68, 85, 100, 117, 7219, 7221, 7224, 7227, 7230, 32768, 9472, 59, 32768, 9573, 59, 32768, 9576, 59, 32768, 9516, 59, 32768, 9524, 105, 110, 117, 115, 59, 32768, 8863, 108, 117, 115, 59, 32768, 8862, 105, 109, 101, 115, 59, 32768, 8864, 1024, 76, 82, 108, 114, 7262, 7265, 7268, 7271, 59, 32768, 9563, 59, 32768, 9560, 59, 32768, 9496, 59, 32768, 9492, 1792, 59, 72, 76, 82, 104, 108, 114, 7289, 7291, 7294, 7297, 7300, 7303, 7306, 32768, 9474, 59, 32768, 9578, 59, 32768, 9569, 59, 32768, 9566, 59, 32768, 9532, 59, 32768, 9508, 59, 32768, 9500, 114, 105, 109, 101, 59, 32768, 8245, 512, 101, 118, 7321, 7326, 118, 101, 59, 32768, 728, 98, 97, 114, 33024, 166, 59, 32768, 166, 1024, 99, 101, 105, 111, 7343, 7348, 7353, 7364, 114, 59, 32896, 55349, 56503, 109, 105, 59, 32768, 8271, 109, 512, 59, 101, 7359, 7361, 32768, 8765, 59, 32768, 8909, 108, 768, 59, 98, 104, 7372, 7374, 7377, 32768, 92, 59, 32768, 10693, 115, 117, 98, 59, 32768, 10184, 573, 7387, 7399, 108, 512, 59, 101, 7392, 7394, 32768, 8226, 116, 59, 32768, 8226, 112, 768, 59, 69, 101, 7406, 7408, 7411, 32768, 8782, 59, 32768, 10926, 512, 59, 113, 7416, 7418, 32768, 8783, 59, 32768, 8783, 6450, 7448, 0, 7523, 7571, 7576, 7613, 0, 7618, 7647, 0, 0, 7764, 0, 0, 7779, 0, 0, 7899, 7914, 7949, 7955, 0, 8158, 0, 8176, 768, 99, 112, 114, 7454, 7460, 7509, 117, 116, 101, 59, 32768, 263, 1536, 59, 97, 98, 99, 100, 115, 7473, 7475, 7480, 7487, 7500, 7505, 32768, 8745, 110, 100, 59, 32768, 10820, 114, 99, 117, 112, 59, 32768, 10825, 512, 97, 117, 7492, 7496, 112, 59, 32768, 10827, 112, 59, 32768, 10823, 111, 116, 59, 32768, 10816, 59, 32896, 8745, 65024, 512, 101, 111, 7514, 7518, 116, 59, 32768, 8257, 110, 59, 32768, 711, 1024, 97, 101, 105, 117, 7531, 7544, 7552, 7557, 833, 7536, 0, 7540, 115, 59, 32768, 10829, 111, 110, 59, 32768, 269, 100, 105, 108, 33024, 231, 59, 32768, 231, 114, 99, 59, 32768, 265, 112, 115, 512, 59, 115, 7564, 7566, 32768, 10828, 109, 59, 32768, 10832, 111, 116, 59, 32768, 267, 768, 100, 109, 110, 7582, 7589, 7596, 105, 108, 33024, 184, 59, 32768, 184, 112, 116, 121, 118, 59, 32768, 10674, 116, 33280, 162, 59, 101, 7603, 7605, 32768, 162, 114, 100, 111, 116, 59, 32768, 183, 114, 59, 32896, 55349, 56608, 768, 99, 101, 105, 7624, 7628, 7643, 121, 59, 32768, 1095, 99, 107, 512, 59, 109, 7635, 7637, 32768, 10003, 97, 114, 107, 59, 32768, 10003, 59, 32768, 967, 114, 1792, 59, 69, 99, 101, 102, 109, 115, 7662, 7664, 7667, 7742, 7745, 7752, 7757, 32768, 9675, 59, 32768, 10691, 768, 59, 101, 108, 7674, 7676, 7680, 32768, 710, 113, 59, 32768, 8791, 101, 1074, 7687, 0, 0, 7709, 114, 114, 111, 119, 512, 108, 114, 7695, 7701, 101, 102, 116, 59, 32768, 8634, 105, 103, 104, 116, 59, 32768, 8635, 1280, 82, 83, 97, 99, 100, 7719, 7722, 7725, 7730, 7736, 59, 32768, 174, 59, 32768, 9416, 115, 116, 59, 32768, 8859, 105, 114, 99, 59, 32768, 8858, 97, 115, 104, 59, 32768, 8861, 59, 32768, 8791, 110, 105, 110, 116, 59, 32768, 10768, 105, 100, 59, 32768, 10991, 99, 105, 114, 59, 32768, 10690, 117, 98, 115, 512, 59, 117, 7771, 7773, 32768, 9827, 105, 116, 59, 32768, 9827, 1341, 7785, 7804, 7850, 0, 7871, 111, 110, 512, 59, 101, 7791, 7793, 32768, 58, 512, 59, 113, 7798, 7800, 32768, 8788, 59, 32768, 8788, 1086, 7809, 0, 0, 7820, 97, 512, 59, 116, 7814, 7816, 32768, 44, 59, 32768, 64, 768, 59, 102, 108, 7826, 7828, 7832, 32768, 8705, 110, 59, 32768, 8728, 101, 512, 109, 120, 7838, 7844, 101, 110, 116, 59, 32768, 8705, 101, 115, 59, 32768, 8450, 824, 7854, 0, 7866, 512, 59, 100, 7858, 7860, 32768, 8773, 111, 116, 59, 32768, 10861, 110, 116, 59, 32768, 8750, 768, 102, 114, 121, 7877, 7881, 7886, 59, 32896, 55349, 56660, 111, 100, 59, 32768, 8720, 33280, 169, 59, 115, 7892, 7894, 32768, 169, 114, 59, 32768, 8471, 512, 97, 111, 7903, 7908, 114, 114, 59, 32768, 8629, 115, 115, 59, 32768, 10007, 512, 99, 117, 7918, 7923, 114, 59, 32896, 55349, 56504, 512, 98, 112, 7928, 7938, 512, 59, 101, 7933, 7935, 32768, 10959, 59, 32768, 10961, 512, 59, 101, 7943, 7945, 32768, 10960, 59, 32768, 10962, 100, 111, 116, 59, 32768, 8943, 1792, 100, 101, 108, 112, 114, 118, 119, 7969, 7983, 7996, 8009, 8057, 8147, 8152, 97, 114, 114, 512, 108, 114, 7977, 7980, 59, 32768, 10552, 59, 32768, 10549, 1089, 7989, 0, 0, 7993, 114, 59, 32768, 8926, 99, 59, 32768, 8927, 97, 114, 114, 512, 59, 112, 8004, 8006, 32768, 8630, 59, 32768, 10557, 1536, 59, 98, 99, 100, 111, 115, 8022, 8024, 8031, 8044, 8049, 8053, 32768, 8746, 114, 99, 97, 112, 59, 32768, 10824, 512, 97, 117, 8036, 8040, 112, 59, 32768, 10822, 112, 59, 32768, 10826, 111, 116, 59, 32768, 8845, 114, 59, 32768, 10821, 59, 32896, 8746, 65024, 1024, 97, 108, 114, 118, 8066, 8078, 8116, 8123, 114, 114, 512, 59, 109, 8073, 8075, 32768, 8631, 59, 32768, 10556, 121, 768, 101, 118, 119, 8086, 8104, 8109, 113, 1089, 8093, 0, 0, 8099, 114, 101, 99, 59, 32768, 8926, 117, 99, 99, 59, 32768, 8927, 101, 101, 59, 32768, 8910, 101, 100, 103, 101, 59, 32768, 8911, 101, 110, 33024, 164, 59, 32768, 164, 101, 97, 114, 114, 111, 119, 512, 108, 114, 8134, 8140, 101, 102, 116, 59, 32768, 8630, 105, 103, 104, 116, 59, 32768, 8631, 101, 101, 59, 32768, 8910, 101, 100, 59, 32768, 8911, 512, 99, 105, 8162, 8170, 111, 110, 105, 110, 116, 59, 32768, 8754, 110, 116, 59, 32768, 8753, 108, 99, 116, 121, 59, 32768, 9005, 4864, 65, 72, 97, 98, 99, 100, 101, 102, 104, 105, 106, 108, 111, 114, 115, 116, 117, 119, 122, 8221, 8226, 8231, 8267, 8282, 8296, 8327, 8351, 8366, 8379, 8466, 8471, 8487, 8621, 8647, 8676, 8697, 8712, 8720, 114, 114, 59, 32768, 8659, 97, 114, 59, 32768, 10597, 1024, 103, 108, 114, 115, 8240, 8246, 8252, 8256, 103, 101, 114, 59, 32768, 8224, 101, 116, 104, 59, 32768, 8504, 114, 59, 32768, 8595, 104, 512, 59, 118, 8262, 8264, 32768, 8208, 59, 32768, 8867, 572, 8271, 8278, 97, 114, 111, 119, 59, 32768, 10511, 97, 99, 59, 32768, 733, 512, 97, 121, 8287, 8293, 114, 111, 110, 59, 32768, 271, 59, 32768, 1076, 768, 59, 97, 111, 8303, 8305, 8320, 32768, 8518, 512, 103, 114, 8310, 8316, 103, 101, 114, 59, 32768, 8225, 114, 59, 32768, 8650, 116, 115, 101, 113, 59, 32768, 10871, 768, 103, 108, 109, 8334, 8339, 8344, 33024, 176, 59, 32768, 176, 116, 97, 59, 32768, 948, 112, 116, 121, 118, 59, 32768, 10673, 512, 105, 114, 8356, 8362, 115, 104, 116, 59, 32768, 10623, 59, 32896, 55349, 56609, 97, 114, 512, 108, 114, 8373, 8376, 59, 32768, 8643, 59, 32768, 8642, 1280, 97, 101, 103, 115, 118, 8390, 8418, 8421, 8428, 8433, 109, 768, 59, 111, 115, 8398, 8400, 8415, 32768, 8900, 110, 100, 512, 59, 115, 8407, 8409, 32768, 8900, 117, 105, 116, 59, 32768, 9830, 59, 32768, 9830, 59, 32768, 168, 97, 109, 109, 97, 59, 32768, 989, 105, 110, 59, 32768, 8946, 768, 59, 105, 111, 8440, 8442, 8461, 32768, 247, 100, 101, 33280, 247, 59, 111, 8450, 8452, 32768, 247, 110, 116, 105, 109, 101, 115, 59, 32768, 8903, 110, 120, 59, 32768, 8903, 99, 121, 59, 32768, 1106, 99, 1088, 8478, 0, 0, 8483, 114, 110, 59, 32768, 8990, 111, 112, 59, 32768, 8973, 1280, 108, 112, 116, 117, 119, 8498, 8504, 8509, 8556, 8570, 108, 97, 114, 59, 32768, 36, 102, 59, 32896, 55349, 56661, 1280, 59, 101, 109, 112, 115, 8520, 8522, 8535, 8542, 8548, 32768, 729, 113, 512, 59, 100, 8528, 8530, 32768, 8784, 111, 116, 59, 32768, 8785, 105, 110, 117, 115, 59, 32768, 8760, 108, 117, 115, 59, 32768, 8724, 113, 117, 97, 114, 101, 59, 32768, 8865, 98, 108, 101, 98, 97, 114, 119, 101, 100, 103, 101, 59, 32768, 8966, 110, 768, 97, 100, 104, 8578, 8585, 8597, 114, 114, 111, 119, 59, 32768, 8595, 111, 119, 110, 97, 114, 114, 111, 119, 115, 59, 32768, 8650, 97, 114, 112, 111, 111, 110, 512, 108, 114, 8608, 8614, 101, 102, 116, 59, 32768, 8643, 105, 103, 104, 116, 59, 32768, 8642, 563, 8625, 8633, 107, 97, 114, 111, 119, 59, 32768, 10512, 1088, 8638, 0, 0, 8643, 114, 110, 59, 32768, 8991, 111, 112, 59, 32768, 8972, 768, 99, 111, 116, 8654, 8666, 8670, 512, 114, 121, 8659, 8663, 59, 32896, 55349, 56505, 59, 32768, 1109, 108, 59, 32768, 10742, 114, 111, 107, 59, 32768, 273, 512, 100, 114, 8681, 8686, 111, 116, 59, 32768, 8945, 105, 512, 59, 102, 8692, 8694, 32768, 9663, 59, 32768, 9662, 512, 97, 104, 8702, 8707, 114, 114, 59, 32768, 8693, 97, 114, 59, 32768, 10607, 97, 110, 103, 108, 101, 59, 32768, 10662, 512, 99, 105, 8725, 8729, 121, 59, 32768, 1119, 103, 114, 97, 114, 114, 59, 32768, 10239, 4608, 68, 97, 99, 100, 101, 102, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 120, 8774, 8788, 8807, 8844, 8849, 8852, 8866, 8895, 8929, 8977, 8989, 9004, 9046, 9136, 9151, 9171, 9184, 9199, 512, 68, 111, 8779, 8784, 111, 116, 59, 32768, 10871, 116, 59, 32768, 8785, 512, 99, 115, 8793, 8801, 117, 116, 101, 33024, 233, 59, 32768, 233, 116, 101, 114, 59, 32768, 10862, 1024, 97, 105, 111, 121, 8816, 8822, 8835, 8841, 114, 111, 110, 59, 32768, 283, 114, 512, 59, 99, 8828, 8830, 32768, 8790, 33024, 234, 59, 32768, 234, 108, 111, 110, 59, 32768, 8789, 59, 32768, 1101, 111, 116, 59, 32768, 279, 59, 32768, 8519, 512, 68, 114, 8857, 8862, 111, 116, 59, 32768, 8786, 59, 32896, 55349, 56610, 768, 59, 114, 115, 8873, 8875, 8883, 32768, 10906, 97, 118, 101, 33024, 232, 59, 32768, 232, 512, 59, 100, 8888, 8890, 32768, 10902, 111, 116, 59, 32768, 10904, 1024, 59, 105, 108, 115, 8904, 8906, 8914, 8917, 32768, 10905, 110, 116, 101, 114, 115, 59, 32768, 9191, 59, 32768, 8467, 512, 59, 100, 8922, 8924, 32768, 10901, 111, 116, 59, 32768, 10903, 768, 97, 112, 115, 8936, 8941, 8960, 99, 114, 59, 32768, 275, 116, 121, 768, 59, 115, 118, 8950, 8952, 8957, 32768, 8709, 101, 116, 59, 32768, 8709, 59, 32768, 8709, 112, 512, 49, 59, 8966, 8975, 516, 8970, 8973, 59, 32768, 8196, 59, 32768, 8197, 32768, 8195, 512, 103, 115, 8982, 8985, 59, 32768, 331, 112, 59, 32768, 8194, 512, 103, 112, 8994, 8999, 111, 110, 59, 32768, 281, 102, 59, 32896, 55349, 56662, 768, 97, 108, 115, 9011, 9023, 9028, 114, 512, 59, 115, 9017, 9019, 32768, 8917, 108, 59, 32768, 10723, 117, 115, 59, 32768, 10865, 105, 768, 59, 108, 118, 9036, 9038, 9043, 32768, 949, 111, 110, 59, 32768, 949, 59, 32768, 1013, 1024, 99, 115, 117, 118, 9055, 9071, 9099, 9128, 512, 105, 111, 9060, 9065, 114, 99, 59, 32768, 8790, 108, 111, 110, 59, 32768, 8789, 1082, 9077, 0, 0, 9081, 109, 59, 32768, 8770, 97, 110, 116, 512, 103, 108, 9088, 9093, 116, 114, 59, 32768, 10902, 101, 115, 115, 59, 32768, 10901, 768, 97, 101, 105, 9106, 9111, 9116, 108, 115, 59, 32768, 61, 115, 116, 59, 32768, 8799, 118, 512, 59, 68, 9122, 9124, 32768, 8801, 68, 59, 32768, 10872, 112, 97, 114, 115, 108, 59, 32768, 10725, 512, 68, 97, 9141, 9146, 111, 116, 59, 32768, 8787, 114, 114, 59, 32768, 10609, 768, 99, 100, 105, 9158, 9162, 9167, 114, 59, 32768, 8495, 111, 116, 59, 32768, 8784, 109, 59, 32768, 8770, 512, 97, 104, 9176, 9179, 59, 32768, 951, 33024, 240, 59, 32768, 240, 512, 109, 114, 9189, 9195, 108, 33024, 235, 59, 32768, 235, 111, 59, 32768, 8364, 768, 99, 105, 112, 9206, 9210, 9215, 108, 59, 32768, 33, 115, 116, 59, 32768, 8707, 512, 101, 111, 9220, 9230, 99, 116, 97, 116, 105, 111, 110, 59, 32768, 8496, 110, 101, 110, 116, 105, 97, 108, 101, 59, 32768, 8519, 4914, 9262, 0, 9276, 0, 9280, 9287, 0, 0, 9318, 9324, 0, 9331, 0, 9352, 9357, 9386, 0, 9395, 9497, 108, 108, 105, 110, 103, 100, 111, 116, 115, 101, 113, 59, 32768, 8786, 121, 59, 32768, 1092, 109, 97, 108, 101, 59, 32768, 9792, 768, 105, 108, 114, 9293, 9299, 9313, 108, 105, 103, 59, 32768, 64259, 1082, 9305, 0, 0, 9309, 103, 59, 32768, 64256, 105, 103, 59, 32768, 64260, 59, 32896, 55349, 56611, 108, 105, 103, 59, 32768, 64257, 108, 105, 103, 59, 32896, 102, 106, 768, 97, 108, 116, 9337, 9341, 9346, 116, 59, 32768, 9837, 105, 103, 59, 32768, 64258, 110, 115, 59, 32768, 9649, 111, 102, 59, 32768, 402, 833, 9361, 0, 9366, 102, 59, 32896, 55349, 56663, 512, 97, 107, 9370, 9375, 108, 108, 59, 32768, 8704, 512, 59, 118, 9380, 9382, 32768, 8916, 59, 32768, 10969, 97, 114, 116, 105, 110, 116, 59, 32768, 10765, 512, 97, 111, 9399, 9491, 512, 99, 115, 9404, 9487, 1794, 9413, 9443, 9453, 9470, 9474, 0, 9484, 1795, 9421, 9426, 9429, 9434, 9437, 0, 9440, 33024, 189, 59, 32768, 189, 59, 32768, 8531, 33024, 188, 59, 32768, 188, 59, 32768, 8533, 59, 32768, 8537, 59, 32768, 8539, 772, 9447, 0, 9450, 59, 32768, 8532, 59, 32768, 8534, 1285, 9459, 9464, 0, 0, 9467, 33024, 190, 59, 32768, 190, 59, 32768, 8535, 59, 32768, 8540, 53, 59, 32768, 8536, 775, 9478, 0, 9481, 59, 32768, 8538, 59, 32768, 8541, 56, 59, 32768, 8542, 108, 59, 32768, 8260, 119, 110, 59, 32768, 8994, 99, 114, 59, 32896, 55349, 56507, 4352, 69, 97, 98, 99, 100, 101, 102, 103, 105, 106, 108, 110, 111, 114, 115, 116, 118, 9537, 9547, 9575, 9582, 9595, 9600, 9679, 9684, 9694, 9700, 9705, 9725, 9773, 9779, 9785, 9810, 9917, 512, 59, 108, 9542, 9544, 32768, 8807, 59, 32768, 10892, 768, 99, 109, 112, 9554, 9560, 9572, 117, 116, 101, 59, 32768, 501, 109, 97, 512, 59, 100, 9567, 9569, 32768, 947, 59, 32768, 989, 59, 32768, 10886, 114, 101, 118, 101, 59, 32768, 287, 512, 105, 121, 9587, 9592, 114, 99, 59, 32768, 285, 59, 32768, 1075, 111, 116, 59, 32768, 289, 1024, 59, 108, 113, 115, 9609, 9611, 9614, 9633, 32768, 8805, 59, 32768, 8923, 768, 59, 113, 115, 9621, 9623, 9626, 32768, 8805, 59, 32768, 8807, 108, 97, 110, 116, 59, 32768, 10878, 1024, 59, 99, 100, 108, 9642, 9644, 9648, 9667, 32768, 10878, 99, 59, 32768, 10921, 111, 116, 512, 59, 111, 9655, 9657, 32768, 10880, 512, 59, 108, 9662, 9664, 32768, 10882, 59, 32768, 10884, 512, 59, 101, 9672, 9675, 32896, 8923, 65024, 115, 59, 32768, 10900, 114, 59, 32896, 55349, 56612, 512, 59, 103, 9689, 9691, 32768, 8811, 59, 32768, 8921, 109, 101, 108, 59, 32768, 8503, 99, 121, 59, 32768, 1107, 1024, 59, 69, 97, 106, 9714, 9716, 9719, 9722, 32768, 8823, 59, 32768, 10898, 59, 32768, 10917, 59, 32768, 10916, 1024, 69, 97, 101, 115, 9734, 9737, 9751, 9768, 59, 32768, 8809, 112, 512, 59, 112, 9743, 9745, 32768, 10890, 114, 111, 120, 59, 32768, 10890, 512, 59, 113, 9756, 9758, 32768, 10888, 512, 59, 113, 9763, 9765, 32768, 10888, 59, 32768, 8809, 105, 109, 59, 32768, 8935, 112, 102, 59, 32896, 55349, 56664, 97, 118, 101, 59, 32768, 96, 512, 99, 105, 9790, 9794, 114, 59, 32768, 8458, 109, 768, 59, 101, 108, 9802, 9804, 9807, 32768, 8819, 59, 32768, 10894, 59, 32768, 10896, 34304, 62, 59, 99, 100, 108, 113, 114, 9824, 9826, 9838, 9843, 9849, 9856, 32768, 62, 512, 99, 105, 9831, 9834, 59, 32768, 10919, 114, 59, 32768, 10874, 111, 116, 59, 32768, 8919, 80, 97, 114, 59, 32768, 10645, 117, 101, 115, 116, 59, 32768, 10876, 1280, 97, 100, 101, 108, 115, 9867, 9882, 9887, 9906, 9912, 833, 9872, 0, 9879, 112, 114, 111, 120, 59, 32768, 10886, 114, 59, 32768, 10616, 111, 116, 59, 32768, 8919, 113, 512, 108, 113, 9893, 9899, 101, 115, 115, 59, 32768, 8923, 108, 101, 115, 115, 59, 32768, 10892, 101, 115, 115, 59, 32768, 8823, 105, 109, 59, 32768, 8819, 512, 101, 110, 9922, 9932, 114, 116, 110, 101, 113, 113, 59, 32896, 8809, 65024, 69, 59, 32896, 8809, 65024, 2560, 65, 97, 98, 99, 101, 102, 107, 111, 115, 121, 9958, 9963, 10015, 10020, 10026, 10060, 10065, 10085, 10147, 10171, 114, 114, 59, 32768, 8660, 1024, 105, 108, 109, 114, 9972, 9978, 9982, 9988, 114, 115, 112, 59, 32768, 8202, 102, 59, 32768, 189, 105, 108, 116, 59, 32768, 8459, 512, 100, 114, 9993, 9998, 99, 121, 59, 32768, 1098, 768, 59, 99, 119, 10005, 10007, 10012, 32768, 8596, 105, 114, 59, 32768, 10568, 59, 32768, 8621, 97, 114, 59, 32768, 8463, 105, 114, 99, 59, 32768, 293, 768, 97, 108, 114, 10033, 10048, 10054, 114, 116, 115, 512, 59, 117, 10041, 10043, 32768, 9829, 105, 116, 59, 32768, 9829, 108, 105, 112, 59, 32768, 8230, 99, 111, 110, 59, 32768, 8889, 114, 59, 32896, 55349, 56613, 115, 512, 101, 119, 10071, 10078, 97, 114, 111, 119, 59, 32768, 10533, 97, 114, 111, 119, 59, 32768, 10534, 1280, 97, 109, 111, 112, 114, 10096, 10101, 10107, 10136, 10141, 114, 114, 59, 32768, 8703, 116, 104, 116, 59, 32768, 8763, 107, 512, 108, 114, 10113, 10124, 101, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8617, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8618, 102, 59, 32896, 55349, 56665, 98, 97, 114, 59, 32768, 8213, 768, 99, 108, 116, 10154, 10159, 10165, 114, 59, 32896, 55349, 56509, 97, 115, 104, 59, 32768, 8463, 114, 111, 107, 59, 32768, 295, 512, 98, 112, 10176, 10182, 117, 108, 108, 59, 32768, 8259, 104, 101, 110, 59, 32768, 8208, 5426, 10211, 0, 10220, 0, 10239, 10255, 10267, 0, 10276, 10312, 0, 0, 10318, 10371, 10458, 10485, 10491, 0, 10500, 10545, 10558, 99, 117, 116, 101, 33024, 237, 59, 32768, 237, 768, 59, 105, 121, 10226, 10228, 10235, 32768, 8291, 114, 99, 33024, 238, 59, 32768, 238, 59, 32768, 1080, 512, 99, 120, 10243, 10247, 121, 59, 32768, 1077, 99, 108, 33024, 161, 59, 32768, 161, 512, 102, 114, 10259, 10262, 59, 32768, 8660, 59, 32896, 55349, 56614, 114, 97, 118, 101, 33024, 236, 59, 32768, 236, 1024, 59, 105, 110, 111, 10284, 10286, 10300, 10306, 32768, 8520, 512, 105, 110, 10291, 10296, 110, 116, 59, 32768, 10764, 116, 59, 32768, 8749, 102, 105, 110, 59, 32768, 10716, 116, 97, 59, 32768, 8489, 108, 105, 103, 59, 32768, 307, 768, 97, 111, 112, 10324, 10361, 10365, 768, 99, 103, 116, 10331, 10335, 10357, 114, 59, 32768, 299, 768, 101, 108, 112, 10342, 10345, 10351, 59, 32768, 8465, 105, 110, 101, 59, 32768, 8464, 97, 114, 116, 59, 32768, 8465, 104, 59, 32768, 305, 102, 59, 32768, 8887, 101, 100, 59, 32768, 437, 1280, 59, 99, 102, 111, 116, 10381, 10383, 10389, 10403, 10409, 32768, 8712, 97, 114, 101, 59, 32768, 8453, 105, 110, 512, 59, 116, 10396, 10398, 32768, 8734, 105, 101, 59, 32768, 10717, 100, 111, 116, 59, 32768, 305, 1280, 59, 99, 101, 108, 112, 10420, 10422, 10427, 10444, 10451, 32768, 8747, 97, 108, 59, 32768, 8890, 512, 103, 114, 10432, 10438, 101, 114, 115, 59, 32768, 8484, 99, 97, 108, 59, 32768, 8890, 97, 114, 104, 107, 59, 32768, 10775, 114, 111, 100, 59, 32768, 10812, 1024, 99, 103, 112, 116, 10466, 10470, 10475, 10480, 121, 59, 32768, 1105, 111, 110, 59, 32768, 303, 102, 59, 32896, 55349, 56666, 97, 59, 32768, 953, 114, 111, 100, 59, 32768, 10812, 117, 101, 115, 116, 33024, 191, 59, 32768, 191, 512, 99, 105, 10504, 10509, 114, 59, 32896, 55349, 56510, 110, 1280, 59, 69, 100, 115, 118, 10521, 10523, 10526, 10531, 10541, 32768, 8712, 59, 32768, 8953, 111, 116, 59, 32768, 8949, 512, 59, 118, 10536, 10538, 32768, 8948, 59, 32768, 8947, 59, 32768, 8712, 512, 59, 105, 10549, 10551, 32768, 8290, 108, 100, 101, 59, 32768, 297, 828, 10562, 0, 10567, 99, 121, 59, 32768, 1110, 108, 33024, 239, 59, 32768, 239, 1536, 99, 102, 109, 111, 115, 117, 10585, 10598, 10603, 10609, 10615, 10630, 512, 105, 121, 10590, 10595, 114, 99, 59, 32768, 309, 59, 32768, 1081, 114, 59, 32896, 55349, 56615, 97, 116, 104, 59, 32768, 567, 112, 102, 59, 32896, 55349, 56667, 820, 10620, 0, 10625, 114, 59, 32896, 55349, 56511, 114, 99, 121, 59, 32768, 1112, 107, 99, 121, 59, 32768, 1108, 2048, 97, 99, 102, 103, 104, 106, 111, 115, 10653, 10666, 10680, 10685, 10692, 10697, 10702, 10708, 112, 112, 97, 512, 59, 118, 10661, 10663, 32768, 954, 59, 32768, 1008, 512, 101, 121, 10671, 10677, 100, 105, 108, 59, 32768, 311, 59, 32768, 1082, 114, 59, 32896, 55349, 56616, 114, 101, 101, 110, 59, 32768, 312, 99, 121, 59, 32768, 1093, 99, 121, 59, 32768, 1116, 112, 102, 59, 32896, 55349, 56668, 99, 114, 59, 32896, 55349, 56512, 5888, 65, 66, 69, 72, 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 10761, 10783, 10789, 10799, 10804, 10957, 11011, 11047, 11094, 11349, 11372, 11382, 11409, 11414, 11451, 11478, 11526, 11698, 11711, 11755, 11823, 11910, 11929, 768, 97, 114, 116, 10768, 10773, 10777, 114, 114, 59, 32768, 8666, 114, 59, 32768, 8656, 97, 105, 108, 59, 32768, 10523, 97, 114, 114, 59, 32768, 10510, 512, 59, 103, 10794, 10796, 32768, 8806, 59, 32768, 10891, 97, 114, 59, 32768, 10594, 4660, 10824, 0, 10830, 0, 10838, 0, 0, 0, 0, 0, 10844, 10850, 0, 10867, 10870, 10877, 0, 10933, 117, 116, 101, 59, 32768, 314, 109, 112, 116, 121, 118, 59, 32768, 10676, 114, 97, 110, 59, 32768, 8466, 98, 100, 97, 59, 32768, 955, 103, 768, 59, 100, 108, 10857, 10859, 10862, 32768, 10216, 59, 32768, 10641, 101, 59, 32768, 10216, 59, 32768, 10885, 117, 111, 33024, 171, 59, 32768, 171, 114, 2048, 59, 98, 102, 104, 108, 112, 115, 116, 10894, 10896, 10907, 10911, 10915, 10919, 10923, 10928, 32768, 8592, 512, 59, 102, 10901, 10903, 32768, 8676, 115, 59, 32768, 10527, 115, 59, 32768, 10525, 107, 59, 32768, 8617, 112, 59, 32768, 8619, 108, 59, 32768, 10553, 105, 109, 59, 32768, 10611, 108, 59, 32768, 8610, 768, 59, 97, 101, 10939, 10941, 10946, 32768, 10923, 105, 108, 59, 32768, 10521, 512, 59, 115, 10951, 10953, 32768, 10925, 59, 32896, 10925, 65024, 768, 97, 98, 114, 10964, 10969, 10974, 114, 114, 59, 32768, 10508, 114, 107, 59, 32768, 10098, 512, 97, 107, 10979, 10991, 99, 512, 101, 107, 10985, 10988, 59, 32768, 123, 59, 32768, 91, 512, 101, 115, 10996, 10999, 59, 32768, 10635, 108, 512, 100, 117, 11005, 11008, 59, 32768, 10639, 59, 32768, 10637, 1024, 97, 101, 117, 121, 11020, 11026, 11040, 11044, 114, 111, 110, 59, 32768, 318, 512, 100, 105, 11031, 11036, 105, 108, 59, 32768, 316, 108, 59, 32768, 8968, 98, 59, 32768, 123, 59, 32768, 1083, 1024, 99, 113, 114, 115, 11056, 11060, 11072, 11090, 97, 59, 32768, 10550, 117, 111, 512, 59, 114, 11067, 11069, 32768, 8220, 59, 32768, 8222, 512, 100, 117, 11077, 11083, 104, 97, 114, 59, 32768, 10599, 115, 104, 97, 114, 59, 32768, 10571, 104, 59, 32768, 8626, 1280, 59, 102, 103, 113, 115, 11105, 11107, 11228, 11231, 11250, 32768, 8804, 116, 1280, 97, 104, 108, 114, 116, 11119, 11136, 11157, 11169, 11216, 114, 114, 111, 119, 512, 59, 116, 11128, 11130, 32768, 8592, 97, 105, 108, 59, 32768, 8610, 97, 114, 112, 111, 111, 110, 512, 100, 117, 11147, 11153, 111, 119, 110, 59, 32768, 8637, 112, 59, 32768, 8636, 101, 102, 116, 97, 114, 114, 111, 119, 115, 59, 32768, 8647, 105, 103, 104, 116, 768, 97, 104, 115, 11180, 11194, 11204, 114, 114, 111, 119, 512, 59, 115, 11189, 11191, 32768, 8596, 59, 32768, 8646, 97, 114, 112, 111, 111, 110, 115, 59, 32768, 8651, 113, 117, 105, 103, 97, 114, 114, 111, 119, 59, 32768, 8621, 104, 114, 101, 101, 116, 105, 109, 101, 115, 59, 32768, 8907, 59, 32768, 8922, 768, 59, 113, 115, 11238, 11240, 11243, 32768, 8804, 59, 32768, 8806, 108, 97, 110, 116, 59, 32768, 10877, 1280, 59, 99, 100, 103, 115, 11261, 11263, 11267, 11286, 11298, 32768, 10877, 99, 59, 32768, 10920, 111, 116, 512, 59, 111, 11274, 11276, 32768, 10879, 512, 59, 114, 11281, 11283, 32768, 10881, 59, 32768, 10883, 512, 59, 101, 11291, 11294, 32896, 8922, 65024, 115, 59, 32768, 10899, 1280, 97, 100, 101, 103, 115, 11309, 11317, 11322, 11339, 11344, 112, 112, 114, 111, 120, 59, 32768, 10885, 111, 116, 59, 32768, 8918, 113, 512, 103, 113, 11328, 11333, 116, 114, 59, 32768, 8922, 103, 116, 114, 59, 32768, 10891, 116, 114, 59, 32768, 8822, 105, 109, 59, 32768, 8818, 768, 105, 108, 114, 11356, 11362, 11368, 115, 104, 116, 59, 32768, 10620, 111, 111, 114, 59, 32768, 8970, 59, 32896, 55349, 56617, 512, 59, 69, 11377, 11379, 32768, 8822, 59, 32768, 10897, 562, 11386, 11405, 114, 512, 100, 117, 11391, 11394, 59, 32768, 8637, 512, 59, 108, 11399, 11401, 32768, 8636, 59, 32768, 10602, 108, 107, 59, 32768, 9604, 99, 121, 59, 32768, 1113, 1280, 59, 97, 99, 104, 116, 11425, 11427, 11432, 11440, 11446, 32768, 8810, 114, 114, 59, 32768, 8647, 111, 114, 110, 101, 114, 59, 32768, 8990, 97, 114, 100, 59, 32768, 10603, 114, 105, 59, 32768, 9722, 512, 105, 111, 11456, 11462, 100, 111, 116, 59, 32768, 320, 117, 115, 116, 512, 59, 97, 11470, 11472, 32768, 9136, 99, 104, 101, 59, 32768, 9136, 1024, 69, 97, 101, 115, 11487, 11490, 11504, 11521, 59, 32768, 8808, 112, 512, 59, 112, 11496, 11498, 32768, 10889, 114, 111, 120, 59, 32768, 10889, 512, 59, 113, 11509, 11511, 32768, 10887, 512, 59, 113, 11516, 11518, 32768, 10887, 59, 32768, 8808, 105, 109, 59, 32768, 8934, 2048, 97, 98, 110, 111, 112, 116, 119, 122, 11543, 11556, 11561, 11616, 11640, 11660, 11667, 11680, 512, 110, 114, 11548, 11552, 103, 59, 32768, 10220, 114, 59, 32768, 8701, 114, 107, 59, 32768, 10214, 103, 768, 108, 109, 114, 11569, 11596, 11604, 101, 102, 116, 512, 97, 114, 11577, 11584, 114, 114, 111, 119, 59, 32768, 10229, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10231, 97, 112, 115, 116, 111, 59, 32768, 10236, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 10230, 112, 97, 114, 114, 111, 119, 512, 108, 114, 11627, 11633, 101, 102, 116, 59, 32768, 8619, 105, 103, 104, 116, 59, 32768, 8620, 768, 97, 102, 108, 11647, 11651, 11655, 114, 59, 32768, 10629, 59, 32896, 55349, 56669, 117, 115, 59, 32768, 10797, 105, 109, 101, 115, 59, 32768, 10804, 562, 11671, 11676, 115, 116, 59, 32768, 8727, 97, 114, 59, 32768, 95, 768, 59, 101, 102, 11687, 11689, 11695, 32768, 9674, 110, 103, 101, 59, 32768, 9674, 59, 32768, 10731, 97, 114, 512, 59, 108, 11705, 11707, 32768, 40, 116, 59, 32768, 10643, 1280, 97, 99, 104, 109, 116, 11722, 11727, 11735, 11747, 11750, 114, 114, 59, 32768, 8646, 111, 114, 110, 101, 114, 59, 32768, 8991, 97, 114, 512, 59, 100, 11742, 11744, 32768, 8651, 59, 32768, 10605, 59, 32768, 8206, 114, 105, 59, 32768, 8895, 1536, 97, 99, 104, 105, 113, 116, 11768, 11774, 11779, 11782, 11798, 11817, 113, 117, 111, 59, 32768, 8249, 114, 59, 32896, 55349, 56513, 59, 32768, 8624, 109, 768, 59, 101, 103, 11790, 11792, 11795, 32768, 8818, 59, 32768, 10893, 59, 32768, 10895, 512, 98, 117, 11803, 11806, 59, 32768, 91, 111, 512, 59, 114, 11812, 11814, 32768, 8216, 59, 32768, 8218, 114, 111, 107, 59, 32768, 322, 34816, 60, 59, 99, 100, 104, 105, 108, 113, 114, 11841, 11843, 11855, 11860, 11866, 11872, 11878, 11885, 32768, 60, 512, 99, 105, 11848, 11851, 59, 32768, 10918, 114, 59, 32768, 10873, 111, 116, 59, 32768, 8918, 114, 101, 101, 59, 32768, 8907, 109, 101, 115, 59, 32768, 8905, 97, 114, 114, 59, 32768, 10614, 117, 101, 115, 116, 59, 32768, 10875, 512, 80, 105, 11890, 11895, 97, 114, 59, 32768, 10646, 768, 59, 101, 102, 11902, 11904, 11907, 32768, 9667, 59, 32768, 8884, 59, 32768, 9666, 114, 512, 100, 117, 11916, 11923, 115, 104, 97, 114, 59, 32768, 10570, 104, 97, 114, 59, 32768, 10598, 512, 101, 110, 11934, 11944, 114, 116, 110, 101, 113, 113, 59, 32896, 8808, 65024, 69, 59, 32896, 8808, 65024, 3584, 68, 97, 99, 100, 101, 102, 104, 105, 108, 110, 111, 112, 115, 117, 11978, 11984, 12061, 12075, 12081, 12095, 12100, 12104, 12170, 12181, 12188, 12204, 12207, 12223, 68, 111, 116, 59, 32768, 8762, 1024, 99, 108, 112, 114, 11993, 11999, 12019, 12055, 114, 33024, 175, 59, 32768, 175, 512, 101, 116, 12004, 12007, 59, 32768, 9794, 512, 59, 101, 12012, 12014, 32768, 10016, 115, 101, 59, 32768, 10016, 512, 59, 115, 12024, 12026, 32768, 8614, 116, 111, 1024, 59, 100, 108, 117, 12037, 12039, 12045, 12051, 32768, 8614, 111, 119, 110, 59, 32768, 8615, 101, 102, 116, 59, 32768, 8612, 112, 59, 32768, 8613, 107, 101, 114, 59, 32768, 9646, 512, 111, 121, 12066, 12072, 109, 109, 97, 59, 32768, 10793, 59, 32768, 1084, 97, 115, 104, 59, 32768, 8212, 97, 115, 117, 114, 101, 100, 97, 110, 103, 108, 101, 59, 32768, 8737, 114, 59, 32896, 55349, 56618, 111, 59, 32768, 8487, 768, 99, 100, 110, 12111, 12118, 12146, 114, 111, 33024, 181, 59, 32768, 181, 1024, 59, 97, 99, 100, 12127, 12129, 12134, 12139, 32768, 8739, 115, 116, 59, 32768, 42, 105, 114, 59, 32768, 10992, 111, 116, 33024, 183, 59, 32768, 183, 117, 115, 768, 59, 98, 100, 12155, 12157, 12160, 32768, 8722, 59, 32768, 8863, 512, 59, 117, 12165, 12167, 32768, 8760, 59, 32768, 10794, 564, 12174, 12178, 112, 59, 32768, 10971, 114, 59, 32768, 8230, 112, 108, 117, 115, 59, 32768, 8723, 512, 100, 112, 12193, 12199, 101, 108, 115, 59, 32768, 8871, 102, 59, 32896, 55349, 56670, 59, 32768, 8723, 512, 99, 116, 12212, 12217, 114, 59, 32896, 55349, 56514, 112, 111, 115, 59, 32768, 8766, 768, 59, 108, 109, 12230, 12232, 12240, 32768, 956, 116, 105, 109, 97, 112, 59, 32768, 8888, 97, 112, 59, 32768, 8888, 6144, 71, 76, 82, 86, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 12294, 12315, 12364, 12376, 12393, 12472, 12496, 12547, 12553, 12636, 12641, 12703, 12725, 12747, 12752, 12876, 12881, 12957, 13033, 13089, 13294, 13359, 13384, 13499, 512, 103, 116, 12299, 12303, 59, 32896, 8921, 824, 512, 59, 118, 12308, 12311, 32896, 8811, 8402, 59, 32896, 8811, 824, 768, 101, 108, 116, 12322, 12348, 12352, 102, 116, 512, 97, 114, 12329, 12336, 114, 114, 111, 119, 59, 32768, 8653, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8654, 59, 32896, 8920, 824, 512, 59, 118, 12357, 12360, 32896, 8810, 8402, 59, 32896, 8810, 824, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8655, 512, 68, 100, 12381, 12387, 97, 115, 104, 59, 32768, 8879, 97, 115, 104, 59, 32768, 8878, 1280, 98, 99, 110, 112, 116, 12404, 12409, 12415, 12420, 12452, 108, 97, 59, 32768, 8711, 117, 116, 101, 59, 32768, 324, 103, 59, 32896, 8736, 8402, 1280, 59, 69, 105, 111, 112, 12431, 12433, 12437, 12442, 12446, 32768, 8777, 59, 32896, 10864, 824, 100, 59, 32896, 8779, 824, 115, 59, 32768, 329, 114, 111, 120, 59, 32768, 8777, 117, 114, 512, 59, 97, 12459, 12461, 32768, 9838, 108, 512, 59, 115, 12467, 12469, 32768, 9838, 59, 32768, 8469, 836, 12477, 0, 12483, 112, 33024, 160, 59, 32768, 160, 109, 112, 512, 59, 101, 12489, 12492, 32896, 8782, 824, 59, 32896, 8783, 824, 1280, 97, 101, 111, 117, 121, 12507, 12519, 12525, 12540, 12544, 833, 12512, 0, 12515, 59, 32768, 10819, 111, 110, 59, 32768, 328, 100, 105, 108, 59, 32768, 326, 110, 103, 512, 59, 100, 12532, 12534, 32768, 8775, 111, 116, 59, 32896, 10861, 824, 112, 59, 32768, 10818, 59, 32768, 1085, 97, 115, 104, 59, 32768, 8211, 1792, 59, 65, 97, 100, 113, 115, 120, 12568, 12570, 12575, 12596, 12602, 12608, 12623, 32768, 8800, 114, 114, 59, 32768, 8663, 114, 512, 104, 114, 12581, 12585, 107, 59, 32768, 10532, 512, 59, 111, 12590, 12592, 32768, 8599, 119, 59, 32768, 8599, 111, 116, 59, 32896, 8784, 824, 117, 105, 118, 59, 32768, 8802, 512, 101, 105, 12613, 12618, 97, 114, 59, 32768, 10536, 109, 59, 32896, 8770, 824, 105, 115, 116, 512, 59, 115, 12631, 12633, 32768, 8708, 59, 32768, 8708, 114, 59, 32896, 55349, 56619, 1024, 69, 101, 115, 116, 12650, 12654, 12688, 12693, 59, 32896, 8807, 824, 768, 59, 113, 115, 12661, 12663, 12684, 32768, 8817, 768, 59, 113, 115, 12670, 12672, 12676, 32768, 8817, 59, 32896, 8807, 824, 108, 97, 110, 116, 59, 32896, 10878, 824, 59, 32896, 10878, 824, 105, 109, 59, 32768, 8821, 512, 59, 114, 12698, 12700, 32768, 8815, 59, 32768, 8815, 768, 65, 97, 112, 12710, 12715, 12720, 114, 114, 59, 32768, 8654, 114, 114, 59, 32768, 8622, 97, 114, 59, 32768, 10994, 768, 59, 115, 118, 12732, 12734, 12744, 32768, 8715, 512, 59, 100, 12739, 12741, 32768, 8956, 59, 32768, 8954, 59, 32768, 8715, 99, 121, 59, 32768, 1114, 1792, 65, 69, 97, 100, 101, 115, 116, 12767, 12772, 12776, 12781, 12785, 12853, 12858, 114, 114, 59, 32768, 8653, 59, 32896, 8806, 824, 114, 114, 59, 32768, 8602, 114, 59, 32768, 8229, 1024, 59, 102, 113, 115, 12794, 12796, 12821, 12842, 32768, 8816, 116, 512, 97, 114, 12802, 12809, 114, 114, 111, 119, 59, 32768, 8602, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8622, 768, 59, 113, 115, 12828, 12830, 12834, 32768, 8816, 59, 32896, 8806, 824, 108, 97, 110, 116, 59, 32896, 10877, 824, 512, 59, 115, 12847, 12850, 32896, 10877, 824, 59, 32768, 8814, 105, 109, 59, 32768, 8820, 512, 59, 114, 12863, 12865, 32768, 8814, 105, 512, 59, 101, 12871, 12873, 32768, 8938, 59, 32768, 8940, 105, 100, 59, 32768, 8740, 512, 112, 116, 12886, 12891, 102, 59, 32896, 55349, 56671, 33536, 172, 59, 105, 110, 12899, 12901, 12936, 32768, 172, 110, 1024, 59, 69, 100, 118, 12911, 12913, 12917, 12923, 32768, 8713, 59, 32896, 8953, 824, 111, 116, 59, 32896, 8949, 824, 818, 12928, 12931, 12934, 59, 32768, 8713, 59, 32768, 8951, 59, 32768, 8950, 105, 512, 59, 118, 12942, 12944, 32768, 8716, 818, 12949, 12952, 12955, 59, 32768, 8716, 59, 32768, 8958, 59, 32768, 8957, 768, 97, 111, 114, 12964, 12992, 12999, 114, 1024, 59, 97, 115, 116, 12974, 12976, 12983, 12988, 32768, 8742, 108, 108, 101, 108, 59, 32768, 8742, 108, 59, 32896, 11005, 8421, 59, 32896, 8706, 824, 108, 105, 110, 116, 59, 32768, 10772, 768, 59, 99, 101, 13006, 13008, 13013, 32768, 8832, 117, 101, 59, 32768, 8928, 512, 59, 99, 13018, 13021, 32896, 10927, 824, 512, 59, 101, 13026, 13028, 32768, 8832, 113, 59, 32896, 10927, 824, 1024, 65, 97, 105, 116, 13042, 13047, 13066, 13077, 114, 114, 59, 32768, 8655, 114, 114, 768, 59, 99, 119, 13056, 13058, 13062, 32768, 8603, 59, 32896, 10547, 824, 59, 32896, 8605, 824, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8603, 114, 105, 512, 59, 101, 13084, 13086, 32768, 8939, 59, 32768, 8941, 1792, 99, 104, 105, 109, 112, 113, 117, 13104, 13128, 13151, 13169, 13174, 13179, 13194, 1024, 59, 99, 101, 114, 13113, 13115, 13120, 13124, 32768, 8833, 117, 101, 59, 32768, 8929, 59, 32896, 10928, 824, 59, 32896, 55349, 56515, 111, 114, 116, 1086, 13137, 0, 0, 13142, 105, 100, 59, 32768, 8740, 97, 114, 97, 108, 108, 101, 108, 59, 32768, 8742, 109, 512, 59, 101, 13157, 13159, 32768, 8769, 512, 59, 113, 13164, 13166, 32768, 8772, 59, 32768, 8772, 105, 100, 59, 32768, 8740, 97, 114, 59, 32768, 8742, 115, 117, 512, 98, 112, 13186, 13190, 101, 59, 32768, 8930, 101, 59, 32768, 8931, 768, 98, 99, 112, 13201, 13241, 13254, 1024, 59, 69, 101, 115, 13210, 13212, 13216, 13219, 32768, 8836, 59, 32896, 10949, 824, 59, 32768, 8840, 101, 116, 512, 59, 101, 13226, 13229, 32896, 8834, 8402, 113, 512, 59, 113, 13235, 13237, 32768, 8840, 59, 32896, 10949, 824, 99, 512, 59, 101, 13247, 13249, 32768, 8833, 113, 59, 32896, 10928, 824, 1024, 59, 69, 101, 115, 13263, 13265, 13269, 13272, 32768, 8837, 59, 32896, 10950, 824, 59, 32768, 8841, 101, 116, 512, 59, 101, 13279, 13282, 32896, 8835, 8402, 113, 512, 59, 113, 13288, 13290, 32768, 8841, 59, 32896, 10950, 824, 1024, 103, 105, 108, 114, 13303, 13307, 13315, 13319, 108, 59, 32768, 8825, 108, 100, 101, 33024, 241, 59, 32768, 241, 103, 59, 32768, 8824, 105, 97, 110, 103, 108, 101, 512, 108, 114, 13330, 13344, 101, 102, 116, 512, 59, 101, 13338, 13340, 32768, 8938, 113, 59, 32768, 8940, 105, 103, 104, 116, 512, 59, 101, 13353, 13355, 32768, 8939, 113, 59, 32768, 8941, 512, 59, 109, 13364, 13366, 32768, 957, 768, 59, 101, 115, 13373, 13375, 13380, 32768, 35, 114, 111, 59, 32768, 8470, 112, 59, 32768, 8199, 2304, 68, 72, 97, 100, 103, 105, 108, 114, 115, 13403, 13409, 13415, 13420, 13426, 13439, 13446, 13476, 13493, 97, 115, 104, 59, 32768, 8877, 97, 114, 114, 59, 32768, 10500, 112, 59, 32896, 8781, 8402, 97, 115, 104, 59, 32768, 8876, 512, 101, 116, 13431, 13435, 59, 32896, 8805, 8402, 59, 32896, 62, 8402, 110, 102, 105, 110, 59, 32768, 10718, 768, 65, 101, 116, 13453, 13458, 13462, 114, 114, 59, 32768, 10498, 59, 32896, 8804, 8402, 512, 59, 114, 13467, 13470, 32896, 60, 8402, 105, 101, 59, 32896, 8884, 8402, 512, 65, 116, 13481, 13486, 114, 114, 59, 32768, 10499, 114, 105, 101, 59, 32896, 8885, 8402, 105, 109, 59, 32896, 8764, 8402, 768, 65, 97, 110, 13506, 13511, 13532, 114, 114, 59, 32768, 8662, 114, 512, 104, 114, 13517, 13521, 107, 59, 32768, 10531, 512, 59, 111, 13526, 13528, 32768, 8598, 119, 59, 32768, 8598, 101, 97, 114, 59, 32768, 10535, 9252, 13576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13579, 0, 13596, 13617, 13653, 13659, 13673, 13695, 13708, 0, 0, 13713, 13750, 0, 13788, 13794, 0, 13815, 13890, 13913, 13937, 13944, 59, 32768, 9416, 512, 99, 115, 13583, 13591, 117, 116, 101, 33024, 243, 59, 32768, 243, 116, 59, 32768, 8859, 512, 105, 121, 13600, 13613, 114, 512, 59, 99, 13606, 13608, 32768, 8858, 33024, 244, 59, 32768, 244, 59, 32768, 1086, 1280, 97, 98, 105, 111, 115, 13627, 13632, 13638, 13642, 13646, 115, 104, 59, 32768, 8861, 108, 97, 99, 59, 32768, 337, 118, 59, 32768, 10808, 116, 59, 32768, 8857, 111, 108, 100, 59, 32768, 10684, 108, 105, 103, 59, 32768, 339, 512, 99, 114, 13663, 13668, 105, 114, 59, 32768, 10687, 59, 32896, 55349, 56620, 1600, 13680, 0, 0, 13684, 0, 13692, 110, 59, 32768, 731, 97, 118, 101, 33024, 242, 59, 32768, 242, 59, 32768, 10689, 512, 98, 109, 13699, 13704, 97, 114, 59, 32768, 10677, 59, 32768, 937, 110, 116, 59, 32768, 8750, 1024, 97, 99, 105, 116, 13721, 13726, 13741, 13746, 114, 114, 59, 32768, 8634, 512, 105, 114, 13731, 13735, 114, 59, 32768, 10686, 111, 115, 115, 59, 32768, 10683, 110, 101, 59, 32768, 8254, 59, 32768, 10688, 768, 97, 101, 105, 13756, 13761, 13766, 99, 114, 59, 32768, 333, 103, 97, 59, 32768, 969, 768, 99, 100, 110, 13773, 13779, 13782, 114, 111, 110, 59, 32768, 959, 59, 32768, 10678, 117, 115, 59, 32768, 8854, 112, 102, 59, 32896, 55349, 56672, 768, 97, 101, 108, 13800, 13804, 13809, 114, 59, 32768, 10679, 114, 112, 59, 32768, 10681, 117, 115, 59, 32768, 8853, 1792, 59, 97, 100, 105, 111, 115, 118, 13829, 13831, 13836, 13869, 13875, 13879, 13886, 32768, 8744, 114, 114, 59, 32768, 8635, 1024, 59, 101, 102, 109, 13845, 13847, 13859, 13864, 32768, 10845, 114, 512, 59, 111, 13853, 13855, 32768, 8500, 102, 59, 32768, 8500, 33024, 170, 59, 32768, 170, 33024, 186, 59, 32768, 186, 103, 111, 102, 59, 32768, 8886, 114, 59, 32768, 10838, 108, 111, 112, 101, 59, 32768, 10839, 59, 32768, 10843, 768, 99, 108, 111, 13896, 13900, 13908, 114, 59, 32768, 8500, 97, 115, 104, 33024, 248, 59, 32768, 248, 108, 59, 32768, 8856, 105, 573, 13917, 13924, 100, 101, 33024, 245, 59, 32768, 245, 101, 115, 512, 59, 97, 13930, 13932, 32768, 8855, 115, 59, 32768, 10806, 109, 108, 33024, 246, 59, 32768, 246, 98, 97, 114, 59, 32768, 9021, 5426, 13972, 0, 14013, 0, 14017, 14053, 0, 14058, 14086, 0, 0, 14107, 14199, 0, 14202, 0, 0, 14229, 14425, 0, 14438, 114, 1024, 59, 97, 115, 116, 13981, 13983, 13997, 14009, 32768, 8741, 33280, 182, 59, 108, 13989, 13991, 32768, 182, 108, 101, 108, 59, 32768, 8741, 1082, 14003, 0, 0, 14007, 109, 59, 32768, 10995, 59, 32768, 11005, 59, 32768, 8706, 121, 59, 32768, 1087, 114, 1280, 99, 105, 109, 112, 116, 14028, 14033, 14038, 14043, 14046, 110, 116, 59, 32768, 37, 111, 100, 59, 32768, 46, 105, 108, 59, 32768, 8240, 59, 32768, 8869, 101, 110, 107, 59, 32768, 8241, 114, 59, 32896, 55349, 56621, 768, 105, 109, 111, 14064, 14074, 14080, 512, 59, 118, 14069, 14071, 32768, 966, 59, 32768, 981, 109, 97, 116, 59, 32768, 8499, 110, 101, 59, 32768, 9742, 768, 59, 116, 118, 14092, 14094, 14103, 32768, 960, 99, 104, 102, 111, 114, 107, 59, 32768, 8916, 59, 32768, 982, 512, 97, 117, 14111, 14132, 110, 512, 99, 107, 14117, 14128, 107, 512, 59, 104, 14123, 14125, 32768, 8463, 59, 32768, 8462, 118, 59, 32768, 8463, 115, 2304, 59, 97, 98, 99, 100, 101, 109, 115, 116, 14152, 14154, 14160, 14163, 14168, 14179, 14182, 14188, 14193, 32768, 43, 99, 105, 114, 59, 32768, 10787, 59, 32768, 8862, 105, 114, 59, 32768, 10786, 512, 111, 117, 14173, 14176, 59, 32768, 8724, 59, 32768, 10789, 59, 32768, 10866, 110, 33024, 177, 59, 32768, 177, 105, 109, 59, 32768, 10790, 119, 111, 59, 32768, 10791, 59, 32768, 177, 768, 105, 112, 117, 14208, 14216, 14221, 110, 116, 105, 110, 116, 59, 32768, 10773, 102, 59, 32896, 55349, 56673, 110, 100, 33024, 163, 59, 32768, 163, 2560, 59, 69, 97, 99, 101, 105, 110, 111, 115, 117, 14249, 14251, 14254, 14258, 14263, 14336, 14348, 14367, 14413, 14418, 32768, 8826, 59, 32768, 10931, 112, 59, 32768, 10935, 117, 101, 59, 32768, 8828, 512, 59, 99, 14268, 14270, 32768, 10927, 1536, 59, 97, 99, 101, 110, 115, 14283, 14285, 14293, 14302, 14306, 14331, 32768, 8826, 112, 112, 114, 111, 120, 59, 32768, 10935, 117, 114, 108, 121, 101, 113, 59, 32768, 8828, 113, 59, 32768, 10927, 768, 97, 101, 115, 14313, 14321, 14326, 112, 112, 114, 111, 120, 59, 32768, 10937, 113, 113, 59, 32768, 10933, 105, 109, 59, 32768, 8936, 105, 109, 59, 32768, 8830, 109, 101, 512, 59, 115, 14343, 14345, 32768, 8242, 59, 32768, 8473, 768, 69, 97, 115, 14355, 14358, 14362, 59, 32768, 10933, 112, 59, 32768, 10937, 105, 109, 59, 32768, 8936, 768, 100, 102, 112, 14374, 14377, 14402, 59, 32768, 8719, 768, 97, 108, 115, 14384, 14390, 14396, 108, 97, 114, 59, 32768, 9006, 105, 110, 101, 59, 32768, 8978, 117, 114, 102, 59, 32768, 8979, 512, 59, 116, 14407, 14409, 32768, 8733, 111, 59, 32768, 8733, 105, 109, 59, 32768, 8830, 114, 101, 108, 59, 32768, 8880, 512, 99, 105, 14429, 14434, 114, 59, 32896, 55349, 56517, 59, 32768, 968, 110, 99, 115, 112, 59, 32768, 8200, 1536, 102, 105, 111, 112, 115, 117, 14457, 14462, 14467, 14473, 14480, 14486, 114, 59, 32896, 55349, 56622, 110, 116, 59, 32768, 10764, 112, 102, 59, 32896, 55349, 56674, 114, 105, 109, 101, 59, 32768, 8279, 99, 114, 59, 32896, 55349, 56518, 768, 97, 101, 111, 14493, 14513, 14526, 116, 512, 101, 105, 14499, 14508, 114, 110, 105, 111, 110, 115, 59, 32768, 8461, 110, 116, 59, 32768, 10774, 115, 116, 512, 59, 101, 14520, 14522, 32768, 63, 113, 59, 32768, 8799, 116, 33024, 34, 59, 32768, 34, 5376, 65, 66, 72, 97, 98, 99, 100, 101, 102, 104, 105, 108, 109, 110, 111, 112, 114, 115, 116, 117, 120, 14575, 14597, 14603, 14608, 14775, 14829, 14865, 14901, 14943, 14966, 15000, 15139, 15159, 15176, 15182, 15236, 15261, 15267, 15309, 15352, 15360, 768, 97, 114, 116, 14582, 14587, 14591, 114, 114, 59, 32768, 8667, 114, 59, 32768, 8658, 97, 105, 108, 59, 32768, 10524, 97, 114, 114, 59, 32768, 10511, 97, 114, 59, 32768, 10596, 1792, 99, 100, 101, 110, 113, 114, 116, 14623, 14637, 14642, 14650, 14672, 14679, 14751, 512, 101, 117, 14628, 14632, 59, 32896, 8765, 817, 116, 101, 59, 32768, 341, 105, 99, 59, 32768, 8730, 109, 112, 116, 121, 118, 59, 32768, 10675, 103, 1024, 59, 100, 101, 108, 14660, 14662, 14665, 14668, 32768, 10217, 59, 32768, 10642, 59, 32768, 10661, 101, 59, 32768, 10217, 117, 111, 33024, 187, 59, 32768, 187, 114, 2816, 59, 97, 98, 99, 102, 104, 108, 112, 115, 116, 119, 14703, 14705, 14709, 14720, 14723, 14727, 14731, 14735, 14739, 14744, 14748, 32768, 8594, 112, 59, 32768, 10613, 512, 59, 102, 14714, 14716, 32768, 8677, 115, 59, 32768, 10528, 59, 32768, 10547, 115, 59, 32768, 10526, 107, 59, 32768, 8618, 112, 59, 32768, 8620, 108, 59, 32768, 10565, 105, 109, 59, 32768, 10612, 108, 59, 32768, 8611, 59, 32768, 8605, 512, 97, 105, 14756, 14761, 105, 108, 59, 32768, 10522, 111, 512, 59, 110, 14767, 14769, 32768, 8758, 97, 108, 115, 59, 32768, 8474, 768, 97, 98, 114, 14782, 14787, 14792, 114, 114, 59, 32768, 10509, 114, 107, 59, 32768, 10099, 512, 97, 107, 14797, 14809, 99, 512, 101, 107, 14803, 14806, 59, 32768, 125, 59, 32768, 93, 512, 101, 115, 14814, 14817, 59, 32768, 10636, 108, 512, 100, 117, 14823, 14826, 59, 32768, 10638, 59, 32768, 10640, 1024, 97, 101, 117, 121, 14838, 14844, 14858, 14862, 114, 111, 110, 59, 32768, 345, 512, 100, 105, 14849, 14854, 105, 108, 59, 32768, 343, 108, 59, 32768, 8969, 98, 59, 32768, 125, 59, 32768, 1088, 1024, 99, 108, 113, 115, 14874, 14878, 14885, 14897, 97, 59, 32768, 10551, 100, 104, 97, 114, 59, 32768, 10601, 117, 111, 512, 59, 114, 14892, 14894, 32768, 8221, 59, 32768, 8221, 104, 59, 32768, 8627, 768, 97, 99, 103, 14908, 14934, 14938, 108, 1024, 59, 105, 112, 115, 14918, 14920, 14925, 14931, 32768, 8476, 110, 101, 59, 32768, 8475, 97, 114, 116, 59, 32768, 8476, 59, 32768, 8477, 116, 59, 32768, 9645, 33024, 174, 59, 32768, 174, 768, 105, 108, 114, 14950, 14956, 14962, 115, 104, 116, 59, 32768, 10621, 111, 111, 114, 59, 32768, 8971, 59, 32896, 55349, 56623, 512, 97, 111, 14971, 14990, 114, 512, 100, 117, 14977, 14980, 59, 32768, 8641, 512, 59, 108, 14985, 14987, 32768, 8640, 59, 32768, 10604, 512, 59, 118, 14995, 14997, 32768, 961, 59, 32768, 1009, 768, 103, 110, 115, 15007, 15123, 15127, 104, 116, 1536, 97, 104, 108, 114, 115, 116, 15022, 15039, 15060, 15086, 15099, 15111, 114, 114, 111, 119, 512, 59, 116, 15031, 15033, 32768, 8594, 97, 105, 108, 59, 32768, 8611, 97, 114, 112, 111, 111, 110, 512, 100, 117, 15050, 15056, 111, 119, 110, 59, 32768, 8641, 112, 59, 32768, 8640, 101, 102, 116, 512, 97, 104, 15068, 15076, 114, 114, 111, 119, 115, 59, 32768, 8644, 97, 114, 112, 111, 111, 110, 115, 59, 32768, 8652, 105, 103, 104, 116, 97, 114, 114, 111, 119, 115, 59, 32768, 8649, 113, 117, 105, 103, 97, 114, 114, 111, 119, 59, 32768, 8605, 104, 114, 101, 101, 116, 105, 109, 101, 115, 59, 32768, 8908, 103, 59, 32768, 730, 105, 110, 103, 100, 111, 116, 115, 101, 113, 59, 32768, 8787, 768, 97, 104, 109, 15146, 15151, 15156, 114, 114, 59, 32768, 8644, 97, 114, 59, 32768, 8652, 59, 32768, 8207, 111, 117, 115, 116, 512, 59, 97, 15168, 15170, 32768, 9137, 99, 104, 101, 59, 32768, 9137, 109, 105, 100, 59, 32768, 10990, 1024, 97, 98, 112, 116, 15191, 15204, 15209, 15229, 512, 110, 114, 15196, 15200, 103, 59, 32768, 10221, 114, 59, 32768, 8702, 114, 107, 59, 32768, 10215, 768, 97, 102, 108, 15216, 15220, 15224, 114, 59, 32768, 10630, 59, 32896, 55349, 56675, 117, 115, 59, 32768, 10798, 105, 109, 101, 115, 59, 32768, 10805, 512, 97, 112, 15241, 15253, 114, 512, 59, 103, 15247, 15249, 32768, 41, 116, 59, 32768, 10644, 111, 108, 105, 110, 116, 59, 32768, 10770, 97, 114, 114, 59, 32768, 8649, 1024, 97, 99, 104, 113, 15276, 15282, 15287, 15290, 113, 117, 111, 59, 32768, 8250, 114, 59, 32896, 55349, 56519, 59, 32768, 8625, 512, 98, 117, 15295, 15298, 59, 32768, 93, 111, 512, 59, 114, 15304, 15306, 32768, 8217, 59, 32768, 8217, 768, 104, 105, 114, 15316, 15322, 15328, 114, 101, 101, 59, 32768, 8908, 109, 101, 115, 59, 32768, 8906, 105, 1024, 59, 101, 102, 108, 15338, 15340, 15343, 15346, 32768, 9657, 59, 32768, 8885, 59, 32768, 9656, 116, 114, 105, 59, 32768, 10702, 108, 117, 104, 97, 114, 59, 32768, 10600, 59, 32768, 8478, 6706, 15391, 15398, 15404, 15499, 15516, 15592, 0, 15606, 15660, 0, 0, 15752, 15758, 0, 15827, 15863, 15886, 16000, 16006, 16038, 16086, 0, 16467, 0, 0, 16506, 99, 117, 116, 101, 59, 32768, 347, 113, 117, 111, 59, 32768, 8218, 2560, 59, 69, 97, 99, 101, 105, 110, 112, 115, 121, 15424, 15426, 15429, 15441, 15446, 15458, 15463, 15482, 15490, 15495, 32768, 8827, 59, 32768, 10932, 833, 15434, 0, 15437, 59, 32768, 10936, 111, 110, 59, 32768, 353, 117, 101, 59, 32768, 8829, 512, 59, 100, 15451, 15453, 32768, 10928, 105, 108, 59, 32768, 351, 114, 99, 59, 32768, 349, 768, 69, 97, 115, 15470, 15473, 15477, 59, 32768, 10934, 112, 59, 32768, 10938, 105, 109, 59, 32768, 8937, 111, 108, 105, 110, 116, 59, 32768, 10771, 105, 109, 59, 32768, 8831, 59, 32768, 1089, 111, 116, 768, 59, 98, 101, 15507, 15509, 15512, 32768, 8901, 59, 32768, 8865, 59, 32768, 10854, 1792, 65, 97, 99, 109, 115, 116, 120, 15530, 15535, 15556, 15562, 15566, 15572, 15587, 114, 114, 59, 32768, 8664, 114, 512, 104, 114, 15541, 15545, 107, 59, 32768, 10533, 512, 59, 111, 15550, 15552, 32768, 8600, 119, 59, 32768, 8600, 116, 33024, 167, 59, 32768, 167, 105, 59, 32768, 59, 119, 97, 114, 59, 32768, 10537, 109, 512, 105, 110, 15578, 15584, 110, 117, 115, 59, 32768, 8726, 59, 32768, 8726, 116, 59, 32768, 10038, 114, 512, 59, 111, 15597, 15600, 32896, 55349, 56624, 119, 110, 59, 32768, 8994, 1024, 97, 99, 111, 121, 15614, 15619, 15632, 15654, 114, 112, 59, 32768, 9839, 512, 104, 121, 15624, 15629, 99, 121, 59, 32768, 1097, 59, 32768, 1096, 114, 116, 1086, 15640, 0, 0, 15645, 105, 100, 59, 32768, 8739, 97, 114, 97, 108, 108, 101, 108, 59, 32768, 8741, 33024, 173, 59, 32768, 173, 512, 103, 109, 15664, 15681, 109, 97, 768, 59, 102, 118, 15673, 15675, 15678, 32768, 963, 59, 32768, 962, 59, 32768, 962, 2048, 59, 100, 101, 103, 108, 110, 112, 114, 15698, 15700, 15705, 15715, 15725, 15735, 15739, 15745, 32768, 8764, 111, 116, 59, 32768, 10858, 512, 59, 113, 15710, 15712, 32768, 8771, 59, 32768, 8771, 512, 59, 69, 15720, 15722, 32768, 10910, 59, 32768, 10912, 512, 59, 69, 15730, 15732, 32768, 10909, 59, 32768, 10911, 101, 59, 32768, 8774, 108, 117, 115, 59, 32768, 10788, 97, 114, 114, 59, 32768, 10610, 97, 114, 114, 59, 32768, 8592, 1024, 97, 101, 105, 116, 15766, 15788, 15796, 15808, 512, 108, 115, 15771, 15783, 108, 115, 101, 116, 109, 105, 110, 117, 115, 59, 32768, 8726, 104, 112, 59, 32768, 10803, 112, 97, 114, 115, 108, 59, 32768, 10724, 512, 100, 108, 15801, 15804, 59, 32768, 8739, 101, 59, 32768, 8995, 512, 59, 101, 15813, 15815, 32768, 10922, 512, 59, 115, 15820, 15822, 32768, 10924, 59, 32896, 10924, 65024, 768, 102, 108, 112, 15833, 15839, 15857, 116, 99, 121, 59, 32768, 1100, 512, 59, 98, 15844, 15846, 32768, 47, 512, 59, 97, 15851, 15853, 32768, 10692, 114, 59, 32768, 9023, 102, 59, 32896, 55349, 56676, 97, 512, 100, 114, 15868, 15882, 101, 115, 512, 59, 117, 15875, 15877, 32768, 9824, 105, 116, 59, 32768, 9824, 59, 32768, 8741, 768, 99, 115, 117, 15892, 15921, 15977, 512, 97, 117, 15897, 15909, 112, 512, 59, 115, 15903, 15905, 32768, 8851, 59, 32896, 8851, 65024, 112, 512, 59, 115, 15915, 15917, 32768, 8852, 59, 32896, 8852, 65024, 117, 512, 98, 112, 15927, 15952, 768, 59, 101, 115, 15934, 15936, 15939, 32768, 8847, 59, 32768, 8849, 101, 116, 512, 59, 101, 15946, 15948, 32768, 8847, 113, 59, 32768, 8849, 768, 59, 101, 115, 15959, 15961, 15964, 32768, 8848, 59, 32768, 8850, 101, 116, 512, 59, 101, 15971, 15973, 32768, 8848, 113, 59, 32768, 8850, 768, 59, 97, 102, 15984, 15986, 15996, 32768, 9633, 114, 566, 15991, 15994, 59, 32768, 9633, 59, 32768, 9642, 59, 32768, 9642, 97, 114, 114, 59, 32768, 8594, 1024, 99, 101, 109, 116, 16014, 16019, 16025, 16031, 114, 59, 32896, 55349, 56520, 116, 109, 110, 59, 32768, 8726, 105, 108, 101, 59, 32768, 8995, 97, 114, 102, 59, 32768, 8902, 512, 97, 114, 16042, 16053, 114, 512, 59, 102, 16048, 16050, 32768, 9734, 59, 32768, 9733, 512, 97, 110, 16058, 16081, 105, 103, 104, 116, 512, 101, 112, 16067, 16076, 112, 115, 105, 108, 111, 110, 59, 32768, 1013, 104, 105, 59, 32768, 981, 115, 59, 32768, 175, 1280, 98, 99, 109, 110, 112, 16096, 16221, 16288, 16291, 16295, 2304, 59, 69, 100, 101, 109, 110, 112, 114, 115, 16115, 16117, 16120, 16125, 16137, 16143, 16154, 16160, 16166, 32768, 8834, 59, 32768, 10949, 111, 116, 59, 32768, 10941, 512, 59, 100, 16130, 16132, 32768, 8838, 111, 116, 59, 32768, 10947, 117, 108, 116, 59, 32768, 10945, 512, 69, 101, 16148, 16151, 59, 32768, 10955, 59, 32768, 8842, 108, 117, 115, 59, 32768, 10943, 97, 114, 114, 59, 32768, 10617, 768, 101, 105, 117, 16173, 16206, 16210, 116, 768, 59, 101, 110, 16181, 16183, 16194, 32768, 8834, 113, 512, 59, 113, 16189, 16191, 32768, 8838, 59, 32768, 10949, 101, 113, 512, 59, 113, 16201, 16203, 32768, 8842, 59, 32768, 10955, 109, 59, 32768, 10951, 512, 98, 112, 16215, 16218, 59, 32768, 10965, 59, 32768, 10963, 99, 1536, 59, 97, 99, 101, 110, 115, 16235, 16237, 16245, 16254, 16258, 16283, 32768, 8827, 112, 112, 114, 111, 120, 59, 32768, 10936, 117, 114, 108, 121, 101, 113, 59, 32768, 8829, 113, 59, 32768, 10928, 768, 97, 101, 115, 16265, 16273, 16278, 112, 112, 114, 111, 120, 59, 32768, 10938, 113, 113, 59, 32768, 10934, 105, 109, 59, 32768, 8937, 105, 109, 59, 32768, 8831, 59, 32768, 8721, 103, 59, 32768, 9834, 3328, 49, 50, 51, 59, 69, 100, 101, 104, 108, 109, 110, 112, 115, 16322, 16327, 16332, 16337, 16339, 16342, 16356, 16368, 16382, 16388, 16394, 16405, 16411, 33024, 185, 59, 32768, 185, 33024, 178, 59, 32768, 178, 33024, 179, 59, 32768, 179, 32768, 8835, 59, 32768, 10950, 512, 111, 115, 16347, 16351, 116, 59, 32768, 10942, 117, 98, 59, 32768, 10968, 512, 59, 100, 16361, 16363, 32768, 8839, 111, 116, 59, 32768, 10948, 115, 512, 111, 117, 16374, 16378, 108, 59, 32768, 10185, 98, 59, 32768, 10967, 97, 114, 114, 59, 32768, 10619, 117, 108, 116, 59, 32768, 10946, 512, 69, 101, 16399, 16402, 59, 32768, 10956, 59, 32768, 8843, 108, 117, 115, 59, 32768, 10944, 768, 101, 105, 117, 16418, 16451, 16455, 116, 768, 59, 101, 110, 16426, 16428, 16439, 32768, 8835, 113, 512, 59, 113, 16434, 16436, 32768, 8839, 59, 32768, 10950, 101, 113, 512, 59, 113, 16446, 16448, 32768, 8843, 59, 32768, 10956, 109, 59, 32768, 10952, 512, 98, 112, 16460, 16463, 59, 32768, 10964, 59, 32768, 10966, 768, 65, 97, 110, 16473, 16478, 16499, 114, 114, 59, 32768, 8665, 114, 512, 104, 114, 16484, 16488, 107, 59, 32768, 10534, 512, 59, 111, 16493, 16495, 32768, 8601, 119, 59, 32768, 8601, 119, 97, 114, 59, 32768, 10538, 108, 105, 103, 33024, 223, 59, 32768, 223, 5938, 16538, 16552, 16557, 16579, 16584, 16591, 0, 16596, 16692, 0, 0, 0, 0, 0, 16731, 16780, 0, 16787, 16908, 0, 0, 0, 16938, 1091, 16543, 0, 0, 16549, 103, 101, 116, 59, 32768, 8982, 59, 32768, 964, 114, 107, 59, 32768, 9140, 768, 97, 101, 121, 16563, 16569, 16575, 114, 111, 110, 59, 32768, 357, 100, 105, 108, 59, 32768, 355, 59, 32768, 1090, 111, 116, 59, 32768, 8411, 108, 114, 101, 99, 59, 32768, 8981, 114, 59, 32896, 55349, 56625, 1024, 101, 105, 107, 111, 16604, 16641, 16670, 16684, 835, 16609, 0, 16624, 101, 512, 52, 102, 16614, 16617, 59, 32768, 8756, 111, 114, 101, 59, 32768, 8756, 97, 768, 59, 115, 118, 16631, 16633, 16638, 32768, 952, 121, 109, 59, 32768, 977, 59, 32768, 977, 512, 99, 110, 16646, 16665, 107, 512, 97, 115, 16652, 16660, 112, 112, 114, 111, 120, 59, 32768, 8776, 105, 109, 59, 32768, 8764, 115, 112, 59, 32768, 8201, 512, 97, 115, 16675, 16679, 112, 59, 32768, 8776, 105, 109, 59, 32768, 8764, 114, 110, 33024, 254, 59, 32768, 254, 829, 16696, 16701, 16727, 100, 101, 59, 32768, 732, 101, 115, 33536, 215, 59, 98, 100, 16710, 16712, 16723, 32768, 215, 512, 59, 97, 16717, 16719, 32768, 8864, 114, 59, 32768, 10801, 59, 32768, 10800, 116, 59, 32768, 8749, 768, 101, 112, 115, 16737, 16741, 16775, 97, 59, 32768, 10536, 1024, 59, 98, 99, 102, 16750, 16752, 16757, 16762, 32768, 8868, 111, 116, 59, 32768, 9014, 105, 114, 59, 32768, 10993, 512, 59, 111, 16767, 16770, 32896, 55349, 56677, 114, 107, 59, 32768, 10970, 97, 59, 32768, 10537, 114, 105, 109, 101, 59, 32768, 8244, 768, 97, 105, 112, 16793, 16798, 16899, 100, 101, 59, 32768, 8482, 1792, 97, 100, 101, 109, 112, 115, 116, 16813, 16868, 16873, 16876, 16883, 16889, 16893, 110, 103, 108, 101, 1280, 59, 100, 108, 113, 114, 16828, 16830, 16836, 16850, 16853, 32768, 9653, 111, 119, 110, 59, 32768, 9663, 101, 102, 116, 512, 59, 101, 16844, 16846, 32768, 9667, 113, 59, 32768, 8884, 59, 32768, 8796, 105, 103, 104, 116, 512, 59, 101, 16862, 16864, 32768, 9657, 113, 59, 32768, 8885, 111, 116, 59, 32768, 9708, 59, 32768, 8796, 105, 110, 117, 115, 59, 32768, 10810, 108, 117, 115, 59, 32768, 10809, 98, 59, 32768, 10701, 105, 109, 101, 59, 32768, 10811, 101, 122, 105, 117, 109, 59, 32768, 9186, 768, 99, 104, 116, 16914, 16926, 16931, 512, 114, 121, 16919, 16923, 59, 32896, 55349, 56521, 59, 32768, 1094, 99, 121, 59, 32768, 1115, 114, 111, 107, 59, 32768, 359, 512, 105, 111, 16942, 16947, 120, 116, 59, 32768, 8812, 104, 101, 97, 100, 512, 108, 114, 16956, 16967, 101, 102, 116, 97, 114, 114, 111, 119, 59, 32768, 8606, 105, 103, 104, 116, 97, 114, 114, 111, 119, 59, 32768, 8608, 4608, 65, 72, 97, 98, 99, 100, 102, 103, 104, 108, 109, 111, 112, 114, 115, 116, 117, 119, 17016, 17021, 17026, 17043, 17057, 17072, 17095, 17110, 17119, 17139, 17172, 17187, 17202, 17290, 17330, 17336, 17365, 17381, 114, 114, 59, 32768, 8657, 97, 114, 59, 32768, 10595, 512, 99, 114, 17031, 17039, 117, 116, 101, 33024, 250, 59, 32768, 250, 114, 59, 32768, 8593, 114, 820, 17049, 0, 17053, 121, 59, 32768, 1118, 118, 101, 59, 32768, 365, 512, 105, 121, 17062, 17069, 114, 99, 33024, 251, 59, 32768, 251, 59, 32768, 1091, 768, 97, 98, 104, 17079, 17084, 17090, 114, 114, 59, 32768, 8645, 108, 97, 99, 59, 32768, 369, 97, 114, 59, 32768, 10606, 512, 105, 114, 17100, 17106, 115, 104, 116, 59, 32768, 10622, 59, 32896, 55349, 56626, 114, 97, 118, 101, 33024, 249, 59, 32768, 249, 562, 17123, 17135, 114, 512, 108, 114, 17128, 17131, 59, 32768, 8639, 59, 32768, 8638, 108, 107, 59, 32768, 9600, 512, 99, 116, 17144, 17167, 1088, 17150, 0, 0, 17163, 114, 110, 512, 59, 101, 17156, 17158, 32768, 8988, 114, 59, 32768, 8988, 111, 112, 59, 32768, 8975, 114, 105, 59, 32768, 9720, 512, 97, 108, 17177, 17182, 99, 114, 59, 32768, 363, 33024, 168, 59, 32768, 168, 512, 103, 112, 17192, 17197, 111, 110, 59, 32768, 371, 102, 59, 32896, 55349, 56678, 1536, 97, 100, 104, 108, 115, 117, 17215, 17222, 17233, 17257, 17262, 17280, 114, 114, 111, 119, 59, 32768, 8593, 111, 119, 110, 97, 114, 114, 111, 119, 59, 32768, 8597, 97, 114, 112, 111, 111, 110, 512, 108, 114, 17244, 17250, 101, 102, 116, 59, 32768, 8639, 105, 103, 104, 116, 59, 32768, 8638, 117, 115, 59, 32768, 8846, 105, 768, 59, 104, 108, 17270, 17272, 17275, 32768, 965, 59, 32768, 978, 111, 110, 59, 32768, 965, 112, 97, 114, 114, 111, 119, 115, 59, 32768, 8648, 768, 99, 105, 116, 17297, 17320, 17325, 1088, 17303, 0, 0, 17316, 114, 110, 512, 59, 101, 17309, 17311, 32768, 8989, 114, 59, 32768, 8989, 111, 112, 59, 32768, 8974, 110, 103, 59, 32768, 367, 114, 105, 59, 32768, 9721, 99, 114, 59, 32896, 55349, 56522, 768, 100, 105, 114, 17343, 17348, 17354, 111, 116, 59, 32768, 8944, 108, 100, 101, 59, 32768, 361, 105, 512, 59, 102, 17360, 17362, 32768, 9653, 59, 32768, 9652, 512, 97, 109, 17370, 17375, 114, 114, 59, 32768, 8648, 108, 33024, 252, 59, 32768, 252, 97, 110, 103, 108, 101, 59, 32768, 10663, 3840, 65, 66, 68, 97, 99, 100, 101, 102, 108, 110, 111, 112, 114, 115, 122, 17420, 17425, 17437, 17443, 17613, 17617, 17623, 17667, 17672, 17678, 17693, 17699, 17705, 17711, 17754, 114, 114, 59, 32768, 8661, 97, 114, 512, 59, 118, 17432, 17434, 32768, 10984, 59, 32768, 10985, 97, 115, 104, 59, 32768, 8872, 512, 110, 114, 17448, 17454, 103, 114, 116, 59, 32768, 10652, 1792, 101, 107, 110, 112, 114, 115, 116, 17469, 17478, 17485, 17494, 17515, 17526, 17578, 112, 115, 105, 108, 111, 110, 59, 32768, 1013, 97, 112, 112, 97, 59, 32768, 1008, 111, 116, 104, 105, 110, 103, 59, 32768, 8709, 768, 104, 105, 114, 17501, 17505, 17508, 105, 59, 32768, 981, 59, 32768, 982, 111, 112, 116, 111, 59, 32768, 8733, 512, 59, 104, 17520, 17522, 32768, 8597, 111, 59, 32768, 1009, 512, 105, 117, 17531, 17537, 103, 109, 97, 59, 32768, 962, 512, 98, 112, 17542, 17560, 115, 101, 116, 110, 101, 113, 512, 59, 113, 17553, 17556, 32896, 8842, 65024, 59, 32896, 10955, 65024, 115, 101, 116, 110, 101, 113, 512, 59, 113, 17571, 17574, 32896, 8843, 65024, 59, 32896, 10956, 65024, 512, 104, 114, 17583, 17589, 101, 116, 97, 59, 32768, 977, 105, 97, 110, 103, 108, 101, 512, 108, 114, 17600, 17606, 101, 102, 116, 59, 32768, 8882, 105, 103, 104, 116, 59, 32768, 8883, 121, 59, 32768, 1074, 97, 115, 104, 59, 32768, 8866, 768, 101, 108, 114, 17630, 17648, 17654, 768, 59, 98, 101, 17637, 17639, 17644, 32768, 8744, 97, 114, 59, 32768, 8891, 113, 59, 32768, 8794, 108, 105, 112, 59, 32768, 8942, 512, 98, 116, 17659, 17664, 97, 114, 59, 32768, 124, 59, 32768, 124, 114, 59, 32896, 55349, 56627, 116, 114, 105, 59, 32768, 8882, 115, 117, 512, 98, 112, 17685, 17689, 59, 32896, 8834, 8402, 59, 32896, 8835, 8402, 112, 102, 59, 32896, 55349, 56679, 114, 111, 112, 59, 32768, 8733, 116, 114, 105, 59, 32768, 8883, 512, 99, 117, 17716, 17721, 114, 59, 32896, 55349, 56523, 512, 98, 112, 17726, 17740, 110, 512, 69, 101, 17732, 17736, 59, 32896, 10955, 65024, 59, 32896, 8842, 65024, 110, 512, 69, 101, 17746, 17750, 59, 32896, 10956, 65024, 59, 32896, 8843, 65024, 105, 103, 122, 97, 103, 59, 32768, 10650, 1792, 99, 101, 102, 111, 112, 114, 115, 17777, 17783, 17815, 17820, 17826, 17829, 17842, 105, 114, 99, 59, 32768, 373, 512, 100, 105, 17788, 17809, 512, 98, 103, 17793, 17798, 97, 114, 59, 32768, 10847, 101, 512, 59, 113, 17804, 17806, 32768, 8743, 59, 32768, 8793, 101, 114, 112, 59, 32768, 8472, 114, 59, 32896, 55349, 56628, 112, 102, 59, 32896, 55349, 56680, 59, 32768, 8472, 512, 59, 101, 17834, 17836, 32768, 8768, 97, 116, 104, 59, 32768, 8768, 99, 114, 59, 32896, 55349, 56524, 5428, 17871, 17891, 0, 17897, 0, 17902, 17917, 0, 0, 17920, 17935, 17940, 17945, 0, 0, 17977, 17992, 0, 18008, 18024, 18029, 768, 97, 105, 117, 17877, 17881, 17886, 112, 59, 32768, 8898, 114, 99, 59, 32768, 9711, 112, 59, 32768, 8899, 116, 114, 105, 59, 32768, 9661, 114, 59, 32896, 55349, 56629, 512, 65, 97, 17906, 17911, 114, 114, 59, 32768, 10234, 114, 114, 59, 32768, 10231, 59, 32768, 958, 512, 65, 97, 17924, 17929, 114, 114, 59, 32768, 10232, 114, 114, 59, 32768, 10229, 97, 112, 59, 32768, 10236, 105, 115, 59, 32768, 8955, 768, 100, 112, 116, 17951, 17956, 17970, 111, 116, 59, 32768, 10752, 512, 102, 108, 17961, 17965, 59, 32896, 55349, 56681, 117, 115, 59, 32768, 10753, 105, 109, 101, 59, 32768, 10754, 512, 65, 97, 17981, 17986, 114, 114, 59, 32768, 10233, 114, 114, 59, 32768, 10230, 512, 99, 113, 17996, 18001, 114, 59, 32896, 55349, 56525, 99, 117, 112, 59, 32768, 10758, 512, 112, 116, 18012, 18018, 108, 117, 115, 59, 32768, 10756, 114, 105, 59, 32768, 9651, 101, 101, 59, 32768, 8897, 101, 100, 103, 101, 59, 32768, 8896, 2048, 97, 99, 101, 102, 105, 111, 115, 117, 18052, 18068, 18081, 18087, 18092, 18097, 18103, 18109, 99, 512, 117, 121, 18058, 18065, 116, 101, 33024, 253, 59, 32768, 253, 59, 32768, 1103, 512, 105, 121, 18073, 18078, 114, 99, 59, 32768, 375, 59, 32768, 1099, 110, 33024, 165, 59, 32768, 165, 114, 59, 32896, 55349, 56630, 99, 121, 59, 32768, 1111, 112, 102, 59, 32896, 55349, 56682, 99, 114, 59, 32896, 55349, 56526, 512, 99, 109, 18114, 18118, 121, 59, 32768, 1102, 108, 33024, 255, 59, 32768, 255, 2560, 97, 99, 100, 101, 102, 104, 105, 111, 115, 119, 18145, 18152, 18166, 18171, 18186, 18191, 18196, 18204, 18210, 18216, 99, 117, 116, 101, 59, 32768, 378, 512, 97, 121, 18157, 18163, 114, 111, 110, 59, 32768, 382, 59, 32768, 1079, 111, 116, 59, 32768, 380, 512, 101, 116, 18176, 18182, 116, 114, 102, 59, 32768, 8488, 97, 59, 32768, 950, 114, 59, 32896, 55349, 56631, 99, 121, 59, 32768, 1078, 103, 114, 97, 114, 114, 59, 32768, 8669, 112, 102, 59, 32896, 55349, 56683, 99, 114, 59, 32896, 55349, 56527, 512, 106, 110, 18221, 18224, 59, 32768, 8205, 106, 59, 32768, 8204]); - }); - - unwrapExports(decodeDataHtml); - - var decodeDataXml = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - // Generated using scripts/write-decode-map.ts - // prettier-ignore - exports.default = new Uint16Array([1024, 97, 103, 108, 113, 9, 23, 27, 31, 1086, 15, 0, 0, 19, 112, 59, 32768, 38, 111, 115, 59, 32768, 39, 116, 59, 32768, 62, 116, 59, 32768, 60, 117, 111, 116, 59, 32768, 34]); - }); - - unwrapExports(decodeDataXml); - - var decode_codepoint = createCommonjsModule(function (module, exports) { - // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 - Object.defineProperty(exports, "__esModule", { value: true }); - var decodeMap = new Map([ - [0, 65533], - [128, 8364], - [130, 8218], - [131, 402], - [132, 8222], - [133, 8230], - [134, 8224], - [135, 8225], - [136, 710], - [137, 8240], - [138, 352], - [139, 8249], - [140, 338], - [142, 381], - [145, 8216], - [146, 8217], - [147, 8220], - [148, 8221], - [149, 8226], - [150, 8211], - [151, 8212], - [152, 732], - [153, 8482], - [154, 353], - [155, 8250], - [156, 339], - [158, 382], - [159, 376], - ]); - var fromCodePoint = - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins - String.fromCodePoint || - function (codePoint) { - var output = ""; - if (codePoint > 0xffff) { - codePoint -= 0x10000; - output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); - codePoint = 0xdc00 | (codePoint & 0x3ff); - } - output += String.fromCharCode(codePoint); - return output; - }; - function decodeCodePoint(codePoint) { - var _a; - if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { - return "\uFFFD"; - } - return fromCodePoint((_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint); - } - exports.default = decodeCodePoint; - }); - - unwrapExports(decode_codepoint); - - var decode = createCommonjsModule(function (module, exports) { - var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.JUMP_OFFSET_BASE = exports.BinTrieFlags = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; - var decode_data_html_1 = __importDefault(decodeDataHtml); - exports.htmlDecodeTree = decode_data_html_1.default; - var decode_data_xml_1 = __importDefault(decodeDataXml); - exports.xmlDecodeTree = decode_data_xml_1.default; - var decode_codepoint_1 = __importDefault(decode_codepoint); - var BinTrieFlags; - (function (BinTrieFlags) { - BinTrieFlags[BinTrieFlags["HAS_VALUE"] = 32768] = "HAS_VALUE"; - BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 32512] = "BRANCH_LENGTH"; - BinTrieFlags[BinTrieFlags["MULTI_BYTE"] = 128] = "MULTI_BYTE"; - BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; - })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); - exports.JUMP_OFFSET_BASE = 48 /* ZERO */ - 1; - function getDecoder(decodeTree) { - return function decodeHTMLBinary(str, strict) { - var ret = ""; - var lastIdx = 0; - var strIdx = 0; - while ((strIdx = str.indexOf("&", strIdx)) >= 0) { - ret += str.slice(lastIdx, strIdx); - lastIdx = strIdx; - // Skip the "&" - strIdx += 1; - // If we have a numeric entity, handle this separately. - if (str.charCodeAt(strIdx) === 35 /* NUM */) { - // Skip the leading "&#". For hex entities, also skip the leading "x". - var start = strIdx + 1; - var base = 10; - var cp = str.charCodeAt(start); - if ((cp | 32 /* To_LOWER_BIT */) === 120 /* LOWER_X */) { - base = 16; - strIdx += 1; - start += 1; - } - while (((cp = str.charCodeAt(++strIdx)) >= 48 /* ZERO */ && - cp <= 57 /* NINE */) || - (base === 16 && - (cp | 32 /* To_LOWER_BIT */) >= 97 /* LOWER_A */ && - (cp | 32 /* To_LOWER_BIT */) <= 102 /* LOWER_F */)) - ; - if (start !== strIdx) { - var entity = str.substring(start, strIdx); - var parsed = parseInt(entity, base); - if (str.charCodeAt(strIdx) === 59 /* SEMI */) { - strIdx += 1; - } - else if (strict) { - continue; - } - ret += decode_codepoint_1.default(parsed); - lastIdx = strIdx; - } - continue; - } - var result = null; - var excess = 1; - var treeIdx = 0; - var current = decodeTree[treeIdx]; - for (; strIdx < str.length; strIdx++, excess++) { - treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx)); - if (treeIdx < 0) - break; - current = decodeTree[treeIdx]; - // If the branch is a value, store it and continue - if (current & BinTrieFlags.HAS_VALUE) { - // If we have a legacy entity while parsing strictly, just skip the number of bytes - if (strict && str.charCodeAt(strIdx) !== 59 /* SEMI */) { - // No need to consider multi-byte values, as the legacy entity is always a single byte - treeIdx += 1; - } - else { - // If this is a surrogate pair, combine the higher bits from the node with the next byte - result = - current & BinTrieFlags.MULTI_BYTE - ? String.fromCharCode(decodeTree[++treeIdx], decodeTree[++treeIdx]) - : String.fromCharCode(decodeTree[++treeIdx]); - excess = 0; - } - } - } - if (result != null) { - ret += result; - lastIdx = strIdx - excess + 1; - } - } - return ret + str.slice(lastIdx); - }; - } - function determineBranch(decodeTree, current, nodeIdx, char) { - if (current <= 128) { - return char === current ? nodeIdx : -1; - } - var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 8; - if (branchCount === 0) { - return -1; - } - if (branchCount === 1) { - return char === decodeTree[nodeIdx] ? nodeIdx + 1 : -1; - } - var jumpOffset = current & BinTrieFlags.JUMP_TABLE; - if (jumpOffset) { - var value = char - exports.JUMP_OFFSET_BASE - jumpOffset; - return value < 0 || value > branchCount - ? -1 - : decodeTree[nodeIdx + value] - 1; - } - // Binary search for the character. - var lo = nodeIdx; - var hi = lo + branchCount - 1; - while (lo <= hi) { - var mid = (lo + hi) >>> 1; - var midVal = decodeTree[mid]; - if (midVal < char) { - lo = mid + 1; - } - else if (midVal > char) { - hi = mid - 1; - } - else { - return decodeTree[mid + branchCount]; - } - } - return -1; - } - exports.determineBranch = determineBranch; - var htmlDecoder = getDecoder(decode_data_html_1.default); - var xmlDecoder = getDecoder(decode_data_xml_1.default); - function decodeHTML(str) { - return htmlDecoder(str, false); - } - exports.decodeHTML = decodeHTML; - function decodeHTMLStrict(str) { - return htmlDecoder(str, true); - } - exports.decodeHTMLStrict = decodeHTMLStrict; - function decodeXML(str) { - return xmlDecoder(str, true); - } - exports.decodeXML = decodeXML; - }); - - unwrapExports(decode); - var decode_1 = decode.decodeXML; - var decode_2 = decode.decodeHTMLStrict; - var decode_3 = decode.decodeHTML; - var decode_4 = decode.determineBranch; - var decode_5 = decode.JUMP_OFFSET_BASE; - var decode_6 = decode.BinTrieFlags; - var decode_7 = decode.xmlDecodeTree; - var decode_8 = decode.htmlDecodeTree; - - var amp = "&"; - var apos = "'"; - var gt = ">"; - var lt = "<"; - var quot = "\""; - var xml = { - amp: amp, - apos: apos, - gt: gt, - lt: lt, - quot: quot - }; - - var xml$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - amp: amp, - apos: apos, - gt: gt, - lt: lt, - quot: quot, - 'default': xml - }); - - var Aacute = "Á"; - var aacute = "á"; - var Abreve = "Ă"; - var abreve = "ă"; - var ac = "∾"; - var acd = "∿"; - var acE = "∾̳"; - var Acirc = "Â"; - var acirc = "â"; - var acute = "´"; - var Acy = "А"; - var acy = "а"; - var AElig = "Æ"; - var aelig = "æ"; - var af = "⁡"; - var Afr = "𝔄"; - var afr = "𝔞"; - var Agrave = "À"; - var agrave = "à"; - var alefsym = "ℵ"; - var aleph = "ℵ"; - var Alpha = "Α"; - var alpha = "α"; - var Amacr = "Ā"; - var amacr = "ā"; - var amalg = "⨿"; - var amp$1 = "&"; - var AMP = "&"; - var andand = "⩕"; - var And = "⩓"; - var and = "∧"; - var andd = "⩜"; - var andslope = "⩘"; - var andv = "⩚"; - var ang = "∠"; - var ange = "⦤"; - var angle = "∠"; - var angmsdaa = "⦨"; - var angmsdab = "⦩"; - var angmsdac = "⦪"; - var angmsdad = "⦫"; - var angmsdae = "⦬"; - var angmsdaf = "⦭"; - var angmsdag = "⦮"; - var angmsdah = "⦯"; - var angmsd = "∡"; - var angrt = "∟"; - var angrtvb = "⊾"; - var angrtvbd = "⦝"; - var angsph = "∢"; - var angst = "Å"; - var angzarr = "⍼"; - var Aogon = "Ą"; - var aogon = "ą"; - var Aopf = "𝔸"; - var aopf = "𝕒"; - var apacir = "⩯"; - var ap = "≈"; - var apE = "⩰"; - var ape = "≊"; - var apid = "≋"; - var apos$1 = "'"; - var ApplyFunction = "⁡"; - var approx = "≈"; - var approxeq = "≊"; - var Aring = "Å"; - var aring = "å"; - var Ascr = "𝒜"; - var ascr = "𝒶"; - var Assign = "≔"; - var ast = "*"; - var asymp = "≈"; - var asympeq = "≍"; - var Atilde = "Ã"; - var atilde = "ã"; - var Auml = "Ä"; - var auml = "ä"; - var awconint = "∳"; - var awint = "⨑"; - var backcong = "≌"; - var backepsilon = "϶"; - var backprime = "‵"; - var backsim = "∽"; - var backsimeq = "⋍"; - var Backslash = "∖"; - var Barv = "⫧"; - var barvee = "⊽"; - var barwed = "⌅"; - var Barwed = "⌆"; - var barwedge = "⌅"; - var bbrk = "⎵"; - var bbrktbrk = "⎶"; - var bcong = "≌"; - var Bcy = "Б"; - var bcy = "б"; - var bdquo = "„"; - var becaus = "∵"; - var because = "∵"; - var Because = "∵"; - var bemptyv = "⦰"; - var bepsi = "϶"; - var bernou = "ℬ"; - var Bernoullis = "ℬ"; - var Beta = "Β"; - var beta = "β"; - var beth = "ℶ"; - var between = "≬"; - var Bfr = "𝔅"; - var bfr = "𝔟"; - var bigcap = "⋂"; - var bigcirc = "◯"; - var bigcup = "⋃"; - var bigodot = "⨀"; - var bigoplus = "⨁"; - var bigotimes = "⨂"; - var bigsqcup = "⨆"; - var bigstar = "★"; - var bigtriangledown = "▽"; - var bigtriangleup = "△"; - var biguplus = "⨄"; - var bigvee = "⋁"; - var bigwedge = "⋀"; - var bkarow = "⤍"; - var blacklozenge = "⧫"; - var blacksquare = "▪"; - var blacktriangle = "▴"; - var blacktriangledown = "▾"; - var blacktriangleleft = "◂"; - var blacktriangleright = "▸"; - var blank = "␣"; - var blk12 = "▒"; - var blk14 = "░"; - var blk34 = "▓"; - var block = "█"; - var bne = "=⃥"; - var bnequiv = "≡⃥"; - var bNot = "⫭"; - var bnot = "⌐"; - var Bopf = "𝔹"; - var bopf = "𝕓"; - var bot = "⊥"; - var bottom = "⊥"; - var bowtie = "⋈"; - var boxbox = "⧉"; - var boxdl = "┐"; - var boxdL = "╕"; - var boxDl = "╖"; - var boxDL = "╗"; - var boxdr = "┌"; - var boxdR = "╒"; - var boxDr = "╓"; - var boxDR = "╔"; - var boxh = "─"; - var boxH = "═"; - var boxhd = "┬"; - var boxHd = "╤"; - var boxhD = "╥"; - var boxHD = "╦"; - var boxhu = "┴"; - var boxHu = "╧"; - var boxhU = "╨"; - var boxHU = "╩"; - var boxminus = "⊟"; - var boxplus = "⊞"; - var boxtimes = "⊠"; - var boxul = "┘"; - var boxuL = "╛"; - var boxUl = "╜"; - var boxUL = "╝"; - var boxur = "└"; - var boxuR = "╘"; - var boxUr = "╙"; - var boxUR = "╚"; - var boxv = "│"; - var boxV = "║"; - var boxvh = "┼"; - var boxvH = "╪"; - var boxVh = "╫"; - var boxVH = "╬"; - var boxvl = "┤"; - var boxvL = "╡"; - var boxVl = "╢"; - var boxVL = "╣"; - var boxvr = "├"; - var boxvR = "╞"; - var boxVr = "╟"; - var boxVR = "╠"; - var bprime = "‵"; - var breve = "˘"; - var Breve = "˘"; - var brvbar = "¦"; - var bscr = "𝒷"; - var Bscr = "ℬ"; - var bsemi = "⁏"; - var bsim = "∽"; - var bsime = "⋍"; - var bsolb = "⧅"; - var bsol = "\\"; - var bsolhsub = "⟈"; - var bull = "•"; - var bullet = "•"; - var bump = "≎"; - var bumpE = "⪮"; - var bumpe = "≏"; - var Bumpeq = "≎"; - var bumpeq = "≏"; - var Cacute = "Ć"; - var cacute = "ć"; - var capand = "⩄"; - var capbrcup = "⩉"; - var capcap = "⩋"; - var cap = "∩"; - var Cap = "⋒"; - var capcup = "⩇"; - var capdot = "⩀"; - var CapitalDifferentialD = "ⅅ"; - var caps = "∩︀"; - var caret = "⁁"; - var caron = "ˇ"; - var Cayleys = "ℭ"; - var ccaps = "⩍"; - var Ccaron = "Č"; - var ccaron = "č"; - var Ccedil = "Ç"; - var ccedil = "ç"; - var Ccirc = "Ĉ"; - var ccirc = "ĉ"; - var Cconint = "∰"; - var ccups = "⩌"; - var ccupssm = "⩐"; - var Cdot = "Ċ"; - var cdot = "ċ"; - var cedil = "¸"; - var Cedilla = "¸"; - var cemptyv = "⦲"; - var cent = "¢"; - var centerdot = "·"; - var CenterDot = "·"; - var cfr = "𝔠"; - var Cfr = "ℭ"; - var CHcy = "Ч"; - var chcy = "ч"; - var check = "✓"; - var checkmark = "✓"; - var Chi = "Χ"; - var chi = "χ"; - var circ = "ˆ"; - var circeq = "≗"; - var circlearrowleft = "↺"; - var circlearrowright = "↻"; - var circledast = "⊛"; - var circledcirc = "⊚"; - var circleddash = "⊝"; - var CircleDot = "⊙"; - var circledR = "®"; - var circledS = "Ⓢ"; - var CircleMinus = "⊖"; - var CirclePlus = "⊕"; - var CircleTimes = "⊗"; - var cir = "○"; - var cirE = "⧃"; - var cire = "≗"; - var cirfnint = "⨐"; - var cirmid = "⫯"; - var cirscir = "⧂"; - var ClockwiseContourIntegral = "∲"; - var CloseCurlyDoubleQuote = "”"; - var CloseCurlyQuote = "’"; - var clubs = "♣"; - var clubsuit = "♣"; - var colon = ":"; - var Colon = "∷"; - var Colone = "⩴"; - var colone = "≔"; - var coloneq = "≔"; - var comma = ","; - var commat = "@"; - var comp = "∁"; - var compfn = "∘"; - var complement = "∁"; - var complexes = "ℂ"; - var cong = "≅"; - var congdot = "⩭"; - var Congruent = "≡"; - var conint = "∮"; - var Conint = "∯"; - var ContourIntegral = "∮"; - var copf = "𝕔"; - var Copf = "ℂ"; - var coprod = "∐"; - var Coproduct = "∐"; - var copy = "©"; - var COPY = "©"; - var copysr = "℗"; - var CounterClockwiseContourIntegral = "∳"; - var crarr = "↵"; - var cross = "✗"; - var Cross = "⨯"; - var Cscr = "𝒞"; - var cscr = "𝒸"; - var csub = "⫏"; - var csube = "⫑"; - var csup = "⫐"; - var csupe = "⫒"; - var ctdot = "⋯"; - var cudarrl = "⤸"; - var cudarrr = "⤵"; - var cuepr = "⋞"; - var cuesc = "⋟"; - var cularr = "↶"; - var cularrp = "⤽"; - var cupbrcap = "⩈"; - var cupcap = "⩆"; - var CupCap = "≍"; - var cup = "∪"; - var Cup = "⋓"; - var cupcup = "⩊"; - var cupdot = "⊍"; - var cupor = "⩅"; - var cups = "∪︀"; - var curarr = "↷"; - var curarrm = "⤼"; - var curlyeqprec = "⋞"; - var curlyeqsucc = "⋟"; - var curlyvee = "⋎"; - var curlywedge = "⋏"; - var curren = "¤"; - var curvearrowleft = "↶"; - var curvearrowright = "↷"; - var cuvee = "⋎"; - var cuwed = "⋏"; - var cwconint = "∲"; - var cwint = "∱"; - var cylcty = "⌭"; - var dagger = "†"; - var Dagger = "‡"; - var daleth = "ℸ"; - var darr = "↓"; - var Darr = "↡"; - var dArr = "⇓"; - var dash = "‐"; - var Dashv = "⫤"; - var dashv = "⊣"; - var dbkarow = "⤏"; - var dblac = "˝"; - var Dcaron = "Ď"; - var dcaron = "ď"; - var Dcy = "Д"; - var dcy = "д"; - var ddagger = "‡"; - var ddarr = "⇊"; - var DD = "ⅅ"; - var dd = "ⅆ"; - var DDotrahd = "⤑"; - var ddotseq = "⩷"; - var deg = "°"; - var Del = "∇"; - var Delta = "Δ"; - var delta = "δ"; - var demptyv = "⦱"; - var dfisht = "⥿"; - var Dfr = "𝔇"; - var dfr = "𝔡"; - var dHar = "⥥"; - var dharl = "⇃"; - var dharr = "⇂"; - var DiacriticalAcute = "´"; - var DiacriticalDot = "˙"; - var DiacriticalDoubleAcute = "˝"; - var DiacriticalGrave = "`"; - var DiacriticalTilde = "˜"; - var diam = "⋄"; - var diamond = "⋄"; - var Diamond = "⋄"; - var diamondsuit = "♦"; - var diams = "♦"; - var die = "¨"; - var DifferentialD = "ⅆ"; - var digamma = "ϝ"; - var disin = "⋲"; - var div = "÷"; - var divide = "÷"; - var divideontimes = "⋇"; - var divonx = "⋇"; - var DJcy = "Ђ"; - var djcy = "ђ"; - var dlcorn = "⌞"; - var dlcrop = "⌍"; - var dollar = "$"; - var Dopf = "𝔻"; - var dopf = "𝕕"; - var Dot = "¨"; - var dot = "˙"; - var DotDot = "⃜"; - var doteq = "≐"; - var doteqdot = "≑"; - var DotEqual = "≐"; - var dotminus = "∸"; - var dotplus = "∔"; - var dotsquare = "⊡"; - var doublebarwedge = "⌆"; - var DoubleContourIntegral = "∯"; - var DoubleDot = "¨"; - var DoubleDownArrow = "⇓"; - var DoubleLeftArrow = "⇐"; - var DoubleLeftRightArrow = "⇔"; - var DoubleLeftTee = "⫤"; - var DoubleLongLeftArrow = "⟸"; - var DoubleLongLeftRightArrow = "⟺"; - var DoubleLongRightArrow = "⟹"; - var DoubleRightArrow = "⇒"; - var DoubleRightTee = "⊨"; - var DoubleUpArrow = "⇑"; - var DoubleUpDownArrow = "⇕"; - var DoubleVerticalBar = "∥"; - var DownArrowBar = "⤓"; - var downarrow = "↓"; - var DownArrow = "↓"; - var Downarrow = "⇓"; - var DownArrowUpArrow = "⇵"; - var DownBreve = "̑"; - var downdownarrows = "⇊"; - var downharpoonleft = "⇃"; - var downharpoonright = "⇂"; - var DownLeftRightVector = "⥐"; - var DownLeftTeeVector = "⥞"; - var DownLeftVectorBar = "⥖"; - var DownLeftVector = "↽"; - var DownRightTeeVector = "⥟"; - var DownRightVectorBar = "⥗"; - var DownRightVector = "⇁"; - var DownTeeArrow = "↧"; - var DownTee = "⊤"; - var drbkarow = "⤐"; - var drcorn = "⌟"; - var drcrop = "⌌"; - var Dscr = "𝒟"; - var dscr = "𝒹"; - var DScy = "Ѕ"; - var dscy = "ѕ"; - var dsol = "⧶"; - var Dstrok = "Đ"; - var dstrok = "đ"; - var dtdot = "⋱"; - var dtri = "▿"; - var dtrif = "▾"; - var duarr = "⇵"; - var duhar = "⥯"; - var dwangle = "⦦"; - var DZcy = "Џ"; - var dzcy = "џ"; - var dzigrarr = "⟿"; - var Eacute = "É"; - var eacute = "é"; - var easter = "⩮"; - var Ecaron = "Ě"; - var ecaron = "ě"; - var Ecirc = "Ê"; - var ecirc = "ê"; - var ecir = "≖"; - var ecolon = "≕"; - var Ecy = "Э"; - var ecy = "э"; - var eDDot = "⩷"; - var Edot = "Ė"; - var edot = "ė"; - var eDot = "≑"; - var ee = "ⅇ"; - var efDot = "≒"; - var Efr = "𝔈"; - var efr = "𝔢"; - var eg = "⪚"; - var Egrave = "È"; - var egrave = "è"; - var egs = "⪖"; - var egsdot = "⪘"; - var el = "⪙"; - var Element = "∈"; - var elinters = "⏧"; - var ell = "ℓ"; - var els = "⪕"; - var elsdot = "⪗"; - var Emacr = "Ē"; - var emacr = "ē"; - var empty = "∅"; - var emptyset = "∅"; - var EmptySmallSquare = "◻"; - var emptyv = "∅"; - var EmptyVerySmallSquare = "▫"; - var emsp13 = " "; - var emsp14 = " "; - var emsp = " "; - var ENG = "Ŋ"; - var eng = "ŋ"; - var ensp = " "; - var Eogon = "Ę"; - var eogon = "ę"; - var Eopf = "𝔼"; - var eopf = "𝕖"; - var epar = "⋕"; - var eparsl = "⧣"; - var eplus = "⩱"; - var epsi = "ε"; - var Epsilon = "Ε"; - var epsilon = "ε"; - var epsiv = "ϵ"; - var eqcirc = "≖"; - var eqcolon = "≕"; - var eqsim = "≂"; - var eqslantgtr = "⪖"; - var eqslantless = "⪕"; - var Equal = "⩵"; - var equals = "="; - var EqualTilde = "≂"; - var equest = "≟"; - var Equilibrium = "⇌"; - var equiv = "≡"; - var equivDD = "⩸"; - var eqvparsl = "⧥"; - var erarr = "⥱"; - var erDot = "≓"; - var escr = "ℯ"; - var Escr = "ℰ"; - var esdot = "≐"; - var Esim = "⩳"; - var esim = "≂"; - var Eta = "Η"; - var eta = "η"; - var ETH = "Ð"; - var eth = "ð"; - var Euml = "Ë"; - var euml = "ë"; - var euro = "€"; - var excl = "!"; - var exist = "∃"; - var Exists = "∃"; - var expectation = "ℰ"; - var exponentiale = "ⅇ"; - var ExponentialE = "ⅇ"; - var fallingdotseq = "≒"; - var Fcy = "Ф"; - var fcy = "ф"; - var female = "♀"; - var ffilig = "ffi"; - var fflig = "ff"; - var ffllig = "ffl"; - var Ffr = "𝔉"; - var ffr = "𝔣"; - var filig = "fi"; - var FilledSmallSquare = "◼"; - var FilledVerySmallSquare = "▪"; - var fjlig = "fj"; - var flat = "♭"; - var fllig = "fl"; - var fltns = "▱"; - var fnof = "ƒ"; - var Fopf = "𝔽"; - var fopf = "𝕗"; - var forall = "∀"; - var ForAll = "∀"; - var fork = "⋔"; - var forkv = "⫙"; - var Fouriertrf = "ℱ"; - var fpartint = "⨍"; - var frac12 = "½"; - var frac13 = "⅓"; - var frac14 = "¼"; - var frac15 = "⅕"; - var frac16 = "⅙"; - var frac18 = "⅛"; - var frac23 = "⅔"; - var frac25 = "⅖"; - var frac34 = "¾"; - var frac35 = "⅗"; - var frac38 = "⅜"; - var frac45 = "⅘"; - var frac56 = "⅚"; - var frac58 = "⅝"; - var frac78 = "⅞"; - var frasl = "⁄"; - var frown = "⌢"; - var fscr = "𝒻"; - var Fscr = "ℱ"; - var gacute = "ǵ"; - var Gamma = "Γ"; - var gamma = "γ"; - var Gammad = "Ϝ"; - var gammad = "ϝ"; - var gap = "⪆"; - var Gbreve = "Ğ"; - var gbreve = "ğ"; - var Gcedil = "Ģ"; - var Gcirc = "Ĝ"; - var gcirc = "ĝ"; - var Gcy = "Г"; - var gcy = "г"; - var Gdot = "Ġ"; - var gdot = "ġ"; - var ge = "≥"; - var gE = "≧"; - var gEl = "⪌"; - var gel = "⋛"; - var geq = "≥"; - var geqq = "≧"; - var geqslant = "⩾"; - var gescc = "⪩"; - var ges = "⩾"; - var gesdot = "⪀"; - var gesdoto = "⪂"; - var gesdotol = "⪄"; - var gesl = "⋛︀"; - var gesles = "⪔"; - var Gfr = "𝔊"; - var gfr = "𝔤"; - var gg = "≫"; - var Gg = "⋙"; - var ggg = "⋙"; - var gimel = "ℷ"; - var GJcy = "Ѓ"; - var gjcy = "ѓ"; - var gla = "⪥"; - var gl = "≷"; - var glE = "⪒"; - var glj = "⪤"; - var gnap = "⪊"; - var gnapprox = "⪊"; - var gne = "⪈"; - var gnE = "≩"; - var gneq = "⪈"; - var gneqq = "≩"; - var gnsim = "⋧"; - var Gopf = "𝔾"; - var gopf = "𝕘"; - var grave = "`"; - var GreaterEqual = "≥"; - var GreaterEqualLess = "⋛"; - var GreaterFullEqual = "≧"; - var GreaterGreater = "⪢"; - var GreaterLess = "≷"; - var GreaterSlantEqual = "⩾"; - var GreaterTilde = "≳"; - var Gscr = "𝒢"; - var gscr = "ℊ"; - var gsim = "≳"; - var gsime = "⪎"; - var gsiml = "⪐"; - var gtcc = "⪧"; - var gtcir = "⩺"; - var gt$1 = ">"; - var GT = ">"; - var Gt = "≫"; - var gtdot = "⋗"; - var gtlPar = "⦕"; - var gtquest = "⩼"; - var gtrapprox = "⪆"; - var gtrarr = "⥸"; - var gtrdot = "⋗"; - var gtreqless = "⋛"; - var gtreqqless = "⪌"; - var gtrless = "≷"; - var gtrsim = "≳"; - var gvertneqq = "≩︀"; - var gvnE = "≩︀"; - var Hacek = "ˇ"; - var hairsp = " "; - var half = "½"; - var hamilt = "ℋ"; - var HARDcy = "Ъ"; - var hardcy = "ъ"; - var harrcir = "⥈"; - var harr = "↔"; - var hArr = "⇔"; - var harrw = "↭"; - var Hat = "^"; - var hbar = "ℏ"; - var Hcirc = "Ĥ"; - var hcirc = "ĥ"; - var hearts = "♥"; - var heartsuit = "♥"; - var hellip = "…"; - var hercon = "⊹"; - var hfr = "𝔥"; - var Hfr = "ℌ"; - var HilbertSpace = "ℋ"; - var hksearow = "⤥"; - var hkswarow = "⤦"; - var hoarr = "⇿"; - var homtht = "∻"; - var hookleftarrow = "↩"; - var hookrightarrow = "↪"; - var hopf = "𝕙"; - var Hopf = "ℍ"; - var horbar = "―"; - var HorizontalLine = "─"; - var hscr = "𝒽"; - var Hscr = "ℋ"; - var hslash = "ℏ"; - var Hstrok = "Ħ"; - var hstrok = "ħ"; - var HumpDownHump = "≎"; - var HumpEqual = "≏"; - var hybull = "⁃"; - var hyphen = "‐"; - var Iacute = "Í"; - var iacute = "í"; - var ic = "⁣"; - var Icirc = "Î"; - var icirc = "î"; - var Icy = "И"; - var icy = "и"; - var Idot = "İ"; - var IEcy = "Е"; - var iecy = "е"; - var iexcl = "¡"; - var iff = "⇔"; - var ifr = "𝔦"; - var Ifr = "ℑ"; - var Igrave = "Ì"; - var igrave = "ì"; - var ii = "ⅈ"; - var iiiint = "⨌"; - var iiint = "∭"; - var iinfin = "⧜"; - var iiota = "℩"; - var IJlig = "IJ"; - var ijlig = "ij"; - var Imacr = "Ī"; - var imacr = "ī"; - var image = "ℑ"; - var ImaginaryI = "ⅈ"; - var imagline = "ℐ"; - var imagpart = "ℑ"; - var imath = "ı"; - var Im = "ℑ"; - var imof = "⊷"; - var imped = "Ƶ"; - var Implies = "⇒"; - var incare = "℅"; - var infin = "∞"; - var infintie = "⧝"; - var inodot = "ı"; - var intcal = "⊺"; - var int = "∫"; - var Int = "∬"; - var integers = "ℤ"; - var Integral = "∫"; - var intercal = "⊺"; - var Intersection = "⋂"; - var intlarhk = "⨗"; - var intprod = "⨼"; - var InvisibleComma = "⁣"; - var InvisibleTimes = "⁢"; - var IOcy = "Ё"; - var iocy = "ё"; - var Iogon = "Į"; - var iogon = "į"; - var Iopf = "𝕀"; - var iopf = "𝕚"; - var Iota = "Ι"; - var iota = "ι"; - var iprod = "⨼"; - var iquest = "¿"; - var iscr = "𝒾"; - var Iscr = "ℐ"; - var isin = "∈"; - var isindot = "⋵"; - var isinE = "⋹"; - var isins = "⋴"; - var isinsv = "⋳"; - var isinv = "∈"; - var it = "⁢"; - var Itilde = "Ĩ"; - var itilde = "ĩ"; - var Iukcy = "І"; - var iukcy = "і"; - var Iuml = "Ï"; - var iuml = "ï"; - var Jcirc = "Ĵ"; - var jcirc = "ĵ"; - var Jcy = "Й"; - var jcy = "й"; - var Jfr = "𝔍"; - var jfr = "𝔧"; - var jmath = "ȷ"; - var Jopf = "𝕁"; - var jopf = "𝕛"; - var Jscr = "𝒥"; - var jscr = "𝒿"; - var Jsercy = "Ј"; - var jsercy = "ј"; - var Jukcy = "Є"; - var jukcy = "є"; - var Kappa = "Κ"; - var kappa = "κ"; - var kappav = "ϰ"; - var Kcedil = "Ķ"; - var kcedil = "ķ"; - var Kcy = "К"; - var kcy = "к"; - var Kfr = "𝔎"; - var kfr = "𝔨"; - var kgreen = "ĸ"; - var KHcy = "Х"; - var khcy = "х"; - var KJcy = "Ќ"; - var kjcy = "ќ"; - var Kopf = "𝕂"; - var kopf = "𝕜"; - var Kscr = "𝒦"; - var kscr = "𝓀"; - var lAarr = "⇚"; - var Lacute = "Ĺ"; - var lacute = "ĺ"; - var laemptyv = "⦴"; - var lagran = "ℒ"; - var Lambda = "Λ"; - var lambda = "λ"; - var lang = "⟨"; - var Lang = "⟪"; - var langd = "⦑"; - var langle = "⟨"; - var lap = "⪅"; - var Laplacetrf = "ℒ"; - var laquo = "«"; - var larrb = "⇤"; - var larrbfs = "⤟"; - var larr = "←"; - var Larr = "↞"; - var lArr = "⇐"; - var larrfs = "⤝"; - var larrhk = "↩"; - var larrlp = "↫"; - var larrpl = "⤹"; - var larrsim = "⥳"; - var larrtl = "↢"; - var latail = "⤙"; - var lAtail = "⤛"; - var lat = "⪫"; - var late = "⪭"; - var lates = "⪭︀"; - var lbarr = "⤌"; - var lBarr = "⤎"; - var lbbrk = "❲"; - var lbrace = "{"; - var lbrack = "["; - var lbrke = "⦋"; - var lbrksld = "⦏"; - var lbrkslu = "⦍"; - var Lcaron = "Ľ"; - var lcaron = "ľ"; - var Lcedil = "Ļ"; - var lcedil = "ļ"; - var lceil = "⌈"; - var lcub = "{"; - var Lcy = "Л"; - var lcy = "л"; - var ldca = "⤶"; - var ldquo = "“"; - var ldquor = "„"; - var ldrdhar = "⥧"; - var ldrushar = "⥋"; - var ldsh = "↲"; - var le = "≤"; - var lE = "≦"; - var LeftAngleBracket = "⟨"; - var LeftArrowBar = "⇤"; - var leftarrow = "←"; - var LeftArrow = "←"; - var Leftarrow = "⇐"; - var LeftArrowRightArrow = "⇆"; - var leftarrowtail = "↢"; - var LeftCeiling = "⌈"; - var LeftDoubleBracket = "⟦"; - var LeftDownTeeVector = "⥡"; - var LeftDownVectorBar = "⥙"; - var LeftDownVector = "⇃"; - var LeftFloor = "⌊"; - var leftharpoondown = "↽"; - var leftharpoonup = "↼"; - var leftleftarrows = "⇇"; - var leftrightarrow = "↔"; - var LeftRightArrow = "↔"; - var Leftrightarrow = "⇔"; - var leftrightarrows = "⇆"; - var leftrightharpoons = "⇋"; - var leftrightsquigarrow = "↭"; - var LeftRightVector = "⥎"; - var LeftTeeArrow = "↤"; - var LeftTee = "⊣"; - var LeftTeeVector = "⥚"; - var leftthreetimes = "⋋"; - var LeftTriangleBar = "⧏"; - var LeftTriangle = "⊲"; - var LeftTriangleEqual = "⊴"; - var LeftUpDownVector = "⥑"; - var LeftUpTeeVector = "⥠"; - var LeftUpVectorBar = "⥘"; - var LeftUpVector = "↿"; - var LeftVectorBar = "⥒"; - var LeftVector = "↼"; - var lEg = "⪋"; - var leg = "⋚"; - var leq = "≤"; - var leqq = "≦"; - var leqslant = "⩽"; - var lescc = "⪨"; - var les = "⩽"; - var lesdot = "⩿"; - var lesdoto = "⪁"; - var lesdotor = "⪃"; - var lesg = "⋚︀"; - var lesges = "⪓"; - var lessapprox = "⪅"; - var lessdot = "⋖"; - var lesseqgtr = "⋚"; - var lesseqqgtr = "⪋"; - var LessEqualGreater = "⋚"; - var LessFullEqual = "≦"; - var LessGreater = "≶"; - var lessgtr = "≶"; - var LessLess = "⪡"; - var lesssim = "≲"; - var LessSlantEqual = "⩽"; - var LessTilde = "≲"; - var lfisht = "⥼"; - var lfloor = "⌊"; - var Lfr = "𝔏"; - var lfr = "𝔩"; - var lg = "≶"; - var lgE = "⪑"; - var lHar = "⥢"; - var lhard = "↽"; - var lharu = "↼"; - var lharul = "⥪"; - var lhblk = "▄"; - var LJcy = "Љ"; - var ljcy = "љ"; - var llarr = "⇇"; - var ll = "≪"; - var Ll = "⋘"; - var llcorner = "⌞"; - var Lleftarrow = "⇚"; - var llhard = "⥫"; - var lltri = "◺"; - var Lmidot = "Ŀ"; - var lmidot = "ŀ"; - var lmoustache = "⎰"; - var lmoust = "⎰"; - var lnap = "⪉"; - var lnapprox = "⪉"; - var lne = "⪇"; - var lnE = "≨"; - var lneq = "⪇"; - var lneqq = "≨"; - var lnsim = "⋦"; - var loang = "⟬"; - var loarr = "⇽"; - var lobrk = "⟦"; - var longleftarrow = "⟵"; - var LongLeftArrow = "⟵"; - var Longleftarrow = "⟸"; - var longleftrightarrow = "⟷"; - var LongLeftRightArrow = "⟷"; - var Longleftrightarrow = "⟺"; - var longmapsto = "⟼"; - var longrightarrow = "⟶"; - var LongRightArrow = "⟶"; - var Longrightarrow = "⟹"; - var looparrowleft = "↫"; - var looparrowright = "↬"; - var lopar = "⦅"; - var Lopf = "𝕃"; - var lopf = "𝕝"; - var loplus = "⨭"; - var lotimes = "⨴"; - var lowast = "∗"; - var lowbar = "_"; - var LowerLeftArrow = "↙"; - var LowerRightArrow = "↘"; - var loz = "◊"; - var lozenge = "◊"; - var lozf = "⧫"; - var lpar = "("; - var lparlt = "⦓"; - var lrarr = "⇆"; - var lrcorner = "⌟"; - var lrhar = "⇋"; - var lrhard = "⥭"; - var lrm = "‎"; - var lrtri = "⊿"; - var lsaquo = "‹"; - var lscr = "𝓁"; - var Lscr = "ℒ"; - var lsh = "↰"; - var Lsh = "↰"; - var lsim = "≲"; - var lsime = "⪍"; - var lsimg = "⪏"; - var lsqb = "["; - var lsquo = "‘"; - var lsquor = "‚"; - var Lstrok = "Ł"; - var lstrok = "ł"; - var ltcc = "⪦"; - var ltcir = "⩹"; - var lt$1 = "<"; - var LT = "<"; - var Lt = "≪"; - var ltdot = "⋖"; - var lthree = "⋋"; - var ltimes = "⋉"; - var ltlarr = "⥶"; - var ltquest = "⩻"; - var ltri = "◃"; - var ltrie = "⊴"; - var ltrif = "◂"; - var ltrPar = "⦖"; - var lurdshar = "⥊"; - var luruhar = "⥦"; - var lvertneqq = "≨︀"; - var lvnE = "≨︀"; - var macr = "¯"; - var male = "♂"; - var malt = "✠"; - var maltese = "✠"; - var map = "↦"; - var mapsto = "↦"; - var mapstodown = "↧"; - var mapstoleft = "↤"; - var mapstoup = "↥"; - var marker = "▮"; - var mcomma = "⨩"; - var Mcy = "М"; - var mcy = "м"; - var mdash = "—"; - var mDDot = "∺"; - var measuredangle = "∡"; - var MediumSpace = " "; - var Mellintrf = "ℳ"; - var Mfr = "𝔐"; - var mfr = "𝔪"; - var mho = "℧"; - var micro = "µ"; - var midast = "*"; - var midcir = "⫰"; - var mid = "∣"; - var middot = "·"; - var minusb = "⊟"; - var minus = "−"; - var minusd = "∸"; - var minusdu = "⨪"; - var MinusPlus = "∓"; - var mlcp = "⫛"; - var mldr = "…"; - var mnplus = "∓"; - var models = "⊧"; - var Mopf = "𝕄"; - var mopf = "𝕞"; - var mp = "∓"; - var mscr = "𝓂"; - var Mscr = "ℳ"; - var mstpos = "∾"; - var Mu = "Μ"; - var mu = "μ"; - var multimap = "⊸"; - var mumap = "⊸"; - var nabla = "∇"; - var Nacute = "Ń"; - var nacute = "ń"; - var nang = "∠⃒"; - var nap = "≉"; - var napE = "⩰̸"; - var napid = "≋̸"; - var napos = "ʼn"; - var napprox = "≉"; - var natural = "♮"; - var naturals = "ℕ"; - var natur = "♮"; - var nbsp = " "; - var nbump = "≎̸"; - var nbumpe = "≏̸"; - var ncap = "⩃"; - var Ncaron = "Ň"; - var ncaron = "ň"; - var Ncedil = "Ņ"; - var ncedil = "ņ"; - var ncong = "≇"; - var ncongdot = "⩭̸"; - var ncup = "⩂"; - var Ncy = "Н"; - var ncy = "н"; - var ndash = "–"; - var nearhk = "⤤"; - var nearr = "↗"; - var neArr = "⇗"; - var nearrow = "↗"; - var ne = "≠"; - var nedot = "≐̸"; - var NegativeMediumSpace = "​"; - var NegativeThickSpace = "​"; - var NegativeThinSpace = "​"; - var NegativeVeryThinSpace = "​"; - var nequiv = "≢"; - var nesear = "⤨"; - var nesim = "≂̸"; - var NestedGreaterGreater = "≫"; - var NestedLessLess = "≪"; - var NewLine = "\n"; - var nexist = "∄"; - var nexists = "∄"; - var Nfr = "𝔑"; - var nfr = "𝔫"; - var ngE = "≧̸"; - var nge = "≱"; - var ngeq = "≱"; - var ngeqq = "≧̸"; - var ngeqslant = "⩾̸"; - var nges = "⩾̸"; - var nGg = "⋙̸"; - var ngsim = "≵"; - var nGt = "≫⃒"; - var ngt = "≯"; - var ngtr = "≯"; - var nGtv = "≫̸"; - var nharr = "↮"; - var nhArr = "⇎"; - var nhpar = "⫲"; - var ni = "∋"; - var nis = "⋼"; - var nisd = "⋺"; - var niv = "∋"; - var NJcy = "Њ"; - var njcy = "њ"; - var nlarr = "↚"; - var nlArr = "⇍"; - var nldr = "‥"; - var nlE = "≦̸"; - var nle = "≰"; - var nleftarrow = "↚"; - var nLeftarrow = "⇍"; - var nleftrightarrow = "↮"; - var nLeftrightarrow = "⇎"; - var nleq = "≰"; - var nleqq = "≦̸"; - var nleqslant = "⩽̸"; - var nles = "⩽̸"; - var nless = "≮"; - var nLl = "⋘̸"; - var nlsim = "≴"; - var nLt = "≪⃒"; - var nlt = "≮"; - var nltri = "⋪"; - var nltrie = "⋬"; - var nLtv = "≪̸"; - var nmid = "∤"; - var NoBreak = "⁠"; - var NonBreakingSpace = " "; - var nopf = "𝕟"; - var Nopf = "ℕ"; - var Not = "⫬"; - var not = "¬"; - var NotCongruent = "≢"; - var NotCupCap = "≭"; - var NotDoubleVerticalBar = "∦"; - var NotElement = "∉"; - var NotEqual = "≠"; - var NotEqualTilde = "≂̸"; - var NotExists = "∄"; - var NotGreater = "≯"; - var NotGreaterEqual = "≱"; - var NotGreaterFullEqual = "≧̸"; - var NotGreaterGreater = "≫̸"; - var NotGreaterLess = "≹"; - var NotGreaterSlantEqual = "⩾̸"; - var NotGreaterTilde = "≵"; - var NotHumpDownHump = "≎̸"; - var NotHumpEqual = "≏̸"; - var notin = "∉"; - var notindot = "⋵̸"; - var notinE = "⋹̸"; - var notinva = "∉"; - var notinvb = "⋷"; - var notinvc = "⋶"; - var NotLeftTriangleBar = "⧏̸"; - var NotLeftTriangle = "⋪"; - var NotLeftTriangleEqual = "⋬"; - var NotLess = "≮"; - var NotLessEqual = "≰"; - var NotLessGreater = "≸"; - var NotLessLess = "≪̸"; - var NotLessSlantEqual = "⩽̸"; - var NotLessTilde = "≴"; - var NotNestedGreaterGreater = "⪢̸"; - var NotNestedLessLess = "⪡̸"; - var notni = "∌"; - var notniva = "∌"; - var notnivb = "⋾"; - var notnivc = "⋽"; - var NotPrecedes = "⊀"; - var NotPrecedesEqual = "⪯̸"; - var NotPrecedesSlantEqual = "⋠"; - var NotReverseElement = "∌"; - var NotRightTriangleBar = "⧐̸"; - var NotRightTriangle = "⋫"; - var NotRightTriangleEqual = "⋭"; - var NotSquareSubset = "⊏̸"; - var NotSquareSubsetEqual = "⋢"; - var NotSquareSuperset = "⊐̸"; - var NotSquareSupersetEqual = "⋣"; - var NotSubset = "⊂⃒"; - var NotSubsetEqual = "⊈"; - var NotSucceeds = "⊁"; - var NotSucceedsEqual = "⪰̸"; - var NotSucceedsSlantEqual = "⋡"; - var NotSucceedsTilde = "≿̸"; - var NotSuperset = "⊃⃒"; - var NotSupersetEqual = "⊉"; - var NotTilde = "≁"; - var NotTildeEqual = "≄"; - var NotTildeFullEqual = "≇"; - var NotTildeTilde = "≉"; - var NotVerticalBar = "∤"; - var nparallel = "∦"; - var npar = "∦"; - var nparsl = "⫽⃥"; - var npart = "∂̸"; - var npolint = "⨔"; - var npr = "⊀"; - var nprcue = "⋠"; - var nprec = "⊀"; - var npreceq = "⪯̸"; - var npre = "⪯̸"; - var nrarrc = "⤳̸"; - var nrarr = "↛"; - var nrArr = "⇏"; - var nrarrw = "↝̸"; - var nrightarrow = "↛"; - var nRightarrow = "⇏"; - var nrtri = "⋫"; - var nrtrie = "⋭"; - var nsc = "⊁"; - var nsccue = "⋡"; - var nsce = "⪰̸"; - var Nscr = "𝒩"; - var nscr = "𝓃"; - var nshortmid = "∤"; - var nshortparallel = "∦"; - var nsim = "≁"; - var nsime = "≄"; - var nsimeq = "≄"; - var nsmid = "∤"; - var nspar = "∦"; - var nsqsube = "⋢"; - var nsqsupe = "⋣"; - var nsub = "⊄"; - var nsubE = "⫅̸"; - var nsube = "⊈"; - var nsubset = "⊂⃒"; - var nsubseteq = "⊈"; - var nsubseteqq = "⫅̸"; - var nsucc = "⊁"; - var nsucceq = "⪰̸"; - var nsup = "⊅"; - var nsupE = "⫆̸"; - var nsupe = "⊉"; - var nsupset = "⊃⃒"; - var nsupseteq = "⊉"; - var nsupseteqq = "⫆̸"; - var ntgl = "≹"; - var Ntilde = "Ñ"; - var ntilde = "ñ"; - var ntlg = "≸"; - var ntriangleleft = "⋪"; - var ntrianglelefteq = "⋬"; - var ntriangleright = "⋫"; - var ntrianglerighteq = "⋭"; - var Nu = "Ν"; - var nu = "ν"; - var num = "#"; - var numero = "№"; - var numsp = " "; - var nvap = "≍⃒"; - var nvdash = "⊬"; - var nvDash = "⊭"; - var nVdash = "⊮"; - var nVDash = "⊯"; - var nvge = "≥⃒"; - var nvgt = ">⃒"; - var nvHarr = "⤄"; - var nvinfin = "⧞"; - var nvlArr = "⤂"; - var nvle = "≤⃒"; - var nvlt = "<⃒"; - var nvltrie = "⊴⃒"; - var nvrArr = "⤃"; - var nvrtrie = "⊵⃒"; - var nvsim = "∼⃒"; - var nwarhk = "⤣"; - var nwarr = "↖"; - var nwArr = "⇖"; - var nwarrow = "↖"; - var nwnear = "⤧"; - var Oacute = "Ó"; - var oacute = "ó"; - var oast = "⊛"; - var Ocirc = "Ô"; - var ocirc = "ô"; - var ocir = "⊚"; - var Ocy = "О"; - var ocy = "о"; - var odash = "⊝"; - var Odblac = "Ő"; - var odblac = "ő"; - var odiv = "⨸"; - var odot = "⊙"; - var odsold = "⦼"; - var OElig = "Œ"; - var oelig = "œ"; - var ofcir = "⦿"; - var Ofr = "𝔒"; - var ofr = "𝔬"; - var ogon = "˛"; - var Ograve = "Ò"; - var ograve = "ò"; - var ogt = "⧁"; - var ohbar = "⦵"; - var ohm = "Ω"; - var oint = "∮"; - var olarr = "↺"; - var olcir = "⦾"; - var olcross = "⦻"; - var oline = "‾"; - var olt = "⧀"; - var Omacr = "Ō"; - var omacr = "ō"; - var Omega = "Ω"; - var omega = "ω"; - var Omicron = "Ο"; - var omicron = "ο"; - var omid = "⦶"; - var ominus = "⊖"; - var Oopf = "𝕆"; - var oopf = "𝕠"; - var opar = "⦷"; - var OpenCurlyDoubleQuote = "“"; - var OpenCurlyQuote = "‘"; - var operp = "⦹"; - var oplus = "⊕"; - var orarr = "↻"; - var Or = "⩔"; - var or = "∨"; - var ord = "⩝"; - var order = "ℴ"; - var orderof = "ℴ"; - var ordf = "ª"; - var ordm = "º"; - var origof = "⊶"; - var oror = "⩖"; - var orslope = "⩗"; - var orv = "⩛"; - var oS = "Ⓢ"; - var Oscr = "𝒪"; - var oscr = "ℴ"; - var Oslash = "Ø"; - var oslash = "ø"; - var osol = "⊘"; - var Otilde = "Õ"; - var otilde = "õ"; - var otimesas = "⨶"; - var Otimes = "⨷"; - var otimes = "⊗"; - var Ouml = "Ö"; - var ouml = "ö"; - var ovbar = "⌽"; - var OverBar = "‾"; - var OverBrace = "⏞"; - var OverBracket = "⎴"; - var OverParenthesis = "⏜"; - var para = "¶"; - var parallel = "∥"; - var par = "∥"; - var parsim = "⫳"; - var parsl = "⫽"; - var part = "∂"; - var PartialD = "∂"; - var Pcy = "П"; - var pcy = "п"; - var percnt = "%"; - var period = "."; - var permil = "‰"; - var perp = "⊥"; - var pertenk = "‱"; - var Pfr = "𝔓"; - var pfr = "𝔭"; - var Phi = "Φ"; - var phi = "φ"; - var phiv = "ϕ"; - var phmmat = "ℳ"; - var phone = "☎"; - var Pi = "Π"; - var pi = "π"; - var pitchfork = "⋔"; - var piv = "ϖ"; - var planck = "ℏ"; - var planckh = "ℎ"; - var plankv = "ℏ"; - var plusacir = "⨣"; - var plusb = "⊞"; - var pluscir = "⨢"; - var plus = "+"; - var plusdo = "∔"; - var plusdu = "⨥"; - var pluse = "⩲"; - var PlusMinus = "±"; - var plusmn = "±"; - var plussim = "⨦"; - var plustwo = "⨧"; - var pm = "±"; - var Poincareplane = "ℌ"; - var pointint = "⨕"; - var popf = "𝕡"; - var Popf = "ℙ"; - var pound = "£"; - var prap = "⪷"; - var Pr = "⪻"; - var pr = "≺"; - var prcue = "≼"; - var precapprox = "⪷"; - var prec = "≺"; - var preccurlyeq = "≼"; - var Precedes = "≺"; - var PrecedesEqual = "⪯"; - var PrecedesSlantEqual = "≼"; - var PrecedesTilde = "≾"; - var preceq = "⪯"; - var precnapprox = "⪹"; - var precneqq = "⪵"; - var precnsim = "⋨"; - var pre = "⪯"; - var prE = "⪳"; - var precsim = "≾"; - var prime = "′"; - var Prime = "″"; - var primes = "ℙ"; - var prnap = "⪹"; - var prnE = "⪵"; - var prnsim = "⋨"; - var prod = "∏"; - var Product = "∏"; - var profalar = "⌮"; - var profline = "⌒"; - var profsurf = "⌓"; - var prop = "∝"; - var Proportional = "∝"; - var Proportion = "∷"; - var propto = "∝"; - var prsim = "≾"; - var prurel = "⊰"; - var Pscr = "𝒫"; - var pscr = "𝓅"; - var Psi = "Ψ"; - var psi = "ψ"; - var puncsp = " "; - var Qfr = "𝔔"; - var qfr = "𝔮"; - var qint = "⨌"; - var qopf = "𝕢"; - var Qopf = "ℚ"; - var qprime = "⁗"; - var Qscr = "𝒬"; - var qscr = "𝓆"; - var quaternions = "ℍ"; - var quatint = "⨖"; - var quest = "?"; - var questeq = "≟"; - var quot$1 = "\""; - var QUOT = "\""; - var rAarr = "⇛"; - var race = "∽̱"; - var Racute = "Ŕ"; - var racute = "ŕ"; - var radic = "√"; - var raemptyv = "⦳"; - var rang = "⟩"; - var Rang = "⟫"; - var rangd = "⦒"; - var range = "⦥"; - var rangle = "⟩"; - var raquo = "»"; - var rarrap = "⥵"; - var rarrb = "⇥"; - var rarrbfs = "⤠"; - var rarrc = "⤳"; - var rarr = "→"; - var Rarr = "↠"; - var rArr = "⇒"; - var rarrfs = "⤞"; - var rarrhk = "↪"; - var rarrlp = "↬"; - var rarrpl = "⥅"; - var rarrsim = "⥴"; - var Rarrtl = "⤖"; - var rarrtl = "↣"; - var rarrw = "↝"; - var ratail = "⤚"; - var rAtail = "⤜"; - var ratio = "∶"; - var rationals = "ℚ"; - var rbarr = "⤍"; - var rBarr = "⤏"; - var RBarr = "⤐"; - var rbbrk = "❳"; - var rbrace = "}"; - var rbrack = "]"; - var rbrke = "⦌"; - var rbrksld = "⦎"; - var rbrkslu = "⦐"; - var Rcaron = "Ř"; - var rcaron = "ř"; - var Rcedil = "Ŗ"; - var rcedil = "ŗ"; - var rceil = "⌉"; - var rcub = "}"; - var Rcy = "Р"; - var rcy = "р"; - var rdca = "⤷"; - var rdldhar = "⥩"; - var rdquo = "”"; - var rdquor = "”"; - var rdsh = "↳"; - var real = "ℜ"; - var realine = "ℛ"; - var realpart = "ℜ"; - var reals = "ℝ"; - var Re = "ℜ"; - var rect = "▭"; - var reg = "®"; - var REG = "®"; - var ReverseElement = "∋"; - var ReverseEquilibrium = "⇋"; - var ReverseUpEquilibrium = "⥯"; - var rfisht = "⥽"; - var rfloor = "⌋"; - var rfr = "𝔯"; - var Rfr = "ℜ"; - var rHar = "⥤"; - var rhard = "⇁"; - var rharu = "⇀"; - var rharul = "⥬"; - var Rho = "Ρ"; - var rho = "ρ"; - var rhov = "ϱ"; - var RightAngleBracket = "⟩"; - var RightArrowBar = "⇥"; - var rightarrow = "→"; - var RightArrow = "→"; - var Rightarrow = "⇒"; - var RightArrowLeftArrow = "⇄"; - var rightarrowtail = "↣"; - var RightCeiling = "⌉"; - var RightDoubleBracket = "⟧"; - var RightDownTeeVector = "⥝"; - var RightDownVectorBar = "⥕"; - var RightDownVector = "⇂"; - var RightFloor = "⌋"; - var rightharpoondown = "⇁"; - var rightharpoonup = "⇀"; - var rightleftarrows = "⇄"; - var rightleftharpoons = "⇌"; - var rightrightarrows = "⇉"; - var rightsquigarrow = "↝"; - var RightTeeArrow = "↦"; - var RightTee = "⊢"; - var RightTeeVector = "⥛"; - var rightthreetimes = "⋌"; - var RightTriangleBar = "⧐"; - var RightTriangle = "⊳"; - var RightTriangleEqual = "⊵"; - var RightUpDownVector = "⥏"; - var RightUpTeeVector = "⥜"; - var RightUpVectorBar = "⥔"; - var RightUpVector = "↾"; - var RightVectorBar = "⥓"; - var RightVector = "⇀"; - var ring = "˚"; - var risingdotseq = "≓"; - var rlarr = "⇄"; - var rlhar = "⇌"; - var rlm = "‏"; - var rmoustache = "⎱"; - var rmoust = "⎱"; - var rnmid = "⫮"; - var roang = "⟭"; - var roarr = "⇾"; - var robrk = "⟧"; - var ropar = "⦆"; - var ropf = "𝕣"; - var Ropf = "ℝ"; - var roplus = "⨮"; - var rotimes = "⨵"; - var RoundImplies = "⥰"; - var rpar = ")"; - var rpargt = "⦔"; - var rppolint = "⨒"; - var rrarr = "⇉"; - var Rrightarrow = "⇛"; - var rsaquo = "›"; - var rscr = "𝓇"; - var Rscr = "ℛ"; - var rsh = "↱"; - var Rsh = "↱"; - var rsqb = "]"; - var rsquo = "’"; - var rsquor = "’"; - var rthree = "⋌"; - var rtimes = "⋊"; - var rtri = "▹"; - var rtrie = "⊵"; - var rtrif = "▸"; - var rtriltri = "⧎"; - var RuleDelayed = "⧴"; - var ruluhar = "⥨"; - var rx = "℞"; - var Sacute = "Ś"; - var sacute = "ś"; - var sbquo = "‚"; - var scap = "⪸"; - var Scaron = "Š"; - var scaron = "š"; - var Sc = "⪼"; - var sc = "≻"; - var sccue = "≽"; - var sce = "⪰"; - var scE = "⪴"; - var Scedil = "Ş"; - var scedil = "ş"; - var Scirc = "Ŝ"; - var scirc = "ŝ"; - var scnap = "⪺"; - var scnE = "⪶"; - var scnsim = "⋩"; - var scpolint = "⨓"; - var scsim = "≿"; - var Scy = "С"; - var scy = "с"; - var sdotb = "⊡"; - var sdot = "⋅"; - var sdote = "⩦"; - var searhk = "⤥"; - var searr = "↘"; - var seArr = "⇘"; - var searrow = "↘"; - var sect = "§"; - var semi = ";"; - var seswar = "⤩"; - var setminus = "∖"; - var setmn = "∖"; - var sext = "✶"; - var Sfr = "𝔖"; - var sfr = "𝔰"; - var sfrown = "⌢"; - var sharp = "♯"; - var SHCHcy = "Щ"; - var shchcy = "щ"; - var SHcy = "Ш"; - var shcy = "ш"; - var ShortDownArrow = "↓"; - var ShortLeftArrow = "←"; - var shortmid = "∣"; - var shortparallel = "∥"; - var ShortRightArrow = "→"; - var ShortUpArrow = "↑"; - var shy = "­"; - var Sigma = "Σ"; - var sigma = "σ"; - var sigmaf = "ς"; - var sigmav = "ς"; - var sim = "∼"; - var simdot = "⩪"; - var sime = "≃"; - var simeq = "≃"; - var simg = "⪞"; - var simgE = "⪠"; - var siml = "⪝"; - var simlE = "⪟"; - var simne = "≆"; - var simplus = "⨤"; - var simrarr = "⥲"; - var slarr = "←"; - var SmallCircle = "∘"; - var smallsetminus = "∖"; - var smashp = "⨳"; - var smeparsl = "⧤"; - var smid = "∣"; - var smile = "⌣"; - var smt = "⪪"; - var smte = "⪬"; - var smtes = "⪬︀"; - var SOFTcy = "Ь"; - var softcy = "ь"; - var solbar = "⌿"; - var solb = "⧄"; - var sol = "/"; - var Sopf = "𝕊"; - var sopf = "𝕤"; - var spades = "♠"; - var spadesuit = "♠"; - var spar = "∥"; - var sqcap = "⊓"; - var sqcaps = "⊓︀"; - var sqcup = "⊔"; - var sqcups = "⊔︀"; - var Sqrt = "√"; - var sqsub = "⊏"; - var sqsube = "⊑"; - var sqsubset = "⊏"; - var sqsubseteq = "⊑"; - var sqsup = "⊐"; - var sqsupe = "⊒"; - var sqsupset = "⊐"; - var sqsupseteq = "⊒"; - var square = "□"; - var Square = "□"; - var SquareIntersection = "⊓"; - var SquareSubset = "⊏"; - var SquareSubsetEqual = "⊑"; - var SquareSuperset = "⊐"; - var SquareSupersetEqual = "⊒"; - var SquareUnion = "⊔"; - var squarf = "▪"; - var squ = "□"; - var squf = "▪"; - var srarr = "→"; - var Sscr = "𝒮"; - var sscr = "𝓈"; - var ssetmn = "∖"; - var ssmile = "⌣"; - var sstarf = "⋆"; - var Star = "⋆"; - var star = "☆"; - var starf = "★"; - var straightepsilon = "ϵ"; - var straightphi = "ϕ"; - var strns = "¯"; - var sub = "⊂"; - var Sub = "⋐"; - var subdot = "⪽"; - var subE = "⫅"; - var sube = "⊆"; - var subedot = "⫃"; - var submult = "⫁"; - var subnE = "⫋"; - var subne = "⊊"; - var subplus = "⪿"; - var subrarr = "⥹"; - var subset = "⊂"; - var Subset = "⋐"; - var subseteq = "⊆"; - var subseteqq = "⫅"; - var SubsetEqual = "⊆"; - var subsetneq = "⊊"; - var subsetneqq = "⫋"; - var subsim = "⫇"; - var subsub = "⫕"; - var subsup = "⫓"; - var succapprox = "⪸"; - var succ = "≻"; - var succcurlyeq = "≽"; - var Succeeds = "≻"; - var SucceedsEqual = "⪰"; - var SucceedsSlantEqual = "≽"; - var SucceedsTilde = "≿"; - var succeq = "⪰"; - var succnapprox = "⪺"; - var succneqq = "⪶"; - var succnsim = "⋩"; - var succsim = "≿"; - var SuchThat = "∋"; - var sum = "∑"; - var Sum = "∑"; - var sung = "♪"; - var sup1 = "¹"; - var sup2 = "²"; - var sup3 = "³"; - var sup = "⊃"; - var Sup = "⋑"; - var supdot = "⪾"; - var supdsub = "⫘"; - var supE = "⫆"; - var supe = "⊇"; - var supedot = "⫄"; - var Superset = "⊃"; - var SupersetEqual = "⊇"; - var suphsol = "⟉"; - var suphsub = "⫗"; - var suplarr = "⥻"; - var supmult = "⫂"; - var supnE = "⫌"; - var supne = "⊋"; - var supplus = "⫀"; - var supset = "⊃"; - var Supset = "⋑"; - var supseteq = "⊇"; - var supseteqq = "⫆"; - var supsetneq = "⊋"; - var supsetneqq = "⫌"; - var supsim = "⫈"; - var supsub = "⫔"; - var supsup = "⫖"; - var swarhk = "⤦"; - var swarr = "↙"; - var swArr = "⇙"; - var swarrow = "↙"; - var swnwar = "⤪"; - var szlig = "ß"; - var Tab = "\t"; - var target = "⌖"; - var Tau = "Τ"; - var tau = "τ"; - var tbrk = "⎴"; - var Tcaron = "Ť"; - var tcaron = "ť"; - var Tcedil = "Ţ"; - var tcedil = "ţ"; - var Tcy = "Т"; - var tcy = "т"; - var tdot = "⃛"; - var telrec = "⌕"; - var Tfr = "𝔗"; - var tfr = "𝔱"; - var there4 = "∴"; - var therefore = "∴"; - var Therefore = "∴"; - var Theta = "Θ"; - var theta = "θ"; - var thetasym = "ϑ"; - var thetav = "ϑ"; - var thickapprox = "≈"; - var thicksim = "∼"; - var ThickSpace = "  "; - var ThinSpace = " "; - var thinsp = " "; - var thkap = "≈"; - var thksim = "∼"; - var THORN = "Þ"; - var thorn = "þ"; - var tilde = "˜"; - var Tilde = "∼"; - var TildeEqual = "≃"; - var TildeFullEqual = "≅"; - var TildeTilde = "≈"; - var timesbar = "⨱"; - var timesb = "⊠"; - var times = "×"; - var timesd = "⨰"; - var tint = "∭"; - var toea = "⤨"; - var topbot = "⌶"; - var topcir = "⫱"; - var top = "⊤"; - var Topf = "𝕋"; - var topf = "𝕥"; - var topfork = "⫚"; - var tosa = "⤩"; - var tprime = "‴"; - var trade = "™"; - var TRADE = "™"; - var triangle = "▵"; - var triangledown = "▿"; - var triangleleft = "◃"; - var trianglelefteq = "⊴"; - var triangleq = "≜"; - var triangleright = "▹"; - var trianglerighteq = "⊵"; - var tridot = "◬"; - var trie = "≜"; - var triminus = "⨺"; - var TripleDot = "⃛"; - var triplus = "⨹"; - var trisb = "⧍"; - var tritime = "⨻"; - var trpezium = "⏢"; - var Tscr = "𝒯"; - var tscr = "𝓉"; - var TScy = "Ц"; - var tscy = "ц"; - var TSHcy = "Ћ"; - var tshcy = "ћ"; - var Tstrok = "Ŧ"; - var tstrok = "ŧ"; - var twixt = "≬"; - var twoheadleftarrow = "↞"; - var twoheadrightarrow = "↠"; - var Uacute = "Ú"; - var uacute = "ú"; - var uarr = "↑"; - var Uarr = "↟"; - var uArr = "⇑"; - var Uarrocir = "⥉"; - var Ubrcy = "Ў"; - var ubrcy = "ў"; - var Ubreve = "Ŭ"; - var ubreve = "ŭ"; - var Ucirc = "Û"; - var ucirc = "û"; - var Ucy = "У"; - var ucy = "у"; - var udarr = "⇅"; - var Udblac = "Ű"; - var udblac = "ű"; - var udhar = "⥮"; - var ufisht = "⥾"; - var Ufr = "𝔘"; - var ufr = "𝔲"; - var Ugrave = "Ù"; - var ugrave = "ù"; - var uHar = "⥣"; - var uharl = "↿"; - var uharr = "↾"; - var uhblk = "▀"; - var ulcorn = "⌜"; - var ulcorner = "⌜"; - var ulcrop = "⌏"; - var ultri = "◸"; - var Umacr = "Ū"; - var umacr = "ū"; - var uml = "¨"; - var UnderBar = "_"; - var UnderBrace = "⏟"; - var UnderBracket = "⎵"; - var UnderParenthesis = "⏝"; - var Union = "⋃"; - var UnionPlus = "⊎"; - var Uogon = "Ų"; - var uogon = "ų"; - var Uopf = "𝕌"; - var uopf = "𝕦"; - var UpArrowBar = "⤒"; - var uparrow = "↑"; - var UpArrow = "↑"; - var Uparrow = "⇑"; - var UpArrowDownArrow = "⇅"; - var updownarrow = "↕"; - var UpDownArrow = "↕"; - var Updownarrow = "⇕"; - var UpEquilibrium = "⥮"; - var upharpoonleft = "↿"; - var upharpoonright = "↾"; - var uplus = "⊎"; - var UpperLeftArrow = "↖"; - var UpperRightArrow = "↗"; - var upsi = "υ"; - var Upsi = "ϒ"; - var upsih = "ϒ"; - var Upsilon = "Υ"; - var upsilon = "υ"; - var UpTeeArrow = "↥"; - var UpTee = "⊥"; - var upuparrows = "⇈"; - var urcorn = "⌝"; - var urcorner = "⌝"; - var urcrop = "⌎"; - var Uring = "Ů"; - var uring = "ů"; - var urtri = "◹"; - var Uscr = "𝒰"; - var uscr = "𝓊"; - var utdot = "⋰"; - var Utilde = "Ũ"; - var utilde = "ũ"; - var utri = "▵"; - var utrif = "▴"; - var uuarr = "⇈"; - var Uuml = "Ü"; - var uuml = "ü"; - var uwangle = "⦧"; - var vangrt = "⦜"; - var varepsilon = "ϵ"; - var varkappa = "ϰ"; - var varnothing = "∅"; - var varphi = "ϕ"; - var varpi = "ϖ"; - var varpropto = "∝"; - var varr = "↕"; - var vArr = "⇕"; - var varrho = "ϱ"; - var varsigma = "ς"; - var varsubsetneq = "⊊︀"; - var varsubsetneqq = "⫋︀"; - var varsupsetneq = "⊋︀"; - var varsupsetneqq = "⫌︀"; - var vartheta = "ϑ"; - var vartriangleleft = "⊲"; - var vartriangleright = "⊳"; - var vBar = "⫨"; - var Vbar = "⫫"; - var vBarv = "⫩"; - var Vcy = "В"; - var vcy = "в"; - var vdash = "⊢"; - var vDash = "⊨"; - var Vdash = "⊩"; - var VDash = "⊫"; - var Vdashl = "⫦"; - var veebar = "⊻"; - var vee = "∨"; - var Vee = "⋁"; - var veeeq = "≚"; - var vellip = "⋮"; - var verbar = "|"; - var Verbar = "‖"; - var vert = "|"; - var Vert = "‖"; - var VerticalBar = "∣"; - var VerticalLine = "|"; - var VerticalSeparator = "❘"; - var VerticalTilde = "≀"; - var VeryThinSpace = " "; - var Vfr = "𝔙"; - var vfr = "𝔳"; - var vltri = "⊲"; - var vnsub = "⊂⃒"; - var vnsup = "⊃⃒"; - var Vopf = "𝕍"; - var vopf = "𝕧"; - var vprop = "∝"; - var vrtri = "⊳"; - var Vscr = "𝒱"; - var vscr = "𝓋"; - var vsubnE = "⫋︀"; - var vsubne = "⊊︀"; - var vsupnE = "⫌︀"; - var vsupne = "⊋︀"; - var Vvdash = "⊪"; - var vzigzag = "⦚"; - var Wcirc = "Ŵ"; - var wcirc = "ŵ"; - var wedbar = "⩟"; - var wedge = "∧"; - var Wedge = "⋀"; - var wedgeq = "≙"; - var weierp = "℘"; - var Wfr = "𝔚"; - var wfr = "𝔴"; - var Wopf = "𝕎"; - var wopf = "𝕨"; - var wp = "℘"; - var wr = "≀"; - var wreath = "≀"; - var Wscr = "𝒲"; - var wscr = "𝓌"; - var xcap = "⋂"; - var xcirc = "◯"; - var xcup = "⋃"; - var xdtri = "▽"; - var Xfr = "𝔛"; - var xfr = "𝔵"; - var xharr = "⟷"; - var xhArr = "⟺"; - var Xi = "Ξ"; - var xi = "ξ"; - var xlarr = "⟵"; - var xlArr = "⟸"; - var xmap = "⟼"; - var xnis = "⋻"; - var xodot = "⨀"; - var Xopf = "𝕏"; - var xopf = "𝕩"; - var xoplus = "⨁"; - var xotime = "⨂"; - var xrarr = "⟶"; - var xrArr = "⟹"; - var Xscr = "𝒳"; - var xscr = "𝓍"; - var xsqcup = "⨆"; - var xuplus = "⨄"; - var xutri = "△"; - var xvee = "⋁"; - var xwedge = "⋀"; - var Yacute = "Ý"; - var yacute = "ý"; - var YAcy = "Я"; - var yacy = "я"; - var Ycirc = "Ŷ"; - var ycirc = "ŷ"; - var Ycy = "Ы"; - var ycy = "ы"; - var yen = "¥"; - var Yfr = "𝔜"; - var yfr = "𝔶"; - var YIcy = "Ї"; - var yicy = "ї"; - var Yopf = "𝕐"; - var yopf = "𝕪"; - var Yscr = "𝒴"; - var yscr = "𝓎"; - var YUcy = "Ю"; - var yucy = "ю"; - var yuml = "ÿ"; - var Yuml = "Ÿ"; - var Zacute = "Ź"; - var zacute = "ź"; - var Zcaron = "Ž"; - var zcaron = "ž"; - var Zcy = "З"; - var zcy = "з"; - var Zdot = "Ż"; - var zdot = "ż"; - var zeetrf = "ℨ"; - var ZeroWidthSpace = "​"; - var Zeta = "Ζ"; - var zeta = "ζ"; - var zfr = "𝔷"; - var Zfr = "ℨ"; - var ZHcy = "Ж"; - var zhcy = "ж"; - var zigrarr = "⇝"; - var zopf = "𝕫"; - var Zopf = "ℤ"; - var Zscr = "𝒵"; - var zscr = "𝓏"; - var zwj = "‍"; - var zwnj = "‌"; - var entities = { - Aacute: Aacute, - aacute: aacute, - Abreve: Abreve, - abreve: abreve, - ac: ac, - acd: acd, - acE: acE, - Acirc: Acirc, - acirc: acirc, - acute: acute, - Acy: Acy, - acy: acy, - AElig: AElig, - aelig: aelig, - af: af, - Afr: Afr, - afr: afr, - Agrave: Agrave, - agrave: agrave, - alefsym: alefsym, - aleph: aleph, - Alpha: Alpha, - alpha: alpha, - Amacr: Amacr, - amacr: amacr, - amalg: amalg, - amp: amp$1, - AMP: AMP, - andand: andand, - And: And, - and: and, - andd: andd, - andslope: andslope, - andv: andv, - ang: ang, - ange: ange, - angle: angle, - angmsdaa: angmsdaa, - angmsdab: angmsdab, - angmsdac: angmsdac, - angmsdad: angmsdad, - angmsdae: angmsdae, - angmsdaf: angmsdaf, - angmsdag: angmsdag, - angmsdah: angmsdah, - angmsd: angmsd, - angrt: angrt, - angrtvb: angrtvb, - angrtvbd: angrtvbd, - angsph: angsph, - angst: angst, - angzarr: angzarr, - Aogon: Aogon, - aogon: aogon, - Aopf: Aopf, - aopf: aopf, - apacir: apacir, - ap: ap, - apE: apE, - ape: ape, - apid: apid, - apos: apos$1, - ApplyFunction: ApplyFunction, - approx: approx, - approxeq: approxeq, - Aring: Aring, - aring: aring, - Ascr: Ascr, - ascr: ascr, - Assign: Assign, - ast: ast, - asymp: asymp, - asympeq: asympeq, - Atilde: Atilde, - atilde: atilde, - Auml: Auml, - auml: auml, - awconint: awconint, - awint: awint, - backcong: backcong, - backepsilon: backepsilon, - backprime: backprime, - backsim: backsim, - backsimeq: backsimeq, - Backslash: Backslash, - Barv: Barv, - barvee: barvee, - barwed: barwed, - Barwed: Barwed, - barwedge: barwedge, - bbrk: bbrk, - bbrktbrk: bbrktbrk, - bcong: bcong, - Bcy: Bcy, - bcy: bcy, - bdquo: bdquo, - becaus: becaus, - because: because, - Because: Because, - bemptyv: bemptyv, - bepsi: bepsi, - bernou: bernou, - Bernoullis: Bernoullis, - Beta: Beta, - beta: beta, - beth: beth, - between: between, - Bfr: Bfr, - bfr: bfr, - bigcap: bigcap, - bigcirc: bigcirc, - bigcup: bigcup, - bigodot: bigodot, - bigoplus: bigoplus, - bigotimes: bigotimes, - bigsqcup: bigsqcup, - bigstar: bigstar, - bigtriangledown: bigtriangledown, - bigtriangleup: bigtriangleup, - biguplus: biguplus, - bigvee: bigvee, - bigwedge: bigwedge, - bkarow: bkarow, - blacklozenge: blacklozenge, - blacksquare: blacksquare, - blacktriangle: blacktriangle, - blacktriangledown: blacktriangledown, - blacktriangleleft: blacktriangleleft, - blacktriangleright: blacktriangleright, - blank: blank, - blk12: blk12, - blk14: blk14, - blk34: blk34, - block: block, - bne: bne, - bnequiv: bnequiv, - bNot: bNot, - bnot: bnot, - Bopf: Bopf, - bopf: bopf, - bot: bot, - bottom: bottom, - bowtie: bowtie, - boxbox: boxbox, - boxdl: boxdl, - boxdL: boxdL, - boxDl: boxDl, - boxDL: boxDL, - boxdr: boxdr, - boxdR: boxdR, - boxDr: boxDr, - boxDR: boxDR, - boxh: boxh, - boxH: boxH, - boxhd: boxhd, - boxHd: boxHd, - boxhD: boxhD, - boxHD: boxHD, - boxhu: boxhu, - boxHu: boxHu, - boxhU: boxhU, - boxHU: boxHU, - boxminus: boxminus, - boxplus: boxplus, - boxtimes: boxtimes, - boxul: boxul, - boxuL: boxuL, - boxUl: boxUl, - boxUL: boxUL, - boxur: boxur, - boxuR: boxuR, - boxUr: boxUr, - boxUR: boxUR, - boxv: boxv, - boxV: boxV, - boxvh: boxvh, - boxvH: boxvH, - boxVh: boxVh, - boxVH: boxVH, - boxvl: boxvl, - boxvL: boxvL, - boxVl: boxVl, - boxVL: boxVL, - boxvr: boxvr, - boxvR: boxvR, - boxVr: boxVr, - boxVR: boxVR, - bprime: bprime, - breve: breve, - Breve: Breve, - brvbar: brvbar, - bscr: bscr, - Bscr: Bscr, - bsemi: bsemi, - bsim: bsim, - bsime: bsime, - bsolb: bsolb, - bsol: bsol, - bsolhsub: bsolhsub, - bull: bull, - bullet: bullet, - bump: bump, - bumpE: bumpE, - bumpe: bumpe, - Bumpeq: Bumpeq, - bumpeq: bumpeq, - Cacute: Cacute, - cacute: cacute, - capand: capand, - capbrcup: capbrcup, - capcap: capcap, - cap: cap, - Cap: Cap, - capcup: capcup, - capdot: capdot, - CapitalDifferentialD: CapitalDifferentialD, - caps: caps, - caret: caret, - caron: caron, - Cayleys: Cayleys, - ccaps: ccaps, - Ccaron: Ccaron, - ccaron: ccaron, - Ccedil: Ccedil, - ccedil: ccedil, - Ccirc: Ccirc, - ccirc: ccirc, - Cconint: Cconint, - ccups: ccups, - ccupssm: ccupssm, - Cdot: Cdot, - cdot: cdot, - cedil: cedil, - Cedilla: Cedilla, - cemptyv: cemptyv, - cent: cent, - centerdot: centerdot, - CenterDot: CenterDot, - cfr: cfr, - Cfr: Cfr, - CHcy: CHcy, - chcy: chcy, - check: check, - checkmark: checkmark, - Chi: Chi, - chi: chi, - circ: circ, - circeq: circeq, - circlearrowleft: circlearrowleft, - circlearrowright: circlearrowright, - circledast: circledast, - circledcirc: circledcirc, - circleddash: circleddash, - CircleDot: CircleDot, - circledR: circledR, - circledS: circledS, - CircleMinus: CircleMinus, - CirclePlus: CirclePlus, - CircleTimes: CircleTimes, - cir: cir, - cirE: cirE, - cire: cire, - cirfnint: cirfnint, - cirmid: cirmid, - cirscir: cirscir, - ClockwiseContourIntegral: ClockwiseContourIntegral, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, - CloseCurlyQuote: CloseCurlyQuote, - clubs: clubs, - clubsuit: clubsuit, - colon: colon, - Colon: Colon, - Colone: Colone, - colone: colone, - coloneq: coloneq, - comma: comma, - commat: commat, - comp: comp, - compfn: compfn, - complement: complement, - complexes: complexes, - cong: cong, - congdot: congdot, - Congruent: Congruent, - conint: conint, - Conint: Conint, - ContourIntegral: ContourIntegral, - copf: copf, - Copf: Copf, - coprod: coprod, - Coproduct: Coproduct, - copy: copy, - COPY: COPY, - copysr: copysr, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, - crarr: crarr, - cross: cross, - Cross: Cross, - Cscr: Cscr, - cscr: cscr, - csub: csub, - csube: csube, - csup: csup, - csupe: csupe, - ctdot: ctdot, - cudarrl: cudarrl, - cudarrr: cudarrr, - cuepr: cuepr, - cuesc: cuesc, - cularr: cularr, - cularrp: cularrp, - cupbrcap: cupbrcap, - cupcap: cupcap, - CupCap: CupCap, - cup: cup, - Cup: Cup, - cupcup: cupcup, - cupdot: cupdot, - cupor: cupor, - cups: cups, - curarr: curarr, - curarrm: curarrm, - curlyeqprec: curlyeqprec, - curlyeqsucc: curlyeqsucc, - curlyvee: curlyvee, - curlywedge: curlywedge, - curren: curren, - curvearrowleft: curvearrowleft, - curvearrowright: curvearrowright, - cuvee: cuvee, - cuwed: cuwed, - cwconint: cwconint, - cwint: cwint, - cylcty: cylcty, - dagger: dagger, - Dagger: Dagger, - daleth: daleth, - darr: darr, - Darr: Darr, - dArr: dArr, - dash: dash, - Dashv: Dashv, - dashv: dashv, - dbkarow: dbkarow, - dblac: dblac, - Dcaron: Dcaron, - dcaron: dcaron, - Dcy: Dcy, - dcy: dcy, - ddagger: ddagger, - ddarr: ddarr, - DD: DD, - dd: dd, - DDotrahd: DDotrahd, - ddotseq: ddotseq, - deg: deg, - Del: Del, - Delta: Delta, - delta: delta, - demptyv: demptyv, - dfisht: dfisht, - Dfr: Dfr, - dfr: dfr, - dHar: dHar, - dharl: dharl, - dharr: dharr, - DiacriticalAcute: DiacriticalAcute, - DiacriticalDot: DiacriticalDot, - DiacriticalDoubleAcute: DiacriticalDoubleAcute, - DiacriticalGrave: DiacriticalGrave, - DiacriticalTilde: DiacriticalTilde, - diam: diam, - diamond: diamond, - Diamond: Diamond, - diamondsuit: diamondsuit, - diams: diams, - die: die, - DifferentialD: DifferentialD, - digamma: digamma, - disin: disin, - div: div, - divide: divide, - divideontimes: divideontimes, - divonx: divonx, - DJcy: DJcy, - djcy: djcy, - dlcorn: dlcorn, - dlcrop: dlcrop, - dollar: dollar, - Dopf: Dopf, - dopf: dopf, - Dot: Dot, - dot: dot, - DotDot: DotDot, - doteq: doteq, - doteqdot: doteqdot, - DotEqual: DotEqual, - dotminus: dotminus, - dotplus: dotplus, - dotsquare: dotsquare, - doublebarwedge: doublebarwedge, - DoubleContourIntegral: DoubleContourIntegral, - DoubleDot: DoubleDot, - DoubleDownArrow: DoubleDownArrow, - DoubleLeftArrow: DoubleLeftArrow, - DoubleLeftRightArrow: DoubleLeftRightArrow, - DoubleLeftTee: DoubleLeftTee, - DoubleLongLeftArrow: DoubleLongLeftArrow, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, - DoubleLongRightArrow: DoubleLongRightArrow, - DoubleRightArrow: DoubleRightArrow, - DoubleRightTee: DoubleRightTee, - DoubleUpArrow: DoubleUpArrow, - DoubleUpDownArrow: DoubleUpDownArrow, - DoubleVerticalBar: DoubleVerticalBar, - DownArrowBar: DownArrowBar, - downarrow: downarrow, - DownArrow: DownArrow, - Downarrow: Downarrow, - DownArrowUpArrow: DownArrowUpArrow, - DownBreve: DownBreve, - downdownarrows: downdownarrows, - downharpoonleft: downharpoonleft, - downharpoonright: downharpoonright, - DownLeftRightVector: DownLeftRightVector, - DownLeftTeeVector: DownLeftTeeVector, - DownLeftVectorBar: DownLeftVectorBar, - DownLeftVector: DownLeftVector, - DownRightTeeVector: DownRightTeeVector, - DownRightVectorBar: DownRightVectorBar, - DownRightVector: DownRightVector, - DownTeeArrow: DownTeeArrow, - DownTee: DownTee, - drbkarow: drbkarow, - drcorn: drcorn, - drcrop: drcrop, - Dscr: Dscr, - dscr: dscr, - DScy: DScy, - dscy: dscy, - dsol: dsol, - Dstrok: Dstrok, - dstrok: dstrok, - dtdot: dtdot, - dtri: dtri, - dtrif: dtrif, - duarr: duarr, - duhar: duhar, - dwangle: dwangle, - DZcy: DZcy, - dzcy: dzcy, - dzigrarr: dzigrarr, - Eacute: Eacute, - eacute: eacute, - easter: easter, - Ecaron: Ecaron, - ecaron: ecaron, - Ecirc: Ecirc, - ecirc: ecirc, - ecir: ecir, - ecolon: ecolon, - Ecy: Ecy, - ecy: ecy, - eDDot: eDDot, - Edot: Edot, - edot: edot, - eDot: eDot, - ee: ee, - efDot: efDot, - Efr: Efr, - efr: efr, - eg: eg, - Egrave: Egrave, - egrave: egrave, - egs: egs, - egsdot: egsdot, - el: el, - Element: Element, - elinters: elinters, - ell: ell, - els: els, - elsdot: elsdot, - Emacr: Emacr, - emacr: emacr, - empty: empty, - emptyset: emptyset, - EmptySmallSquare: EmptySmallSquare, - emptyv: emptyv, - EmptyVerySmallSquare: EmptyVerySmallSquare, - emsp13: emsp13, - emsp14: emsp14, - emsp: emsp, - ENG: ENG, - eng: eng, - ensp: ensp, - Eogon: Eogon, - eogon: eogon, - Eopf: Eopf, - eopf: eopf, - epar: epar, - eparsl: eparsl, - eplus: eplus, - epsi: epsi, - Epsilon: Epsilon, - epsilon: epsilon, - epsiv: epsiv, - eqcirc: eqcirc, - eqcolon: eqcolon, - eqsim: eqsim, - eqslantgtr: eqslantgtr, - eqslantless: eqslantless, - Equal: Equal, - equals: equals, - EqualTilde: EqualTilde, - equest: equest, - Equilibrium: Equilibrium, - equiv: equiv, - equivDD: equivDD, - eqvparsl: eqvparsl, - erarr: erarr, - erDot: erDot, - escr: escr, - Escr: Escr, - esdot: esdot, - Esim: Esim, - esim: esim, - Eta: Eta, - eta: eta, - ETH: ETH, - eth: eth, - Euml: Euml, - euml: euml, - euro: euro, - excl: excl, - exist: exist, - Exists: Exists, - expectation: expectation, - exponentiale: exponentiale, - ExponentialE: ExponentialE, - fallingdotseq: fallingdotseq, - Fcy: Fcy, - fcy: fcy, - female: female, - ffilig: ffilig, - fflig: fflig, - ffllig: ffllig, - Ffr: Ffr, - ffr: ffr, - filig: filig, - FilledSmallSquare: FilledSmallSquare, - FilledVerySmallSquare: FilledVerySmallSquare, - fjlig: fjlig, - flat: flat, - fllig: fllig, - fltns: fltns, - fnof: fnof, - Fopf: Fopf, - fopf: fopf, - forall: forall, - ForAll: ForAll, - fork: fork, - forkv: forkv, - Fouriertrf: Fouriertrf, - fpartint: fpartint, - frac12: frac12, - frac13: frac13, - frac14: frac14, - frac15: frac15, - frac16: frac16, - frac18: frac18, - frac23: frac23, - frac25: frac25, - frac34: frac34, - frac35: frac35, - frac38: frac38, - frac45: frac45, - frac56: frac56, - frac58: frac58, - frac78: frac78, - frasl: frasl, - frown: frown, - fscr: fscr, - Fscr: Fscr, - gacute: gacute, - Gamma: Gamma, - gamma: gamma, - Gammad: Gammad, - gammad: gammad, - gap: gap, - Gbreve: Gbreve, - gbreve: gbreve, - Gcedil: Gcedil, - Gcirc: Gcirc, - gcirc: gcirc, - Gcy: Gcy, - gcy: gcy, - Gdot: Gdot, - gdot: gdot, - ge: ge, - gE: gE, - gEl: gEl, - gel: gel, - geq: geq, - geqq: geqq, - geqslant: geqslant, - gescc: gescc, - ges: ges, - gesdot: gesdot, - gesdoto: gesdoto, - gesdotol: gesdotol, - gesl: gesl, - gesles: gesles, - Gfr: Gfr, - gfr: gfr, - gg: gg, - Gg: Gg, - ggg: ggg, - gimel: gimel, - GJcy: GJcy, - gjcy: gjcy, - gla: gla, - gl: gl, - glE: glE, - glj: glj, - gnap: gnap, - gnapprox: gnapprox, - gne: gne, - gnE: gnE, - gneq: gneq, - gneqq: gneqq, - gnsim: gnsim, - Gopf: Gopf, - gopf: gopf, - grave: grave, - GreaterEqual: GreaterEqual, - GreaterEqualLess: GreaterEqualLess, - GreaterFullEqual: GreaterFullEqual, - GreaterGreater: GreaterGreater, - GreaterLess: GreaterLess, - GreaterSlantEqual: GreaterSlantEqual, - GreaterTilde: GreaterTilde, - Gscr: Gscr, - gscr: gscr, - gsim: gsim, - gsime: gsime, - gsiml: gsiml, - gtcc: gtcc, - gtcir: gtcir, - gt: gt$1, - GT: GT, - Gt: Gt, - gtdot: gtdot, - gtlPar: gtlPar, - gtquest: gtquest, - gtrapprox: gtrapprox, - gtrarr: gtrarr, - gtrdot: gtrdot, - gtreqless: gtreqless, - gtreqqless: gtreqqless, - gtrless: gtrless, - gtrsim: gtrsim, - gvertneqq: gvertneqq, - gvnE: gvnE, - Hacek: Hacek, - hairsp: hairsp, - half: half, - hamilt: hamilt, - HARDcy: HARDcy, - hardcy: hardcy, - harrcir: harrcir, - harr: harr, - hArr: hArr, - harrw: harrw, - Hat: Hat, - hbar: hbar, - Hcirc: Hcirc, - hcirc: hcirc, - hearts: hearts, - heartsuit: heartsuit, - hellip: hellip, - hercon: hercon, - hfr: hfr, - Hfr: Hfr, - HilbertSpace: HilbertSpace, - hksearow: hksearow, - hkswarow: hkswarow, - hoarr: hoarr, - homtht: homtht, - hookleftarrow: hookleftarrow, - hookrightarrow: hookrightarrow, - hopf: hopf, - Hopf: Hopf, - horbar: horbar, - HorizontalLine: HorizontalLine, - hscr: hscr, - Hscr: Hscr, - hslash: hslash, - Hstrok: Hstrok, - hstrok: hstrok, - HumpDownHump: HumpDownHump, - HumpEqual: HumpEqual, - hybull: hybull, - hyphen: hyphen, - Iacute: Iacute, - iacute: iacute, - ic: ic, - Icirc: Icirc, - icirc: icirc, - Icy: Icy, - icy: icy, - Idot: Idot, - IEcy: IEcy, - iecy: iecy, - iexcl: iexcl, - iff: iff, - ifr: ifr, - Ifr: Ifr, - Igrave: Igrave, - igrave: igrave, - ii: ii, - iiiint: iiiint, - iiint: iiint, - iinfin: iinfin, - iiota: iiota, - IJlig: IJlig, - ijlig: ijlig, - Imacr: Imacr, - imacr: imacr, - image: image, - ImaginaryI: ImaginaryI, - imagline: imagline, - imagpart: imagpart, - imath: imath, - Im: Im, - imof: imof, - imped: imped, - Implies: Implies, - incare: incare, - "in": "∈", - infin: infin, - infintie: infintie, - inodot: inodot, - intcal: intcal, - int: int, - Int: Int, - integers: integers, - Integral: Integral, - intercal: intercal, - Intersection: Intersection, - intlarhk: intlarhk, - intprod: intprod, - InvisibleComma: InvisibleComma, - InvisibleTimes: InvisibleTimes, - IOcy: IOcy, - iocy: iocy, - Iogon: Iogon, - iogon: iogon, - Iopf: Iopf, - iopf: iopf, - Iota: Iota, - iota: iota, - iprod: iprod, - iquest: iquest, - iscr: iscr, - Iscr: Iscr, - isin: isin, - isindot: isindot, - isinE: isinE, - isins: isins, - isinsv: isinsv, - isinv: isinv, - it: it, - Itilde: Itilde, - itilde: itilde, - Iukcy: Iukcy, - iukcy: iukcy, - Iuml: Iuml, - iuml: iuml, - Jcirc: Jcirc, - jcirc: jcirc, - Jcy: Jcy, - jcy: jcy, - Jfr: Jfr, - jfr: jfr, - jmath: jmath, - Jopf: Jopf, - jopf: jopf, - Jscr: Jscr, - jscr: jscr, - Jsercy: Jsercy, - jsercy: jsercy, - Jukcy: Jukcy, - jukcy: jukcy, - Kappa: Kappa, - kappa: kappa, - kappav: kappav, - Kcedil: Kcedil, - kcedil: kcedil, - Kcy: Kcy, - kcy: kcy, - Kfr: Kfr, - kfr: kfr, - kgreen: kgreen, - KHcy: KHcy, - khcy: khcy, - KJcy: KJcy, - kjcy: kjcy, - Kopf: Kopf, - kopf: kopf, - Kscr: Kscr, - kscr: kscr, - lAarr: lAarr, - Lacute: Lacute, - lacute: lacute, - laemptyv: laemptyv, - lagran: lagran, - Lambda: Lambda, - lambda: lambda, - lang: lang, - Lang: Lang, - langd: langd, - langle: langle, - lap: lap, - Laplacetrf: Laplacetrf, - laquo: laquo, - larrb: larrb, - larrbfs: larrbfs, - larr: larr, - Larr: Larr, - lArr: lArr, - larrfs: larrfs, - larrhk: larrhk, - larrlp: larrlp, - larrpl: larrpl, - larrsim: larrsim, - larrtl: larrtl, - latail: latail, - lAtail: lAtail, - lat: lat, - late: late, - lates: lates, - lbarr: lbarr, - lBarr: lBarr, - lbbrk: lbbrk, - lbrace: lbrace, - lbrack: lbrack, - lbrke: lbrke, - lbrksld: lbrksld, - lbrkslu: lbrkslu, - Lcaron: Lcaron, - lcaron: lcaron, - Lcedil: Lcedil, - lcedil: lcedil, - lceil: lceil, - lcub: lcub, - Lcy: Lcy, - lcy: lcy, - ldca: ldca, - ldquo: ldquo, - ldquor: ldquor, - ldrdhar: ldrdhar, - ldrushar: ldrushar, - ldsh: ldsh, - le: le, - lE: lE, - LeftAngleBracket: LeftAngleBracket, - LeftArrowBar: LeftArrowBar, - leftarrow: leftarrow, - LeftArrow: LeftArrow, - Leftarrow: Leftarrow, - LeftArrowRightArrow: LeftArrowRightArrow, - leftarrowtail: leftarrowtail, - LeftCeiling: LeftCeiling, - LeftDoubleBracket: LeftDoubleBracket, - LeftDownTeeVector: LeftDownTeeVector, - LeftDownVectorBar: LeftDownVectorBar, - LeftDownVector: LeftDownVector, - LeftFloor: LeftFloor, - leftharpoondown: leftharpoondown, - leftharpoonup: leftharpoonup, - leftleftarrows: leftleftarrows, - leftrightarrow: leftrightarrow, - LeftRightArrow: LeftRightArrow, - Leftrightarrow: Leftrightarrow, - leftrightarrows: leftrightarrows, - leftrightharpoons: leftrightharpoons, - leftrightsquigarrow: leftrightsquigarrow, - LeftRightVector: LeftRightVector, - LeftTeeArrow: LeftTeeArrow, - LeftTee: LeftTee, - LeftTeeVector: LeftTeeVector, - leftthreetimes: leftthreetimes, - LeftTriangleBar: LeftTriangleBar, - LeftTriangle: LeftTriangle, - LeftTriangleEqual: LeftTriangleEqual, - LeftUpDownVector: LeftUpDownVector, - LeftUpTeeVector: LeftUpTeeVector, - LeftUpVectorBar: LeftUpVectorBar, - LeftUpVector: LeftUpVector, - LeftVectorBar: LeftVectorBar, - LeftVector: LeftVector, - lEg: lEg, - leg: leg, - leq: leq, - leqq: leqq, - leqslant: leqslant, - lescc: lescc, - les: les, - lesdot: lesdot, - lesdoto: lesdoto, - lesdotor: lesdotor, - lesg: lesg, - lesges: lesges, - lessapprox: lessapprox, - lessdot: lessdot, - lesseqgtr: lesseqgtr, - lesseqqgtr: lesseqqgtr, - LessEqualGreater: LessEqualGreater, - LessFullEqual: LessFullEqual, - LessGreater: LessGreater, - lessgtr: lessgtr, - LessLess: LessLess, - lesssim: lesssim, - LessSlantEqual: LessSlantEqual, - LessTilde: LessTilde, - lfisht: lfisht, - lfloor: lfloor, - Lfr: Lfr, - lfr: lfr, - lg: lg, - lgE: lgE, - lHar: lHar, - lhard: lhard, - lharu: lharu, - lharul: lharul, - lhblk: lhblk, - LJcy: LJcy, - ljcy: ljcy, - llarr: llarr, - ll: ll, - Ll: Ll, - llcorner: llcorner, - Lleftarrow: Lleftarrow, - llhard: llhard, - lltri: lltri, - Lmidot: Lmidot, - lmidot: lmidot, - lmoustache: lmoustache, - lmoust: lmoust, - lnap: lnap, - lnapprox: lnapprox, - lne: lne, - lnE: lnE, - lneq: lneq, - lneqq: lneqq, - lnsim: lnsim, - loang: loang, - loarr: loarr, - lobrk: lobrk, - longleftarrow: longleftarrow, - LongLeftArrow: LongLeftArrow, - Longleftarrow: Longleftarrow, - longleftrightarrow: longleftrightarrow, - LongLeftRightArrow: LongLeftRightArrow, - Longleftrightarrow: Longleftrightarrow, - longmapsto: longmapsto, - longrightarrow: longrightarrow, - LongRightArrow: LongRightArrow, - Longrightarrow: Longrightarrow, - looparrowleft: looparrowleft, - looparrowright: looparrowright, - lopar: lopar, - Lopf: Lopf, - lopf: lopf, - loplus: loplus, - lotimes: lotimes, - lowast: lowast, - lowbar: lowbar, - LowerLeftArrow: LowerLeftArrow, - LowerRightArrow: LowerRightArrow, - loz: loz, - lozenge: lozenge, - lozf: lozf, - lpar: lpar, - lparlt: lparlt, - lrarr: lrarr, - lrcorner: lrcorner, - lrhar: lrhar, - lrhard: lrhard, - lrm: lrm, - lrtri: lrtri, - lsaquo: lsaquo, - lscr: lscr, - Lscr: Lscr, - lsh: lsh, - Lsh: Lsh, - lsim: lsim, - lsime: lsime, - lsimg: lsimg, - lsqb: lsqb, - lsquo: lsquo, - lsquor: lsquor, - Lstrok: Lstrok, - lstrok: lstrok, - ltcc: ltcc, - ltcir: ltcir, - lt: lt$1, - LT: LT, - Lt: Lt, - ltdot: ltdot, - lthree: lthree, - ltimes: ltimes, - ltlarr: ltlarr, - ltquest: ltquest, - ltri: ltri, - ltrie: ltrie, - ltrif: ltrif, - ltrPar: ltrPar, - lurdshar: lurdshar, - luruhar: luruhar, - lvertneqq: lvertneqq, - lvnE: lvnE, - macr: macr, - male: male, - malt: malt, - maltese: maltese, - "Map": "⤅", - map: map, - mapsto: mapsto, - mapstodown: mapstodown, - mapstoleft: mapstoleft, - mapstoup: mapstoup, - marker: marker, - mcomma: mcomma, - Mcy: Mcy, - mcy: mcy, - mdash: mdash, - mDDot: mDDot, - measuredangle: measuredangle, - MediumSpace: MediumSpace, - Mellintrf: Mellintrf, - Mfr: Mfr, - mfr: mfr, - mho: mho, - micro: micro, - midast: midast, - midcir: midcir, - mid: mid, - middot: middot, - minusb: minusb, - minus: minus, - minusd: minusd, - minusdu: minusdu, - MinusPlus: MinusPlus, - mlcp: mlcp, - mldr: mldr, - mnplus: mnplus, - models: models, - Mopf: Mopf, - mopf: mopf, - mp: mp, - mscr: mscr, - Mscr: Mscr, - mstpos: mstpos, - Mu: Mu, - mu: mu, - multimap: multimap, - mumap: mumap, - nabla: nabla, - Nacute: Nacute, - nacute: nacute, - nang: nang, - nap: nap, - napE: napE, - napid: napid, - napos: napos, - napprox: napprox, - natural: natural, - naturals: naturals, - natur: natur, - nbsp: nbsp, - nbump: nbump, - nbumpe: nbumpe, - ncap: ncap, - Ncaron: Ncaron, - ncaron: ncaron, - Ncedil: Ncedil, - ncedil: ncedil, - ncong: ncong, - ncongdot: ncongdot, - ncup: ncup, - Ncy: Ncy, - ncy: ncy, - ndash: ndash, - nearhk: nearhk, - nearr: nearr, - neArr: neArr, - nearrow: nearrow, - ne: ne, - nedot: nedot, - NegativeMediumSpace: NegativeMediumSpace, - NegativeThickSpace: NegativeThickSpace, - NegativeThinSpace: NegativeThinSpace, - NegativeVeryThinSpace: NegativeVeryThinSpace, - nequiv: nequiv, - nesear: nesear, - nesim: nesim, - NestedGreaterGreater: NestedGreaterGreater, - NestedLessLess: NestedLessLess, - NewLine: NewLine, - nexist: nexist, - nexists: nexists, - Nfr: Nfr, - nfr: nfr, - ngE: ngE, - nge: nge, - ngeq: ngeq, - ngeqq: ngeqq, - ngeqslant: ngeqslant, - nges: nges, - nGg: nGg, - ngsim: ngsim, - nGt: nGt, - ngt: ngt, - ngtr: ngtr, - nGtv: nGtv, - nharr: nharr, - nhArr: nhArr, - nhpar: nhpar, - ni: ni, - nis: nis, - nisd: nisd, - niv: niv, - NJcy: NJcy, - njcy: njcy, - nlarr: nlarr, - nlArr: nlArr, - nldr: nldr, - nlE: nlE, - nle: nle, - nleftarrow: nleftarrow, - nLeftarrow: nLeftarrow, - nleftrightarrow: nleftrightarrow, - nLeftrightarrow: nLeftrightarrow, - nleq: nleq, - nleqq: nleqq, - nleqslant: nleqslant, - nles: nles, - nless: nless, - nLl: nLl, - nlsim: nlsim, - nLt: nLt, - nlt: nlt, - nltri: nltri, - nltrie: nltrie, - nLtv: nLtv, - nmid: nmid, - NoBreak: NoBreak, - NonBreakingSpace: NonBreakingSpace, - nopf: nopf, - Nopf: Nopf, - Not: Not, - not: not, - NotCongruent: NotCongruent, - NotCupCap: NotCupCap, - NotDoubleVerticalBar: NotDoubleVerticalBar, - NotElement: NotElement, - NotEqual: NotEqual, - NotEqualTilde: NotEqualTilde, - NotExists: NotExists, - NotGreater: NotGreater, - NotGreaterEqual: NotGreaterEqual, - NotGreaterFullEqual: NotGreaterFullEqual, - NotGreaterGreater: NotGreaterGreater, - NotGreaterLess: NotGreaterLess, - NotGreaterSlantEqual: NotGreaterSlantEqual, - NotGreaterTilde: NotGreaterTilde, - NotHumpDownHump: NotHumpDownHump, - NotHumpEqual: NotHumpEqual, - notin: notin, - notindot: notindot, - notinE: notinE, - notinva: notinva, - notinvb: notinvb, - notinvc: notinvc, - NotLeftTriangleBar: NotLeftTriangleBar, - NotLeftTriangle: NotLeftTriangle, - NotLeftTriangleEqual: NotLeftTriangleEqual, - NotLess: NotLess, - NotLessEqual: NotLessEqual, - NotLessGreater: NotLessGreater, - NotLessLess: NotLessLess, - NotLessSlantEqual: NotLessSlantEqual, - NotLessTilde: NotLessTilde, - NotNestedGreaterGreater: NotNestedGreaterGreater, - NotNestedLessLess: NotNestedLessLess, - notni: notni, - notniva: notniva, - notnivb: notnivb, - notnivc: notnivc, - NotPrecedes: NotPrecedes, - NotPrecedesEqual: NotPrecedesEqual, - NotPrecedesSlantEqual: NotPrecedesSlantEqual, - NotReverseElement: NotReverseElement, - NotRightTriangleBar: NotRightTriangleBar, - NotRightTriangle: NotRightTriangle, - NotRightTriangleEqual: NotRightTriangleEqual, - NotSquareSubset: NotSquareSubset, - NotSquareSubsetEqual: NotSquareSubsetEqual, - NotSquareSuperset: NotSquareSuperset, - NotSquareSupersetEqual: NotSquareSupersetEqual, - NotSubset: NotSubset, - NotSubsetEqual: NotSubsetEqual, - NotSucceeds: NotSucceeds, - NotSucceedsEqual: NotSucceedsEqual, - NotSucceedsSlantEqual: NotSucceedsSlantEqual, - NotSucceedsTilde: NotSucceedsTilde, - NotSuperset: NotSuperset, - NotSupersetEqual: NotSupersetEqual, - NotTilde: NotTilde, - NotTildeEqual: NotTildeEqual, - NotTildeFullEqual: NotTildeFullEqual, - NotTildeTilde: NotTildeTilde, - NotVerticalBar: NotVerticalBar, - nparallel: nparallel, - npar: npar, - nparsl: nparsl, - npart: npart, - npolint: npolint, - npr: npr, - nprcue: nprcue, - nprec: nprec, - npreceq: npreceq, - npre: npre, - nrarrc: nrarrc, - nrarr: nrarr, - nrArr: nrArr, - nrarrw: nrarrw, - nrightarrow: nrightarrow, - nRightarrow: nRightarrow, - nrtri: nrtri, - nrtrie: nrtrie, - nsc: nsc, - nsccue: nsccue, - nsce: nsce, - Nscr: Nscr, - nscr: nscr, - nshortmid: nshortmid, - nshortparallel: nshortparallel, - nsim: nsim, - nsime: nsime, - nsimeq: nsimeq, - nsmid: nsmid, - nspar: nspar, - nsqsube: nsqsube, - nsqsupe: nsqsupe, - nsub: nsub, - nsubE: nsubE, - nsube: nsube, - nsubset: nsubset, - nsubseteq: nsubseteq, - nsubseteqq: nsubseteqq, - nsucc: nsucc, - nsucceq: nsucceq, - nsup: nsup, - nsupE: nsupE, - nsupe: nsupe, - nsupset: nsupset, - nsupseteq: nsupseteq, - nsupseteqq: nsupseteqq, - ntgl: ntgl, - Ntilde: Ntilde, - ntilde: ntilde, - ntlg: ntlg, - ntriangleleft: ntriangleleft, - ntrianglelefteq: ntrianglelefteq, - ntriangleright: ntriangleright, - ntrianglerighteq: ntrianglerighteq, - Nu: Nu, - nu: nu, - num: num, - numero: numero, - numsp: numsp, - nvap: nvap, - nvdash: nvdash, - nvDash: nvDash, - nVdash: nVdash, - nVDash: nVDash, - nvge: nvge, - nvgt: nvgt, - nvHarr: nvHarr, - nvinfin: nvinfin, - nvlArr: nvlArr, - nvle: nvle, - nvlt: nvlt, - nvltrie: nvltrie, - nvrArr: nvrArr, - nvrtrie: nvrtrie, - nvsim: nvsim, - nwarhk: nwarhk, - nwarr: nwarr, - nwArr: nwArr, - nwarrow: nwarrow, - nwnear: nwnear, - Oacute: Oacute, - oacute: oacute, - oast: oast, - Ocirc: Ocirc, - ocirc: ocirc, - ocir: ocir, - Ocy: Ocy, - ocy: ocy, - odash: odash, - Odblac: Odblac, - odblac: odblac, - odiv: odiv, - odot: odot, - odsold: odsold, - OElig: OElig, - oelig: oelig, - ofcir: ofcir, - Ofr: Ofr, - ofr: ofr, - ogon: ogon, - Ograve: Ograve, - ograve: ograve, - ogt: ogt, - ohbar: ohbar, - ohm: ohm, - oint: oint, - olarr: olarr, - olcir: olcir, - olcross: olcross, - oline: oline, - olt: olt, - Omacr: Omacr, - omacr: omacr, - Omega: Omega, - omega: omega, - Omicron: Omicron, - omicron: omicron, - omid: omid, - ominus: ominus, - Oopf: Oopf, - oopf: oopf, - opar: opar, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, - OpenCurlyQuote: OpenCurlyQuote, - operp: operp, - oplus: oplus, - orarr: orarr, - Or: Or, - or: or, - ord: ord, - order: order, - orderof: orderof, - ordf: ordf, - ordm: ordm, - origof: origof, - oror: oror, - orslope: orslope, - orv: orv, - oS: oS, - Oscr: Oscr, - oscr: oscr, - Oslash: Oslash, - oslash: oslash, - osol: osol, - Otilde: Otilde, - otilde: otilde, - otimesas: otimesas, - Otimes: Otimes, - otimes: otimes, - Ouml: Ouml, - ouml: ouml, - ovbar: ovbar, - OverBar: OverBar, - OverBrace: OverBrace, - OverBracket: OverBracket, - OverParenthesis: OverParenthesis, - para: para, - parallel: parallel, - par: par, - parsim: parsim, - parsl: parsl, - part: part, - PartialD: PartialD, - Pcy: Pcy, - pcy: pcy, - percnt: percnt, - period: period, - permil: permil, - perp: perp, - pertenk: pertenk, - Pfr: Pfr, - pfr: pfr, - Phi: Phi, - phi: phi, - phiv: phiv, - phmmat: phmmat, - phone: phone, - Pi: Pi, - pi: pi, - pitchfork: pitchfork, - piv: piv, - planck: planck, - planckh: planckh, - plankv: plankv, - plusacir: plusacir, - plusb: plusb, - pluscir: pluscir, - plus: plus, - plusdo: plusdo, - plusdu: plusdu, - pluse: pluse, - PlusMinus: PlusMinus, - plusmn: plusmn, - plussim: plussim, - plustwo: plustwo, - pm: pm, - Poincareplane: Poincareplane, - pointint: pointint, - popf: popf, - Popf: Popf, - pound: pound, - prap: prap, - Pr: Pr, - pr: pr, - prcue: prcue, - precapprox: precapprox, - prec: prec, - preccurlyeq: preccurlyeq, - Precedes: Precedes, - PrecedesEqual: PrecedesEqual, - PrecedesSlantEqual: PrecedesSlantEqual, - PrecedesTilde: PrecedesTilde, - preceq: preceq, - precnapprox: precnapprox, - precneqq: precneqq, - precnsim: precnsim, - pre: pre, - prE: prE, - precsim: precsim, - prime: prime, - Prime: Prime, - primes: primes, - prnap: prnap, - prnE: prnE, - prnsim: prnsim, - prod: prod, - Product: Product, - profalar: profalar, - profline: profline, - profsurf: profsurf, - prop: prop, - Proportional: Proportional, - Proportion: Proportion, - propto: propto, - prsim: prsim, - prurel: prurel, - Pscr: Pscr, - pscr: pscr, - Psi: Psi, - psi: psi, - puncsp: puncsp, - Qfr: Qfr, - qfr: qfr, - qint: qint, - qopf: qopf, - Qopf: Qopf, - qprime: qprime, - Qscr: Qscr, - qscr: qscr, - quaternions: quaternions, - quatint: quatint, - quest: quest, - questeq: questeq, - quot: quot$1, - QUOT: QUOT, - rAarr: rAarr, - race: race, - Racute: Racute, - racute: racute, - radic: radic, - raemptyv: raemptyv, - rang: rang, - Rang: Rang, - rangd: rangd, - range: range, - rangle: rangle, - raquo: raquo, - rarrap: rarrap, - rarrb: rarrb, - rarrbfs: rarrbfs, - rarrc: rarrc, - rarr: rarr, - Rarr: Rarr, - rArr: rArr, - rarrfs: rarrfs, - rarrhk: rarrhk, - rarrlp: rarrlp, - rarrpl: rarrpl, - rarrsim: rarrsim, - Rarrtl: Rarrtl, - rarrtl: rarrtl, - rarrw: rarrw, - ratail: ratail, - rAtail: rAtail, - ratio: ratio, - rationals: rationals, - rbarr: rbarr, - rBarr: rBarr, - RBarr: RBarr, - rbbrk: rbbrk, - rbrace: rbrace, - rbrack: rbrack, - rbrke: rbrke, - rbrksld: rbrksld, - rbrkslu: rbrkslu, - Rcaron: Rcaron, - rcaron: rcaron, - Rcedil: Rcedil, - rcedil: rcedil, - rceil: rceil, - rcub: rcub, - Rcy: Rcy, - rcy: rcy, - rdca: rdca, - rdldhar: rdldhar, - rdquo: rdquo, - rdquor: rdquor, - rdsh: rdsh, - real: real, - realine: realine, - realpart: realpart, - reals: reals, - Re: Re, - rect: rect, - reg: reg, - REG: REG, - ReverseElement: ReverseElement, - ReverseEquilibrium: ReverseEquilibrium, - ReverseUpEquilibrium: ReverseUpEquilibrium, - rfisht: rfisht, - rfloor: rfloor, - rfr: rfr, - Rfr: Rfr, - rHar: rHar, - rhard: rhard, - rharu: rharu, - rharul: rharul, - Rho: Rho, - rho: rho, - rhov: rhov, - RightAngleBracket: RightAngleBracket, - RightArrowBar: RightArrowBar, - rightarrow: rightarrow, - RightArrow: RightArrow, - Rightarrow: Rightarrow, - RightArrowLeftArrow: RightArrowLeftArrow, - rightarrowtail: rightarrowtail, - RightCeiling: RightCeiling, - RightDoubleBracket: RightDoubleBracket, - RightDownTeeVector: RightDownTeeVector, - RightDownVectorBar: RightDownVectorBar, - RightDownVector: RightDownVector, - RightFloor: RightFloor, - rightharpoondown: rightharpoondown, - rightharpoonup: rightharpoonup, - rightleftarrows: rightleftarrows, - rightleftharpoons: rightleftharpoons, - rightrightarrows: rightrightarrows, - rightsquigarrow: rightsquigarrow, - RightTeeArrow: RightTeeArrow, - RightTee: RightTee, - RightTeeVector: RightTeeVector, - rightthreetimes: rightthreetimes, - RightTriangleBar: RightTriangleBar, - RightTriangle: RightTriangle, - RightTriangleEqual: RightTriangleEqual, - RightUpDownVector: RightUpDownVector, - RightUpTeeVector: RightUpTeeVector, - RightUpVectorBar: RightUpVectorBar, - RightUpVector: RightUpVector, - RightVectorBar: RightVectorBar, - RightVector: RightVector, - ring: ring, - risingdotseq: risingdotseq, - rlarr: rlarr, - rlhar: rlhar, - rlm: rlm, - rmoustache: rmoustache, - rmoust: rmoust, - rnmid: rnmid, - roang: roang, - roarr: roarr, - robrk: robrk, - ropar: ropar, - ropf: ropf, - Ropf: Ropf, - roplus: roplus, - rotimes: rotimes, - RoundImplies: RoundImplies, - rpar: rpar, - rpargt: rpargt, - rppolint: rppolint, - rrarr: rrarr, - Rrightarrow: Rrightarrow, - rsaquo: rsaquo, - rscr: rscr, - Rscr: Rscr, - rsh: rsh, - Rsh: Rsh, - rsqb: rsqb, - rsquo: rsquo, - rsquor: rsquor, - rthree: rthree, - rtimes: rtimes, - rtri: rtri, - rtrie: rtrie, - rtrif: rtrif, - rtriltri: rtriltri, - RuleDelayed: RuleDelayed, - ruluhar: ruluhar, - rx: rx, - Sacute: Sacute, - sacute: sacute, - sbquo: sbquo, - scap: scap, - Scaron: Scaron, - scaron: scaron, - Sc: Sc, - sc: sc, - sccue: sccue, - sce: sce, - scE: scE, - Scedil: Scedil, - scedil: scedil, - Scirc: Scirc, - scirc: scirc, - scnap: scnap, - scnE: scnE, - scnsim: scnsim, - scpolint: scpolint, - scsim: scsim, - Scy: Scy, - scy: scy, - sdotb: sdotb, - sdot: sdot, - sdote: sdote, - searhk: searhk, - searr: searr, - seArr: seArr, - searrow: searrow, - sect: sect, - semi: semi, - seswar: seswar, - setminus: setminus, - setmn: setmn, - sext: sext, - Sfr: Sfr, - sfr: sfr, - sfrown: sfrown, - sharp: sharp, - SHCHcy: SHCHcy, - shchcy: shchcy, - SHcy: SHcy, - shcy: shcy, - ShortDownArrow: ShortDownArrow, - ShortLeftArrow: ShortLeftArrow, - shortmid: shortmid, - shortparallel: shortparallel, - ShortRightArrow: ShortRightArrow, - ShortUpArrow: ShortUpArrow, - shy: shy, - Sigma: Sigma, - sigma: sigma, - sigmaf: sigmaf, - sigmav: sigmav, - sim: sim, - simdot: simdot, - sime: sime, - simeq: simeq, - simg: simg, - simgE: simgE, - siml: siml, - simlE: simlE, - simne: simne, - simplus: simplus, - simrarr: simrarr, - slarr: slarr, - SmallCircle: SmallCircle, - smallsetminus: smallsetminus, - smashp: smashp, - smeparsl: smeparsl, - smid: smid, - smile: smile, - smt: smt, - smte: smte, - smtes: smtes, - SOFTcy: SOFTcy, - softcy: softcy, - solbar: solbar, - solb: solb, - sol: sol, - Sopf: Sopf, - sopf: sopf, - spades: spades, - spadesuit: spadesuit, - spar: spar, - sqcap: sqcap, - sqcaps: sqcaps, - sqcup: sqcup, - sqcups: sqcups, - Sqrt: Sqrt, - sqsub: sqsub, - sqsube: sqsube, - sqsubset: sqsubset, - sqsubseteq: sqsubseteq, - sqsup: sqsup, - sqsupe: sqsupe, - sqsupset: sqsupset, - sqsupseteq: sqsupseteq, - square: square, - Square: Square, - SquareIntersection: SquareIntersection, - SquareSubset: SquareSubset, - SquareSubsetEqual: SquareSubsetEqual, - SquareSuperset: SquareSuperset, - SquareSupersetEqual: SquareSupersetEqual, - SquareUnion: SquareUnion, - squarf: squarf, - squ: squ, - squf: squf, - srarr: srarr, - Sscr: Sscr, - sscr: sscr, - ssetmn: ssetmn, - ssmile: ssmile, - sstarf: sstarf, - Star: Star, - star: star, - starf: starf, - straightepsilon: straightepsilon, - straightphi: straightphi, - strns: strns, - sub: sub, - Sub: Sub, - subdot: subdot, - subE: subE, - sube: sube, - subedot: subedot, - submult: submult, - subnE: subnE, - subne: subne, - subplus: subplus, - subrarr: subrarr, - subset: subset, - Subset: Subset, - subseteq: subseteq, - subseteqq: subseteqq, - SubsetEqual: SubsetEqual, - subsetneq: subsetneq, - subsetneqq: subsetneqq, - subsim: subsim, - subsub: subsub, - subsup: subsup, - succapprox: succapprox, - succ: succ, - succcurlyeq: succcurlyeq, - Succeeds: Succeeds, - SucceedsEqual: SucceedsEqual, - SucceedsSlantEqual: SucceedsSlantEqual, - SucceedsTilde: SucceedsTilde, - succeq: succeq, - succnapprox: succnapprox, - succneqq: succneqq, - succnsim: succnsim, - succsim: succsim, - SuchThat: SuchThat, - sum: sum, - Sum: Sum, - sung: sung, - sup1: sup1, - sup2: sup2, - sup3: sup3, - sup: sup, - Sup: Sup, - supdot: supdot, - supdsub: supdsub, - supE: supE, - supe: supe, - supedot: supedot, - Superset: Superset, - SupersetEqual: SupersetEqual, - suphsol: suphsol, - suphsub: suphsub, - suplarr: suplarr, - supmult: supmult, - supnE: supnE, - supne: supne, - supplus: supplus, - supset: supset, - Supset: Supset, - supseteq: supseteq, - supseteqq: supseteqq, - supsetneq: supsetneq, - supsetneqq: supsetneqq, - supsim: supsim, - supsub: supsub, - supsup: supsup, - swarhk: swarhk, - swarr: swarr, - swArr: swArr, - swarrow: swarrow, - swnwar: swnwar, - szlig: szlig, - Tab: Tab, - target: target, - Tau: Tau, - tau: tau, - tbrk: tbrk, - Tcaron: Tcaron, - tcaron: tcaron, - Tcedil: Tcedil, - tcedil: tcedil, - Tcy: Tcy, - tcy: tcy, - tdot: tdot, - telrec: telrec, - Tfr: Tfr, - tfr: tfr, - there4: there4, - therefore: therefore, - Therefore: Therefore, - Theta: Theta, - theta: theta, - thetasym: thetasym, - thetav: thetav, - thickapprox: thickapprox, - thicksim: thicksim, - ThickSpace: ThickSpace, - ThinSpace: ThinSpace, - thinsp: thinsp, - thkap: thkap, - thksim: thksim, - THORN: THORN, - thorn: thorn, - tilde: tilde, - Tilde: Tilde, - TildeEqual: TildeEqual, - TildeFullEqual: TildeFullEqual, - TildeTilde: TildeTilde, - timesbar: timesbar, - timesb: timesb, - times: times, - timesd: timesd, - tint: tint, - toea: toea, - topbot: topbot, - topcir: topcir, - top: top, - Topf: Topf, - topf: topf, - topfork: topfork, - tosa: tosa, - tprime: tprime, - trade: trade, - TRADE: TRADE, - triangle: triangle, - triangledown: triangledown, - triangleleft: triangleleft, - trianglelefteq: trianglelefteq, - triangleq: triangleq, - triangleright: triangleright, - trianglerighteq: trianglerighteq, - tridot: tridot, - trie: trie, - triminus: triminus, - TripleDot: TripleDot, - triplus: triplus, - trisb: trisb, - tritime: tritime, - trpezium: trpezium, - Tscr: Tscr, - tscr: tscr, - TScy: TScy, - tscy: tscy, - TSHcy: TSHcy, - tshcy: tshcy, - Tstrok: Tstrok, - tstrok: tstrok, - twixt: twixt, - twoheadleftarrow: twoheadleftarrow, - twoheadrightarrow: twoheadrightarrow, - Uacute: Uacute, - uacute: uacute, - uarr: uarr, - Uarr: Uarr, - uArr: uArr, - Uarrocir: Uarrocir, - Ubrcy: Ubrcy, - ubrcy: ubrcy, - Ubreve: Ubreve, - ubreve: ubreve, - Ucirc: Ucirc, - ucirc: ucirc, - Ucy: Ucy, - ucy: ucy, - udarr: udarr, - Udblac: Udblac, - udblac: udblac, - udhar: udhar, - ufisht: ufisht, - Ufr: Ufr, - ufr: ufr, - Ugrave: Ugrave, - ugrave: ugrave, - uHar: uHar, - uharl: uharl, - uharr: uharr, - uhblk: uhblk, - ulcorn: ulcorn, - ulcorner: ulcorner, - ulcrop: ulcrop, - ultri: ultri, - Umacr: Umacr, - umacr: umacr, - uml: uml, - UnderBar: UnderBar, - UnderBrace: UnderBrace, - UnderBracket: UnderBracket, - UnderParenthesis: UnderParenthesis, - Union: Union, - UnionPlus: UnionPlus, - Uogon: Uogon, - uogon: uogon, - Uopf: Uopf, - uopf: uopf, - UpArrowBar: UpArrowBar, - uparrow: uparrow, - UpArrow: UpArrow, - Uparrow: Uparrow, - UpArrowDownArrow: UpArrowDownArrow, - updownarrow: updownarrow, - UpDownArrow: UpDownArrow, - Updownarrow: Updownarrow, - UpEquilibrium: UpEquilibrium, - upharpoonleft: upharpoonleft, - upharpoonright: upharpoonright, - uplus: uplus, - UpperLeftArrow: UpperLeftArrow, - UpperRightArrow: UpperRightArrow, - upsi: upsi, - Upsi: Upsi, - upsih: upsih, - Upsilon: Upsilon, - upsilon: upsilon, - UpTeeArrow: UpTeeArrow, - UpTee: UpTee, - upuparrows: upuparrows, - urcorn: urcorn, - urcorner: urcorner, - urcrop: urcrop, - Uring: Uring, - uring: uring, - urtri: urtri, - Uscr: Uscr, - uscr: uscr, - utdot: utdot, - Utilde: Utilde, - utilde: utilde, - utri: utri, - utrif: utrif, - uuarr: uuarr, - Uuml: Uuml, - uuml: uuml, - uwangle: uwangle, - vangrt: vangrt, - varepsilon: varepsilon, - varkappa: varkappa, - varnothing: varnothing, - varphi: varphi, - varpi: varpi, - varpropto: varpropto, - varr: varr, - vArr: vArr, - varrho: varrho, - varsigma: varsigma, - varsubsetneq: varsubsetneq, - varsubsetneqq: varsubsetneqq, - varsupsetneq: varsupsetneq, - varsupsetneqq: varsupsetneqq, - vartheta: vartheta, - vartriangleleft: vartriangleleft, - vartriangleright: vartriangleright, - vBar: vBar, - Vbar: Vbar, - vBarv: vBarv, - Vcy: Vcy, - vcy: vcy, - vdash: vdash, - vDash: vDash, - Vdash: Vdash, - VDash: VDash, - Vdashl: Vdashl, - veebar: veebar, - vee: vee, - Vee: Vee, - veeeq: veeeq, - vellip: vellip, - verbar: verbar, - Verbar: Verbar, - vert: vert, - Vert: Vert, - VerticalBar: VerticalBar, - VerticalLine: VerticalLine, - VerticalSeparator: VerticalSeparator, - VerticalTilde: VerticalTilde, - VeryThinSpace: VeryThinSpace, - Vfr: Vfr, - vfr: vfr, - vltri: vltri, - vnsub: vnsub, - vnsup: vnsup, - Vopf: Vopf, - vopf: vopf, - vprop: vprop, - vrtri: vrtri, - Vscr: Vscr, - vscr: vscr, - vsubnE: vsubnE, - vsubne: vsubne, - vsupnE: vsupnE, - vsupne: vsupne, - Vvdash: Vvdash, - vzigzag: vzigzag, - Wcirc: Wcirc, - wcirc: wcirc, - wedbar: wedbar, - wedge: wedge, - Wedge: Wedge, - wedgeq: wedgeq, - weierp: weierp, - Wfr: Wfr, - wfr: wfr, - Wopf: Wopf, - wopf: wopf, - wp: wp, - wr: wr, - wreath: wreath, - Wscr: Wscr, - wscr: wscr, - xcap: xcap, - xcirc: xcirc, - xcup: xcup, - xdtri: xdtri, - Xfr: Xfr, - xfr: xfr, - xharr: xharr, - xhArr: xhArr, - Xi: Xi, - xi: xi, - xlarr: xlarr, - xlArr: xlArr, - xmap: xmap, - xnis: xnis, - xodot: xodot, - Xopf: Xopf, - xopf: xopf, - xoplus: xoplus, - xotime: xotime, - xrarr: xrarr, - xrArr: xrArr, - Xscr: Xscr, - xscr: xscr, - xsqcup: xsqcup, - xuplus: xuplus, - xutri: xutri, - xvee: xvee, - xwedge: xwedge, - Yacute: Yacute, - yacute: yacute, - YAcy: YAcy, - yacy: yacy, - Ycirc: Ycirc, - ycirc: ycirc, - Ycy: Ycy, - ycy: ycy, - yen: yen, - Yfr: Yfr, - yfr: yfr, - YIcy: YIcy, - yicy: yicy, - Yopf: Yopf, - yopf: yopf, - Yscr: Yscr, - yscr: yscr, - YUcy: YUcy, - yucy: yucy, - yuml: yuml, - Yuml: Yuml, - Zacute: Zacute, - zacute: zacute, - Zcaron: Zcaron, - zcaron: zcaron, - Zcy: Zcy, - zcy: zcy, - Zdot: Zdot, - zdot: zdot, - zeetrf: zeetrf, - ZeroWidthSpace: ZeroWidthSpace, - Zeta: Zeta, - zeta: zeta, - zfr: zfr, - Zfr: Zfr, - ZHcy: ZHcy, - zhcy: zhcy, - zigrarr: zigrarr, - zopf: zopf, - Zopf: Zopf, - Zscr: Zscr, - zscr: zscr, - zwj: zwj, - zwnj: zwnj - }; - - var entities$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - Aacute: Aacute, - aacute: aacute, - Abreve: Abreve, - abreve: abreve, - ac: ac, - acd: acd, - acE: acE, - Acirc: Acirc, - acirc: acirc, - acute: acute, - Acy: Acy, - acy: acy, - AElig: AElig, - aelig: aelig, - af: af, - Afr: Afr, - afr: afr, - Agrave: Agrave, - agrave: agrave, - alefsym: alefsym, - aleph: aleph, - Alpha: Alpha, - alpha: alpha, - Amacr: Amacr, - amacr: amacr, - amalg: amalg, - amp: amp$1, - AMP: AMP, - andand: andand, - And: And, - and: and, - andd: andd, - andslope: andslope, - andv: andv, - ang: ang, - ange: ange, - angle: angle, - angmsdaa: angmsdaa, - angmsdab: angmsdab, - angmsdac: angmsdac, - angmsdad: angmsdad, - angmsdae: angmsdae, - angmsdaf: angmsdaf, - angmsdag: angmsdag, - angmsdah: angmsdah, - angmsd: angmsd, - angrt: angrt, - angrtvb: angrtvb, - angrtvbd: angrtvbd, - angsph: angsph, - angst: angst, - angzarr: angzarr, - Aogon: Aogon, - aogon: aogon, - Aopf: Aopf, - aopf: aopf, - apacir: apacir, - ap: ap, - apE: apE, - ape: ape, - apid: apid, - apos: apos$1, - ApplyFunction: ApplyFunction, - approx: approx, - approxeq: approxeq, - Aring: Aring, - aring: aring, - Ascr: Ascr, - ascr: ascr, - Assign: Assign, - ast: ast, - asymp: asymp, - asympeq: asympeq, - Atilde: Atilde, - atilde: atilde, - Auml: Auml, - auml: auml, - awconint: awconint, - awint: awint, - backcong: backcong, - backepsilon: backepsilon, - backprime: backprime, - backsim: backsim, - backsimeq: backsimeq, - Backslash: Backslash, - Barv: Barv, - barvee: barvee, - barwed: barwed, - Barwed: Barwed, - barwedge: barwedge, - bbrk: bbrk, - bbrktbrk: bbrktbrk, - bcong: bcong, - Bcy: Bcy, - bcy: bcy, - bdquo: bdquo, - becaus: becaus, - because: because, - Because: Because, - bemptyv: bemptyv, - bepsi: bepsi, - bernou: bernou, - Bernoullis: Bernoullis, - Beta: Beta, - beta: beta, - beth: beth, - between: between, - Bfr: Bfr, - bfr: bfr, - bigcap: bigcap, - bigcirc: bigcirc, - bigcup: bigcup, - bigodot: bigodot, - bigoplus: bigoplus, - bigotimes: bigotimes, - bigsqcup: bigsqcup, - bigstar: bigstar, - bigtriangledown: bigtriangledown, - bigtriangleup: bigtriangleup, - biguplus: biguplus, - bigvee: bigvee, - bigwedge: bigwedge, - bkarow: bkarow, - blacklozenge: blacklozenge, - blacksquare: blacksquare, - blacktriangle: blacktriangle, - blacktriangledown: blacktriangledown, - blacktriangleleft: blacktriangleleft, - blacktriangleright: blacktriangleright, - blank: blank, - blk12: blk12, - blk14: blk14, - blk34: blk34, - block: block, - bne: bne, - bnequiv: bnequiv, - bNot: bNot, - bnot: bnot, - Bopf: Bopf, - bopf: bopf, - bot: bot, - bottom: bottom, - bowtie: bowtie, - boxbox: boxbox, - boxdl: boxdl, - boxdL: boxdL, - boxDl: boxDl, - boxDL: boxDL, - boxdr: boxdr, - boxdR: boxdR, - boxDr: boxDr, - boxDR: boxDR, - boxh: boxh, - boxH: boxH, - boxhd: boxhd, - boxHd: boxHd, - boxhD: boxhD, - boxHD: boxHD, - boxhu: boxhu, - boxHu: boxHu, - boxhU: boxhU, - boxHU: boxHU, - boxminus: boxminus, - boxplus: boxplus, - boxtimes: boxtimes, - boxul: boxul, - boxuL: boxuL, - boxUl: boxUl, - boxUL: boxUL, - boxur: boxur, - boxuR: boxuR, - boxUr: boxUr, - boxUR: boxUR, - boxv: boxv, - boxV: boxV, - boxvh: boxvh, - boxvH: boxvH, - boxVh: boxVh, - boxVH: boxVH, - boxvl: boxvl, - boxvL: boxvL, - boxVl: boxVl, - boxVL: boxVL, - boxvr: boxvr, - boxvR: boxvR, - boxVr: boxVr, - boxVR: boxVR, - bprime: bprime, - breve: breve, - Breve: Breve, - brvbar: brvbar, - bscr: bscr, - Bscr: Bscr, - bsemi: bsemi, - bsim: bsim, - bsime: bsime, - bsolb: bsolb, - bsol: bsol, - bsolhsub: bsolhsub, - bull: bull, - bullet: bullet, - bump: bump, - bumpE: bumpE, - bumpe: bumpe, - Bumpeq: Bumpeq, - bumpeq: bumpeq, - Cacute: Cacute, - cacute: cacute, - capand: capand, - capbrcup: capbrcup, - capcap: capcap, - cap: cap, - Cap: Cap, - capcup: capcup, - capdot: capdot, - CapitalDifferentialD: CapitalDifferentialD, - caps: caps, - caret: caret, - caron: caron, - Cayleys: Cayleys, - ccaps: ccaps, - Ccaron: Ccaron, - ccaron: ccaron, - Ccedil: Ccedil, - ccedil: ccedil, - Ccirc: Ccirc, - ccirc: ccirc, - Cconint: Cconint, - ccups: ccups, - ccupssm: ccupssm, - Cdot: Cdot, - cdot: cdot, - cedil: cedil, - Cedilla: Cedilla, - cemptyv: cemptyv, - cent: cent, - centerdot: centerdot, - CenterDot: CenterDot, - cfr: cfr, - Cfr: Cfr, - CHcy: CHcy, - chcy: chcy, - check: check, - checkmark: checkmark, - Chi: Chi, - chi: chi, - circ: circ, - circeq: circeq, - circlearrowleft: circlearrowleft, - circlearrowright: circlearrowright, - circledast: circledast, - circledcirc: circledcirc, - circleddash: circleddash, - CircleDot: CircleDot, - circledR: circledR, - circledS: circledS, - CircleMinus: CircleMinus, - CirclePlus: CirclePlus, - CircleTimes: CircleTimes, - cir: cir, - cirE: cirE, - cire: cire, - cirfnint: cirfnint, - cirmid: cirmid, - cirscir: cirscir, - ClockwiseContourIntegral: ClockwiseContourIntegral, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, - CloseCurlyQuote: CloseCurlyQuote, - clubs: clubs, - clubsuit: clubsuit, - colon: colon, - Colon: Colon, - Colone: Colone, - colone: colone, - coloneq: coloneq, - comma: comma, - commat: commat, - comp: comp, - compfn: compfn, - complement: complement, - complexes: complexes, - cong: cong, - congdot: congdot, - Congruent: Congruent, - conint: conint, - Conint: Conint, - ContourIntegral: ContourIntegral, - copf: copf, - Copf: Copf, - coprod: coprod, - Coproduct: Coproduct, - copy: copy, - COPY: COPY, - copysr: copysr, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, - crarr: crarr, - cross: cross, - Cross: Cross, - Cscr: Cscr, - cscr: cscr, - csub: csub, - csube: csube, - csup: csup, - csupe: csupe, - ctdot: ctdot, - cudarrl: cudarrl, - cudarrr: cudarrr, - cuepr: cuepr, - cuesc: cuesc, - cularr: cularr, - cularrp: cularrp, - cupbrcap: cupbrcap, - cupcap: cupcap, - CupCap: CupCap, - cup: cup, - Cup: Cup, - cupcup: cupcup, - cupdot: cupdot, - cupor: cupor, - cups: cups, - curarr: curarr, - curarrm: curarrm, - curlyeqprec: curlyeqprec, - curlyeqsucc: curlyeqsucc, - curlyvee: curlyvee, - curlywedge: curlywedge, - curren: curren, - curvearrowleft: curvearrowleft, - curvearrowright: curvearrowright, - cuvee: cuvee, - cuwed: cuwed, - cwconint: cwconint, - cwint: cwint, - cylcty: cylcty, - dagger: dagger, - Dagger: Dagger, - daleth: daleth, - darr: darr, - Darr: Darr, - dArr: dArr, - dash: dash, - Dashv: Dashv, - dashv: dashv, - dbkarow: dbkarow, - dblac: dblac, - Dcaron: Dcaron, - dcaron: dcaron, - Dcy: Dcy, - dcy: dcy, - ddagger: ddagger, - ddarr: ddarr, - DD: DD, - dd: dd, - DDotrahd: DDotrahd, - ddotseq: ddotseq, - deg: deg, - Del: Del, - Delta: Delta, - delta: delta, - demptyv: demptyv, - dfisht: dfisht, - Dfr: Dfr, - dfr: dfr, - dHar: dHar, - dharl: dharl, - dharr: dharr, - DiacriticalAcute: DiacriticalAcute, - DiacriticalDot: DiacriticalDot, - DiacriticalDoubleAcute: DiacriticalDoubleAcute, - DiacriticalGrave: DiacriticalGrave, - DiacriticalTilde: DiacriticalTilde, - diam: diam, - diamond: diamond, - Diamond: Diamond, - diamondsuit: diamondsuit, - diams: diams, - die: die, - DifferentialD: DifferentialD, - digamma: digamma, - disin: disin, - div: div, - divide: divide, - divideontimes: divideontimes, - divonx: divonx, - DJcy: DJcy, - djcy: djcy, - dlcorn: dlcorn, - dlcrop: dlcrop, - dollar: dollar, - Dopf: Dopf, - dopf: dopf, - Dot: Dot, - dot: dot, - DotDot: DotDot, - doteq: doteq, - doteqdot: doteqdot, - DotEqual: DotEqual, - dotminus: dotminus, - dotplus: dotplus, - dotsquare: dotsquare, - doublebarwedge: doublebarwedge, - DoubleContourIntegral: DoubleContourIntegral, - DoubleDot: DoubleDot, - DoubleDownArrow: DoubleDownArrow, - DoubleLeftArrow: DoubleLeftArrow, - DoubleLeftRightArrow: DoubleLeftRightArrow, - DoubleLeftTee: DoubleLeftTee, - DoubleLongLeftArrow: DoubleLongLeftArrow, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, - DoubleLongRightArrow: DoubleLongRightArrow, - DoubleRightArrow: DoubleRightArrow, - DoubleRightTee: DoubleRightTee, - DoubleUpArrow: DoubleUpArrow, - DoubleUpDownArrow: DoubleUpDownArrow, - DoubleVerticalBar: DoubleVerticalBar, - DownArrowBar: DownArrowBar, - downarrow: downarrow, - DownArrow: DownArrow, - Downarrow: Downarrow, - DownArrowUpArrow: DownArrowUpArrow, - DownBreve: DownBreve, - downdownarrows: downdownarrows, - downharpoonleft: downharpoonleft, - downharpoonright: downharpoonright, - DownLeftRightVector: DownLeftRightVector, - DownLeftTeeVector: DownLeftTeeVector, - DownLeftVectorBar: DownLeftVectorBar, - DownLeftVector: DownLeftVector, - DownRightTeeVector: DownRightTeeVector, - DownRightVectorBar: DownRightVectorBar, - DownRightVector: DownRightVector, - DownTeeArrow: DownTeeArrow, - DownTee: DownTee, - drbkarow: drbkarow, - drcorn: drcorn, - drcrop: drcrop, - Dscr: Dscr, - dscr: dscr, - DScy: DScy, - dscy: dscy, - dsol: dsol, - Dstrok: Dstrok, - dstrok: dstrok, - dtdot: dtdot, - dtri: dtri, - dtrif: dtrif, - duarr: duarr, - duhar: duhar, - dwangle: dwangle, - DZcy: DZcy, - dzcy: dzcy, - dzigrarr: dzigrarr, - Eacute: Eacute, - eacute: eacute, - easter: easter, - Ecaron: Ecaron, - ecaron: ecaron, - Ecirc: Ecirc, - ecirc: ecirc, - ecir: ecir, - ecolon: ecolon, - Ecy: Ecy, - ecy: ecy, - eDDot: eDDot, - Edot: Edot, - edot: edot, - eDot: eDot, - ee: ee, - efDot: efDot, - Efr: Efr, - efr: efr, - eg: eg, - Egrave: Egrave, - egrave: egrave, - egs: egs, - egsdot: egsdot, - el: el, - Element: Element, - elinters: elinters, - ell: ell, - els: els, - elsdot: elsdot, - Emacr: Emacr, - emacr: emacr, - empty: empty, - emptyset: emptyset, - EmptySmallSquare: EmptySmallSquare, - emptyv: emptyv, - EmptyVerySmallSquare: EmptyVerySmallSquare, - emsp13: emsp13, - emsp14: emsp14, - emsp: emsp, - ENG: ENG, - eng: eng, - ensp: ensp, - Eogon: Eogon, - eogon: eogon, - Eopf: Eopf, - eopf: eopf, - epar: epar, - eparsl: eparsl, - eplus: eplus, - epsi: epsi, - Epsilon: Epsilon, - epsilon: epsilon, - epsiv: epsiv, - eqcirc: eqcirc, - eqcolon: eqcolon, - eqsim: eqsim, - eqslantgtr: eqslantgtr, - eqslantless: eqslantless, - Equal: Equal, - equals: equals, - EqualTilde: EqualTilde, - equest: equest, - Equilibrium: Equilibrium, - equiv: equiv, - equivDD: equivDD, - eqvparsl: eqvparsl, - erarr: erarr, - erDot: erDot, - escr: escr, - Escr: Escr, - esdot: esdot, - Esim: Esim, - esim: esim, - Eta: Eta, - eta: eta, - ETH: ETH, - eth: eth, - Euml: Euml, - euml: euml, - euro: euro, - excl: excl, - exist: exist, - Exists: Exists, - expectation: expectation, - exponentiale: exponentiale, - ExponentialE: ExponentialE, - fallingdotseq: fallingdotseq, - Fcy: Fcy, - fcy: fcy, - female: female, - ffilig: ffilig, - fflig: fflig, - ffllig: ffllig, - Ffr: Ffr, - ffr: ffr, - filig: filig, - FilledSmallSquare: FilledSmallSquare, - FilledVerySmallSquare: FilledVerySmallSquare, - fjlig: fjlig, - flat: flat, - fllig: fllig, - fltns: fltns, - fnof: fnof, - Fopf: Fopf, - fopf: fopf, - forall: forall, - ForAll: ForAll, - fork: fork, - forkv: forkv, - Fouriertrf: Fouriertrf, - fpartint: fpartint, - frac12: frac12, - frac13: frac13, - frac14: frac14, - frac15: frac15, - frac16: frac16, - frac18: frac18, - frac23: frac23, - frac25: frac25, - frac34: frac34, - frac35: frac35, - frac38: frac38, - frac45: frac45, - frac56: frac56, - frac58: frac58, - frac78: frac78, - frasl: frasl, - frown: frown, - fscr: fscr, - Fscr: Fscr, - gacute: gacute, - Gamma: Gamma, - gamma: gamma, - Gammad: Gammad, - gammad: gammad, - gap: gap, - Gbreve: Gbreve, - gbreve: gbreve, - Gcedil: Gcedil, - Gcirc: Gcirc, - gcirc: gcirc, - Gcy: Gcy, - gcy: gcy, - Gdot: Gdot, - gdot: gdot, - ge: ge, - gE: gE, - gEl: gEl, - gel: gel, - geq: geq, - geqq: geqq, - geqslant: geqslant, - gescc: gescc, - ges: ges, - gesdot: gesdot, - gesdoto: gesdoto, - gesdotol: gesdotol, - gesl: gesl, - gesles: gesles, - Gfr: Gfr, - gfr: gfr, - gg: gg, - Gg: Gg, - ggg: ggg, - gimel: gimel, - GJcy: GJcy, - gjcy: gjcy, - gla: gla, - gl: gl, - glE: glE, - glj: glj, - gnap: gnap, - gnapprox: gnapprox, - gne: gne, - gnE: gnE, - gneq: gneq, - gneqq: gneqq, - gnsim: gnsim, - Gopf: Gopf, - gopf: gopf, - grave: grave, - GreaterEqual: GreaterEqual, - GreaterEqualLess: GreaterEqualLess, - GreaterFullEqual: GreaterFullEqual, - GreaterGreater: GreaterGreater, - GreaterLess: GreaterLess, - GreaterSlantEqual: GreaterSlantEqual, - GreaterTilde: GreaterTilde, - Gscr: Gscr, - gscr: gscr, - gsim: gsim, - gsime: gsime, - gsiml: gsiml, - gtcc: gtcc, - gtcir: gtcir, - gt: gt$1, - GT: GT, - Gt: Gt, - gtdot: gtdot, - gtlPar: gtlPar, - gtquest: gtquest, - gtrapprox: gtrapprox, - gtrarr: gtrarr, - gtrdot: gtrdot, - gtreqless: gtreqless, - gtreqqless: gtreqqless, - gtrless: gtrless, - gtrsim: gtrsim, - gvertneqq: gvertneqq, - gvnE: gvnE, - Hacek: Hacek, - hairsp: hairsp, - half: half, - hamilt: hamilt, - HARDcy: HARDcy, - hardcy: hardcy, - harrcir: harrcir, - harr: harr, - hArr: hArr, - harrw: harrw, - Hat: Hat, - hbar: hbar, - Hcirc: Hcirc, - hcirc: hcirc, - hearts: hearts, - heartsuit: heartsuit, - hellip: hellip, - hercon: hercon, - hfr: hfr, - Hfr: Hfr, - HilbertSpace: HilbertSpace, - hksearow: hksearow, - hkswarow: hkswarow, - hoarr: hoarr, - homtht: homtht, - hookleftarrow: hookleftarrow, - hookrightarrow: hookrightarrow, - hopf: hopf, - Hopf: Hopf, - horbar: horbar, - HorizontalLine: HorizontalLine, - hscr: hscr, - Hscr: Hscr, - hslash: hslash, - Hstrok: Hstrok, - hstrok: hstrok, - HumpDownHump: HumpDownHump, - HumpEqual: HumpEqual, - hybull: hybull, - hyphen: hyphen, - Iacute: Iacute, - iacute: iacute, - ic: ic, - Icirc: Icirc, - icirc: icirc, - Icy: Icy, - icy: icy, - Idot: Idot, - IEcy: IEcy, - iecy: iecy, - iexcl: iexcl, - iff: iff, - ifr: ifr, - Ifr: Ifr, - Igrave: Igrave, - igrave: igrave, - ii: ii, - iiiint: iiiint, - iiint: iiint, - iinfin: iinfin, - iiota: iiota, - IJlig: IJlig, - ijlig: ijlig, - Imacr: Imacr, - imacr: imacr, - image: image, - ImaginaryI: ImaginaryI, - imagline: imagline, - imagpart: imagpart, - imath: imath, - Im: Im, - imof: imof, - imped: imped, - Implies: Implies, - incare: incare, - infin: infin, - infintie: infintie, - inodot: inodot, - intcal: intcal, - int: int, - Int: Int, - integers: integers, - Integral: Integral, - intercal: intercal, - Intersection: Intersection, - intlarhk: intlarhk, - intprod: intprod, - InvisibleComma: InvisibleComma, - InvisibleTimes: InvisibleTimes, - IOcy: IOcy, - iocy: iocy, - Iogon: Iogon, - iogon: iogon, - Iopf: Iopf, - iopf: iopf, - Iota: Iota, - iota: iota, - iprod: iprod, - iquest: iquest, - iscr: iscr, - Iscr: Iscr, - isin: isin, - isindot: isindot, - isinE: isinE, - isins: isins, - isinsv: isinsv, - isinv: isinv, - it: it, - Itilde: Itilde, - itilde: itilde, - Iukcy: Iukcy, - iukcy: iukcy, - Iuml: Iuml, - iuml: iuml, - Jcirc: Jcirc, - jcirc: jcirc, - Jcy: Jcy, - jcy: jcy, - Jfr: Jfr, - jfr: jfr, - jmath: jmath, - Jopf: Jopf, - jopf: jopf, - Jscr: Jscr, - jscr: jscr, - Jsercy: Jsercy, - jsercy: jsercy, - Jukcy: Jukcy, - jukcy: jukcy, - Kappa: Kappa, - kappa: kappa, - kappav: kappav, - Kcedil: Kcedil, - kcedil: kcedil, - Kcy: Kcy, - kcy: kcy, - Kfr: Kfr, - kfr: kfr, - kgreen: kgreen, - KHcy: KHcy, - khcy: khcy, - KJcy: KJcy, - kjcy: kjcy, - Kopf: Kopf, - kopf: kopf, - Kscr: Kscr, - kscr: kscr, - lAarr: lAarr, - Lacute: Lacute, - lacute: lacute, - laemptyv: laemptyv, - lagran: lagran, - Lambda: Lambda, - lambda: lambda, - lang: lang, - Lang: Lang, - langd: langd, - langle: langle, - lap: lap, - Laplacetrf: Laplacetrf, - laquo: laquo, - larrb: larrb, - larrbfs: larrbfs, - larr: larr, - Larr: Larr, - lArr: lArr, - larrfs: larrfs, - larrhk: larrhk, - larrlp: larrlp, - larrpl: larrpl, - larrsim: larrsim, - larrtl: larrtl, - latail: latail, - lAtail: lAtail, - lat: lat, - late: late, - lates: lates, - lbarr: lbarr, - lBarr: lBarr, - lbbrk: lbbrk, - lbrace: lbrace, - lbrack: lbrack, - lbrke: lbrke, - lbrksld: lbrksld, - lbrkslu: lbrkslu, - Lcaron: Lcaron, - lcaron: lcaron, - Lcedil: Lcedil, - lcedil: lcedil, - lceil: lceil, - lcub: lcub, - Lcy: Lcy, - lcy: lcy, - ldca: ldca, - ldquo: ldquo, - ldquor: ldquor, - ldrdhar: ldrdhar, - ldrushar: ldrushar, - ldsh: ldsh, - le: le, - lE: lE, - LeftAngleBracket: LeftAngleBracket, - LeftArrowBar: LeftArrowBar, - leftarrow: leftarrow, - LeftArrow: LeftArrow, - Leftarrow: Leftarrow, - LeftArrowRightArrow: LeftArrowRightArrow, - leftarrowtail: leftarrowtail, - LeftCeiling: LeftCeiling, - LeftDoubleBracket: LeftDoubleBracket, - LeftDownTeeVector: LeftDownTeeVector, - LeftDownVectorBar: LeftDownVectorBar, - LeftDownVector: LeftDownVector, - LeftFloor: LeftFloor, - leftharpoondown: leftharpoondown, - leftharpoonup: leftharpoonup, - leftleftarrows: leftleftarrows, - leftrightarrow: leftrightarrow, - LeftRightArrow: LeftRightArrow, - Leftrightarrow: Leftrightarrow, - leftrightarrows: leftrightarrows, - leftrightharpoons: leftrightharpoons, - leftrightsquigarrow: leftrightsquigarrow, - LeftRightVector: LeftRightVector, - LeftTeeArrow: LeftTeeArrow, - LeftTee: LeftTee, - LeftTeeVector: LeftTeeVector, - leftthreetimes: leftthreetimes, - LeftTriangleBar: LeftTriangleBar, - LeftTriangle: LeftTriangle, - LeftTriangleEqual: LeftTriangleEqual, - LeftUpDownVector: LeftUpDownVector, - LeftUpTeeVector: LeftUpTeeVector, - LeftUpVectorBar: LeftUpVectorBar, - LeftUpVector: LeftUpVector, - LeftVectorBar: LeftVectorBar, - LeftVector: LeftVector, - lEg: lEg, - leg: leg, - leq: leq, - leqq: leqq, - leqslant: leqslant, - lescc: lescc, - les: les, - lesdot: lesdot, - lesdoto: lesdoto, - lesdotor: lesdotor, - lesg: lesg, - lesges: lesges, - lessapprox: lessapprox, - lessdot: lessdot, - lesseqgtr: lesseqgtr, - lesseqqgtr: lesseqqgtr, - LessEqualGreater: LessEqualGreater, - LessFullEqual: LessFullEqual, - LessGreater: LessGreater, - lessgtr: lessgtr, - LessLess: LessLess, - lesssim: lesssim, - LessSlantEqual: LessSlantEqual, - LessTilde: LessTilde, - lfisht: lfisht, - lfloor: lfloor, - Lfr: Lfr, - lfr: lfr, - lg: lg, - lgE: lgE, - lHar: lHar, - lhard: lhard, - lharu: lharu, - lharul: lharul, - lhblk: lhblk, - LJcy: LJcy, - ljcy: ljcy, - llarr: llarr, - ll: ll, - Ll: Ll, - llcorner: llcorner, - Lleftarrow: Lleftarrow, - llhard: llhard, - lltri: lltri, - Lmidot: Lmidot, - lmidot: lmidot, - lmoustache: lmoustache, - lmoust: lmoust, - lnap: lnap, - lnapprox: lnapprox, - lne: lne, - lnE: lnE, - lneq: lneq, - lneqq: lneqq, - lnsim: lnsim, - loang: loang, - loarr: loarr, - lobrk: lobrk, - longleftarrow: longleftarrow, - LongLeftArrow: LongLeftArrow, - Longleftarrow: Longleftarrow, - longleftrightarrow: longleftrightarrow, - LongLeftRightArrow: LongLeftRightArrow, - Longleftrightarrow: Longleftrightarrow, - longmapsto: longmapsto, - longrightarrow: longrightarrow, - LongRightArrow: LongRightArrow, - Longrightarrow: Longrightarrow, - looparrowleft: looparrowleft, - looparrowright: looparrowright, - lopar: lopar, - Lopf: Lopf, - lopf: lopf, - loplus: loplus, - lotimes: lotimes, - lowast: lowast, - lowbar: lowbar, - LowerLeftArrow: LowerLeftArrow, - LowerRightArrow: LowerRightArrow, - loz: loz, - lozenge: lozenge, - lozf: lozf, - lpar: lpar, - lparlt: lparlt, - lrarr: lrarr, - lrcorner: lrcorner, - lrhar: lrhar, - lrhard: lrhard, - lrm: lrm, - lrtri: lrtri, - lsaquo: lsaquo, - lscr: lscr, - Lscr: Lscr, - lsh: lsh, - Lsh: Lsh, - lsim: lsim, - lsime: lsime, - lsimg: lsimg, - lsqb: lsqb, - lsquo: lsquo, - lsquor: lsquor, - Lstrok: Lstrok, - lstrok: lstrok, - ltcc: ltcc, - ltcir: ltcir, - lt: lt$1, - LT: LT, - Lt: Lt, - ltdot: ltdot, - lthree: lthree, - ltimes: ltimes, - ltlarr: ltlarr, - ltquest: ltquest, - ltri: ltri, - ltrie: ltrie, - ltrif: ltrif, - ltrPar: ltrPar, - lurdshar: lurdshar, - luruhar: luruhar, - lvertneqq: lvertneqq, - lvnE: lvnE, - macr: macr, - male: male, - malt: malt, - maltese: maltese, - map: map, - mapsto: mapsto, - mapstodown: mapstodown, - mapstoleft: mapstoleft, - mapstoup: mapstoup, - marker: marker, - mcomma: mcomma, - Mcy: Mcy, - mcy: mcy, - mdash: mdash, - mDDot: mDDot, - measuredangle: measuredangle, - MediumSpace: MediumSpace, - Mellintrf: Mellintrf, - Mfr: Mfr, - mfr: mfr, - mho: mho, - micro: micro, - midast: midast, - midcir: midcir, - mid: mid, - middot: middot, - minusb: minusb, - minus: minus, - minusd: minusd, - minusdu: minusdu, - MinusPlus: MinusPlus, - mlcp: mlcp, - mldr: mldr, - mnplus: mnplus, - models: models, - Mopf: Mopf, - mopf: mopf, - mp: mp, - mscr: mscr, - Mscr: Mscr, - mstpos: mstpos, - Mu: Mu, - mu: mu, - multimap: multimap, - mumap: mumap, - nabla: nabla, - Nacute: Nacute, - nacute: nacute, - nang: nang, - nap: nap, - napE: napE, - napid: napid, - napos: napos, - napprox: napprox, - natural: natural, - naturals: naturals, - natur: natur, - nbsp: nbsp, - nbump: nbump, - nbumpe: nbumpe, - ncap: ncap, - Ncaron: Ncaron, - ncaron: ncaron, - Ncedil: Ncedil, - ncedil: ncedil, - ncong: ncong, - ncongdot: ncongdot, - ncup: ncup, - Ncy: Ncy, - ncy: ncy, - ndash: ndash, - nearhk: nearhk, - nearr: nearr, - neArr: neArr, - nearrow: nearrow, - ne: ne, - nedot: nedot, - NegativeMediumSpace: NegativeMediumSpace, - NegativeThickSpace: NegativeThickSpace, - NegativeThinSpace: NegativeThinSpace, - NegativeVeryThinSpace: NegativeVeryThinSpace, - nequiv: nequiv, - nesear: nesear, - nesim: nesim, - NestedGreaterGreater: NestedGreaterGreater, - NestedLessLess: NestedLessLess, - NewLine: NewLine, - nexist: nexist, - nexists: nexists, - Nfr: Nfr, - nfr: nfr, - ngE: ngE, - nge: nge, - ngeq: ngeq, - ngeqq: ngeqq, - ngeqslant: ngeqslant, - nges: nges, - nGg: nGg, - ngsim: ngsim, - nGt: nGt, - ngt: ngt, - ngtr: ngtr, - nGtv: nGtv, - nharr: nharr, - nhArr: nhArr, - nhpar: nhpar, - ni: ni, - nis: nis, - nisd: nisd, - niv: niv, - NJcy: NJcy, - njcy: njcy, - nlarr: nlarr, - nlArr: nlArr, - nldr: nldr, - nlE: nlE, - nle: nle, - nleftarrow: nleftarrow, - nLeftarrow: nLeftarrow, - nleftrightarrow: nleftrightarrow, - nLeftrightarrow: nLeftrightarrow, - nleq: nleq, - nleqq: nleqq, - nleqslant: nleqslant, - nles: nles, - nless: nless, - nLl: nLl, - nlsim: nlsim, - nLt: nLt, - nlt: nlt, - nltri: nltri, - nltrie: nltrie, - nLtv: nLtv, - nmid: nmid, - NoBreak: NoBreak, - NonBreakingSpace: NonBreakingSpace, - nopf: nopf, - Nopf: Nopf, - Not: Not, - not: not, - NotCongruent: NotCongruent, - NotCupCap: NotCupCap, - NotDoubleVerticalBar: NotDoubleVerticalBar, - NotElement: NotElement, - NotEqual: NotEqual, - NotEqualTilde: NotEqualTilde, - NotExists: NotExists, - NotGreater: NotGreater, - NotGreaterEqual: NotGreaterEqual, - NotGreaterFullEqual: NotGreaterFullEqual, - NotGreaterGreater: NotGreaterGreater, - NotGreaterLess: NotGreaterLess, - NotGreaterSlantEqual: NotGreaterSlantEqual, - NotGreaterTilde: NotGreaterTilde, - NotHumpDownHump: NotHumpDownHump, - NotHumpEqual: NotHumpEqual, - notin: notin, - notindot: notindot, - notinE: notinE, - notinva: notinva, - notinvb: notinvb, - notinvc: notinvc, - NotLeftTriangleBar: NotLeftTriangleBar, - NotLeftTriangle: NotLeftTriangle, - NotLeftTriangleEqual: NotLeftTriangleEqual, - NotLess: NotLess, - NotLessEqual: NotLessEqual, - NotLessGreater: NotLessGreater, - NotLessLess: NotLessLess, - NotLessSlantEqual: NotLessSlantEqual, - NotLessTilde: NotLessTilde, - NotNestedGreaterGreater: NotNestedGreaterGreater, - NotNestedLessLess: NotNestedLessLess, - notni: notni, - notniva: notniva, - notnivb: notnivb, - notnivc: notnivc, - NotPrecedes: NotPrecedes, - NotPrecedesEqual: NotPrecedesEqual, - NotPrecedesSlantEqual: NotPrecedesSlantEqual, - NotReverseElement: NotReverseElement, - NotRightTriangleBar: NotRightTriangleBar, - NotRightTriangle: NotRightTriangle, - NotRightTriangleEqual: NotRightTriangleEqual, - NotSquareSubset: NotSquareSubset, - NotSquareSubsetEqual: NotSquareSubsetEqual, - NotSquareSuperset: NotSquareSuperset, - NotSquareSupersetEqual: NotSquareSupersetEqual, - NotSubset: NotSubset, - NotSubsetEqual: NotSubsetEqual, - NotSucceeds: NotSucceeds, - NotSucceedsEqual: NotSucceedsEqual, - NotSucceedsSlantEqual: NotSucceedsSlantEqual, - NotSucceedsTilde: NotSucceedsTilde, - NotSuperset: NotSuperset, - NotSupersetEqual: NotSupersetEqual, - NotTilde: NotTilde, - NotTildeEqual: NotTildeEqual, - NotTildeFullEqual: NotTildeFullEqual, - NotTildeTilde: NotTildeTilde, - NotVerticalBar: NotVerticalBar, - nparallel: nparallel, - npar: npar, - nparsl: nparsl, - npart: npart, - npolint: npolint, - npr: npr, - nprcue: nprcue, - nprec: nprec, - npreceq: npreceq, - npre: npre, - nrarrc: nrarrc, - nrarr: nrarr, - nrArr: nrArr, - nrarrw: nrarrw, - nrightarrow: nrightarrow, - nRightarrow: nRightarrow, - nrtri: nrtri, - nrtrie: nrtrie, - nsc: nsc, - nsccue: nsccue, - nsce: nsce, - Nscr: Nscr, - nscr: nscr, - nshortmid: nshortmid, - nshortparallel: nshortparallel, - nsim: nsim, - nsime: nsime, - nsimeq: nsimeq, - nsmid: nsmid, - nspar: nspar, - nsqsube: nsqsube, - nsqsupe: nsqsupe, - nsub: nsub, - nsubE: nsubE, - nsube: nsube, - nsubset: nsubset, - nsubseteq: nsubseteq, - nsubseteqq: nsubseteqq, - nsucc: nsucc, - nsucceq: nsucceq, - nsup: nsup, - nsupE: nsupE, - nsupe: nsupe, - nsupset: nsupset, - nsupseteq: nsupseteq, - nsupseteqq: nsupseteqq, - ntgl: ntgl, - Ntilde: Ntilde, - ntilde: ntilde, - ntlg: ntlg, - ntriangleleft: ntriangleleft, - ntrianglelefteq: ntrianglelefteq, - ntriangleright: ntriangleright, - ntrianglerighteq: ntrianglerighteq, - Nu: Nu, - nu: nu, - num: num, - numero: numero, - numsp: numsp, - nvap: nvap, - nvdash: nvdash, - nvDash: nvDash, - nVdash: nVdash, - nVDash: nVDash, - nvge: nvge, - nvgt: nvgt, - nvHarr: nvHarr, - nvinfin: nvinfin, - nvlArr: nvlArr, - nvle: nvle, - nvlt: nvlt, - nvltrie: nvltrie, - nvrArr: nvrArr, - nvrtrie: nvrtrie, - nvsim: nvsim, - nwarhk: nwarhk, - nwarr: nwarr, - nwArr: nwArr, - nwarrow: nwarrow, - nwnear: nwnear, - Oacute: Oacute, - oacute: oacute, - oast: oast, - Ocirc: Ocirc, - ocirc: ocirc, - ocir: ocir, - Ocy: Ocy, - ocy: ocy, - odash: odash, - Odblac: Odblac, - odblac: odblac, - odiv: odiv, - odot: odot, - odsold: odsold, - OElig: OElig, - oelig: oelig, - ofcir: ofcir, - Ofr: Ofr, - ofr: ofr, - ogon: ogon, - Ograve: Ograve, - ograve: ograve, - ogt: ogt, - ohbar: ohbar, - ohm: ohm, - oint: oint, - olarr: olarr, - olcir: olcir, - olcross: olcross, - oline: oline, - olt: olt, - Omacr: Omacr, - omacr: omacr, - Omega: Omega, - omega: omega, - Omicron: Omicron, - omicron: omicron, - omid: omid, - ominus: ominus, - Oopf: Oopf, - oopf: oopf, - opar: opar, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, - OpenCurlyQuote: OpenCurlyQuote, - operp: operp, - oplus: oplus, - orarr: orarr, - Or: Or, - or: or, - ord: ord, - order: order, - orderof: orderof, - ordf: ordf, - ordm: ordm, - origof: origof, - oror: oror, - orslope: orslope, - orv: orv, - oS: oS, - Oscr: Oscr, - oscr: oscr, - Oslash: Oslash, - oslash: oslash, - osol: osol, - Otilde: Otilde, - otilde: otilde, - otimesas: otimesas, - Otimes: Otimes, - otimes: otimes, - Ouml: Ouml, - ouml: ouml, - ovbar: ovbar, - OverBar: OverBar, - OverBrace: OverBrace, - OverBracket: OverBracket, - OverParenthesis: OverParenthesis, - para: para, - parallel: parallel, - par: par, - parsim: parsim, - parsl: parsl, - part: part, - PartialD: PartialD, - Pcy: Pcy, - pcy: pcy, - percnt: percnt, - period: period, - permil: permil, - perp: perp, - pertenk: pertenk, - Pfr: Pfr, - pfr: pfr, - Phi: Phi, - phi: phi, - phiv: phiv, - phmmat: phmmat, - phone: phone, - Pi: Pi, - pi: pi, - pitchfork: pitchfork, - piv: piv, - planck: planck, - planckh: planckh, - plankv: plankv, - plusacir: plusacir, - plusb: plusb, - pluscir: pluscir, - plus: plus, - plusdo: plusdo, - plusdu: plusdu, - pluse: pluse, - PlusMinus: PlusMinus, - plusmn: plusmn, - plussim: plussim, - plustwo: plustwo, - pm: pm, - Poincareplane: Poincareplane, - pointint: pointint, - popf: popf, - Popf: Popf, - pound: pound, - prap: prap, - Pr: Pr, - pr: pr, - prcue: prcue, - precapprox: precapprox, - prec: prec, - preccurlyeq: preccurlyeq, - Precedes: Precedes, - PrecedesEqual: PrecedesEqual, - PrecedesSlantEqual: PrecedesSlantEqual, - PrecedesTilde: PrecedesTilde, - preceq: preceq, - precnapprox: precnapprox, - precneqq: precneqq, - precnsim: precnsim, - pre: pre, - prE: prE, - precsim: precsim, - prime: prime, - Prime: Prime, - primes: primes, - prnap: prnap, - prnE: prnE, - prnsim: prnsim, - prod: prod, - Product: Product, - profalar: profalar, - profline: profline, - profsurf: profsurf, - prop: prop, - Proportional: Proportional, - Proportion: Proportion, - propto: propto, - prsim: prsim, - prurel: prurel, - Pscr: Pscr, - pscr: pscr, - Psi: Psi, - psi: psi, - puncsp: puncsp, - Qfr: Qfr, - qfr: qfr, - qint: qint, - qopf: qopf, - Qopf: Qopf, - qprime: qprime, - Qscr: Qscr, - qscr: qscr, - quaternions: quaternions, - quatint: quatint, - quest: quest, - questeq: questeq, - quot: quot$1, - QUOT: QUOT, - rAarr: rAarr, - race: race, - Racute: Racute, - racute: racute, - radic: radic, - raemptyv: raemptyv, - rang: rang, - Rang: Rang, - rangd: rangd, - range: range, - rangle: rangle, - raquo: raquo, - rarrap: rarrap, - rarrb: rarrb, - rarrbfs: rarrbfs, - rarrc: rarrc, - rarr: rarr, - Rarr: Rarr, - rArr: rArr, - rarrfs: rarrfs, - rarrhk: rarrhk, - rarrlp: rarrlp, - rarrpl: rarrpl, - rarrsim: rarrsim, - Rarrtl: Rarrtl, - rarrtl: rarrtl, - rarrw: rarrw, - ratail: ratail, - rAtail: rAtail, - ratio: ratio, - rationals: rationals, - rbarr: rbarr, - rBarr: rBarr, - RBarr: RBarr, - rbbrk: rbbrk, - rbrace: rbrace, - rbrack: rbrack, - rbrke: rbrke, - rbrksld: rbrksld, - rbrkslu: rbrkslu, - Rcaron: Rcaron, - rcaron: rcaron, - Rcedil: Rcedil, - rcedil: rcedil, - rceil: rceil, - rcub: rcub, - Rcy: Rcy, - rcy: rcy, - rdca: rdca, - rdldhar: rdldhar, - rdquo: rdquo, - rdquor: rdquor, - rdsh: rdsh, - real: real, - realine: realine, - realpart: realpart, - reals: reals, - Re: Re, - rect: rect, - reg: reg, - REG: REG, - ReverseElement: ReverseElement, - ReverseEquilibrium: ReverseEquilibrium, - ReverseUpEquilibrium: ReverseUpEquilibrium, - rfisht: rfisht, - rfloor: rfloor, - rfr: rfr, - Rfr: Rfr, - rHar: rHar, - rhard: rhard, - rharu: rharu, - rharul: rharul, - Rho: Rho, - rho: rho, - rhov: rhov, - RightAngleBracket: RightAngleBracket, - RightArrowBar: RightArrowBar, - rightarrow: rightarrow, - RightArrow: RightArrow, - Rightarrow: Rightarrow, - RightArrowLeftArrow: RightArrowLeftArrow, - rightarrowtail: rightarrowtail, - RightCeiling: RightCeiling, - RightDoubleBracket: RightDoubleBracket, - RightDownTeeVector: RightDownTeeVector, - RightDownVectorBar: RightDownVectorBar, - RightDownVector: RightDownVector, - RightFloor: RightFloor, - rightharpoondown: rightharpoondown, - rightharpoonup: rightharpoonup, - rightleftarrows: rightleftarrows, - rightleftharpoons: rightleftharpoons, - rightrightarrows: rightrightarrows, - rightsquigarrow: rightsquigarrow, - RightTeeArrow: RightTeeArrow, - RightTee: RightTee, - RightTeeVector: RightTeeVector, - rightthreetimes: rightthreetimes, - RightTriangleBar: RightTriangleBar, - RightTriangle: RightTriangle, - RightTriangleEqual: RightTriangleEqual, - RightUpDownVector: RightUpDownVector, - RightUpTeeVector: RightUpTeeVector, - RightUpVectorBar: RightUpVectorBar, - RightUpVector: RightUpVector, - RightVectorBar: RightVectorBar, - RightVector: RightVector, - ring: ring, - risingdotseq: risingdotseq, - rlarr: rlarr, - rlhar: rlhar, - rlm: rlm, - rmoustache: rmoustache, - rmoust: rmoust, - rnmid: rnmid, - roang: roang, - roarr: roarr, - robrk: robrk, - ropar: ropar, - ropf: ropf, - Ropf: Ropf, - roplus: roplus, - rotimes: rotimes, - RoundImplies: RoundImplies, - rpar: rpar, - rpargt: rpargt, - rppolint: rppolint, - rrarr: rrarr, - Rrightarrow: Rrightarrow, - rsaquo: rsaquo, - rscr: rscr, - Rscr: Rscr, - rsh: rsh, - Rsh: Rsh, - rsqb: rsqb, - rsquo: rsquo, - rsquor: rsquor, - rthree: rthree, - rtimes: rtimes, - rtri: rtri, - rtrie: rtrie, - rtrif: rtrif, - rtriltri: rtriltri, - RuleDelayed: RuleDelayed, - ruluhar: ruluhar, - rx: rx, - Sacute: Sacute, - sacute: sacute, - sbquo: sbquo, - scap: scap, - Scaron: Scaron, - scaron: scaron, - Sc: Sc, - sc: sc, - sccue: sccue, - sce: sce, - scE: scE, - Scedil: Scedil, - scedil: scedil, - Scirc: Scirc, - scirc: scirc, - scnap: scnap, - scnE: scnE, - scnsim: scnsim, - scpolint: scpolint, - scsim: scsim, - Scy: Scy, - scy: scy, - sdotb: sdotb, - sdot: sdot, - sdote: sdote, - searhk: searhk, - searr: searr, - seArr: seArr, - searrow: searrow, - sect: sect, - semi: semi, - seswar: seswar, - setminus: setminus, - setmn: setmn, - sext: sext, - Sfr: Sfr, - sfr: sfr, - sfrown: sfrown, - sharp: sharp, - SHCHcy: SHCHcy, - shchcy: shchcy, - SHcy: SHcy, - shcy: shcy, - ShortDownArrow: ShortDownArrow, - ShortLeftArrow: ShortLeftArrow, - shortmid: shortmid, - shortparallel: shortparallel, - ShortRightArrow: ShortRightArrow, - ShortUpArrow: ShortUpArrow, - shy: shy, - Sigma: Sigma, - sigma: sigma, - sigmaf: sigmaf, - sigmav: sigmav, - sim: sim, - simdot: simdot, - sime: sime, - simeq: simeq, - simg: simg, - simgE: simgE, - siml: siml, - simlE: simlE, - simne: simne, - simplus: simplus, - simrarr: simrarr, - slarr: slarr, - SmallCircle: SmallCircle, - smallsetminus: smallsetminus, - smashp: smashp, - smeparsl: smeparsl, - smid: smid, - smile: smile, - smt: smt, - smte: smte, - smtes: smtes, - SOFTcy: SOFTcy, - softcy: softcy, - solbar: solbar, - solb: solb, - sol: sol, - Sopf: Sopf, - sopf: sopf, - spades: spades, - spadesuit: spadesuit, - spar: spar, - sqcap: sqcap, - sqcaps: sqcaps, - sqcup: sqcup, - sqcups: sqcups, - Sqrt: Sqrt, - sqsub: sqsub, - sqsube: sqsube, - sqsubset: sqsubset, - sqsubseteq: sqsubseteq, - sqsup: sqsup, - sqsupe: sqsupe, - sqsupset: sqsupset, - sqsupseteq: sqsupseteq, - square: square, - Square: Square, - SquareIntersection: SquareIntersection, - SquareSubset: SquareSubset, - SquareSubsetEqual: SquareSubsetEqual, - SquareSuperset: SquareSuperset, - SquareSupersetEqual: SquareSupersetEqual, - SquareUnion: SquareUnion, - squarf: squarf, - squ: squ, - squf: squf, - srarr: srarr, - Sscr: Sscr, - sscr: sscr, - ssetmn: ssetmn, - ssmile: ssmile, - sstarf: sstarf, - Star: Star, - star: star, - starf: starf, - straightepsilon: straightepsilon, - straightphi: straightphi, - strns: strns, - sub: sub, - Sub: Sub, - subdot: subdot, - subE: subE, - sube: sube, - subedot: subedot, - submult: submult, - subnE: subnE, - subne: subne, - subplus: subplus, - subrarr: subrarr, - subset: subset, - Subset: Subset, - subseteq: subseteq, - subseteqq: subseteqq, - SubsetEqual: SubsetEqual, - subsetneq: subsetneq, - subsetneqq: subsetneqq, - subsim: subsim, - subsub: subsub, - subsup: subsup, - succapprox: succapprox, - succ: succ, - succcurlyeq: succcurlyeq, - Succeeds: Succeeds, - SucceedsEqual: SucceedsEqual, - SucceedsSlantEqual: SucceedsSlantEqual, - SucceedsTilde: SucceedsTilde, - succeq: succeq, - succnapprox: succnapprox, - succneqq: succneqq, - succnsim: succnsim, - succsim: succsim, - SuchThat: SuchThat, - sum: sum, - Sum: Sum, - sung: sung, - sup1: sup1, - sup2: sup2, - sup3: sup3, - sup: sup, - Sup: Sup, - supdot: supdot, - supdsub: supdsub, - supE: supE, - supe: supe, - supedot: supedot, - Superset: Superset, - SupersetEqual: SupersetEqual, - suphsol: suphsol, - suphsub: suphsub, - suplarr: suplarr, - supmult: supmult, - supnE: supnE, - supne: supne, - supplus: supplus, - supset: supset, - Supset: Supset, - supseteq: supseteq, - supseteqq: supseteqq, - supsetneq: supsetneq, - supsetneqq: supsetneqq, - supsim: supsim, - supsub: supsub, - supsup: supsup, - swarhk: swarhk, - swarr: swarr, - swArr: swArr, - swarrow: swarrow, - swnwar: swnwar, - szlig: szlig, - Tab: Tab, - target: target, - Tau: Tau, - tau: tau, - tbrk: tbrk, - Tcaron: Tcaron, - tcaron: tcaron, - Tcedil: Tcedil, - tcedil: tcedil, - Tcy: Tcy, - tcy: tcy, - tdot: tdot, - telrec: telrec, - Tfr: Tfr, - tfr: tfr, - there4: there4, - therefore: therefore, - Therefore: Therefore, - Theta: Theta, - theta: theta, - thetasym: thetasym, - thetav: thetav, - thickapprox: thickapprox, - thicksim: thicksim, - ThickSpace: ThickSpace, - ThinSpace: ThinSpace, - thinsp: thinsp, - thkap: thkap, - thksim: thksim, - THORN: THORN, - thorn: thorn, - tilde: tilde, - Tilde: Tilde, - TildeEqual: TildeEqual, - TildeFullEqual: TildeFullEqual, - TildeTilde: TildeTilde, - timesbar: timesbar, - timesb: timesb, - times: times, - timesd: timesd, - tint: tint, - toea: toea, - topbot: topbot, - topcir: topcir, - top: top, - Topf: Topf, - topf: topf, - topfork: topfork, - tosa: tosa, - tprime: tprime, - trade: trade, - TRADE: TRADE, - triangle: triangle, - triangledown: triangledown, - triangleleft: triangleleft, - trianglelefteq: trianglelefteq, - triangleq: triangleq, - triangleright: triangleright, - trianglerighteq: trianglerighteq, - tridot: tridot, - trie: trie, - triminus: triminus, - TripleDot: TripleDot, - triplus: triplus, - trisb: trisb, - tritime: tritime, - trpezium: trpezium, - Tscr: Tscr, - tscr: tscr, - TScy: TScy, - tscy: tscy, - TSHcy: TSHcy, - tshcy: tshcy, - Tstrok: Tstrok, - tstrok: tstrok, - twixt: twixt, - twoheadleftarrow: twoheadleftarrow, - twoheadrightarrow: twoheadrightarrow, - Uacute: Uacute, - uacute: uacute, - uarr: uarr, - Uarr: Uarr, - uArr: uArr, - Uarrocir: Uarrocir, - Ubrcy: Ubrcy, - ubrcy: ubrcy, - Ubreve: Ubreve, - ubreve: ubreve, - Ucirc: Ucirc, - ucirc: ucirc, - Ucy: Ucy, - ucy: ucy, - udarr: udarr, - Udblac: Udblac, - udblac: udblac, - udhar: udhar, - ufisht: ufisht, - Ufr: Ufr, - ufr: ufr, - Ugrave: Ugrave, - ugrave: ugrave, - uHar: uHar, - uharl: uharl, - uharr: uharr, - uhblk: uhblk, - ulcorn: ulcorn, - ulcorner: ulcorner, - ulcrop: ulcrop, - ultri: ultri, - Umacr: Umacr, - umacr: umacr, - uml: uml, - UnderBar: UnderBar, - UnderBrace: UnderBrace, - UnderBracket: UnderBracket, - UnderParenthesis: UnderParenthesis, - Union: Union, - UnionPlus: UnionPlus, - Uogon: Uogon, - uogon: uogon, - Uopf: Uopf, - uopf: uopf, - UpArrowBar: UpArrowBar, - uparrow: uparrow, - UpArrow: UpArrow, - Uparrow: Uparrow, - UpArrowDownArrow: UpArrowDownArrow, - updownarrow: updownarrow, - UpDownArrow: UpDownArrow, - Updownarrow: Updownarrow, - UpEquilibrium: UpEquilibrium, - upharpoonleft: upharpoonleft, - upharpoonright: upharpoonright, - uplus: uplus, - UpperLeftArrow: UpperLeftArrow, - UpperRightArrow: UpperRightArrow, - upsi: upsi, - Upsi: Upsi, - upsih: upsih, - Upsilon: Upsilon, - upsilon: upsilon, - UpTeeArrow: UpTeeArrow, - UpTee: UpTee, - upuparrows: upuparrows, - urcorn: urcorn, - urcorner: urcorner, - urcrop: urcrop, - Uring: Uring, - uring: uring, - urtri: urtri, - Uscr: Uscr, - uscr: uscr, - utdot: utdot, - Utilde: Utilde, - utilde: utilde, - utri: utri, - utrif: utrif, - uuarr: uuarr, - Uuml: Uuml, - uuml: uuml, - uwangle: uwangle, - vangrt: vangrt, - varepsilon: varepsilon, - varkappa: varkappa, - varnothing: varnothing, - varphi: varphi, - varpi: varpi, - varpropto: varpropto, - varr: varr, - vArr: vArr, - varrho: varrho, - varsigma: varsigma, - varsubsetneq: varsubsetneq, - varsubsetneqq: varsubsetneqq, - varsupsetneq: varsupsetneq, - varsupsetneqq: varsupsetneqq, - vartheta: vartheta, - vartriangleleft: vartriangleleft, - vartriangleright: vartriangleright, - vBar: vBar, - Vbar: Vbar, - vBarv: vBarv, - Vcy: Vcy, - vcy: vcy, - vdash: vdash, - vDash: vDash, - Vdash: Vdash, - VDash: VDash, - Vdashl: Vdashl, - veebar: veebar, - vee: vee, - Vee: Vee, - veeeq: veeeq, - vellip: vellip, - verbar: verbar, - Verbar: Verbar, - vert: vert, - Vert: Vert, - VerticalBar: VerticalBar, - VerticalLine: VerticalLine, - VerticalSeparator: VerticalSeparator, - VerticalTilde: VerticalTilde, - VeryThinSpace: VeryThinSpace, - Vfr: Vfr, - vfr: vfr, - vltri: vltri, - vnsub: vnsub, - vnsup: vnsup, - Vopf: Vopf, - vopf: vopf, - vprop: vprop, - vrtri: vrtri, - Vscr: Vscr, - vscr: vscr, - vsubnE: vsubnE, - vsubne: vsubne, - vsupnE: vsupnE, - vsupne: vsupne, - Vvdash: Vvdash, - vzigzag: vzigzag, - Wcirc: Wcirc, - wcirc: wcirc, - wedbar: wedbar, - wedge: wedge, - Wedge: Wedge, - wedgeq: wedgeq, - weierp: weierp, - Wfr: Wfr, - wfr: wfr, - Wopf: Wopf, - wopf: wopf, - wp: wp, - wr: wr, - wreath: wreath, - Wscr: Wscr, - wscr: wscr, - xcap: xcap, - xcirc: xcirc, - xcup: xcup, - xdtri: xdtri, - Xfr: Xfr, - xfr: xfr, - xharr: xharr, - xhArr: xhArr, - Xi: Xi, - xi: xi, - xlarr: xlarr, - xlArr: xlArr, - xmap: xmap, - xnis: xnis, - xodot: xodot, - Xopf: Xopf, - xopf: xopf, - xoplus: xoplus, - xotime: xotime, - xrarr: xrarr, - xrArr: xrArr, - Xscr: Xscr, - xscr: xscr, - xsqcup: xsqcup, - xuplus: xuplus, - xutri: xutri, - xvee: xvee, - xwedge: xwedge, - Yacute: Yacute, - yacute: yacute, - YAcy: YAcy, - yacy: yacy, - Ycirc: Ycirc, - ycirc: ycirc, - Ycy: Ycy, - ycy: ycy, - yen: yen, - Yfr: Yfr, - yfr: yfr, - YIcy: YIcy, - yicy: yicy, - Yopf: Yopf, - yopf: yopf, - Yscr: Yscr, - yscr: yscr, - YUcy: YUcy, - yucy: yucy, - yuml: yuml, - Yuml: Yuml, - Zacute: Zacute, - zacute: zacute, - Zcaron: Zcaron, - zcaron: zcaron, - Zcy: Zcy, - zcy: zcy, - Zdot: Zdot, - zdot: zdot, - zeetrf: zeetrf, - ZeroWidthSpace: ZeroWidthSpace, - Zeta: Zeta, - zeta: zeta, - zfr: zfr, - Zfr: Zfr, - ZHcy: ZHcy, - zhcy: zhcy, - zigrarr: zigrarr, - zopf: zopf, - Zopf: Zopf, - Zscr: Zscr, - zscr: zscr, - zwj: zwj, - zwnj: zwnj, - 'default': entities - }); - - var require$$1 = getCjsExportFromNamespace(entities$1); - - var encodeTrie = createCommonjsModule(function (module, exports) { - var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getTrie = exports.encodeHTMLTrieRe = exports.getCodePoint = void 0; - var entities_json_1 = __importDefault(require$$1); - function isHighSurrugate(c) { - return (c & 64512 /* Mask */) === 55296 /* High */; - } - // For compatibility with node < 4, we wrap `codePointAt` - exports.getCodePoint = - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - String.prototype.codePointAt != null - ? function (str, index) { return str.codePointAt(index); } - : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - function (c, index) { - return isHighSurrugate(c.charCodeAt(index)) - ? (c.charCodeAt(index) - 55296 /* High */) * 0x400 + - c.charCodeAt(index + 1) - - 0xdc00 + - 0x10000 - : c.charCodeAt(index); - }; - var htmlTrie = getTrie(entities_json_1.default); - function encodeHTMLTrieRe(regExp, str) { - var _a; - var ret = ""; - var lastIdx = 0; - var match; - while ((match = regExp.exec(str)) !== null) { - var i = match.index; - var char = str.charCodeAt(i); - var next = htmlTrie.get(char); - if (next) { - if (next.next != null && i + 1 < str.length) { - var value = (_a = next.next.get(str.charCodeAt(i + 1))) === null || _a === void 0 ? void 0 : _a.value; - if (value != null) { - ret += str.substring(lastIdx, i) + value; - regExp.lastIndex += 1; - lastIdx = i + 2; - continue; - } - } - ret += str.substring(lastIdx, i) + next.value; - lastIdx = i + 1; - } - else { - ret += str.substring(lastIdx, i) + "&#x" + exports.getCodePoint(str, i).toString(16) + ";"; - // Increase by 1 if we have a surrogate pair - lastIdx = regExp.lastIndex += Number(isHighSurrugate(char)); - } - } - return ret + str.substr(lastIdx); - } - exports.encodeHTMLTrieRe = encodeHTMLTrieRe; - function getTrie(map) { - var _a, _b, _c, _d; - var trie = new Map(); - for (var _i = 0, _e = Object.keys(map); _i < _e.length; _i++) { - var value = _e[_i]; - var key = map[value]; - // Resolve the key - var lastMap = trie; - for (var i = 0; i < key.length - 1; i++) { - var char = key.charCodeAt(i); - var next = (_a = lastMap.get(char)) !== null && _a !== void 0 ? _a : {}; - lastMap.set(char, next); - lastMap = (_b = next.next) !== null && _b !== void 0 ? _b : (next.next = new Map()); - } - var val = (_c = lastMap.get(key.charCodeAt(key.length - 1))) !== null && _c !== void 0 ? _c : {}; - (_d = val.value) !== null && _d !== void 0 ? _d : (val.value = "&" + value + ";"); - lastMap.set(key.charCodeAt(key.length - 1), val); - } - return trie; - } - exports.getTrie = getTrie; - }); - - unwrapExports(encodeTrie); - var encodeTrie_1 = encodeTrie.getTrie; - var encodeTrie_2 = encodeTrie.encodeHTMLTrieRe; - var encodeTrie_3 = encodeTrie.getCodePoint; - - var require$$0 = getCjsExportFromNamespace(xml$1); - - var encode$1 = createCommonjsModule(function (module, exports) { - var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0; - var xml_json_1 = __importDefault(require$$0); - - var entities_json_1 = __importDefault(require$$1); - var htmlReplacer = getCharRegExp(entities_json_1.default, true); - var xmlReplacer = getCharRegExp(xml_json_1.default, true); - var xmlInvalidChars = getCharRegExp(xml_json_1.default, false); - var xmlCodeMap = new Map(Object.keys(xml_json_1.default).map(function (k) { return [ - xml_json_1.default[k].charCodeAt(0), - "&" + k + ";", - ]; })); - /** - * Encodes all non-ASCII characters, as well as characters not valid in XML - * documents using XML entities. - * - * If a character has no equivalent entity, a - * numeric hexadecimal reference (eg. `ü`) will be used. - */ - function encodeXML(str) { - var ret = ""; - var lastIdx = 0; - var match; - while ((match = xmlReplacer.exec(str)) !== null) { - var i = match.index; - var char = str.charCodeAt(i); - var next = xmlCodeMap.get(char); - if (next) { - ret += str.substring(lastIdx, i) + next; - lastIdx = i + 1; - } - else { - ret += str.substring(lastIdx, i) + "&#x" + encodeTrie.getCodePoint(str, i).toString(16) + ";"; - // Increase by 1 if we have a surrogate pair - lastIdx = xmlReplacer.lastIndex += Number((char & 65408) === 0xd800); - } - } - return ret + str.substr(lastIdx); - } - exports.encodeXML = encodeXML; - /** - * Encodes all entities and non-ASCII characters in the input. - * - * This includes characters that are valid ASCII characters in HTML documents. - * For example `#` will be encoded as `#`. To get a more compact output, - * consider using the `encodeNonAsciiHTML` function. - * - * If a character has no equivalent entity, a - * numeric hexadecimal reference (eg. `ü`) will be used. - */ - function encodeHTML(data) { - return encodeTrie.encodeHTMLTrieRe(htmlReplacer, data); - } - exports.encodeHTML = encodeHTML; - /** - * Encodes all non-ASCII characters, as well as characters not valid in HTML - * documents using HTML entities. - * - * If a character has no equivalent entity, a - * numeric hexadecimal reference (eg. `ü`) will be used. - */ - function encodeNonAsciiHTML(data) { - return encodeTrie.encodeHTMLTrieRe(xmlReplacer, data); - } - exports.encodeNonAsciiHTML = encodeNonAsciiHTML; - function getCharRegExp(map, nonAscii) { - // Collect the start characters of all entities - var chars = Object.keys(map) - .map(function (k) { return "\\" + map[k].charAt(0); }) - .filter(function (v) { return !nonAscii || v.charCodeAt(1) < 128; }) - .sort(function (a, b) { return a.charCodeAt(1) - b.charCodeAt(1); }) - // Remove duplicates - .filter(function (v, i, a) { return v !== a[i + 1]; }); - // Add ranges to single characters. - for (var start = 0; start < chars.length - 1; start++) { - // Find the end of a run of characters - var end = start; - while (end < chars.length - 1 && - chars[end].charCodeAt(1) + 1 === chars[end + 1].charCodeAt(1)) { - end += 1; - } - var count = 1 + end - start; - // We want to replace at least three characters - if (count < 3) - continue; - chars.splice(start, count, chars[start] + "-" + chars[end]); - } - return new RegExp("[" + chars.join("") + (nonAscii ? "\\x80-\\uFFFF" : "") + "]", "g"); - } - /** - * Encodes all non-ASCII characters, as well as characters not valid in XML - * documents using numeric hexadecimal reference (eg. `ü`). - * - * Have a look at `escapeUTF8` if you want a more concise output at the expense - * of reduced transportability. - * - * @param data String to escape. - */ - exports.escape = encodeXML; - /** - * Encodes all characters not valid in XML documents using XML entities. - * - * Note that the output will be character-set dependent. - * - * @param data String to escape. - */ - function escapeUTF8(data) { - var match; - var lastIdx = 0; - var result = ""; - while ((match = xmlInvalidChars.exec(data))) { - if (lastIdx !== match.index) { - result += data.substring(lastIdx, match.index); - } - // We know that this chararcter will be in `inverseXML` - result += xmlCodeMap.get(match[0].charCodeAt(0)); - // Every match will be of length 1 - lastIdx = match.index + 1; - } - return result + data.substring(lastIdx); - } - exports.escapeUTF8 = escapeUTF8; - }); - - unwrapExports(encode$1); - var encode_1$1 = encode$1.escapeUTF8; - var encode_2 = encode$1.escape; - var encode_3 = encode$1.encodeNonAsciiHTML; - var encode_4 = encode$1.encodeHTML; - var encode_5 = encode$1.encodeXML; - - var lib = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.DecodingMode = exports.EntityLevel = void 0; - - - /** The level of entities to support. */ - var EntityLevel; - (function (EntityLevel) { - /** Support only XML entities. */ - EntityLevel[EntityLevel["XML"] = 0] = "XML"; - /** Support HTML entities, which are a superset of XML entities. */ - EntityLevel[EntityLevel["HTML"] = 1] = "HTML"; - })(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); - /** Determines whether some entities are allowed to be written without a trailing `;`. */ - var DecodingMode; - (function (DecodingMode) { - /** Support legacy HTML entities. */ - DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy"; - /** Do not support legacy HTML entities. */ - DecodingMode[DecodingMode["Strict"] = 1] = "Strict"; - })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); - var EncodingMode; - (function (EncodingMode) { - /** - * The output is UTF-8 encoded. Only characters that need escaping within - * HTML will be escaped. - */ - EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8"; - /** - * The output consists only of ASCII characters. Characters that need - * escaping within HTML, and characters that aren't ASCII characters will - * be escaped. - */ - EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII"; - /** - * Encode all characters that have an equivalent entity, as well as all - * characters that are not ASCII characters. - */ - EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive"; - })(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); - /** - * Decodes a string with entities. - * - * @param data String to decode. - * @param options Decoding options. - */ - function decode$1(data, options) { - if (options === void 0) { options = EntityLevel.XML; } - var opts = typeof options === "number" ? { level: options } : options; - if (opts.level === EntityLevel.HTML) { - if (opts.mode === DecodingMode.Strict) { - return decode.decodeHTMLStrict(data); - } - return decode.decodeHTML(data); - } - return decode.decodeXML(data); - } - exports.decode = decode$1; - /** - * Decodes a string with entities. Does not allow missing trailing semicolons for entities. - * - * @param data String to decode. - * @param options Decoding options. - * @deprecated Use `decode` with the `mode` set to `Strict`. - */ - function decodeStrict(data, options) { - if (options === void 0) { options = EntityLevel.XML; } - var opts = typeof options === "number" ? { level: options } : options; - if (opts.level === EntityLevel.HTML) { - if (opts.mode === DecodingMode.Legacy) { - return decode.decodeHTML(data); - } - return decode.decodeHTMLStrict(data); - } - return decode.decodeXML(data); - } - exports.decodeStrict = decodeStrict; - /** - * Encodes a string with entities. - * - * @param data String to encode. - * @param options Encoding options. - */ - function encode(data, options) { - if (options === void 0) { options = EntityLevel.XML; } - var opts = typeof options === "number" ? { level: options } : options; - // Mode `UTF8` just escapes XML entities - if (opts.mode === EncodingMode.UTF8) - return encode$1.escapeUTF8(data); - if (opts.level === EntityLevel.HTML) { - if (opts.mode === EncodingMode.ASCII) { - return encode$1.encodeNonAsciiHTML(data); - } - return encode$1.encodeHTML(data); - } - // ASCII and Extensive are equivalent - return encode$1.encodeXML(data); - } - exports.encode = encode; - var encode_2 = encode$1; - Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } }); - Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); - Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function () { return encode_2.encodeNonAsciiHTML; } }); - Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } }); - Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function () { return encode_2.escapeUTF8; } }); - // Legacy aliases (deprecated) - Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); - Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); - var decode_2 = decode; - Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } }); - Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); - Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); - // Legacy aliases (deprecated) - Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); - Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); - Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); - Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); - Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } }); - }); - - unwrapExports(lib); - var lib_1 = lib.decodeXMLStrict; - var lib_2 = lib.decodeHTML5Strict; - var lib_3 = lib.decodeHTML4Strict; - var lib_4 = lib.decodeHTML5; - var lib_5 = lib.decodeHTML4; - var lib_6 = lib.decodeHTMLStrict; - var lib_7 = lib.decodeHTML; - var lib_8 = lib.decodeXML; - var lib_9 = lib.encodeHTML5; - var lib_10 = lib.encodeHTML4; - var lib_11 = lib.escapeUTF8; - var lib_12 = lib.escape; - var lib_13 = lib.encodeNonAsciiHTML; - var lib_14 = lib.encodeHTML; - var lib_15 = lib.encodeXML; - var lib_16 = lib.encode; - var lib_17 = lib.decodeStrict; - var lib_18 = lib.decode; - var lib_19 = lib.EncodingMode; - var lib_20 = lib.DecodingMode; - var lib_21 = lib.EntityLevel; - - var C_BACKSLASH = 92; - - var ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});"; - - var TAGNAME = "[A-Za-z][A-Za-z0-9-]*"; - var ATTRIBUTENAME = "[a-zA-Z_:][a-zA-Z0-9:._-]*"; - var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+"; - var SINGLEQUOTEDVALUE = "'[^']*'"; - var DOUBLEQUOTEDVALUE = '"[^"]*"'; - var ATTRIBUTEVALUE = - "(?:" + - UNQUOTEDVALUE + - "|" + - SINGLEQUOTEDVALUE + - "|" + - DOUBLEQUOTEDVALUE + - ")"; - var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")"; - var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)"; - var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; - var CLOSETAG = "]"; - var HTMLCOMMENT = "||"; - var PROCESSINGINSTRUCTION = "[<][?][\\s\\S]*?[?][>]"; - var DECLARATION = "]*>"; - var CDATA = ""; - var HTMLTAG = - "(?:" + - OPENTAG + - "|" + - CLOSETAG + - "|" + - HTMLCOMMENT + - "|" + - PROCESSINGINSTRUCTION + - "|" + - DECLARATION + - "|" + - CDATA + - ")"; - var reHtmlTag = new RegExp("^" + HTMLTAG); - - var reBackslashOrAmp = /[\\&]/; - - var ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"; - - var reEntityOrEscapedChar = new RegExp("\\\\" + ESCAPABLE + "|" + ENTITY, "gi"); - - var XMLSPECIAL = '[&<>"]'; - - var reXmlSpecial = new RegExp(XMLSPECIAL, "g"); - - var unescapeChar = function(s) { - if (s.charCodeAt(0) === C_BACKSLASH) { - return s.charAt(1); - } else { - return lib_6(s); - } - }; - - // Replace entities and backslash escapes with literal characters. - var unescapeString = function(s) { - if (reBackslashOrAmp.test(s)) { - return s.replace(reEntityOrEscapedChar, unescapeChar); - } else { - return s; - } - }; - - var normalizeURI = function(uri) { - try { - return encode_1(uri); - } catch (err) { - return uri; - } - }; - - var replaceUnsafeChar = function(s) { - switch (s) { - case "&": - return "&"; - case "<": - return "<"; - case ">": - return ">"; - case '"': - return """; - default: - return s; - } - }; - - var escapeXml = function(s) { - if (reXmlSpecial.test(s)) { - return s.replace(reXmlSpecial, replaceUnsafeChar); - } else { - return s; - } - }; - - // derived from https://github.com/mathiasbynens/String.fromCodePoint - /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */ - - var _fromCodePoint; - - function fromCodePoint(_) { - return _fromCodePoint(_); - } - - if (String.fromCodePoint) { - _fromCodePoint = function(_) { - try { - return String.fromCodePoint(_); - } catch (e) { - if (e instanceof RangeError) { - return String.fromCharCode(0xfffd); - } - throw e; - } - }; - } else { - var stringFromCharCode = String.fromCharCode; - var floor = Math.floor; - _fromCodePoint = function() { - var MAX_SIZE = 0x4000; - var codeUnits = []; - var highSurrogate; - var lowSurrogate; - var index = -1; - var length = arguments.length; - if (!length) { - return ""; - } - var result = ""; - while (++index < length) { - var codePoint = Number(arguments[index]); - if ( - !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` - codePoint < 0 || // not a valid Unicode code point - codePoint > 0x10ffff || // not a valid Unicode code point - floor(codePoint) !== codePoint // not an integer - ) { - return String.fromCharCode(0xfffd); - } - if (codePoint <= 0xffff) { - // BMP code point - codeUnits.push(codePoint); - } else { - // Astral code point; split in surrogate halves - // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint -= 0x10000; - highSurrogate = (codePoint >> 10) + 0xd800; - lowSurrogate = (codePoint % 0x400) + 0xdc00; - codeUnits.push(highSurrogate, lowSurrogate); - } - if (index + 1 === length || codeUnits.length > MAX_SIZE) { - result += stringFromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result; - }; - } - - var normalizeURI$1 = normalizeURI; - var unescapeString$1 = unescapeString; - - // Constants for character codes: - - var C_NEWLINE = 10; - var C_ASTERISK = 42; - var C_UNDERSCORE = 95; - var C_BACKTICK = 96; - var C_OPEN_BRACKET = 91; - var C_CLOSE_BRACKET = 93; - var C_LESSTHAN = 60; - var C_BANG = 33; - var C_BACKSLASH$1 = 92; - var C_AMPERSAND = 38; - var C_OPEN_PAREN = 40; - var C_CLOSE_PAREN = 41; - var C_COLON = 58; - var C_SINGLEQUOTE = 39; - var C_DOUBLEQUOTE = 34; - - // Some regexps used in inline parser: - - var ESCAPABLE$1 = ESCAPABLE; - var ESCAPED_CHAR = "\\\\" + ESCAPABLE$1; - - var ENTITY$1 = ENTITY; - var reHtmlTag$1 = reHtmlTag; - - var rePunctuation = new RegExp( - /^[!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~\p{P}\p{S}]/u); - - var reLinkTitle = new RegExp( - '^(?:"(' + - ESCAPED_CHAR + - '|\\\\[^\\\\]' + - '|[^\\\\"\\x00])*"' + - "|" + - "'(" + - ESCAPED_CHAR + - '|\\\\[^\\\\]' + - "|[^\\\\'\\x00])*'" + - "|" + - "\\((" + - ESCAPED_CHAR + - '|\\\\[^\\\\]' + - "|[^\\\\()\\x00])*\\))" - ); - - var reLinkDestinationBraces = /^(?:<(?:[^<>\n\\\x00]|\\.)*>)/; - - var reEscapable = new RegExp("^" + ESCAPABLE$1); - - var reEntityHere = new RegExp("^" + ENTITY$1, "i"); - - var reTicks = /`+/; - - var reTicksHere = /^`+/; - - var reEllipses = /\.\.\./g; - - var reDash = /--+/g; - - var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/; - - var reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>/i; - - var reSpnl = /^ *(?:\n *)?/; - - var reWhitespaceChar = /^[ \t\n\x0b\x0c\x0d]/; - - var reUnicodeWhitespaceChar = /^\s/; - - var reFinalSpace = / *$/; - - var reInitialSpace = /^ */; - - var reSpaceAtEndOfLine = /^ *(?:\n|$)/; - - var reLinkLabel = /^\[(?:[^\\\[\]]|\\.){0,1000}\]/s; - - // Matches a string of non-special characters. - var reMain = /^[^\n`\[\]\\!<&*_'"]+/m; - - var text = function(s) { - var node = new Node("text"); - node._literal = s; - return node; - }; - - // normalize a reference in reference link (remove []s, trim, - // collapse internal space, unicode case fold. - // See commonmark/commonmark.js#168. - var normalizeReference = function(string) { - return string - .slice(1, string.length - 1) - .trim() - .replace(/[ \t\r\n]+/g, " ") - .toLowerCase() - .toUpperCase(); - }; - - // INLINE PARSER - - // These are methods of an InlineParser object, defined below. - // An InlineParser keeps track of a subject (a string to be - // parsed) and a position in that subject. - - // If re matches at current position in the subject, advance - // position in subject and return the match; otherwise return null. - var match = function(re) { - var m = re.exec(this.subject.slice(this.pos)); - if (m === null) { - return null; - } else { - this.pos += m.index + m[0].length; - return m[0]; - } - }; - - // Returns the code for the character at the current subject position, or -1 - // there are no more characters. - var peek = function() { - if (this.pos < this.subject.length) { - return this.subject.charCodeAt(this.pos); - } else { - return -1; - } - }; - - // Parse zero or more space characters, including at most one newline - var spnl = function() { - this.match(reSpnl); - return true; - }; - - // All of the parsers below try to match something at the current position - // in the subject. If they succeed in matching anything, they - // return the inline matched, advancing the subject. - - // Attempt to parse backticks, adding either a backtick code span or a - // literal sequence of backticks. - var parseBackticks = function(block) { - var ticks = this.match(reTicksHere); - if (ticks === null) { - return false; - } - var afterOpenTicks = this.pos; - var matched; - var node; - var contents; - while ((matched = this.match(reTicks)) !== null) { - if (matched === ticks) { - node = new Node("code"); - contents = this.subject - .slice(afterOpenTicks, this.pos - ticks.length) - .replace(/\n/gm, " "); - if ( - contents.length > 0 && - contents.match(/[^ ]/) !== null && - contents[0] == " " && - contents[contents.length - 1] == " " - ) { - node._literal = contents.slice(1, contents.length - 1); - } else { - node._literal = contents; - } - block.appendChild(node); - return true; - } - } - // If we got here, we didn't match a closing backtick sequence. - this.pos = afterOpenTicks; - block.appendChild(text(ticks)); - return true; - }; - - // Parse a backslash-escaped special character, adding either the escaped - // character, a hard line break (if the backslash is followed by a newline), - // or a literal backslash to the block's children. Assumes current character - // is a backslash. - var parseBackslash = function(block) { - var subj = this.subject; - var node; - this.pos += 1; - if (this.peek() === C_NEWLINE) { - this.pos += 1; - node = new Node("linebreak"); - block.appendChild(node); - } else if (reEscapable.test(subj.charAt(this.pos))) { - block.appendChild(text(subj.charAt(this.pos))); - this.pos += 1; - } else { - block.appendChild(text("\\")); - } - return true; - }; - - // Attempt to parse an autolink (URL or email in pointy brackets). - var parseAutolink = function(block) { - var m; - var dest; - var node; - if ((m = this.match(reEmailAutolink))) { - dest = m.slice(1, m.length - 1); - node = new Node("link"); - node._destination = normalizeURI$1("mailto:" + dest); - node._title = ""; - node.appendChild(text(dest)); - block.appendChild(node); - return true; - } else if ((m = this.match(reAutolink))) { - dest = m.slice(1, m.length - 1); - node = new Node("link"); - node._destination = normalizeURI$1(dest); - node._title = ""; - node.appendChild(text(dest)); - block.appendChild(node); - return true; - } else { - return false; - } - }; - - // Attempt to parse a raw HTML tag. - var parseHtmlTag = function(block) { - var m = this.match(reHtmlTag$1); - if (m === null) { - return false; - } else { - var node = new Node("html_inline"); - node._literal = m; - block.appendChild(node); - return true; - } - }; - - // Scan a sequence of characters with code cc, and return information about - // the number of delimiters and whether they are positioned such that - // they can open and/or close emphasis or strong emphasis. A utility - // function for strong/emph parsing. - var scanDelims = function(cc) { - var numdelims = 0; - var char_before, char_after, cc_after; - var startpos = this.pos; - var left_flanking, right_flanking, can_open, can_close; - var after_is_whitespace, - after_is_punctuation, - before_is_whitespace, - before_is_punctuation; - - if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { - numdelims++; - this.pos++; - } else { - while (this.peek() === cc) { - numdelims++; - this.pos++; - } - } - - if (numdelims === 0) { - return null; - } - - char_before = startpos === 0 ? "\n" : this.subject.charAt(startpos - 1); - - cc_after = this.peek(); - if (cc_after === -1) { - char_after = "\n"; - } else { - char_after = fromCodePoint(cc_after); - } - - after_is_whitespace = reUnicodeWhitespaceChar.test(char_after); - after_is_punctuation = rePunctuation.test(char_after); - before_is_whitespace = reUnicodeWhitespaceChar.test(char_before); - before_is_punctuation = rePunctuation.test(char_before); - - left_flanking = - !after_is_whitespace && - (!after_is_punctuation || - before_is_whitespace || - before_is_punctuation); - right_flanking = - !before_is_whitespace && - (!before_is_punctuation || after_is_whitespace || after_is_punctuation); - if (cc === C_UNDERSCORE) { - can_open = left_flanking && (!right_flanking || before_is_punctuation); - can_close = right_flanking && (!left_flanking || after_is_punctuation); - } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { - can_open = left_flanking && !right_flanking; - can_close = right_flanking; - } else { - can_open = left_flanking; - can_close = right_flanking; - } - this.pos = startpos; - return { numdelims: numdelims, can_open: can_open, can_close: can_close }; - }; - - // Handle a delimiter marker for emphasis or a quote. - var handleDelim = function(cc, block) { - var res = this.scanDelims(cc); - if (!res) { - return false; - } - var numdelims = res.numdelims; - var startpos = this.pos; - var contents; - - this.pos += numdelims; - if (cc === C_SINGLEQUOTE) { - contents = "\u2019"; - } else if (cc === C_DOUBLEQUOTE) { - contents = "\u201C"; - } else { - contents = this.subject.slice(startpos, this.pos); - } - var node = text(contents); - block.appendChild(node); - - // Add entry to stack for this opener - if ( - (res.can_open || res.can_close) && - (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE)) - ) { - this.delimiters = { - cc: cc, - numdelims: numdelims, - origdelims: numdelims, - node: node, - previous: this.delimiters, - next: null, - can_open: res.can_open, - can_close: res.can_close - }; - if (this.delimiters.previous !== null) { - this.delimiters.previous.next = this.delimiters; - } - } - - return true; - }; - - var removeDelimiter = function(delim) { - if (delim.previous !== null) { - delim.previous.next = delim.next; - } - if (delim.next === null) { - // top of stack - this.delimiters = delim.previous; - } else { - delim.next.previous = delim.previous; - } - }; - - var removeDelimitersBetween = function(bottom, top) { - if (bottom.next !== top) { - bottom.next = top; - top.previous = bottom; - } - }; - - var processEmphasis = function(stack_bottom) { - var opener, closer, old_closer; - var opener_inl, closer_inl; - var tempstack; - var use_delims; - var tmp, next; - var opener_found; - var openers_bottom = []; - var openers_bottom_index; - var odd_match = false; - - for (var i = 0; i < 14; i++) { - openers_bottom[i] = stack_bottom; - } - // find first closer above stack_bottom: - closer = this.delimiters; - while (closer !== null && closer.previous !== stack_bottom) { - closer = closer.previous; - } - // move forward, looking for closers, and handling each - while (closer !== null) { - var closercc = closer.cc; - if (!closer.can_close) { - closer = closer.next; - } else { - // found emphasis closer. now look back for first matching opener: - opener = closer.previous; - opener_found = false; - switch (closercc) { - case C_SINGLEQUOTE: - openers_bottom_index = 0; - break; - case C_DOUBLEQUOTE: - openers_bottom_index = 1; - break; - case C_UNDERSCORE: - openers_bottom_index = 2 + (closer.can_open ? 3 : 0) - + (closer.origdelims % 3); - break; - case C_ASTERISK: - openers_bottom_index = 8 + (closer.can_open ? 3 : 0) - + (closer.origdelims % 3); - break; - } - while ( - opener !== null && - opener !== stack_bottom && - opener !== openers_bottom[openers_bottom_index] - ) { - odd_match = - (closer.can_open || opener.can_close) && - closer.origdelims % 3 !== 0 && - (opener.origdelims + closer.origdelims) % 3 === 0; - if (opener.cc === closer.cc && opener.can_open && !odd_match) { - opener_found = true; - break; - } - opener = opener.previous; - } - old_closer = closer; - - if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) { - if (!opener_found) { - closer = closer.next; - } else { - // calculate actual number of delimiters used from closer - use_delims = - closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1; - - opener_inl = opener.node; - closer_inl = closer.node; - - // remove used delimiters from stack elts and inlines - opener.numdelims -= use_delims; - closer.numdelims -= use_delims; - opener_inl._literal = opener_inl._literal.slice( - 0, - opener_inl._literal.length - use_delims - ); - closer_inl._literal = closer_inl._literal.slice( - 0, - closer_inl._literal.length - use_delims - ); - - // build contents for new emph element - var emph = new Node(use_delims === 1 ? "emph" : "strong"); - - tmp = opener_inl._next; - while (tmp && tmp !== closer_inl) { - next = tmp._next; - tmp.unlink(); - emph.appendChild(tmp); - tmp = next; - } - - opener_inl.insertAfter(emph); - - // remove elts between opener and closer in delimiters stack - removeDelimitersBetween(opener, closer); - - // if opener has 0 delims, remove it and the inline - if (opener.numdelims === 0) { - opener_inl.unlink(); - this.removeDelimiter(opener); - } - - if (closer.numdelims === 0) { - closer_inl.unlink(); - tempstack = closer.next; - this.removeDelimiter(closer); - closer = tempstack; - } - } - } else if (closercc === C_SINGLEQUOTE) { - closer.node._literal = "\u2019"; - if (opener_found) { - opener.node._literal = "\u2018"; - } - closer = closer.next; - } else if (closercc === C_DOUBLEQUOTE) { - closer.node._literal = "\u201D"; - if (opener_found) { - opener.node.literal = "\u201C"; - } - closer = closer.next; - } - if (!opener_found) { - // Set lower bound for future searches for openers: - openers_bottom[openers_bottom_index] = - old_closer.previous; - if (!old_closer.can_open) { - // We can remove a closer that can't be an opener, - // once we've seen there's no matching opener: - this.removeDelimiter(old_closer); - } - } - } - } - - // remove all delimiters - while (this.delimiters !== null && this.delimiters !== stack_bottom) { - this.removeDelimiter(this.delimiters); - } - }; - - // Attempt to parse link title (sans quotes), returning the string - // or null if no match. - var parseLinkTitle = function() { - var title = this.match(reLinkTitle); - if (title === null) { - return null; - } else { - // chop off quotes from title and unescape: - return unescapeString$1(title.slice(1, -1)); - } - }; - - // Attempt to parse link destination, returning the string or - // null if no match. - var parseLinkDestination = function() { - var res = this.match(reLinkDestinationBraces); - if (res === null) { - if (this.peek() === C_LESSTHAN) { - return null; - } - // TODO handrolled parser; res should be null or the string - var savepos = this.pos; - var openparens = 0; - var c; - while ((c = this.peek()) !== -1) { - if ( - c === C_BACKSLASH$1 && - reEscapable.test(this.subject.charAt(this.pos + 1)) - ) { - this.pos += 1; - if (this.peek() !== -1) { - this.pos += 1; - } - } else if (c === C_OPEN_PAREN) { - this.pos += 1; - openparens += 1; - } else if (c === C_CLOSE_PAREN) { - if (openparens < 1) { - break; - } else { - this.pos += 1; - openparens -= 1; - } - } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) { - break; - } else { - this.pos += 1; - } - } - if (this.pos === savepos && c !== C_CLOSE_PAREN) { - return null; - } - if (openparens !== 0) { - return null; - } - res = this.subject.slice(savepos, this.pos); - return normalizeURI$1(unescapeString$1(res)); - } else { - // chop off surrounding <..>: - return normalizeURI$1(unescapeString$1(res.slice(1, -1))); - } - }; - - // Attempt to parse a link label, returning number of characters parsed. - var parseLinkLabel = function() { - var m = this.match(reLinkLabel); - if (m === null || m.length > 1001) { - return 0; - } else { - return m.length; - } - }; - - // Add open bracket to delimiter stack and add a text node to block's children. - var parseOpenBracket = function(block) { - var startpos = this.pos; - this.pos += 1; - - var node = text("["); - block.appendChild(node); - - // Add entry to stack for this opener - this.addBracket(node, startpos, false); - return true; - }; - - // IF next character is [, and ! delimiter to delimiter stack and - // add a text node to block's children. Otherwise just add a text node. - var parseBang = function(block) { - var startpos = this.pos; - this.pos += 1; - if (this.peek() === C_OPEN_BRACKET) { - this.pos += 1; - - var node = text("!["); - block.appendChild(node); - - // Add entry to stack for this opener - this.addBracket(node, startpos + 1, true); - } else { - block.appendChild(text("!")); - } - return true; - }; - - // Try to match close bracket against an opening in the delimiter - // stack. Add either a link or image, or a plain [ character, - // to block's children. If there is a matching delimiter, - // remove it from the delimiter stack. - var parseCloseBracket = function(block) { - var startpos; - var is_image; - var dest; - var title; - var matched = false; - var reflabel; - var opener; - - this.pos += 1; - startpos = this.pos; - - // get last [ or ![ - opener = this.brackets; - - if (opener === null) { - // no matched opener, just return a literal - block.appendChild(text("]")); - return true; - } - - if (!opener.active) { - // no matched opener, just return a literal - block.appendChild(text("]")); - // take opener off brackets stack - this.removeBracket(); - return true; - } - - // If we got here, open is a potential opener - is_image = opener.image; - - // Check to see if we have a link/image - - var savepos = this.pos; - - // Inline link? - if (this.peek() === C_OPEN_PAREN) { - this.pos++; - if ( - this.spnl() && - (dest = this.parseLinkDestination()) !== null && - this.spnl() && - // make sure there's a space before the title: - ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) && - (title = this.parseLinkTitle())) || - true) && - this.spnl() && - this.peek() === C_CLOSE_PAREN - ) { - this.pos += 1; - matched = true; - } else { - this.pos = savepos; - } - } - - if (!matched) { - // Next, see if there's a link label - var beforelabel = this.pos; - var n = this.parseLinkLabel(); - if (n > 2) { - reflabel = this.subject.slice(beforelabel, beforelabel + n); - } else if (!opener.bracketAfter) { - // Empty or missing second label means to use the first label as the reference. - // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it. - reflabel = this.subject.slice(opener.index, startpos); - } - if (n === 0) { - // If shortcut reference link, rewind before spaces we skipped. - this.pos = savepos; - } - - if (reflabel) { - // lookup rawlabel in refmap - var link = this.refmap[normalizeReference(reflabel)]; - if (link) { - dest = link.destination; - title = link.title; - matched = true; - } - } - } - - if (matched) { - var node = new Node(is_image ? "image" : "link"); - node._destination = dest; - node._title = title || ""; - - var tmp, next; - tmp = opener.node._next; - while (tmp) { - next = tmp._next; - tmp.unlink(); - node.appendChild(tmp); - tmp = next; - } - block.appendChild(node); - this.processEmphasis(opener.previousDelimiter); - this.removeBracket(); - opener.node.unlink(); - - // We remove this bracket and processEmphasis will remove later delimiters. - // Now, for a link, we also deactivate earlier link openers. - // (no links in links) - if (!is_image) { - opener = this.brackets; - while (opener !== null) { - if (!opener.image) { - opener.active = false; // deactivate this opener - } - opener = opener.previous; - } - } - - return true; - } else { - // no match - - this.removeBracket(); // remove this opener from stack - this.pos = startpos; - block.appendChild(text("]")); - return true; - } - }; - - var addBracket = function(node, index, image) { - if (this.brackets !== null) { - this.brackets.bracketAfter = true; - } - this.brackets = { - node: node, - previous: this.brackets, - previousDelimiter: this.delimiters, - index: index, - image: image, - active: true - }; - }; - - var removeBracket = function() { - this.brackets = this.brackets.previous; - }; - - // Attempt to parse an entity. - var parseEntity = function(block) { - var m; - if ((m = this.match(reEntityHere))) { - block.appendChild(text(lib_6(m))); - return true; - } else { - return false; - } - }; - - // Parse a run of ordinary characters, or a single character with - // a special meaning in markdown, as a plain string. - var parseString = function(block) { - var m; - if ((m = this.match(reMain))) { - if (this.options.smart) { - block.appendChild( - text( - m - .replace(reEllipses, "\u2026") - .replace(reDash, function(chars) { - var enCount = 0; - var emCount = 0; - if (chars.length % 3 === 0) { - // If divisible by 3, use all em dashes - emCount = chars.length / 3; - } else if (chars.length % 2 === 0) { - // If divisible by 2, use all en dashes - enCount = chars.length / 2; - } else if (chars.length % 3 === 2) { - // If 2 extra dashes, use en dash for last 2; em dashes for rest - enCount = 1; - emCount = (chars.length - 2) / 3; - } else { - // Use en dashes for last 4 hyphens; em dashes for rest - enCount = 2; - emCount = (chars.length - 4) / 3; - } - return ( - "\u2014".repeat(emCount) + - "\u2013".repeat(enCount) - ); - }) - ) - ); - } else { - block.appendChild(text(m)); - } - return true; - } else { - return false; - } - }; - - // Parse a newline. If it was preceded by two spaces, return a hard - // line break; otherwise a soft line break. - var parseNewline = function(block) { - this.pos += 1; // assume we're at a \n - // check previous node for trailing spaces - var lastc = block._lastChild; - if ( - lastc && - lastc.type === "text" && - lastc._literal[lastc._literal.length - 1] === " " - ) { - var hardbreak = lastc._literal[lastc._literal.length - 2] === " "; - lastc._literal = lastc._literal.replace(reFinalSpace, ""); - block.appendChild(new Node(hardbreak ? "linebreak" : "softbreak")); - } else { - block.appendChild(new Node("softbreak")); - } - this.match(reInitialSpace); // gobble leading spaces in next line - return true; - }; - - // Attempt to parse a link reference, modifying refmap. - var parseReference = function(s, refmap) { - this.subject = s; - this.pos = 0; - var rawlabel; - var dest; - var title; - var matchChars; - var startpos = this.pos; - - // label: - matchChars = this.parseLinkLabel(); - if (matchChars === 0) { - return 0; - } else { - rawlabel = this.subject.slice(0, matchChars); - } - - // colon: - if (this.peek() === C_COLON) { - this.pos++; - } else { - this.pos = startpos; - return 0; - } - - // link url - this.spnl(); - - dest = this.parseLinkDestination(); - if (dest === null) { - this.pos = startpos; - return 0; - } - - var beforetitle = this.pos; - this.spnl(); - if (this.pos !== beforetitle) { - title = this.parseLinkTitle(); - } - if (title === null) { - // rewind before spaces - this.pos = beforetitle; - } - - // make sure we're at line end: - var atLineEnd = true; - if (this.match(reSpaceAtEndOfLine) === null) { - if (title === null) { - atLineEnd = false; - } else { - // the potential title we found is not at the line end, - // but it could still be a legal link reference if we - // discard the title - title = null; - // rewind before spaces - this.pos = beforetitle; - // and instead check if the link URL is at the line end - atLineEnd = this.match(reSpaceAtEndOfLine) !== null; - } - } - - if (!atLineEnd) { - this.pos = startpos; - return 0; - } - - var normlabel = normalizeReference(rawlabel); - if (normlabel === "") { - // label must contain non-whitespace characters - this.pos = startpos; - return 0; - } - - if (!refmap[normlabel]) { - refmap[normlabel] = { destination: dest, title: title === null ? "" : title }; - } - return this.pos - startpos; - }; - - // Parse the next inline element in subject, advancing subject position. - // On success, add the result to block's children and return true. - // On failure, return false. - var parseInline = function(block) { - var res = false; - var c = this.peek(); - if (c === -1) { - return false; - } - switch (c) { - case C_NEWLINE: - res = this.parseNewline(block); - break; - case C_BACKSLASH$1: - res = this.parseBackslash(block); - break; - case C_BACKTICK: - res = this.parseBackticks(block); - break; - case C_ASTERISK: - case C_UNDERSCORE: - res = this.handleDelim(c, block); - break; - case C_SINGLEQUOTE: - case C_DOUBLEQUOTE: - res = this.options.smart && this.handleDelim(c, block); - break; - case C_OPEN_BRACKET: - res = this.parseOpenBracket(block); - break; - case C_BANG: - res = this.parseBang(block); - break; - case C_CLOSE_BRACKET: - res = this.parseCloseBracket(block); - break; - case C_LESSTHAN: - res = this.parseAutolink(block) || this.parseHtmlTag(block); - break; - case C_AMPERSAND: - res = this.parseEntity(block); - break; - default: - res = this.parseString(block); - break; - } - if (!res) { - this.pos += 1; - block.appendChild(text(fromCodePoint(c))); - } - - return true; - }; - - // Parse string content in block into inline children, - // using refmap to resolve references. - var parseInlines = function(block) { - this.subject = block._string_content.trim(); - this.pos = 0; - this.delimiters = null; - this.brackets = null; - while (this.parseInline(block)) {} - block._string_content = null; // allow raw string to be garbage collected - this.processEmphasis(null); - }; - - // The InlineParser object. - function InlineParser(options) { - return { - subject: "", - delimiters: null, // used by handleDelim method - brackets: null, - pos: 0, - refmap: {}, - match: match, - peek: peek, - spnl: spnl, - parseBackticks: parseBackticks, - parseBackslash: parseBackslash, - parseAutolink: parseAutolink, - parseHtmlTag: parseHtmlTag, - scanDelims: scanDelims, - handleDelim: handleDelim, - parseLinkTitle: parseLinkTitle, - parseLinkDestination: parseLinkDestination, - parseLinkLabel: parseLinkLabel, - parseOpenBracket: parseOpenBracket, - parseBang: parseBang, - parseCloseBracket: parseCloseBracket, - addBracket: addBracket, - removeBracket: removeBracket, - parseEntity: parseEntity, - parseString: parseString, - parseNewline: parseNewline, - parseReference: parseReference, - parseInline: parseInline, - processEmphasis: processEmphasis, - removeDelimiter: removeDelimiter, - options: options || {}, - parse: parseInlines - }; - } - - var CODE_INDENT = 4; - - var C_TAB = 9; - var C_NEWLINE$1 = 10; - var C_GREATERTHAN = 62; - var C_LESSTHAN$1 = 60; - var C_SPACE = 32; - var C_OPEN_BRACKET$1 = 91; - - var reHtmlBlockOpen = [ - /./, // dummy for 0 - /^<(?:script|pre|textarea|style)(?:\s|>|$)/i, - /^/, - /\?>/, - />/, - /\]\]>/ - ]; - - var reThematicBreak = /^(?:\*[ \t]*){3,}$|^(?:_[ \t]*){3,}$|^(?:-[ \t]*){3,}$/; - - var reMaybeSpecial = /^[#`~*+_=<>0-9-]/; - - var reNonSpace = /[^ \t\f\v\r\n]/; - - var reBulletListMarker = /^[*+-]/; - - var reOrderedListMarker = /^(\d{1,9})([.)])/; - - var reATXHeadingMarker = /^#{1,6}(?:[ \t]+|$)/; - - var reCodeFence = /^`{3,}(?!.*`)|^~{3,}/; - - var reClosingCodeFence = /^(?:`{3,}|~{3,})(?=[ \t]*$)/; - - var reSetextHeadingLine = /^(?:=+|-+)[ \t]*$/; - - var reLineEnding = /\r\n|\n|\r/; - - // Returns true if string contains only space characters. - var isBlank = function(s) { - return !reNonSpace.test(s); - }; - - var isSpaceOrTab = function(c) { - return c === C_SPACE || c === C_TAB; - }; - - var peek$1 = function(ln, pos) { - if (pos < ln.length) { - return ln.charCodeAt(pos); - } else { - return -1; - } - }; - - // DOC PARSER - - // These are methods of a Parser object, defined below. - - // Returns true if block ends with a blank line. - var endsWithBlankLine = function(block) { - return block.next && - block.sourcepos[1][0] !== block.next.sourcepos[0][0] - 1; - }; - - // Add a line to the block at the tip. We assume the tip - // can accept lines -- that check should be done before calling this. - var addLine = function() { - if (this.partiallyConsumedTab) { - this.offset += 1; // skip over tab - // add space characters: - var charsToTab = 4 - (this.column % 4); - this.tip._string_content += " ".repeat(charsToTab); - } - this.tip._string_content += this.currentLine.slice(this.offset) + "\n"; - }; - - // Add block of type tag as a child of the tip. If the tip can't - // accept children, close and finalize it and try its parent, - // and so on til we find a block that can accept children. - var addChild = function(tag, offset) { - while (!this.blocks[this.tip.type].canContain(tag)) { - this.finalize(this.tip, this.lineNumber - 1); - } - - var column_number = offset + 1; // offset 0 = column 1 - var newBlock = new Node(tag, [ - [this.lineNumber, column_number], - [0, 0] - ]); - newBlock._string_content = ""; - this.tip.appendChild(newBlock); - this.tip = newBlock; - return newBlock; - }; - - // Parse a list marker and return data on the marker (type, - // start, delimiter, bullet character, padding) or null. - var parseListMarker = function(parser, container) { - var rest = parser.currentLine.slice(parser.nextNonspace); - var match; - var nextc; - var spacesStartCol; - var spacesStartOffset; - var data = { - type: null, - tight: true, // lists are tight by default - bulletChar: null, - start: null, - delimiter: null, - padding: null, - markerOffset: parser.indent - }; - if (parser.indent >= 4) { - return null; - } - if ((match = rest.match(reBulletListMarker))) { - data.type = "bullet"; - data.bulletChar = match[0][0]; - } else if ( - (match = rest.match(reOrderedListMarker)) && - (container.type !== "paragraph" || match[1] == 1) - ) { - data.type = "ordered"; - data.start = parseInt(match[1]); - data.delimiter = match[2]; - } else { - return null; - } - // make sure we have spaces after - nextc = peek$1(parser.currentLine, parser.nextNonspace + match[0].length); - if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) { - return null; - } - - // if it interrupts paragraph, make sure first line isn't blank - if ( - container.type === "paragraph" && - !parser.currentLine - .slice(parser.nextNonspace + match[0].length) - .match(reNonSpace) - ) { - return null; - } - - // we've got a match! advance offset and calculate padding - parser.advanceNextNonspace(); // to start of marker - parser.advanceOffset(match[0].length, true); // to end of marker - spacesStartCol = parser.column; - spacesStartOffset = parser.offset; - do { - parser.advanceOffset(1, true); - nextc = peek$1(parser.currentLine, parser.offset); - } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc)); - var blank_item = peek$1(parser.currentLine, parser.offset) === -1; - var spaces_after_marker = parser.column - spacesStartCol; - if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) { - data.padding = match[0].length + 1; - parser.column = spacesStartCol; - parser.offset = spacesStartOffset; - if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { - parser.advanceOffset(1, true); - } - } else { - data.padding = match[0].length + spaces_after_marker; - } - return data; - }; - - // Returns true if the two list items are of the same type, - // with the same delimiter and bullet character. This is used - // in agglomerating list items into lists. - var listsMatch = function(list_data, item_data) { - return ( - list_data.type === item_data.type && - list_data.delimiter === item_data.delimiter && - list_data.bulletChar === item_data.bulletChar - ); - }; - - // Finalize and close any unmatched blocks. - var closeUnmatchedBlocks = function() { - if (!this.allClosed) { - // finalize any blocks not matched - while (this.oldtip !== this.lastMatchedContainer) { - var parent = this.oldtip._parent; - this.finalize(this.oldtip, this.lineNumber - 1); - this.oldtip = parent; - } - this.allClosed = true; - } - }; - - // Remove link reference definitions from given tree. - var removeLinkReferenceDefinitions = function(parser, tree) { - var event, node; - var walker = tree.walker(); - var emptyNodes = []; - - while ((event = walker.next())) { - node = event.node; - if (event.entering && node.type === "paragraph") { - var pos; - var hasReferenceDefs = false; - - // Try parsing the beginning as link reference definitions; - // Note that link reference definitions must be the beginning of a - // paragraph node since link reference definitions cannot interrupt - // paragraphs. - while ( - peek$1(node._string_content, 0) === C_OPEN_BRACKET$1 && - (pos = parser.inlineParser.parseReference( - node._string_content, - parser.refmap - )) - ) { - const removedText = node._string_content.slice(0, pos); - - node._string_content = node._string_content.slice(pos); - hasReferenceDefs = true; - - const lines = removedText.split("\n"); - - // -1 for final newline. - node.sourcepos[0][0] += lines.length - 1; - } - if (hasReferenceDefs && isBlank(node._string_content)) { - emptyNodes.push(node); - } - } - } - - for (node of emptyNodes) { - node.unlink(); - } - }; - - // 'finalize' is run when the block is closed. - // 'continue' is run to check whether the block is continuing - // at a certain line and offset (e.g. whether a block quote - // contains a `>`. It returns 0 for matched, 1 for not matched, - // and 2 for "we've dealt with this line completely, go to next." - var blocks = { - document: { - continue: function() { - return 0; - }, - finalize: function(parser, block) { - removeLinkReferenceDefinitions(parser, block); - return; - }, - canContain: function(t) { - return t !== "item"; - }, - acceptsLines: false - }, - list: { - continue: function() { - return 0; - }, - finalize: function(parser, block) { - var item = block._firstChild; - while (item) { - // check for non-final list item ending with blank line: - if (item._next && endsWithBlankLine(item)) { - block._listData.tight = false; - break; - } - // recurse into children of list item, to see if there are - // spaces between any of them: - var subitem = item._firstChild; - while (subitem) { - if ( - subitem._next && - endsWithBlankLine(subitem) - ) { - block._listData.tight = false; - break; - } - subitem = subitem._next; - } - item = item._next; - } - block.sourcepos[1] = block._lastChild.sourcepos[1]; - }, - canContain: function(t) { - return t === "item"; - }, - acceptsLines: false - }, - block_quote: { - continue: function(parser) { - var ln = parser.currentLine; - if ( - !parser.indented && - peek$1(ln, parser.nextNonspace) === C_GREATERTHAN - ) { - parser.advanceNextNonspace(); - parser.advanceOffset(1, false); - if (isSpaceOrTab(peek$1(ln, parser.offset))) { - parser.advanceOffset(1, true); - } - } else { - return 1; - } - return 0; - }, - finalize: function() { - return; - }, - canContain: function(t) { - return t !== "item"; - }, - acceptsLines: false - }, - item: { - continue: function(parser, container) { - if (parser.blank) { - if (container._firstChild == null) { - // Blank line after empty list item - return 1; - } else { - parser.advanceNextNonspace(); - } - } else if ( - parser.indent >= - container._listData.markerOffset + container._listData.padding - ) { - parser.advanceOffset( - container._listData.markerOffset + - container._listData.padding, - true - ); - } else { - return 1; - } - return 0; - }, - finalize: function(parser, block) { - if (block._lastChild) { - block.sourcepos[1] = block._lastChild.sourcepos[1]; - } else { - // Empty list item - block.sourcepos[1][0] = block.sourcepos[0][0]; - block.sourcepos[1][1] = - block._listData.markerOffset + block._listData.padding; - } - - return; - }, - canContain: function(t) { - return t !== "item"; - }, - acceptsLines: false - }, - heading: { - continue: function() { - // a heading can never container > 1 line, so fail to match: - return 1; - }, - finalize: function() { - return; - }, - canContain: function() { - return false; - }, - acceptsLines: false - }, - thematic_break: { - continue: function() { - // a thematic break can never container > 1 line, so fail to match: - return 1; - }, - finalize: function() { - return; - }, - canContain: function() { - return false; - }, - acceptsLines: false - }, - code_block: { - continue: function(parser, container) { - var ln = parser.currentLine; - var indent = parser.indent; - if (container._isFenced) { - // fenced - var match = - indent <= 3 && - ln.charAt(parser.nextNonspace) === container._fenceChar && - ln.slice(parser.nextNonspace).match(reClosingCodeFence); - if (match && match[0].length >= container._fenceLength) { - // closing fence - we're at end of line, so we can return - parser.lastLineLength = - parser.offset + indent + match[0].length; - parser.finalize(container, parser.lineNumber); - return 2; - } else { - // skip optional spaces of fence offset - var i = container._fenceOffset; - while (i > 0 && isSpaceOrTab(peek$1(ln, parser.offset))) { - parser.advanceOffset(1, true); - i--; - } - } - } else { - // indented - if (indent >= CODE_INDENT) { - parser.advanceOffset(CODE_INDENT, true); - } else if (parser.blank) { - parser.advanceNextNonspace(); - } else { - return 1; - } - } - return 0; - }, - finalize: function(parser, block) { - if (block._isFenced) { - // fenced - // first line becomes info string - var content = block._string_content; - var newlinePos = content.indexOf("\n"); - var firstLine = content.slice(0, newlinePos); - var rest = content.slice(newlinePos + 1); - block.info = unescapeString(firstLine.trim()); - block._literal = rest; - } else { - // indented - var lines = block._string_content.split("\n"); - // Note that indented code block cannot be empty, so - // lines.length cannot be zero. - while (/^[ \t]*$/.test(lines[lines.length - 1])) { - lines.pop(); - } - block._literal = lines.join("\n") + "\n"; - block.sourcepos[1][0] = - block.sourcepos[0][0] + lines.length - 1; - block.sourcepos[1][1] = - block.sourcepos[0][1] + lines[lines.length - 1].length - 1; - } - block._string_content = null; // allow GC - }, - canContain: function() { - return false; - }, - acceptsLines: true - }, - html_block: { - continue: function(parser, container) { - return parser.blank && - (container._htmlBlockType === 6 || - container._htmlBlockType === 7) - ? 1 - : 0; - }, - finalize: function(parser, block) { - block._literal = block._string_content.replace(/\n$/, ''); - block._string_content = null; // allow GC - }, - canContain: function() { - return false; - }, - acceptsLines: true - }, - paragraph: { - continue: function(parser) { - return parser.blank ? 1 : 0; - }, - finalize: function() { - return; - }, - canContain: function() { - return false; - }, - acceptsLines: true - } - }; - - // block start functions. Return values: - // 0 = no match - // 1 = matched container, keep going - // 2 = matched leaf, no more block starts - var blockStarts = [ - // block quote - function(parser) { - if ( - !parser.indented && - peek$1(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN - ) { - parser.advanceNextNonspace(); - parser.advanceOffset(1, false); - // optional following space - if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { - parser.advanceOffset(1, true); - } - parser.closeUnmatchedBlocks(); - parser.addChild("block_quote", parser.nextNonspace); - return 1; - } else { - return 0; - } - }, - - // ATX heading - function(parser) { - var match; - if ( - !parser.indented && - (match = parser.currentLine - .slice(parser.nextNonspace) - .match(reATXHeadingMarker)) - ) { - parser.advanceNextNonspace(); - parser.advanceOffset(match[0].length, false); - parser.closeUnmatchedBlocks(); - var container = parser.addChild("heading", parser.nextNonspace); - container.level = match[0].trim().length; // number of #s - // remove trailing ###s: - container._string_content = parser.currentLine - .slice(parser.offset) - .replace(/^[ \t]*#+[ \t]*$/, "") - .replace(/[ \t]+#+[ \t]*$/, ""); - parser.advanceOffset(parser.currentLine.length - parser.offset); - return 2; - } else { - return 0; - } - }, - - // Fenced code block - function(parser) { - var match; - if ( - !parser.indented && - (match = parser.currentLine - .slice(parser.nextNonspace) - .match(reCodeFence)) - ) { - var fenceLength = match[0].length; - parser.closeUnmatchedBlocks(); - var container = parser.addChild("code_block", parser.nextNonspace); - container._isFenced = true; - container._fenceLength = fenceLength; - container._fenceChar = match[0][0]; - container._fenceOffset = parser.indent; - parser.advanceNextNonspace(); - parser.advanceOffset(fenceLength, false); - return 2; - } else { - return 0; - } - }, - - // HTML block - function(parser, container) { - if ( - !parser.indented && - peek$1(parser.currentLine, parser.nextNonspace) === C_LESSTHAN$1 - ) { - var s = parser.currentLine.slice(parser.nextNonspace); - var blockType; - - for (blockType = 1; blockType <= 7; blockType++) { - if ( - reHtmlBlockOpen[blockType].test(s) && - (blockType < 7 || (container.type !== "paragraph" && - !(!parser.allClosed && !parser.blank && - parser.tip.type === "paragraph") // maybe lazy - )) - ) { - parser.closeUnmatchedBlocks(); - // We don't adjust parser.offset; - // spaces are part of the HTML block: - var b = parser.addChild("html_block", parser.offset); - b._htmlBlockType = blockType; - return 2; - } - } - } - - return 0; - }, - - // Setext heading - function(parser, container) { - var match; - if ( - !parser.indented && - container.type === "paragraph" && - (match = parser.currentLine - .slice(parser.nextNonspace) - .match(reSetextHeadingLine)) - ) { - parser.closeUnmatchedBlocks(); - // resolve reference link definitiosn - var pos; - while ( - peek$1(container._string_content, 0) === C_OPEN_BRACKET$1 && - (pos = parser.inlineParser.parseReference( - container._string_content, - parser.refmap - )) - ) { - container._string_content = container._string_content.slice( - pos - ); - } - if (container._string_content.length > 0) { - var heading = new Node("heading", container.sourcepos); - heading.level = match[0][0] === "=" ? 1 : 2; - heading._string_content = container._string_content; - container.insertAfter(heading); - container.unlink(); - parser.tip = heading; - parser.advanceOffset( - parser.currentLine.length - parser.offset, - false - ); - return 2; - } else { - return 0; - } - } else { - return 0; - } - }, - - // thematic break - function(parser) { - if ( - !parser.indented && - reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace)) - ) { - parser.closeUnmatchedBlocks(); - parser.addChild("thematic_break", parser.nextNonspace); - parser.advanceOffset( - parser.currentLine.length - parser.offset, - false - ); - return 2; - } else { - return 0; - } - }, - - // list item - function(parser, container) { - var data; - - if ( - (!parser.indented || container.type === "list") && - (data = parseListMarker(parser, container)) - ) { - parser.closeUnmatchedBlocks(); - - // add the list if needed - if ( - parser.tip.type !== "list" || - !listsMatch(container._listData, data) - ) { - container = parser.addChild("list", parser.nextNonspace); - container._listData = data; - } - - // add the list item - container = parser.addChild("item", parser.nextNonspace); - container._listData = data; - return 1; - } else { - return 0; - } - }, - - // indented code block - function(parser) { - if ( - parser.indented && - parser.tip.type !== "paragraph" && - !parser.blank - ) { - // indented code - parser.advanceOffset(CODE_INDENT, true); - parser.closeUnmatchedBlocks(); - parser.addChild("code_block", parser.offset); - return 2; - } else { - return 0; - } - } - ]; - - var advanceOffset = function(count, columns) { - var currentLine = this.currentLine; - var charsToTab, charsToAdvance; - var c; - while (count > 0 && (c = currentLine[this.offset])) { - if (c === "\t") { - charsToTab = 4 - (this.column % 4); - if (columns) { - this.partiallyConsumedTab = charsToTab > count; - charsToAdvance = charsToTab > count ? count : charsToTab; - this.column += charsToAdvance; - this.offset += this.partiallyConsumedTab ? 0 : 1; - count -= charsToAdvance; - } else { - this.partiallyConsumedTab = false; - this.column += charsToTab; - this.offset += 1; - count -= 1; - } - } else { - this.partiallyConsumedTab = false; - this.offset += 1; - this.column += 1; // assume ascii; block starts are ascii - count -= 1; - } - } - }; - - var advanceNextNonspace = function() { - this.offset = this.nextNonspace; - this.column = this.nextNonspaceColumn; - this.partiallyConsumedTab = false; - }; - - var findNextNonspace = function() { - var currentLine = this.currentLine; - var i = this.offset; - var cols = this.column; - var c; - - while ((c = currentLine.charAt(i)) !== "") { - if (c === " ") { - i++; - cols++; - } else if (c === "\t") { - i++; - cols += 4 - (cols % 4); - } else { - break; - } - } - this.blank = c === "\n" || c === "\r" || c === ""; - this.nextNonspace = i; - this.nextNonspaceColumn = cols; - this.indent = this.nextNonspaceColumn - this.column; - this.indented = this.indent >= CODE_INDENT; - }; - - // Analyze a line of text and update the document appropriately. - // We parse markdown text by calling this on each line of input, - // then finalizing the document. - var incorporateLine = function(ln) { - var all_matched = true; - var t; - - var container = this.doc; - this.oldtip = this.tip; - this.offset = 0; - this.column = 0; - this.blank = false; - this.partiallyConsumedTab = false; - this.lineNumber += 1; - - // replace NUL characters for security - if (ln.indexOf("\u0000") !== -1) { - ln = ln.replace(/\0/g, "\uFFFD"); - } - - this.currentLine = ln; - - // For each containing block, try to parse the associated line start. - // Bail out on failure: container will point to the last matching block. - // Set all_matched to false if not all containers match. - var lastChild; - while ((lastChild = container._lastChild) && lastChild._open) { - container = lastChild; - - this.findNextNonspace(); - - switch (this.blocks[container.type].continue(this, container)) { - case 0: // we've matched, keep going - break; - case 1: // we've failed to match a block - all_matched = false; - break; - case 2: // we've hit end of line for fenced code close and can return - return; - default: - throw "continue returned illegal value, must be 0, 1, or 2"; - } - if (!all_matched) { - container = container._parent; // back up to last matching block - break; - } - } - - this.allClosed = container === this.oldtip; - this.lastMatchedContainer = container; - - var matchedLeaf = - container.type !== "paragraph" && blocks[container.type].acceptsLines; - var starts = this.blockStarts; - var startsLen = starts.length; - // Unless last matched container is a code block, try new container starts, - // adding children to the last matched container: - while (!matchedLeaf) { - this.findNextNonspace(); - - // this is a little performance optimization: - if ( - !this.indented && - !reMaybeSpecial.test(ln.slice(this.nextNonspace)) - ) { - this.advanceNextNonspace(); - break; - } - - var i = 0; - while (i < startsLen) { - var res = starts[i](this, container); - if (res === 1) { - container = this.tip; - break; - } else if (res === 2) { - container = this.tip; - matchedLeaf = true; - break; - } else { - i++; - } - } - - if (i === startsLen) { - // nothing matched - this.advanceNextNonspace(); - break; - } - } - - // What remains at the offset is a text line. Add the text to the - // appropriate container. - - // First check for a lazy paragraph continuation: - if (!this.allClosed && !this.blank && this.tip.type === "paragraph") { - // lazy paragraph continuation - this.addLine(); - } else { - // not a lazy continuation - - // finalize any blocks not matched - this.closeUnmatchedBlocks(); - - t = container.type; - - if (this.blocks[t].acceptsLines) { - this.addLine(); - // if HtmlBlock, check for end condition - if ( - t === "html_block" && - container._htmlBlockType >= 1 && - container._htmlBlockType <= 5 && - reHtmlBlockClose[container._htmlBlockType].test( - this.currentLine.slice(this.offset) - ) - ) { - this.lastLineLength = ln.length; - this.finalize(container, this.lineNumber); - } - } else if (this.offset < ln.length && !this.blank) { - // create paragraph container for line - container = this.addChild("paragraph", this.offset); - this.advanceNextNonspace(); - this.addLine(); - } - } - this.lastLineLength = ln.length; - }; - - // Finalize a block. Close it and do any necessary postprocessing, - // e.g. creating string_content from strings, setting the 'tight' - // or 'loose' status of a list, and parsing the beginnings - // of paragraphs for reference definitions. Reset the tip to the - // parent of the closed block. - var finalize = function(block, lineNumber) { - var above = block._parent; - block._open = false; - block.sourcepos[1] = [lineNumber, this.lastLineLength]; - - this.blocks[block.type].finalize(this, block); - - this.tip = above; - }; - - // Walk through a block & children recursively, parsing string content - // into inline content where appropriate. - var processInlines = function(block) { - var node, event, t; - var walker = block.walker(); - this.inlineParser.refmap = this.refmap; - this.inlineParser.options = this.options; - while ((event = walker.next())) { - node = event.node; - t = node.type; - if (!event.entering && (t === "paragraph" || t === "heading")) { - this.inlineParser.parse(node); - } - } - }; - - var Document = function() { - var doc = new Node("document", [ - [1, 1], - [0, 0] - ]); - return doc; - }; - - // The main parsing function. Returns a parsed document AST. - var parse = function(input) { - this.doc = new Document(); - this.tip = this.doc; - this.refmap = {}; - this.lineNumber = 0; - this.lastLineLength = 0; - this.offset = 0; - this.column = 0; - this.lastMatchedContainer = this.doc; - this.currentLine = ""; - if (this.options.time) { - console.time("preparing input"); - } - var lines = input.split(reLineEnding); - var len = lines.length; - if (input.charCodeAt(input.length - 1) === C_NEWLINE$1) { - // ignore last blank line created by final newline - len -= 1; - } - if (this.options.time) { - console.timeEnd("preparing input"); - } - if (this.options.time) { - console.time("block parsing"); - } - for (var i = 0; i < len; i++) { - this.incorporateLine(lines[i]); - } - while (this.tip) { - this.finalize(this.tip, len); - } - if (this.options.time) { - console.timeEnd("block parsing"); - } - if (this.options.time) { - console.time("inline parsing"); - } - this.processInlines(this.doc); - if (this.options.time) { - console.timeEnd("inline parsing"); - } - return this.doc; - }; - - // The Parser object. - function Parser(options) { - return { - doc: new Document(), - blocks: blocks, - blockStarts: blockStarts, - tip: this.doc, - oldtip: this.doc, - currentLine: "", - lineNumber: 0, - offset: 0, - column: 0, - nextNonspace: 0, - nextNonspaceColumn: 0, - indent: 0, - indented: false, - blank: false, - partiallyConsumedTab: false, - allClosed: true, - lastMatchedContainer: this.doc, - refmap: {}, - lastLineLength: 0, - inlineParser: new InlineParser(options), - findNextNonspace: findNextNonspace, - advanceOffset: advanceOffset, - advanceNextNonspace: advanceNextNonspace, - addLine: addLine, - addChild: addChild, - incorporateLine: incorporateLine, - finalize: finalize, - processInlines: processInlines, - closeUnmatchedBlocks: closeUnmatchedBlocks, - parse: parse, - options: options || {} - }; - } - - function Renderer() {} - - /** - * Walks the AST and calls member methods for each Node type. - * - * @param ast {Node} The root of the abstract syntax tree. - */ - function render(ast) { - var walker = ast.walker(), - event, - type; - - this.buffer = ""; - this.lastOut = "\n"; - - while ((event = walker.next())) { - type = event.node.type; - if (this[type]) { - this[type](event.node, event.entering); - } - } - return this.buffer; - } - - /** - * Concatenate a literal string to the buffer. - * - * @param str {String} The string to concatenate. - */ - function lit(str) { - this.buffer += str; - this.lastOut = str; - } - - /** - * Output a newline to the buffer. - */ - function cr() { - if (this.lastOut !== "\n") { - this.lit("\n"); - } - } - - /** - * Concatenate a string to the buffer possibly escaping the content. - * - * Concrete renderer implementations should override this method. - * - * @param str {String} The string to concatenate. - */ - function out(str) { - this.lit(str); - } - - /** - * Escape a string for the target renderer. - * - * Abstract function that should be implemented by concrete - * renderer implementations. - * - * @param str {String} The string to escape. - */ - function esc(str) { - return str; - } - - Renderer.prototype.render = render; - Renderer.prototype.out = out; - Renderer.prototype.lit = lit; - Renderer.prototype.cr = cr; - Renderer.prototype.esc = esc; - - var reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i; - var reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i; - - var potentiallyUnsafe = function(url) { - return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url); - }; - - // Helper function to produce an HTML tag. - function tag(name, attrs, selfclosing) { - if (this.disableTags > 0) { - return; - } - this.buffer += "<" + name; - if (attrs && attrs.length > 0) { - var i = 0; - var attrib; - while ((attrib = attrs[i]) !== undefined) { - this.buffer += " " + attrib[0] + '="' + attrib[1] + '"'; - i++; - } - } - if (selfclosing) { - this.buffer += " /"; - } - this.buffer += ">"; - this.lastOut = ">"; - } - - function HtmlRenderer(options) { - options = options || {}; - // by default, soft breaks are rendered as newlines in HTML - options.softbreak = options.softbreak || "\n"; - // set to "
" to make them hard breaks - // set to " " if you want to ignore line wrapping in source - this.esc = options.esc || escapeXml; - // escape html with a custom function - // else use escapeXml - - this.disableTags = 0; - this.lastOut = "\n"; - this.options = options; - } - - /* Node methods */ - - function text$1(node) { - this.out(node.literal); - } - - function softbreak() { - this.lit(this.options.softbreak); - } - - function linebreak() { - this.tag("br", [], true); - this.cr(); - } - - function link(node, entering) { - var attrs = this.attrs(node); - if (entering) { - if (!(this.options.safe && potentiallyUnsafe(node.destination))) { - attrs.push(["href", this.esc(node.destination)]); - } - if (node.title) { - attrs.push(["title", this.esc(node.title)]); - } - this.tag("a", attrs); - } else { - this.tag("/a"); - } - } - - function image$1(node, entering) { - if (entering) { - if (this.disableTags === 0) { - if (this.options.safe && potentiallyUnsafe(node.destination)) { - this.lit('');
-                } else {
-                    this.lit('<img src='); - } - } - } - - function emph(node, entering) { - this.tag(entering ? "em" : "/em"); - } - - function strong(node, entering) { - this.tag(entering ? "strong" : "/strong"); - } - - function paragraph(node, entering) { - var grandparent = node.parent.parent, - attrs = this.attrs(node); - if (grandparent !== null && grandparent.type === "list") { - if (grandparent.listTight) { - return; - } - } - if (entering) { - this.cr(); - this.tag("p", attrs); - } else { - this.tag("/p"); - this.cr(); - } - } - - function heading(node, entering) { - var tagname = "h" + node.level, - attrs = this.attrs(node); - if (entering) { - this.cr(); - this.tag(tagname, attrs); - } else { - this.tag("/" + tagname); - this.cr(); - } - } - - function code(node) { - this.tag("code"); - this.out(node.literal); - this.tag("/code"); - } - - function code_block(node) { - var info_words = node.info ? node.info.split(/\s+/) : [], - attrs = this.attrs(node); - if (info_words.length > 0 && info_words[0].length > 0) { - var cls = this.esc(info_words[0]); - if (!/^language-/.exec(cls)) { - cls = "language-" + cls; - } - attrs.push(["class", cls]); - } - this.cr(); - this.tag("pre"); - this.tag("code", attrs); - this.out(node.literal); - this.tag("/code"); - this.tag("/pre"); - this.cr(); - } - - function thematic_break(node) { - var attrs = this.attrs(node); - this.cr(); - this.tag("hr", attrs, true); - this.cr(); - } - - function block_quote(node, entering) { - var attrs = this.attrs(node); - if (entering) { - this.cr(); - this.tag("blockquote", attrs); - this.cr(); - } else { - this.cr(); - this.tag("/blockquote"); - this.cr(); - } - } - - function list(node, entering) { - var tagname = node.listType === "bullet" ? "ul" : "ol", - attrs = this.attrs(node); - - if (entering) { - var start = node.listStart; - if (start !== null && start !== 1) { - attrs.push(["start", start.toString()]); - } - this.cr(); - this.tag(tagname, attrs); - this.cr(); - } else { - this.cr(); - this.tag("/" + tagname); - this.cr(); - } - } - - function item(node, entering) { - var attrs = this.attrs(node); - if (entering) { - this.tag("li", attrs); - } else { - this.tag("/li"); - this.cr(); - } - } - - function html_inline(node) { - if (this.options.safe) { - this.lit(""); - } else { - this.lit(node.literal); - } - } - - function html_block(node) { - this.cr(); - if (this.options.safe) { - this.lit(""); - } else { - this.lit(node.literal); - } - this.cr(); - } - - function custom_inline(node, entering) { - if (entering && node.onEnter) { - this.lit(node.onEnter); - } else if (!entering && node.onExit) { - this.lit(node.onExit); - } - } - - function custom_block(node, entering) { - this.cr(); - if (entering && node.onEnter) { - this.lit(node.onEnter); - } else if (!entering && node.onExit) { - this.lit(node.onExit); - } - this.cr(); - } - - /* Helper methods */ - - function out$1(s) { - this.lit(this.esc(s)); - } - - function attrs(node) { - var att = []; - if (this.options.sourcepos) { - var pos = node.sourcepos; - if (pos) { - att.push([ - "data-sourcepos", - String(pos[0][0]) + - ":" + - String(pos[0][1]) + - "-" + - String(pos[1][0]) + - ":" + - String(pos[1][1]) - ]); - } - } - return att; - } - - // quick browser-compatible inheritance - HtmlRenderer.prototype = Object.create(Renderer.prototype); - - HtmlRenderer.prototype.text = text$1; - HtmlRenderer.prototype.html_inline = html_inline; - HtmlRenderer.prototype.html_block = html_block; - HtmlRenderer.prototype.softbreak = softbreak; - HtmlRenderer.prototype.linebreak = linebreak; - HtmlRenderer.prototype.link = link; - HtmlRenderer.prototype.image = image$1; - HtmlRenderer.prototype.emph = emph; - HtmlRenderer.prototype.strong = strong; - HtmlRenderer.prototype.paragraph = paragraph; - HtmlRenderer.prototype.heading = heading; - HtmlRenderer.prototype.code = code; - HtmlRenderer.prototype.code_block = code_block; - HtmlRenderer.prototype.thematic_break = thematic_break; - HtmlRenderer.prototype.block_quote = block_quote; - HtmlRenderer.prototype.list = list; - HtmlRenderer.prototype.item = item; - HtmlRenderer.prototype.custom_inline = custom_inline; - HtmlRenderer.prototype.custom_block = custom_block; - - HtmlRenderer.prototype.esc = escapeXml; - - HtmlRenderer.prototype.out = out$1; - HtmlRenderer.prototype.tag = tag; - HtmlRenderer.prototype.attrs = attrs; - - var reXMLTag = /\<[^>]*\>/; - - function toTagName(s) { - return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); - } - - function XmlRenderer(options) { - options = options || {}; - - this.disableTags = 0; - this.lastOut = "\n"; - - this.indentLevel = 0; - this.indent = " "; - - this.esc = options.esc || escapeXml; - // escape html with a custom function - // else use escapeXml - - this.options = options; - } - - function render$1(ast) { - this.buffer = ""; - - var attrs; - var tagname; - var walker = ast.walker(); - var event, node, entering; - var container; - var selfClosing; - var nodetype; - - var options = this.options; - - if (options.time) { - console.time("rendering"); - } - - this.buffer += '\n'; - this.buffer += '\n'; - - while ((event = walker.next())) { - entering = event.entering; - node = event.node; - nodetype = node.type; - - container = node.isContainer; - - selfClosing = - nodetype === "thematic_break" || - nodetype === "linebreak" || - nodetype === "softbreak"; - - tagname = toTagName(nodetype); - - if (entering) { - attrs = []; - - switch (nodetype) { - case "document": - attrs.push(["xmlns", "http://commonmark.org/xml/1.0"]); - break; - case "list": - if (node.listType !== null) { - attrs.push(["type", node.listType.toLowerCase()]); - } - if (node.listStart !== null) { - attrs.push(["start", String(node.listStart)]); - } - if (node.listTight !== null) { - attrs.push([ - "tight", - node.listTight ? "true" : "false" - ]); - } - var delim = node.listDelimiter; - if (delim !== null) { - var delimword = ""; - if (delim === ".") { - delimword = "period"; - } else { - delimword = "paren"; - } - attrs.push(["delimiter", delimword]); - } - break; - case "code_block": - if (node.info) { - attrs.push(["info", node.info]); - } - break; - case "heading": - attrs.push(["level", String(node.level)]); - break; - case "link": - case "image": - attrs.push(["destination", node.destination]); - attrs.push(["title", node.title]); - break; - case "custom_inline": - case "custom_block": - attrs.push(["on_enter", node.onEnter]); - attrs.push(["on_exit", node.onExit]); - break; - } - if (options.sourcepos) { - var pos = node.sourcepos; - if (pos) { - attrs.push([ - "sourcepos", - String(pos[0][0]) + - ":" + - String(pos[0][1]) + - "-" + - String(pos[1][0]) + - ":" + - String(pos[1][1]) - ]); - } - } - - this.cr(); - this.out(this.tag(tagname, attrs, selfClosing)); - if (container) { - this.indentLevel += 1; - } else if (!container && !selfClosing) { - var lit = node.literal; - if (lit) { - this.out(this.esc(lit)); - } - this.out(this.tag("/" + tagname)); - } - } else { - this.indentLevel -= 1; - this.cr(); - this.out(this.tag("/" + tagname)); - } - } - if (options.time) { - console.timeEnd("rendering"); - } - this.buffer += "\n"; - return this.buffer; - } - - function out$2(s) { - if (this.disableTags > 0) { - this.buffer += s.replace(reXMLTag, ""); - } else { - this.buffer += s; - } - this.lastOut = s; - } - - function cr$1() { - if (this.lastOut !== "\n") { - this.buffer += "\n"; - this.lastOut = "\n"; - for (var i = this.indentLevel; i > 0; i--) { - this.buffer += this.indent; - } - } - } - - // Helper function to produce an XML tag. - function tag$1(name, attrs, selfclosing) { - var result = "<" + name; - if (attrs && attrs.length > 0) { - var i = 0; - var attrib; - while ((attrib = attrs[i]) !== undefined) { - result += " " + attrib[0] + '="' + this.esc(attrib[1]) + '"'; - i++; - } - } - if (selfclosing) { - result += " /"; - } - result += ">"; - return result; - } - - // quick browser-compatible inheritance - XmlRenderer.prototype = Object.create(Renderer.prototype); - - XmlRenderer.prototype.render = render$1; - XmlRenderer.prototype.out = out$2; - XmlRenderer.prototype.cr = cr$1; - XmlRenderer.prototype.tag = tag$1; - XmlRenderer.prototype.esc = escapeXml; - - exports.HtmlRenderer = HtmlRenderer; - exports.Node = Node; - exports.Parser = Parser; - exports.Renderer = Renderer; - exports.XmlRenderer = XmlRenderer; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); diff --git a/src/ttfrog/themes/default/static/editor/editor.js b/src/ttfrog/themes/default/static/editor/editor.js deleted file mode 100644 index c4fe78f..0000000 --- a/src/ttfrog/themes/default/static/editor/editor.js +++ /dev/null @@ -1,343 +0,0 @@ -class Editor { - - #states = { - VIEW: 'view', - EDIT: 'edit', - WYSIWYG: 'wysiwyg' - } - - commonmark = null; - turndown = null; - #cachedHTML = null; - #cachedMarkdown = null; - #state = null; - #changed = false; - - constructor(settings) { - /* - * Create a new Editor instance. - */ - this.element = document.getElementById(settings.editorId || 'editor'); - this.source = this.element.innerHTML; - this.commonmark = { - reader: new commonmark.Parser(), - writer: new commonmark.HtmlRenderer(), - }; - this.turndown = new TurndownService({ - headingStyle: 'atx', - codeBlockStyle: 'fenced', - }); - - this.plugins = {}; - settings.plugins.forEach(plugin => { - this.plugins[plugin.name] = new plugin({name: plugin.name, editor: this}); - }); - this.#bindEvents(); - this.getHTML(); - this.element.classList.add("loaded"); - } - - #bindEvents() { - this.element.addEventListener('keydown', (evt) => { - if (this.#state === this.#states.VIEW) { - return; - } - - if (event.key === 'Enter') { - if (this.#state === this.#states.EDIT) { - evt.preventDefault(); - this.insertAtCursor(document.createTextNode("\n")); - } - } - - if (this.#cachedMarkdown != this.element.innerHTML) { - this.#changed = true; - this.#cachedMarkdown = this.element.innerHTML; - } - }); - }; - - - getState() { - return this.#state; - } - - setState(newState) { - this.#state = newState; - Object.values(this.#states).forEach(state => { - if (state == newState) { - this.element.classList.add(state); - } else { - this.element.classList.remove(state); - } - }); - } - - getHTML() { - /* - * Convert the markdown source to HTML. - */ - if (this.#changed || !this.#cachedHTML) { - var md = this.getMarkdown(); - var parsed = this.commonmark.reader.parse(md); - var html = this.commonmark.writer.render(parsed); - Object.values(this.plugins).forEach(plugin => { - html = plugin.toHTML(html); - }); - this.#cachedHTML = html; - - } - return this.#cachedHTML; - } - - getMarkdown() { - /* - * Return the current markdown. - */ - if (this.getState() === this.#states.EDIT) { - this.#cachedMarkdown = this.element.innerHTML; - } else if (this.getState() === this.#states.WYSIWYG) { - var md = this.element.innerHTML; - Object.values(this.plugins).forEach(plugin => { - md = plugin.toMarkdown(md); - }); - this.#cachedMarkdown = this.turndown.turndown(md); - } else if (!this.#cachedMarkdown) { - this.#cachedMarkdown = this.source; - } - this.#cachedMarkdown = this.#cachedMarkdown.replaceAll(/^>/mg, '>'); - return this.#cachedMarkdown; - } - - reset() { - /* - * Discard any unsaved edits and reset the editor to its initial state. - */ - this.#cachedHTML = null; - this.#cachedMarkdown = null; - this.view(); - } - - view() { - /* - * Convert the editor read-only mode and display the current HTML. - */ - if (this.getState() === this.#states.VIEW) { - return; - } - this.element.innerHTML = this.getHTML(); - this.setState(this.#states.VIEW); - } - - wysiwyg() { - /* - * Put the editor in WYSIWYG editing mode. - */ - if (this.getState() === this.#states.WYSIWYG) { - return; - } - this.#changed = false; - this.element.contentEditable = true; - this.element.innerHTML = this.getHTML(); - this.setState(this.#states.WYSIWYG); - } - - edit() { - /* - * Put the editor into source editing mode. - */ - if (this.#state === this.#states.EDIT) { - return; - } - - this.#changed = false; - this.element.contentEditable = true; - this.element.innerHTML = this.getMarkdown(); - this.setState(this.#states.EDIT); - } - - insertAtCursor(node) { - var sel, range, html; - sel = window.getSelection(); - range = sel.getRangeAt(0); - range.deleteContents(); - range.insertNode(node); - range.setStartAfter(node); - this.element.focus(); - sel.removeAllRanges(); - sel.addRange(range); - } - -} - - -class EditorPlugin { - constructor(settings) { - this.name = settings.name; - this.editor = settings.editor; - }; - - cleanAttribute(attribute) { - return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : '' - } - - toMarkdown(html) { - return html; - }; - - toHTML(md) { - return md; - }; -}; - - -class TablePlugin extends EditorPlugin { - constructor(settings) { - super(settings); - this.editor.turndown.use(turndownPluginGfm.tables); - this.pattern = /(?(?:\|[^|]+?)+\|[\s\n]*)(?:<|$)/gims; - this.dividerPattern = /\|\s*\-+\s*\|/; - } - - toHTML(md) { - md.matchAll(this.pattern).forEach(matched => { - var html = ''; - var cellTag = 'th'; - matched.groups.contents.split("\n").forEach(line => { - if (this.dividerPattern.test(line)) { - html += ""; - cellTag = 'td'; - } else { - html += ""; - var cells = line.split("|"); - html += "<" + cellTag + ">" + cells.slice(1, cells.length - 1).join("<" + cellTag + ">") + ""; - html += ""; - } - }); - html += "
"; - md = md.replaceAll(matched[1], html); - }); - return md; - } -} - -class MacroPlugin extends EditorPlugin { - - macros = { - // image: {} - // toc {} - // widget {} - // - html: { - toHTML: (settings) => { - var html = settings.block.replaceAll(">", ">").replaceAll("<", "<"); - return html; - }, - toMarkdown: (node) => { - const utf8encoder = new TextEncoder(); - return "{{html\n" + b64decode(node.dataset.block) + "\n}}"; - } - }, - user: { - toHTML: (settings) => { - return document.querySelector("nav > ul > li.user > a:first-child").outerHTML; - }, - }, - npc: { - toHTML: (settings) => { - var name = camelCase(settings.keywords).join(" "); - var target = name.replaceAll(" ", ""); - return `👤 ${name}`; - }, - toMarkdown: (node) => { - return `{{npc ${node.firstChild.dataset.npcName}}}`; - }, - }, - spell: { - toHTML: (settings) => { - var name = camelCase(settings.keywords).join(" "); - var target = name.replaceAll(" ", ""); - return `✨ ${name}`; - }, - toMarkdown: (node) => { - return `{{spell ${node.firstChild.dataset.spellName}}}`; - }, - }, - } - - constructor(settings) { - super(settings); - this.pattern = /(?{{(?\w+)(?(?:\s*\w+)*)(?(?:\s+\w+="[^"]*")*?)(?\b.*?)?}})/gms; - this.paramPattern = /\b(?[^=]+)="(?[^"]*?)"\b/gm; - - var plugin = this; - this.editor.turndown.addRule('macros', { - filter: ['span'], - replacement: function (content, node, options) { - const parser = plugin.macros[node.getAttribute('data-macro-name')].toMarkdown; - if (parser) { - return parser(node); - } - - var md = '{{' + node.getAttribute('data-macro-name'); - for (var param in node.getAttributeNames()) { - var val = node.getAttribute(param); - if (val) { - md += val + (param == 'data-macro-name' ? " " : `="${node.getAttribute(param)}" `); - } - } - md += '}}'; - return md; - }, - }); - } - - toHTML(md) { - const utf8encoder = new TextEncoder(); - var output = md; - output.matchAll(this.pattern).forEach(matched => { - var macroName = matched.groups.name; - var html = ` { - settings.params[param.groups.name] = param.groups.value; - html += ` data-param-${param.groups.name}="${param.groups.value}"`; - }); - html += ` data-block="${b64encode(matched.groups.block)}"`; - html += '>'; - html += this.macros[macroName].toHTML(settings); - html += ''; - output = output.replaceAll(matched[1], html); - }); - return output; - } -} - -function camelCase(words) { - var output = []; - words.trim().split(/\s+/g).forEach(word => { - var lcWord = word.toLowerCase(); - output.push(lcWord.charAt(0).toUpperCase() + lcWord.slice(1)); - }); - return output; -} - -function b64encode(input) { - const utf8encoder = new TextEncoder(); - return utf8encoder.encode(input).toBase64(); -} - -function b64decode(input) { - const utf8encoder = new TextEncoder(); - return utf8encoder.decode(input.fromBase64()); -} - - -editor = new Editor({ - plugins: [TablePlugin, MacroPlugin] -}); -editor.view(); diff --git a/src/ttfrog/themes/default/static/editor/grung-editor.js b/src/ttfrog/themes/default/static/editor/grung-editor.js new file mode 100644 index 0000000..4b4d89e --- /dev/null +++ b/src/ttfrog/themes/default/static/editor/grung-editor.js @@ -0,0 +1,103 @@ +class GrungEditor extends Grung { + + constructor(settings) { + /* + * Create a new Editor instance. + */ + super(settings); + this.states = { + VIEW: 'view', + EDIT: 'edit', + WYSIWYG: 'wysiwyg' + } + + this.turndown = new TurndownService({ + headingStyle: 'atx', + codeBlockStyle: 'fenced', + }); + this.turndown.use([turndownPluginGfm.gfm, turndownPluginGfm.tables]); + this.turndown.keep(['pre']); + this.#bindEvents(); + + this.plugins().forEach(plugin => { plugin.setEditable() }); + } + + #bindEvents() { + this.element.addEventListener('keydown', (evt) => { + if (this.state === this.states.VIEW) { + return; + } + + /* + if (event.key === 'Enter') { + console.log(this.#state, this.#states.EDIT); + if (this.#state === this.#states.EDIT) { + evt.preventDefault(); + this.insertAtCursor(document.createTextNode("\n")); + } + } + */ + + if (this.cachedMarkdown != this.element.textContent) { + this.changed = true; + this.cachedMarkdown = this.element.textContent; + } + }); + }; + + HtmlToMarkdown(html) { + return this.turndown.turndown(html); + } + + getMarkdown() { + /* + * Return the current markdown. + */ + if (this.getState() === this.states.EDIT) { + this.cachedMarkdown = this.element.innerHTML.replaceAll(/<\/?div>/g, "\n").replaceAll('
', ""); + } else if (this.getState() === this.states.WYSIWYG) { + this.cachedMarkdown = this.HtmlToMarkdown(this.element.innerHTML); + } else if (!this.cachedMarkdown) { + this.cachedMarkdown = this.source; + } + return this.cachedMarkdown; + } + + wysiwyg() { + /* + * Put the editor in WYSIWYG editing mode. + */ + if (this.getState() === this.states.WYSIWYG) { + return; + } + this.changed = false; + this.element.contentEditable = true; + this.element.innerHTML = this.getHTML(); + this.setState(this.states.WYSIWYG); + } + + edit() { + /* + * Put the editor into source editing mode. + */ + if (this.state === this.states.EDIT) { + return; + } + this.changed = false; + this.element.contentEditable = true; + this.element.innerHTML = encodeHtmlEntities(this.getMarkdown()); + this.setState(this.states.EDIT); + } + + insertAtCursor(node) { + var sel, range, html; + sel = window.getSelection(); + range = sel.getRangeAt(0); + range.deleteContents(); + range.insertNode(node); + range.setStartAfter(node); + this.element.focus(); + sel.removeAllRanges(); + sel.addRange(range); + } +} diff --git a/src/ttfrog/themes/default/static/editor/grung.js b/src/ttfrog/themes/default/static/editor/grung.js new file mode 100644 index 0000000..504ac29 --- /dev/null +++ b/src/ttfrog/themes/default/static/editor/grung.js @@ -0,0 +1,422 @@ +class Grung { + constructor(settings) { + /* + * Create a new Editor instance. + */ + this.element = document.getElementById(settings.editorId || 'content'); + this.source = this.element.textContent; + + this.marked = marked; + this.marked.use({ + breaks: false, + gfm: true, + }); + this.states = { + VIEW: 'view', + } + this.cachedHTML = null; + this.cachedMarkdown = null; + this.state = null; + this.changed = false; + this.enabledPlugins = {}; + + settings.plugins.forEach(plugin => { + this.enabledPlugins[plugin.name] = new plugin({name: plugin.name, editor: this}); + }); + this.getHTML(); + this.element.classList.add("loaded"); + } + + plugins() { + return Object.values(this.enabledPlugins).sort((a, b) => { a.precedence < b.precedence }); + } + + getState() { + return this.state; + } + + setState(newState) { + this.state = newState; + Object.values(this.states).forEach(state => { + if (state == newState) { + this.element.classList.add(state); + } else { + this.element.classList.remove(state); + } + }); + } + + markdownToHTML(md) { + var html = this.marked.parse(md); + return html; + } + + getHTML(string) { + /* + * Convert the markdown source to HTML. + */ + if (this.changed || !this.cachedHTML) { + this.cachedHTML = this.markdownToHTML(this.getMarkdown()); + } + return this.cachedHTML; + } + + getMarkdown() { + if (!this.cachedMarkdown) { + this.cachedMarkdown = this.source; + } + return this.cachedMarkdown; + } + + reset() { + /* + * Discard any unsaved edits and reset the editor to its initial state. + */ + this.cachedHTML = null; + this.cachedMarkdown = null; + this.view(); + } + + view() { + /* + * Convert the editor read-only mode and display the current HTML. + */ + if (this.getState() === this.states.VIEW) { + return; + } + this.element.innerHTML = this.getHTML(); + this.setState(this.states.VIEW); + this.contentEditable = false; + } + +} + +class GrungPlugin { + + constructor(settings) { + this.name = settings.name; + this.editor = settings.editor; + this.precedence = 50; + }; + + setEditable() { + }; + + toMarkdown(html) { + return html; + }; + + toHTML(md) { + return md; + }; +}; + + +class MacroPlugin extends GrungPlugin { + + macros = { + // image: {} + // toc {} + // widget {} + // + style: { + inline: false, + toHTML: (token, node) => { + return node.replace(/class="macro"/, `class="macro ${token.keywords}"`); + } + }, + + multiline: { + inline: false, + fromHTML: (node, markdown) => { + var content = node.innerHTML.replaceAll("
", "\0"); + content = content.replaceAll("{{{", "{{{"); + content = content.replaceAll("}}}", "}}}"); + content = encodeHtmlEntities(content); + return `{{{${content}}}}`; + }, + }, + + user: { + inline: true, + toHTML: (token, node) => { + return node + document.querySelector("nav > ul > li.user > a:first-child").outerHTML; + }, + }, + toc: { + inline: true, + element: 'div', + toHTML: (token, node) => { + return node + ""; + }, + postprocess: (html) => { + const subList = (depth) => { + var li = document.createElement("li"); + var ul = document.createElement("ul"); + li.appendChild(ul); + return li; + }; + + const buf = document.createElement('div'); + buf.innerHTML = html; + const tocElement = + buf.querySelectorAll('[data-macro-name="toc"]').forEach(tocElement => { + + var params = { + depth: tocElement.dataset.paramDepth || 3, + keywords: tocElement.dataset.paramKeywords || "", + }; + + const headings = buf.querySelectorAll("h2, h3, h4, h5, h6"); + + const toc = document.createElement("ul"); + toc.setAttribute('role', 'list'); + + var lastDepth = null; + var ul = toc; + headings.forEach(heading => { + var depth = parseInt(heading.nodeName[1]) - 1; + if (depth > params.depth) { + return; + } + if (lastDepth === null) { + lastDepth = depth; + } + + var index = document.createElement("li"); + index.innerHTML = '' + heading.innerHTML + ""; + + var list = null; + if (depth > lastDepth) { + list = subList(depth); + ul.appendChild(list); + ul = list.firstChild; + } else if (depth < lastDepth) { + var list = subList(depth); + toc.appendChild(list); + ul = list.firstChild; + } + ul.appendChild(index); + lastDepth = depth; + }); + + if (params.keywords) { + params.keywords.split(" ").forEach(className => { + if (className) { + toc.classList.add(className); + } + }); + } + tocElement.appendChild(toc); + }); + return buf.innerHTML; + }, + }, + npc: { + toHTML: (settings) => { + var name = camelCase(settings.keywords).join(" "); + var target = name.replaceAll(" ", ""); + return `👤 ${name}`; + }, + fromHTML: (node) => { + return `{{npc ${node.firstChild.dataset.npcName}}}`; + }, + }, + spell: { + toHTML: (settings) => { + var name = camelCase(settings.keywords).join(" "); + var target = name.replaceAll(" ", ""); + return `✨ ${name}`; + }, + fromHTML: (node) => { + return `{{spell ${node.firstChild.dataset.spellName}}}`; + }, + }, + } + + getTokens = (pattern, source) => { + const matched = source.matchAll(pattern); + const tokens = []; + if (!matched) { + return tokens; + } + matched.forEach(match => { + if (!this.macros[match.groups.name]) { + return; + } + const token = { + type: 'macro', + source: match[0], + matched: match, + macro: this.macros[match.groups.name], + keywords: (match.groups.keywords || '').trim(), + inline: this.macros[match.groups.name].inline, + params: {}, + rendered: '', + }; + if (match.groups.parameters) { + var params = decodeHtmlEntities(match.groups.parameters.trim()); + params.matchAll(this.paramPattern).forEach(param => { + if (param.groups) { + var name = param.groups.name; + token.params[name] = decodeHtmlEntities(param.groups.value.trim()); + } + }); + } + token.rendered = this.renderToken(token); + tokens.push(token); + }); + return tokens; + } + + renderToken = (token) => { + const tag = token.macro.element || (token.inline ? 'span' : 'div'); + var node = `<${tag} class="macro" data-plugin-name="macro" data-macro-name="${token.matched.groups.name}"`; + + for (var name in token.params) { + node += ` data-param-${name}="${(token.params[name] || "").trim()}"`; + } + + if (token.keywords) { + node += ` data-keywords="${token.keywords}"`; + } + + node += ` data-inline="${token.inline}"`; + + node += ">"; + + if (token.macro.toHTML) { + node = token.macro.toHTML(token, node); + } + + if (token.inline) { + node += ``; + } + + // preserve the wrapping element, unless it is a paragraph. + if (token.matched.groups.wrap) { + if (token.matched.groups.wrap != '

') { + node = token.matched.groups.wrap + node + token.matched.groups.endwrap; + } + } + + return node; + } + + + constructor(settings) { + super(settings); + this.pattern = /(?<[^>]+?>){{(?\w+)(?(?:\s*[\w-]+)*?)?(?(?:\s+[\w-]+=\S+?)*)?\s*(?}})?(?<\/[^>]+?>)/mg; + this.endPattern = /

}}\s*<\/p>/mg; + this.paramPattern = /\s*(?[^=]+)="(?[^"]*)"/g; + this.multilinePattern = /(?(.(?!\}{3})*)+?)[\s\n]*\}{3}/smg; + + const plugin = this; + + this.editor.marked.use({ + hooks: { + preprocess: (source) => { + const matched = source.matchAll(plugin.multilinePattern); + var md = source; + matched.forEach(match => { + var wrapper = ''; + var content = decodeHtmlEntities(match.groups.content) + .replaceAll("\n", "::BR::") + .replaceAll('`', '::QU::') + .replaceAll('{', '::OC::') + .replaceAll('}', '::CC::'); + md = md.replaceAll(match[0], wrapper + '\0' + content + '\0'); + }); + return md; + }, + postprocess: (html) => { + plugin.getTokens(plugin.pattern, html).forEach(token => { + html = html.replaceAll(token.source, token.rendered); + }); + html = html.replaceAll(plugin.endPattern, ''); + Object.values(plugin.macros).forEach(macro => { + if (macro.postprocess) { + html = macro.postprocess(html); + } + }); + + html = html.replaceAll("::BR::", "
") + .replaceAll('::QU::', '`') + .replaceAll('::OC::', '{') + .replaceAll('::CC::', '}'); + + // remove unsafe html tags + return DOMPurify.sanitize(html, {}); + } + }, + }); + } + + setEditable() { + this.editor.turndown.addRule('macros', { + filter: function (node, options) { + return ((node.nodeName === 'DIV' || node.nodeName === 'SPAN') && node.dataset.pluginName == 'macro') + }, + replacement: function (content, node, options) { + var macro = plugin.macros[node.getAttribute('data-macro-name')]; + + if (macro.fromHTML) { + return macro.fromHTML(node, content); + } + + var md = '{{' + node.dataset.macroName; + if (node.dataset.keywords) { + md += " " + node.dataset.keywords; + } + + for (var paramName in node.dataset) { + if (paramName.indexOf("param") != 0) { + continue; + } + md += ` ${paramName.replace('param', '').toLowerCase()}="${node.dataset[paramName]}"` + }; + + if (node.dataset.inline == "false") { + md = `\n\n${md}\n\n`; + md += plugin.editor.HtmlToMarkdown(node.innerHTML); + md += "\n\n}}\n\n"; + } else { + md += "}}"; + } + + // replace nulls with line breaks, for the multiline macro + md = md.replaceAll('\0', "\n"); + + return md; + }, + }); + } + +} + +function camelCase(words) { + var output = []; + words.trim().split(/\s+/g).forEach(word => { + var lcWord = word.toLowerCase(); + output.push(lcWord.charAt(0).toUpperCase() + lcWord.slice(1)); + }); + return output; +} + +function b64encode(input) { + return new TextEncoder().encode(input).toBase64(); +} + +function b64decode(input) { + return new TextDecoder().decode(Uint8Array.fromBase64(input)); +} + +function decodeHtmlEntities(html) { + var txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; +} + +function encodeHtmlEntities(str) { + return str.replace(/[\u00A0-\u9999<>\&]/g, i => '&#'+i.charCodeAt(0)+';') +} diff --git a/src/ttfrog/themes/default/static/editor/turndown-plugin-gfm.js b/src/ttfrog/themes/default/static/editor/joplin-turndown-plugin-gfm.js similarity index 52% rename from src/ttfrog/themes/default/static/editor/turndown-plugin-gfm.js rename to src/ttfrog/themes/default/static/editor/joplin-turndown-plugin-gfm.js index 859f4ad..3b2da4a 100644 --- a/src/ttfrog/themes/default/static/editor/turndown-plugin-gfm.js +++ b/src/ttfrog/themes/default/static/editor/joplin-turndown-plugin-gfm.js @@ -43,6 +43,7 @@ var rules = {}; rules.tableCell = { filter: ['th', 'td'], replacement: function (content, node) { + if (tableShouldBeSkipped(nodeParentTable(node))) return content; return cell(content, node) } }; @@ -50,19 +51,26 @@ rules.tableCell = { rules.tableRow = { filter: 'tr', replacement: function (content, node) { + const parentTable = nodeParentTable(node); + if (tableShouldBeSkipped(parentTable)) return content; + var borderCells = ''; var alignMap = { left: ':--', right: '--:', center: ':-:' }; if (isHeadingRow(node)) { - for (var i = 0; i < node.childNodes.length; i++) { + const colCount = tableColCount(parentTable); + for (var i = 0; i < colCount; i++) { + const childNode = colCount >= node.childNodes.length ? null : node.childNodes[i]; var border = '---'; - var align = ( - node.childNodes[i].getAttribute('align') || '' - ).toLowerCase(); + var align = childNode ? (childNode.getAttribute('align') || '').toLowerCase() : ''; if (align) border = alignMap[align] || border; - borderCells += cell(border, node.childNodes[i]); + if (childNode) { + borderCells += cell(border, node.childNodes[i]); + } else { + borderCells += cell(border, null, i); + } } } return '\n' + content + (borderCells ? '\n' + borderCells : '') @@ -73,13 +81,27 @@ rules.table = { // Only convert tables with a heading row. // Tables with no heading row are kept using `keep` (see below). filter: function (node) { - return node.nodeName === 'TABLE' && isHeadingRow(node.rows[0]) + return node.nodeName === 'TABLE' }, - replacement: function (content) { + replacement: function (content, node) { + if (tableShouldBeSkipped(node)) return content; + // Ensure there are no blank lines - content = content.replace('\n\n', '\n'); - return '\n\n' + content + '\n\n' + content = content.replace(/\n+/g, '\n'); + + // If table has no heading, add an empty one so as to get a valid Markdown table + var secondLine = content.trim().split('\n'); + if (secondLine.length >= 2) secondLine = secondLine[1]; + var secondLineIsDivider = secondLine.indexOf('| ---') === 0; + + var columnCount = tableColCount(node); + var emptyHeader = ''; + if (columnCount && !secondLineIsDivider) { + emptyHeader = '|' + ' |'.repeat(columnCount) + '\n' + '|' + ' --- |'.repeat(columnCount); + } + + return '\n\n' + emptyHeader + content + '\n\n' } }; @@ -120,16 +142,71 @@ function isFirstTbody (element) { ) } -function cell (content, node) { - var index = indexOf.call(node.parentNode.childNodes, node); +function cell (content, node = null, index = null) { + if (index === null) index = indexOf.call(node.parentNode.childNodes, node); var prefix = ' '; if (index === 0) prefix = '| '; - return prefix + content + ' |' + let filteredContent = content.trim().replace(/\n\r/g, '
').replace(/\n/g, "
"); + filteredContent = filteredContent.replace(/\|+/g, '\\|'); + while (filteredContent.length < 3) filteredContent += ' '; + if (node) filteredContent = handleColSpan(filteredContent, node, ' '); + return prefix + filteredContent + ' |' +} + +function nodeContainsTable(node) { + if (!node.childNodes) return false; + + for (let i = 0; i < node.childNodes.length; i++) { + const child = node.childNodes[i]; + if (child.nodeName === 'TABLE') return true; + if (nodeContainsTable(child)) return true; + } + return false; +} + +// Various conditions under which a table should be skipped - i.e. each cell +// will be rendered one after the other as if they were paragraphs. +function tableShouldBeSkipped(tableNode) { + if (!tableNode) return true; + if (!tableNode.rows) return true; + if (tableNode.rows.length === 1 && tableNode.rows[0].childNodes.length <= 1) return true; // Table with only one cell + + // Not sure why we're excluding this. possibly because it'll freak out the parser? --evilchili + //if (nodeContainsTable(tableNode)) return true; + + return false; +} + +function nodeParentTable(node) { + let parent = node.parentNode; + while (parent.nodeName !== 'TABLE') { + parent = parent.parentNode; + if (!parent) return null; + } + return parent; +} + +function handleColSpan(content, node, emptyChar) { + const colspan = node.getAttribute('colspan') || 1; + for (let i = 1; i < colspan; i++) { + content += ' | ' + emptyChar.repeat(3); + } + return content +} + +function tableColCount(node) { + let maxColCount = 0; + for (let i = 0; i < node.rows.length; i++) { + const row = node.rows[i]; + const colCount = row.childNodes.length; + if (colCount > maxColCount) maxColCount = colCount; + } + return maxColCount } function tables (turndownService) { turndownService.keep(function (node) { - return node.nodeName === 'TABLE' && !isHeadingRow(node.rows[0]) + return node.nodeName === 'TABLE' }); for (var key in rules) turndownService.addRule(key, rules[key]); } diff --git a/src/ttfrog/themes/default/static/editor/marked.umd.min.js b/src/ttfrog/themes/default/static/editor/marked.umd.min.js new file mode 100644 index 0000000..c4377f7 --- /dev/null +++ b/src/ttfrog/themes/default/static/editor/marked.umd.min.js @@ -0,0 +1,60 @@ +!function(e,t){"object"==typeof exports&&typeof module<"u"?module.exports=t():"function"==typeof define&&define.amd?define("marked",t):e.marked=t()}(typeof globalThis<"u"?globalThis:typeof self<"u"?self:this,function(){var e,t={},E=t,r={exports:t},i=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyNames,D=Object.prototype.hasOwnProperty,n={},M=n,j={Hooks:()=>L,Lexer:()=>A,Marked:()=>K,Parser:()=>I,Renderer:()=>_,TextRenderer:()=>P,Tokenizer:()=>v,defaults:()=>l,getDefaults:()=>s,lexer:()=>ie,marked:()=>C,options:()=>V,parse:()=>ne,parseInline:()=>re,parser:()=>se,setOptions:()=>Y,use:()=>ee,walkTokens:()=>te};for(e in j)i(M,e,{get:j[e],enumerable:!0});function s(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}r.exports=(e=>{var t=i({},"__esModule",{value:!0}),r=e,n=void 0,s=void 0;if(r&&"object"==typeof r||"function"==typeof r)for(let e of O(r))D.call(t,e)||e===n||i(t,e,{get:()=>r[e],enumerable:!(s=Z(r,e))||s.enumerable});return t})(n);var l=s();function N(e){l=e}n={exec:()=>null};function a(e,t=""){let n="string"==typeof e?e:e.source,s={replace:(e,t)=>{let r="string"==typeof t?t:t.source;return r=r.replace(o.caret,"$1"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}var o={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},h=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,c=/(?:[*+-]|\d{1,9}[.)])/,p=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,u=a(p).replace(/bull/g,c).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),p=a(p).replace(/bull/g,c).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),g=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,k=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,d=a(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",k).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),c=a(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,c).getRegex(),f="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",x=/|$))/,b=a("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",x).replace("tag",f).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),m=a(g).replace("hr",h).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex(),d={blockquote:a(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",m).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:d,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:h,html:b,lheading:u,list:c,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:m,table:n,text:/^[^\n]+/},b=a("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",h).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex(),c={...d,lheading:p,table:b,paragraph:a(g).replace("hr",h).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",b).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex()},m={...d,html:a(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",x).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:n,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:a(g).replace("hr",h).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",u).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},p=/^( {2,}|\\)\n(?!\s*$)/,b=/[\p{P}\p{S}]/u,f=/[\s\p{P}\p{S}]/u,g=/[^\s\p{P}\p{S}]/u,h=a(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,f).getRegex(),u=/(?!~)[\p{P}\p{S}]/u,w=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,y=a(w,"u").replace(/punct/g,b).getRegex(),w=a(w,"u").replace(/punct/g,u).getRegex(),$="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Q=a($,"gu").replace(/notPunctSpace/g,g).replace(/punctSpace/g,f).replace(/punct/g,b).getRegex(),$=a($,"gu").replace(/notPunctSpace/g,/(?:[^\s\p{P}\p{S}]|~)/u).replace(/punctSpace/g,/(?!~)[\s\p{P}\p{S}]/u).replace(/punct/g,u).getRegex(),u=a("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,g).replace(/punctSpace/g,f).replace(/punct/g,b).getRegex(),g=a(/\\(punct)/,"gu").replace(/punct/g,b).getRegex(),f=a(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),b=a(x).replace("(?:--\x3e|$)","--\x3e").getRegex(),x=a("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",b).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),b=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,H=a(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",b).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),G=a(/^!?\[(label)\]\[(ref)\]/).replace("label",b).replace("ref",k).getRegex(),k=a(/^!?\[(ref)\](?:\[\])?/).replace("ref",k).getRegex(),g={_backpedal:n,anyPunctuation:g,autolink:f,blockSkip:/\[[^\[\]]*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g,br:p,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:n,emStrongLDelim:y,emStrongRDelimAst:Q,emStrongRDelimUnd:u,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:H,nolink:k,punctuation:h,reflink:G,reflinkSearch:a("reflink|nolink(?!\\()","g").replace("reflink",G).replace("nolink",k).getRegex(),tag:x,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},X=e=>W[e];function T(e,t){if(t){if(o.escapeTest.test(e))return e.replace(o.escapeReplace,X)}else if(o.escapeTestNoEncode.test(e))return e.replace(o.escapeReplaceNoEncode,X);return e}function F(e){try{e=encodeURI(e).replace(o.percentDecode,"%")}catch{return null}return e}function U(e,t){let r=e.replace(o.findPipe,(e,t,r)=>{let n=!1,s=t;for(;0<=--s&&"\\"===r[s];)n=!n;return n?"|":" |"}),n=r.split(o.splitPipe),s=0;if(n[0].trim()||n.shift(),0t)n.splice(t);else for(;n.length{var t=e.match(r.other.beginningSpace);if(null===t)return e;var[t]=t;return t.length>=n.length?e.slice(n.length):e}).join(` +`)}(e=t[0],t[3]||"",this.rules),{type:"code",raw:e,lang:t[2]&&t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"),text:r}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let t=r[2].trim();if(this.rules.other.endingHash.test(t)){let e=z(t,"#");!this.options.pedantic&&e&&!this.rules.other.endingSpaceChar.test(e)||(t=e.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:z(e[0],` +`)}}blockquote(e){e=this.rules.block.blockquote.exec(e);if(e){let i=z(e[0],` +`).split(` +`),l="",a="",o=[];for(;0" ".repeat(3*e.length)),c=g.split(` +`,1)[0],p=!h.trim(),u=0;if(this.options.pedantic?(u=2,o=h.trimStart()):p?u=l[1].length+1:(u=4<(u=l[2].search(this.rules.other.nonSpaceChar))?1:u,o=h.slice(u),u+=l[1].length),p&&this.rules.other.blankLine.test(c)&&(a+=c+` +`,g=g.substring(c.length+1),e=!0),!e){let r=this.rules.other.nextBulletRegex(u),n=this.rules.other.hrRegex(u),s=this.rules.other.fencesBeginRegex(u),i=this.rules.other.headingBeginRegex(u),l=this.rules.other.htmlBeginRegex(u);for(;g;){let e=g.split(` +`,1)[0],t;if(c=e,t=this.options.pedantic?c=c.replace(this.rules.other.listReplaceNesting," "):c.replace(this.rules.other.tabCharGlobal," "),s.test(c)||i.test(c)||l.test(c)||r.test(c)||n.test(c))break;if(t.search(this.rules.other.nonSpaceChar)>=u||!c.trim())o+=` +`+t.slice(u);else{if(p||4<=h.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)||s.test(h)||i.test(h)||n.test(h))break;o+=` +`+c}p||c.trim()||(p=!0),a+=e+` +`,g=g.substring(e.length+1),h=t.slice(u)}}n.loose||(i?n.loose=!0:this.rules.other.doubleBlankLine.test(a)&&(i=!0));let t=null,r;this.options.gfm&&((t=this.rules.other.listIsTask.exec(o))&&(r="[ ] "!==t[0],o=o.replace(this.rules.other.listReplaceTask,""))),n.items.push({type:"list_item",raw:a,task:!!t,checked:r,loose:!1,text:o,tokens:[]}),n.raw+=a}let r=n.items.at(-1);if(r){r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd(),n.raw=n.raw.trimEnd();for(let r=0;r"space"===e.type),t=0this.rules.other.anyLine.test(e.raw));n.loose=t}if(n.loose)for(let e=0;e({text:e,tokens:this.lexer.inline(e),header:!1,align:n.align[t]})));return n}}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t)return e=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1],{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}text(e){e=this.rules.block.text.exec(e);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(e){e=this.rules.inline.escape.exec(e);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(e){e=this.rules.inline.tag.exec(e);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(n){let s=this.rules.inline.link.exec(n);if(s){let e=s[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;n=z(e.slice(0,-1),"\\");if((e.length-n.length)%2==0)return}else{var i,n=function(t,r){if(-1===t.indexOf(r[1]))return-1;let n=0;for(let e=0;e!!(t=e.call({lexer:this},i,r))&&(i=i.substring(t.raw.length),r.push(t),!0)))if(t=this.tokenizer.space(i)){i=i.substring(t.raw.length);let e=r.at(-1);1===t.raw.length&&void 0!==e?e.raw+=` +`:r.push(t)}else if(t=this.tokenizer.code(i)){i=i.substring(t.raw.length);let e=r.at(-1);"paragraph"===e?.type||"text"===e?.type?(e.raw+=(e.raw.endsWith(` +`)?"":` +`)+t.raw,e.text+=` +`+t.text,this.inlineQueue.at(-1).src=e.text):r.push(t)}else if(t=this.tokenizer.fences(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.heading(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.hr(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.blockquote(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.list(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.html(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.def(i)){i=i.substring(t.raw.length);let e=r.at(-1);"paragraph"===e?.type||"text"===e?.type?(e.raw+=(e.raw.endsWith(` +`)?"":` +`)+t.raw,e.text+=` +`+t.raw,this.inlineQueue.at(-1).src=e.text):this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title},r.push(t))}else if(t=this.tokenizer.table(i))i=i.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.lheading(i))i=i.substring(t.raw.length),r.push(t);else{let s=i;if(this.options.extensions?.startBlock){let t=1/0,r=i.slice(1),n;this.options.extensions.startBlock.forEach(e=>{"number"==typeof(n=e.call({lexer:this},r))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(s=i.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(s))){let e=r.at(-1);n&&"paragraph"===e?.type?(e.raw+=(e.raw.endsWith(` +`)?"":` +`)+t.raw,e.text+=` +`+t.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=e.text):r.push(t),n=s.length!==i.length,i=i.substring(t.raw.length)}else if(t=this.tokenizer.text(i)){i=i.substring(t.raw.length);let e=r.at(-1);"text"===e?.type?(e.raw+=(e.raw.endsWith(` +`)?"":` +`)+t.raw,e.text+=` +`+t.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=e.text):r.push(t)}else if(i){var e="Infinite loop on byte: "+i.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}}return this.state.top=!0,r}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(s,r=[]){let n=s,t=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(0!!(t=e.call({lexer:this},s,r))&&(s=s.substring(t.raw.length),r.push(t),!0)))if(t=this.tokenizer.escape(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.tag(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.link(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.reflink(s,this.tokens.links)){s=s.substring(t.raw.length);let e=r.at(-1);"text"===t.type&&"text"===e?.type?(e.raw+=t.raw,e.text+=t.text):r.push(t)}else if(t=this.tokenizer.emStrong(s,n,l))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.codespan(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.br(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.del(s))s=s.substring(t.raw.length),r.push(t);else if(t=this.tokenizer.autolink(s))s=s.substring(t.raw.length),r.push(t);else if(!this.state.inLink&&(t=this.tokenizer.url(s)))s=s.substring(t.raw.length),r.push(t);else{let e=s;if(this.options.extensions?.startInline){let t=1/0,r=s.slice(1),n;this.options.extensions.startInline.forEach(e=>{"number"==typeof(n=e.call({lexer:this},r))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(e=s.substring(0,t+1))}if(t=this.tokenizer.inlineText(e)){s=s.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(l=t.raw.slice(-1)),i=!0;let e=r.at(-1);"text"===e?.type?(e.raw+=t.raw,e.text+=t.text):r.push(t)}else if(s){var a="Infinite loop on byte: "+s.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}}}return r}},_=class{options;parser;constructor(e){this.options=e||l}space(e){return""}code({text:e,lang:t,escaped:r}){t=(t||"").match(o.notSpaceStart)?.[0],e=e.replace(o.endingNewline,"")+` +`;return t?'

'+(r?e:T(e,!0))+`
+`:"
"+(r?e:T(e,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(t){let e=t.ordered,r=t.start,n="";for(let e=0;e +`+n+" +`}listitem(e){let t="";var r;return e.task&&(r=this.checkbox({checked:!!e.checked}),e.loose?"paragraph"===e.tokens[0]?.type?(e.tokens[0].text=r+" "+e.tokens[0].text,e.tokens[0].tokens&&0${t+=this.parser.parse(e.tokens,!!e.loose)} +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

${this.parser.parseInline(e)}

+`}table(t){let e="",r="";for(let e=0;e + +`+e+` +`+(n=n&&`${n}`)+` +`}tablerow({text:e}){return` +${e} +`}tablecell(e){var t=this.parser.parseInline(e.tokens),r=e.header?"th":"td";return(e.align?`<${r} align="${e.align}">`:`<${r}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${T(e,!0)}`}br(e){return"
"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:r}){var r=this.parser.parseInline(r),n=F(e);if(null===n)return r;let s='
"}image({href:e,title:t,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));n=F(e);if(null===n)return T(r);let s=`${r}{e=t[e].flat(1/0);n=n.concat(this.walkTokens(e,r))}):t.tokens&&(n=n.concat(this.walkTokens(t.tokens,r)))}}return n}use(...e){let s=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(i=>{let e={...i};if(e.async=this.defaults.async||e.async||!1,i.extensions&&(i.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let r=s.renderers[n.name];r?s.renderers[n.name]=function(...e){let t=n.renderer.apply(this,e);return t=!1===t?r.apply(this,e):t}:s.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||"block"!==n.level&&"inline"!==n.level)throw new Error("extension level must be 'block' or 'inline'");let e=s[n.level];e?e.unshift(n.tokenizer):s[n.level]=[n.tokenizer],n.start&&("block"===n.level?s.startBlock?s.startBlock.push(n.start):s.startBlock=[n.start]:"inline"===n.level&&(s.startInline?s.startInline.push(n.start):s.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(s.childTokens[n.name]=n.childTokens)}),e.extensions=s),i.renderer){let s=this.defaults.renderer||new _(this.defaults);for(var t in i.renderer){if(!(t in s))throw new Error(`renderer '${t}' does not exist`);if(!["options","parser"].includes(t)){let e=t,r=i.renderer[e],n=s[e];s[e]=(...e)=>{let t=r.apply(s,e);return(t=!1===t?n.apply(s,e):t)||""}}}e.renderer=s}if(i.tokenizer){let s=this.defaults.tokenizer||new v(this.defaults);for(var l in i.tokenizer){if(!(l in s))throw new Error(`tokenizer '${l}' does not exist`);if(!["options","rules","lexer"].includes(l)){let e=l,r=i.tokenizer[e],n=s[e];s[e]=(...e)=>{let t=r.apply(s,e);return t=!1===t?n.apply(s,e):t}}}e.tokenizer=s}if(i.hooks){let s=this.defaults.hooks||new L;for(let t in i.hooks){if(!(t in s))throw new Error(`hook '${t}' does not exist`);if(!["options","block"].includes(t)){let e=t,r=i.hooks[e],n=s[e];L.passThroughHooks.has(t)?s[e]=e=>{if(this.defaults.async&&L.passThroughHooksRespectAsync.has(t))return Promise.resolve(r.call(s,e)).then(e=>n.call(s,e));e=r.call(s,e);return n.call(s,e)}:s[e]=(...e)=>{let t=r.apply(s,e);return t=!1===t?n.apply(s,e):t}}}e.hooks=s}if(i.walkTokens){let r=this.defaults.walkTokens,n=i.walkTokens;e.walkTokens=function(e){let t=[];return t.push(n.call(this,e)),t=r?t.concat(r.call(this,e)):t}}this.defaults={...this.defaults,...e}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return A.lex(e,t??this.defaults)}parser(e,t){return I.parse(e,t??this.defaults)}parseMarkdown(a){return(r,e)=>{let t={...e},n={...this.defaults,...t},s=this.onError(!!n.silent,!!n.async);if(!0===this.defaults.async&&!1===t.async)return s(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if("u"i(e,n)).then(e=>n.hooks?n.hooks.processAllTokens(e):e).then(e=>n.walkTokens?Promise.all(this.walkTokens(e,n.walkTokens)).then(()=>e):e).then(e=>l(e,n)).then(e=>n.hooks?n.hooks.postprocess(e):e).catch(s);try{n.hooks&&(r=n.hooks.preprocess(r));let e=i(r,n),t=(n.hooks&&(e=n.hooks.processAllTokens(e)),n.walkTokens&&this.walkTokens(e,n.walkTokens),l(e,n));return t=n.hooks?n.hooks.postprocess(t):t}catch(e){return s(e)}}}onError(r,n){return e=>{var t;if(e.message+=` +Please report this to https://github.com/markedjs/marked.`,r)return t="

An error occurred:

"+T(e.message+"",!0)+"
",n?Promise.resolve(t):t;if(n)return Promise.reject(e);throw e}}},B=new K;function C(e,t){return B.parse(e,t)}C.options=C.setOptions=function(e){return B.setOptions(e),N(C.defaults=B.defaults),C},C.getDefaults=s,C.defaults=l,C.use=function(...e){return B.use(...e),N(C.defaults=B.defaults),C},C.walkTokens=function(e,t){return B.walkTokens(e,t)},C.parseInline=B.parseInline,C.Parser=I,C.parser=I.parse,C.Renderer=_,C.TextRenderer=P,C.Lexer=A,C.lexer=A.lex,C.Tokenizer=v,C.Hooks=L;var V=(C.parse=C).options,Y=C.setOptions,ee=C.use,te=C.walkTokens,re=C.parseInline,ne=C,se=I.parse,ie=A.lex;return E!=t&&(r.exports=t),r.exports}); \ No newline at end of file diff --git a/src/ttfrog/themes/default/static/editor/purify.min.js b/src/ttfrog/themes/default/static/editor/purify.min.js new file mode 100644 index 0000000..62b30a9 --- /dev/null +++ b/src/ttfrog/themes/default/static/editor/purify.min.js @@ -0,0 +1,3 @@ +/*! @license DOMPurify 3.2.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.7/LICENSE */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:o,getOwnPropertyDescriptor:r}=Object;let{freeze:i,seal:a,create:l}=Object,{apply:c,construct:s}="undefined"!=typeof Reflect&&Reflect;i||(i=function(e){return e}),a||(a=function(e){return e}),c||(c=function(e,t){for(var n=arguments.length,o=new Array(n>2?n-2:0),r=2;r1?t-1:0),o=1;o1?n-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:h;t&&t(e,null);let i=o.length;for(;i--;){let t=o[i];if("string"==typeof t){const e=r(t);e!==t&&(n(o)||(o[i]=e),t=e)}e[t]=!0}return e}function O(e){for(let t=0;t/gm),G=a(/\$\{[\w\W]*/gm),Y=a(/^data-[\-\w.\u00B7-\uFFFF]+$/),j=a(/^aria-[\-\w]+$/),X=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),q=a(/^(?:\w+script|data):/i),$=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),K=a(/^html$/i),V=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var Z=Object.freeze({__proto__:null,ARIA_ATTR:j,ATTR_WHITESPACE:$,CUSTOM_ELEMENT:V,DATA_ATTR:Y,DOCTYPE_NAME:K,ERB_EXPR:W,IS_ALLOWED_URI:X,IS_SCRIPT_OR_DATA:q,MUSTACHE_EXPR:B,TMPLIT_EXPR:G});const J=1,Q=3,ee=7,te=8,ne=9,oe=function(){return"undefined"==typeof window?null:window};var re=function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:oe();const o=e=>t(e);if(o.version="3.2.7",o.removed=[],!n||!n.document||n.document.nodeType!==ne||!n.Element)return o.isSupported=!1,o;let{document:r}=n;const a=r,c=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:N,Node:w,Element:O,NodeFilter:B,NamedNodeMap:W=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:G,DOMParser:Y,trustedTypes:j}=n,q=O.prototype,$=D(q,"cloneNode"),V=D(q,"remove"),re=D(q,"nextSibling"),ie=D(q,"childNodes"),ae=D(q,"parentNode");if("function"==typeof N){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let le,ce="";const{implementation:se,createNodeIterator:ue,createDocumentFragment:me,getElementsByTagName:pe}=r,{importNode:fe}=a;let de={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};o.isSupported="function"==typeof e&&"function"==typeof ae&&se&&void 0!==se.createHTMLDocument;const{MUSTACHE_EXPR:he,ERB_EXPR:ge,TMPLIT_EXPR:Te,DATA_ATTR:ye,ARIA_ATTR:Ee,IS_SCRIPT_OR_DATA:Ae,ATTR_WHITESPACE:_e,CUSTOM_ELEMENT:Se}=Z;let{IS_ALLOWED_URI:be}=Z,Ne=null;const we=R({},[...x,...L,...C,...I,...U]);let Re=null;const Oe=R({},[...z,...P,...H,...F]);let ve=Object.seal(l(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),De=null,xe=null,Le=!0,Ce=!0,ke=!1,Ie=!0,Me=!1,Ue=!0,ze=!1,Pe=!1,He=!1,Fe=!1,Be=!1,We=!1,Ge=!0,Ye=!1,je=!0,Xe=!1,qe={},$e=null;const Ke=R({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ve=null;const Ze=R({},["audio","video","img","source","image","track"]);let Je=null;const Qe=R({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),et="http://www.w3.org/1998/Math/MathML",tt="http://www.w3.org/2000/svg",nt="http://www.w3.org/1999/xhtml";let ot=nt,rt=!1,it=null;const at=R({},[et,tt,nt],g);let lt=R({},["mi","mo","mn","ms","mtext"]),ct=R({},["annotation-xml"]);const st=R({},["title","style","font","a","script"]);let ut=null;const mt=["application/xhtml+xml","text/html"];let pt=null,ft=null;const dt=r.createElement("form"),ht=function(e){return e instanceof RegExp||e instanceof Function},gt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ft||ft!==e){if(e&&"object"==typeof e||(e={}),e=v(e),ut=-1===mt.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,pt="application/xhtml+xml"===ut?g:h,Ne=_(e,"ALLOWED_TAGS")?R({},e.ALLOWED_TAGS,pt):we,Re=_(e,"ALLOWED_ATTR")?R({},e.ALLOWED_ATTR,pt):Oe,it=_(e,"ALLOWED_NAMESPACES")?R({},e.ALLOWED_NAMESPACES,g):at,Je=_(e,"ADD_URI_SAFE_ATTR")?R(v(Qe),e.ADD_URI_SAFE_ATTR,pt):Qe,Ve=_(e,"ADD_DATA_URI_TAGS")?R(v(Ze),e.ADD_DATA_URI_TAGS,pt):Ze,$e=_(e,"FORBID_CONTENTS")?R({},e.FORBID_CONTENTS,pt):Ke,De=_(e,"FORBID_TAGS")?R({},e.FORBID_TAGS,pt):v({}),xe=_(e,"FORBID_ATTR")?R({},e.FORBID_ATTR,pt):v({}),qe=!!_(e,"USE_PROFILES")&&e.USE_PROFILES,Le=!1!==e.ALLOW_ARIA_ATTR,Ce=!1!==e.ALLOW_DATA_ATTR,ke=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ie=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Me=e.SAFE_FOR_TEMPLATES||!1,Ue=!1!==e.SAFE_FOR_XML,ze=e.WHOLE_DOCUMENT||!1,Fe=e.RETURN_DOM||!1,Be=e.RETURN_DOM_FRAGMENT||!1,We=e.RETURN_TRUSTED_TYPE||!1,He=e.FORCE_BODY||!1,Ge=!1!==e.SANITIZE_DOM,Ye=e.SANITIZE_NAMED_PROPS||!1,je=!1!==e.KEEP_CONTENT,Xe=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||X,ot=e.NAMESPACE||nt,lt=e.MATHML_TEXT_INTEGRATION_POINTS||lt,ct=e.HTML_INTEGRATION_POINTS||ct,ve=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&ht(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ve.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&ht(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ve.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ve.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Me&&(Ce=!1),Be&&(Fe=!0),qe&&(Ne=R({},U),Re=[],!0===qe.html&&(R(Ne,x),R(Re,z)),!0===qe.svg&&(R(Ne,L),R(Re,P),R(Re,F)),!0===qe.svgFilters&&(R(Ne,C),R(Re,P),R(Re,F)),!0===qe.mathMl&&(R(Ne,I),R(Re,H),R(Re,F))),e.ADD_TAGS&&(Ne===we&&(Ne=v(Ne)),R(Ne,e.ADD_TAGS,pt)),e.ADD_ATTR&&(Re===Oe&&(Re=v(Re)),R(Re,e.ADD_ATTR,pt)),e.ADD_URI_SAFE_ATTR&&R(Je,e.ADD_URI_SAFE_ATTR,pt),e.FORBID_CONTENTS&&($e===Ke&&($e=v($e)),R($e,e.FORBID_CONTENTS,pt)),je&&(Ne["#text"]=!0),ze&&R(Ne,["html","head","body"]),Ne.table&&(R(Ne,["tbody"]),delete De.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');le=e.TRUSTED_TYPES_POLICY,ce=le.createHTML("")}else void 0===le&&(le=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const o="data-tt-policy-suffix";t&&t.hasAttribute(o)&&(n=t.getAttribute(o));const r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(j,c)),null!==le&&"string"==typeof ce&&(ce=le.createHTML(""));i&&i(e),ft=e}},Tt=R({},[...L,...C,...k]),yt=R({},[...I,...M]),Et=function(e){f(o.removed,{element:e});try{ae(e).removeChild(e)}catch(t){V(e)}},At=function(e,t){try{f(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){f(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(Fe||Be)try{Et(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},_t=function(e){let t=null,n=null;if(He)e=""+e;else{const t=T(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===ut&&ot===nt&&(e=''+e+"");const o=le?le.createHTML(e):e;if(ot===nt)try{t=(new Y).parseFromString(o,ut)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(ot,"template",null);try{t.documentElement.innerHTML=rt?ce:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),ot===nt?pe.call(t,ze?"html":"body")[0]:ze?t.documentElement:i},St=function(e){return ue.call(e.ownerDocument||e,e,B.SHOW_ELEMENT|B.SHOW_COMMENT|B.SHOW_TEXT|B.SHOW_PROCESSING_INSTRUCTION|B.SHOW_CDATA_SECTION,null)},bt=function(e){return e instanceof G&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof W)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Nt=function(e){return"function"==typeof w&&e instanceof w};function wt(e,t,n){u(e,(e=>{e.call(o,t,n,ft)}))}const Rt=function(e){let t=null;if(wt(de.beforeSanitizeElements,e,null),bt(e))return Et(e),!0;const n=pt(e.nodeName);if(wt(de.uponSanitizeElement,e,{tagName:n,allowedTags:Ne}),Ue&&e.hasChildNodes()&&!Nt(e.firstElementChild)&&S(/<[/\w!]/g,e.innerHTML)&&S(/<[/\w!]/g,e.textContent))return Et(e),!0;if(e.nodeType===ee)return Et(e),!0;if(Ue&&e.nodeType===te&&S(/<[/\w]/g,e.data))return Et(e),!0;if(!Ne[n]||De[n]){if(!De[n]&&vt(n)){if(ve.tagNameCheck instanceof RegExp&&S(ve.tagNameCheck,n))return!1;if(ve.tagNameCheck instanceof Function&&ve.tagNameCheck(n))return!1}if(je&&!$e[n]){const t=ae(e)||e.parentNode,n=ie(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o){const r=$(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,re(e))}}}return Et(e),!0}return e instanceof O&&!function(e){let t=ae(e);t&&t.tagName||(t={namespaceURI:ot,tagName:"template"});const n=h(e.tagName),o=h(t.tagName);return!!it[e.namespaceURI]&&(e.namespaceURI===tt?t.namespaceURI===nt?"svg"===n:t.namespaceURI===et?"svg"===n&&("annotation-xml"===o||lt[o]):Boolean(Tt[n]):e.namespaceURI===et?t.namespaceURI===nt?"math"===n:t.namespaceURI===tt?"math"===n&&ct[o]:Boolean(yt[n]):e.namespaceURI===nt?!(t.namespaceURI===tt&&!ct[o])&&!(t.namespaceURI===et&&!lt[o])&&!yt[n]&&(st[n]||!Tt[n]):!("application/xhtml+xml"!==ut||!it[e.namespaceURI]))}(e)?(Et(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!S(/<\/no(script|embed|frames)/i,e.innerHTML)?(Me&&e.nodeType===Q&&(t=e.textContent,u([he,ge,Te],(e=>{t=y(t,e," ")})),e.textContent!==t&&(f(o.removed,{element:e.cloneNode()}),e.textContent=t)),wt(de.afterSanitizeElements,e,null),!1):(Et(e),!0)},Ot=function(e,t,n){if(Ge&&("id"===t||"name"===t)&&(n in r||n in dt))return!1;if(Ce&&!xe[t]&&S(ye,t));else if(Le&&S(Ee,t));else if(!Re[t]||xe[t]){if(!(vt(e)&&(ve.tagNameCheck instanceof RegExp&&S(ve.tagNameCheck,e)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(e))&&(ve.attributeNameCheck instanceof RegExp&&S(ve.attributeNameCheck,t)||ve.attributeNameCheck instanceof Function&&ve.attributeNameCheck(t,e))||"is"===t&&ve.allowCustomizedBuiltInElements&&(ve.tagNameCheck instanceof RegExp&&S(ve.tagNameCheck,n)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(n))))return!1}else if(Je[t]);else if(S(be,y(n,_e,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==E(n,"data:")||!Ve[e]){if(ke&&!S(Ae,y(n,_e,"")));else if(n)return!1}else;return!0},vt=function(e){return"annotation-xml"!==e&&T(e,Se)},Dt=function(e){wt(de.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||bt(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Re,forceKeepAttr:void 0};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=pt(a),m=c;let f="value"===a?m:A(m);if(n.attrName=s,n.attrValue=f,n.keepAttr=!0,n.forceKeepAttr=void 0,wt(de.uponSanitizeAttribute,e,n),f=n.attrValue,!Ye||"id"!==s&&"name"!==s||(At(a,e),f="user-content-"+f),Ue&&S(/((--!?|])>)|<\/(style|title|textarea)/i,f)){At(a,e);continue}if("attributename"===s&&T(f,"href")){At(a,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){At(a,e);continue}if(!Ie&&S(/\/>/i,f)){At(a,e);continue}Me&&u([he,ge,Te],(e=>{f=y(f,e," ")}));const d=pt(e.nodeName);if(Ot(d,s,f)){if(le&&"object"==typeof j&&"function"==typeof j.getAttributeType)if(l);else switch(j.getAttributeType(d,s)){case"TrustedHTML":f=le.createHTML(f);break;case"TrustedScriptURL":f=le.createScriptURL(f)}if(f!==m)try{l?e.setAttributeNS(l,a,f):e.setAttribute(a,f),bt(e)?Et(e):p(o.removed)}catch(t){At(a,e)}}else At(a,e)}wt(de.afterSanitizeAttributes,e,null)},xt=function e(t){let n=null;const o=St(t);for(wt(de.beforeSanitizeShadowDOM,t,null);n=o.nextNode();)wt(de.uponSanitizeShadowNode,n,null),Rt(n),Dt(n),n.content instanceof s&&e(n.content);wt(de.afterSanitizeShadowDOM,t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(rt=!e,rt&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Nt(e)){if("function"!=typeof e.toString)throw b("toString is not a function");if("string"!=typeof(e=e.toString()))throw b("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Pe||gt(t),o.removed=[],"string"==typeof e&&(Xe=!1),Xe){if(e.nodeName){const t=pt(e.nodeName);if(!Ne[t]||De[t])throw b("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=_t("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===J&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!Fe&&!Me&&!ze&&-1===e.indexOf("<"))return le&&We?le.createHTML(e):e;if(n=_t(e),!n)return Fe?null:We?ce:""}n&&He&&Et(n.firstChild);const c=St(Xe?e:n);for(;i=c.nextNode();)Rt(i),Dt(i),i.content instanceof s&&xt(i.content);if(Xe)return e;if(Fe){if(Be)for(l=me.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Re.shadowroot||Re.shadowrootmode)&&(l=fe.call(a,l,!0)),l}let m=ze?n.outerHTML:n.innerHTML;return ze&&Ne["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&S(K,n.ownerDocument.doctype.name)&&(m="\n"+m),Me&&u([he,ge,Te],(e=>{m=y(m,e," ")})),le&&We?le.createHTML(m):m},o.setConfig=function(){gt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Pe=!0},o.clearConfig=function(){ft=null,Pe=!1},o.isValidAttribute=function(e,t,n){ft||gt({});const o=pt(e),r=pt(t);return Ot(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&f(de[e],t)},o.removeHook=function(e,t){if(void 0!==t){const n=m(de[e],t);return-1===n?void 0:d(de[e],n,1)[0]}return p(de[e])},o.removeHooks=function(e){de[e]=[]},o.removeAllHooks=function(){de={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},o}();return re})); +//# sourceMappingURL=purify.min.js.map diff --git a/src/ttfrog/themes/default/static/site.css b/src/ttfrog/themes/default/static/site.css index 21be61e..ebb0cca 100644 --- a/src/ttfrog/themes/default/static/site.css +++ b/src/ttfrog/themes/default/static/site.css @@ -113,6 +113,7 @@ table { th { border-bottom: 1px solid #000; + padding: 3px; } th, td { padding: 2px; @@ -206,3 +207,148 @@ footer { menu { display: none; } + +.left { + display: block; + float: left; + margin:5px; + max-width: 30%; +} + +.right { + display: block; + float: right; + margin: 5px; + max-width: 30%; +} + +.center { + width: fit-content; + margin: 0 auto; +} + +.box { + border-radius: 5px; + border: 1px solid black; + background: #DEDEDE; + padding: 10px; +} + +.striped > table { + background: #FAFAFA; +} +.striped > table tr:nth-child(even) { + background-color: #FFFFFF; +} + +.equal-widths > table { + table-layout: fixed; + width: 100%; +} + +.layout > table { + border: none; + background: transparent; +} +.layout > table > thead { + display: none; +} + +table td table { + max-width:95%; +} + +pre { + border: 1px dashed black; + border-radius: 5px; + padding: 10px; + margin: 5px; + background: #EEE; +} + +code { + display: inline-block; + border: 1px dashed black; + border-radius: 5px; + padding: 5px; + background: #EEE; + margin: 3px; +} + +div.macro { + display: inline; +} + +div[data-macro-name="toc"] { + display: inline; + float: left; + border-radius: 5px; + font-size: 14px; + margin-right: 2em; + margin-bottom: 2em; + border: 1px solid #000; + padding: 0ch 2ch; +} + +div[data-macro-name="toc"] ul { + box-sizing: border-box; + list-style: none; + padding-left: 2ch; + font-weight: normal; + margin-left: 0px; + +} + +div[data-macro-name="toc"] > ul:first-child { + padding-left: 0ch; + margin-left: 0px; +} +div[data-macro-name="toc"] > ul:first-child > li { + padding-left: 0ch; + margin-left: 0px; +} +div[data-macro-name="toc"] > ul:first-child > li { + font-weight: bold; +} + +div[data-macro-name="toc"] > ul > li { + font-weight: bold; +} + +div[data-macro-name="toc"] > ul > li { + padding-left: 2ch; +} + +div[data-macro-name="toc"] a { + display: block; + width: 100%; +} +div[data-macro-name="toc"] a:hover { + background: #CCC; +} + + +#content { + display: none; +} + +#content.loaded { + display: block; +} +#content.wysiwyg { + display: none, +} +#content.view { +} + +#content.edit { + font-family: monospace; + white-space: pre; +} + +#content.wysiwyg { +} + +#content.wysiwyg .md { + opacity: 0.5; +} diff --git a/src/ttfrog/themes/default/static/site.js b/src/ttfrog/themes/default/static/site.js new file mode 100644 index 0000000..5184b9f --- /dev/null +++ b/src/ttfrog/themes/default/static/site.js @@ -0,0 +1,112 @@ +APIv1 = { + get: function(doc_id, callback) { + (async () => { + const raw = await fetch('/_/v1/get/' + doc_id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + } + }); + const res = await raw.json(); + if (res['code'] != 200) { + console.error("APIv1 error: ", res) + } + callback(res); + })(); + }, + + put: function(data, callback) { + (async () => { + const raw = await fetch('/_/v1/put/' + window.location.pathname, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + 'body': data + }), + }); + const res = await raw.json(); + if (res['code'] != 200) { + console.error("APIv1 error: ", res) + } + callback(res); + })(); + }, + + search: function(space, query, callback) { + (async () => { + const raw = await fetch('/_/v1/search/' + space, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + 'body': query + }), + }); + const res = await raw.json(); + if (res['code'] != 200) { + console.error("APIv1 error: ", res) + } + callback(res); + })(); + }, +}; + +const WIDGETS = {}; + +function parseWidgetSource(html) { + + function block(prefix) { + return RegExp('##\\s*' + prefix + '.*?```\\w*(.+?)```', 'gims'); + }; + + const template = block("Template").exec(html)[1]; + const css = block("CSS").exec(html)[1]; + const processor = block("Processor").exec(html)[1]; + + var func; + eval("func = " + processor); + + return { + template: template, + css: css, + processor: func + }; +} + +async function processWidgets(html, callback) { + + var widgetPattern = /({{(.+)}})/gm; + + if (!html.match(widgetPattern)) { + callback(); + return; + } + + html.matchAll(widgetPattern).forEach(match => { + var widgetTag = match[1]; + var widgetName = match[2]; + if (Object.values(WIDGETS).indexOf(widgetName) == -1) { + APIv1.search("Widget", widgetName, (res) => { + if (res.code == 200) { + var parts = parseWidgetSource(res.response[0].body); + WIDGETS[widgetName] = parts.processor; + contents = WIDGETS[widgetName](widgetTag, parts.template, parts.css); + } else { + contents = `Invalid widget: ${widgetName}`; + } + var rep = `${contents}`; + html = html.replaceAll(widgetTag, rep); + if (parts) { + html = `${html}`; + } + callback(html); + }); + } + }); +}; diff --git a/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.css b/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.css deleted file mode 100644 index a420f80..0000000 --- a/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * @toast-ui/editor - * @version 3.2.2 | Fri Feb 17 2023 - * @author NHN Cloud FE Development Lab - * @license MIT - */.ProseMirror{overflow-X:hidden;color:#222;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,나눔바른고딕,Nanum Barun Gothic,맑은고딕,Malgun Gothic,sans-serif;font-size:13px;height:calc(100% - 36px);overflow-y:auto}.ProseMirror .placeholder{color:#999}.ProseMirror-selectednode,.ProseMirror:focus{outline:none}.html-block.ProseMirror-selectednode,table.ProseMirror-selectednode{border-radius:2px;outline:2px solid #00a9ff}.toastui-editor-contents{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,나눔바른고딕,Nanum Barun Gothic,맑은고딕,Malgun Gothic,sans-serif;font-size:13px;margin:0;padding:0;z-index:20}.toastui-editor-contents :not(table){box-sizing:content-box;line-height:160%}.toastui-editor-contents address,.toastui-editor-contents cite,.toastui-editor-contents dfn,.toastui-editor-contents em,.toastui-editor-contents i,.toastui-editor-contents var{font-style:italic}.toastui-editor-contents strong{font-weight:700}.toastui-editor-contents p{color:#222;margin:10px 0}.toastui-editor-contents>div>div:first-of-type h1,.toastui-editor-contents>h1:first-of-type{margin-top:14px}.toastui-editor-contents h1,.toastui-editor-contents h2,.toastui-editor-contents h3,.toastui-editor-contents h4,.toastui-editor-contents h5,.toastui-editor-contents h6{color:#222;font-weight:700}.toastui-editor-contents h1{border-bottom:3px double #999;font-size:24px;line-height:28px;margin:52px 0 15px;padding-bottom:7px}.toastui-editor-contents h2{border-bottom:1px solid #dbdbdb;font-size:22px;line-height:23px;margin:20px 0 13px;padding-bottom:7px}.toastui-editor-contents h3{font-size:20px;margin:18px 0 2px}.toastui-editor-contents h4{font-size:18px;margin:10px 0 2px}.toastui-editor-contents h3,.toastui-editor-contents h4{line-height:18px}.toastui-editor-contents h5{font-size:16px}.toastui-editor-contents h6{font-size:14px}.toastui-editor-contents h5,.toastui-editor-contents h6{line-height:17px;margin:9px 0 -4px}.toastui-editor-contents del{color:#999}.toastui-editor-contents blockquote{border-left:4px solid #e5e5e5;color:#999;margin:14px 0;padding:0 16px}.toastui-editor-contents blockquote ol,.toastui-editor-contents blockquote p,.toastui-editor-contents blockquote ul{color:#999}.toastui-editor-contents blockquote>:first-child{margin-top:0}.toastui-editor-contents blockquote>:last-child{margin-bottom:0}.toastui-editor-contents code,.toastui-editor-contents pre{border:0;border-radius:0;font-family:Consolas,Courier,Apple SD 산돌고딕 Neo,-apple-system,Lucida Grande,Apple SD Gothic Neo,맑은 고딕,Malgun Gothic,Segoe UI,돋움,dotum,sans-serif}.toastui-editor-contents pre{background-color:#f4f7f8;margin:2px 0 8px;padding:18px}.toastui-editor-contents code{background-color:#f9f2f4;border-radius:2px;color:#c1798b;letter-spacing:-.3px;padding:2px 3px}.toastui-editor-contents pre code{background-color:transparent;color:inherit;padding:0;white-space:pre-wrap}.toastui-editor-contents img{box-sizing:border-box;margin:4px 0 10px;max-width:100%;vertical-align:top}.toastui-editor-contents table{border:1px solid rgba(0,0,0,.1);border-collapse:collapse;box-sizing:border-box;color:#222;margin:12px 0 14px;width:auto}.toastui-editor-contents table td,.toastui-editor-contents table th{border:1px solid rgba(0,0,0,.1);height:32px;padding:5px 14px 5px 12px}.toastui-editor-contents table th{background-color:#555;color:#fff;font-weight:300;padding-top:6px}.toastui-editor-contents th p{color:#fff;margin:0}.toastui-editor-contents td p{margin:0;padding:0 2px}.toastui-editor-contents td.toastui-editor-cell-selected{background-color:#d8dfec}.toastui-editor-contents th.toastui-editor-cell-selected{background-color:#908f8f}.toastui-editor-contents dir,.toastui-editor-contents menu,.toastui-editor-contents ol,.toastui-editor-contents ul{color:#222;display:block;list-style-type:none;margin:6px 0 10px;padding-left:24px}.toastui-editor-contents ol{counter-reset:li;list-style-type:none}.toastui-editor-contents ol>li{counter-increment:li}.toastui-editor-contents ol>li:before,.toastui-editor-contents ul>li:before{display:inline-block;position:absolute}.toastui-editor-contents ul>li:before{background-color:#ccc;border-radius:50%;content:"";height:5px;margin-left:-17px;margin-top:6px;width:5px}.toastui-editor-contents ol>li:before{color:#aaa;content:"." counter(li);direction:rtl;margin-left:-28px;text-align:right;width:24px}.toastui-editor-contents ol ol,.toastui-editor-contents ol ul,.toastui-editor-contents ul ol,.toastui-editor-contents ul ul{margin-bottom:0!important;margin-top:0!important}.toastui-editor-contents ol li,.toastui-editor-contents ul li{position:relative}.toastui-editor-contents ol p,.toastui-editor-contents ul p{margin:0}.toastui-editor-contents hr{border-top:1px solid #eee;margin:16px 0}.toastui-editor-contents a{color:#4b96e6;text-decoration:underline}.toastui-editor-contents a:hover{color:#1f70de}.toastui-editor-contents .image-link{position:relative}.toastui-editor-contents .image-link:hover:before{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjNTU1IiBzdHJva2Utd2lkdGg9IjEuNSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxwYXRoIGQ9Im01LjY4NyAxMC4yOTQtMS4yODUgMS4yODhjLTEuMDUgMS4wNS0xLjAzNSAyLjc3Mi4wMzcgMy44NDRsLjEzNS4xMzVjMS4wNzIgMS4wNzIgMi43OTQgMS4wODggMy44NDQuMDM3bDIuNzItMi43MmMxLjA1MS0xLjA1IDEuMDM0LTIuNzcyLS4wMzctMy44NDNsLS4xMzYtLjEzNiIvPjxwYXRoIGQ9Im0xNC4zMDUgOS43MTMgMS4yODctMS4yOWMxLjA1Mi0xLjA1MSAxLjAzNi0yLjc3My0uMDM2LTMuODQ0bC0uMTM1LS4xMzZjLTEuMDcyLTEuMDcyLTIuNzk0LTEuMDg4LTMuODQ1LS4wMzZMOC44NTcgNy4xMjZjLTEuMDUxIDEuMDUxLTEuMDM0IDIuNzcyLjAzNyAzLjg0M2wuMTM2LjEzNiIvPjwvZz48L3N2Zz4=) no-repeat;background-position:50%;border:1px solid #c9ccd5;border-radius:50%;box-shadow:0 2px 4px 0 rgba(0,0,0,.08);content:"";cursor:pointer;height:30px;position:absolute;right:0;width:30px}.toastui-editor-contents .task-list-item{border:0;list-style:none;margin-left:-24px;padding-left:24px}.toastui-editor-contents .task-list-item:before{background-position:50%;background-repeat:no-repeat;background-size:18px 18px;background:transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCI+PHJlY3Qgd2lkdGg9IjE3IiBoZWlnaHQ9IjE3IiB4PSIuNSIgeT0iLjUiIHJ4PSIyIiBmaWxsPSIjRkZGIiBzdHJva2U9IiNDQ0MiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);border-radius:2px;content:"";cursor:pointer;height:18px;left:0;margin-left:0;margin-top:0;position:absolute;top:1px;width:18px}.toastui-editor-contents .task-list-item.checked:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCI+PHBhdGggZD0iTTE2IDBhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDJhMiAyIDAgMCAxLTItMlYyYTIgMiAwIDAgMSAyLTJoMTR6bS0xLjc5MyA1LjI5M2ExIDEgMCAwIDAtMS40MTQgMEw3LjUgMTAuNTg1IDUuMjA3IDguMjkzbC0uMDk0LS4wODNhMSAxIDAgMCAwLTEuMzIgMS40OTdsMyAzIC4wOTQuMDgzYTEgMSAwIDAgMCAxLjMyLS4wODNsNi02IC4wODMtLjA5NGExIDEgMCAwIDAtLjA4My0xLjMyeiIgZmlsbD0iIzRCOTZFNiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.toastui-editor-custom-block .toastui-editor-custom-block-editor{background:#f9f7fd;border:1px solid #dbd4ea;color:#452d6b}.toastui-editor-custom-block .toastui-editor-custom-block-view{padding:9px 13px 8px 12px;position:relative}.toastui-editor-custom-block.ProseMirror-selectednode .toastui-editor-custom-block-view{border:1px solid #dbd4ea;border-radius:2px}.toastui-editor-custom-block .toastui-editor-custom-block-view .tool{display:none;position:absolute;right:10px;top:7px}.toastui-editor-custom-block.ProseMirror-selectednode .toastui-editor-custom-block-view .tool{display:block}.toastui-editor-custom-block-view button{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAzMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzAgMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Im0xNS41IDEyLjUgMiAyTDEyIDIwaC0ydi0ybDUuNS01LjV6TTE4IDEwbDIgMi0xLjUgMS41LTItMkwxOCAxMHoiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiM1NTUiLz48L3N2Zz4=) no-repeat;background-position:50%;background-size:30px 30px;border:1px solid #ccc;height:15px;margin-left:8px;padding:3px;vertical-align:middle;width:15px}.toastui-editor-custom-block-view .info{color:#5200d0;font-size:13px;font-weight:700;vertical-align:middle}.toastui-editor-contents .toastui-editor-ww-code-block{position:relative}.toastui-editor-contents .toastui-editor-ww-code-block:after{background:#e5e9ea url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAzMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzAgMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Im0xNS41IDEyLjUgMiAyTDEyIDIwaC0ydi0ybDUuNS01LjV6TTE4IDEwbDIgMi0xLjUgMS41LTItMkwxOCAxMHoiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiM1NTUiLz48L3N2Zz4=) no-repeat;background-position:100%;background-size:30px 30px;border-radius:2px;color:#333;content:attr(data-language);cursor:pointer;display:inline-block;font-size:13px;font-weight:700;height:24px;padding:3px 35px 0 10px;position:absolute;right:10px;top:10px}.toastui-editor-ww-code-block-language{background-color:#fff;border:1px solid #ccc;border-radius:2px;display:inline-block;height:27px;position:fixed;right:35px;width:100px;z-index:30}.toastui-editor-ww-code-block-language input{background-color:transparent;border:none;box-sizing:border-box;height:100%;margin:0;outline:none;padding:0 10px;width:100%}.toastui-editor-contents-placeholder:before{color:grey;content:attr(data-placeholder);line-height:160%;position:absolute}.toastui-editor-md-preview .toastui-editor-contents h1{min-height:28px}.toastui-editor-md-preview .toastui-editor-contents h2{min-height:23px}.toastui-editor-md-preview .toastui-editor-contents blockquote{min-height:20px}.toastui-editor-md-preview .toastui-editor-contents li{min-height:22px}.toastui-editor-pseudo-clipboard{height:0;left:-1000px;opacity:0;position:fixed;top:-1000px;width:0;z-index:-1} \ No newline at end of file diff --git a/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.js b/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.js deleted file mode 100644 index dcd894a..0000000 --- a/src/ttfrog/themes/default/static/viewer/toastui-editor-viewer.min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * @toast-ui/editor - * @version 3.2.2 | Fri Feb 17 2023 - * @author NHN Cloud FE Development Lab - * @license MIT - */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("prosemirror-inputrules"),require("prosemirror-keymap"),require("prosemirror-model"),require("prosemirror-state"),require("prosemirror-view")):"function"==typeof define&&define.amd?define(["prosemirror-inputrules","prosemirror-keymap","prosemirror-model","prosemirror-state","prosemirror-view"],t):"object"==typeof exports?exports.toastui=t(require("prosemirror-inputrules"),require("prosemirror-keymap"),require("prosemirror-model"),require("prosemirror-state"),require("prosemirror-view")):(e.toastui=e.toastui||{},e.toastui.Editor=t(e[void 0],e[void 0],e[void 0],e[void 0],e[void 0]))}(self,(function(e,t,r,n,i){return function(){var o={368:function(e){ -/*! @license DOMPurify 2.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.3/LICENSE */ -e.exports=function(){"use strict";function e(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t1?r-1:0),i=1;i/gm),z=s(/^data-[\-\w.\u00B7-\uFFFF]/),j=s(/^aria-[\-\w]+$/),U=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),_=s(/^(?:\w+script|data):/i),V=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function $(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:Z(),t=function(e){return X(e)};if(t.version="2.3.3",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var r=e.document,n=e.document,i=e.DocumentFragment,o=e.HTMLTemplateElement,s=e.Node,l=e.Element,u=e.NodeFilter,c=e.NamedNodeMap,p=void 0===c?e.NamedNodeMap||e.MozNamedAttrMap:c,k=e.Text,C=e.Comment,K=e.DOMParser,Y=e.trustedTypes,Q=l.prototype,J=N(Q,"cloneNode"),ee=N(Q,"nextSibling"),te=N(Q,"childNodes"),re=N(Q,"parentNode");if("function"==typeof o){var ne=n.createElement("template");ne.content&&ne.content.ownerDocument&&(n=ne.content.ownerDocument)}var ie=W(Y,r),oe=ie&&Ie?ie.createHTML(""):"",ae=n,se=ae.implementation,le=ae.createNodeIterator,ue=ae.createDocumentFragment,ce=ae.getElementsByTagName,pe=r.importNode,fe={};try{fe=T(n).documentMode?n.documentMode:{}}catch(e){}var de={};t.isSupported="function"==typeof re&&se&&void 0!==se.createHTMLDocument&&9!==fe;var he=H,ge=P,me=z,ve=j,ye=_,be=V,we=U,xe=null,ke=L({},[].concat($(D),$(A),$(E),$(M),$(O))),Ce=null,Le=L({},[].concat($(q),$(F),$(B),$(I))),Te=null,Ne=null,De=!0,Ae=!0,Ee=!1,Se=!1,Me=!1,Re=!1,Oe=!1,qe=!1,Fe=!1,Be=!0,Ie=!1,He=!0,Pe=!0,ze=!1,je={},Ue=null,_e=L({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,Ge=L({},["audio","video","img","source","image","track"]),$e=null,Ze=L({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),We="http://www.w3.org/1998/Math/MathML",Xe="http://www.w3.org/2000/svg",Ke="http://www.w3.org/1999/xhtml",Ye=Ke,Qe=!1,Je=void 0,et=["application/xhtml+xml","text/html"],tt="text/html",rt=void 0,nt=null,it=n.createElement("form"),ot=function(e){nt&&nt===e||(e&&"object"===(void 0===e?"undefined":G(e))||(e={}),e=T(e),xe="ALLOWED_TAGS"in e?L({},e.ALLOWED_TAGS):ke,Ce="ALLOWED_ATTR"in e?L({},e.ALLOWED_ATTR):Le,$e="ADD_URI_SAFE_ATTR"in e?L(T(Ze),e.ADD_URI_SAFE_ATTR):Ze,Ve="ADD_DATA_URI_TAGS"in e?L(T(Ge),e.ADD_DATA_URI_TAGS):Ge,Ue="FORBID_CONTENTS"in e?L({},e.FORBID_CONTENTS):_e,Te="FORBID_TAGS"in e?L({},e.FORBID_TAGS):{},Ne="FORBID_ATTR"in e?L({},e.FORBID_ATTR):{},je="USE_PROFILES"in e&&e.USE_PROFILES,De=!1!==e.ALLOW_ARIA_ATTR,Ae=!1!==e.ALLOW_DATA_ATTR,Ee=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Se=e.SAFE_FOR_TEMPLATES||!1,Me=e.WHOLE_DOCUMENT||!1,qe=e.RETURN_DOM||!1,Fe=e.RETURN_DOM_FRAGMENT||!1,Be=!1!==e.RETURN_DOM_IMPORT,Ie=e.RETURN_TRUSTED_TYPE||!1,Oe=e.FORCE_BODY||!1,He=!1!==e.SANITIZE_DOM,Pe=!1!==e.KEEP_CONTENT,ze=e.IN_PLACE||!1,we=e.ALLOWED_URI_REGEXP||we,Ye=e.NAMESPACE||Ke,Je=Je=-1===et.indexOf(e.PARSER_MEDIA_TYPE)?tt:e.PARSER_MEDIA_TYPE,rt="application/xhtml+xml"===Je?function(e){return e}:g,Se&&(Ae=!1),Fe&&(qe=!0),je&&(xe=L({},[].concat($(O))),Ce=[],!0===je.html&&(L(xe,D),L(Ce,q)),!0===je.svg&&(L(xe,A),L(Ce,F),L(Ce,I)),!0===je.svgFilters&&(L(xe,E),L(Ce,F),L(Ce,I)),!0===je.mathMl&&(L(xe,M),L(Ce,B),L(Ce,I))),e.ADD_TAGS&&(xe===ke&&(xe=T(xe)),L(xe,e.ADD_TAGS)),e.ADD_ATTR&&(Ce===Le&&(Ce=T(Ce)),L(Ce,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&L($e,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(Ue===_e&&(Ue=T(Ue)),L(Ue,e.FORBID_CONTENTS)),Pe&&(xe["#text"]=!0),Me&&L(xe,["html","head","body"]),xe.table&&(L(xe,["tbody"]),delete Te.tbody),a&&a(e),nt=e)},at=L({},["mi","mo","mn","ms","mtext"]),st=L({},["foreignobject","desc","title","annotation-xml"]),lt=L({},A);L(lt,E),L(lt,S);var ut=L({},M);L(ut,R);var ct=function(e){var t=re(e);t&&t.tagName||(t={namespaceURI:Ke,tagName:"template"});var r=g(e.tagName),n=g(t.tagName);if(e.namespaceURI===Xe)return t.namespaceURI===Ke?"svg"===r:t.namespaceURI===We?"svg"===r&&("annotation-xml"===n||at[n]):Boolean(lt[r]);if(e.namespaceURI===We)return t.namespaceURI===Ke?"math"===r:t.namespaceURI===Xe?"math"===r&&st[n]:Boolean(ut[r]);if(e.namespaceURI===Ke){if(t.namespaceURI===Xe&&!st[n])return!1;if(t.namespaceURI===We&&!at[n])return!1;var i=L({},["title","style","font","a","script"]);return!ut[r]&&(i[r]||!lt[r])}return!1},pt=function(e){h(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=oe}catch(t){e.remove()}}},ft=function(e,r){try{h(t.removed,{attribute:r.getAttributeNode(e),from:r})}catch(e){h(t.removed,{attribute:null,from:r})}if(r.removeAttribute(e),"is"===e&&!Ce[e])if(qe||Fe)try{pt(r)}catch(e){}else try{r.setAttribute(e,"")}catch(e){}},dt=function(e){var t=void 0,r=void 0;if(Oe)e=""+e;else{var i=m(e,/^[\r\n\t ]+/);r=i&&i[0]}"application/xhtml+xml"===Je&&(e=''+e+"");var o=ie?ie.createHTML(e):e;if(Ye===Ke)try{t=(new K).parseFromString(o,Je)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(Ye,"template",null);try{t.documentElement.innerHTML=Qe?"":o}catch(e){}}var a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Ye===Ke?ce.call(t,Me?"html":"body")[0]:Me?t.documentElement:a},ht=function(e){return le.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)},gt=function(e){return!(e instanceof k||e instanceof C||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof p&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)},mt=function(e){return"object"===(void 0===s?"undefined":G(s))?e instanceof s:e&&"object"===(void 0===e?"undefined":G(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},vt=function(e,r,n){de[e]&&f(de[e],(function(e){e.call(t,r,n,nt)}))},yt=function(e){var r=void 0;if(vt("beforeSanitizeElements",e,null),gt(e))return pt(e),!0;if(m(e.nodeName,/[\u0080-\uFFFF]/))return pt(e),!0;var n=rt(e.nodeName);if(vt("uponSanitizeElement",e,{tagName:n,allowedTags:xe}),!mt(e.firstElementChild)&&(!mt(e.content)||!mt(e.content.firstElementChild))&&w(/<[/\w]/g,e.innerHTML)&&w(/<[/\w]/g,e.textContent))return pt(e),!0;if("select"===n&&w(/