{"version":3,"file":"chatbot-D8RY9bgB.js","sources":["../../src/project/AramcoLife/services/aliaChatService.ts","../../node_modules/showdown/dist/showdown.js","../../src/project/AramcoLife/chatbot/chatbot.service.ts","../../src/project/AramcoLife/chatbot/chatbot.ts"],"sourcesContent":["/* eslint-disable */\r\n//------------------------------------------------------------------------------\r\n// \r\n// This code was generated by a tool.\r\n//\r\n//\r\n// Changes to this file may cause incorrect behavior and will be lost if\r\n// the code is regenerated.\r\n// \r\n//------------------------------------------------------------------------------\r\n\r\nimport { http, type Meta } from \"~/foundation/Api\";\r\nimport { AliaChatQuestion } from \"~/project/AramcoLife/generated-types\";\r\nimport { AliaChatMessage } from \"~/project/AramcoLife/generated-types\";\r\nimport { AliaChatFeedback } from \"~/project/AramcoLife/generated-types\";\r\n\r\nexport const aliaChatServiceMeta: Meta = {\r\n\tchatQuestion: [\"POST\", \"/api/v1/alia/chat\"],\r\n\tfeedbackMessage: [\"POST\", \"/api/v1/alia/feedback\"],\r\n};\r\n\r\n// Project.AramcoLife.Controllers.Api.ApiV1AliaChatController\r\nexport const aliaChatService = {\r\n\tasync chatQuestion(body: AliaChatQuestion) {\r\n\t\treturn await http.fetch(aliaChatServiceMeta.chatQuestion, { body });\r\n\t},\r\n\tasync feedbackMessage(body: AliaChatFeedback) {\r\n\t\treturn await http.fetch(aliaChatServiceMeta.feedbackMessage, { body });\r\n\t},\r\n};\r\n",";/*! showdown v 2.1.0 - 21-04-2022 */\r\n(function(){\r\n/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts (simple) {\n 'use strict';\n\n var defaultOptions = {\n omitExtraWLInCodeBlocks: {\n defaultValue: false,\n describe: 'Omit the default extra whiteline added to code blocks',\n type: 'boolean'\n },\n noHeaderId: {\n defaultValue: false,\n describe: 'Turn on/off generated header id',\n type: 'boolean'\n },\n prefixHeaderId: {\n defaultValue: false,\n describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n type: 'string'\n },\n rawPrefixHeaderId: {\n defaultValue: false,\n describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n type: 'boolean'\n },\n ghCompatibleHeaderId: {\n defaultValue: false,\n describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n type: 'boolean'\n },\n rawHeaderId: {\n defaultValue: false,\n describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n type: 'boolean'\n },\n headerLevelStart: {\n defaultValue: false,\n describe: 'The header blocks level start',\n type: 'integer'\n },\n parseImgDimensions: {\n defaultValue: false,\n describe: 'Turn on/off image dimension parsing',\n type: 'boolean'\n },\n simplifiedAutoLink: {\n defaultValue: false,\n describe: 'Turn on/off GFM autolink style',\n type: 'boolean'\n },\n excludeTrailingPunctuationFromURLs: {\n defaultValue: false,\n describe: 'Excludes trailing punctuation from links generated with autoLinking',\n type: 'boolean'\n },\n literalMidWordUnderscores: {\n defaultValue: false,\n describe: 'Parse midword underscores as literal underscores',\n type: 'boolean'\n },\n literalMidWordAsterisks: {\n defaultValue: false,\n describe: 'Parse midword asterisks as literal asterisks',\n type: 'boolean'\n },\n strikethrough: {\n defaultValue: false,\n describe: 'Turn on/off strikethrough support',\n type: 'boolean'\n },\n tables: {\n defaultValue: false,\n describe: 'Turn on/off tables support',\n type: 'boolean'\n },\n tablesHeaderId: {\n defaultValue: false,\n describe: 'Add an id to table headers',\n type: 'boolean'\n },\n ghCodeBlocks: {\n defaultValue: true,\n describe: 'Turn on/off GFM fenced code blocks support',\n type: 'boolean'\n },\n tasklists: {\n defaultValue: false,\n describe: 'Turn on/off GFM tasklist support',\n type: 'boolean'\n },\n smoothLivePreview: {\n defaultValue: false,\n describe: 'Prevents weird effects in live previews due to incomplete input',\n type: 'boolean'\n },\n smartIndentationFix: {\n defaultValue: false,\n describe: 'Tries to smartly fix indentation in es6 strings',\n type: 'boolean'\n },\n disableForced4SpacesIndentedSublists: {\n defaultValue: false,\n describe: 'Disables the requirement of indenting nested sublists by 4 spaces',\n type: 'boolean'\n },\n simpleLineBreaks: {\n defaultValue: false,\n describe: 'Parses simple line breaks as
(GFM Style)',\n type: 'boolean'\n },\n requireSpaceBeforeHeadingText: {\n defaultValue: false,\n describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n type: 'boolean'\n },\n ghMentions: {\n defaultValue: false,\n describe: 'Enables github @mentions',\n type: 'boolean'\n },\n ghMentionsLink: {\n defaultValue: 'https://github.com/{u}',\n describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n type: 'string'\n },\n encodeEmails: {\n defaultValue: true,\n describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n type: 'boolean'\n },\n openLinksInNewWindow: {\n defaultValue: false,\n describe: 'Open all links in new windows',\n type: 'boolean'\n },\n backslashEscapesHTMLTags: {\n defaultValue: false,\n describe: 'Support for HTML Tag escaping. ex: \\
foo\\
',\n type: 'boolean'\n },\n emoji: {\n defaultValue: false,\n describe: 'Enable emoji support. Ex: `this is a :smile: emoji`',\n type: 'boolean'\n },\n underline: {\n defaultValue: false,\n describe: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``',\n type: 'boolean'\n },\n ellipsis: {\n defaultValue: true,\n describe: 'Replaces three dots with the ellipsis unicode character',\n type: 'boolean'\n },\n completeHTMLDocument: {\n defaultValue: false,\n describe: 'Outputs a complete html document, including ``, `` and `` tags',\n type: 'boolean'\n },\n metadata: {\n defaultValue: false,\n describe: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',\n type: 'boolean'\n },\n splitAdjacentBlockquotes: {\n defaultValue: false,\n describe: 'Split adjacent blockquote blocks',\n type: 'boolean'\n }\n };\n if (simple === false) {\n return JSON.parse(JSON.stringify(defaultOptions));\n }\n var ret = {};\n for (var opt in defaultOptions) {\n if (defaultOptions.hasOwnProperty(opt)) {\n ret[opt] = defaultOptions[opt].defaultValue;\n }\n }\n return ret;\n}\n\nfunction allOptionsOn () {\n 'use strict';\n var options = getDefaultOpts(true),\n ret = {};\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n ret[opt] = true;\n }\n }\n return ret;\n}\n\r\n/**\n * Created by Tivie on 06-01-2015.\n */\n\n// Private properties\nvar showdown = {},\n parsers = {},\n extensions = {},\n globalOptions = getDefaultOpts(true),\n setFlavor = 'vanilla',\n flavor = {\n github: {\n omitExtraWLInCodeBlocks: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n disableForced4SpacesIndentedSublists: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghCompatibleHeaderId: true,\n ghMentions: true,\n backslashEscapesHTMLTags: true,\n emoji: true,\n splitAdjacentBlockquotes: true\n },\n original: {\n noHeaderId: true,\n ghCodeBlocks: false\n },\n ghost: {\n omitExtraWLInCodeBlocks: true,\n parseImgDimensions: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n smoothLivePreview: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghMentions: false,\n encodeEmails: true\n },\n vanilla: getDefaultOpts(true),\n allOn: allOptionsOn()\n };\n\n/**\n * helper namespace\n * @type {{}}\n */\nshowdown.helper = {};\n\n/**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\nshowdown.extensions = {};\n\n/**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\nshowdown.setOption = function (key, value) {\n 'use strict';\n globalOptions[key] = value;\n return this;\n};\n\n/**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\nshowdown.getOption = function (key) {\n 'use strict';\n return globalOptions[key];\n};\n\n/**\n * Get the global options\n * @static\n * @returns {{}}\n */\nshowdown.getOptions = function () {\n 'use strict';\n return globalOptions;\n};\n\n/**\n * Reset global options to the default values\n * @static\n */\nshowdown.resetOptions = function () {\n 'use strict';\n globalOptions = getDefaultOpts(true);\n};\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function (name) {\n 'use strict';\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n showdown.resetOptions();\n var preset = flavor[name];\n setFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n globalOptions[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function () {\n 'use strict';\n return setFlavor;\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function (name) {\n 'use strict';\n if (flavor.hasOwnProperty(name)) {\n return flavor[name];\n }\n};\n\n/**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\nshowdown.getDefaultOptions = function (simple) {\n 'use strict';\n return getDefaultOpts(simple);\n};\n\n/**\n * Get or set a subParser\n *\n * subParser(name) - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\nshowdown.subParser = function (name, func) {\n 'use strict';\n if (showdown.helper.isString(name)) {\n if (typeof func !== 'undefined') {\n parsers[name] = func;\n } else {\n if (parsers.hasOwnProperty(name)) {\n return parsers[name];\n } else {\n throw Error('SubParser named ' + name + ' not registered!');\n }\n }\n }\n};\n\n/**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|object[]|function=} ext\n * @returns {*}\n */\nshowdown.extension = function (name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error('Extension \\'name\\' must be a string');\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!extensions.hasOwnProperty(name)) {\n throw Error('Extension named ' + name + ' is not registered!');\n }\n return extensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExtension = validate(ext, name);\n\n if (validExtension.valid) {\n extensions[name] = ext;\n } else {\n throw Error(validExtension.error);\n }\n }\n};\n\n/**\n * Gets all extensions registered\n * @returns {{}}\n */\nshowdown.getAllExtensions = function () {\n 'use strict';\n return extensions;\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function (name) {\n 'use strict';\n delete extensions[name];\n};\n\n/**\n * Removes all extensions\n */\nshowdown.resetExtensions = function () {\n 'use strict';\n extensions = {};\n};\n\n/**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\nfunction validate (extension, name) {\n 'use strict';\n\n var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n ret = {\n valid: true,\n error: ''\n };\n\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n\n for (var i = 0; i < extension.length; ++i) {\n var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n ext = extension[i];\n if (typeof ext !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n return ret;\n }\n\n if (!showdown.helper.isString(ext.type)) {\n ret.valid = false;\n ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n return ret;\n }\n\n var type = ext.type = ext.type.toLowerCase();\n\n // normalize extension type\n if (type === 'language') {\n type = ext.type = 'lang';\n }\n\n if (type === 'html') {\n type = ext.type = 'output';\n }\n\n if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n ret.valid = false;\n ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n return ret;\n }\n\n if (type === 'listener') {\n if (showdown.helper.isUndefined(ext.listeners)) {\n ret.valid = false;\n ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n return ret;\n }\n } else {\n if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n ret.valid = false;\n ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n return ret;\n }\n }\n\n if (ext.listeners) {\n if (typeof ext.listeners !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n return ret;\n }\n for (var ln in ext.listeners) {\n if (ext.listeners.hasOwnProperty(ln)) {\n if (typeof ext.listeners[ln] !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln +\n ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n return ret;\n }\n }\n }\n }\n\n if (ext.filter) {\n if (typeof ext.filter !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n return ret;\n }\n } else if (ext.regex) {\n if (showdown.helper.isString(ext.regex)) {\n ext.regex = new RegExp(ext.regex, 'g');\n }\n if (!(ext.regex instanceof RegExp)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n return ret;\n }\n if (showdown.helper.isUndefined(ext.replace)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n return ret;\n }\n }\n }\n return ret;\n}\n\n/**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\nshowdown.validateExtension = function (ext) {\n 'use strict';\n\n var validateExtension = validate(ext, null);\n if (!validateExtension.valid) {\n console.warn(validateExtension.error);\n return false;\n }\n return true;\n};\n\r\n/**\n * showdownjs helper functions\n */\n\nif (!showdown.hasOwnProperty('helper')) {\n showdown.helper = {};\n}\n\n/**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isString = function (a) {\n 'use strict';\n return (typeof a === 'string' || a instanceof String);\n};\n\n/**\n * Check if var is a function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isFunction = function (a) {\n 'use strict';\n var getType = {};\n return a && getType.toString.call(a) === '[object Function]';\n};\n\n/**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isArray = function (a) {\n 'use strict';\n return Array.isArray(a);\n};\n\n/**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\nshowdown.helper.isUndefined = function (value) {\n 'use strict';\n return typeof value === 'undefined';\n};\n\n/**\n * ForEach helper function\n * Iterates over Arrays and Objects (own properties only)\n * @static\n * @param {*} obj\n * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object\n */\nshowdown.helper.forEach = function (obj, callback) {\n 'use strict';\n // check if obj is defined\n if (showdown.helper.isUndefined(obj)) {\n throw new Error('obj param is required');\n }\n\n if (showdown.helper.isUndefined(callback)) {\n throw new Error('callback param is required');\n }\n\n if (!showdown.helper.isFunction(callback)) {\n throw new Error('callback param must be a function/closure');\n }\n\n if (typeof obj.forEach === 'function') {\n obj.forEach(callback);\n } else if (showdown.helper.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n callback(obj[i], i, obj);\n }\n } else if (typeof (obj) === 'object') {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n callback(obj[prop], prop, obj);\n }\n }\n } else {\n throw new Error('obj does not seem to be an array or an iterable object');\n }\n};\n\n/**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\nshowdown.helper.stdExtName = function (s) {\n 'use strict';\n return s.replace(/[_?*+\\/\\\\.^-]/g, '').replace(/\\s/g, '').toLowerCase();\n};\n\nfunction escapeCharactersCallback (wholeMatch, m1) {\n 'use strict';\n var charCodeToEscape = m1.charCodeAt(0);\n return '¨E' + charCodeToEscape + 'E';\n}\n\n/**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\nshowdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n\n/**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\nshowdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {\n 'use strict';\n // First we have to escape the escape characters so that\n // we can build a character class out of them\n var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n if (afterBackslash) {\n regexString = '\\\\\\\\' + regexString;\n }\n\n var regex = new RegExp(regexString, 'g');\n text = text.replace(regex, escapeCharactersCallback);\n\n return text;\n};\n\n/**\n * Unescape HTML entities\n * @param txt\n * @returns {string}\n */\nshowdown.helper.unescapeHTMLEntities = function (txt) {\n 'use strict';\n\n return txt\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n};\n\nvar rgxFindMatchPos = function (str, left, right, flags) {\n 'use strict';\n var f = flags || '',\n g = f.indexOf('g') > -1,\n x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n l = new RegExp(left, f.replace(/g/g, '')),\n pos = [],\n t, s, m, start, end;\n\n do {\n t = 0;\n while ((m = x.exec(str))) {\n if (l.test(m[0])) {\n if (!(t++)) {\n s = x.lastIndex;\n start = s - m[0].length;\n }\n } else if (t) {\n if (!--t) {\n end = m.index + m[0].length;\n var obj = {\n left: {start: start, end: s},\n match: {start: s, end: m.index},\n right: {start: m.index, end: end},\n wholeMatch: {start: start, end: end}\n };\n pos.push(obj);\n if (!g) {\n return pos;\n }\n }\n }\n }\n } while (t && (x.lastIndex = s));\n\n return pos;\n};\n\n/**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan \n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<\" and \">\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\">>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<>\", \"\"]\n * matchRecursiveRegExp(\"
test
\", \"]*>\", \"\", \"gi\")\n * returns: [\"test\"]\n */\nshowdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n 'use strict';\n\n var matchPos = rgxFindMatchPos (str, left, right, flags),\n results = [];\n\n for (var i = 0; i < matchPos.length; ++i) {\n results.push([\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n ]);\n }\n return results;\n};\n\n/**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\nshowdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n 'use strict';\n\n if (!showdown.helper.isFunction(replacement)) {\n var repStr = replacement;\n replacement = function () {\n return repStr;\n };\n }\n\n var matchPos = rgxFindMatchPos(str, left, right, flags),\n finalStr = str,\n lng = matchPos.length;\n\n if (lng > 0) {\n var bits = [];\n if (matchPos[0].wholeMatch.start !== 0) {\n bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n }\n for (var i = 0; i < lng; ++i) {\n bits.push(\n replacement(\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n )\n );\n if (i < lng - 1) {\n bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n }\n }\n if (matchPos[lng - 1].wholeMatch.end < str.length) {\n bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n }\n finalStr = bits.join('');\n }\n return finalStr;\n};\n\n/**\n * Returns the index within the passed String object of the first occurrence of the specified regex,\n * starting the search at fromIndex. Returns -1 if the value is not found.\n *\n * @param {string} str string to search\n * @param {RegExp} regex Regular expression to search\n * @param {int} [fromIndex = 0] Index to start the search\n * @returns {Number}\n * @throws InvalidArgumentError\n */\nshowdown.helper.regexIndexOf = function (str, regex, fromIndex) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n if (regex instanceof RegExp === false) {\n throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';\n }\n var indexOf = str.substring(fromIndex || 0).search(regex);\n return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;\n};\n\n/**\n * Splits the passed string object at the defined index, and returns an array composed of the two substrings\n * @param {string} str string to split\n * @param {int} index index to split string at\n * @returns {[string,string]}\n * @throws InvalidArgumentError\n */\nshowdown.helper.splitAtIndex = function (str, index) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n return [str.substring(0, index), str.substring(index)];\n};\n\n/**\n * Obfuscate an e-mail address through the use of Character Entities,\n * transforming ASCII characters into their equivalent decimal or hex entities.\n *\n * Since it has a random component, subsequent calls to this function produce different results\n *\n * @param {string} mail\n * @returns {string}\n */\nshowdown.helper.encodeEmailAddress = function (mail) {\n 'use strict';\n var encode = [\n function (ch) {\n return '&#' + ch.charCodeAt(0) + ';';\n },\n function (ch) {\n return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n },\n function (ch) {\n return ch;\n }\n ];\n\n mail = mail.replace(/./g, function (ch) {\n if (ch === '@') {\n // this *must* be encoded. I insist.\n ch = encode[Math.floor(Math.random() * 2)](ch);\n } else {\n var r = Math.random();\n // roughly 10% raw, 45% hex, 45% dec\n ch = (\n r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)\n );\n }\n return ch;\n });\n\n return mail;\n};\n\n/**\n *\n * @param str\n * @param targetLength\n * @param padString\n * @returns {string}\n */\nshowdown.helper.padEnd = function padEnd (str, targetLength, padString) {\n 'use strict';\n /*jshint bitwise: false*/\n // eslint-disable-next-line space-infix-ops\n targetLength = targetLength>>0; //floor if number or convert non-number to 0;\n /*jshint bitwise: true*/\n padString = String(padString || ' ');\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n }\n return String(str) + padString.slice(0,targetLength);\n }\n};\n\n/**\n * POLYFILLS\n */\n// use this instead of builtin is undefined for IE8 compatibility\nif (typeof (console) === 'undefined') {\n console = {\n warn: function (msg) {\n 'use strict';\n alert(msg);\n },\n log: function (msg) {\n 'use strict';\n alert(msg);\n },\n error: function (msg) {\n 'use strict';\n throw msg;\n }\n };\n}\n\n/**\n * Common regexes.\n * We declare some common regexes to improve performance\n */\nshowdown.helper.regexes = {\n asteriskDashAndColon: /([*_:~])/g\n};\n\n/**\n * EMOJIS LIST\n */\nshowdown.helper.emojis = {\n '+1':'\\ud83d\\udc4d',\n '-1':'\\ud83d\\udc4e',\n '100':'\\ud83d\\udcaf',\n '1234':'\\ud83d\\udd22',\n '1st_place_medal':'\\ud83e\\udd47',\n '2nd_place_medal':'\\ud83e\\udd48',\n '3rd_place_medal':'\\ud83e\\udd49',\n '8ball':'\\ud83c\\udfb1',\n 'a':'\\ud83c\\udd70\\ufe0f',\n 'ab':'\\ud83c\\udd8e',\n 'abc':'\\ud83d\\udd24',\n 'abcd':'\\ud83d\\udd21',\n 'accept':'\\ud83c\\ude51',\n 'aerial_tramway':'\\ud83d\\udea1',\n 'airplane':'\\u2708\\ufe0f',\n 'alarm_clock':'\\u23f0',\n 'alembic':'\\u2697\\ufe0f',\n 'alien':'\\ud83d\\udc7d',\n 'ambulance':'\\ud83d\\ude91',\n 'amphora':'\\ud83c\\udffa',\n 'anchor':'\\u2693\\ufe0f',\n 'angel':'\\ud83d\\udc7c',\n 'anger':'\\ud83d\\udca2',\n 'angry':'\\ud83d\\ude20',\n 'anguished':'\\ud83d\\ude27',\n 'ant':'\\ud83d\\udc1c',\n 'apple':'\\ud83c\\udf4e',\n 'aquarius':'\\u2652\\ufe0f',\n 'aries':'\\u2648\\ufe0f',\n 'arrow_backward':'\\u25c0\\ufe0f',\n 'arrow_double_down':'\\u23ec',\n 'arrow_double_up':'\\u23eb',\n 'arrow_down':'\\u2b07\\ufe0f',\n 'arrow_down_small':'\\ud83d\\udd3d',\n 'arrow_forward':'\\u25b6\\ufe0f',\n 'arrow_heading_down':'\\u2935\\ufe0f',\n 'arrow_heading_up':'\\u2934\\ufe0f',\n 'arrow_left':'\\u2b05\\ufe0f',\n 'arrow_lower_left':'\\u2199\\ufe0f',\n 'arrow_lower_right':'\\u2198\\ufe0f',\n 'arrow_right':'\\u27a1\\ufe0f',\n 'arrow_right_hook':'\\u21aa\\ufe0f',\n 'arrow_up':'\\u2b06\\ufe0f',\n 'arrow_up_down':'\\u2195\\ufe0f',\n 'arrow_up_small':'\\ud83d\\udd3c',\n 'arrow_upper_left':'\\u2196\\ufe0f',\n 'arrow_upper_right':'\\u2197\\ufe0f',\n 'arrows_clockwise':'\\ud83d\\udd03',\n 'arrows_counterclockwise':'\\ud83d\\udd04',\n 'art':'\\ud83c\\udfa8',\n 'articulated_lorry':'\\ud83d\\ude9b',\n 'artificial_satellite':'\\ud83d\\udef0',\n 'astonished':'\\ud83d\\ude32',\n 'athletic_shoe':'\\ud83d\\udc5f',\n 'atm':'\\ud83c\\udfe7',\n 'atom_symbol':'\\u269b\\ufe0f',\n 'avocado':'\\ud83e\\udd51',\n 'b':'\\ud83c\\udd71\\ufe0f',\n 'baby':'\\ud83d\\udc76',\n 'baby_bottle':'\\ud83c\\udf7c',\n 'baby_chick':'\\ud83d\\udc24',\n 'baby_symbol':'\\ud83d\\udebc',\n 'back':'\\ud83d\\udd19',\n 'bacon':'\\ud83e\\udd53',\n 'badminton':'\\ud83c\\udff8',\n 'baggage_claim':'\\ud83d\\udec4',\n 'baguette_bread':'\\ud83e\\udd56',\n 'balance_scale':'\\u2696\\ufe0f',\n 'balloon':'\\ud83c\\udf88',\n 'ballot_box':'\\ud83d\\uddf3',\n 'ballot_box_with_check':'\\u2611\\ufe0f',\n 'bamboo':'\\ud83c\\udf8d',\n 'banana':'\\ud83c\\udf4c',\n 'bangbang':'\\u203c\\ufe0f',\n 'bank':'\\ud83c\\udfe6',\n 'bar_chart':'\\ud83d\\udcca',\n 'barber':'\\ud83d\\udc88',\n 'baseball':'\\u26be\\ufe0f',\n 'basketball':'\\ud83c\\udfc0',\n 'basketball_man':'\\u26f9\\ufe0f',\n 'basketball_woman':'\\u26f9\\ufe0f‍\\u2640\\ufe0f',\n 'bat':'\\ud83e\\udd87',\n 'bath':'\\ud83d\\udec0',\n 'bathtub':'\\ud83d\\udec1',\n 'battery':'\\ud83d\\udd0b',\n 'beach_umbrella':'\\ud83c\\udfd6',\n 'bear':'\\ud83d\\udc3b',\n 'bed':'\\ud83d\\udecf',\n 'bee':'\\ud83d\\udc1d',\n 'beer':'\\ud83c\\udf7a',\n 'beers':'\\ud83c\\udf7b',\n 'beetle':'\\ud83d\\udc1e',\n 'beginner':'\\ud83d\\udd30',\n 'bell':'\\ud83d\\udd14',\n 'bellhop_bell':'\\ud83d\\udece',\n 'bento':'\\ud83c\\udf71',\n 'biking_man':'\\ud83d\\udeb4',\n 'bike':'\\ud83d\\udeb2',\n 'biking_woman':'\\ud83d\\udeb4‍\\u2640\\ufe0f',\n 'bikini':'\\ud83d\\udc59',\n 'biohazard':'\\u2623\\ufe0f',\n 'bird':'\\ud83d\\udc26',\n 'birthday':'\\ud83c\\udf82',\n 'black_circle':'\\u26ab\\ufe0f',\n 'black_flag':'\\ud83c\\udff4',\n 'black_heart':'\\ud83d\\udda4',\n 'black_joker':'\\ud83c\\udccf',\n 'black_large_square':'\\u2b1b\\ufe0f',\n 'black_medium_small_square':'\\u25fe\\ufe0f',\n 'black_medium_square':'\\u25fc\\ufe0f',\n 'black_nib':'\\u2712\\ufe0f',\n 'black_small_square':'\\u25aa\\ufe0f',\n 'black_square_button':'\\ud83d\\udd32',\n 'blonde_man':'\\ud83d\\udc71',\n 'blonde_woman':'\\ud83d\\udc71‍\\u2640\\ufe0f',\n 'blossom':'\\ud83c\\udf3c',\n 'blowfish':'\\ud83d\\udc21',\n 'blue_book':'\\ud83d\\udcd8',\n 'blue_car':'\\ud83d\\ude99',\n 'blue_heart':'\\ud83d\\udc99',\n 'blush':'\\ud83d\\ude0a',\n 'boar':'\\ud83d\\udc17',\n 'boat':'\\u26f5\\ufe0f',\n 'bomb':'\\ud83d\\udca3',\n 'book':'\\ud83d\\udcd6',\n 'bookmark':'\\ud83d\\udd16',\n 'bookmark_tabs':'\\ud83d\\udcd1',\n 'books':'\\ud83d\\udcda',\n 'boom':'\\ud83d\\udca5',\n 'boot':'\\ud83d\\udc62',\n 'bouquet':'\\ud83d\\udc90',\n 'bowing_man':'\\ud83d\\ude47',\n 'bow_and_arrow':'\\ud83c\\udff9',\n 'bowing_woman':'\\ud83d\\ude47‍\\u2640\\ufe0f',\n 'bowling':'\\ud83c\\udfb3',\n 'boxing_glove':'\\ud83e\\udd4a',\n 'boy':'\\ud83d\\udc66',\n 'bread':'\\ud83c\\udf5e',\n 'bride_with_veil':'\\ud83d\\udc70',\n 'bridge_at_night':'\\ud83c\\udf09',\n 'briefcase':'\\ud83d\\udcbc',\n 'broken_heart':'\\ud83d\\udc94',\n 'bug':'\\ud83d\\udc1b',\n 'building_construction':'\\ud83c\\udfd7',\n 'bulb':'\\ud83d\\udca1',\n 'bullettrain_front':'\\ud83d\\ude85',\n 'bullettrain_side':'\\ud83d\\ude84',\n 'burrito':'\\ud83c\\udf2f',\n 'bus':'\\ud83d\\ude8c',\n 'business_suit_levitating':'\\ud83d\\udd74',\n 'busstop':'\\ud83d\\ude8f',\n 'bust_in_silhouette':'\\ud83d\\udc64',\n 'busts_in_silhouette':'\\ud83d\\udc65',\n 'butterfly':'\\ud83e\\udd8b',\n 'cactus':'\\ud83c\\udf35',\n 'cake':'\\ud83c\\udf70',\n 'calendar':'\\ud83d\\udcc6',\n 'call_me_hand':'\\ud83e\\udd19',\n 'calling':'\\ud83d\\udcf2',\n 'camel':'\\ud83d\\udc2b',\n 'camera':'\\ud83d\\udcf7',\n 'camera_flash':'\\ud83d\\udcf8',\n 'camping':'\\ud83c\\udfd5',\n 'cancer':'\\u264b\\ufe0f',\n 'candle':'\\ud83d\\udd6f',\n 'candy':'\\ud83c\\udf6c',\n 'canoe':'\\ud83d\\udef6',\n 'capital_abcd':'\\ud83d\\udd20',\n 'capricorn':'\\u2651\\ufe0f',\n 'car':'\\ud83d\\ude97',\n 'card_file_box':'\\ud83d\\uddc3',\n 'card_index':'\\ud83d\\udcc7',\n 'card_index_dividers':'\\ud83d\\uddc2',\n 'carousel_horse':'\\ud83c\\udfa0',\n 'carrot':'\\ud83e\\udd55',\n 'cat':'\\ud83d\\udc31',\n 'cat2':'\\ud83d\\udc08',\n 'cd':'\\ud83d\\udcbf',\n 'chains':'\\u26d3',\n 'champagne':'\\ud83c\\udf7e',\n 'chart':'\\ud83d\\udcb9',\n 'chart_with_downwards_trend':'\\ud83d\\udcc9',\n 'chart_with_upwards_trend':'\\ud83d\\udcc8',\n 'checkered_flag':'\\ud83c\\udfc1',\n 'cheese':'\\ud83e\\uddc0',\n 'cherries':'\\ud83c\\udf52',\n 'cherry_blossom':'\\ud83c\\udf38',\n 'chestnut':'\\ud83c\\udf30',\n 'chicken':'\\ud83d\\udc14',\n 'children_crossing':'\\ud83d\\udeb8',\n 'chipmunk':'\\ud83d\\udc3f',\n 'chocolate_bar':'\\ud83c\\udf6b',\n 'christmas_tree':'\\ud83c\\udf84',\n 'church':'\\u26ea\\ufe0f',\n 'cinema':'\\ud83c\\udfa6',\n 'circus_tent':'\\ud83c\\udfaa',\n 'city_sunrise':'\\ud83c\\udf07',\n 'city_sunset':'\\ud83c\\udf06',\n 'cityscape':'\\ud83c\\udfd9',\n 'cl':'\\ud83c\\udd91',\n 'clamp':'\\ud83d\\udddc',\n 'clap':'\\ud83d\\udc4f',\n 'clapper':'\\ud83c\\udfac',\n 'classical_building':'\\ud83c\\udfdb',\n 'clinking_glasses':'\\ud83e\\udd42',\n 'clipboard':'\\ud83d\\udccb',\n 'clock1':'\\ud83d\\udd50',\n 'clock10':'\\ud83d\\udd59',\n 'clock1030':'\\ud83d\\udd65',\n 'clock11':'\\ud83d\\udd5a',\n 'clock1130':'\\ud83d\\udd66',\n 'clock12':'\\ud83d\\udd5b',\n 'clock1230':'\\ud83d\\udd67',\n 'clock130':'\\ud83d\\udd5c',\n 'clock2':'\\ud83d\\udd51',\n 'clock230':'\\ud83d\\udd5d',\n 'clock3':'\\ud83d\\udd52',\n 'clock330':'\\ud83d\\udd5e',\n 'clock4':'\\ud83d\\udd53',\n 'clock430':'\\ud83d\\udd5f',\n 'clock5':'\\ud83d\\udd54',\n 'clock530':'\\ud83d\\udd60',\n 'clock6':'\\ud83d\\udd55',\n 'clock630':'\\ud83d\\udd61',\n 'clock7':'\\ud83d\\udd56',\n 'clock730':'\\ud83d\\udd62',\n 'clock8':'\\ud83d\\udd57',\n 'clock830':'\\ud83d\\udd63',\n 'clock9':'\\ud83d\\udd58',\n 'clock930':'\\ud83d\\udd64',\n 'closed_book':'\\ud83d\\udcd5',\n 'closed_lock_with_key':'\\ud83d\\udd10',\n 'closed_umbrella':'\\ud83c\\udf02',\n 'cloud':'\\u2601\\ufe0f',\n 'cloud_with_lightning':'\\ud83c\\udf29',\n 'cloud_with_lightning_and_rain':'\\u26c8',\n 'cloud_with_rain':'\\ud83c\\udf27',\n 'cloud_with_snow':'\\ud83c\\udf28',\n 'clown_face':'\\ud83e\\udd21',\n 'clubs':'\\u2663\\ufe0f',\n 'cocktail':'\\ud83c\\udf78',\n 'coffee':'\\u2615\\ufe0f',\n 'coffin':'\\u26b0\\ufe0f',\n 'cold_sweat':'\\ud83d\\ude30',\n 'comet':'\\u2604\\ufe0f',\n 'computer':'\\ud83d\\udcbb',\n 'computer_mouse':'\\ud83d\\uddb1',\n 'confetti_ball':'\\ud83c\\udf8a',\n 'confounded':'\\ud83d\\ude16',\n 'confused':'\\ud83d\\ude15',\n 'congratulations':'\\u3297\\ufe0f',\n 'construction':'\\ud83d\\udea7',\n 'construction_worker_man':'\\ud83d\\udc77',\n 'construction_worker_woman':'\\ud83d\\udc77‍\\u2640\\ufe0f',\n 'control_knobs':'\\ud83c\\udf9b',\n 'convenience_store':'\\ud83c\\udfea',\n 'cookie':'\\ud83c\\udf6a',\n 'cool':'\\ud83c\\udd92',\n 'policeman':'\\ud83d\\udc6e',\n 'copyright':'\\u00a9\\ufe0f',\n 'corn':'\\ud83c\\udf3d',\n 'couch_and_lamp':'\\ud83d\\udecb',\n 'couple':'\\ud83d\\udc6b',\n 'couple_with_heart_woman_man':'\\ud83d\\udc91',\n 'couple_with_heart_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc68',\n 'couple_with_heart_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc69',\n 'couplekiss_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc68',\n 'couplekiss_man_woman':'\\ud83d\\udc8f',\n 'couplekiss_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc69',\n 'cow':'\\ud83d\\udc2e',\n 'cow2':'\\ud83d\\udc04',\n 'cowboy_hat_face':'\\ud83e\\udd20',\n 'crab':'\\ud83e\\udd80',\n 'crayon':'\\ud83d\\udd8d',\n 'credit_card':'\\ud83d\\udcb3',\n 'crescent_moon':'\\ud83c\\udf19',\n 'cricket':'\\ud83c\\udfcf',\n 'crocodile':'\\ud83d\\udc0a',\n 'croissant':'\\ud83e\\udd50',\n 'crossed_fingers':'\\ud83e\\udd1e',\n 'crossed_flags':'\\ud83c\\udf8c',\n 'crossed_swords':'\\u2694\\ufe0f',\n 'crown':'\\ud83d\\udc51',\n 'cry':'\\ud83d\\ude22',\n 'crying_cat_face':'\\ud83d\\ude3f',\n 'crystal_ball':'\\ud83d\\udd2e',\n 'cucumber':'\\ud83e\\udd52',\n 'cupid':'\\ud83d\\udc98',\n 'curly_loop':'\\u27b0',\n 'currency_exchange':'\\ud83d\\udcb1',\n 'curry':'\\ud83c\\udf5b',\n 'custard':'\\ud83c\\udf6e',\n 'customs':'\\ud83d\\udec3',\n 'cyclone':'\\ud83c\\udf00',\n 'dagger':'\\ud83d\\udde1',\n 'dancer':'\\ud83d\\udc83',\n 'dancing_women':'\\ud83d\\udc6f',\n 'dancing_men':'\\ud83d\\udc6f‍\\u2642\\ufe0f',\n 'dango':'\\ud83c\\udf61',\n 'dark_sunglasses':'\\ud83d\\udd76',\n 'dart':'\\ud83c\\udfaf',\n 'dash':'\\ud83d\\udca8',\n 'date':'\\ud83d\\udcc5',\n 'deciduous_tree':'\\ud83c\\udf33',\n 'deer':'\\ud83e\\udd8c',\n 'department_store':'\\ud83c\\udfec',\n 'derelict_house':'\\ud83c\\udfda',\n 'desert':'\\ud83c\\udfdc',\n 'desert_island':'\\ud83c\\udfdd',\n 'desktop_computer':'\\ud83d\\udda5',\n 'male_detective':'\\ud83d\\udd75\\ufe0f',\n 'diamond_shape_with_a_dot_inside':'\\ud83d\\udca0',\n 'diamonds':'\\u2666\\ufe0f',\n 'disappointed':'\\ud83d\\ude1e',\n 'disappointed_relieved':'\\ud83d\\ude25',\n 'dizzy':'\\ud83d\\udcab',\n 'dizzy_face':'\\ud83d\\ude35',\n 'do_not_litter':'\\ud83d\\udeaf',\n 'dog':'\\ud83d\\udc36',\n 'dog2':'\\ud83d\\udc15',\n 'dollar':'\\ud83d\\udcb5',\n 'dolls':'\\ud83c\\udf8e',\n 'dolphin':'\\ud83d\\udc2c',\n 'door':'\\ud83d\\udeaa',\n 'doughnut':'\\ud83c\\udf69',\n 'dove':'\\ud83d\\udd4a',\n 'dragon':'\\ud83d\\udc09',\n 'dragon_face':'\\ud83d\\udc32',\n 'dress':'\\ud83d\\udc57',\n 'dromedary_camel':'\\ud83d\\udc2a',\n 'drooling_face':'\\ud83e\\udd24',\n 'droplet':'\\ud83d\\udca7',\n 'drum':'\\ud83e\\udd41',\n 'duck':'\\ud83e\\udd86',\n 'dvd':'\\ud83d\\udcc0',\n 'e-mail':'\\ud83d\\udce7',\n 'eagle':'\\ud83e\\udd85',\n 'ear':'\\ud83d\\udc42',\n 'ear_of_rice':'\\ud83c\\udf3e',\n 'earth_africa':'\\ud83c\\udf0d',\n 'earth_americas':'\\ud83c\\udf0e',\n 'earth_asia':'\\ud83c\\udf0f',\n 'egg':'\\ud83e\\udd5a',\n 'eggplant':'\\ud83c\\udf46',\n 'eight_pointed_black_star':'\\u2734\\ufe0f',\n 'eight_spoked_asterisk':'\\u2733\\ufe0f',\n 'electric_plug':'\\ud83d\\udd0c',\n 'elephant':'\\ud83d\\udc18',\n 'email':'\\u2709\\ufe0f',\n 'end':'\\ud83d\\udd1a',\n 'envelope_with_arrow':'\\ud83d\\udce9',\n 'euro':'\\ud83d\\udcb6',\n 'european_castle':'\\ud83c\\udff0',\n 'european_post_office':'\\ud83c\\udfe4',\n 'evergreen_tree':'\\ud83c\\udf32',\n 'exclamation':'\\u2757\\ufe0f',\n 'expressionless':'\\ud83d\\ude11',\n 'eye':'\\ud83d\\udc41',\n 'eye_speech_bubble':'\\ud83d\\udc41‍\\ud83d\\udde8',\n 'eyeglasses':'\\ud83d\\udc53',\n 'eyes':'\\ud83d\\udc40',\n 'face_with_head_bandage':'\\ud83e\\udd15',\n 'face_with_thermometer':'\\ud83e\\udd12',\n 'fist_oncoming':'\\ud83d\\udc4a',\n 'factory':'\\ud83c\\udfed',\n 'fallen_leaf':'\\ud83c\\udf42',\n 'family_man_woman_boy':'\\ud83d\\udc6a',\n 'family_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_woman_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_woman_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_man_woman_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_woman_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'fast_forward':'\\u23e9',\n 'fax':'\\ud83d\\udce0',\n 'fearful':'\\ud83d\\ude28',\n 'feet':'\\ud83d\\udc3e',\n 'female_detective':'\\ud83d\\udd75\\ufe0f‍\\u2640\\ufe0f',\n 'ferris_wheel':'\\ud83c\\udfa1',\n 'ferry':'\\u26f4',\n 'field_hockey':'\\ud83c\\udfd1',\n 'file_cabinet':'\\ud83d\\uddc4',\n 'file_folder':'\\ud83d\\udcc1',\n 'film_projector':'\\ud83d\\udcfd',\n 'film_strip':'\\ud83c\\udf9e',\n 'fire':'\\ud83d\\udd25',\n 'fire_engine':'\\ud83d\\ude92',\n 'fireworks':'\\ud83c\\udf86',\n 'first_quarter_moon':'\\ud83c\\udf13',\n 'first_quarter_moon_with_face':'\\ud83c\\udf1b',\n 'fish':'\\ud83d\\udc1f',\n 'fish_cake':'\\ud83c\\udf65',\n 'fishing_pole_and_fish':'\\ud83c\\udfa3',\n 'fist_raised':'\\u270a',\n 'fist_left':'\\ud83e\\udd1b',\n 'fist_right':'\\ud83e\\udd1c',\n 'flags':'\\ud83c\\udf8f',\n 'flashlight':'\\ud83d\\udd26',\n 'fleur_de_lis':'\\u269c\\ufe0f',\n 'flight_arrival':'\\ud83d\\udeec',\n 'flight_departure':'\\ud83d\\udeeb',\n 'floppy_disk':'\\ud83d\\udcbe',\n 'flower_playing_cards':'\\ud83c\\udfb4',\n 'flushed':'\\ud83d\\ude33',\n 'fog':'\\ud83c\\udf2b',\n 'foggy':'\\ud83c\\udf01',\n 'football':'\\ud83c\\udfc8',\n 'footprints':'\\ud83d\\udc63',\n 'fork_and_knife':'\\ud83c\\udf74',\n 'fountain':'\\u26f2\\ufe0f',\n 'fountain_pen':'\\ud83d\\udd8b',\n 'four_leaf_clover':'\\ud83c\\udf40',\n 'fox_face':'\\ud83e\\udd8a',\n 'framed_picture':'\\ud83d\\uddbc',\n 'free':'\\ud83c\\udd93',\n 'fried_egg':'\\ud83c\\udf73',\n 'fried_shrimp':'\\ud83c\\udf64',\n 'fries':'\\ud83c\\udf5f',\n 'frog':'\\ud83d\\udc38',\n 'frowning':'\\ud83d\\ude26',\n 'frowning_face':'\\u2639\\ufe0f',\n 'frowning_man':'\\ud83d\\ude4d‍\\u2642\\ufe0f',\n 'frowning_woman':'\\ud83d\\ude4d',\n 'middle_finger':'\\ud83d\\udd95',\n 'fuelpump':'\\u26fd\\ufe0f',\n 'full_moon':'\\ud83c\\udf15',\n 'full_moon_with_face':'\\ud83c\\udf1d',\n 'funeral_urn':'\\u26b1\\ufe0f',\n 'game_die':'\\ud83c\\udfb2',\n 'gear':'\\u2699\\ufe0f',\n 'gem':'\\ud83d\\udc8e',\n 'gemini':'\\u264a\\ufe0f',\n 'ghost':'\\ud83d\\udc7b',\n 'gift':'\\ud83c\\udf81',\n 'gift_heart':'\\ud83d\\udc9d',\n 'girl':'\\ud83d\\udc67',\n 'globe_with_meridians':'\\ud83c\\udf10',\n 'goal_net':'\\ud83e\\udd45',\n 'goat':'\\ud83d\\udc10',\n 'golf':'\\u26f3\\ufe0f',\n 'golfing_man':'\\ud83c\\udfcc\\ufe0f',\n 'golfing_woman':'\\ud83c\\udfcc\\ufe0f‍\\u2640\\ufe0f',\n 'gorilla':'\\ud83e\\udd8d',\n 'grapes':'\\ud83c\\udf47',\n 'green_apple':'\\ud83c\\udf4f',\n 'green_book':'\\ud83d\\udcd7',\n 'green_heart':'\\ud83d\\udc9a',\n 'green_salad':'\\ud83e\\udd57',\n 'grey_exclamation':'\\u2755',\n 'grey_question':'\\u2754',\n 'grimacing':'\\ud83d\\ude2c',\n 'grin':'\\ud83d\\ude01',\n 'grinning':'\\ud83d\\ude00',\n 'guardsman':'\\ud83d\\udc82',\n 'guardswoman':'\\ud83d\\udc82‍\\u2640\\ufe0f',\n 'guitar':'\\ud83c\\udfb8',\n 'gun':'\\ud83d\\udd2b',\n 'haircut_woman':'\\ud83d\\udc87',\n 'haircut_man':'\\ud83d\\udc87‍\\u2642\\ufe0f',\n 'hamburger':'\\ud83c\\udf54',\n 'hammer':'\\ud83d\\udd28',\n 'hammer_and_pick':'\\u2692',\n 'hammer_and_wrench':'\\ud83d\\udee0',\n 'hamster':'\\ud83d\\udc39',\n 'hand':'\\u270b',\n 'handbag':'\\ud83d\\udc5c',\n 'handshake':'\\ud83e\\udd1d',\n 'hankey':'\\ud83d\\udca9',\n 'hatched_chick':'\\ud83d\\udc25',\n 'hatching_chick':'\\ud83d\\udc23',\n 'headphones':'\\ud83c\\udfa7',\n 'hear_no_evil':'\\ud83d\\ude49',\n 'heart':'\\u2764\\ufe0f',\n 'heart_decoration':'\\ud83d\\udc9f',\n 'heart_eyes':'\\ud83d\\ude0d',\n 'heart_eyes_cat':'\\ud83d\\ude3b',\n 'heartbeat':'\\ud83d\\udc93',\n 'heartpulse':'\\ud83d\\udc97',\n 'hearts':'\\u2665\\ufe0f',\n 'heavy_check_mark':'\\u2714\\ufe0f',\n 'heavy_division_sign':'\\u2797',\n 'heavy_dollar_sign':'\\ud83d\\udcb2',\n 'heavy_heart_exclamation':'\\u2763\\ufe0f',\n 'heavy_minus_sign':'\\u2796',\n 'heavy_multiplication_x':'\\u2716\\ufe0f',\n 'heavy_plus_sign':'\\u2795',\n 'helicopter':'\\ud83d\\ude81',\n 'herb':'\\ud83c\\udf3f',\n 'hibiscus':'\\ud83c\\udf3a',\n 'high_brightness':'\\ud83d\\udd06',\n 'high_heel':'\\ud83d\\udc60',\n 'hocho':'\\ud83d\\udd2a',\n 'hole':'\\ud83d\\udd73',\n 'honey_pot':'\\ud83c\\udf6f',\n 'horse':'\\ud83d\\udc34',\n 'horse_racing':'\\ud83c\\udfc7',\n 'hospital':'\\ud83c\\udfe5',\n 'hot_pepper':'\\ud83c\\udf36',\n 'hotdog':'\\ud83c\\udf2d',\n 'hotel':'\\ud83c\\udfe8',\n 'hotsprings':'\\u2668\\ufe0f',\n 'hourglass':'\\u231b\\ufe0f',\n 'hourglass_flowing_sand':'\\u23f3',\n 'house':'\\ud83c\\udfe0',\n 'house_with_garden':'\\ud83c\\udfe1',\n 'houses':'\\ud83c\\udfd8',\n 'hugs':'\\ud83e\\udd17',\n 'hushed':'\\ud83d\\ude2f',\n 'ice_cream':'\\ud83c\\udf68',\n 'ice_hockey':'\\ud83c\\udfd2',\n 'ice_skate':'\\u26f8',\n 'icecream':'\\ud83c\\udf66',\n 'id':'\\ud83c\\udd94',\n 'ideograph_advantage':'\\ud83c\\ude50',\n 'imp':'\\ud83d\\udc7f',\n 'inbox_tray':'\\ud83d\\udce5',\n 'incoming_envelope':'\\ud83d\\udce8',\n 'tipping_hand_woman':'\\ud83d\\udc81',\n 'information_source':'\\u2139\\ufe0f',\n 'innocent':'\\ud83d\\ude07',\n 'interrobang':'\\u2049\\ufe0f',\n 'iphone':'\\ud83d\\udcf1',\n 'izakaya_lantern':'\\ud83c\\udfee',\n 'jack_o_lantern':'\\ud83c\\udf83',\n 'japan':'\\ud83d\\uddfe',\n 'japanese_castle':'\\ud83c\\udfef',\n 'japanese_goblin':'\\ud83d\\udc7a',\n 'japanese_ogre':'\\ud83d\\udc79',\n 'jeans':'\\ud83d\\udc56',\n 'joy':'\\ud83d\\ude02',\n 'joy_cat':'\\ud83d\\ude39',\n 'joystick':'\\ud83d\\udd79',\n 'kaaba':'\\ud83d\\udd4b',\n 'key':'\\ud83d\\udd11',\n 'keyboard':'\\u2328\\ufe0f',\n 'keycap_ten':'\\ud83d\\udd1f',\n 'kick_scooter':'\\ud83d\\udef4',\n 'kimono':'\\ud83d\\udc58',\n 'kiss':'\\ud83d\\udc8b',\n 'kissing':'\\ud83d\\ude17',\n 'kissing_cat':'\\ud83d\\ude3d',\n 'kissing_closed_eyes':'\\ud83d\\ude1a',\n 'kissing_heart':'\\ud83d\\ude18',\n 'kissing_smiling_eyes':'\\ud83d\\ude19',\n 'kiwi_fruit':'\\ud83e\\udd5d',\n 'koala':'\\ud83d\\udc28',\n 'koko':'\\ud83c\\ude01',\n 'label':'\\ud83c\\udff7',\n 'large_blue_circle':'\\ud83d\\udd35',\n 'large_blue_diamond':'\\ud83d\\udd37',\n 'large_orange_diamond':'\\ud83d\\udd36',\n 'last_quarter_moon':'\\ud83c\\udf17',\n 'last_quarter_moon_with_face':'\\ud83c\\udf1c',\n 'latin_cross':'\\u271d\\ufe0f',\n 'laughing':'\\ud83d\\ude06',\n 'leaves':'\\ud83c\\udf43',\n 'ledger':'\\ud83d\\udcd2',\n 'left_luggage':'\\ud83d\\udec5',\n 'left_right_arrow':'\\u2194\\ufe0f',\n 'leftwards_arrow_with_hook':'\\u21a9\\ufe0f',\n 'lemon':'\\ud83c\\udf4b',\n 'leo':'\\u264c\\ufe0f',\n 'leopard':'\\ud83d\\udc06',\n 'level_slider':'\\ud83c\\udf9a',\n 'libra':'\\u264e\\ufe0f',\n 'light_rail':'\\ud83d\\ude88',\n 'link':'\\ud83d\\udd17',\n 'lion':'\\ud83e\\udd81',\n 'lips':'\\ud83d\\udc44',\n 'lipstick':'\\ud83d\\udc84',\n 'lizard':'\\ud83e\\udd8e',\n 'lock':'\\ud83d\\udd12',\n 'lock_with_ink_pen':'\\ud83d\\udd0f',\n 'lollipop':'\\ud83c\\udf6d',\n 'loop':'\\u27bf',\n 'loud_sound':'\\ud83d\\udd0a',\n 'loudspeaker':'\\ud83d\\udce2',\n 'love_hotel':'\\ud83c\\udfe9',\n 'love_letter':'\\ud83d\\udc8c',\n 'low_brightness':'\\ud83d\\udd05',\n 'lying_face':'\\ud83e\\udd25',\n 'm':'\\u24c2\\ufe0f',\n 'mag':'\\ud83d\\udd0d',\n 'mag_right':'\\ud83d\\udd0e',\n 'mahjong':'\\ud83c\\udc04\\ufe0f',\n 'mailbox':'\\ud83d\\udceb',\n 'mailbox_closed':'\\ud83d\\udcea',\n 'mailbox_with_mail':'\\ud83d\\udcec',\n 'mailbox_with_no_mail':'\\ud83d\\udced',\n 'man':'\\ud83d\\udc68',\n 'man_artist':'\\ud83d\\udc68‍\\ud83c\\udfa8',\n 'man_astronaut':'\\ud83d\\udc68‍\\ud83d\\ude80',\n 'man_cartwheeling':'\\ud83e\\udd38‍\\u2642\\ufe0f',\n 'man_cook':'\\ud83d\\udc68‍\\ud83c\\udf73',\n 'man_dancing':'\\ud83d\\udd7a',\n 'man_facepalming':'\\ud83e\\udd26‍\\u2642\\ufe0f',\n 'man_factory_worker':'\\ud83d\\udc68‍\\ud83c\\udfed',\n 'man_farmer':'\\ud83d\\udc68‍\\ud83c\\udf3e',\n 'man_firefighter':'\\ud83d\\udc68‍\\ud83d\\ude92',\n 'man_health_worker':'\\ud83d\\udc68‍\\u2695\\ufe0f',\n 'man_in_tuxedo':'\\ud83e\\udd35',\n 'man_judge':'\\ud83d\\udc68‍\\u2696\\ufe0f',\n 'man_juggling':'\\ud83e\\udd39‍\\u2642\\ufe0f',\n 'man_mechanic':'\\ud83d\\udc68‍\\ud83d\\udd27',\n 'man_office_worker':'\\ud83d\\udc68‍\\ud83d\\udcbc',\n 'man_pilot':'\\ud83d\\udc68‍\\u2708\\ufe0f',\n 'man_playing_handball':'\\ud83e\\udd3e‍\\u2642\\ufe0f',\n 'man_playing_water_polo':'\\ud83e\\udd3d‍\\u2642\\ufe0f',\n 'man_scientist':'\\ud83d\\udc68‍\\ud83d\\udd2c',\n 'man_shrugging':'\\ud83e\\udd37‍\\u2642\\ufe0f',\n 'man_singer':'\\ud83d\\udc68‍\\ud83c\\udfa4',\n 'man_student':'\\ud83d\\udc68‍\\ud83c\\udf93',\n 'man_teacher':'\\ud83d\\udc68‍\\ud83c\\udfeb',\n 'man_technologist':'\\ud83d\\udc68‍\\ud83d\\udcbb',\n 'man_with_gua_pi_mao':'\\ud83d\\udc72',\n 'man_with_turban':'\\ud83d\\udc73',\n 'tangerine':'\\ud83c\\udf4a',\n 'mans_shoe':'\\ud83d\\udc5e',\n 'mantelpiece_clock':'\\ud83d\\udd70',\n 'maple_leaf':'\\ud83c\\udf41',\n 'martial_arts_uniform':'\\ud83e\\udd4b',\n 'mask':'\\ud83d\\ude37',\n 'massage_woman':'\\ud83d\\udc86',\n 'massage_man':'\\ud83d\\udc86‍\\u2642\\ufe0f',\n 'meat_on_bone':'\\ud83c\\udf56',\n 'medal_military':'\\ud83c\\udf96',\n 'medal_sports':'\\ud83c\\udfc5',\n 'mega':'\\ud83d\\udce3',\n 'melon':'\\ud83c\\udf48',\n 'memo':'\\ud83d\\udcdd',\n 'men_wrestling':'\\ud83e\\udd3c‍\\u2642\\ufe0f',\n 'menorah':'\\ud83d\\udd4e',\n 'mens':'\\ud83d\\udeb9',\n 'metal':'\\ud83e\\udd18',\n 'metro':'\\ud83d\\ude87',\n 'microphone':'\\ud83c\\udfa4',\n 'microscope':'\\ud83d\\udd2c',\n 'milk_glass':'\\ud83e\\udd5b',\n 'milky_way':'\\ud83c\\udf0c',\n 'minibus':'\\ud83d\\ude90',\n 'minidisc':'\\ud83d\\udcbd',\n 'mobile_phone_off':'\\ud83d\\udcf4',\n 'money_mouth_face':'\\ud83e\\udd11',\n 'money_with_wings':'\\ud83d\\udcb8',\n 'moneybag':'\\ud83d\\udcb0',\n 'monkey':'\\ud83d\\udc12',\n 'monkey_face':'\\ud83d\\udc35',\n 'monorail':'\\ud83d\\ude9d',\n 'moon':'\\ud83c\\udf14',\n 'mortar_board':'\\ud83c\\udf93',\n 'mosque':'\\ud83d\\udd4c',\n 'motor_boat':'\\ud83d\\udee5',\n 'motor_scooter':'\\ud83d\\udef5',\n 'motorcycle':'\\ud83c\\udfcd',\n 'motorway':'\\ud83d\\udee3',\n 'mount_fuji':'\\ud83d\\uddfb',\n 'mountain':'\\u26f0',\n 'mountain_biking_man':'\\ud83d\\udeb5',\n 'mountain_biking_woman':'\\ud83d\\udeb5‍\\u2640\\ufe0f',\n 'mountain_cableway':'\\ud83d\\udea0',\n 'mountain_railway':'\\ud83d\\ude9e',\n 'mountain_snow':'\\ud83c\\udfd4',\n 'mouse':'\\ud83d\\udc2d',\n 'mouse2':'\\ud83d\\udc01',\n 'movie_camera':'\\ud83c\\udfa5',\n 'moyai':'\\ud83d\\uddff',\n 'mrs_claus':'\\ud83e\\udd36',\n 'muscle':'\\ud83d\\udcaa',\n 'mushroom':'\\ud83c\\udf44',\n 'musical_keyboard':'\\ud83c\\udfb9',\n 'musical_note':'\\ud83c\\udfb5',\n 'musical_score':'\\ud83c\\udfbc',\n 'mute':'\\ud83d\\udd07',\n 'nail_care':'\\ud83d\\udc85',\n 'name_badge':'\\ud83d\\udcdb',\n 'national_park':'\\ud83c\\udfde',\n 'nauseated_face':'\\ud83e\\udd22',\n 'necktie':'\\ud83d\\udc54',\n 'negative_squared_cross_mark':'\\u274e',\n 'nerd_face':'\\ud83e\\udd13',\n 'neutral_face':'\\ud83d\\ude10',\n 'new':'\\ud83c\\udd95',\n 'new_moon':'\\ud83c\\udf11',\n 'new_moon_with_face':'\\ud83c\\udf1a',\n 'newspaper':'\\ud83d\\udcf0',\n 'newspaper_roll':'\\ud83d\\uddde',\n 'next_track_button':'\\u23ed',\n 'ng':'\\ud83c\\udd96',\n 'no_good_man':'\\ud83d\\ude45‍\\u2642\\ufe0f',\n 'no_good_woman':'\\ud83d\\ude45',\n 'night_with_stars':'\\ud83c\\udf03',\n 'no_bell':'\\ud83d\\udd15',\n 'no_bicycles':'\\ud83d\\udeb3',\n 'no_entry':'\\u26d4\\ufe0f',\n 'no_entry_sign':'\\ud83d\\udeab',\n 'no_mobile_phones':'\\ud83d\\udcf5',\n 'no_mouth':'\\ud83d\\ude36',\n 'no_pedestrians':'\\ud83d\\udeb7',\n 'no_smoking':'\\ud83d\\udead',\n 'non-potable_water':'\\ud83d\\udeb1',\n 'nose':'\\ud83d\\udc43',\n 'notebook':'\\ud83d\\udcd3',\n 'notebook_with_decorative_cover':'\\ud83d\\udcd4',\n 'notes':'\\ud83c\\udfb6',\n 'nut_and_bolt':'\\ud83d\\udd29',\n 'o':'\\u2b55\\ufe0f',\n 'o2':'\\ud83c\\udd7e\\ufe0f',\n 'ocean':'\\ud83c\\udf0a',\n 'octopus':'\\ud83d\\udc19',\n 'oden':'\\ud83c\\udf62',\n 'office':'\\ud83c\\udfe2',\n 'oil_drum':'\\ud83d\\udee2',\n 'ok':'\\ud83c\\udd97',\n 'ok_hand':'\\ud83d\\udc4c',\n 'ok_man':'\\ud83d\\ude46‍\\u2642\\ufe0f',\n 'ok_woman':'\\ud83d\\ude46',\n 'old_key':'\\ud83d\\udddd',\n 'older_man':'\\ud83d\\udc74',\n 'older_woman':'\\ud83d\\udc75',\n 'om':'\\ud83d\\udd49',\n 'on':'\\ud83d\\udd1b',\n 'oncoming_automobile':'\\ud83d\\ude98',\n 'oncoming_bus':'\\ud83d\\ude8d',\n 'oncoming_police_car':'\\ud83d\\ude94',\n 'oncoming_taxi':'\\ud83d\\ude96',\n 'open_file_folder':'\\ud83d\\udcc2',\n 'open_hands':'\\ud83d\\udc50',\n 'open_mouth':'\\ud83d\\ude2e',\n 'open_umbrella':'\\u2602\\ufe0f',\n 'ophiuchus':'\\u26ce',\n 'orange_book':'\\ud83d\\udcd9',\n 'orthodox_cross':'\\u2626\\ufe0f',\n 'outbox_tray':'\\ud83d\\udce4',\n 'owl':'\\ud83e\\udd89',\n 'ox':'\\ud83d\\udc02',\n 'package':'\\ud83d\\udce6',\n 'page_facing_up':'\\ud83d\\udcc4',\n 'page_with_curl':'\\ud83d\\udcc3',\n 'pager':'\\ud83d\\udcdf',\n 'paintbrush':'\\ud83d\\udd8c',\n 'palm_tree':'\\ud83c\\udf34',\n 'pancakes':'\\ud83e\\udd5e',\n 'panda_face':'\\ud83d\\udc3c',\n 'paperclip':'\\ud83d\\udcce',\n 'paperclips':'\\ud83d\\udd87',\n 'parasol_on_ground':'\\u26f1',\n 'parking':'\\ud83c\\udd7f\\ufe0f',\n 'part_alternation_mark':'\\u303d\\ufe0f',\n 'partly_sunny':'\\u26c5\\ufe0f',\n 'passenger_ship':'\\ud83d\\udef3',\n 'passport_control':'\\ud83d\\udec2',\n 'pause_button':'\\u23f8',\n 'peace_symbol':'\\u262e\\ufe0f',\n 'peach':'\\ud83c\\udf51',\n 'peanuts':'\\ud83e\\udd5c',\n 'pear':'\\ud83c\\udf50',\n 'pen':'\\ud83d\\udd8a',\n 'pencil2':'\\u270f\\ufe0f',\n 'penguin':'\\ud83d\\udc27',\n 'pensive':'\\ud83d\\ude14',\n 'performing_arts':'\\ud83c\\udfad',\n 'persevere':'\\ud83d\\ude23',\n 'person_fencing':'\\ud83e\\udd3a',\n 'pouting_woman':'\\ud83d\\ude4e',\n 'phone':'\\u260e\\ufe0f',\n 'pick':'\\u26cf',\n 'pig':'\\ud83d\\udc37',\n 'pig2':'\\ud83d\\udc16',\n 'pig_nose':'\\ud83d\\udc3d',\n 'pill':'\\ud83d\\udc8a',\n 'pineapple':'\\ud83c\\udf4d',\n 'ping_pong':'\\ud83c\\udfd3',\n 'pisces':'\\u2653\\ufe0f',\n 'pizza':'\\ud83c\\udf55',\n 'place_of_worship':'\\ud83d\\uded0',\n 'plate_with_cutlery':'\\ud83c\\udf7d',\n 'play_or_pause_button':'\\u23ef',\n 'point_down':'\\ud83d\\udc47',\n 'point_left':'\\ud83d\\udc48',\n 'point_right':'\\ud83d\\udc49',\n 'point_up':'\\u261d\\ufe0f',\n 'point_up_2':'\\ud83d\\udc46',\n 'police_car':'\\ud83d\\ude93',\n 'policewoman':'\\ud83d\\udc6e‍\\u2640\\ufe0f',\n 'poodle':'\\ud83d\\udc29',\n 'popcorn':'\\ud83c\\udf7f',\n 'post_office':'\\ud83c\\udfe3',\n 'postal_horn':'\\ud83d\\udcef',\n 'postbox':'\\ud83d\\udcee',\n 'potable_water':'\\ud83d\\udeb0',\n 'potato':'\\ud83e\\udd54',\n 'pouch':'\\ud83d\\udc5d',\n 'poultry_leg':'\\ud83c\\udf57',\n 'pound':'\\ud83d\\udcb7',\n 'rage':'\\ud83d\\ude21',\n 'pouting_cat':'\\ud83d\\ude3e',\n 'pouting_man':'\\ud83d\\ude4e‍\\u2642\\ufe0f',\n 'pray':'\\ud83d\\ude4f',\n 'prayer_beads':'\\ud83d\\udcff',\n 'pregnant_woman':'\\ud83e\\udd30',\n 'previous_track_button':'\\u23ee',\n 'prince':'\\ud83e\\udd34',\n 'princess':'\\ud83d\\udc78',\n 'printer':'\\ud83d\\udda8',\n 'purple_heart':'\\ud83d\\udc9c',\n 'purse':'\\ud83d\\udc5b',\n 'pushpin':'\\ud83d\\udccc',\n 'put_litter_in_its_place':'\\ud83d\\udeae',\n 'question':'\\u2753',\n 'rabbit':'\\ud83d\\udc30',\n 'rabbit2':'\\ud83d\\udc07',\n 'racehorse':'\\ud83d\\udc0e',\n 'racing_car':'\\ud83c\\udfce',\n 'radio':'\\ud83d\\udcfb',\n 'radio_button':'\\ud83d\\udd18',\n 'radioactive':'\\u2622\\ufe0f',\n 'railway_car':'\\ud83d\\ude83',\n 'railway_track':'\\ud83d\\udee4',\n 'rainbow':'\\ud83c\\udf08',\n 'rainbow_flag':'\\ud83c\\udff3\\ufe0f‍\\ud83c\\udf08',\n 'raised_back_of_hand':'\\ud83e\\udd1a',\n 'raised_hand_with_fingers_splayed':'\\ud83d\\udd90',\n 'raised_hands':'\\ud83d\\ude4c',\n 'raising_hand_woman':'\\ud83d\\ude4b',\n 'raising_hand_man':'\\ud83d\\ude4b‍\\u2642\\ufe0f',\n 'ram':'\\ud83d\\udc0f',\n 'ramen':'\\ud83c\\udf5c',\n 'rat':'\\ud83d\\udc00',\n 'record_button':'\\u23fa',\n 'recycle':'\\u267b\\ufe0f',\n 'red_circle':'\\ud83d\\udd34',\n 'registered':'\\u00ae\\ufe0f',\n 'relaxed':'\\u263a\\ufe0f',\n 'relieved':'\\ud83d\\ude0c',\n 'reminder_ribbon':'\\ud83c\\udf97',\n 'repeat':'\\ud83d\\udd01',\n 'repeat_one':'\\ud83d\\udd02',\n 'rescue_worker_helmet':'\\u26d1',\n 'restroom':'\\ud83d\\udebb',\n 'revolving_hearts':'\\ud83d\\udc9e',\n 'rewind':'\\u23ea',\n 'rhinoceros':'\\ud83e\\udd8f',\n 'ribbon':'\\ud83c\\udf80',\n 'rice':'\\ud83c\\udf5a',\n 'rice_ball':'\\ud83c\\udf59',\n 'rice_cracker':'\\ud83c\\udf58',\n 'rice_scene':'\\ud83c\\udf91',\n 'right_anger_bubble':'\\ud83d\\uddef',\n 'ring':'\\ud83d\\udc8d',\n 'robot':'\\ud83e\\udd16',\n 'rocket':'\\ud83d\\ude80',\n 'rofl':'\\ud83e\\udd23',\n 'roll_eyes':'\\ud83d\\ude44',\n 'roller_coaster':'\\ud83c\\udfa2',\n 'rooster':'\\ud83d\\udc13',\n 'rose':'\\ud83c\\udf39',\n 'rosette':'\\ud83c\\udff5',\n 'rotating_light':'\\ud83d\\udea8',\n 'round_pushpin':'\\ud83d\\udccd',\n 'rowing_man':'\\ud83d\\udea3',\n 'rowing_woman':'\\ud83d\\udea3‍\\u2640\\ufe0f',\n 'rugby_football':'\\ud83c\\udfc9',\n 'running_man':'\\ud83c\\udfc3',\n 'running_shirt_with_sash':'\\ud83c\\udfbd',\n 'running_woman':'\\ud83c\\udfc3‍\\u2640\\ufe0f',\n 'sa':'\\ud83c\\ude02\\ufe0f',\n 'sagittarius':'\\u2650\\ufe0f',\n 'sake':'\\ud83c\\udf76',\n 'sandal':'\\ud83d\\udc61',\n 'santa':'\\ud83c\\udf85',\n 'satellite':'\\ud83d\\udce1',\n 'saxophone':'\\ud83c\\udfb7',\n 'school':'\\ud83c\\udfeb',\n 'school_satchel':'\\ud83c\\udf92',\n 'scissors':'\\u2702\\ufe0f',\n 'scorpion':'\\ud83e\\udd82',\n 'scorpius':'\\u264f\\ufe0f',\n 'scream':'\\ud83d\\ude31',\n 'scream_cat':'\\ud83d\\ude40',\n 'scroll':'\\ud83d\\udcdc',\n 'seat':'\\ud83d\\udcba',\n 'secret':'\\u3299\\ufe0f',\n 'see_no_evil':'\\ud83d\\ude48',\n 'seedling':'\\ud83c\\udf31',\n 'selfie':'\\ud83e\\udd33',\n 'shallow_pan_of_food':'\\ud83e\\udd58',\n 'shamrock':'\\u2618\\ufe0f',\n 'shark':'\\ud83e\\udd88',\n 'shaved_ice':'\\ud83c\\udf67',\n 'sheep':'\\ud83d\\udc11',\n 'shell':'\\ud83d\\udc1a',\n 'shield':'\\ud83d\\udee1',\n 'shinto_shrine':'\\u26e9',\n 'ship':'\\ud83d\\udea2',\n 'shirt':'\\ud83d\\udc55',\n 'shopping':'\\ud83d\\udecd',\n 'shopping_cart':'\\ud83d\\uded2',\n 'shower':'\\ud83d\\udebf',\n 'shrimp':'\\ud83e\\udd90',\n 'signal_strength':'\\ud83d\\udcf6',\n 'six_pointed_star':'\\ud83d\\udd2f',\n 'ski':'\\ud83c\\udfbf',\n 'skier':'\\u26f7',\n 'skull':'\\ud83d\\udc80',\n 'skull_and_crossbones':'\\u2620\\ufe0f',\n 'sleeping':'\\ud83d\\ude34',\n 'sleeping_bed':'\\ud83d\\udecc',\n 'sleepy':'\\ud83d\\ude2a',\n 'slightly_frowning_face':'\\ud83d\\ude41',\n 'slightly_smiling_face':'\\ud83d\\ude42',\n 'slot_machine':'\\ud83c\\udfb0',\n 'small_airplane':'\\ud83d\\udee9',\n 'small_blue_diamond':'\\ud83d\\udd39',\n 'small_orange_diamond':'\\ud83d\\udd38',\n 'small_red_triangle':'\\ud83d\\udd3a',\n 'small_red_triangle_down':'\\ud83d\\udd3b',\n 'smile':'\\ud83d\\ude04',\n 'smile_cat':'\\ud83d\\ude38',\n 'smiley':'\\ud83d\\ude03',\n 'smiley_cat':'\\ud83d\\ude3a',\n 'smiling_imp':'\\ud83d\\ude08',\n 'smirk':'\\ud83d\\ude0f',\n 'smirk_cat':'\\ud83d\\ude3c',\n 'smoking':'\\ud83d\\udeac',\n 'snail':'\\ud83d\\udc0c',\n 'snake':'\\ud83d\\udc0d',\n 'sneezing_face':'\\ud83e\\udd27',\n 'snowboarder':'\\ud83c\\udfc2',\n 'snowflake':'\\u2744\\ufe0f',\n 'snowman':'\\u26c4\\ufe0f',\n 'snowman_with_snow':'\\u2603\\ufe0f',\n 'sob':'\\ud83d\\ude2d',\n 'soccer':'\\u26bd\\ufe0f',\n 'soon':'\\ud83d\\udd1c',\n 'sos':'\\ud83c\\udd98',\n 'sound':'\\ud83d\\udd09',\n 'space_invader':'\\ud83d\\udc7e',\n 'spades':'\\u2660\\ufe0f',\n 'spaghetti':'\\ud83c\\udf5d',\n 'sparkle':'\\u2747\\ufe0f',\n 'sparkler':'\\ud83c\\udf87',\n 'sparkles':'\\u2728',\n 'sparkling_heart':'\\ud83d\\udc96',\n 'speak_no_evil':'\\ud83d\\ude4a',\n 'speaker':'\\ud83d\\udd08',\n 'speaking_head':'\\ud83d\\udde3',\n 'speech_balloon':'\\ud83d\\udcac',\n 'speedboat':'\\ud83d\\udea4',\n 'spider':'\\ud83d\\udd77',\n 'spider_web':'\\ud83d\\udd78',\n 'spiral_calendar':'\\ud83d\\uddd3',\n 'spiral_notepad':'\\ud83d\\uddd2',\n 'spoon':'\\ud83e\\udd44',\n 'squid':'\\ud83e\\udd91',\n 'stadium':'\\ud83c\\udfdf',\n 'star':'\\u2b50\\ufe0f',\n 'star2':'\\ud83c\\udf1f',\n 'star_and_crescent':'\\u262a\\ufe0f',\n 'star_of_david':'\\u2721\\ufe0f',\n 'stars':'\\ud83c\\udf20',\n 'station':'\\ud83d\\ude89',\n 'statue_of_liberty':'\\ud83d\\uddfd',\n 'steam_locomotive':'\\ud83d\\ude82',\n 'stew':'\\ud83c\\udf72',\n 'stop_button':'\\u23f9',\n 'stop_sign':'\\ud83d\\uded1',\n 'stopwatch':'\\u23f1',\n 'straight_ruler':'\\ud83d\\udccf',\n 'strawberry':'\\ud83c\\udf53',\n 'stuck_out_tongue':'\\ud83d\\ude1b',\n 'stuck_out_tongue_closed_eyes':'\\ud83d\\ude1d',\n 'stuck_out_tongue_winking_eye':'\\ud83d\\ude1c',\n 'studio_microphone':'\\ud83c\\udf99',\n 'stuffed_flatbread':'\\ud83e\\udd59',\n 'sun_behind_large_cloud':'\\ud83c\\udf25',\n 'sun_behind_rain_cloud':'\\ud83c\\udf26',\n 'sun_behind_small_cloud':'\\ud83c\\udf24',\n 'sun_with_face':'\\ud83c\\udf1e',\n 'sunflower':'\\ud83c\\udf3b',\n 'sunglasses':'\\ud83d\\ude0e',\n 'sunny':'\\u2600\\ufe0f',\n 'sunrise':'\\ud83c\\udf05',\n 'sunrise_over_mountains':'\\ud83c\\udf04',\n 'surfing_man':'\\ud83c\\udfc4',\n 'surfing_woman':'\\ud83c\\udfc4‍\\u2640\\ufe0f',\n 'sushi':'\\ud83c\\udf63',\n 'suspension_railway':'\\ud83d\\ude9f',\n 'sweat':'\\ud83d\\ude13',\n 'sweat_drops':'\\ud83d\\udca6',\n 'sweat_smile':'\\ud83d\\ude05',\n 'sweet_potato':'\\ud83c\\udf60',\n 'swimming_man':'\\ud83c\\udfca',\n 'swimming_woman':'\\ud83c\\udfca‍\\u2640\\ufe0f',\n 'symbols':'\\ud83d\\udd23',\n 'synagogue':'\\ud83d\\udd4d',\n 'syringe':'\\ud83d\\udc89',\n 'taco':'\\ud83c\\udf2e',\n 'tada':'\\ud83c\\udf89',\n 'tanabata_tree':'\\ud83c\\udf8b',\n 'taurus':'\\u2649\\ufe0f',\n 'taxi':'\\ud83d\\ude95',\n 'tea':'\\ud83c\\udf75',\n 'telephone_receiver':'\\ud83d\\udcde',\n 'telescope':'\\ud83d\\udd2d',\n 'tennis':'\\ud83c\\udfbe',\n 'tent':'\\u26fa\\ufe0f',\n 'thermometer':'\\ud83c\\udf21',\n 'thinking':'\\ud83e\\udd14',\n 'thought_balloon':'\\ud83d\\udcad',\n 'ticket':'\\ud83c\\udfab',\n 'tickets':'\\ud83c\\udf9f',\n 'tiger':'\\ud83d\\udc2f',\n 'tiger2':'\\ud83d\\udc05',\n 'timer_clock':'\\u23f2',\n 'tipping_hand_man':'\\ud83d\\udc81‍\\u2642\\ufe0f',\n 'tired_face':'\\ud83d\\ude2b',\n 'tm':'\\u2122\\ufe0f',\n 'toilet':'\\ud83d\\udebd',\n 'tokyo_tower':'\\ud83d\\uddfc',\n 'tomato':'\\ud83c\\udf45',\n 'tongue':'\\ud83d\\udc45',\n 'top':'\\ud83d\\udd1d',\n 'tophat':'\\ud83c\\udfa9',\n 'tornado':'\\ud83c\\udf2a',\n 'trackball':'\\ud83d\\uddb2',\n 'tractor':'\\ud83d\\ude9c',\n 'traffic_light':'\\ud83d\\udea5',\n 'train':'\\ud83d\\ude8b',\n 'train2':'\\ud83d\\ude86',\n 'tram':'\\ud83d\\ude8a',\n 'triangular_flag_on_post':'\\ud83d\\udea9',\n 'triangular_ruler':'\\ud83d\\udcd0',\n 'trident':'\\ud83d\\udd31',\n 'triumph':'\\ud83d\\ude24',\n 'trolleybus':'\\ud83d\\ude8e',\n 'trophy':'\\ud83c\\udfc6',\n 'tropical_drink':'\\ud83c\\udf79',\n 'tropical_fish':'\\ud83d\\udc20',\n 'truck':'\\ud83d\\ude9a',\n 'trumpet':'\\ud83c\\udfba',\n 'tulip':'\\ud83c\\udf37',\n 'tumbler_glass':'\\ud83e\\udd43',\n 'turkey':'\\ud83e\\udd83',\n 'turtle':'\\ud83d\\udc22',\n 'tv':'\\ud83d\\udcfa',\n 'twisted_rightwards_arrows':'\\ud83d\\udd00',\n 'two_hearts':'\\ud83d\\udc95',\n 'two_men_holding_hands':'\\ud83d\\udc6c',\n 'two_women_holding_hands':'\\ud83d\\udc6d',\n 'u5272':'\\ud83c\\ude39',\n 'u5408':'\\ud83c\\ude34',\n 'u55b6':'\\ud83c\\ude3a',\n 'u6307':'\\ud83c\\ude2f\\ufe0f',\n 'u6708':'\\ud83c\\ude37\\ufe0f',\n 'u6709':'\\ud83c\\ude36',\n 'u6e80':'\\ud83c\\ude35',\n 'u7121':'\\ud83c\\ude1a\\ufe0f',\n 'u7533':'\\ud83c\\ude38',\n 'u7981':'\\ud83c\\ude32',\n 'u7a7a':'\\ud83c\\ude33',\n 'umbrella':'\\u2614\\ufe0f',\n 'unamused':'\\ud83d\\ude12',\n 'underage':'\\ud83d\\udd1e',\n 'unicorn':'\\ud83e\\udd84',\n 'unlock':'\\ud83d\\udd13',\n 'up':'\\ud83c\\udd99',\n 'upside_down_face':'\\ud83d\\ude43',\n 'v':'\\u270c\\ufe0f',\n 'vertical_traffic_light':'\\ud83d\\udea6',\n 'vhs':'\\ud83d\\udcfc',\n 'vibration_mode':'\\ud83d\\udcf3',\n 'video_camera':'\\ud83d\\udcf9',\n 'video_game':'\\ud83c\\udfae',\n 'violin':'\\ud83c\\udfbb',\n 'virgo':'\\u264d\\ufe0f',\n 'volcano':'\\ud83c\\udf0b',\n 'volleyball':'\\ud83c\\udfd0',\n 'vs':'\\ud83c\\udd9a',\n 'vulcan_salute':'\\ud83d\\udd96',\n 'walking_man':'\\ud83d\\udeb6',\n 'walking_woman':'\\ud83d\\udeb6‍\\u2640\\ufe0f',\n 'waning_crescent_moon':'\\ud83c\\udf18',\n 'waning_gibbous_moon':'\\ud83c\\udf16',\n 'warning':'\\u26a0\\ufe0f',\n 'wastebasket':'\\ud83d\\uddd1',\n 'watch':'\\u231a\\ufe0f',\n 'water_buffalo':'\\ud83d\\udc03',\n 'watermelon':'\\ud83c\\udf49',\n 'wave':'\\ud83d\\udc4b',\n 'wavy_dash':'\\u3030\\ufe0f',\n 'waxing_crescent_moon':'\\ud83c\\udf12',\n 'wc':'\\ud83d\\udebe',\n 'weary':'\\ud83d\\ude29',\n 'wedding':'\\ud83d\\udc92',\n 'weight_lifting_man':'\\ud83c\\udfcb\\ufe0f',\n 'weight_lifting_woman':'\\ud83c\\udfcb\\ufe0f‍\\u2640\\ufe0f',\n 'whale':'\\ud83d\\udc33',\n 'whale2':'\\ud83d\\udc0b',\n 'wheel_of_dharma':'\\u2638\\ufe0f',\n 'wheelchair':'\\u267f\\ufe0f',\n 'white_check_mark':'\\u2705',\n 'white_circle':'\\u26aa\\ufe0f',\n 'white_flag':'\\ud83c\\udff3\\ufe0f',\n 'white_flower':'\\ud83d\\udcae',\n 'white_large_square':'\\u2b1c\\ufe0f',\n 'white_medium_small_square':'\\u25fd\\ufe0f',\n 'white_medium_square':'\\u25fb\\ufe0f',\n 'white_small_square':'\\u25ab\\ufe0f',\n 'white_square_button':'\\ud83d\\udd33',\n 'wilted_flower':'\\ud83e\\udd40',\n 'wind_chime':'\\ud83c\\udf90',\n 'wind_face':'\\ud83c\\udf2c',\n 'wine_glass':'\\ud83c\\udf77',\n 'wink':'\\ud83d\\ude09',\n 'wolf':'\\ud83d\\udc3a',\n 'woman':'\\ud83d\\udc69',\n 'woman_artist':'\\ud83d\\udc69‍\\ud83c\\udfa8',\n 'woman_astronaut':'\\ud83d\\udc69‍\\ud83d\\ude80',\n 'woman_cartwheeling':'\\ud83e\\udd38‍\\u2640\\ufe0f',\n 'woman_cook':'\\ud83d\\udc69‍\\ud83c\\udf73',\n 'woman_facepalming':'\\ud83e\\udd26‍\\u2640\\ufe0f',\n 'woman_factory_worker':'\\ud83d\\udc69‍\\ud83c\\udfed',\n 'woman_farmer':'\\ud83d\\udc69‍\\ud83c\\udf3e',\n 'woman_firefighter':'\\ud83d\\udc69‍\\ud83d\\ude92',\n 'woman_health_worker':'\\ud83d\\udc69‍\\u2695\\ufe0f',\n 'woman_judge':'\\ud83d\\udc69‍\\u2696\\ufe0f',\n 'woman_juggling':'\\ud83e\\udd39‍\\u2640\\ufe0f',\n 'woman_mechanic':'\\ud83d\\udc69‍\\ud83d\\udd27',\n 'woman_office_worker':'\\ud83d\\udc69‍\\ud83d\\udcbc',\n 'woman_pilot':'\\ud83d\\udc69‍\\u2708\\ufe0f',\n 'woman_playing_handball':'\\ud83e\\udd3e‍\\u2640\\ufe0f',\n 'woman_playing_water_polo':'\\ud83e\\udd3d‍\\u2640\\ufe0f',\n 'woman_scientist':'\\ud83d\\udc69‍\\ud83d\\udd2c',\n 'woman_shrugging':'\\ud83e\\udd37‍\\u2640\\ufe0f',\n 'woman_singer':'\\ud83d\\udc69‍\\ud83c\\udfa4',\n 'woman_student':'\\ud83d\\udc69‍\\ud83c\\udf93',\n 'woman_teacher':'\\ud83d\\udc69‍\\ud83c\\udfeb',\n 'woman_technologist':'\\ud83d\\udc69‍\\ud83d\\udcbb',\n 'woman_with_turban':'\\ud83d\\udc73‍\\u2640\\ufe0f',\n 'womans_clothes':'\\ud83d\\udc5a',\n 'womans_hat':'\\ud83d\\udc52',\n 'women_wrestling':'\\ud83e\\udd3c‍\\u2640\\ufe0f',\n 'womens':'\\ud83d\\udeba',\n 'world_map':'\\ud83d\\uddfa',\n 'worried':'\\ud83d\\ude1f',\n 'wrench':'\\ud83d\\udd27',\n 'writing_hand':'\\u270d\\ufe0f',\n 'x':'\\u274c',\n 'yellow_heart':'\\ud83d\\udc9b',\n 'yen':'\\ud83d\\udcb4',\n 'yin_yang':'\\u262f\\ufe0f',\n 'yum':'\\ud83d\\ude0b',\n 'zap':'\\u26a1\\ufe0f',\n 'zipper_mouth_face':'\\ud83e\\udd10',\n 'zzz':'\\ud83d\\udca4',\n\n /* special emojis :P */\n 'octocat': '\":octocat:\"',\n 'showdown': 'S'\n};\n\r\n/**\n * Created by Estevao on 31-05-2015.\n */\n\n/**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\nshowdown.Converter = function (converterOptions) {\n 'use strict';\n\n var\n /**\n * Options used by this converter\n * @private\n * @type {{}}\n */\n options = {},\n\n /**\n * Language extensions used by this converter\n * @private\n * @type {Array}\n */\n langExtensions = [],\n\n /**\n * Output modifiers extensions used by this converter\n * @private\n * @type {Array}\n */\n outputModifiers = [],\n\n /**\n * Event listeners\n * @private\n * @type {{}}\n */\n listeners = {},\n\n /**\n * The flavor set in this converter\n */\n setConvFlavor = setFlavor,\n\n /**\n * Metadata of the document\n * @type {{parsed: {}, raw: string, format: string}}\n */\n metadata = {\n parsed: {},\n raw: '',\n format: ''\n };\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor () {\n converterOptions = converterOptions || {};\n\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n } else {\n throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +\n ' was passed instead.');\n }\n\n if (options.extensions) {\n showdown.helper.forEach(options.extensions, _parseExtension);\n }\n }\n\n /**\n * Parse extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseExtension (ext, name) {\n\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n ext = showdown.helper.stdExtName(ext);\n name = ext;\n\n // LEGACY_SUPPORT CODE\n if (showdown.extensions[ext]) {\n console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +\n 'Please inform the developer that the extension should be updated!');\n legacyExtensionLoading(showdown.extensions[ext], ext);\n return;\n // END LEGACY SUPPORT CODE\n\n } else if (!showdown.helper.isUndefined(extensions[ext])) {\n ext = extensions[ext];\n\n } else {\n throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExt = validate(ext, name);\n if (!validExt.valid) {\n throw Error(validExt.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n }\n if (ext[i].hasOwnProperty('listeners')) {\n for (var ln in ext[i].listeners) {\n if (ext[i].listeners.hasOwnProperty(ln)) {\n listen(ln, ext[i].listeners[ln]);\n }\n }\n }\n }\n\n }\n\n /**\n * LEGACY_SUPPORT\n * @param {*} ext\n * @param {string} name\n */\n function legacyExtensionLoading (ext, name) {\n if (typeof ext === 'function') {\n ext = ext(new showdown.Converter());\n }\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n var valid = validate(ext, name);\n\n if (!valid.valid) {\n throw Error(valid.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n default:// should never reach here\n throw Error('Extension loader error: Type unrecognized!!!');\n }\n }\n }\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n */\n function listen (name, callback) {\n if (!showdown.helper.isString(name)) {\n throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n }\n\n if (typeof callback !== 'function') {\n throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n }\n\n if (!listeners.hasOwnProperty(name)) {\n listeners[name] = [];\n }\n listeners[name].push(callback);\n }\n\n function rTrimInputText (text) {\n var rsp = text.match(/^\\s*/)[0].length,\n rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n return text.replace(rgx, '');\n }\n\n /**\n * Dispatch an event\n * @private\n * @param {string} evtName Event name\n * @param {string} text Text\n * @param {{}} options Converter Options\n * @param {{}} globals\n * @returns {string}\n */\n this._dispatch = function dispatch (evtName, text, options, globals) {\n if (listeners.hasOwnProperty(evtName)) {\n for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n if (nText && typeof nText !== 'undefined') {\n text = nText;\n }\n }\n }\n return text;\n };\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n * @returns {showdown.Converter}\n */\n this.listen = function (name, callback) {\n listen(name, callback);\n return this;\n };\n\n /**\n * Converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.makeHtml = function (text) {\n //check if text is not falsy\n if (!text) {\n return text;\n }\n\n var globals = {\n gHtmlBlocks: [],\n gHtmlMdBlocks: [],\n gHtmlSpans: [],\n gUrls: {},\n gTitles: {},\n gDimensions: {},\n gListLevel: 0,\n hashLinkCounts: {},\n langExtensions: langExtensions,\n outputModifiers: outputModifiers,\n converter: this,\n ghCodeBlocks: [],\n metadata: {\n parsed: {},\n raw: '',\n format: ''\n }\n };\n\n // This lets us use ¨ trema as an escape char to avoid md5 hashes\n // The choice of character is arbitrary; anything that isn't\n // magic in Markdown will work.\n text = text.replace(/¨/g, '¨T');\n\n // Replace $ with ¨D\n // RegExp interprets $ as a special character\n // when it's in a replacement string\n text = text.replace(/\\$/g, '¨D');\n\n // Standardize line endings\n text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n\n // Stardardize line spaces\n text = text.replace(/\\u00A0/g, ' ');\n\n if (options.smartIndentationFix) {\n text = rTrimInputText(text);\n }\n\n // Make sure text begins and ends with a couple of newlines:\n text = '\\n\\n' + text + '\\n\\n';\n\n // detab\n text = showdown.subParser('detab')(text, options, globals);\n\n /**\n * Strip any lines consisting only of spaces and tabs.\n * This makes subsequent regexs easier to write, because we can\n * match consecutive blank lines with /\\n+/ instead of something\n * contorted like /[ \\t]*\\n+/\n */\n text = text.replace(/^[ \\t]+$/mg, '');\n\n //run languageExtensions\n showdown.helper.forEach(langExtensions, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // run the sub parsers\n text = showdown.subParser('metadata')(text, options, globals);\n text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('hashCodeTags')(text, options, globals);\n text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n text = showdown.subParser('blockGamut')(text, options, globals);\n text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n text = showdown.subParser('unescapeSpecialChars')(text, options, globals);\n\n // attacklab: Restore dollar signs\n text = text.replace(/¨D/g, '$$');\n\n // attacklab: Restore tremas\n text = text.replace(/¨T/g, '¨');\n\n // render a complete html document instead of a partial if the option is enabled\n text = showdown.subParser('completeHTMLDocument')(text, options, globals);\n\n // Run output modifiers\n showdown.helper.forEach(outputModifiers, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // update metadata\n metadata = globals.metadata;\n return text;\n };\n\n /**\n * Converts an HTML string into a markdown string\n * @param src\n * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.\n * @returns {string}\n */\n this.makeMarkdown = this.makeMd = function (src, HTMLParser) {\n\n // replace \\r\\n with \\n\n src = src.replace(/\\r\\n/g, '\\n');\n src = src.replace(/\\r/g, '\\n'); // old macs\n\n // due to an edge case, we need to find this: > <\n // to prevent removing of non silent white spaces\n // ex: this is sparta\n src = src.replace(/>[ \\t]+¨NBSP;<');\n\n if (!HTMLParser) {\n if (window && window.document) {\n HTMLParser = window.document;\n } else {\n throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');\n }\n }\n\n var doc = HTMLParser.createElement('div');\n doc.innerHTML = src;\n\n var globals = {\n preList: substitutePreCodeTags(doc)\n };\n\n // remove all newlines and collapse spaces\n clean(doc);\n\n // some stuff, like accidental reference links must now be escaped\n // TODO\n // doc.innerHTML = doc.innerHTML.replace(/\\[[\\S\\t ]]/);\n\n var nodes = doc.childNodes,\n mdDoc = '';\n\n for (var i = 0; i < nodes.length; i++) {\n mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);\n }\n\n function clean (node) {\n for (var n = 0; n < node.childNodes.length; ++n) {\n var child = node.childNodes[n];\n if (child.nodeType === 3) {\n if (!/\\S/.test(child.nodeValue) && !/^[ ]+$/.test(child.nodeValue)) {\n node.removeChild(child);\n --n;\n } else {\n child.nodeValue = child.nodeValue.split('\\n').join(' ');\n child.nodeValue = child.nodeValue.replace(/(\\s)+/g, '$1');\n }\n } else if (child.nodeType === 1) {\n clean(child);\n }\n }\n }\n\n // find all pre tags and replace contents with placeholder\n // we need this so that we can remove all indentation from html\n // to ease up parsing\n function substitutePreCodeTags (doc) {\n\n var pres = doc.querySelectorAll('pre'),\n presPH = [];\n\n for (var i = 0; i < pres.length; ++i) {\n\n if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {\n var content = pres[i].firstChild.innerHTML.trim(),\n language = pres[i].firstChild.getAttribute('data-language') || '';\n\n // if data-language attribute is not defined, then we look for class language-*\n if (language === '') {\n var classes = pres[i].firstChild.className.split(' ');\n for (var c = 0; c < classes.length; ++c) {\n var matches = classes[c].match(/^language-(.+)$/);\n if (matches !== null) {\n language = matches[1];\n break;\n }\n }\n }\n\n // unescape html entities in content\n content = showdown.helper.unescapeHTMLEntities(content);\n\n presPH.push(content);\n pres[i].outerHTML = '';\n } else {\n presPH.push(pres[i].innerHTML);\n pres[i].innerHTML = '';\n pres[i].setAttribute('prenum', i.toString());\n }\n }\n return presPH;\n }\n\n return mdDoc;\n };\n\n /**\n * Set an option of this Converter instance\n * @param {string} key\n * @param {*} value\n */\n this.setOption = function (key, value) {\n options[key] = value;\n };\n\n /**\n * Get the option of this Converter instance\n * @param {string} key\n * @returns {*}\n */\n this.getOption = function (key) {\n return options[key];\n };\n\n /**\n * Get the options of this Converter instance\n * @returns {{}}\n */\n this.getOptions = function () {\n return options;\n };\n\n /**\n * Add extension to THIS converter\n * @param {{}} extension\n * @param {string} [name=null]\n */\n this.addExtension = function (extension, name) {\n name = name || null;\n _parseExtension(extension, name);\n };\n\n /**\n * Use a global registered extension with THIS converter\n * @param {string} extensionName Name of the previously registered extension\n */\n this.useExtension = function (extensionName) {\n _parseExtension(extensionName);\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function (name) {\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n var preset = flavor[name];\n setConvFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n options[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function () {\n return setConvFlavor;\n };\n\n /**\n * Remove an extension from THIS converter.\n * Note: This is a costly operation. It's better to initialize a new converter\n * and specify the extensions you wish to use\n * @param {Array} extension\n */\n this.removeExtension = function (extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n var ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions.splice(i, 1);\n }\n }\n for (var ii = 0; ii < outputModifiers.length; ++ii) {\n if (outputModifiers[ii] === ext) {\n outputModifiers.splice(ii, 1);\n }\n }\n }\n };\n\n /**\n * Get all extension of THIS converter\n * @returns {{language: Array, output: Array}}\n */\n this.getAllExtensions = function () {\n return {\n language: langExtensions,\n output: outputModifiers\n };\n };\n\n /**\n * Get the metadata of the previously parsed document\n * @param raw\n * @returns {string|{}}\n */\n this.getMetadata = function (raw) {\n if (raw) {\n return metadata.raw;\n } else {\n return metadata.parsed;\n }\n };\n\n /**\n * Get the metadata format of the previously parsed document\n * @returns {string}\n */\n this.getMetadataFormat = function () {\n return metadata.format;\n };\n\n /**\n * Private: set a single key, value metadata pair\n * @param {string} key\n * @param {string} value\n */\n this._setMetadataPair = function (key, value) {\n metadata.parsed[key] = value;\n };\n\n /**\n * Private: set metadata format\n * @param {string} format\n */\n this._setMetadataFormat = function (format) {\n metadata.format = format;\n };\n\n /**\n * Private: set metadata raw text\n * @param {string} raw\n */\n this._setMetadataRaw = function (raw) {\n metadata.raw = raw;\n };\n};\n\r\n/**\n * Turn Markdown link shortcuts into XHTML tags.\n */\nshowdown.subParser('anchors', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {\n if (showdown.helper.isUndefined(title)) {\n title = '';\n }\n linkId = linkId.toLowerCase();\n\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n } else if (!url) {\n if (!linkId) {\n // lower-case and turn embedded newlines into spaces\n linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n url = globals.gUrls[linkId];\n if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n title = globals.gTitles[linkId];\n }\n } else {\n return wholeMatch;\n }\n }\n\n //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n\n var result = '';\n\n return result;\n };\n\n // First, handle reference-style links: [link text] [id]\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag);\n\n // Next, inline-style links: [link text](url \"optional title\")\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // normal cases\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]??(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // handle reference-style shortcuts: [link text]\n // These must come last in case you've also got [link test][1]\n // or [link test](/foo)\n text = text.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag);\n\n // Lastly handle GithubMentions if option is enabled\n if (options.ghMentions) {\n text = text.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function (wm, st, escape, mentions, username) {\n if (escape === '\\\\') {\n return st + mentions;\n }\n\n //check if options.ghMentionsLink is a string\n if (!showdown.helper.isString(options.ghMentionsLink)) {\n throw new Error('ghMentionsLink option must be a string');\n }\n var lnk = options.ghMentionsLink.replace(/\\{u}/g, username),\n target = '';\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return st + '' + mentions + '';\n });\n }\n\n text = globals.converter._dispatch('anchors.after', text, options, globals);\n return text;\n});\n\r\n// url allowed chars [a-z\\d_.~:/?#[]@!$&'()*+,;=-]\n\nvar simpleURLRegex = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,\n simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,\n delimUrlRegex = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,\n simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi,\n delimMailRegex = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n\n replaceLink = function (options) {\n 'use strict';\n return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {\n link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var lnkTxt = link,\n append = '',\n target = '',\n lmc = leadingMagicChars || '',\n tmc = trailingMagicChars || '';\n if (/^www\\./i.test(link)) {\n link = link.replace(/^www\\./i, 'http://www.');\n }\n if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n append = trailingPunctuation;\n }\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return lmc + '' + lnkTxt + '' + append + tmc;\n };\n },\n\n replaceMail = function (options, globals) {\n 'use strict';\n return function (wholeMatch, b, mail) {\n var href = 'mailto:';\n b = b || '';\n mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);\n if (options.encodeEmails) {\n href = showdown.helper.encodeEmailAddress(href + mail);\n mail = showdown.helper.encodeEmailAddress(mail);\n } else {\n href = href + mail;\n }\n return b + '' + mail + '';\n };\n };\n\nshowdown.subParser('autoLinks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n\n text = text.replace(delimUrlRegex, replaceLink(options));\n text = text.replace(delimMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n\n return text;\n});\n\nshowdown.subParser('simplifiedAutoLinks', function (text, options, globals) {\n 'use strict';\n\n if (!options.simplifiedAutoLink) {\n return text;\n }\n\n text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);\n\n if (options.excludeTrailingPunctuationFromURLs) {\n text = text.replace(simpleURLRegex2, replaceLink(options));\n } else {\n text = text.replace(simpleURLRegex, replaceLink(options));\n }\n text = text.replace(simpleMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('blockGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockGamut.before', text, options, globals);\n\n // we parse blockquotes first so that we can have headings and hrs\n // inside blockquotes\n text = showdown.subParser('blockQuotes')(text, options, globals);\n text = showdown.subParser('headers')(text, options, globals);\n\n // Do Horizontal Rules:\n text = showdown.subParser('horizontalRule')(text, options, globals);\n\n text = showdown.subParser('lists')(text, options, globals);\n text = showdown.subParser('codeBlocks')(text, options, globals);\n text = showdown.subParser('tables')(text, options, globals);\n\n // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n // was to escape raw HTML in the original Markdown source. This time,\n // we're escaping the markup we've just created, so that we don't wrap\n //

tags around block-level tags.\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('paragraphs')(text, options, globals);\n\n text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n return text;\n});\n\r\nshowdown.subParser('blockQuotes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n\n // add a couple extra lines after the text and endtext mark\n text = text + '\\n\\n';\n\n var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n if (options.splitAdjacentBlockquotes) {\n rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n }\n\n text = text.replace(rgx, function (bq) {\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n\n // attacklab: clean up hack\n bq = bq.replace(/¨0/g, '');\n\n bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n bq = bq.replace(/(^|\\n)/g, '$1 ');\n // These leading spaces screw with

 content, so we need to fix that:\n    bq = bq.replace(/(\\s*
[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n      var pre = m1;\n      // attacklab: hack around Konqueror 3.5.4 bug:\n      pre = pre.replace(/^  /mg, '¨0');\n      pre = pre.replace(/¨0/g, '');\n      return pre;\n    });\n\n    return showdown.subParser('hashBlock')('
\\n' + bq + '\\n
', options, globals);\n });\n\n text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Process Markdown `
` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n\n  // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '¨0';\n\n  var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n  text = text.replace(pattern, function (wholeMatch, m1, m2) {\n    var codeblock = m1,\n        nextChar = m2,\n        end = '\\n';\n\n    codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n    codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n    codeblock = showdown.subParser('detab')(codeblock, options, globals);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n    if (options.omitExtraWLInCodeBlocks) {\n      end = '';\n    }\n\n    codeblock = '
' + codeblock + end + '
';\n\n return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n });\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n\n text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n return text;\n});\n\r\n/**\n *\n * * Backtick quotes are used for spans.\n *\n * * You can use multiple backticks as the delimiters if you want to\n * include literal backticks in the code span. So, this input:\n *\n * Just type ``foo `bar` baz`` at the prompt.\n *\n * Will translate to:\n *\n *

Just type foo `bar` baz at the prompt.

\n *\n * There's no arbitrary limit to the number of backticks you\n * can use as delimters. If you need three consecutive backticks\n * in your code, use four for delimiters, etc.\n *\n * * You can use spaces to get literal backticks at the edges:\n *\n * ... type `` `bar` `` ...\n *\n * Turns to:\n *\n * ... type `bar` ...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n if (typeof (text) === 'undefined') {\n text = '';\n }\n text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n function (wholeMatch, m1, m2, m3) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n c = showdown.subParser('encodeCode')(c, options, globals);\n c = m1 + '' + c + '';\n c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n return c;\n }\n );\n\n text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Create a full HTML document from the processed markdown\n */\nshowdown.subParser('completeHTMLDocument', function (text, options, globals) {\n 'use strict';\n\n if (!options.completeHTMLDocument) {\n return text;\n }\n\n text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n\n var doctype = 'html',\n doctypeParsed = '\\n',\n title = '',\n charset = '\\n',\n lang = '',\n metadata = '';\n\n if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n doctypeParsed = '\\n';\n doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n if (doctype === 'html' || doctype === 'html5') {\n charset = '';\n }\n }\n\n for (var meta in globals.metadata.parsed) {\n if (globals.metadata.parsed.hasOwnProperty(meta)) {\n switch (meta.toLowerCase()) {\n case 'doctype':\n break;\n\n case 'title':\n title = '' + globals.metadata.parsed.title + '\\n';\n break;\n\n case 'charset':\n if (doctype === 'html' || doctype === 'html5') {\n charset = '\\n';\n } else {\n charset = '\\n';\n }\n break;\n\n case 'language':\n case 'lang':\n lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n metadata += '\\n';\n break;\n\n default:\n metadata += '\\n';\n }\n }\n }\n\n text = doctypeParsed + '\\n\\n' + title + charset + metadata + '\\n\\n' + text.trim() + '\\n\\n';\n\n text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Convert all tabs to spaces\n */\nshowdown.subParser('detab', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('detab.before', text, options, globals);\n\n // expand first n-1 tabs\n text = text.replace(/\\t(?=\\t)/g, ' '); // g_tab_width\n\n // replace the nth with two sentinels\n text = text.replace(/\\t/g, '¨A¨B');\n\n // use the sentinel to anchor our regex so it doesn't explode\n text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {\n var leadingText = m1,\n numSpaces = 4 - leadingText.length % 4; // g_tab_width\n\n // there *must* be a better way to do this:\n for (var i = 0; i < numSpaces; i++) {\n leadingText += ' ';\n }\n\n return leadingText;\n });\n\n // clean up sentinels\n text = text.replace(/¨A/g, ' '); // g_tab_width\n text = text.replace(/¨B/g, '');\n\n text = globals.converter._dispatch('detab.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('ellipsis', function (text, options, globals) {\n 'use strict';\n\n if (!options.ellipsis) {\n return text;\n }\n\n text = globals.converter._dispatch('ellipsis.before', text, options, globals);\n\n text = text.replace(/\\.\\.\\./g, '…');\n\n text = globals.converter._dispatch('ellipsis.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Turn emoji codes into emojis\n *\n * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis\n */\nshowdown.subParser('emoji', function (text, options, globals) {\n 'use strict';\n\n if (!options.emoji) {\n return text;\n }\n\n text = globals.converter._dispatch('emoji.before', text, options, globals);\n\n var emojiRgx = /:([\\S]+?):/g;\n\n text = text.replace(emojiRgx, function (wm, emojiCode) {\n if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {\n return showdown.helper.emojis[emojiCode];\n }\n return wm;\n });\n\n text = globals.converter._dispatch('emoji.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\nshowdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);\n\n // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n // http://bumppo.net/projects/amputator/\n text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&');\n\n // Encode naked <'s\n text = text.replace(/<(?![a-z\\/?$!])/gi, '<');\n\n // Encode <\n text = text.replace(/\n text = text.replace(/>/g, '>');\n\n text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n * text = escapeCharacters(text,\"\\\\\",true);\n * text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox. This function gets called a LOT.\n */\nshowdown.subParser('encodeBackslashEscapes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);\n\n text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n text = text.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|:-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\nshowdown.subParser('encodeCode', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeCode.before', text, options, globals);\n\n // Encode all ampersands; HTML entities are not\n // entities within a Markdown code span.\n text = text\n .replace(/&/g, '&')\n // Do the angle bracket song and dance:\n .replace(//g, '>')\n // Now, escape characters that are magic in Markdown:\n .replace(/([*_{}\\[\\]\\\\=~-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeCode.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Within tags -- meaning between < and > -- encode [\\ ` * _ ~ =] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\nshowdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);\n\n // Build a regex to find HTML tags.\n var tags = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,\n comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n\n text = text.replace(tags, function (wholeMatch) {\n return wholeMatch\n .replace(/(.)<\\/?code>(?=.)/g, '$1`')\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = text.replace(comments, function (wholeMatch) {\n return wholeMatch\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n * def hello_world(x)\n * puts \"Hello, #{x}\"\n * end\n * ```\n */\nshowdown.subParser('githubCodeBlocks', function (text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function (wholeMatch, delim, language, codeblock) {\n var end = (options.omitExtraWLInCodeBlocks) ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock = '
' + codeblock + end + '
';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n });\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n\r\nshowdown.subParser('hashBlock', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n text = text.replace(/(^\\n+|\\n+$)/g, '');\n text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash and escape elements that should not be parsed as markdown\n */\nshowdown.subParser('hashCodeTags', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n var repFunc = function (wholeMatch, match, left, right) {\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n };\n\n // Hash naked \n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim');\n\n text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('hashElement', function (text, options, globals) {\n 'use strict';\n\n return function (wholeMatch, m1) {\n var blockText = m1;\n\n // Undo double lines\n blockText = blockText.replace(/\\n\\n/g, '\\n');\n blockText = blockText.replace(/^\\n/, '');\n\n // strip trailing blank lines\n blockText = blockText.replace(/\\n+$/g, '');\n\n // Replace the element text with a marker (\"¨KxK\" where x is its key)\n blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n return blockText;\n };\n});\n\r\nshowdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n var blockTags = [\n 'pre',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'table',\n 'dl',\n 'ol',\n 'ul',\n 'script',\n 'noscript',\n 'form',\n 'fieldset',\n 'iframe',\n 'math',\n 'style',\n 'section',\n 'header',\n 'footer',\n 'nav',\n 'article',\n 'aside',\n 'address',\n 'audio',\n 'canvas',\n 'figure',\n 'hgroup',\n 'output',\n 'video',\n 'p'\n ],\n repFunc = function (wholeMatch, match, left, right) {\n var txt = wholeMatch;\n // check if this html element is marked as markdown\n // if so, it's contents should be parsed as markdown\n if (left.search(/\\bmarkdown\\b/) !== -1) {\n txt = left + globals.converter.makeHtml(match) + right;\n }\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n };\n\n if (options.backslashEscapesHTMLTags) {\n // encode backslash escaped HTML tags\n text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n return '<' + inside + '>';\n });\n }\n\n // hash HTML Blocks\n for (var i = 0; i < blockTags.length; ++i) {\n\n var opTagPos,\n rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n patLeft = '<' + blockTags[i] + '\\\\b[^>]*>',\n patRight = '';\n // 1. Look for the first position of the first opening HTML tag in the text\n while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n\n // if the HTML tag is \\ escaped, we need to escape it and break\n\n\n //2. Split the text in that position\n var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n //3. Match recursively\n newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');\n\n // prevent an infinite loop\n if (newSubText1 === subTexts[1]) {\n break;\n }\n text = subTexts[0].concat(newSubText1);\n }\n }\n // HR SPECIAL CASE\n text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n // Special case for standalone HTML comments\n text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n }, '^ {0,3}', 'gm');\n\n // PHP and ASP-style processor instructions ( and <%...%>)\n text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n function hashHTMLSpan (html) {\n return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n }\n\n // Hash Self Closing tags\n text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags without properties\n text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags with properties\n text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash self closing tags without />\n text = text.replace(/<[^>]+?>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/\n\n text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n var repText = globals.gHtmlSpans[i],\n // limiter to prevent infinite loop (assume 10 as limit for recurse)\n limit = 0;\n\n while (/¨C(\\d+)C/.test(repText)) {\n var num = RegExp.$1;\n repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n if (limit === 10) {\n console.error('maximum nesting of 10 spans reached!!!');\n break;\n }\n ++limit;\n }\n text = text.replace('¨C' + i + 'C', repText);\n }\n\n text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Hash and escape
 elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    // encode html entities\n    var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n    return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  };\n\n  // Hash 
\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\\\s*]*>', '^ {0,3}\\\\s*
', 'gim');\n\n text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('headers', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('headers.before', text, options, globals);\n\n var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n // Set text-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n text = text.replace(setextRegexH2, function (matchFound, m1) {\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart + 1,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n // atx-style headers:\n // # Header 1\n // ## Header 2\n // ## Header 2 with closing hashes ##\n // ...\n // ###### Header 6\n //\n var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n\n text = text.replace(atxStyle, function (wholeMatch, m1, m2) {\n var hText = m2;\n if (options.customizedHeaderId) {\n hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, '');\n }\n\n var span = showdown.subParser('spanGamut')(hText, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m2) + '\"',\n hLevel = headerLevelStart - 1 + m1.length,\n header = '' + span + '';\n\n return showdown.subParser('hashBlock')(header, options, globals);\n });\n\n function headerId (m) {\n var title,\n prefix;\n\n // It is separate from other options to allow combining prefix and customized\n if (options.customizedHeaderId) {\n var match = m.match(/\\{([^{]+?)}\\s*$/);\n if (match && match[1]) {\n m = match[1];\n }\n }\n\n title = m;\n\n // Prefix id to prevent causing inadvertent pre-existing style matches.\n if (showdown.helper.isString(options.prefixHeaderId)) {\n prefix = options.prefixHeaderId;\n } else if (options.prefixHeaderId === true) {\n prefix = 'section-';\n } else {\n prefix = '';\n }\n\n if (!options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (options.ghCompatibleHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '')\n .replace(/¨T/g, '')\n .replace(/¨D/g, '')\n // replace rest of the chars (&~$ are repeated as they might have been escaped)\n // borrowed from github's redcarpet (some they should produce similar results)\n .replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, '')\n .toLowerCase();\n } else if (options.rawHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '&')\n .replace(/¨T/g, '¨')\n .replace(/¨D/g, '$')\n // replace \" and '\n .replace(/[\"']/g, '-')\n .toLowerCase();\n } else {\n title = title\n .replace(/[^\\w]/g, '')\n .toLowerCase();\n }\n\n if (options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (globals.hashLinkCounts[title]) {\n title = title + '-' + (globals.hashLinkCounts[title]++);\n } else {\n globals.hashLinkCounts[title] = 1;\n }\n return title;\n }\n\n text = globals.converter._dispatch('headers.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Turn Markdown link shortcuts into XHTML tags.\n */\nshowdown.subParser('horizontalRule', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('horizontalRule.before', text, options, globals);\n\n var key = showdown.subParser('hashBlock')('
', options, globals);\n text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n\n text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Turn Markdown image shortcuts into tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('images.before', text, options, globals);\n\n var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {\n url = url.replace(/\\s/g, '');\n return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);\n }\n\n function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n var gUrls = globals.gUrls,\n gTitles = globals.gTitles,\n gDims = globals.gDimensions;\n\n linkId = linkId.toLowerCase();\n\n if (!title) {\n title = '';\n }\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n\n } else if (url === '' || url === null) {\n if (linkId === '' || linkId === null) {\n // lower-case and turn embedded newlines into spaces\n linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(gUrls[linkId])) {\n url = gUrls[linkId];\n if (!showdown.helper.isUndefined(gTitles[linkId])) {\n title = gTitles[linkId];\n }\n if (!showdown.helper.isUndefined(gDims[linkId])) {\n width = gDims[linkId].width;\n height = gDims[linkId].height;\n }\n } else {\n return wholeMatch;\n }\n }\n\n altText = altText\n .replace(/\"/g, '"')\n //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n //url = showdown.helper.escapeCharacters(url, '*_', false);\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '\"'x \"optional title\")\n\n // base64 encoded images\n text = text.replace(base64RegExp, writeImageTagBase64);\n\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(crazyRegExp, writeImageTag);\n\n // normal cases\n text = text.replace(inlineRegExp, writeImageTag);\n\n // handle reference-style shortcuts: ![img text]\n text = text.replace(refShortcutRegExp, writeImageTag);\n\n text = globals.converter._dispatch('images.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('italicsAndBold', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);\n\n // it's faster to have 3 separate regexes for each case than have just one\n // because of backtracing, in some cases, it could lead to an exponential effect\n // called \"catastrophic backtrace\". Ominous!\n\n function parseInside (txt, left, right) {\n /*\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n */\n return left + txt + right;\n }\n\n // Parse underscores\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/_([^\\s_][\\s\\S]*?)_/g, function (wm, m) {\n // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n // Now parse asterisks\n if (options.literalMidWordAsterisks) {\n text = text.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n } else {\n text = text.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function (wm, m) {\n // !/^\\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n\n text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\nshowdown.subParser('lists', function (text, options, globals) {\n 'use strict';\n\n /**\n * Process the contents of a single ordered or unordered list, splitting it\n * into individual list items.\n * @param {string} listStr\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function processListItems (listStr, trimTrailing) {\n // The $g_list_level global keeps track of when we're inside a list.\n // Each time we enter a list, we increment it; when we leave a list,\n // we decrement. If it's zero, we're not in a list anymore.\n //\n // We do this because when we're not inside a list, we want to treat\n // something like this:\n //\n // I recommend upgrading to version\n // 8. Oops, now this line is treated\n // as a sub-list.\n //\n // As a single paragraph, despite the fact that the second line starts\n // with a digit-period-space sequence.\n //\n // Whereas when we're inside a list (or sub-list), that line will be\n // treated as the start of a sub-list. What a kludge, huh? This is\n // an aspect of Markdown's syntax that's hard to parse perfectly\n // without resorting to mind-reading. Perhaps the solution is to\n // change the syntax rules such that sub-lists must start with a\n // starting cardinal number; e.g. \"1.\" or \"a.\".\n globals.gListLevel++;\n\n // trim trailing blank lines:\n listStr = listStr.replace(/\\n{2,}$/, '\\n');\n\n // attacklab: add sentinel to emulate \\z\n listStr += '¨0';\n\n var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,\n isParagraphed = (/\\n[ \\t]*\\n(?!¨0)/.test(listStr));\n\n // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,\n // which is a syntax breaking change\n // activating this option reverts to old behavior\n if (options.disableForced4SpacesIndentedSublists) {\n rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n }\n\n listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n checked = (checked && checked.trim() !== '');\n\n var item = showdown.subParser('outdent')(m4, options, globals),\n bulletStyle = '';\n\n // Support for github tasklists\n if (taskbtn && options.tasklists) {\n bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n var otp = '
  • a
  • \n // instead of:\n //
    • - - a
    \n // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n return '¨A' + wm2;\n });\n\n // m1 - Leading line or\n // Has a double return (multi paragraph) or\n // Has sublist\n if (m1 || (item.search(/\\n{2,}/) > -1)) {\n item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n item = showdown.subParser('blockGamut')(item, options, globals);\n } else {\n // Recursion for sub-lists:\n item = showdown.subParser('lists')(item, options, globals);\n item = item.replace(/\\n$/, ''); // chomp(item)\n item = showdown.subParser('hashHTMLBlocks')(item, options, globals);\n\n // Colapse double linebreaks\n item = item.replace(/\\n\\n+/g, '\\n\\n');\n if (isParagraphed) {\n item = showdown.subParser('paragraphs')(item, options, globals);\n } else {\n item = showdown.subParser('spanGamut')(item, options, globals);\n }\n }\n\n // now we need to remove the marker (¨A)\n item = item.replace('¨A', '');\n // we can finally wrap the line in list item tags\n item = '' + item + '\\n';\n\n return item;\n });\n\n // attacklab: strip sentinel\n listStr = listStr.replace(/¨0/g, '');\n\n globals.gListLevel--;\n\n if (trimTrailing) {\n listStr = listStr.replace(/\\s+$/, '');\n }\n\n return listStr;\n }\n\n function styleStartNumber (list, listType) {\n // check if ol and starts by a number different than 1\n if (listType === 'ol') {\n var res = list.match(/^ *(\\d+)\\./);\n if (res && res[1] !== '1') {\n return ' start=\"' + res[1] + '\"';\n }\n }\n return '';\n }\n\n /**\n * Check and parse consecutive lists (better fix for issue #142)\n * @param {string} list\n * @param {string} listType\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function parseConsecutiveLists (list, listType, trimTrailing) {\n // check if we caught 2 or more consecutive lists by mistake\n // we use the counterRgx, meaning if listType is UL we look for OL and vice versa\n var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm,\n ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm,\n counterRxg = (listType === 'ul') ? olRgx : ulRgx,\n result = '';\n\n if (list.search(counterRxg) !== -1) {\n (function parseCL (txt) {\n var pos = txt.search(counterRxg),\n style = styleStartNumber(list, listType);\n if (pos !== -1) {\n // slice\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '\\n';\n\n // invert counterType and listType\n listType = (listType === 'ul') ? 'ol' : 'ul';\n counterRxg = (listType === 'ul') ? olRgx : ulRgx;\n\n //recurse\n parseCL(txt.slice(pos));\n } else {\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt, !!trimTrailing) + '\\n';\n }\n })(list);\n } else {\n var style = styleStartNumber(list, listType);\n result = '\\n\\n<' + listType + style + '>\\n' + processListItems(list, !!trimTrailing) + '\\n';\n }\n\n return result;\n }\n\n /** Start of list parsing **/\n text = globals.converter._dispatch('lists.before', text, options, globals);\n // add sentinel to hack around khtml/safari bug:\n // http://bugs.webkit.org/show_bug.cgi?id=11231\n text += '¨0';\n\n if (globals.gListLevel) {\n text = text.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, list, m2) {\n var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, true);\n }\n );\n } else {\n text = text.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, m1, list, m3) {\n var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, false);\n }\n );\n }\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n text = globals.converter._dispatch('lists.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Parse metadata at the top of the document\n */\nshowdown.subParser('metadata', function (text, options, globals) {\n 'use strict';\n\n if (!options.metadata) {\n return text;\n }\n\n text = globals.converter._dispatch('metadata.before', text, options, globals);\n\n function parseMetadataContents (content) {\n // raw is raw so it's not changed in any way\n globals.metadata.raw = content;\n\n // escape chars forbidden in html attributes\n // double quotes\n content = content\n // ampersand first\n .replace(/&/g, '&')\n // double quotes\n .replace(/\"/g, '"');\n\n content = content.replace(/\\n {4}/g, ' ');\n content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function (wm, key, value) {\n globals.metadata.parsed[key] = value;\n return '';\n });\n }\n\n text = text.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function (wholematch, format, content) {\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function (wholematch, format, content) {\n if (format) {\n globals.metadata.format = format;\n }\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/¨M/g, '');\n\n text = globals.converter._dispatch('metadata.after', text, options, globals);\n return text;\n});\n\r\n/**\n * Remove one level of line-leading tabs or spaces\n */\nshowdown.subParser('outdent', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('outdent.before', text, options, globals);\n\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n text = text.replace(/^(\\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width\n\n // attacklab: clean up hack\n text = text.replace(/¨0/g, '');\n\n text = globals.converter._dispatch('outdent.after', text, options, globals);\n return text;\n});\n\r\n/**\n *\n */\nshowdown.subParser('paragraphs', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('paragraphs.before', text, options, globals);\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n\n var grafs = text.split(/\\n{2,}/g),\n grafsOut = [],\n end = grafs.length; // Wrap

    tags\n\n for (var i = 0; i < end; i++) {\n var str = grafs[i];\n // if this is an HTML marker, copy it\n if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n grafsOut.push(str);\n\n // test for presence of characters to prevent empty lines being parsed\n // as paragraphs (resulting in undesired extra empty paragraphs)\n } else if (str.search(/\\S/) >= 0) {\n str = showdown.subParser('spanGamut')(str, options, globals);\n str = str.replace(/^([ \\t]*)/g, '

    ');\n str += '

    ';\n grafsOut.push(str);\n }\n }\n\n /** Unhashify HTML blocks */\n end = grafsOut.length;\n for (i = 0; i < end; i++) {\n var blockText = '',\n grafsOutIt = grafsOut[i],\n codeFlag = false;\n // if this is a marker for an html block...\n // use RegExp.test instead of string.search because of QML bug\n while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n var delim = RegExp.$1,\n num = RegExp.$2;\n\n if (delim === 'K') {\n blockText = globals.gHtmlBlocks[num];\n } else {\n // we need to check if ghBlock is a false positive\n if (codeFlag) {\n // use encoded version of all text\n blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);\n } else {\n blockText = globals.ghCodeBlocks[num].codeblock;\n }\n }\n blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText);\n // Check if grafsOutIt is a pre->code\n if (/^]*>\\s*]*>/.test(grafsOutIt)) {\n codeFlag = true;\n }\n }\n grafsOut[i] = grafsOutIt;\n }\n text = grafsOut.join('\\n');\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n\r\n/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n 'use strict';\n\n if (ext.filter) {\n text = ext.filter(text, globals.converter, options);\n\n } else if (ext.regex) {\n // TODO remove this when old extension loading mechanism is deprecated\n var re = ext.regex;\n if (!(re instanceof RegExp)) {\n re = new RegExp(re, 'g');\n }\n text = text.replace(re, ext.replace);\n }\n\n return text;\n});\n\r\n/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n text = showdown.subParser('codeSpans')(text, options, globals);\n text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n text = showdown.subParser('images')(text, options, globals);\n text = showdown.subParser('anchors')(text, options, globals);\n\n // Make links out of things like ``\n // Must come after anchors, because you can use < and >\n // delimiters in inline links like [this]().\n text = showdown.subParser('autoLinks')(text, options, globals);\n text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);\n text = showdown.subParser('emoji')(text, options, globals);\n text = showdown.subParser('underline')(text, options, globals);\n text = showdown.subParser('italicsAndBold')(text, options, globals);\n text = showdown.subParser('strikethrough')(text, options, globals);\n text = showdown.subParser('ellipsis')(text, options, globals);\n\n // we need to hash HTML tags inside spans\n text = showdown.subParser('hashHTMLSpans')(text, options, globals);\n\n // now we encode amps and angles\n text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);\n\n // Do hard breaks\n if (options.simpleLineBreaks) {\n // GFM style hard breaks\n // only add line breaks if the text does not contain a block (special case for lists)\n if (!/\\n\\n¨K/.test(text)) {\n text = text.replace(/\\n+/g, '
    \\n');\n }\n } else {\n // Vanilla hard breaks\n text = text.replace(/ +\\n/g, '
    \\n');\n }\n\n text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('strikethrough', function (text, options, globals) {\n 'use strict';\n\n function parseInside (txt) {\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n return '' + txt + '';\n }\n\n if (options.strikethrough) {\n text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });\n text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n }\n\n return text;\n});\n\r\n/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n 'use strict';\n\n var regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n base64Regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n\n // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {\n\n // if there aren't two instances of linkId it must not be a reference link so back out\n linkId = linkId.toLowerCase();\n if (text.toLowerCase().split(linkId).length - 1 < 2) {\n return wholeMatch;\n }\n if (url.match(/^data:.+?\\/.+?;base64,/)) {\n // remove newlines\n globals.gUrls[linkId] = url.replace(/\\s/g, '');\n } else {\n globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive\n }\n\n if (blankLines) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return blankLines + title;\n\n } else {\n if (title) {\n globals.gTitles[linkId] = title.replace(/\"|'/g, '"');\n }\n if (options.parseImgDimensions && width && height) {\n globals.gDimensions[linkId] = {\n width: width,\n height: height\n };\n }\n }\n // Completely remove the definition from the text\n return '';\n };\n\n // first we try to find base64 link references\n text = text.replace(base64Regex, replaceFunc);\n\n text = text.replace(regex, replaceFunc);\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return text;\n});\n\r\nshowdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles (sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders (header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '' + header + '\\n';\n }\n\n function parseCells (cell, style) {\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '' + subText + '\\n';\n }\n\n function buildTable (headers, cells) {\n var tb = '\\n\\n\\n',\n tblLgn = headers.length;\n\n for (var i = 0; i < tblLgn; ++i) {\n tb += headers[i];\n }\n tb += '\\n\\n\\n';\n\n for (i = 0; i < cells.length; ++i) {\n tb += '\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n tb += cells[i][ii];\n }\n tb += '\\n';\n }\n tb += '\\n
    \\n';\n return tb;\n }\n\n function parseTable (rawTable) {\n var i, tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n tableLines.shift();\n tableLines.shift();\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i]\n .split('|')\n .map(function (s) {\n return s.trim();\n })\n );\n }\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n for (var ii = 0; ii < headers.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n }\n row.push(parseCells(rawCells[i][ii], styles[ii]));\n }\n cells.push(row);\n }\n\n return buildTable(headers, cells);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n\r\nshowdown.subParser('underline', function (text, options, globals) {\n 'use strict';\n\n if (!options.underline) {\n return text;\n }\n\n text = globals.converter._dispatch('underline.before', text, options, globals);\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n }\n\n // escape remaining underscores to prevent them being parsed by italic and bold\n text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('underline.after', text, options, globals);\n\n return text;\n});\n\r\n/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n\n text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n\n text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n return text;\n});\n\r\nshowdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n if (innerTxt === '') {\n continue;\n }\n txt += innerTxt;\n }\n }\n // cleanup\n txt = txt.trim();\n txt = '> ' + txt.split('\\n').join('\\n> ');\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n 'use strict';\n\n var lang = node.getAttribute('language'),\n num = node.getAttribute('precodenum');\n return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n});\n\r\nshowdown.subParser('makeMarkdown.codeSpan', function (node) {\n 'use strict';\n\n return '`' + node.innerHTML + '`';\n});\n\r\nshowdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '*';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '*';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n 'use strict';\n\n var headerMark = new Array(headerLevel + 1).join('#'),\n txt = '';\n\n if (node.hasChildNodes()) {\n txt = headerMark + ' ';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.hr', function () {\n 'use strict';\n\n return '---';\n});\n\r\nshowdown.subParser('makeMarkdown.image', function (node) {\n 'use strict';\n\n var txt = '';\n if (node.hasAttribute('src')) {\n txt += '![' + node.getAttribute('alt') + '](';\n txt += '<' + node.getAttribute('src') + '>';\n if (node.hasAttribute('width') && node.hasAttribute('height')) {\n txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n }\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.links', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes() && node.hasAttribute('href')) {\n var children = node.childNodes,\n childrenLength = children.length;\n txt = '[';\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '](';\n txt += '<' + node.getAttribute('href') + '>';\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.list', function (node, globals, type) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var listItems = node.childNodes,\n listItemsLenght = listItems.length,\n listNum = node.getAttribute('start') || 1;\n\n for (var i = 0; i < listItemsLenght; ++i) {\n if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n continue;\n }\n\n // define the bullet to use in list\n var bullet = '';\n if (type === 'ol') {\n bullet = listNum.toString() + '. ';\n } else {\n bullet = '- ';\n }\n\n // parse list item\n txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n ++listNum;\n }\n\n // add comment at the end to prevent consecutive lists to be parsed as one\n txt += '\\n\\n';\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.listItem', function (node, globals) {\n 'use strict';\n\n var listItemTxt = '';\n\n var children = node.childNodes,\n childrenLenght = children.length;\n\n for (var i = 0; i < childrenLenght; ++i) {\n listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n // if it's only one liner, we need to add a newline at the end\n if (!/\\n$/.test(listItemTxt)) {\n listItemTxt += '\\n';\n } else {\n // it's multiparagraph, so we need to indent\n listItemTxt = listItemTxt\n .split('\\n')\n .join('\\n ')\n .replace(/^ {4}$/gm, '')\n .replace(/\\n\\n+/g, '\\n\\n');\n }\n\n return listItemTxt;\n});\n\r\n\n\nshowdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n 'use strict';\n\n spansOnly = spansOnly || false;\n\n var txt = '';\n\n // edge case of text without wrapper paragraph\n if (node.nodeType === 3) {\n return showdown.subParser('makeMarkdown.txt')(node, globals);\n }\n\n // HTML comment\n if (node.nodeType === 8) {\n return '\\n\\n';\n }\n\n // process only node elements\n if (node.nodeType !== 1) {\n return '';\n }\n\n var tagName = node.tagName.toLowerCase();\n\n switch (tagName) {\n\n //\n // BLOCKS\n //\n case 'h1':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n'; }\n break;\n case 'h2':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n'; }\n break;\n case 'h3':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n'; }\n break;\n case 'h4':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n'; }\n break;\n case 'h5':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n'; }\n break;\n case 'h6':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n'; }\n break;\n\n case 'p':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n'; }\n break;\n\n case 'blockquote':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n'; }\n break;\n\n case 'hr':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n'; }\n break;\n\n case 'ol':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n'; }\n break;\n\n case 'ul':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n'; }\n break;\n\n case 'precode':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n'; }\n break;\n\n case 'pre':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n'; }\n break;\n\n case 'table':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n'; }\n break;\n\n //\n // SPANS\n //\n case 'code':\n txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n break;\n\n case 'em':\n case 'i':\n txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n break;\n\n case 'strong':\n case 'b':\n txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n break;\n\n case 'del':\n txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n break;\n\n case 'a':\n txt = showdown.subParser('makeMarkdown.links')(node, globals);\n break;\n\n case 'img':\n txt = showdown.subParser('makeMarkdown.image')(node, globals);\n break;\n\n default:\n txt = node.outerHTML + '\\n\\n';\n }\n\n // common normalization\n // TODO eventually\n\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n\n // some text normalization\n txt = txt.trim();\n\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.pre', function (node, globals) {\n 'use strict';\n\n var num = node.getAttribute('prenum');\n return '
    ' + globals.preList[num] + '
    ';\n});\n\r\nshowdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '~~';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '~~';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.strong', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '**';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '**';\n }\n return txt;\n});\n\r\nshowdown.subParser('makeMarkdown.table', function (node, globals) {\n 'use strict';\n\n var txt = '',\n tableArray = [[], []],\n headings = node.querySelectorAll('thead>tr>th'),\n rows = node.querySelectorAll('tbody>tr'),\n i, ii;\n for (i = 0; i < headings.length; ++i) {\n var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n allign = '---';\n\n if (headings[i].hasAttribute('style')) {\n var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n switch (style) {\n case 'text-align:left;':\n allign = ':---';\n break;\n case 'text-align:right;':\n allign = '---:';\n break;\n case 'text-align:center;':\n allign = ':---:';\n break;\n }\n }\n tableArray[0][i] = headContent.trim();\n tableArray[1][i] = allign;\n }\n\n for (i = 0; i < rows.length; ++i) {\n var r = tableArray.push([]) - 1,\n cols = rows[i].getElementsByTagName('td');\n\n for (ii = 0; ii < headings.length; ++ii) {\n var cellContent = ' ';\n if (typeof cols[ii] !== 'undefined') {\n cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n }\n tableArray[r].push(cellContent);\n }\n }\n\n var cellSpacesCount = 3;\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n var strLen = tableArray[i][ii].length;\n if (strLen > cellSpacesCount) {\n cellSpacesCount = strLen;\n }\n }\n }\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n if (i === 1) {\n if (tableArray[i][ii].slice(-1) === ':') {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n }\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n }\n }\n txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n }\n\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n }\n return txt.trim();\n});\n\r\nshowdown.subParser('makeMarkdown.txt', function (node) {\n 'use strict';\n\n var txt = node.nodeValue;\n\n // multiple spaces are collapsed\n txt = txt.replace(/ +/g, ' ');\n\n // replace the custom ¨NBSP; with a space\n txt = txt.replace(/¨NBSP;/g, ' ');\n\n // \", <, > and & should replace escaped html entities\n txt = showdown.helper.unescapeHTMLEntities(txt);\n\n // escape markdown magic characters\n // emphasis, strong and strikethrough - can appear everywhere\n // we also escape pipe (|) because of tables\n // and escape ` because of code blocks and spans\n txt = txt.replace(/([*_~|`])/g, '\\\\$1');\n\n // escape > because of blockquotes\n txt = txt.replace(/^(\\s*)>/g, '\\\\$1>');\n\n // hash character, only troublesome at the beginning of a line because of headers\n txt = txt.replace(/^#/gm, '\\\\#');\n\n // horizontal rules\n txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3');\n\n // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.');\n\n // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2');\n\n // images and links, ] followed by ( is problematic, so we escape it\n txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\(');\n\n // reference URIs must also be escaped\n txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n\n return txt;\n});\n\r\nvar root = this;\n\n// AMD Loader\nif (typeof define === 'function' && define.amd) {\n define(function () {\n 'use strict';\n return showdown;\n });\n\n// CommonJS/nodeJS Loader\n} else if (typeof module !== 'undefined' && module.exports) {\n module.exports = showdown;\n\n// Regular Browser loader\n} else {\n root.showdown = showdown;\n}\n}).call(this);\r\n\n//# sourceMappingURL=showdown.js.map\r\n","import { aliaChatService } from \"../services/aliaChatService.ts\";\r\nimport { useDialog } from \"~/foundation/Components/dialog/useDialog.ts\";\r\nimport { addLoader } from \"~/foundation/Loaders/loader.ts\";\r\nimport showdown from \"showdown\";\r\nimport { type AliaChatMessageSource } from \"../generated-types.ts\";\r\n\r\nconst converter = new showdown.Converter();\r\n\r\ntype ChatMessage = {\r\n\ttext: string;\r\n\ttype: \"question\" | \"response\";\r\n\ttimestamp: string;\r\n\tsources?: AliaChatMessageSource[]\r\n}\r\n\r\nconst dialog = useDialog();\r\n\r\n/**\r\n * Get the chat markup.\r\n * @param query string | undefined\r\n * @param useContext boolean | undefined\r\n */\r\nexport const renderChat = async (query: string | undefined, useContext = false) => {\r\n\tconst res = await fetch(\"/aramcolife/aliachat/aliachat\");\r\n\tconst data = await res.text();\r\n\tdialog.open(data, \"theme-darkBlue\").then(() => {\r\n\t\tbootstrapChat(document.querySelector('.alia-chat') as HTMLElement, query, useContext);\r\n\t});\r\n}\r\n\r\n/**\r\n * Creates a message element.\r\n * @param message ChatMessage\r\n */\r\nconst createChatMessage = (message: ChatMessage): HTMLDivElement => {\r\n\tconst chatMessage = document.createElement('div');\r\n\tchatMessage.classList.add('alia-chat__message');\r\n\tchatMessage.classList.add(`alia-chat__message--${message.type}`);\r\n\r\n\tconst chatMessageContent = document.createElement('div');\r\n\tchatMessageContent.classList.add('alia-chat__message__content');\r\n\tchatMessageContent.innerHTML = converter.makeHtml(message.text);\r\n\r\n\t// Add sources.\r\n\tif (message.sources) {\r\n\t\tconst sourceList = document.createElement(\"ul\");\r\n\t\tsourceList.classList.add(\"alia-chat__message__sources\");\r\n\t\tmessage.sources.forEach((source) => {\r\n\t\t\tconst sourceListItem = document.createElement(\"li\");\r\n\t\t\tsourceListItem.classList.add(\"alia-chat__message__sources__item\");\r\n\t\t\tconst sourceLink = document.createElement(\"a\");\r\n\t\t\tsourceLink.setAttribute(\"href\", source.url);\r\n\t\t\tsourceLink.textContent = source.title;\r\n\t\t\tsourceListItem.appendChild(sourceLink);\r\n\t\t\tsourceList.appendChild(sourceListItem);\r\n\t\t});\r\n\t\tchatMessageContent.appendChild(sourceList);\r\n\t}\r\n\r\n\tchatMessage.appendChild(chatMessageContent);\r\n\r\n\treturn chatMessage;\r\n}\r\n\r\n/**\r\n * Bootstrap the chat app.\r\n * @param element HTMLElement\r\n * @param query string | undefined\r\n * @param useContext boolean\r\n */\r\nconst bootstrapChat = (element: HTMLElement, query: string | undefined, useContext: boolean) => {\r\n\tconst form = element.querySelector('form.alia-chat__form');\r\n\tconst input = element.querySelector('input[name=\"alia-chat-question\"]');\r\n\tconst messages = element.querySelector('.alia-chat__messages');\r\n\r\n\t//hardcoded to use prod as context https://akqa-denmark.atlassian.net/browse/AR-1115\r\n\tconst context = \"https://www.aramcolife.com\" + window.location.pathname;\r\n\tconst contextUrl = useContext ? context : undefined;\r\n\r\n\tif (!form || !input || !messages) {\r\n\t\treturn\r\n\t}\r\n\r\n\tinput.focus();\r\n\r\n\t// Feedback.\r\n\telement.querySelectorAll(\"button[data-alia-feedback]\").forEach((feedbackButton) => {\r\n\t\tconst feedback = feedbackButton.dataset.aliaFeedback as string;\r\n\t\tfeedbackButton.addEventListener(\"click\", () => {\r\n\t\t\taliaChatService.feedbackMessage({ chatlogId: window.aliaChatBot.chatlogId, feedback }).then((response) => {\r\n\t\t\t\tresponse.success && element.classList.remove('alia-chat--show-actions');\r\n\t\t\t})\r\n\t\t});\r\n\t})\r\n\r\n\t// Submit handler.\r\n\tconst handleSubmit = async (initalQuestion?: string) => {\r\n\t\tform.setAttribute(\"aria-busy\", \"true\");\r\n\t\tconst formData = new FormData(form as HTMLFormElement);\r\n\r\n\t\tconst question = initalQuestion || formData.get('alia-chat-question');\r\n\r\n\t\tif (!question) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tinput.value = \"\";\r\n\r\n\t\tconst questionMessage = createChatMessage({\r\n\t\t\ttext: question as string,\r\n\t\t\ttype: \"question\",\r\n\t\t\ttimestamp: new Date().toISOString()\r\n\t\t});\r\n\r\n\t\twindow.aliaChatBot.messages.push(questionMessage);\r\n\r\n\t\tmessages.appendChild(questionMessage);\r\n\r\n\t\tconst loading = document.createElement(\"div\");\r\n\t\tloading.style.width = \"100%\";\r\n\t\tloading.style.marginTop = \"15px\";\r\n\t\taddLoader(loading);\r\n\t\tmessages.appendChild(loading);\r\n\t\tmessages.scrollTo(0, messages.scrollHeight);\r\n\r\n\t\tconst { data, error } = await aliaChatService.chatQuestion({\r\n\t\t\tquestion: question as string,\r\n\t\t\tchatlogId: window.aliaChatBot.chatlogId,\r\n\t\t\tcontextUrl,\r\n\t\t});\r\n\r\n\t\tif (!data || error) return;\r\n\r\n\t\tconst responseMessage = createChatMessage({ text: data.response, type: \"response\", timestamp: data.timestamp, sources: data.sources });\r\n\r\n\t\tmessages.removeChild(loading);\r\n\r\n\t\twindow.aliaChatBot.chatlogId = data.chatlogId;\r\n\t\twindow.aliaChatBot.messages.push(responseMessage);\r\n\r\n\t\tmessages.appendChild(responseMessage);\r\n\t\tform.setAttribute(\"aria-busy\", \"false\");\r\n\t\tmessages.scrollTo(0, messages.scrollHeight);\r\n\t}\r\n\r\n\t// Submit form if query is available.\r\n\tif (query) {\r\n\t\telement.classList.add('alia-chat--has-messages');\r\n\t\thandleSubmit(query);\r\n\t}\r\n\r\n\tform.addEventListener('submit', async (e) => {\r\n\t\te.preventDefault();\r\n\t\thandleSubmit()\r\n\t});\r\n\r\n\tconst submitButton = form.querySelector(\".alia-chat__form__submit\");\r\n\tsubmitButton?.addEventListener(\"click\", async () => {\r\n\t\thandleSubmit();\r\n\t});\r\n\r\n\tconst observer = new MutationObserver(() => {\r\n\t\tif (window.aliaChatBot.messages.length > 0) {\r\n\t\t\telement.classList.add('alia-chat--has-messages');\r\n\t\t} else {\r\n\t\t\telement.classList.remove('alia-chat--has-messages');\r\n\t\t}\r\n\r\n\t\tif (window.aliaChatBot.chatlogId) {\r\n\t\t\telement.classList.add('alia-chat--show-actions');\r\n\t\t} else {\r\n\t\t\telement.classList.remove('alia-chat--show-actions');\r\n\t\t}\r\n\t});\r\n\r\n\tobserver.observe(messages, { subtree: true, childList: true });\r\n}","import { type Module } from \"~/foundation/Bootstrapper/types.js\";\r\nimport { renderChat } from \"./chatbot.service.ts\";\r\n\r\ntype ModuleProps = {\r\n\tquery: string;\r\n\tuseContext: boolean;\r\n}\r\n\r\nconst Chatbot: Module = (element): void => {\r\n\t// Init state.\r\n\tif (!window.aliaChatBot) {\r\n\t\twindow.aliaChatBot = {\r\n\t\t\tmessages: [],\r\n\t\t\tchatlogId: \"\",\r\n\t\t\tshowTerms: false,\r\n\t\t};\r\n\t}\r\n\r\n\telement.addEventListener(\"click\", async () => {\r\n\t\tlet query: string | undefined;\r\n\t\tlet useContext: boolean = false;\r\n\r\n\t\tif (element.dataset.moduleProps) {\r\n\t\t\tconst props = JSON.parse(element.dataset.moduleProps) as ModuleProps;\r\n\t\t\tif (props.query) query = props.query;\r\n\t\t\tif (props.useContext) useContext = props.useContext;\r\n\t\t}\r\n\r\n\t\trenderChat(query, useContext);\r\n\t})\r\n}\r\n\r\nexport default Chatbot;"],"names":["aliaChatServiceMeta","aliaChatService","body","http","getDefaultOpts","simple","defaultOptions","ret","opt","allOptionsOn","options","showdown","parsers","extensions","globalOptions","setFlavor","flavor","key","value","name","preset","option","func","ext","validExtension","validate","extension","errMsg","i","baseMsg","type","ln","validateExtension","a","getType","obj","callback","prop","s","escapeCharactersCallback","wholeMatch","m1","charCodeToEscape","text","charsToEscape","afterBackslash","regexString","regex","txt","rgxFindMatchPos","str","left","right","flags","f","g","x","l","pos","t","m","start","end","matchPos","results","replacement","repStr","finalStr","lng","bits","fromIndex","indexOf","index","mail","encode","ch","r","targetLength","padString","msg","converterOptions","langExtensions","outputModifiers","listeners","setConvFlavor","metadata","_constructor","gOpt","_parseExtension","legacyExtensionLoading","validExt","listen","valid","rTrimInputText","rsp","rgx","evtName","globals","ei","nText","src","HTMLParser","doc","substitutePreCodeTags","clean","nodes","mdDoc","node","n","child","pres","presPH","content","language","classes","c","matches","extensionName","ii","raw","format","writeAnchorTag","linkText","linkId","url","m5","m6","title","result","wm","st","escape","mentions","username","lnk","target","simpleURLRegex","simpleURLRegex2","delimUrlRegex","simpleMailRegex","delimMailRegex","replaceLink","leadingMagicChars","link","m2","m3","trailingPunctuation","trailingMagicChars","lnkTxt","append","lmc","tmc","replaceMail","b","href","bq","pre","pattern","codeblock","nextChar","doctype","doctypeParsed","charset","lang","meta","leadingText","numSpaces","emojiRgx","emojiCode","tags","comments","delim","repFunc","match","blockText","blockTags","inside","opTagPos","rgx1","patLeft","patRight","subTexts","newSubText1","hashHTMLSpan","html","repText","limit","num","headerLevelStart","setextRegexH1","setextRegexH2","spanGamut","hID","headerId","hLevel","hashBlock","matchFound","atxStyle","hText","span","header","prefix","inlineRegExp","crazyRegExp","base64RegExp","referenceRegExp","refShortcutRegExp","writeImageTagBase64","altText","width","height","writeImageTag","gUrls","gTitles","gDims","parseInside","lead","processListItems","listStr","trimTrailing","isParagraphed","m4","taskbtn","checked","item","bulletStyle","otp","wm2","styleStartNumber","list","listType","res","parseConsecutiveLists","olRgx","ulRgx","counterRxg","parseCL","style","parseMetadataContents","wholematch","grafs","grafsOut","grafsOutIt","codeFlag","re","base64Regex","replaceFunc","blankLines","tableRgx","singeColTblRgx","parseStyles","sLine","parseHeaders","id","parseCells","cell","subText","buildTable","headers","cells","tb","tblLgn","parseTable","rawTable","tableLines","rawHeaders","rawStyles","rawCells","styles","row","charCodeToReplace","children","childrenLength","innerTxt","headerLevel","headerMark","listItems","listItemsLenght","listNum","bullet","listItemTxt","childrenLenght","spansOnly","tagName","tableArray","headings","rows","headContent","allign","cols","cellContent","cellSpacesCount","strLen","root","module","this","converter","dialog","useDialog","renderChat","query","useContext","data","bootstrapChat","createChatMessage","message","chatMessage","chatMessageContent","sourceList","source","sourceListItem","sourceLink","element","form","input","messages","context","contextUrl","feedbackButton","feedback","response","handleSubmit","initalQuestion","formData","question","questionMessage","loading","addLoader","error","responseMessage","e","submitButton","Chatbot","props"],"mappings":"uEAgBO,MAAMA,EAAoD,CAChE,aAAc,CAAC,OAAQ,mBAAmB,EAC1C,gBAAiB,CAAC,OAAQ,uBAAuB,CAClD,EAGaC,EAAkB,CAC9B,MAAM,aAAaC,EAAwB,CAC1C,OAAO,MAAMC,EAAK,MAAyCH,EAAoB,aAAc,CAAE,KAAAE,EAAM,CACtG,EACA,MAAM,gBAAgBA,EAAwB,CAC7C,OAAO,MAAMC,EAAK,MAAmCH,EAAoB,gBAAiB,CAAE,KAAAE,EAAM,CACnG,CACD,mCC5BC,UAAU,CAKX,SAASE,EAAgBC,EAAQ,CAG/B,IAAIC,EAAiB,CACnB,wBAAyB,CACvB,aAAc,GACd,SAAU,wDACV,KAAM,SACP,EACD,WAAY,CACV,aAAc,GACd,SAAU,kCACV,KAAM,SACP,EACD,eAAgB,CACd,aAAc,GACd,SAAU,4JACV,KAAM,QACP,EACD,kBAAmB,CACjB,aAAc,GACd,SAAU,uKACV,KAAM,SACP,EACD,qBAAsB,CACpB,aAAc,GACd,SAAU,oIACV,KAAM,SACP,EACD,YAAa,CACX,aAAc,GACd,SAAU,0JACV,KAAM,SACP,EACD,iBAAkB,CAChB,aAAc,GACd,SAAU,gCACV,KAAM,SACP,EACD,mBAAoB,CAClB,aAAc,GACd,SAAU,sCACV,KAAM,SACP,EACD,mBAAoB,CAClB,aAAc,GACd,SAAU,iCACV,KAAM,SACP,EACD,mCAAoC,CAClC,aAAc,GACd,SAAU,sEACV,KAAM,SACP,EACD,0BAA2B,CACzB,aAAc,GACd,SAAU,mDACV,KAAM,SACP,EACD,wBAAyB,CACvB,aAAc,GACd,SAAU,+CACV,KAAM,SACP,EACD,cAAe,CACb,aAAc,GACd,SAAU,oCACV,KAAM,SACP,EACD,OAAQ,CACN,aAAc,GACd,SAAU,6BACV,KAAM,SACP,EACD,eAAgB,CACd,aAAc,GACd,SAAU,6BACV,KAAM,SACP,EACD,aAAc,CACZ,aAAc,GACd,SAAU,6CACV,KAAM,SACP,EACD,UAAW,CACT,aAAc,GACd,SAAU,mCACV,KAAM,SACP,EACD,kBAAmB,CACjB,aAAc,GACd,SAAU,kEACV,KAAM,SACP,EACD,oBAAqB,CACnB,aAAc,GACd,SAAU,kDACV,KAAM,SACP,EACD,qCAAsC,CACpC,aAAc,GACd,SAAU,oEACV,KAAM,SACP,EACD,iBAAkB,CAChB,aAAc,GACd,SAAU,gDACV,KAAM,SACP,EACD,8BAA+B,CAC7B,aAAc,GACd,SAAU,6EACV,KAAM,SACP,EACD,WAAY,CACV,aAAc,GACd,SAAU,2BACV,KAAM,SACP,EACD,eAAgB,CACd,aAAc,yBACd,SAAU,yFACV,KAAM,QACP,EACD,aAAc,CACZ,aAAc,GACd,SAAU,0IACV,KAAM,SACP,EACD,qBAAsB,CACpB,aAAc,GACd,SAAU,gCACV,KAAM,SACP,EACD,yBAA0B,CACxB,aAAc,GACd,SAAU,oDACV,KAAM,SACP,EACD,MAAO,CACL,aAAc,GACd,SAAU,sDACV,KAAM,SACP,EACD,UAAW,CACT,aAAc,GACd,SAAU,gLACV,KAAM,SACP,EACD,SAAU,CACR,aAAc,GACd,SAAU,0DACV,KAAM,SACP,EACD,qBAAsB,CACpB,aAAc,GACd,SAAU,mFACV,KAAM,SACP,EACD,SAAU,CACR,aAAc,GACd,SAAU,gIACV,KAAM,SACP,EACD,yBAA0B,CACxB,aAAc,GACd,SAAU,mCACV,KAAM,SACP,CACL,EACE,GAAID,IAAW,GACb,OAAO,KAAK,MAAM,KAAK,UAAUC,CAAc,CAAC,EAElD,IAAIC,EAAM,CAAA,EACV,QAASC,KAAOF,EACVA,EAAe,eAAeE,CAAG,IACnCD,EAAIC,CAAG,EAAIF,EAAeE,CAAG,EAAE,cAGnC,OAAOD,CACR,CAED,SAASE,GAAgB,CAEvB,IAAIC,EAAUN,EAAe,EAAI,EAC7BG,EAAM,CAAA,EACV,QAASC,KAAOE,EACVA,EAAQ,eAAeF,CAAG,IAC5BD,EAAIC,CAAG,EAAI,IAGf,OAAOD,CACR,CAOD,IAAII,EAAW,CAAE,EACbC,EAAU,CAAE,EACZC,EAAa,CAAE,EACfC,EAAgBV,EAAe,EAAI,EACnCW,EAAY,UACZC,EAAS,CACP,OAAQ,CACN,wBAAsC,GACtC,mBAAsC,GACtC,mCAAsC,GACtC,0BAAsC,GACtC,cAAsC,GACtC,OAAsC,GACtC,eAAsC,GACtC,aAAsC,GACtC,UAAsC,GACtC,qCAAsC,GACtC,iBAAsC,GACtC,8BAAsC,GACtC,qBAAsC,GACtC,WAAsC,GACtC,yBAAsC,GACtC,MAAsC,GACtC,yBAAsC,EACvC,EACD,SAAU,CACR,WAAsC,GACtC,aAAsC,EACvC,EACD,MAAO,CACL,wBAAsC,GACtC,mBAAsC,GACtC,mBAAsC,GACtC,mCAAsC,GACtC,0BAAsC,GACtC,cAAsC,GACtC,OAAsC,GACtC,eAAsC,GACtC,aAAsC,GACtC,UAAsC,GACtC,kBAAsC,GACtC,iBAAsC,GACtC,8BAAsC,GACtC,WAAsC,GACtC,aAAsC,EACvC,EACD,QAASZ,EAAe,EAAI,EAC5B,MAAOK,EAAc,CAC3B,EAMAE,EAAS,OAAS,GAMlBA,EAAS,WAAa,GAStBA,EAAS,UAAY,SAAUM,EAAKC,EAAO,CAEzC,OAAAJ,EAAcG,CAAG,EAAIC,EACd,IACT,EAQAP,EAAS,UAAY,SAAUM,EAAK,CAElC,OAAOH,EAAcG,CAAG,CAC1B,EAOAN,EAAS,WAAa,UAAY,CAEhC,OAAOG,CACT,EAMAH,EAAS,aAAe,UAAY,CAElCG,EAAgBV,EAAe,EAAI,CACrC,EAMAO,EAAS,UAAY,SAAUQ,EAAM,CAEnC,GAAI,CAACH,EAAO,eAAeG,CAAI,EAC7B,MAAM,MAAMA,EAAO,uBAAuB,EAE5CR,EAAS,aAAY,EACrB,IAAIS,EAASJ,EAAOG,CAAI,EACxBJ,EAAYI,EACZ,QAASE,KAAUD,EACbA,EAAO,eAAeC,CAAM,IAC9BP,EAAcO,CAAM,EAAID,EAAOC,CAAM,EAG3C,EAMAV,EAAS,UAAY,UAAY,CAE/B,OAAOI,CACT,EAOAJ,EAAS,iBAAmB,SAAUQ,EAAM,CAE1C,GAAIH,EAAO,eAAeG,CAAI,EAC5B,OAAOH,EAAOG,CAAI,CAEtB,EAQAR,EAAS,kBAAoB,SAAUN,EAAQ,CAE7C,OAAOD,EAAeC,CAAM,CAC9B,EAYAM,EAAS,UAAY,SAAUQ,EAAMG,EAAM,CAEzC,GAAIX,EAAS,OAAO,SAASQ,CAAI,EAC/B,GAAI,OAAOG,EAAS,IAClBV,EAAQO,CAAI,EAAIG,MACX,CACL,GAAIV,EAAQ,eAAeO,CAAI,EAC7B,OAAOP,EAAQO,CAAI,EAEnB,MAAM,MAAM,mBAAqBA,EAAO,kBAAkB,CAE7D,CAEL,EASAR,EAAS,UAAY,SAAUQ,EAAMI,EAAK,CAGxC,GAAI,CAACZ,EAAS,OAAO,SAASQ,CAAI,EAChC,MAAM,MAAM,mCAAqC,EAMnD,GAHAA,EAAOR,EAAS,OAAO,WAAWQ,CAAI,EAGlCR,EAAS,OAAO,YAAYY,CAAG,EAAG,CACpC,GAAI,CAACV,EAAW,eAAeM,CAAI,EACjC,MAAM,MAAM,mBAAqBA,EAAO,qBAAqB,EAE/D,OAAON,EAAWM,CAAI,CAG1B,KAAS,CAED,OAAOI,GAAQ,aACjBA,EAAMA,EAAG,GAINZ,EAAS,OAAO,QAAQY,CAAG,IAC9BA,EAAM,CAACA,CAAG,GAGZ,IAAIC,EAAiBC,EAASF,EAAKJ,CAAI,EAEvC,GAAIK,EAAe,MACjBX,EAAWM,CAAI,EAAII,MAEnB,OAAM,MAAMC,EAAe,KAAK,CAEnC,CACH,EAMAb,EAAS,iBAAmB,UAAY,CAEtC,OAAOE,CACT,EAMAF,EAAS,gBAAkB,SAAUQ,EAAM,CAEzC,OAAON,EAAWM,CAAI,CACxB,EAKAR,EAAS,gBAAkB,UAAY,CAErCE,EAAa,CAAA,CACf,EAQA,SAASY,EAAUC,EAAWP,EAAM,CAGlC,IAAIQ,EAAUR,EAAQ,YAAcA,EAAO,eAAiB,6BACxDZ,EAAM,CACJ,MAAO,GACP,MAAO,EACf,EAEOI,EAAS,OAAO,QAAQe,CAAS,IACpCA,EAAY,CAACA,CAAS,GAGxB,QAASE,EAAI,EAAGA,EAAIF,EAAU,OAAQ,EAAEE,EAAG,CACzC,IAAIC,EAAUF,EAAS,kBAAoBC,EAAI,KAC3CL,EAAMG,EAAUE,CAAC,EACrB,GAAI,OAAOL,GAAQ,SACjB,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,0BAA4B,OAAON,EAAM,SACxDhB,EAGT,GAAI,CAACI,EAAS,OAAO,SAASY,EAAI,IAAI,EACpC,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,yCAA2C,OAAON,EAAI,KAAO,SAC5EhB,EAGT,IAAIuB,EAAOP,EAAI,KAAOA,EAAI,KAAK,cAW/B,GARIO,IAAS,aACXA,EAAOP,EAAI,KAAO,QAGhBO,IAAS,SACXA,EAAOP,EAAI,KAAO,UAGhBO,IAAS,QAAUA,IAAS,UAAYA,IAAS,WACnD,OAAAvB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,QAAUC,EAAO,iFAChCvB,EAGT,GAAIuB,IAAS,YACX,GAAInB,EAAS,OAAO,YAAYY,EAAI,SAAS,EAC3C,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,0EACftB,UAGLI,EAAS,OAAO,YAAYY,EAAI,MAAM,GAAKZ,EAAS,OAAO,YAAYY,EAAI,KAAK,EAClF,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAUC,EAAO,yEACtBvB,EAIX,GAAIgB,EAAI,UAAW,CACjB,GAAI,OAAOA,EAAI,WAAc,SAC3B,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,8CAAgD,OAAON,EAAI,UAAY,SACtFhB,EAET,QAASwB,KAAMR,EAAI,UACjB,GAAIA,EAAI,UAAU,eAAeQ,CAAE,GAC7B,OAAOR,EAAI,UAAUQ,CAAE,GAAM,WAC/B,OAAAxB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,+EAAiFE,EACrG,2BAA6B,OAAOR,EAAI,UAAUQ,CAAE,EAAI,SACnDxB,CAId,CAED,GAAIgB,EAAI,QACN,GAAI,OAAOA,EAAI,QAAW,WACxB,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,oCAAsC,OAAON,EAAI,OAAS,SACzEhB,UAEAgB,EAAI,MAAO,CAIpB,GAHIZ,EAAS,OAAO,SAASY,EAAI,KAAK,IACpCA,EAAI,MAAQ,IAAI,OAAOA,EAAI,MAAO,GAAG,GAEnC,EAAEA,EAAI,iBAAiB,QACzB,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,oEAAsE,OAAON,EAAI,MAAQ,SACxGhB,EAET,GAAII,EAAS,OAAO,YAAYY,EAAI,OAAO,EACzC,OAAAhB,EAAI,MAAQ,GACZA,EAAI,MAAQsB,EAAU,iEACftB,CAEV,CACF,CACD,OAAOA,CACR,CAODI,EAAS,kBAAoB,SAAUY,EAAK,CAG1C,IAAIS,EAAoBP,EAASF,EAAK,IAAI,EAC1C,OAAKS,EAAkB,MAIhB,IAHL,QAAQ,KAAKA,EAAkB,KAAK,EAC7B,GAGX,EAMKrB,EAAS,eAAe,QAAQ,IACnCA,EAAS,OAAS,IASpBA,EAAS,OAAO,SAAW,SAAUsB,EAAG,CAEtC,OAAQ,OAAOA,GAAM,UAAYA,aAAa,MAChD,EAQAtB,EAAS,OAAO,WAAa,SAAUsB,EAAG,CAExC,IAAIC,EAAU,CAAA,EACd,OAAOD,GAAKC,EAAQ,SAAS,KAAKD,CAAC,IAAM,mBAC3C,EAQAtB,EAAS,OAAO,QAAU,SAAUsB,EAAG,CAErC,OAAO,MAAM,QAAQA,CAAC,CACxB,EAQAtB,EAAS,OAAO,YAAc,SAAUO,EAAO,CAE7C,OAAO,OAAOA,EAAU,GAC1B,EASAP,EAAS,OAAO,QAAU,SAAUwB,EAAKC,EAAU,CAGjD,GAAIzB,EAAS,OAAO,YAAYwB,CAAG,EACjC,MAAM,IAAI,MAAM,uBAAuB,EAGzC,GAAIxB,EAAS,OAAO,YAAYyB,CAAQ,EACtC,MAAM,IAAI,MAAM,4BAA4B,EAG9C,GAAI,CAACzB,EAAS,OAAO,WAAWyB,CAAQ,EACtC,MAAM,IAAI,MAAM,2CAA2C,EAG7D,GAAI,OAAOD,EAAI,SAAY,WACzBA,EAAI,QAAQC,CAAQ,UACXzB,EAAS,OAAO,QAAQwB,CAAG,EACpC,QAASP,EAAI,EAAGA,EAAIO,EAAI,OAAQP,IAC9BQ,EAASD,EAAIP,CAAC,EAAGA,EAAGO,CAAG,UAEhB,OAAQA,GAAS,SAC1B,QAASE,KAAQF,EACXA,EAAI,eAAeE,CAAI,GACzBD,EAASD,EAAIE,CAAI,EAAGA,EAAMF,CAAG,MAIjC,OAAM,IAAI,MAAM,wDAAwD,CAE5E,EAQAxB,EAAS,OAAO,WAAa,SAAU2B,EAAG,CAExC,OAAOA,EAAE,QAAQ,iBAAkB,EAAE,EAAE,QAAQ,MAAO,EAAE,EAAE,aAC5D,EAEA,SAASC,EAA0BC,EAAYC,EAAI,CAEjD,IAAIC,EAAmBD,EAAG,WAAW,CAAC,EACtC,MAAO,KAAOC,EAAmB,GAClC,CASD/B,EAAS,OAAO,yBAA2B4B,EAU3C5B,EAAS,OAAO,iBAAmB,SAAUgC,EAAMC,EAAeC,EAAgB,CAIhF,IAAIC,EAAc,KAAOF,EAAc,QAAQ,cAAe,MAAM,EAAI,KAEpEC,IACFC,EAAc,OAASA,GAGzB,IAAIC,EAAQ,IAAI,OAAOD,EAAa,GAAG,EACvC,OAAAH,EAAOA,EAAK,QAAQI,EAAOR,CAAwB,EAE5CI,CACT,EAOAhC,EAAS,OAAO,qBAAuB,SAAUqC,EAAK,CAGpD,OAAOA,EACJ,QAAQ,UAAW,GAAG,EACtB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,SAAU,GAAG,CAC1B,EAEA,IAAIC,EAAkB,SAAUC,EAAKC,EAAMC,EAAOC,EAAO,CAEvD,IAAIC,EAAID,GAAS,GACbE,EAAID,EAAE,QAAQ,GAAG,EAAI,GACrBE,EAAI,IAAI,OAAOL,EAAO,IAAMC,EAAO,IAAME,EAAE,QAAQ,KAAM,EAAE,CAAC,EAC5DG,EAAI,IAAI,OAAON,EAAMG,EAAE,QAAQ,KAAM,EAAE,CAAC,EACxCI,EAAM,CAAE,EACRC,EAAGrB,EAAGsB,EAAGC,EAAOC,EAEpB,EAEE,KADAH,EAAI,EACIC,EAAIJ,EAAE,KAAKN,CAAG,GACpB,GAAIO,EAAE,KAAKG,EAAE,CAAC,CAAC,EACPD,MACJrB,EAAIkB,EAAE,UACNK,EAAQvB,EAAIsB,EAAE,CAAC,EAAE,gBAEVD,GACL,CAAC,EAAEA,EAAG,CACRG,EAAMF,EAAE,MAAQA,EAAE,CAAC,EAAE,OACrB,IAAIzB,EAAM,CACR,KAAM,CAAC,MAAO0B,EAAO,IAAKvB,CAAC,EAC3B,MAAO,CAAC,MAAOA,EAAG,IAAKsB,EAAE,KAAK,EAC9B,MAAO,CAAC,MAAOA,EAAE,MAAO,IAAKE,CAAG,EAChC,WAAY,CAAC,MAAOD,EAAO,IAAKC,CAAG,CAC/C,EAEU,GADAJ,EAAI,KAAKvB,CAAG,EACR,CAACoB,EACH,OAAOG,CAEV,OAGEC,IAAMH,EAAE,UAAYlB,IAE7B,OAAOoB,CACT,EA+BA/C,EAAS,OAAO,qBAAuB,SAAUuC,EAAKC,EAAMC,EAAOC,EAAO,CAMxE,QAHIU,EAAWd,EAAiBC,EAAKC,EAAMC,EAAOC,CAAK,EACnDW,EAAU,CAAA,EAELpC,EAAI,EAAGA,EAAImC,EAAS,OAAQ,EAAEnC,EACrCoC,EAAQ,KAAK,CACXd,EAAI,MAAMa,EAASnC,CAAC,EAAE,WAAW,MAAOmC,EAASnC,CAAC,EAAE,WAAW,GAAG,EAClEsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,MAAM,MAAOmC,EAASnC,CAAC,EAAE,MAAM,GAAG,EACxDsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,KAAK,MAAOmC,EAASnC,CAAC,EAAE,KAAK,GAAG,EACtDsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,MAAM,MAAOmC,EAASnC,CAAC,EAAE,MAAM,GAAG,CAC9D,CAAK,EAEH,OAAOoC,CACT,EAWArD,EAAS,OAAO,uBAAyB,SAAUuC,EAAKe,EAAad,EAAMC,EAAOC,EAAO,CAGvF,GAAI,CAAC1C,EAAS,OAAO,WAAWsD,CAAW,EAAG,CAC5C,IAAIC,EAASD,EACbA,EAAc,UAAY,CACxB,OAAOC,CACb,CACG,CAED,IAAIH,EAAWd,EAAgBC,EAAKC,EAAMC,EAAOC,CAAK,EAClDc,EAAWjB,EACXkB,EAAML,EAAS,OAEnB,GAAIK,EAAM,EAAG,CACX,IAAIC,EAAO,CAAA,EACPN,EAAS,CAAC,EAAE,WAAW,QAAU,GACnCM,EAAK,KAAKnB,EAAI,MAAM,EAAGa,EAAS,CAAC,EAAE,WAAW,KAAK,CAAC,EAEtD,QAASnC,EAAI,EAAGA,EAAIwC,EAAK,EAAExC,EACzByC,EAAK,KACHJ,EACEf,EAAI,MAAMa,EAASnC,CAAC,EAAE,WAAW,MAAOmC,EAASnC,CAAC,EAAE,WAAW,GAAG,EAClEsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,MAAM,MAAOmC,EAASnC,CAAC,EAAE,MAAM,GAAG,EACxDsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,KAAK,MAAOmC,EAASnC,CAAC,EAAE,KAAK,GAAG,EACtDsB,EAAI,MAAMa,EAASnC,CAAC,EAAE,MAAM,MAAOmC,EAASnC,CAAC,EAAE,MAAM,GAAG,CACzD,CACT,EACUA,EAAIwC,EAAM,GACZC,EAAK,KAAKnB,EAAI,MAAMa,EAASnC,CAAC,EAAE,WAAW,IAAKmC,EAASnC,EAAI,CAAC,EAAE,WAAW,KAAK,CAAC,EAGjFmC,EAASK,EAAM,CAAC,EAAE,WAAW,IAAMlB,EAAI,QACzCmB,EAAK,KAAKnB,EAAI,MAAMa,EAASK,EAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAEvDD,EAAWE,EAAK,KAAK,EAAE,CACxB,CACD,OAAOF,CACT,EAYAxD,EAAS,OAAO,aAAe,SAAUuC,EAAKH,EAAOuB,EAAW,CAE9D,GAAI,CAAC3D,EAAS,OAAO,SAASuC,CAAG,EAC/B,KAAM,kGAER,GAAI,EAAAH,aAAiB,QACnB,KAAM,gHAER,IAAIwB,EAAUrB,EAAI,UAAUoB,GAAa,CAAC,EAAE,OAAOvB,CAAK,EACxD,OAAQwB,GAAW,EAAMA,GAAWD,GAAa,GAAMC,CACzD,EASA5D,EAAS,OAAO,aAAe,SAAUuC,EAAKsB,EAAO,CAEnD,GAAI,CAAC7D,EAAS,OAAO,SAASuC,CAAG,EAC/B,KAAM,kGAER,MAAO,CAACA,EAAI,UAAU,EAAGsB,CAAK,EAAGtB,EAAI,UAAUsB,CAAK,CAAC,CACvD,EAWA7D,EAAS,OAAO,mBAAqB,SAAU8D,EAAM,CAEnD,IAAIC,EAAS,CACX,SAAUC,EAAI,CACZ,MAAO,KAAOA,EAAG,WAAW,CAAC,EAAI,GAClC,EACD,SAAUA,EAAI,CACZ,MAAO,MAAQA,EAAG,WAAW,CAAC,EAAE,SAAS,EAAE,EAAI,GAChD,EACD,SAAUA,EAAI,CACZ,OAAOA,CACR,CACL,EAEE,OAAAF,EAAOA,EAAK,QAAQ,KAAM,SAAUE,EAAI,CACtC,GAAIA,IAAO,IAETA,EAAKD,EAAO,KAAK,MAAM,KAAK,OAAM,EAAK,CAAC,CAAC,EAAEC,CAAE,MACxC,CACL,IAAIC,EAAI,KAAK,SAEbD,EACEC,EAAI,GAAMF,EAAO,CAAC,EAAEC,CAAE,EAAIC,EAAI,IAAOF,EAAO,CAAC,EAAEC,CAAE,EAAID,EAAO,CAAC,EAAEC,CAAE,CAEpE,CACD,OAAOA,CACX,CAAG,EAEMF,CACT,EASA9D,EAAS,OAAO,OAAS,SAAiBuC,EAAK2B,EAAcC,EAAW,CAOtE,OAHAD,EAAeA,GAAc,EAE7BC,EAAY,OAAOA,GAAa,GAAG,EAC/B5B,EAAI,OAAS2B,EACR,OAAO3B,CAAG,GAEjB2B,EAAeA,EAAe3B,EAAI,OAC9B2B,EAAeC,EAAU,SAC3BA,GAAaA,EAAU,OAAOD,EAAeC,EAAU,MAAM,GAExD,OAAO5B,CAAG,EAAI4B,EAAU,MAAM,EAAED,CAAY,EAEvD,EAMI,OAAQ,QAAa,MACvB,QAAU,CACR,KAAM,SAAUE,EAAK,CAEnB,MAAMA,CAAG,CACV,EACD,IAAK,SAAUA,EAAK,CAElB,MAAMA,CAAG,CACV,EACD,MAAO,SAAUA,EAAK,CAEpB,MAAMA,CACP,CACL,GAOApE,EAAS,OAAO,QAAU,CACxB,qBAAsB,WACxB,EAKAA,EAAS,OAAO,OAAS,CACvB,KAAK,KACL,KAAK,KACL,IAAM,KACN,KAAO,KACP,kBAAkB,KAClB,kBAAkB,KAClB,kBAAkB,KAClB,QAAQ,KACR,EAAI,MACJ,GAAK,KACL,IAAM,KACN,KAAO,KACP,OAAS,KACT,eAAiB,KACjB,SAAW,KACX,YAAc,IACd,QAAU,KACV,MAAQ,KACR,UAAY,KACZ,QAAU,KACV,OAAS,KACT,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,UAAY,KACZ,IAAM,KACN,MAAQ,KACR,SAAW,KACX,MAAQ,KACR,eAAiB,KACjB,kBAAoB,IACpB,gBAAkB,IAClB,WAAa,KACb,iBAAmB,KACnB,cAAgB,KAChB,mBAAqB,KACrB,iBAAmB,KACnB,WAAa,KACb,iBAAmB,KACnB,kBAAoB,KACpB,YAAc,KACd,iBAAmB,KACnB,SAAW,KACX,cAAgB,KAChB,eAAiB,KACjB,iBAAmB,KACnB,kBAAoB,KACpB,iBAAmB,KACnB,wBAA0B,KAC1B,IAAM,KACN,kBAAoB,KACpB,qBAAuB,KACvB,WAAa,KACb,cAAgB,KAChB,IAAM,KACN,YAAc,KACd,QAAU,KACV,EAAI,MACJ,KAAO,KACP,YAAc,KACd,WAAa,KACb,YAAc,KACd,KAAO,KACP,MAAQ,KACR,UAAY,KACZ,cAAgB,KAChB,eAAiB,KACjB,cAAgB,KAChB,QAAU,KACV,WAAa,KACb,sBAAwB,KACxB,OAAS,KACT,OAAS,KACT,SAAW,KACX,KAAO,KACP,UAAY,KACZ,OAAS,KACT,SAAW,KACX,WAAa,KACb,eAAiB,KACjB,iBAAmB,YACnB,IAAM,KACN,KAAO,KACP,QAAU,KACV,QAAU,KACV,eAAiB,KACjB,KAAO,KACP,IAAM,KACN,IAAM,KACN,KAAO,KACP,MAAQ,KACR,OAAS,KACT,SAAW,KACX,KAAO,KACP,aAAe,KACf,MAAQ,KACR,WAAa,KACb,KAAO,KACP,aAAe,YACf,OAAS,KACT,UAAY,KACZ,KAAO,KACP,SAAW,KACX,aAAe,KACf,WAAa,KACb,YAAc,KACd,YAAc,KACd,mBAAqB,KACrB,0BAA4B,KAC5B,oBAAsB,KACtB,UAAY,KACZ,mBAAqB,KACrB,oBAAsB,KACtB,WAAa,KACb,aAAe,YACf,QAAU,KACV,SAAW,KACX,UAAY,KACZ,SAAW,KACX,WAAa,KACb,MAAQ,KACR,KAAO,KACP,KAAO,KACP,KAAO,KACP,KAAO,KACP,SAAW,KACX,cAAgB,KAChB,MAAQ,KACR,KAAO,KACP,KAAO,KACP,QAAU,KACV,WAAa,KACb,cAAgB,KAChB,aAAe,YACf,QAAU,KACV,aAAe,KACf,IAAM,KACN,MAAQ,KACR,gBAAkB,KAClB,gBAAkB,KAClB,UAAY,KACZ,aAAe,KACf,IAAM,KACN,sBAAwB,KACxB,KAAO,KACP,kBAAoB,KACpB,iBAAmB,KACnB,QAAU,KACV,IAAM,KACN,yBAA2B,KAC3B,QAAU,KACV,mBAAqB,KACrB,oBAAsB,KACtB,UAAY,KACZ,OAAS,KACT,KAAO,KACP,SAAW,KACX,aAAe,KACf,QAAU,KACV,MAAQ,KACR,OAAS,KACT,aAAe,KACf,QAAU,KACV,OAAS,KACT,OAAS,KACT,MAAQ,KACR,MAAQ,KACR,aAAe,KACf,UAAY,KACZ,IAAM,KACN,cAAgB,KAChB,WAAa,KACb,oBAAsB,KACtB,eAAiB,KACjB,OAAS,KACT,IAAM,KACN,KAAO,KACP,GAAK,KACL,OAAS,IACT,UAAY,KACZ,MAAQ,KACR,2BAA6B,KAC7B,yBAA2B,KAC3B,eAAiB,KACjB,OAAS,KACT,SAAW,KACX,eAAiB,KACjB,SAAW,KACX,QAAU,KACV,kBAAoB,KACpB,SAAW,KACX,cAAgB,KAChB,eAAiB,KACjB,OAAS,KACT,OAAS,KACT,YAAc,KACd,aAAe,KACf,YAAc,KACd,UAAY,KACZ,GAAK,KACL,MAAQ,KACR,KAAO,KACP,QAAU,KACV,mBAAqB,KACrB,iBAAmB,KACnB,UAAY,KACZ,OAAS,KACT,QAAU,KACV,UAAY,KACZ,QAAU,KACV,UAAY,KACZ,QAAU,KACV,UAAY,KACZ,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,OAAS,KACT,SAAW,KACX,YAAc,KACd,qBAAuB,KACvB,gBAAkB,KAClB,MAAQ,KACR,qBAAuB,KACvB,8BAAgC,IAChC,gBAAkB,KAClB,gBAAkB,KAClB,WAAa,KACb,MAAQ,KACR,SAAW,KACX,OAAS,KACT,OAAS,KACT,WAAa,KACb,MAAQ,KACR,SAAW,KACX,eAAiB,KACjB,cAAgB,KAChB,WAAa,KACb,SAAW,KACX,gBAAkB,KAClB,aAAe,KACf,wBAA0B,KAC1B,0BAA4B,YAC5B,cAAgB,KAChB,kBAAoB,KACpB,OAAS,KACT,KAAO,KACP,UAAY,KACZ,UAAY,KACZ,KAAO,KACP,eAAiB,KACjB,OAAS,KACT,4BAA8B,KAC9B,0BAA4B,mBAC5B,8BAAgC,mBAChC,mBAAqB,0BACrB,qBAAuB,KACvB,uBAAyB,0BACzB,IAAM,KACN,KAAO,KACP,gBAAkB,KAClB,KAAO,KACP,OAAS,KACT,YAAc,KACd,cAAgB,KAChB,QAAU,KACV,UAAY,KACZ,UAAY,KACZ,gBAAkB,KAClB,cAAgB,KAChB,eAAiB,KACjB,MAAQ,KACR,IAAM,KACN,gBAAkB,KAClB,aAAe,KACf,SAAW,KACX,MAAQ,KACR,WAAa,IACb,kBAAoB,KACpB,MAAQ,KACR,QAAU,KACV,QAAU,KACV,QAAU,KACV,OAAS,KACT,OAAS,KACT,cAAgB,KAChB,YAAc,YACd,MAAQ,KACR,gBAAkB,KAClB,KAAO,KACP,KAAO,KACP,KAAO,KACP,eAAiB,KACjB,KAAO,KACP,iBAAmB,KACnB,eAAiB,KACjB,OAAS,KACT,cAAgB,KAChB,iBAAmB,KACnB,eAAiB,MACjB,gCAAkC,KAClC,SAAW,KACX,aAAe,KACf,sBAAwB,KACxB,MAAQ,KACR,WAAa,KACb,cAAgB,KAChB,IAAM,KACN,KAAO,KACP,OAAS,KACT,MAAQ,KACR,QAAU,KACV,KAAO,KACP,SAAW,KACX,KAAO,KACP,OAAS,KACT,YAAc,KACd,MAAQ,KACR,gBAAkB,KAClB,cAAgB,KAChB,QAAU,KACV,KAAO,KACP,KAAO,KACP,IAAM,KACN,SAAS,KACT,MAAQ,KACR,IAAM,KACN,YAAc,KACd,aAAe,KACf,eAAiB,KACjB,WAAa,KACb,IAAM,KACN,SAAW,KACX,yBAA2B,KAC3B,sBAAwB,KACxB,cAAgB,KAChB,SAAW,KACX,MAAQ,KACR,IAAM,KACN,oBAAsB,KACtB,KAAO,KACP,gBAAkB,KAClB,qBAAuB,KACvB,eAAiB,KACjB,YAAc,KACd,eAAiB,KACjB,IAAM,KACN,kBAAoB,YACpB,WAAa,KACb,KAAO,KACP,uBAAyB,KACzB,sBAAwB,KACxB,cAAgB,KAChB,QAAU,KACV,YAAc,KACd,qBAAuB,KACvB,eAAiB,YACjB,mBAAqB,mBACrB,gBAAkB,YAClB,oBAAsB,mBACtB,qBAAuB,mBACvB,mBAAqB,mBACrB,uBAAyB,0BACzB,oBAAsB,mBACtB,wBAA0B,0BAC1B,yBAA2B,0BAC3B,yBAA2B,0BAC3B,sBAAwB,mBACxB,0BAA4B,0BAC5B,2BAA6B,0BAC7B,iBAAmB,YACnB,qBAAuB,mBACvB,kBAAoB,YACpB,sBAAwB,mBACxB,uBAAyB,mBACzB,uBAAyB,mBACzB,2BAA6B,0BAC7B,wBAA0B,mBAC1B,4BAA8B,0BAC9B,6BAA+B,0BAC/B,aAAe,IACf,IAAM,KACN,QAAU,KACV,KAAO,KACP,iBAAmB,aACnB,aAAe,KACf,MAAQ,IACR,aAAe,KACf,aAAe,KACf,YAAc,KACd,eAAiB,KACjB,WAAa,KACb,KAAO,KACP,YAAc,KACd,UAAY,KACZ,mBAAqB,KACrB,6BAA+B,KAC/B,KAAO,KACP,UAAY,KACZ,sBAAwB,KACxB,YAAc,IACd,UAAY,KACZ,WAAa,KACb,MAAQ,KACR,WAAa,KACb,aAAe,KACf,eAAiB,KACjB,iBAAmB,KACnB,YAAc,KACd,qBAAuB,KACvB,QAAU,KACV,IAAM,KACN,MAAQ,KACR,SAAW,KACX,WAAa,KACb,eAAiB,KACjB,SAAW,KACX,aAAe,KACf,iBAAmB,KACnB,SAAW,KACX,eAAiB,KACjB,KAAO,KACP,UAAY,KACZ,aAAe,KACf,MAAQ,KACR,KAAO,KACP,SAAW,KACX,cAAgB,KAChB,aAAe,YACf,eAAiB,KACjB,cAAgB,KAChB,SAAW,KACX,UAAY,KACZ,oBAAsB,KACtB,YAAc,KACd,SAAW,KACX,KAAO,KACP,IAAM,KACN,OAAS,KACT,MAAQ,KACR,KAAO,KACP,WAAa,KACb,KAAO,KACP,qBAAuB,KACvB,SAAW,KACX,KAAO,KACP,KAAO,KACP,YAAc,MACd,cAAgB,aAChB,QAAU,KACV,OAAS,KACT,YAAc,KACd,WAAa,KACb,YAAc,KACd,YAAc,KACd,iBAAmB,IACnB,cAAgB,IAChB,UAAY,KACZ,KAAO,KACP,SAAW,KACX,UAAY,KACZ,YAAc,YACd,OAAS,KACT,IAAM,KACN,cAAgB,KAChB,YAAc,YACd,UAAY,KACZ,OAAS,KACT,gBAAkB,IAClB,kBAAoB,KACpB,QAAU,KACV,KAAO,IACP,QAAU,KACV,UAAY,KACZ,OAAS,KACT,cAAgB,KAChB,eAAiB,KACjB,WAAa,KACb,aAAe,KACf,MAAQ,KACR,iBAAmB,KACnB,WAAa,KACb,eAAiB,KACjB,UAAY,KACZ,WAAa,KACb,OAAS,KACT,iBAAmB,KACnB,oBAAsB,IACtB,kBAAoB,KACpB,wBAA0B,KAC1B,iBAAmB,IACnB,uBAAyB,KACzB,gBAAkB,IAClB,WAAa,KACb,KAAO,KACP,SAAW,KACX,gBAAkB,KAClB,UAAY,KACZ,MAAQ,KACR,KAAO,KACP,UAAY,KACZ,MAAQ,KACR,aAAe,KACf,SAAW,KACX,WAAa,KACb,OAAS,KACT,MAAQ,KACR,WAAa,KACb,UAAY,KACZ,uBAAyB,IACzB,MAAQ,KACR,kBAAoB,KACpB,OAAS,KACT,KAAO,KACP,OAAS,KACT,UAAY,KACZ,WAAa,KACb,UAAY,IACZ,SAAW,KACX,GAAK,KACL,oBAAsB,KACtB,IAAM,KACN,WAAa,KACb,kBAAoB,KACpB,mBAAqB,KACrB,mBAAqB,KACrB,SAAW,KACX,YAAc,KACd,OAAS,KACT,gBAAkB,KAClB,eAAiB,KACjB,MAAQ,KACR,gBAAkB,KAClB,gBAAkB,KAClB,cAAgB,KAChB,MAAQ,KACR,IAAM,KACN,QAAU,KACV,SAAW,KACX,MAAQ,KACR,IAAM,KACN,SAAW,KACX,WAAa,KACb,aAAe,KACf,OAAS,KACT,KAAO,KACP,QAAU,KACV,YAAc,KACd,oBAAsB,KACtB,cAAgB,KAChB,qBAAuB,KACvB,WAAa,KACb,MAAQ,KACR,KAAO,KACP,MAAQ,KACR,kBAAoB,KACpB,mBAAqB,KACrB,qBAAuB,KACvB,kBAAoB,KACpB,4BAA8B,KAC9B,YAAc,KACd,SAAW,KACX,OAAS,KACT,OAAS,KACT,aAAe,KACf,iBAAmB,KACnB,0BAA4B,KAC5B,MAAQ,KACR,IAAM,KACN,QAAU,KACV,aAAe,KACf,MAAQ,KACR,WAAa,KACb,KAAO,KACP,KAAO,KACP,KAAO,KACP,SAAW,KACX,OAAS,KACT,KAAO,KACP,kBAAoB,KACpB,SAAW,KACX,KAAO,IACP,WAAa,KACb,YAAc,KACd,WAAa,KACb,YAAc,KACd,eAAiB,KACjB,WAAa,KACb,EAAI,KACJ,IAAM,KACN,UAAY,KACZ,QAAU,MACV,QAAU,KACV,eAAiB,KACjB,kBAAoB,KACpB,qBAAuB,KACvB,IAAM,KACN,WAAa,YACb,cAAgB,YAChB,iBAAmB,YACnB,SAAW,YACX,YAAc,KACd,gBAAkB,YAClB,mBAAqB,YACrB,WAAa,YACb,gBAAkB,YAClB,kBAAoB,YACpB,cAAgB,KAChB,UAAY,YACZ,aAAe,YACf,aAAe,YACf,kBAAoB,YACpB,UAAY,YACZ,qBAAuB,YACvB,uBAAyB,YACzB,cAAgB,YAChB,cAAgB,YAChB,WAAa,YACb,YAAc,YACd,YAAc,YACd,iBAAmB,YACnB,oBAAsB,KACtB,gBAAkB,KAClB,UAAY,KACZ,UAAY,KACZ,kBAAoB,KACpB,WAAa,KACb,qBAAuB,KACvB,KAAO,KACP,cAAgB,KAChB,YAAc,YACd,aAAe,KACf,eAAiB,KACjB,aAAe,KACf,KAAO,KACP,MAAQ,KACR,KAAO,KACP,cAAgB,YAChB,QAAU,KACV,KAAO,KACP,MAAQ,KACR,MAAQ,KACR,WAAa,KACb,WAAa,KACb,WAAa,KACb,UAAY,KACZ,QAAU,KACV,SAAW,KACX,iBAAmB,KACnB,iBAAmB,KACnB,iBAAmB,KACnB,SAAW,KACX,OAAS,KACT,YAAc,KACd,SAAW,KACX,KAAO,KACP,aAAe,KACf,OAAS,KACT,WAAa,KACb,cAAgB,KAChB,WAAa,KACb,SAAW,KACX,WAAa,KACb,SAAW,IACX,oBAAsB,KACtB,sBAAwB,YACxB,kBAAoB,KACpB,iBAAmB,KACnB,cAAgB,KAChB,MAAQ,KACR,OAAS,KACT,aAAe,KACf,MAAQ,KACR,UAAY,KACZ,OAAS,KACT,SAAW,KACX,iBAAmB,KACnB,aAAe,KACf,cAAgB,KAChB,KAAO,KACP,UAAY,KACZ,WAAa,KACb,cAAgB,KAChB,eAAiB,KACjB,QAAU,KACV,4BAA8B,IAC9B,UAAY,KACZ,aAAe,KACf,IAAM,KACN,SAAW,KACX,mBAAqB,KACrB,UAAY,KACZ,eAAiB,KACjB,kBAAoB,IACpB,GAAK,KACL,YAAc,YACd,cAAgB,KAChB,iBAAmB,KACnB,QAAU,KACV,YAAc,KACd,SAAW,KACX,cAAgB,KAChB,iBAAmB,KACnB,SAAW,KACX,eAAiB,KACjB,WAAa,KACb,oBAAoB,KACpB,KAAO,KACP,SAAW,KACX,+BAAiC,KACjC,MAAQ,KACR,aAAe,KACf,EAAI,KACJ,GAAK,MACL,MAAQ,KACR,QAAU,KACV,KAAO,KACP,OAAS,KACT,SAAW,KACX,GAAK,KACL,QAAU,KACV,OAAS,YACT,SAAW,KACX,QAAU,KACV,UAAY,KACZ,YAAc,KACd,GAAK,KACL,GAAK,KACL,oBAAsB,KACtB,aAAe,KACf,oBAAsB,KACtB,cAAgB,KAChB,iBAAmB,KACnB,WAAa,KACb,WAAa,KACb,cAAgB,KAChB,UAAY,IACZ,YAAc,KACd,eAAiB,KACjB,YAAc,KACd,IAAM,KACN,GAAK,KACL,QAAU,KACV,eAAiB,KACjB,eAAiB,KACjB,MAAQ,KACR,WAAa,KACb,UAAY,KACZ,SAAW,KACX,WAAa,KACb,UAAY,KACZ,WAAa,KACb,kBAAoB,IACpB,QAAU,MACV,sBAAwB,KACxB,aAAe,KACf,eAAiB,KACjB,iBAAmB,KACnB,aAAe,IACf,aAAe,KACf,MAAQ,KACR,QAAU,KACV,KAAO,KACP,IAAM,KACN,QAAU,KACV,QAAU,KACV,QAAU,KACV,gBAAkB,KAClB,UAAY,KACZ,eAAiB,KACjB,cAAgB,KAChB,MAAQ,KACR,KAAO,IACP,IAAM,KACN,KAAO,KACP,SAAW,KACX,KAAO,KACP,UAAY,KACZ,UAAY,KACZ,OAAS,KACT,MAAQ,KACR,iBAAmB,KACnB,mBAAqB,KACrB,qBAAuB,IACvB,WAAa,KACb,WAAa,KACb,YAAc,KACd,SAAW,KACX,WAAa,KACb,WAAa,KACb,YAAc,YACd,OAAS,KACT,QAAU,KACV,YAAc,KACd,YAAc,KACd,QAAU,KACV,cAAgB,KAChB,OAAS,KACT,MAAQ,KACR,YAAc,KACd,MAAQ,KACR,KAAO,KACP,YAAc,KACd,YAAc,YACd,KAAO,KACP,aAAe,KACf,eAAiB,KACjB,sBAAwB,IACxB,OAAS,KACT,SAAW,KACX,QAAU,KACV,aAAe,KACf,MAAQ,KACR,QAAU,KACV,wBAA0B,KAC1B,SAAW,IACX,OAAS,KACT,QAAU,KACV,UAAY,KACZ,WAAa,KACb,MAAQ,KACR,aAAe,KACf,YAAc,KACd,YAAc,KACd,cAAgB,KAChB,QAAU,KACV,aAAe,aACf,oBAAsB,KACtB,iCAAmC,KACnC,aAAe,KACf,mBAAqB,KACrB,iBAAmB,YACnB,IAAM,KACN,MAAQ,KACR,IAAM,KACN,cAAgB,IAChB,QAAU,KACV,WAAa,KACb,WAAa,KACb,QAAU,KACV,SAAW,KACX,gBAAkB,KAClB,OAAS,KACT,WAAa,KACb,qBAAuB,IACvB,SAAW,KACX,iBAAmB,KACnB,OAAS,IACT,WAAa,KACb,OAAS,KACT,KAAO,KACP,UAAY,KACZ,aAAe,KACf,WAAa,KACb,mBAAqB,KACrB,KAAO,KACP,MAAQ,KACR,OAAS,KACT,KAAO,KACP,UAAY,KACZ,eAAiB,KACjB,QAAU,KACV,KAAO,KACP,QAAU,KACV,eAAiB,KACjB,cAAgB,KAChB,WAAa,KACb,aAAe,YACf,eAAiB,KACjB,YAAc,KACd,wBAA0B,KAC1B,cAAgB,YAChB,GAAK,MACL,YAAc,KACd,KAAO,KACP,OAAS,KACT,MAAQ,KACR,UAAY,KACZ,UAAY,KACZ,OAAS,KACT,eAAiB,KACjB,SAAW,KACX,SAAW,KACX,SAAW,KACX,OAAS,KACT,WAAa,KACb,OAAS,KACT,KAAO,KACP,OAAS,KACT,YAAc,KACd,SAAW,KACX,OAAS,KACT,oBAAsB,KACtB,SAAW,KACX,MAAQ,KACR,WAAa,KACb,MAAQ,KACR,MAAQ,KACR,OAAS,KACT,cAAgB,IAChB,KAAO,KACP,MAAQ,KACR,SAAW,KACX,cAAgB,KAChB,OAAS,KACT,OAAS,KACT,gBAAkB,KAClB,iBAAmB,KACnB,IAAM,KACN,MAAQ,IACR,MAAQ,KACR,qBAAuB,KACvB,SAAW,KACX,aAAe,KACf,OAAS,KACT,uBAAyB,KACzB,sBAAwB,KACxB,aAAe,KACf,eAAiB,KACjB,mBAAqB,KACrB,qBAAuB,KACvB,mBAAqB,KACrB,wBAA0B,KAC1B,MAAQ,KACR,UAAY,KACZ,OAAS,KACT,WAAa,KACb,YAAc,KACd,MAAQ,KACR,UAAY,KACZ,QAAU,KACV,MAAQ,KACR,MAAQ,KACR,cAAgB,KAChB,YAAc,KACd,UAAY,KACZ,QAAU,KACV,kBAAoB,KACpB,IAAM,KACN,OAAS,KACT,KAAO,KACP,IAAM,KACN,MAAQ,KACR,cAAgB,KAChB,OAAS,KACT,UAAY,KACZ,QAAU,KACV,SAAW,KACX,SAAW,IACX,gBAAkB,KAClB,cAAgB,KAChB,QAAU,KACV,cAAgB,KAChB,eAAiB,KACjB,UAAY,KACZ,OAAS,KACT,WAAa,KACb,gBAAkB,KAClB,eAAiB,KACjB,MAAQ,KACR,MAAQ,KACR,QAAU,KACV,KAAO,KACP,MAAQ,KACR,kBAAoB,KACpB,cAAgB,KAChB,MAAQ,KACR,QAAU,KACV,kBAAoB,KACpB,iBAAmB,KACnB,KAAO,KACP,YAAc,IACd,UAAY,KACZ,UAAY,IACZ,eAAiB,KACjB,WAAa,KACb,iBAAmB,KACnB,6BAA+B,KAC/B,6BAA+B,KAC/B,kBAAoB,KACpB,kBAAoB,KACpB,uBAAyB,KACzB,sBAAwB,KACxB,uBAAyB,KACzB,cAAgB,KAChB,UAAY,KACZ,WAAa,KACb,MAAQ,KACR,QAAU,KACV,uBAAyB,KACzB,YAAc,KACd,cAAgB,YAChB,MAAQ,KACR,mBAAqB,KACrB,MAAQ,KACR,YAAc,KACd,YAAc,KACd,aAAe,KACf,aAAe,KACf,eAAiB,YACjB,QAAU,KACV,UAAY,KACZ,QAAU,KACV,KAAO,KACP,KAAO,KACP,cAAgB,KAChB,OAAS,KACT,KAAO,KACP,IAAM,KACN,mBAAqB,KACrB,UAAY,KACZ,OAAS,KACT,KAAO,KACP,YAAc,KACd,SAAW,KACX,gBAAkB,KAClB,OAAS,KACT,QAAU,KACV,MAAQ,KACR,OAAS,KACT,YAAc,IACd,iBAAmB,YACnB,WAAa,KACb,GAAK,KACL,OAAS,KACT,YAAc,KACd,OAAS,KACT,OAAS,KACT,IAAM,KACN,OAAS,KACT,QAAU,KACV,UAAY,KACZ,QAAU,KACV,cAAgB,KAChB,MAAQ,KACR,OAAS,KACT,KAAO,KACP,wBAA0B,KAC1B,iBAAmB,KACnB,QAAU,KACV,QAAU,KACV,WAAa,KACb,OAAS,KACT,eAAiB,KACjB,cAAgB,KAChB,MAAQ,KACR,QAAU,KACV,MAAQ,KACR,cAAgB,KAChB,OAAS,KACT,OAAS,KACT,GAAK,KACL,0BAA4B,KAC5B,WAAa,KACb,sBAAwB,KACxB,wBAA0B,KAC1B,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,MACR,MAAQ,MACR,MAAQ,KACR,MAAQ,KACR,MAAQ,MACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,SAAW,KACX,SAAW,KACX,SAAW,KACX,QAAU,KACV,OAAS,KACT,GAAK,KACL,iBAAmB,KACnB,EAAI,KACJ,uBAAyB,KACzB,IAAM,KACN,eAAiB,KACjB,aAAe,KACf,WAAa,KACb,OAAS,KACT,MAAQ,KACR,QAAU,KACV,WAAa,KACb,GAAK,KACL,cAAgB,KAChB,YAAc,KACd,cAAgB,YAChB,qBAAuB,KACvB,oBAAsB,KACtB,QAAU,KACV,YAAc,KACd,MAAQ,KACR,cAAgB,KAChB,WAAa,KACb,KAAO,KACP,UAAY,KACZ,qBAAuB,KACvB,GAAK,KACL,MAAQ,KACR,QAAU,KACV,mBAAqB,MACrB,qBAAuB,aACvB,MAAQ,KACR,OAAS,KACT,gBAAkB,KAClB,WAAa,KACb,iBAAmB,IACnB,aAAe,KACf,WAAa,MACb,aAAe,KACf,mBAAqB,KACrB,0BAA4B,KAC5B,oBAAsB,KACtB,mBAAqB,KACrB,oBAAsB,KACtB,cAAgB,KAChB,WAAa,KACb,UAAY,KACZ,WAAa,KACb,KAAO,KACP,KAAO,KACP,MAAQ,KACR,aAAe,YACf,gBAAkB,YAClB,mBAAqB,YACrB,WAAa,YACb,kBAAoB,YACpB,qBAAuB,YACvB,aAAe,YACf,kBAAoB,YACpB,oBAAsB,YACtB,YAAc,YACd,eAAiB,YACjB,eAAiB,YACjB,oBAAsB,YACtB,YAAc,YACd,uBAAyB,YACzB,yBAA2B,YAC3B,gBAAkB,YAClB,gBAAkB,YAClB,aAAe,YACf,cAAgB,YAChB,cAAgB,YAChB,mBAAqB,YACrB,kBAAoB,YACpB,eAAiB,KACjB,WAAa,KACb,gBAAkB,YAClB,OAAS,KACT,UAAY,KACZ,QAAU,KACV,OAAS,KACT,aAAe,KACf,EAAI,IACJ,aAAe,KACf,IAAM,KACN,SAAW,KACX,IAAM,KACN,IAAM,KACN,kBAAoB,KACpB,IAAM,KAGN,QAAY,oIACZ,SAAY,2LACd,EAYAA,EAAS,UAAY,SAAUqE,EAAkB,CAG/C,IAMItE,EAAU,CAAE,EAOZuE,EAAiB,CAAE,EAOnBC,EAAkB,CAAE,EAOpBC,EAAY,CAAE,EAKdC,EAAgBrE,EAMhBsE,EAAW,CACT,OAAQ,CAAE,EACV,IAAK,GACL,OAAQ,EAChB,EAEEC,IAMA,SAASA,GAAgB,CACvBN,EAAmBA,GAAoB,GAEvC,QAASO,KAAQzE,EACXA,EAAc,eAAeyE,CAAI,IACnC7E,EAAQ6E,CAAI,EAAIzE,EAAcyE,CAAI,GAKtC,GAAI,OAAOP,GAAqB,SAC9B,QAASxE,KAAOwE,EACVA,EAAiB,eAAexE,CAAG,IACrCE,EAAQF,CAAG,EAAIwE,EAAiBxE,CAAG,OAIvC,OAAM,MAAM,+DAAiE,OAAOwE,EACpF,sBAAsB,EAGpBtE,EAAQ,YACVC,EAAS,OAAO,QAAQD,EAAQ,WAAY8E,CAAe,CAE9D,CAQD,SAASA,EAAiBjE,EAAKJ,EAAM,CAInC,GAFAA,EAAOA,GAAQ,KAEXR,EAAS,OAAO,SAASY,CAAG,EAK9B,GAJAA,EAAMZ,EAAS,OAAO,WAAWY,CAAG,EACpCJ,EAAOI,EAGHZ,EAAS,WAAWY,CAAG,EAAG,CAC5B,QAAQ,KAAK,wBAA0BA,EAAM,8HACwB,EACrEkE,EAAuB9E,EAAS,WAAWY,CAAG,EAAGA,CAAG,EACpD,MAGR,SAAiB,CAACZ,EAAS,OAAO,YAAYE,EAAWU,CAAG,CAAC,EACrDA,EAAMV,EAAWU,CAAG,MAGpB,OAAM,MAAM,cAAgBA,EAAM,6EAA6E,EAI/G,OAAOA,GAAQ,aACjBA,EAAMA,EAAG,GAGNZ,EAAS,OAAO,QAAQY,CAAG,IAC9BA,EAAM,CAACA,CAAG,GAGZ,IAAImE,EAAWjE,EAASF,EAAKJ,CAAI,EACjC,GAAI,CAACuE,EAAS,MACZ,MAAM,MAAMA,EAAS,KAAK,EAG5B,QAAS9D,EAAI,EAAGA,EAAIL,EAAI,OAAQ,EAAEK,EAAG,CACnC,OAAQL,EAAIK,CAAC,EAAE,KAAI,CAEjB,IAAK,OACHqD,EAAe,KAAK1D,EAAIK,CAAC,CAAC,EAC1B,MAEF,IAAK,SACHsD,EAAgB,KAAK3D,EAAIK,CAAC,CAAC,EAC3B,KACH,CACD,GAAIL,EAAIK,CAAC,EAAE,eAAe,WAAW,EACnC,QAASG,KAAMR,EAAIK,CAAC,EAAE,UAChBL,EAAIK,CAAC,EAAE,UAAU,eAAeG,CAAE,GACpC4D,EAAO5D,EAAIR,EAAIK,CAAC,EAAE,UAAUG,CAAE,CAAC,CAItC,CAEF,CAOD,SAAS0D,EAAwBlE,EAAKJ,EAAM,CACtC,OAAOI,GAAQ,aACjBA,EAAMA,EAAI,IAAIZ,EAAS,SAAW,GAE/BA,EAAS,OAAO,QAAQY,CAAG,IAC9BA,EAAM,CAACA,CAAG,GAEZ,IAAIqE,EAAQnE,EAASF,EAAKJ,CAAI,EAE9B,GAAI,CAACyE,EAAM,MACT,MAAM,MAAMA,EAAM,KAAK,EAGzB,QAAShE,EAAI,EAAGA,EAAIL,EAAI,OAAQ,EAAEK,EAChC,OAAQL,EAAIK,CAAC,EAAE,KAAI,CACjB,IAAK,OACHqD,EAAe,KAAK1D,EAAIK,CAAC,CAAC,EAC1B,MACF,IAAK,SACHsD,EAAgB,KAAK3D,EAAIK,CAAC,CAAC,EAC3B,MACF,QACE,MAAM,MAAM,8CAA8C,CAC7D,CAEJ,CAOD,SAAS+D,EAAQxE,EAAMiB,EAAU,CAC/B,GAAI,CAACzB,EAAS,OAAO,SAASQ,CAAI,EAChC,MAAM,MAAM,6EAA+E,OAAOA,EAAO,QAAQ,EAGnH,GAAI,OAAOiB,GAAa,WACtB,MAAM,MAAM,mFAAqF,OAAOA,EAAW,QAAQ,EAGxH+C,EAAU,eAAehE,CAAI,IAChCgE,EAAUhE,CAAI,EAAI,IAEpBgE,EAAUhE,CAAI,EAAE,KAAKiB,CAAQ,CAC9B,CAED,SAASyD,EAAgBlD,EAAM,CAC7B,IAAImD,EAAMnD,EAAK,MAAM,MAAM,EAAE,CAAC,EAAE,OAC5BoD,EAAM,IAAI,OAAO,UAAYD,EAAM,IAAK,IAAI,EAChD,OAAOnD,EAAK,QAAQoD,EAAK,EAAE,CAC5B,CAWD,KAAK,UAAY,SAAmBC,EAASrD,EAAMjC,EAASuF,EAAS,CACnE,GAAId,EAAU,eAAea,CAAO,EAClC,QAASE,EAAK,EAAGA,EAAKf,EAAUa,CAAO,EAAE,OAAQ,EAAEE,EAAI,CACrD,IAAIC,EAAQhB,EAAUa,CAAO,EAAEE,CAAE,EAAEF,EAASrD,EAAM,KAAMjC,EAASuF,CAAO,EACpEE,GAAS,OAAOA,EAAU,MAC5BxD,EAAOwD,EAEV,CAEH,OAAOxD,CACX,EAQE,KAAK,OAAS,SAAUxB,EAAMiB,EAAU,CACtC,OAAAuD,EAAOxE,EAAMiB,CAAQ,EACd,IACX,EAOE,KAAK,SAAW,SAAUO,EAAM,CAE9B,GAAI,CAACA,EACH,OAAOA,EAGT,IAAIsD,EAAU,CACZ,YAAiB,CAAE,EACnB,cAAiB,CAAE,EACnB,WAAiB,CAAE,EACnB,MAAiB,CAAE,EACnB,QAAiB,CAAE,EACnB,YAAiB,CAAE,EACnB,WAAiB,EACjB,eAAiB,CAAE,EACnB,eAAiBhB,EACjB,gBAAiBC,EACjB,UAAiB,KACjB,aAAiB,CAAE,EACnB,SAAU,CACR,OAAQ,CAAE,EACV,IAAK,GACL,OAAQ,EACT,CACP,EAKI,OAAAvC,EAAOA,EAAK,QAAQ,KAAM,IAAI,EAK9BA,EAAOA,EAAK,QAAQ,MAAO,IAAI,EAG/BA,EAAOA,EAAK,QAAQ,QAAS;AAAA,CAAI,EACjCA,EAAOA,EAAK,QAAQ,MAAO;AAAA,CAAI,EAG/BA,EAAOA,EAAK,QAAQ,UAAW,QAAQ,EAEnCjC,EAAQ,sBACViC,EAAOkD,EAAelD,CAAI,GAI5BA,EAAO;AAAA;AAAA,EAASA,EAAO;AAAA;AAAA,EAGvBA,EAAOhC,EAAS,UAAU,OAAO,EAAEgC,EAAMjC,EAASuF,CAAO,EAQzDtD,EAAOA,EAAK,QAAQ,aAAc,EAAE,EAGpChC,EAAS,OAAO,QAAQsE,EAAgB,SAAU1D,EAAK,CACrDoB,EAAOhC,EAAS,UAAU,cAAc,EAAEY,EAAKoB,EAAMjC,EAASuF,CAAO,CAC3E,CAAK,EAGDtD,EAAOhC,EAAS,UAAU,UAAU,EAAEgC,EAAMjC,EAASuF,CAAO,EAC5DtD,EAAOhC,EAAS,UAAU,iBAAiB,EAAEgC,EAAMjC,EAASuF,CAAO,EACnEtD,EAAOhC,EAAS,UAAU,kBAAkB,EAAEgC,EAAMjC,EAASuF,CAAO,EACpEtD,EAAOhC,EAAS,UAAU,gBAAgB,EAAEgC,EAAMjC,EAASuF,CAAO,EAClEtD,EAAOhC,EAAS,UAAU,cAAc,EAAEgC,EAAMjC,EAASuF,CAAO,EAChEtD,EAAOhC,EAAS,UAAU,sBAAsB,EAAEgC,EAAMjC,EAASuF,CAAO,EACxEtD,EAAOhC,EAAS,UAAU,YAAY,EAAEgC,EAAMjC,EAASuF,CAAO,EAC9DtD,EAAOhC,EAAS,UAAU,iBAAiB,EAAEgC,EAAMjC,EAASuF,CAAO,EACnEtD,EAAOhC,EAAS,UAAU,sBAAsB,EAAEgC,EAAMjC,EAASuF,CAAO,EAGxEtD,EAAOA,EAAK,QAAQ,MAAO,IAAI,EAG/BA,EAAOA,EAAK,QAAQ,MAAO,GAAG,EAG9BA,EAAOhC,EAAS,UAAU,sBAAsB,EAAEgC,EAAMjC,EAASuF,CAAO,EAGxEtF,EAAS,OAAO,QAAQuE,EAAiB,SAAU3D,EAAK,CACtDoB,EAAOhC,EAAS,UAAU,cAAc,EAAEY,EAAKoB,EAAMjC,EAASuF,CAAO,CAC3E,CAAK,EAGDZ,EAAWY,EAAQ,SACZtD,CACX,EAQE,KAAK,aAAe,KAAK,OAAS,SAAUyD,EAAKC,EAAY,CAW3D,GARAD,EAAMA,EAAI,QAAQ,QAAS;AAAA,CAAI,EAC/BA,EAAMA,EAAI,QAAQ,MAAO;AAAA,CAAI,EAK7BA,EAAMA,EAAI,QAAQ,WAAY,UAAU,EAEpC,CAACC,EACH,GAAI,QAAU,OAAO,SACnBA,EAAa,OAAO,aAEpB,OAAM,IAAI,MAAM,2HAA2H,EAI/I,IAAIC,EAAMD,EAAW,cAAc,KAAK,EACxCC,EAAI,UAAYF,EAEhB,IAAIH,EAAU,CACZ,QAASM,EAAsBD,CAAG,CACxC,EAGIE,EAAMF,CAAG,EAST,QAHIG,EAAQH,EAAI,WACZI,EAAQ,GAEH9E,EAAI,EAAGA,EAAI6E,EAAM,OAAQ7E,IAChC8E,GAAS/F,EAAS,UAAU,mBAAmB,EAAE8F,EAAM7E,CAAC,EAAGqE,CAAO,EAGpE,SAASO,EAAOG,EAAM,CACpB,QAASC,EAAI,EAAGA,EAAID,EAAK,WAAW,OAAQ,EAAEC,EAAG,CAC/C,IAAIC,EAAQF,EAAK,WAAWC,CAAC,EACzBC,EAAM,WAAa,EACjB,CAAC,KAAK,KAAKA,EAAM,SAAS,GAAK,CAAC,SAAS,KAAKA,EAAM,SAAS,GAC/DF,EAAK,YAAYE,CAAK,EACtB,EAAED,IAEFC,EAAM,UAAYA,EAAM,UAAU,MAAM;AAAA,CAAI,EAAE,KAAK,GAAG,EACtDA,EAAM,UAAYA,EAAM,UAAU,QAAQ,SAAU,IAAI,GAEjDA,EAAM,WAAa,GAC5BL,EAAMK,CAAK,CAEd,CACF,CAKD,SAASN,EAAuBD,EAAK,CAKnC,QAHIQ,EAAOR,EAAI,iBAAiB,KAAK,EACjCS,EAAS,CAAA,EAEJnF,EAAI,EAAGA,EAAIkF,EAAK,OAAQ,EAAElF,EAEjC,GAAIkF,EAAKlF,CAAC,EAAE,oBAAsB,GAAKkF,EAAKlF,CAAC,EAAE,WAAW,QAAQ,YAAW,IAAO,OAAQ,CAC1F,IAAIoF,EAAUF,EAAKlF,CAAC,EAAE,WAAW,UAAU,KAAM,EAC7CqF,EAAWH,EAAKlF,CAAC,EAAE,WAAW,aAAa,eAAe,GAAK,GAGnE,GAAIqF,IAAa,GAEf,QADIC,EAAUJ,EAAKlF,CAAC,EAAE,WAAW,UAAU,MAAM,GAAG,EAC3CuF,EAAI,EAAGA,EAAID,EAAQ,OAAQ,EAAEC,EAAG,CACvC,IAAIC,EAAUF,EAAQC,CAAC,EAAE,MAAM,iBAAiB,EAChD,GAAIC,IAAY,KAAM,CACpBH,EAAWG,EAAQ,CAAC,EACpB,KACD,CACF,CAIHJ,EAAUrG,EAAS,OAAO,qBAAqBqG,CAAO,EAEtDD,EAAO,KAAKC,CAAO,EACnBF,EAAKlF,CAAC,EAAE,UAAY,sBAAwBqF,EAAW,iBAAmBrF,EAAE,SAAU,EAAG,cACnG,MACUmF,EAAO,KAAKD,EAAKlF,CAAC,EAAE,SAAS,EAC7BkF,EAAKlF,CAAC,EAAE,UAAY,GACpBkF,EAAKlF,CAAC,EAAE,aAAa,SAAUA,EAAE,SAAQ,CAAE,EAG/C,OAAOmF,CACR,CAED,OAAOL,CACX,EAOE,KAAK,UAAY,SAAUzF,EAAKC,EAAO,CACrCR,EAAQO,CAAG,EAAIC,CACnB,EAOE,KAAK,UAAY,SAAUD,EAAK,CAC9B,OAAOP,EAAQO,CAAG,CACtB,EAME,KAAK,WAAa,UAAY,CAC5B,OAAOP,CACX,EAOE,KAAK,aAAe,SAAUgB,EAAWP,EAAM,CAC7CA,EAAOA,GAAQ,KACfqE,EAAgB9D,EAAWP,CAAI,CACnC,EAME,KAAK,aAAe,SAAUkG,EAAe,CAC3C7B,EAAgB6B,CAAa,CACjC,EAME,KAAK,UAAY,SAAUlG,EAAM,CAC/B,GAAI,CAACH,EAAO,eAAeG,CAAI,EAC7B,MAAM,MAAMA,EAAO,uBAAuB,EAE5C,IAAIC,EAASJ,EAAOG,CAAI,EACxBiE,EAAgBjE,EAChB,QAASE,KAAUD,EACbA,EAAO,eAAeC,CAAM,IAC9BX,EAAQW,CAAM,EAAID,EAAOC,CAAM,EAGvC,EAME,KAAK,UAAY,UAAY,CAC3B,OAAO+D,CACX,EAQE,KAAK,gBAAkB,SAAU1D,EAAW,CACrCf,EAAS,OAAO,QAAQe,CAAS,IACpCA,EAAY,CAACA,CAAS,GAExB,QAASO,EAAI,EAAGA,EAAIP,EAAU,OAAQ,EAAEO,EAAG,CAEzC,QADIV,EAAMG,EAAUO,CAAC,EACZL,EAAI,EAAGA,EAAIqD,EAAe,OAAQ,EAAErD,EACvCqD,EAAerD,CAAC,IAAML,GACxB0D,EAAe,OAAOrD,EAAG,CAAC,EAG9B,QAAS0F,EAAK,EAAGA,EAAKpC,EAAgB,OAAQ,EAAEoC,EAC1CpC,EAAgBoC,CAAE,IAAM/F,GAC1B2D,EAAgB,OAAOoC,EAAI,CAAC,CAGjC,CACL,EAME,KAAK,iBAAmB,UAAY,CAClC,MAAO,CACL,SAAUrC,EACV,OAAQC,CACd,CACA,EAOE,KAAK,YAAc,SAAUqC,EAAK,CAChC,OAAIA,EACKlC,EAAS,IAETA,EAAS,MAEtB,EAME,KAAK,kBAAoB,UAAY,CACnC,OAAOA,EAAS,MACpB,EAOE,KAAK,iBAAmB,SAAUpE,EAAKC,EAAO,CAC5CmE,EAAS,OAAOpE,CAAG,EAAIC,CAC3B,EAME,KAAK,mBAAqB,SAAUsG,EAAQ,CAC1CnC,EAAS,OAASmC,CACtB,EAME,KAAK,gBAAkB,SAAUD,EAAK,CACpClC,EAAS,IAAMkC,CACnB,CACA,EAKA5G,EAAS,UAAU,UAAW,SAAUgC,EAAMjC,EAASuF,EAAS,CAG9DtD,EAAOsD,EAAQ,UAAU,UAAU,iBAAkBtD,EAAMjC,EAASuF,CAAO,EAE3E,IAAIwB,EAAiB,SAAUjF,EAAYkF,EAAUC,EAAQC,EAAKC,EAAIC,EAAIC,EAAO,CAO/E,GANIpH,EAAS,OAAO,YAAYoH,CAAK,IACnCA,EAAQ,IAEVJ,EAASA,EAAO,cAGZnF,EAAW,OAAO,8BAA8B,EAAI,GACtDoF,EAAM,WACG,CAACA,EAOV,GANKD,IAEHA,EAASD,EAAS,YAAW,EAAG,QAAQ,QAAS,GAAG,GAEtDE,EAAM,IAAMD,EAER,CAAChH,EAAS,OAAO,YAAYsF,EAAQ,MAAM0B,CAAM,CAAC,EACpDC,EAAM3B,EAAQ,MAAM0B,CAAM,EACrBhH,EAAS,OAAO,YAAYsF,EAAQ,QAAQ0B,CAAM,CAAC,IACtDI,EAAQ9B,EAAQ,QAAQ0B,CAAM,OAGhC,QAAOnF,EAKXoF,EAAMA,EAAI,QAAQjH,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EAExG,IAAIqH,EAAS,YAAcJ,EAAM,IAEjC,OAAIG,IAAU,IAAMA,IAAU,OAC5BA,EAAQA,EAAM,QAAQ,KAAM,QAAQ,EAEpCA,EAAQA,EAAM,QAAQpH,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EAC5GqH,GAAU,WAAaD,EAAQ,KAK7BrH,EAAQ,sBAAwB,CAAC,KAAK,KAAKkH,CAAG,IAEhDI,GAAU,kDAGZA,GAAU,IAAMN,EAAW,OAEpBM,CACX,EAGE,OAAArF,EAAOA,EAAK,QAAQ,0DAA2D8E,CAAc,EAI7F9E,EAAOA,EAAK,QAAQ,6FAClB8E,CAAc,EAGhB9E,EAAOA,EAAK,QAAQ,qHAClB8E,CAAc,EAKhB9E,EAAOA,EAAK,QAAQ,2BAA4B8E,CAAc,EAG1D/G,EAAQ,aACViC,EAAOA,EAAK,QAAQ,sDAAuD,SAAUsF,EAAIC,EAAIC,EAAQC,EAAUC,EAAU,CACvH,GAAIF,IAAW,KACb,OAAOD,EAAKE,EAId,GAAI,CAACzH,EAAS,OAAO,SAASD,EAAQ,cAAc,EAClD,MAAM,IAAI,MAAM,wCAAwC,EAE1D,IAAI4H,EAAM5H,EAAQ,eAAe,QAAQ,QAAS2H,CAAQ,EACtDE,EAAS,GACb,OAAI7H,EAAQ,uBACV6H,EAAS,kDAEJL,EAAK,YAAcI,EAAM,IAAMC,EAAS,IAAMH,EAAW,MACtE,CAAK,GAGHzF,EAAOsD,EAAQ,UAAU,UAAU,gBAAiBtD,EAAMjC,EAASuF,CAAO,EACnEtD,CACT,CAAC,EAID,IAAI6F,EAAkB,8FAClBC,EAAkB,0GAClBC,EAAkB,sDAClBC,EAAkB,oGAClBC,EAAkB,gEAElBC,EAAc,SAAUnI,EAAS,CAE/B,OAAO,SAAUuH,EAAIa,EAAmBC,EAAMC,EAAIC,EAAIC,EAAqBC,EAAoB,CAC7FJ,EAAOA,EAAK,QAAQpI,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EAC1G,IAAIyI,EAASL,EACTM,EAAS,GACTd,EAAS,GACTe,EAASR,GAAqB,GAC9BS,EAASJ,GAAsB,GACnC,MAAI,UAAU,KAAKJ,CAAI,IACrBA,EAAOA,EAAK,QAAQ,UAAW,aAAa,GAE1CrI,EAAQ,oCAAsCwI,IAChDG,EAASH,GAEPxI,EAAQ,uBACV6H,EAAS,kDAEJe,EAAM,YAAcP,EAAO,IAAMR,EAAS,IAAMa,EAAS,OAASC,EAASE,CAC1F,CACK,EAEDC,EAAc,SAAU9I,EAASuF,EAAS,CAExC,OAAO,SAAUzD,EAAYiH,EAAGhF,EAAM,CACpC,IAAIiF,EAAO,UACX,OAAAD,EAAIA,GAAK,GACThF,EAAO9D,EAAS,UAAU,sBAAsB,EAAE8D,EAAM/D,EAASuF,CAAO,EACpEvF,EAAQ,cACVgJ,EAAO/I,EAAS,OAAO,mBAAmB+I,EAAOjF,CAAI,EACrDA,EAAO9D,EAAS,OAAO,mBAAmB8D,CAAI,GAE9CiF,EAAOA,EAAOjF,EAETgF,EAAI,YAAcC,EAAO,KAAOjF,EAAO,MACtD,CACA,EAEA9D,EAAS,UAAU,YAAa,SAAUgC,EAAMjC,EAASuF,EAAS,CAGhE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAE7EtD,EAAOA,EAAK,QAAQ+F,EAAeG,EAAYnI,CAAO,CAAC,EACvDiC,EAAOA,EAAK,QAAQiG,EAAgBY,EAAY9I,EAASuF,CAAO,CAAC,EAEjEtD,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EAErEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,sBAAuB,SAAUgC,EAAMjC,EAASuF,EAAS,CAG1E,OAAKvF,EAAQ,qBAIbiC,EAAOsD,EAAQ,UAAU,UAAU,6BAA8BtD,EAAMjC,EAASuF,CAAO,EAEnFvF,EAAQ,mCACViC,EAAOA,EAAK,QAAQ8F,EAAiBI,EAAYnI,CAAO,CAAC,EAEzDiC,EAAOA,EAAK,QAAQ6F,EAAgBK,EAAYnI,CAAO,CAAC,EAE1DiC,EAAOA,EAAK,QAAQgG,EAAiBa,EAAY9I,EAASuF,CAAO,CAAC,EAElEtD,EAAOsD,EAAQ,UAAU,UAAU,4BAA6BtD,EAAMjC,EAASuF,CAAO,GAE/EtD,CACT,CAAC,EAMDhC,EAAS,UAAU,aAAc,SAAUgC,EAAMjC,EAASuF,EAAS,CAGjE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,oBAAqBtD,EAAMjC,EAASuF,CAAO,EAI9EtD,EAAOhC,EAAS,UAAU,aAAa,EAAEgC,EAAMjC,EAASuF,CAAO,EAC/DtD,EAAOhC,EAAS,UAAU,SAAS,EAAEgC,EAAMjC,EAASuF,CAAO,EAG3DtD,EAAOhC,EAAS,UAAU,gBAAgB,EAAEgC,EAAMjC,EAASuF,CAAO,EAElEtD,EAAOhC,EAAS,UAAU,OAAO,EAAEgC,EAAMjC,EAASuF,CAAO,EACzDtD,EAAOhC,EAAS,UAAU,YAAY,EAAEgC,EAAMjC,EAASuF,CAAO,EAC9DtD,EAAOhC,EAAS,UAAU,QAAQ,EAAEgC,EAAMjC,EAASuF,CAAO,EAM1DtD,EAAOhC,EAAS,UAAU,gBAAgB,EAAEgC,EAAMjC,EAASuF,CAAO,EAClEtD,EAAOhC,EAAS,UAAU,YAAY,EAAEgC,EAAMjC,EAASuF,CAAO,EAE9DtD,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAEtEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,cAAe,SAAUgC,EAAMjC,EAASuF,EAAS,CAGlEtD,EAAOsD,EAAQ,UAAU,UAAU,qBAAsBtD,EAAMjC,EAASuF,CAAO,EAG/EtD,EAAOA,EAAO;AAAA;AAAA,EAEd,IAAIoD,EAAM,oCAEV,OAAIrF,EAAQ,2BACVqF,EAAM,8BAGRpD,EAAOA,EAAK,QAAQoD,EAAK,SAAU4D,EAAI,CAGrC,OAAAA,EAAKA,EAAG,QAAQ,mBAAoB,EAAE,EAGtCA,EAAKA,EAAG,QAAQ,MAAO,EAAE,EAEzBA,EAAKA,EAAG,QAAQ,aAAc,EAAE,EAChCA,EAAKhJ,EAAS,UAAU,kBAAkB,EAAEgJ,EAAIjJ,EAASuF,CAAO,EAChE0D,EAAKhJ,EAAS,UAAU,YAAY,EAAEgJ,EAAIjJ,EAASuF,CAAO,EAE1D0D,EAAKA,EAAG,QAAQ,UAAW,MAAM,EAEjCA,EAAKA,EAAG,QAAQ,6BAA8B,SAAUnH,EAAYC,EAAI,CACtE,IAAImH,EAAMnH,EAEV,OAAAmH,EAAMA,EAAI,QAAQ,QAAS,IAAI,EAC/BA,EAAMA,EAAI,QAAQ,MAAO,EAAE,EACpBA,CACb,CAAK,EAEMjJ,EAAS,UAAU,WAAW,EAAE;AAAA,EAAmBgJ,EAAK;AAAA,eAAmBjJ,EAASuF,CAAO,CACtG,CAAG,EAEDtD,EAAOsD,EAAQ,UAAU,UAAU,oBAAqBtD,EAAMjC,EAASuF,CAAO,EACvEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,aAAc,SAAUgC,EAAMjC,EAASuF,EAAS,CAGjEtD,EAAOsD,EAAQ,UAAU,UAAU,oBAAqBtD,EAAMjC,EAASuF,CAAO,EAG9EtD,GAAQ,KAER,IAAIkH,EAAU,mEACd,OAAAlH,EAAOA,EAAK,QAAQkH,EAAS,SAAUrH,EAAYC,EAAIuG,EAAI,CACzD,IAAIc,EAAYrH,EACZsH,EAAWf,EACXlF,EAAM;AAAA,EAEV,OAAAgG,EAAYnJ,EAAS,UAAU,SAAS,EAAEmJ,EAAWpJ,EAASuF,CAAO,EACrE6D,EAAYnJ,EAAS,UAAU,YAAY,EAAEmJ,EAAWpJ,EAASuF,CAAO,EACxE6D,EAAYnJ,EAAS,UAAU,OAAO,EAAEmJ,EAAWpJ,EAASuF,CAAO,EACnE6D,EAAYA,EAAU,QAAQ,QAAS,EAAE,EACzCA,EAAYA,EAAU,QAAQ,QAAS,EAAE,EAErCpJ,EAAQ,0BACVoD,EAAM,IAGRgG,EAAY,cAAgBA,EAAYhG,EAAM,gBAEvCnD,EAAS,UAAU,WAAW,EAAEmJ,EAAWpJ,EAASuF,CAAO,EAAI8D,CAC1E,CAAG,EAGDpH,EAAOA,EAAK,QAAQ,KAAM,EAAE,EAE5BA,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EACtEtD,CACT,CAAC,EA2BDhC,EAAS,UAAU,YAAa,SAAUgC,EAAMjC,EAASuF,EAAS,CAGhE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAEzE,OAAQtD,EAAU,MACpBA,EAAO,IAETA,EAAOA,EAAK,QAAQ,sCAClB,SAAUH,EAAYC,EAAIuG,EAAIC,EAAI,CAChC,IAAI9B,EAAI8B,EACR,OAAA9B,EAAIA,EAAE,QAAQ,aAAc,EAAE,EAC9BA,EAAIA,EAAE,QAAQ,WAAY,EAAE,EAC5BA,EAAIxG,EAAS,UAAU,YAAY,EAAEwG,EAAGzG,EAASuF,CAAO,EACxDkB,EAAI1E,EAAK,SAAW0E,EAAI,UACxBA,EAAIxG,EAAS,UAAU,eAAe,EAAEwG,EAAGzG,EAASuF,CAAO,EACpDkB,CACR,CACL,EAEExE,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EACrEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,uBAAwB,SAAUgC,EAAMjC,EAASuF,EAAS,CAG3E,GAAI,CAACvF,EAAQ,qBACX,OAAOiC,EAGTA,EAAOsD,EAAQ,UAAU,UAAU,8BAA+BtD,EAAMjC,EAASuF,CAAO,EAExF,IAAI+D,EAAU,OACVC,EAAgB;AAAA,EAChBlC,EAAQ,GACRmC,EAAU;AAAA,EACVC,EAAO,GACP9E,EAAW,GAEX,OAAOY,EAAQ,SAAS,OAAO,QAAY,MAC7CgE,EAAgB,aAAgBhE,EAAQ,SAAS,OAAO,QAAU;AAAA,EAClE+D,EAAU/D,EAAQ,SAAS,OAAO,QAAQ,SAAQ,EAAG,eACjD+D,IAAY,QAAUA,IAAY,WACpCE,EAAU,2BAId,QAASE,KAAQnE,EAAQ,SAAS,OAChC,GAAIA,EAAQ,SAAS,OAAO,eAAemE,CAAI,EAC7C,OAAQA,EAAK,YAAa,EAAA,CACxB,IAAK,UACH,MAEF,IAAK,QACHrC,EAAQ,UAAa9B,EAAQ,SAAS,OAAO,MAAQ;AAAA,EACrD,MAEF,IAAK,UACC+D,IAAY,QAAUA,IAAY,QACpCE,EAAU,kBAAoBjE,EAAQ,SAAS,OAAO,QAAU;AAAA,EAEhEiE,EAAU,iCAAmCjE,EAAQ,SAAS,OAAO,QAAU;AAAA,EAEjF,MAEF,IAAK,WACL,IAAK,OACHkE,EAAO,UAAYlE,EAAQ,SAAS,OAAOmE,CAAI,EAAI,IACnD/E,GAAY,eAAiB+E,EAAO,cAAgBnE,EAAQ,SAAS,OAAOmE,CAAI,EAAI;AAAA,EACpF,MAEF,QACE/E,GAAY,eAAiB+E,EAAO,cAAgBnE,EAAQ,SAAS,OAAOmE,CAAI,EAAI;AAAA,CACvF,CAIL,OAAAzH,EAAOsH,EAAgB,QAAUE,EAAO;AAAA;AAAA,EAAgBpC,EAAQmC,EAAU7E,EAAW;AAAA;AAAA,EAAsB1C,EAAK,KAAI,EAAK;AAAA;AAAA,SAEzHA,EAAOsD,EAAQ,UAAU,UAAU,6BAA8BtD,EAAMjC,EAASuF,CAAO,EAChFtD,CACT,CAAC,EAKDhC,EAAS,UAAU,QAAS,SAAUgC,EAAMjC,EAASuF,EAAS,CAE5D,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,eAAgBtD,EAAMjC,EAASuF,CAAO,EAGzEtD,EAAOA,EAAK,QAAQ,YAAa,MAAM,EAGvCA,EAAOA,EAAK,QAAQ,MAAO,MAAM,EAGjCA,EAAOA,EAAK,QAAQ,aAAc,SAAUH,EAAYC,EAAI,CAK1D,QAJI4H,EAAc5H,EACd6H,EAAY,EAAID,EAAY,OAAS,EAGhCzI,EAAI,EAAGA,EAAI0I,EAAW1I,IAC7ByI,GAAe,IAGjB,OAAOA,CACX,CAAG,EAGD1H,EAAOA,EAAK,QAAQ,MAAO,MAAM,EACjCA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAE7BA,EAAOsD,EAAQ,UAAU,UAAU,cAAetD,EAAMjC,EAASuF,CAAO,EACjEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,WAAY,SAAUgC,EAAMjC,EAASuF,EAAS,CAG/D,OAAKvF,EAAQ,WAIbiC,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EAE5EtD,EAAOA,EAAK,QAAQ,UAAW,GAAG,EAElCA,EAAOsD,EAAQ,UAAU,UAAU,iBAAkBtD,EAAMjC,EAASuF,CAAO,GAEpEtD,CACT,CAAC,EAODhC,EAAS,UAAU,QAAS,SAAUgC,EAAMjC,EAASuF,EAAS,CAG5D,GAAI,CAACvF,EAAQ,MACX,OAAOiC,EAGTA,EAAOsD,EAAQ,UAAU,UAAU,eAAgBtD,EAAMjC,EAASuF,CAAO,EAEzE,IAAIsE,EAAW,cAEf,OAAA5H,EAAOA,EAAK,QAAQ4H,EAAU,SAAUtC,EAAIuC,EAAW,CACrD,OAAI7J,EAAS,OAAO,OAAO,eAAe6J,CAAS,EAC1C7J,EAAS,OAAO,OAAO6J,CAAS,EAElCvC,CACX,CAAG,EAEDtF,EAAOsD,EAAQ,UAAU,UAAU,cAAetD,EAAMjC,EAASuF,CAAO,EAEjEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,sBAAuB,SAAUgC,EAAMjC,EAASuF,EAAS,CAE1E,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,6BAA8BtD,EAAMjC,EAASuF,CAAO,EAIvFtD,EAAOA,EAAK,QAAQ,qCAAsC,OAAO,EAGjEA,EAAOA,EAAK,QAAQ,oBAAqB,MAAM,EAG/CA,EAAOA,EAAK,QAAQ,KAAM,MAAM,EAGhCA,EAAOA,EAAK,QAAQ,KAAM,MAAM,EAEhCA,EAAOsD,EAAQ,UAAU,UAAU,4BAA6BtD,EAAMjC,EAASuF,CAAO,EAC/EtD,CACT,CAAC,EAaDhC,EAAS,UAAU,yBAA0B,SAAUgC,EAAMjC,EAASuF,EAAS,CAE7E,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,gCAAiCtD,EAAMjC,EAASuF,CAAO,EAE1FtD,EAAOA,EAAK,QAAQ,UAAWhC,EAAS,OAAO,wBAAwB,EACvEgC,EAAOA,EAAK,QAAQ,+BAAgChC,EAAS,OAAO,wBAAwB,EAE5FgC,EAAOsD,EAAQ,UAAU,UAAU,+BAAgCtD,EAAMjC,EAASuF,CAAO,EAClFtD,CACT,CAAC,EAODhC,EAAS,UAAU,aAAc,SAAUgC,EAAMjC,EAASuF,EAAS,CAGjE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,oBAAqBtD,EAAMjC,EAASuF,CAAO,EAI9EtD,EAAOA,EACJ,QAAQ,KAAM,OAAO,EAErB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EAEpB,QAAQ,qBAAsBhC,EAAS,OAAO,wBAAwB,EAEzEgC,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EACtEtD,CACT,CAAC,EAMDhC,EAAS,UAAU,wCAAyC,SAAUgC,EAAMjC,EAASuF,EAAS,CAE5FtD,EAAOsD,EAAQ,UAAU,UAAU,+CAAgDtD,EAAMjC,EAASuF,CAAO,EAGzG,IAAIwE,EAAW,uCACXC,EAAW,gDAEf,OAAA/H,EAAOA,EAAK,QAAQ8H,EAAM,SAAUjI,EAAY,CAC9C,OAAOA,EACJ,QAAQ,qBAAsB,KAAK,EACnC,QAAQ,gBAAiB7B,EAAS,OAAO,wBAAwB,CACxE,CAAG,EAEDgC,EAAOA,EAAK,QAAQ+H,EAAU,SAAUlI,EAAY,CAClD,OAAOA,EACJ,QAAQ,gBAAiB7B,EAAS,OAAO,wBAAwB,CACxE,CAAG,EAEDgC,EAAOsD,EAAQ,UAAU,UAAU,8CAA+CtD,EAAMjC,EAASuF,CAAO,EACjGtD,CACT,CAAC,EAYDhC,EAAS,UAAU,mBAAoB,SAAUgC,EAAMjC,EAASuF,EAAS,CAIvE,OAAKvF,EAAQ,cAIbiC,EAAOsD,EAAQ,UAAU,UAAU,0BAA2BtD,EAAMjC,EAASuF,CAAO,EAEpFtD,GAAQ,KAERA,EAAOA,EAAK,QAAQ,2EAA4E,SAAUH,EAAYmI,EAAO1D,EAAU6C,EAAW,CAChJ,IAAIhG,EAAOpD,EAAQ,wBAA2B,GAAK;AAAA,EAGnD,OAAAoJ,EAAYnJ,EAAS,UAAU,YAAY,EAAEmJ,EAAWpJ,EAASuF,CAAO,EACxE6D,EAAYnJ,EAAS,UAAU,OAAO,EAAEmJ,EAAWpJ,EAASuF,CAAO,EACnE6D,EAAYA,EAAU,QAAQ,QAAS,EAAE,EACzCA,EAAYA,EAAU,QAAQ,QAAS,EAAE,EAEzCA,EAAY,cAAgB7C,EAAW,WAAaA,EAAW,aAAeA,EAAW,IAAM,IAAM,IAAM6C,EAAYhG,EAAM,gBAE7HgG,EAAYnJ,EAAS,UAAU,WAAW,EAAEmJ,EAAWpJ,EAASuF,CAAO,EAKhE;AAAA;AAAA,KAAYA,EAAQ,aAAa,KAAK,CAAC,KAAMzD,EAAY,UAAWsH,CAAS,CAAC,EAAI,GAAK;AAAA;AAAA,CAClG,CAAG,EAGDnH,EAAOA,EAAK,QAAQ,KAAM,EAAE,EAErBsD,EAAQ,UAAU,UAAU,yBAA0BtD,EAAMjC,EAASuF,CAAO,GA7B1EtD,CA8BX,CAAC,EAEDhC,EAAS,UAAU,YAAa,SAAUgC,EAAMjC,EAASuF,EAAS,CAEhE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAC7EtD,EAAOA,EAAK,QAAQ,eAAgB,EAAE,EACtCA,EAAO;AAAA;AAAA,KAAYsD,EAAQ,YAAY,KAAKtD,CAAI,EAAI,GAAK;AAAA;AAAA,EACzDA,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EACrEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,eAAgB,SAAUgC,EAAMjC,EAASuF,EAAS,CAEnEtD,EAAOsD,EAAQ,UAAU,UAAU,sBAAuBtD,EAAMjC,EAASuF,CAAO,EAEhF,IAAI2E,EAAU,SAAUpI,EAAYqI,EAAO1H,EAAMC,EAAO,CACtD,IAAI0G,EAAY3G,EAAOxC,EAAS,UAAU,YAAY,EAAEkK,EAAOnK,EAASuF,CAAO,EAAI7C,EACnF,MAAO,MAAQ6C,EAAQ,WAAW,KAAK6D,CAAS,EAAI,GAAK,GAC7D,EAGE,OAAAnH,EAAOhC,EAAS,OAAO,uBAAuBgC,EAAMiI,EAAS,iBAAkB,UAAW,KAAK,EAE/FjI,EAAOsD,EAAQ,UAAU,UAAU,qBAAsBtD,EAAMjC,EAASuF,CAAO,EACxEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,cAAe,SAAUgC,EAAMjC,EAASuF,EAAS,CAGlE,OAAO,SAAUzD,EAAYC,EAAI,CAC/B,IAAIqI,EAAYrI,EAGhB,OAAAqI,EAAYA,EAAU,QAAQ,QAAS;AAAA,CAAI,EAC3CA,EAAYA,EAAU,QAAQ,MAAO,EAAE,EAGvCA,EAAYA,EAAU,QAAQ,QAAS,EAAE,EAGzCA,EAAY;AAAA;AAAA,KAAY7E,EAAQ,YAAY,KAAK6E,CAAS,EAAI,GAAK;AAAA;AAAA,EAE5DA,CACX,CACA,CAAC,EAEDnK,EAAS,UAAU,iBAAkB,SAAUgC,EAAMjC,EAASuF,EAAS,CAErEtD,EAAOsD,EAAQ,UAAU,UAAU,wBAAyBtD,EAAMjC,EAASuF,CAAO,EAElF,IAAI8E,EAAY,CACV,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,aACA,QACA,KACA,KACA,KACA,SACA,WACA,OACA,WACA,SACA,OACA,QACA,UACA,SACA,SACA,MACA,UACA,QACA,UACA,QACA,SACA,SACA,SACA,SACA,QACA,GACD,EACDH,EAAU,SAAUpI,EAAYqI,EAAO1H,EAAMC,EAAO,CAClD,IAAIJ,EAAMR,EAGV,OAAIW,EAAK,OAAO,cAAc,IAAM,KAClCH,EAAMG,EAAO8C,EAAQ,UAAU,SAAS4E,CAAK,EAAIzH,GAE5C;AAAA;AAAA,KAAY6C,EAAQ,YAAY,KAAKjD,CAAG,EAAI,GAAK;AAAA;AAAA,CAChE,EAEMtC,EAAQ,2BAEViC,EAAOA,EAAK,QAAQ,mBAAoB,SAAUsF,EAAI+C,EAAQ,CAC5D,MAAO,OAASA,EAAS,MAC/B,CAAK,GAIH,QAAS,EAAI,EAAG,EAAID,EAAU,OAAQ,EAAE,EAOtC,QALIE,EACAC,EAAW,IAAI,OAAO,YAAcH,EAAU,CAAC,EAAI,aAAc,IAAI,EACrEI,EAAW,IAAMJ,EAAU,CAAC,EAAI,YAChCK,EAAW,KAAOL,EAAU,CAAC,EAAI,KAE7BE,EAAWtK,EAAS,OAAO,aAAagC,EAAMuI,CAAI,KAAO,IAAI,CAMnE,IAAIG,EAAW1K,EAAS,OAAO,aAAagC,EAAMsI,CAAQ,EAEtDK,EAAc3K,EAAS,OAAO,uBAAuB0K,EAAS,CAAC,EAAGT,EAASO,EAASC,EAAU,IAAI,EAGtG,GAAIE,IAAgBD,EAAS,CAAC,EAC5B,MAEF1I,EAAO0I,EAAS,CAAC,EAAE,OAAOC,CAAW,CACtC,CAGH,OAAA3I,EAAOA,EAAK,QAAQ,oDAClBhC,EAAS,UAAU,aAAa,EAAEgC,EAAMjC,EAASuF,CAAO,CAAC,EAG3DtD,EAAOhC,EAAS,OAAO,uBAAuBgC,EAAM,SAAUK,EAAK,CACjE,MAAO;AAAA;AAAA,KAAYiD,EAAQ,YAAY,KAAKjD,CAAG,EAAI,GAAK;AAAA;AAAA,CAC5D,EAAK,cAAe,MAAO,IAAI,EAG7BL,EAAOA,EAAK,QAAQ,yDAClBhC,EAAS,UAAU,aAAa,EAAEgC,EAAMjC,EAASuF,CAAO,CAAC,EAE3DtD,EAAOsD,EAAQ,UAAU,UAAU,uBAAwBtD,EAAMjC,EAASuF,CAAO,EAC1EtD,CACT,CAAC,EAKDhC,EAAS,UAAU,gBAAiB,SAAUgC,EAAMjC,EAASuF,EAAS,CAEpEtD,EAAOsD,EAAQ,UAAU,UAAU,uBAAwBtD,EAAMjC,EAASuF,CAAO,EAEjF,SAASsF,EAAcC,EAAM,CAC3B,MAAO,MAAQvF,EAAQ,WAAW,KAAKuF,CAAI,EAAI,GAAK,GACrD,CAGD,OAAA7I,EAAOA,EAAK,QAAQ,eAAgB,SAAUsF,EAAI,CAChD,OAAOsD,EAAatD,CAAE,CAC1B,CAAG,EAGDtF,EAAOA,EAAK,QAAQ,4BAA6B,SAAUsF,EAAI,CAC7D,OAAOsD,EAAatD,CAAE,CAC1B,CAAG,EAGDtF,EAAOA,EAAK,QAAQ,oCAAqC,SAAUsF,EAAI,CACrE,OAAOsD,EAAatD,CAAE,CAC1B,CAAG,EAGDtF,EAAOA,EAAK,QAAQ,aAAc,SAAUsF,EAAI,CAC9C,OAAOsD,EAAatD,CAAE,CAC1B,CAAG,EAIDtF,EAAOsD,EAAQ,UAAU,UAAU,sBAAuBtD,EAAMjC,EAASuF,CAAO,EACzEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,kBAAmB,SAAUgC,EAAMjC,EAASuF,EAAS,CAEtEtD,EAAOsD,EAAQ,UAAU,UAAU,yBAA0BtD,EAAMjC,EAASuF,CAAO,EAEnF,QAASrE,EAAI,EAAGA,EAAIqE,EAAQ,WAAW,OAAQ,EAAErE,EAAG,CAKlD,QAJI6J,EAAUxF,EAAQ,WAAWrE,CAAC,EAE9B8J,EAAQ,EAEL,WAAW,KAAKD,CAAO,GAAG,CAC/B,IAAIE,EAAM,OAAO,GAEjB,GADAF,EAAUA,EAAQ,QAAQ,KAAOE,EAAM,IAAK1F,EAAQ,WAAW0F,CAAG,CAAC,EAC/DD,IAAU,GAAI,CAChB,QAAQ,MAAM,wCAAwC,EACtD,KACD,CACD,EAAEA,CACH,CACD/I,EAAOA,EAAK,QAAQ,KAAOf,EAAI,IAAK6J,CAAO,CAC5C,CAED,OAAA9I,EAAOsD,EAAQ,UAAU,UAAU,wBAAyBtD,EAAMjC,EAASuF,CAAO,EAC3EtD,CACT,CAAC,EAKDhC,EAAS,UAAU,kBAAmB,SAAUgC,EAAMjC,EAASuF,EAAS,CAEtEtD,EAAOsD,EAAQ,UAAU,UAAU,yBAA0BtD,EAAMjC,EAASuF,CAAO,EAEnF,IAAI2E,EAAU,SAAUpI,EAAYqI,EAAO1H,EAAMC,EAAO,CAEtD,IAAI0G,EAAY3G,EAAOxC,EAAS,UAAU,YAAY,EAAEkK,EAAOnK,EAASuF,CAAO,EAAI7C,EACnF,MAAO;AAAA;AAAA,KAAY6C,EAAQ,aAAa,KAAK,CAAC,KAAMzD,EAAY,UAAWsH,CAAS,CAAC,EAAI,GAAK;AAAA;AAAA,CAClG,EAGE,OAAAnH,EAAOhC,EAAS,OAAO,uBAAuBgC,EAAMiI,EAAS,yCAA0C,2BAA4B,KAAK,EAExIjI,EAAOsD,EAAQ,UAAU,UAAU,wBAAyBtD,EAAMjC,EAASuF,CAAO,EAC3EtD,CACT,CAAC,EAEDhC,EAAS,UAAU,UAAW,SAAUgC,EAAMjC,EAASuF,EAAS,CAG9DtD,EAAOsD,EAAQ,UAAU,UAAU,iBAAkBtD,EAAMjC,EAASuF,CAAO,EAE3E,IAAI2F,EAAoB,MAAM,SAASlL,EAAQ,gBAAgB,CAAC,EAAK,EAAI,SAASA,EAAQ,gBAAgB,EAStGmL,EAAiBnL,EAAQ,kBAAqB,gCAAkC,6BAChFoL,EAAiBpL,EAAQ,kBAAqB,gCAAkC,6BAEpFiC,EAAOA,EAAK,QAAQkJ,EAAe,SAAUrJ,EAAYC,EAAI,CAE3D,IAAIsJ,EAAYpL,EAAS,UAAU,WAAW,EAAE8B,EAAI/B,EAASuF,CAAO,EAChE+F,EAAOtL,EAAQ,WAAc,GAAK,QAAUuL,EAASxJ,CAAE,EAAI,IAC3DyJ,EAASN,EACTO,EAAY,KAAOD,EAASF,EAAM,IAAMD,EAAY,MAAQG,EAAS,IACzE,OAAOvL,EAAS,UAAU,WAAW,EAAEwL,EAAWzL,EAASuF,CAAO,CACtE,CAAG,EAEDtD,EAAOA,EAAK,QAAQmJ,EAAe,SAAUM,EAAY3J,EAAI,CAC3D,IAAIsJ,EAAYpL,EAAS,UAAU,WAAW,EAAE8B,EAAI/B,EAASuF,CAAO,EAChE+F,EAAOtL,EAAQ,WAAc,GAAK,QAAUuL,EAASxJ,CAAE,EAAI,IAC3DyJ,EAASN,EAAmB,EAC5BO,EAAY,KAAOD,EAASF,EAAM,IAAMD,EAAY,MAAQG,EAAS,IACzE,OAAOvL,EAAS,UAAU,WAAW,EAAEwL,EAAWzL,EAASuF,CAAO,CACtE,CAAG,EASD,IAAIoG,EAAY3L,EAAQ,8BAAiC,oCAAsC,oCAE/FiC,EAAOA,EAAK,QAAQ0J,EAAU,SAAU7J,EAAYC,EAAIuG,EAAI,CAC1D,IAAIsD,EAAQtD,EACRtI,EAAQ,qBACV4L,EAAQtD,EAAG,QAAQ,qBAAsB,EAAE,GAG7C,IAAIuD,EAAO5L,EAAS,UAAU,WAAW,EAAE2L,EAAO5L,EAASuF,CAAO,EAC9D+F,EAAOtL,EAAQ,WAAc,GAAK,QAAUuL,EAASjD,CAAE,EAAI,IAC3DkD,EAASN,EAAmB,EAAInJ,EAAG,OACnC+J,EAAS,KAAON,EAASF,EAAM,IAAMO,EAAO,MAAQL,EAAS,IAEjE,OAAOvL,EAAS,UAAU,WAAW,EAAE6L,EAAQ9L,EAASuF,CAAO,CACnE,CAAG,EAED,SAASgG,EAAUrI,EAAG,CACpB,IAAImE,EACA0E,EAGJ,GAAI/L,EAAQ,mBAAoB,CAC9B,IAAImK,EAAQjH,EAAE,MAAM,iBAAiB,EACjCiH,GAASA,EAAM,CAAC,IAClBjH,EAAIiH,EAAM,CAAC,EAEd,CAED,OAAA9C,EAAQnE,EAGJjD,EAAS,OAAO,SAASD,EAAQ,cAAc,EACjD+L,EAAS/L,EAAQ,eACRA,EAAQ,iBAAmB,GACpC+L,EAAS,WAETA,EAAS,GAGN/L,EAAQ,oBACXqH,EAAQ0E,EAAS1E,GAGfrH,EAAQ,qBACVqH,EAAQA,EACL,QAAQ,KAAM,GAAG,EAEjB,QAAQ,SAAU,EAAE,EACpB,QAAQ,MAAO,EAAE,EACjB,QAAQ,MAAO,EAAE,EAGjB,QAAQ,yCAA0C,EAAE,EACpD,cACMrH,EAAQ,YACjBqH,EAAQA,EACL,QAAQ,KAAM,GAAG,EAEjB,QAAQ,SAAU,GAAG,EACrB,QAAQ,MAAO,GAAG,EAClB,QAAQ,MAAO,GAAG,EAElB,QAAQ,QAAS,GAAG,EACpB,cAEHA,EAAQA,EACL,QAAQ,SAAU,EAAE,EACpB,cAGDrH,EAAQ,oBACVqH,EAAQ0E,EAAS1E,GAGf9B,EAAQ,eAAe8B,CAAK,EAC9BA,EAAQA,EAAQ,IAAO9B,EAAQ,eAAe8B,CAAK,IAEnD9B,EAAQ,eAAe8B,CAAK,EAAI,EAE3BA,CACR,CAED,OAAApF,EAAOsD,EAAQ,UAAU,UAAU,gBAAiBtD,EAAMjC,EAASuF,CAAO,EACnEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,iBAAkB,SAAUgC,EAAMjC,EAASuF,EAAS,CAErEtD,EAAOsD,EAAQ,UAAU,UAAU,wBAAyBtD,EAAMjC,EAASuF,CAAO,EAElF,IAAIhF,EAAMN,EAAS,UAAU,WAAW,EAAE,SAAUD,EAASuF,CAAO,EACpE,OAAAtD,EAAOA,EAAK,QAAQ,4BAA6B1B,CAAG,EACpD0B,EAAOA,EAAK,QAAQ,6BAA8B1B,CAAG,EACrD0B,EAAOA,EAAK,QAAQ,4BAA6B1B,CAAG,EAEpD0B,EAAOsD,EAAQ,UAAU,UAAU,uBAAwBtD,EAAMjC,EAASuF,CAAO,EAC1EtD,CACT,CAAC,EAKDhC,EAAS,UAAU,SAAU,SAAUgC,EAAMjC,EAASuF,EAAS,CAG7DtD,EAAOsD,EAAQ,UAAU,UAAU,gBAAiBtD,EAAMjC,EAASuF,CAAO,EAE1E,IAAIyG,EAAoB,yJACpBC,EAAoB,qIACpBC,EAAoB,qKACpBC,EAAoB,mDACpBC,EAAoB,4BAExB,SAASC,EAAqBvK,EAAYwK,EAASrF,EAAQC,EAAKqF,EAAOC,EAAQrF,EAAIE,EAAO,CACxF,OAAAH,EAAMA,EAAI,QAAQ,MAAO,EAAE,EACpBuF,EAAe3K,EAAYwK,EAASrF,EAAQC,EAAKqF,EAAOC,EAAQrF,EAAIE,CAAK,CACjF,CAED,SAASoF,EAAe3K,EAAYwK,EAASrF,EAAQC,EAAKqF,EAAOC,EAAQrF,EAAIE,EAAO,CAElF,IAAIqF,EAAUnH,EAAQ,MAClBoH,EAAUpH,EAAQ,QAClBqH,EAAUrH,EAAQ,YAQtB,GANA0B,EAASA,EAAO,cAEXI,IACHA,EAAQ,IAGNvF,EAAW,OAAO,8BAA8B,EAAI,GACtDoF,EAAM,WAEGA,IAAQ,IAAMA,IAAQ,KAO/B,IANID,IAAW,IAAMA,IAAW,QAE9BA,EAASqF,EAAQ,YAAW,EAAG,QAAQ,QAAS,GAAG,GAErDpF,EAAM,IAAMD,EAER,CAAChH,EAAS,OAAO,YAAYyM,EAAMzF,CAAM,CAAC,EAC5CC,EAAMwF,EAAMzF,CAAM,EACbhH,EAAS,OAAO,YAAY0M,EAAQ1F,CAAM,CAAC,IAC9CI,EAAQsF,EAAQ1F,CAAM,GAEnBhH,EAAS,OAAO,YAAY2M,EAAM3F,CAAM,CAAC,IAC5CsF,EAAQK,EAAM3F,CAAM,EAAE,MACtBuF,EAASI,EAAM3F,CAAM,EAAE,YAGzB,QAAOnF,EAIXwK,EAAUA,EACP,QAAQ,KAAM,QAAQ,EAEtB,QAAQrM,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EAEjGiH,EAAMA,EAAI,QAAQjH,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EACxG,IAAIqH,EAAS,aAAeJ,EAAM,UAAYoF,EAAU,IAExD,OAAIjF,GAASpH,EAAS,OAAO,SAASoH,CAAK,IACzCA,EAAQA,EACL,QAAQ,KAAM,QAAQ,EAEtB,QAAQpH,EAAS,OAAO,QAAQ,qBAAsBA,EAAS,OAAO,wBAAwB,EACjGqH,GAAU,WAAaD,EAAQ,KAG7BkF,GAASC,IACXD,EAAUA,IAAU,IAAO,OAASA,EACpCC,EAAUA,IAAW,IAAO,OAASA,EAErClF,GAAU,WAAaiF,EAAQ,IAC/BjF,GAAU,YAAckF,EAAS,KAGnClF,GAAU,MAEHA,CACR,CAGD,OAAArF,EAAOA,EAAK,QAAQkK,EAAiBM,CAAa,EAKlDxK,EAAOA,EAAK,QAAQiK,EAAcG,CAAmB,EAGrDpK,EAAOA,EAAK,QAAQgK,EAAaQ,CAAa,EAG9CxK,EAAOA,EAAK,QAAQ+J,EAAcS,CAAa,EAG/CxK,EAAOA,EAAK,QAAQmK,EAAmBK,CAAa,EAEpDxK,EAAOsD,EAAQ,UAAU,UAAU,eAAgBtD,EAAMjC,EAASuF,CAAO,EAClEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,iBAAkB,SAAUgC,EAAMjC,EAASuF,EAAS,CAGrEtD,EAAOsD,EAAQ,UAAU,UAAU,wBAAyBtD,EAAMjC,EAASuF,CAAO,EAMlF,SAASsH,EAAavK,EAAKG,EAAMC,EAAO,CAMtC,OAAOD,EAAOH,EAAMI,CACrB,CAGD,OAAI1C,EAAQ,2BACViC,EAAOA,EAAK,QAAQ,0BAA2B,SAAUsF,EAAIjF,EAAK,CAChE,OAAOuK,EAAavK,EAAK,eAAgB,gBAAgB,CAC/D,CAAK,EACDL,EAAOA,EAAK,QAAQ,wBAAyB,SAAUsF,EAAIjF,EAAK,CAC9D,OAAOuK,EAAavK,EAAK,WAAY,WAAW,CACtD,CAAK,EACDL,EAAOA,EAAK,QAAQ,sBAAuB,SAAUsF,EAAIjF,EAAK,CAC5D,OAAOuK,EAAavK,EAAK,OAAQ,OAAO,CAC9C,CAAK,IAEDL,EAAOA,EAAK,QAAQ,sBAAuB,SAAUsF,EAAIrE,EAAG,CAC1D,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,eAAgB,gBAAgB,EAAIqE,CACnF,CAAK,EACDtF,EAAOA,EAAK,QAAQ,oBAAqB,SAAUsF,EAAIrE,EAAG,CACxD,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,WAAY,WAAW,EAAIqE,CAC1E,CAAK,EACDtF,EAAOA,EAAK,QAAQ,sBAAuB,SAAUsF,EAAIrE,EAAG,CAE1D,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,OAAQ,OAAO,EAAIqE,CAClE,CAAK,GAICvH,EAAQ,yBACViC,EAAOA,EAAK,QAAQ,8CAA+C,SAAUsF,EAAIuF,EAAMxK,EAAK,CAC1F,OAAOuK,EAAavK,EAAKwK,EAAO,eAAgB,gBAAgB,CACtE,CAAK,EACD7K,EAAOA,EAAK,QAAQ,0CAA2C,SAAUsF,EAAIuF,EAAMxK,EAAK,CACtF,OAAOuK,EAAavK,EAAKwK,EAAO,WAAY,WAAW,CAC7D,CAAK,EACD7K,EAAOA,EAAK,QAAQ,sCAAuC,SAAUsF,EAAIuF,EAAMxK,EAAK,CAClF,OAAOuK,EAAavK,EAAKwK,EAAO,OAAQ,OAAO,CACrD,CAAK,IAED7K,EAAOA,EAAK,QAAQ,4BAA6B,SAAUsF,EAAIrE,EAAG,CAChE,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,eAAgB,gBAAgB,EAAIqE,CACnF,CAAK,EACDtF,EAAOA,EAAK,QAAQ,wBAAyB,SAAUsF,EAAIrE,EAAG,CAC5D,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,WAAY,WAAW,EAAIqE,CAC1E,CAAK,EACDtF,EAAOA,EAAK,QAAQ,wBAAyB,SAAUsF,EAAIrE,EAAG,CAE5D,MAAQ,MAAM,KAAKA,CAAC,EAAK2J,EAAa3J,EAAG,OAAQ,OAAO,EAAIqE,CAClE,CAAK,GAIHtF,EAAOsD,EAAQ,UAAU,UAAU,uBAAwBtD,EAAMjC,EAASuF,CAAO,EAC1EtD,CACT,CAAC,EAKDhC,EAAS,UAAU,QAAS,SAAUgC,EAAMjC,EAASuF,EAAS,CAU5D,SAASwH,EAAkBC,EAASC,EAAc,CAqBhD1H,EAAQ,aAGRyH,EAAUA,EAAQ,QAAQ,UAAW;AAAA,CAAI,EAGzCA,GAAW,KAEX,IAAI3H,EAAM,mHACN6H,EAAiB,mBAAmB,KAAKF,CAAO,EAKpD,OAAIhN,EAAQ,uCACVqF,EAAM,gHAGR2H,EAAUA,EAAQ,QAAQ3H,EAAK,SAAUvD,EAAYC,EAAIuG,EAAIC,EAAI4E,EAAIC,EAASC,EAAS,CACrFA,EAAWA,GAAWA,EAAQ,KAAM,IAAK,GAEzC,IAAIC,EAAOrN,EAAS,UAAU,SAAS,EAAEkN,EAAInN,EAASuF,CAAO,EACzDgI,EAAc,GAGlB,OAAIH,GAAWpN,EAAQ,YACrBuN,EAAc,yDACdD,EAAOA,EAAK,QAAQ,sBAAuB,UAAY,CACrD,IAAIE,EAAM,oGACV,OAAIH,IACFG,GAAO,YAETA,GAAO,IACAA,CACjB,CAAS,GAWHF,EAAOA,EAAK,QAAQ,+BAAgC,SAAUG,EAAK,CACjE,MAAO,KAAOA,CACtB,CAAO,EAKG1L,GAAOuL,EAAK,OAAO,QAAQ,EAAI,IACjCA,EAAOrN,EAAS,UAAU,kBAAkB,EAAEqN,EAAMtN,EAASuF,CAAO,EACpE+H,EAAOrN,EAAS,UAAU,YAAY,EAAEqN,EAAMtN,EAASuF,CAAO,IAG9D+H,EAAOrN,EAAS,UAAU,OAAO,EAAEqN,EAAMtN,EAASuF,CAAO,EACzD+H,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAC7BA,EAAOrN,EAAS,UAAU,gBAAgB,EAAEqN,EAAMtN,EAASuF,CAAO,EAGlE+H,EAAOA,EAAK,QAAQ,SAAU;AAAA;AAAA,CAAM,EAChCJ,EACFI,EAAOrN,EAAS,UAAU,YAAY,EAAEqN,EAAMtN,EAASuF,CAAO,EAE9D+H,EAAOrN,EAAS,UAAU,WAAW,EAAEqN,EAAMtN,EAASuF,CAAO,GAKjE+H,EAAOA,EAAK,QAAQ,KAAM,EAAE,EAE5BA,EAAQ,MAAQC,EAAc,IAAMD,EAAO;AAAA,EAEpCA,CACb,CAAK,EAGDN,EAAUA,EAAQ,QAAQ,MAAO,EAAE,EAEnCzH,EAAQ,aAEJ0H,IACFD,EAAUA,EAAQ,QAAQ,OAAQ,EAAE,GAG/BA,CACR,CAED,SAASU,EAAkBC,EAAMC,EAAU,CAEzC,GAAIA,IAAa,KAAM,CACrB,IAAIC,EAAMF,EAAK,MAAM,YAAY,EACjC,GAAIE,GAAOA,EAAI,CAAC,IAAM,IACpB,MAAO,WAAaA,EAAI,CAAC,EAAI,GAEhC,CACD,MAAO,EACR,CASD,SAASC,EAAuBH,EAAMC,EAAUX,EAAc,CAG5D,IAAIc,EAAS/N,EAAQ,qCAAwC,kBAAoB,sBAC7EgO,EAAShO,EAAQ,qCAAwC,kBAAoB,sBAC7EiO,EAAcL,IAAa,KAAQG,EAAQC,EAC3C1G,EAAS,GAEb,GAAIqG,EAAK,OAAOM,CAAU,IAAM,IAC7B,SAASC,EAAS5L,EAAK,CACtB,IAAIU,EAAMV,EAAI,OAAO2L,CAAU,EAC3BE,EAAQT,EAAiBC,EAAMC,CAAQ,EACvC5K,IAAQ,IAEVsE,GAAU;AAAA;AAAA,GAAUsG,EAAWO,EAAQ;AAAA,EAAQpB,EAAiBzK,EAAI,MAAM,EAAGU,CAAG,EAAG,CAAC,CAACiK,CAAY,EAAI,KAAOW,EAAW;AAAA,EAGvHA,EAAYA,IAAa,KAAQ,KAAO,KACxCK,EAAcL,IAAa,KAAQG,EAAQC,EAG3CE,EAAQ5L,EAAI,MAAMU,CAAG,CAAC,GAEtBsE,GAAU;AAAA;AAAA,GAAUsG,EAAWO,EAAQ;AAAA,EAAQpB,EAAiBzK,EAAK,CAAC,CAAC2K,CAAY,EAAI,KAAOW,EAAW;AAAA,CAE5G,GAAED,CAAI,MACF,CACL,IAAIQ,EAAQT,EAAiBC,EAAMC,CAAQ,EAC3CtG,EAAS;AAAA;AAAA,GAAUsG,EAAWO,EAAQ;AAAA,EAAQpB,EAAiBY,EAAM,CAAC,CAACV,CAAY,EAAI,KAAOW,EAAW;AAAA,CAC1G,CAED,OAAOtG,CACR,CAGD,OAAArF,EAAOsD,EAAQ,UAAU,UAAU,eAAgBtD,EAAMjC,EAASuF,CAAO,EAGzEtD,GAAQ,KAEJsD,EAAQ,WACVtD,EAAOA,EAAK,QAAQ,4FAClB,SAAUH,EAAY6L,EAAMrF,EAAI,CAC9B,IAAIsF,EAAYtF,EAAG,OAAO,QAAQ,EAAI,GAAM,KAAO,KACnD,OAAOwF,EAAsBH,EAAMC,EAAU,EAAI,CAClD,CACP,EAEI3L,EAAOA,EAAK,QAAQ,sGAClB,SAAUH,EAAYC,EAAI4L,EAAMpF,EAAI,CAClC,IAAIqF,EAAYrF,EAAG,OAAO,QAAQ,EAAI,GAAM,KAAO,KACnD,OAAOuF,EAAsBH,EAAMC,EAAU,EAAK,CACnD,CACP,EAIE3L,EAAOA,EAAK,QAAQ,KAAM,EAAE,EAC5BA,EAAOsD,EAAQ,UAAU,UAAU,cAAetD,EAAMjC,EAASuF,CAAO,EACjEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,WAAY,SAAUgC,EAAMjC,EAASuF,EAAS,CAG/D,GAAI,CAACvF,EAAQ,SACX,OAAOiC,EAGTA,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EAE5E,SAAS6I,EAAuB9H,EAAS,CAEvCf,EAAQ,SAAS,IAAMe,EAIvBA,EAAUA,EAEP,QAAQ,KAAM,OAAO,EAErB,QAAQ,KAAM,QAAQ,EAEzBA,EAAUA,EAAQ,QAAQ,UAAW,GAAG,EACxCA,EAAQ,QAAQ,4BAA6B,SAAUiB,EAAIhH,EAAKC,EAAO,CACrE,OAAA+E,EAAQ,SAAS,OAAOhF,CAAG,EAAIC,EACxB,EACb,CAAK,CACF,CAED,OAAAyB,EAAOA,EAAK,QAAQ,qCAAsC,SAAUoM,EAAYvH,EAAQR,EAAS,CAC/F,OAAA8H,EAAsB9H,CAAO,EACtB,IACX,CAAG,EAEDrE,EAAOA,EAAK,QAAQ,qCAAsC,SAAUoM,EAAYvH,EAAQR,EAAS,CAC/F,OAAIQ,IACFvB,EAAQ,SAAS,OAASuB,GAE5BsH,EAAsB9H,CAAO,EACtB,IACX,CAAG,EAEDrE,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAE7BA,EAAOsD,EAAQ,UAAU,UAAU,iBAAkBtD,EAAMjC,EAASuF,CAAO,EACpEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,UAAW,SAAUgC,EAAMjC,EAASuF,EAAS,CAE9D,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,iBAAkBtD,EAAMjC,EAASuF,CAAO,EAI3EtD,EAAOA,EAAK,QAAQ,mBAAoB,IAAI,EAG5CA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAE7BA,EAAOsD,EAAQ,UAAU,UAAU,gBAAiBtD,EAAMjC,EAASuF,CAAO,EACnEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,aAAc,SAAUgC,EAAMjC,EAASuF,EAAS,CAGjEtD,EAAOsD,EAAQ,UAAU,UAAU,oBAAqBtD,EAAMjC,EAASuF,CAAO,EAE9EtD,EAAOA,EAAK,QAAQ,QAAS,EAAE,EAC/BA,EAAOA,EAAK,QAAQ,QAAS,EAAE,EAM/B,QAJIqM,EAAQrM,EAAK,MAAM,SAAS,EAC5BsM,EAAW,CAAE,EACbnL,EAAMkL,EAAM,OAEPpN,EAAI,EAAGA,EAAIkC,EAAKlC,IAAK,CAC5B,IAAIsB,EAAM8L,EAAMpN,CAAC,EAEbsB,EAAI,OAAO,gBAAgB,GAAK,EAClC+L,EAAS,KAAK/L,CAAG,EAIRA,EAAI,OAAO,IAAI,GAAK,IAC7BA,EAAMvC,EAAS,UAAU,WAAW,EAAEuC,EAAKxC,EAASuF,CAAO,EAC3D/C,EAAMA,EAAI,QAAQ,aAAc,KAAK,EACrCA,GAAO,OACP+L,EAAS,KAAK/L,CAAG,EAEpB,CAID,IADAY,EAAMmL,EAAS,OACVrN,EAAI,EAAGA,EAAIkC,EAAKlC,IAAK,CAMxB,QALIkJ,EAAY,GACZoE,EAAaD,EAASrN,CAAC,EACvBuN,EAAW,GAGR,gBAAgB,KAAKD,CAAU,GAAG,CACvC,IAAIvE,EAAQ,OAAO,GACfgB,EAAQ,OAAO,GAEfhB,IAAU,IACZG,EAAY7E,EAAQ,YAAY0F,CAAG,EAG/BwD,EAEFrE,EAAYnK,EAAS,UAAU,YAAY,EAAEsF,EAAQ,aAAa0F,CAAG,EAAE,KAAMjL,EAASuF,CAAO,EAE7F6E,EAAY7E,EAAQ,aAAa0F,CAAG,EAAE,UAG1Cb,EAAYA,EAAU,QAAQ,MAAO,MAAM,EAE3CoE,EAAaA,EAAW,QAAQ,4BAA6BpE,CAAS,EAElE,gCAAgC,KAAKoE,CAAU,IACjDC,EAAW,GAEd,CACDF,EAASrN,CAAC,EAAIsN,CACf,CACD,OAAAvM,EAAOsM,EAAS,KAAK;AAAA,CAAI,EAEzBtM,EAAOA,EAAK,QAAQ,QAAS,EAAE,EAC/BA,EAAOA,EAAK,QAAQ,QAAS,EAAE,EACxBsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,CAC/E,CAAC,EAKDtF,EAAS,UAAU,eAAgB,SAAUY,EAAKoB,EAAMjC,EAASuF,EAAS,CAGxE,GAAI1E,EAAI,OACNoB,EAAOpB,EAAI,OAAOoB,EAAMsD,EAAQ,UAAWvF,CAAO,UAEzCa,EAAI,MAAO,CAEpB,IAAI6N,EAAK7N,EAAI,MACP6N,aAAc,SAClBA,EAAK,IAAI,OAAOA,EAAI,GAAG,GAEzBzM,EAAOA,EAAK,QAAQyM,EAAI7N,EAAI,OAAO,CACpC,CAED,OAAOoB,CACT,CAAC,EAMDhC,EAAS,UAAU,YAAa,SAAUgC,EAAMjC,EAASuF,EAAS,CAGhE,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAC7EtD,EAAOhC,EAAS,UAAU,WAAW,EAAEgC,EAAMjC,EAASuF,CAAO,EAC7DtD,EAAOhC,EAAS,UAAU,uCAAuC,EAAEgC,EAAMjC,EAASuF,CAAO,EACzFtD,EAAOhC,EAAS,UAAU,wBAAwB,EAAEgC,EAAMjC,EAASuF,CAAO,EAI1EtD,EAAOhC,EAAS,UAAU,QAAQ,EAAEgC,EAAMjC,EAASuF,CAAO,EAC1DtD,EAAOhC,EAAS,UAAU,SAAS,EAAEgC,EAAMjC,EAASuF,CAAO,EAK3DtD,EAAOhC,EAAS,UAAU,WAAW,EAAEgC,EAAMjC,EAASuF,CAAO,EAC7DtD,EAAOhC,EAAS,UAAU,qBAAqB,EAAEgC,EAAMjC,EAASuF,CAAO,EACvEtD,EAAOhC,EAAS,UAAU,OAAO,EAAEgC,EAAMjC,EAASuF,CAAO,EACzDtD,EAAOhC,EAAS,UAAU,WAAW,EAAEgC,EAAMjC,EAASuF,CAAO,EAC7DtD,EAAOhC,EAAS,UAAU,gBAAgB,EAAEgC,EAAMjC,EAASuF,CAAO,EAClEtD,EAAOhC,EAAS,UAAU,eAAe,EAAEgC,EAAMjC,EAASuF,CAAO,EACjEtD,EAAOhC,EAAS,UAAU,UAAU,EAAEgC,EAAMjC,EAASuF,CAAO,EAG5DtD,EAAOhC,EAAS,UAAU,eAAe,EAAEgC,EAAMjC,EAASuF,CAAO,EAGjEtD,EAAOhC,EAAS,UAAU,qBAAqB,EAAEgC,EAAMjC,EAASuF,CAAO,EAGnEvF,EAAQ,iBAGL,SAAS,KAAKiC,CAAI,IACrBA,EAAOA,EAAK,QAAQ,OAAQ;AAAA,CAAU,GAIxCA,EAAOA,EAAK,QAAQ,SAAU;AAAA,CAAU,EAG1CA,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,EACrEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,gBAAiB,SAAUgC,EAAMjC,EAASuF,EAAS,CAGpE,SAASsH,EAAavK,EAAK,CACzB,OAAItC,EAAQ,qBACVsC,EAAMrC,EAAS,UAAU,qBAAqB,EAAEqC,EAAKtC,EAASuF,CAAO,GAEhE,QAAUjD,EAAM,QACxB,CAED,OAAItC,EAAQ,gBACViC,EAAOsD,EAAQ,UAAU,UAAU,uBAAwBtD,EAAMjC,EAASuF,CAAO,EACjFtD,EAAOA,EAAK,QAAQ,8BAA+B,SAAUsF,EAAIjF,EAAK,CAAE,OAAOuK,EAAYvK,CAAG,CAAI,CAAA,EAClGL,EAAOsD,EAAQ,UAAU,UAAU,sBAAuBtD,EAAMjC,EAASuF,CAAO,GAG3EtD,CACT,CAAC,EAODhC,EAAS,UAAU,uBAAwB,SAAUgC,EAAMjC,EAASuF,EAAS,CAG3E,IAAIlD,EAAc,sKACdsM,EAAc,gNAGlB1M,GAAQ,KAER,IAAI2M,EAAc,SAAU9M,EAAYmF,EAAQC,EAAKqF,EAAOC,EAAQqC,EAAYxH,EAAO,CAIrF,OADAJ,EAASA,EAAO,cACZhF,EAAK,YAAW,EAAG,MAAMgF,CAAM,EAAE,OAAS,EAAI,EACzCnF,GAELoF,EAAI,MAAM,wBAAwB,EAEpC3B,EAAQ,MAAM0B,CAAM,EAAIC,EAAI,QAAQ,MAAO,EAAE,EAE7C3B,EAAQ,MAAM0B,CAAM,EAAIhH,EAAS,UAAU,qBAAqB,EAAEiH,EAAKlH,EAASuF,CAAO,EAGrFsJ,EAGKA,EAAaxH,GAGhBA,IACF9B,EAAQ,QAAQ0B,CAAM,EAAII,EAAM,QAAQ,OAAQ,QAAQ,GAEtDrH,EAAQ,oBAAsBuM,GAASC,IACzCjH,EAAQ,YAAY0B,CAAM,EAAI,CAC5B,MAAQsF,EACR,OAAQC,CAClB,GAIW,IACX,EAGE,OAAAvK,EAAOA,EAAK,QAAQ0M,EAAaC,CAAW,EAE5C3M,EAAOA,EAAK,QAAQI,EAAOuM,CAAW,EAGtC3M,EAAOA,EAAK,QAAQ,KAAM,EAAE,EAErBA,CACT,CAAC,EAEDhC,EAAS,UAAU,SAAU,SAAUgC,EAAMjC,EAASuF,EAAS,CAG7D,GAAI,CAACvF,EAAQ,OACX,OAAOiC,EAGT,IAAI6M,EAAiB,uHAEjBC,EAAiB,oHAErB,SAASC,EAAaC,EAAO,CAC3B,MAAI,eAAe,KAAKA,CAAK,EACpB,4BACE,qBAAqB,KAAKA,CAAK,EACjC,6BACE,sBAAsB,KAAKA,CAAK,EAClC,8BAEA,EAEV,CAED,SAASC,EAAcpD,EAAQqC,EAAO,CACpC,IAAIgB,EAAK,GACT,OAAArD,EAASA,EAAO,QAEZ9L,EAAQ,gBAAkBA,EAAQ,iBACpCmP,EAAK,QAAUrD,EAAO,QAAQ,KAAM,GAAG,EAAE,YAAa,EAAG,KAE3DA,EAAS7L,EAAS,UAAU,WAAW,EAAE6L,EAAQ9L,EAASuF,CAAO,EAE1D,MAAQ4J,EAAKhB,EAAQ,IAAMrC,EAAS;AAAA,CAC5C,CAED,SAASsD,EAAYC,EAAMlB,EAAO,CAChC,IAAImB,EAAUrP,EAAS,UAAU,WAAW,EAAEoP,EAAMrP,EAASuF,CAAO,EACpE,MAAO,MAAQ4I,EAAQ,IAAMmB,EAAU;AAAA,CACxC,CAED,SAASC,EAAYC,EAASC,EAAO,CAInC,QAHIC,EAAK;AAAA;AAAA;AAAA,EACLC,EAASH,EAAQ,OAEZtO,EAAI,EAAGA,EAAIyO,EAAQ,EAAEzO,EAC5BwO,GAAMF,EAAQtO,CAAC,EAIjB,IAFAwO,GAAM;AAAA;AAAA;AAAA,EAEDxO,EAAI,EAAGA,EAAIuO,EAAM,OAAQ,EAAEvO,EAAG,CACjCwO,GAAM;AAAA,EACN,QAAS9I,EAAK,EAAGA,EAAK+I,EAAQ,EAAE/I,EAC9B8I,GAAMD,EAAMvO,CAAC,EAAE0F,CAAE,EAEnB8I,GAAM;AAAA,CACP,CACD,OAAAA,GAAM;AAAA;AAAA,EACCA,CACR,CAED,SAASE,EAAYC,EAAU,CAC7B,IAAI3O,EAAG4O,EAAaD,EAAS,MAAM;AAAA,CAAI,EAEvC,IAAK3O,EAAI,EAAGA,EAAI4O,EAAW,OAAQ,EAAE5O,EAE/B,YAAY,KAAK4O,EAAW5O,CAAC,CAAC,IAChC4O,EAAW5O,CAAC,EAAI4O,EAAW5O,CAAC,EAAE,QAAQ,YAAa,EAAE,GAEnD,YAAY,KAAK4O,EAAW5O,CAAC,CAAC,IAChC4O,EAAW5O,CAAC,EAAI4O,EAAW5O,CAAC,EAAE,QAAQ,YAAa,EAAE,GAGvD4O,EAAW5O,CAAC,EAAIjB,EAAS,UAAU,WAAW,EAAE6P,EAAW5O,CAAC,EAAGlB,EAASuF,CAAO,EAGjF,IAAIwK,EAAaD,EAAW,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,SAAUlO,EAAG,CAAE,OAAOA,EAAE,KAAI,CAAG,CAAC,EAC1EoO,EAAYF,EAAW,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,SAAUlO,EAAG,CAAE,OAAOA,EAAE,KAAI,CAAG,CAAC,EACzEqO,EAAW,CAAE,EACbT,EAAU,CAAE,EACZU,EAAS,CAAE,EACXT,EAAQ,CAAA,EAKZ,IAHAK,EAAW,MAAK,EAChBA,EAAW,MAAK,EAEX5O,EAAI,EAAGA,EAAI4O,EAAW,OAAQ,EAAE5O,EAC/B4O,EAAW5O,CAAC,EAAE,KAAI,IAAO,IAG7B+O,EAAS,KACPH,EAAW5O,CAAC,EACT,MAAM,GAAG,EACT,IAAI,SAAUU,EAAG,CAChB,OAAOA,EAAE,MACrB,CAAW,CACX,EAGI,GAAImO,EAAW,OAASC,EAAU,OAChC,OAAOH,EAGT,IAAK3O,EAAI,EAAGA,EAAI8O,EAAU,OAAQ,EAAE9O,EAClCgP,EAAO,KAAKlB,EAAYgB,EAAU9O,CAAC,CAAC,CAAC,EAGvC,IAAKA,EAAI,EAAGA,EAAI6O,EAAW,OAAQ,EAAE7O,EAC/BjB,EAAS,OAAO,YAAYiQ,EAAOhP,CAAC,CAAC,IACvCgP,EAAOhP,CAAC,EAAI,IAEdsO,EAAQ,KAAKN,EAAaa,EAAW7O,CAAC,EAAGgP,EAAOhP,CAAC,CAAC,CAAC,EAGrD,IAAKA,EAAI,EAAGA,EAAI+O,EAAS,OAAQ,EAAE/O,EAAG,CAEpC,QADIiP,EAAM,CAAA,EACDvJ,EAAK,EAAGA,EAAK4I,EAAQ,OAAQ,EAAE5I,EAClC3G,EAAS,OAAO,YAAYgQ,EAAS/O,CAAC,EAAE0F,CAAE,CAAC,EAG/CuJ,EAAI,KAAKf,EAAWa,EAAS/O,CAAC,EAAE0F,CAAE,EAAGsJ,EAAOtJ,CAAE,CAAC,CAAC,EAElD6I,EAAM,KAAKU,CAAG,CACf,CAED,OAAOZ,EAAWC,EAASC,CAAK,CACjC,CAED,OAAAxN,EAAOsD,EAAQ,UAAU,UAAU,gBAAiBtD,EAAMjC,EAASuF,CAAO,EAG1EtD,EAAOA,EAAK,QAAQ,UAAWhC,EAAS,OAAO,wBAAwB,EAGvEgC,EAAOA,EAAK,QAAQ6M,EAAUc,CAAU,EAGxC3N,EAAOA,EAAK,QAAQ8M,EAAgBa,CAAU,EAE9C3N,EAAOsD,EAAQ,UAAU,UAAU,eAAgBtD,EAAMjC,EAASuF,CAAO,EAElEtD,CACT,CAAC,EAEDhC,EAAS,UAAU,YAAa,SAAUgC,EAAMjC,EAASuF,EAAS,CAGhE,OAAKvF,EAAQ,YAIbiC,EAAOsD,EAAQ,UAAU,UAAU,mBAAoBtD,EAAMjC,EAASuF,CAAO,EAEzEvF,EAAQ,2BACViC,EAAOA,EAAK,QAAQ,0BAA2B,SAAUsF,EAAIjF,EAAK,CAChE,MAAO,MAAQA,EAAM,MAC3B,CAAK,EACDL,EAAOA,EAAK,QAAQ,wBAAyB,SAAUsF,EAAIjF,EAAK,CAC9D,MAAO,MAAQA,EAAM,MAC3B,CAAK,IAEDL,EAAOA,EAAK,QAAQ,sBAAuB,SAAUsF,EAAIrE,EAAG,CAC1D,MAAQ,MAAM,KAAKA,CAAC,EAAK,MAAQA,EAAI,OAASqE,CACpD,CAAK,EACDtF,EAAOA,EAAK,QAAQ,oBAAqB,SAAUsF,EAAIrE,EAAG,CACxD,MAAQ,MAAM,KAAKA,CAAC,EAAK,MAAQA,EAAI,OAASqE,CACpD,CAAK,GAIHtF,EAAOA,EAAK,QAAQ,OAAQhC,EAAS,OAAO,wBAAwB,EAEpEgC,EAAOsD,EAAQ,UAAU,UAAU,kBAAmBtD,EAAMjC,EAASuF,CAAO,GAErEtD,CACT,CAAC,EAKDhC,EAAS,UAAU,uBAAwB,SAAUgC,EAAMjC,EAASuF,EAAS,CAE3E,OAAAtD,EAAOsD,EAAQ,UAAU,UAAU,8BAA+BtD,EAAMjC,EAASuF,CAAO,EAExFtD,EAAOA,EAAK,QAAQ,YAAa,SAAUH,EAAYC,EAAI,CACzD,IAAIqO,EAAoB,SAASrO,CAAE,EACnC,OAAO,OAAO,aAAaqO,CAAiB,CAChD,CAAG,EAEDnO,EAAOsD,EAAQ,UAAU,UAAU,6BAA8BtD,EAAMjC,EAASuF,CAAO,EAChFtD,CACT,CAAC,EAEDhC,EAAS,UAAU,0BAA2B,SAAUgG,EAAMV,EAAS,CAGrE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,gBAIP,QAHIoK,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OAErB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EAAG,CACvC,IAAIC,EAAWtQ,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAEvEgL,IAAa,KAGjBjO,GAAOiO,EACR,CAGH,OAAAjO,EAAMA,EAAI,OACVA,EAAM,KAAOA,EAAI,MAAM;AAAA,CAAI,EAAE,KAAK;AAAA,GAAM,EACjCA,CACT,CAAC,EAEDrC,EAAS,UAAU,yBAA0B,SAAUgG,EAAMV,EAAS,CAGpE,IAAIkE,EAAOxD,EAAK,aAAa,UAAU,EACnCgF,EAAOhF,EAAK,aAAa,YAAY,EACzC,MAAO,MAAQwD,EAAO;AAAA,EAAOlE,EAAQ,QAAQ0F,CAAG,EAAI,OACtD,CAAC,EAEDhL,EAAS,UAAU,wBAAyB,SAAUgG,EAAM,CAG1D,MAAO,IAAMA,EAAK,UAAY,GAChC,CAAC,EAEDhG,EAAS,UAAU,wBAAyB,SAAUgG,EAAMV,EAAS,CAGnE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,gBAAiB,CACxB3D,GAAO,IAGP,QAFI+N,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OACrB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAErEjD,GAAO,GACR,CACD,OAAOA,CACT,CAAC,EAEDrC,EAAS,UAAU,sBAAuB,SAAUgG,EAAMV,EAASiL,EAAa,CAG9E,IAAIC,EAAa,IAAI,MAAMD,EAAc,CAAC,EAAE,KAAK,GAAG,EAChDlO,EAAM,GAEV,GAAI2D,EAAK,gBAAiB,CACxB3D,EAAMmO,EAAa,IAInB,QAHIJ,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OAErBnP,EAAI,EAAGA,EAAIoP,EAAgB,EAAEpP,EACpCoB,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAASnP,CAAC,EAAGqE,CAAO,CAEtE,CACD,OAAOjD,CACT,CAAC,EAEDrC,EAAS,UAAU,kBAAmB,UAAY,CAGhD,MAAO,KACT,CAAC,EAEDA,EAAS,UAAU,qBAAsB,SAAUgG,EAAM,CAGvD,IAAI3D,EAAM,GACV,OAAI2D,EAAK,aAAa,KAAK,IACzB3D,GAAO,KAAO2D,EAAK,aAAa,KAAK,EAAI,KACzC3D,GAAO,IAAM2D,EAAK,aAAa,KAAK,EAAI,IACpCA,EAAK,aAAa,OAAO,GAAKA,EAAK,aAAa,QAAQ,IAC1D3D,GAAO,KAAO2D,EAAK,aAAa,OAAO,EAAI,IAAMA,EAAK,aAAa,QAAQ,GAGzEA,EAAK,aAAa,OAAO,IAC3B3D,GAAO,KAAO2D,EAAK,aAAa,OAAO,EAAI,KAE7C3D,GAAO,KAEFA,CACT,CAAC,EAEDrC,EAAS,UAAU,qBAAsB,SAAUgG,EAAMV,EAAS,CAGhE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,cAAe,GAAIA,EAAK,aAAa,MAAM,EAAG,CACrD,IAAIoK,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OAC9B/N,EAAM,IACN,QAAS,EAAI,EAAG,EAAIgO,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAErEjD,GAAO,KACPA,GAAO,IAAM2D,EAAK,aAAa,MAAM,EAAI,IACrCA,EAAK,aAAa,OAAO,IAC3B3D,GAAO,KAAO2D,EAAK,aAAa,OAAO,EAAI,KAE7C3D,GAAO,GACR,CACD,OAAOA,CACT,CAAC,EAEDrC,EAAS,UAAU,oBAAqB,SAAUgG,EAAMV,EAASnE,EAAM,CAGrE,IAAIkB,EAAM,GACV,GAAI,CAAC2D,EAAK,gBACR,MAAO,GAMT,QAJIyK,EAAkBzK,EAAK,WACvB0K,EAAkBD,EAAU,OAC5BE,EAAU3K,EAAK,aAAa,OAAO,GAAK,EAEnC/E,EAAI,EAAGA,EAAIyP,EAAiB,EAAEzP,EACrC,GAAI,SAAOwP,EAAUxP,CAAC,EAAE,QAAY,KAAewP,EAAUxP,CAAC,EAAE,QAAQ,YAAW,IAAO,MAK1F,KAAI2P,EAAS,GACTzP,IAAS,KACXyP,EAASD,EAAQ,SAAU,EAAG,KAE9BC,EAAS,KAIXvO,GAAOuO,EAAS5Q,EAAS,UAAU,uBAAuB,EAAEyQ,EAAUxP,CAAC,EAAGqE,CAAO,EACjF,EAAEqL,EAIJ,OAAAtO,GAAO;AAAA;AAAA,EACAA,EAAI,MACb,CAAC,EAEDrC,EAAS,UAAU,wBAAyB,SAAUgG,EAAMV,EAAS,CAQnE,QALIuL,EAAc,GAEdT,EAAWpK,EAAK,WAChB8K,EAAiBV,EAAS,OAErB,EAAI,EAAG,EAAIU,EAAgB,EAAE,EACpCD,GAAe7Q,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAG7E,MAAK,MAAM,KAAKuL,CAAW,EAIzBA,EAAcA,EACX,MAAM;AAAA,CAAI,EACV,KAAK;AAAA,KAAQ,EACb,QAAQ,WAAY,EAAE,EACtB,QAAQ,SAAU;AAAA;AAAA,CAAM,EAP3BA,GAAe;AAAA,EAUVA,CACT,CAAC,EAID7Q,EAAS,UAAU,oBAAqB,SAAUgG,EAAMV,EAASyL,EAAW,CAG1EA,EAAYA,GAAa,GAEzB,IAAI1O,EAAM,GAGV,GAAI2D,EAAK,WAAa,EACpB,OAAOhG,EAAS,UAAU,kBAAkB,EAAEgG,EAAMV,CAAO,EAI7D,GAAIU,EAAK,WAAa,EACpB,MAAO,OAASA,EAAK,KAAO;AAAA;AAAA,EAI9B,GAAIA,EAAK,WAAa,EACpB,MAAO,GAGT,IAAIgL,EAAUhL,EAAK,QAAQ,YAAW,EAEtC,OAAQgL,EAAO,CAKb,IAAK,KACED,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MACF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MACF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MACF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MACF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MACF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,EAAS,CAAC,EAAI;AAAA;AAAA,GACtF,MAEF,IAAK,IACEyL,IAAa1O,EAAMrC,EAAS,UAAU,wBAAwB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GACtF,MAEF,IAAK,aACEyL,IAAa1O,EAAMrC,EAAS,UAAU,yBAAyB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GACvF,MAEF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,iBAAiB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GAC/E,MAEF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,mBAAmB,EAAEgG,EAAMV,EAAS,IAAI,EAAI;AAAA;AAAA,GACvF,MAEF,IAAK,KACEyL,IAAa1O,EAAMrC,EAAS,UAAU,mBAAmB,EAAEgG,EAAMV,EAAS,IAAI,EAAI;AAAA;AAAA,GACvF,MAEF,IAAK,UACEyL,IAAa1O,EAAMrC,EAAS,UAAU,wBAAwB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GACtF,MAEF,IAAK,MACEyL,IAAa1O,EAAMrC,EAAS,UAAU,kBAAkB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GAChF,MAEF,IAAK,QACEyL,IAAa1O,EAAMrC,EAAS,UAAU,oBAAoB,EAAEgG,EAAMV,CAAO,EAAI;AAAA;AAAA,GAClF,MAKF,IAAK,OACHjD,EAAMrC,EAAS,UAAU,uBAAuB,EAAEgG,EAAMV,CAAO,EAC/D,MAEF,IAAK,KACL,IAAK,IACHjD,EAAMrC,EAAS,UAAU,uBAAuB,EAAEgG,EAAMV,CAAO,EAC/D,MAEF,IAAK,SACL,IAAK,IACHjD,EAAMrC,EAAS,UAAU,qBAAqB,EAAEgG,EAAMV,CAAO,EAC7D,MAEF,IAAK,MACHjD,EAAMrC,EAAS,UAAU,4BAA4B,EAAEgG,EAAMV,CAAO,EACpE,MAEF,IAAK,IACHjD,EAAMrC,EAAS,UAAU,oBAAoB,EAAEgG,EAAMV,CAAO,EAC5D,MAEF,IAAK,MACHjD,EAAMrC,EAAS,UAAU,oBAAoB,EAAEgG,EAAMV,CAAO,EAC5D,MAEF,QACEjD,EAAM2D,EAAK,UAAY;AAAA;AAAA,CAC1B,CAKD,OAAO3D,CACT,CAAC,EAEDrC,EAAS,UAAU,yBAA0B,SAAUgG,EAAMV,EAAS,CAGpE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,gBAGP,QAFIoK,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OACrB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAKvE,OAAAjD,EAAMA,EAAI,OAEHA,CACT,CAAC,EAEDrC,EAAS,UAAU,mBAAoB,SAAUgG,EAAMV,EAAS,CAG9D,IAAI0F,EAAOhF,EAAK,aAAa,QAAQ,EACrC,MAAO,QAAUV,EAAQ,QAAQ0F,CAAG,EAAI,QAC1C,CAAC,EAEDhL,EAAS,UAAU,6BAA8B,SAAUgG,EAAMV,EAAS,CAGxE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,gBAAiB,CACxB3D,GAAO,KAGP,QAFI+N,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OACrB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAErEjD,GAAO,IACR,CACD,OAAOA,CACT,CAAC,EAEDrC,EAAS,UAAU,sBAAuB,SAAUgG,EAAMV,EAAS,CAGjE,IAAIjD,EAAM,GACV,GAAI2D,EAAK,gBAAiB,CACxB3D,GAAO,KAGP,QAFI+N,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OACrB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,CAAO,EAErEjD,GAAO,IACR,CACD,OAAOA,CACT,CAAC,EAEDrC,EAAS,UAAU,qBAAsB,SAAUgG,EAAMV,EAAS,CAGhE,IAAIjD,EAAM,GACN4O,EAAa,CAAC,CAAE,EAAE,EAAE,EACpBC,EAAalL,EAAK,iBAAiB,aAAa,EAChDmL,EAAanL,EAAK,iBAAiB,UAAU,EAC7C/E,EAAG0F,EACP,IAAK1F,EAAI,EAAGA,EAAIiQ,EAAS,OAAQ,EAAEjQ,EAAG,CACpC,IAAImQ,EAAcpR,EAAS,UAAU,wBAAwB,EAAEkR,EAASjQ,CAAC,EAAGqE,CAAO,EAC/E+L,EAAS,MAEb,GAAIH,EAASjQ,CAAC,EAAE,aAAa,OAAO,EAAG,CACrC,IAAIiN,EAAQgD,EAASjQ,CAAC,EAAE,aAAa,OAAO,EAAE,cAAc,QAAQ,MAAO,EAAE,EAC7E,OAAQiN,EAAK,CACX,IAAK,mBACHmD,EAAS,OACT,MACF,IAAK,oBACHA,EAAS,OACT,MACF,IAAK,qBACHA,EAAS,QACT,KACH,CACF,CACDJ,EAAW,CAAC,EAAEhQ,CAAC,EAAImQ,EAAY,KAAI,EACnCH,EAAW,CAAC,EAAEhQ,CAAC,EAAIoQ,CACpB,CAED,IAAKpQ,EAAI,EAAGA,EAAIkQ,EAAK,OAAQ,EAAElQ,EAAG,CAChC,IAAIgD,EAAIgN,EAAW,KAAK,CAAA,CAAE,EAAI,EAC1BK,EAAOH,EAAKlQ,CAAC,EAAE,qBAAqB,IAAI,EAE5C,IAAK0F,EAAK,EAAGA,EAAKuK,EAAS,OAAQ,EAAEvK,EAAI,CACvC,IAAI4K,EAAc,IACd,OAAOD,EAAK3K,CAAE,EAAM,MACtB4K,EAAcvR,EAAS,UAAU,wBAAwB,EAAEsR,EAAK3K,CAAE,EAAGrB,CAAO,GAE9E2L,EAAWhN,CAAC,EAAE,KAAKsN,CAAW,CAC/B,CACF,CAED,IAAIC,EAAkB,EACtB,IAAKvQ,EAAI,EAAGA,EAAIgQ,EAAW,OAAQ,EAAEhQ,EACnC,IAAK0F,EAAK,EAAGA,EAAKsK,EAAWhQ,CAAC,EAAE,OAAQ,EAAE0F,EAAI,CAC5C,IAAI8K,EAASR,EAAWhQ,CAAC,EAAE0F,CAAE,EAAE,OAC3B8K,EAASD,IACXA,EAAkBC,EAErB,CAGH,IAAKxQ,EAAI,EAAGA,EAAIgQ,EAAW,OAAQ,EAAEhQ,EAAG,CACtC,IAAK0F,EAAK,EAAGA,EAAKsK,EAAWhQ,CAAC,EAAE,OAAQ,EAAE0F,EACpC1F,IAAM,EACJgQ,EAAWhQ,CAAC,EAAE0F,CAAE,EAAE,MAAM,EAAE,IAAM,IAClCsK,EAAWhQ,CAAC,EAAE0F,CAAE,EAAI3G,EAAS,OAAO,OAAOiR,EAAWhQ,CAAC,EAAE0F,CAAE,EAAE,MAAM,EAAE,EAAG6K,EAAkB,EAAG,GAAG,EAAI,IAEpGP,EAAWhQ,CAAC,EAAE0F,CAAE,EAAI3G,EAAS,OAAO,OAAOiR,EAAWhQ,CAAC,EAAE0F,CAAE,EAAG6K,EAAiB,GAAG,EAGpFP,EAAWhQ,CAAC,EAAE0F,CAAE,EAAI3G,EAAS,OAAO,OAAOiR,EAAWhQ,CAAC,EAAE0F,CAAE,EAAG6K,CAAe,EAGjFnP,GAAO,KAAO4O,EAAWhQ,CAAC,EAAE,KAAK,KAAK,EAAI;AAAA,CAC3C,CAED,OAAOoB,EAAI,MACb,CAAC,EAEDrC,EAAS,UAAU,yBAA0B,SAAUgG,EAAMV,EAAS,CAGpE,IAAIjD,EAAM,GACV,GAAI,CAAC2D,EAAK,gBACR,MAAO,GAKT,QAHIoK,EAAWpK,EAAK,WAChBqK,EAAiBD,EAAS,OAErB,EAAI,EAAG,EAAIC,EAAgB,EAAE,EACpChO,GAAOrC,EAAS,UAAU,mBAAmB,EAAEoQ,EAAS,CAAC,EAAG9K,EAAS,EAAI,EAE3E,OAAOjD,EAAI,MACb,CAAC,EAEDrC,EAAS,UAAU,mBAAoB,SAAUgG,EAAM,CAGrD,IAAI3D,EAAM2D,EAAK,UAGf,OAAA3D,EAAMA,EAAI,QAAQ,MAAO,GAAG,EAG5BA,EAAMA,EAAI,QAAQ,UAAW,GAAG,EAGhCA,EAAMrC,EAAS,OAAO,qBAAqBqC,CAAG,EAM9CA,EAAMA,EAAI,QAAQ,aAAc,MAAM,EAGtCA,EAAMA,EAAI,QAAQ,WAAY,OAAO,EAGrCA,EAAMA,EAAI,QAAQ,OAAQ,KAAK,EAG/BA,EAAMA,EAAI,QAAQ,yBAA0B,UAAU,EAGtDA,EAAMA,EAAI,QAAQ,mBAAoB,OAAO,EAG7CA,EAAMA,EAAI,QAAQ,oBAAqB,QAAQ,EAG/CA,EAAMA,EAAI,QAAQ,cAAe,UAAU,EAG3CA,EAAMA,EAAI,QAAQ,2BAA4B,SAAS,EAEhDA,CACT,CAAC,EAED,IAAIqP,GAAO,KAUiCC,EAAO,QACjDA,EAAA,QAAiB3R,EAIjB0R,GAAK,SAAW1R,CAElB,GAAG,KAAK4R,EAAI,wCC5hKNC,GAAY,IAAI7R,GAAS,UASzB8R,GAASC,GAAU,EAOZC,GAAa,MAAOC,EAA2BC,EAAa,KAAU,CAE5E,MAAAC,EAAO,MADD,MAAM,MAAM,+BAA+B,GAChC,OACvBL,GAAO,KAAKK,EAAM,gBAAgB,EAAE,KAAK,IAAM,CAC9CC,GAAc,SAAS,cAAc,YAAY,EAAkBH,EAAOC,CAAU,CAAA,CACpF,CACF,EAMMG,EAAqBC,GAAyC,CAC7D,MAAAC,EAAc,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAC9CA,EAAY,UAAU,IAAI,uBAAuBD,EAAQ,IAAI,EAAE,EAEzD,MAAAE,EAAqB,SAAS,cAAc,KAAK,EAKvD,GAJmBA,EAAA,UAAU,IAAI,6BAA6B,EAC9DA,EAAmB,UAAYX,GAAU,SAASS,EAAQ,IAAI,EAG1DA,EAAQ,QAAS,CACd,MAAAG,EAAa,SAAS,cAAc,IAAI,EACnCA,EAAA,UAAU,IAAI,6BAA6B,EAC9CH,EAAA,QAAQ,QAASI,GAAW,CAC7B,MAAAC,EAAiB,SAAS,cAAc,IAAI,EACnCA,EAAA,UAAU,IAAI,mCAAmC,EAC1D,MAAAC,EAAa,SAAS,cAAc,GAAG,EAClCA,EAAA,aAAa,OAAQF,EAAO,GAAG,EAC1CE,EAAW,YAAcF,EAAO,MAChCC,EAAe,YAAYC,CAAU,EACrCH,EAAW,YAAYE,CAAc,CAAA,CACrC,EACDH,EAAmB,YAAYC,CAAU,CAC1C,CAEA,OAAAF,EAAY,YAAYC,CAAkB,EAEnCD,CACR,EAQMH,GAAgB,CAACS,EAAsBZ,EAA2BC,IAAwB,CACzF,MAAAY,EAAOD,EAAQ,cAA+B,sBAAsB,EACpEE,EAAQF,EAAQ,cAAgC,kCAAkC,EAClFG,EAAWH,EAAQ,cAA8B,sBAAsB,EAGvEI,EAAU,6BAA+B,OAAO,SAAS,SACzDC,EAAahB,EAAae,EAAU,OAE1C,GAAI,CAACH,GAAQ,CAACC,GAAS,CAACC,EACvB,OAGDD,EAAM,MAAM,EAGZF,EAAQ,iBAA8B,4BAA4B,EAAE,QAASM,GAAmB,CACzF,MAAAC,EAAWD,EAAe,QAAQ,aACzBA,EAAA,iBAAiB,QAAS,IAAM,CAC9B7T,EAAA,gBAAgB,CAAE,UAAW,OAAO,YAAY,UAAW,SAAA8T,CAAU,CAAA,EAAE,KAAMC,GAAa,CACzGA,EAAS,SAAWR,EAAQ,UAAU,OAAO,yBAAyB,CAAA,CACtE,CAAA,CACD,CAAA,CACD,EAGK,MAAAS,EAAe,MAAOC,GAA4B,CAClDT,EAAA,aAAa,YAAa,MAAM,EAC/B,MAAAU,EAAW,IAAI,SAASV,CAAuB,EAE/CW,EAAWF,GAAkBC,EAAS,IAAI,oBAAoB,EAEpE,GAAI,CAACC,EACJ,OAGDV,EAAM,MAAQ,GAEd,MAAMW,EAAkBrB,EAAkB,CACzC,KAAMoB,EACN,KAAM,WACN,UAAW,IAAI,KAAK,EAAE,YAAY,CAAA,CAClC,EAEM,OAAA,YAAY,SAAS,KAAKC,CAAe,EAEhDV,EAAS,YAAYU,CAAe,EAE9B,MAAAC,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,MAAM,MAAQ,OACtBA,EAAQ,MAAM,UAAY,OAC1BC,GAAUD,CAAO,EACjBX,EAAS,YAAYW,CAAO,EACnBX,EAAA,SAAS,EAAGA,EAAS,YAAY,EAE1C,KAAM,CAAE,KAAAb,EAAM,MAAA0B,CAAU,EAAA,MAAMvU,EAAgB,aAAa,CAC1D,SAAAmU,EACA,UAAW,OAAO,YAAY,UAC9B,WAAAP,CAAA,CACA,EAEG,GAAA,CAACf,GAAQ0B,EAAO,OAEpB,MAAMC,EAAkBzB,EAAkB,CAAE,KAAMF,EAAK,SAAU,KAAM,WAAY,UAAWA,EAAK,UAAW,QAASA,EAAK,QAAS,EAErIa,EAAS,YAAYW,CAAO,EAErB,OAAA,YAAY,UAAYxB,EAAK,UAC7B,OAAA,YAAY,SAAS,KAAK2B,CAAe,EAEhDd,EAAS,YAAYc,CAAe,EAC/BhB,EAAA,aAAa,YAAa,OAAO,EAC7BE,EAAA,SAAS,EAAGA,EAAS,YAAY,CAAA,EAIvCf,IACKY,EAAA,UAAU,IAAI,yBAAyB,EAC/CS,EAAarB,CAAK,GAGda,EAAA,iBAAiB,SAAU,MAAOiB,GAAM,CAC5CA,EAAE,eAAe,EACJT,GAAA,CACb,EAEK,MAAAU,EAAelB,EAAK,cAAc,0BAA0B,EACpDkB,GAAA,MAAAA,EAAA,iBAAiB,QAAS,SAAY,CACtCV,GAAA,GAGG,IAAI,iBAAiB,IAAM,CACvC,OAAO,YAAY,SAAS,OAAS,EAChCT,EAAA,UAAU,IAAI,yBAAyB,EAEvCA,EAAA,UAAU,OAAO,yBAAyB,EAG/C,OAAO,YAAY,UACdA,EAAA,UAAU,IAAI,yBAAyB,EAEvCA,EAAA,UAAU,OAAO,yBAAyB,CACnD,CACA,EAEQ,QAAQG,EAAU,CAAE,QAAS,GAAM,UAAW,GAAM,CAC9D,ECxKMiB,GAAmBpB,GAAkB,CAErC,OAAO,cACX,OAAO,YAAc,CACpB,SAAU,CAAC,EACX,UAAW,GACX,UAAW,EAAA,GAILA,EAAA,iBAAiB,QAAS,SAAY,CACzC,IAAAZ,EACAC,EAAsB,GAEtB,GAAAW,EAAQ,QAAQ,YAAa,CAChC,MAAMqB,EAAQ,KAAK,MAAMrB,EAAQ,QAAQ,WAAW,EAChDqB,EAAM,QAAOjC,EAAQiC,EAAM,OAC3BA,EAAM,aAAYhC,EAAagC,EAAM,WAC1C,CAEAlC,GAAWC,EAAOC,CAAU,CAAA,CAC5B,CACF","x_google_ignoreList":[1]}